plugins/core/tracing/span.go (78 lines of code) (raw):
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package tracing
// Extractor is a tool specification which define how to
// extract trace parent context from propagation context
type Extractor func(headerKey string) (string, error)
// Injector is a tool specification which define how to
// inject trace context into propagation context
type Injector func(headerKey, headerValue string) error
// SpanOption allows for functional options to adjust behavior
// of a AdaptSpan to be created by CreateLocalSpan
type SpanOption interface {
Apply(interface{})
}
// SpanLayer define the Span belong to which layer
type SpanLayer int32
var (
SpanLayerDatabase int32 = 1
SpanLayerRPCFramework int32 = 2
SpanLayerHTTP int32 = 3
SpanLayerMQ int32 = 4
SpanLayerCache int32 = 5
SpanLayerFAAS int32 = 6
)
// Tag are supported by sky-walking engine.
// As default, all Tags will be stored, but these ones have
// particular meanings.
type Tag string
const (
TagURL = "url"
TagStatusCode = "status_code"
TagHTTPMethod = "http.method"
TagHTTPParams = "http.params"
TagDBType = "db.type"
TagDBInstance = "db.instance"
TagDBStatement = "db.statement"
TagDBSqlParameters = "db.sql.parameters"
TagMQQueue = "mq.queue"
TagMQBroker = "mq.broker"
TagMQTopic = "mq.topic"
TagCacheType = "cache.type"
TagCacheOp = "cache.op"
TagCacheCmd = "cache.cmd"
TagCacheKey = "cache.key"
TagCacheArgs = "cache.args"
)
// WithLayer set the SpanLayer of the Span
func WithLayer(layer int32) SpanOption {
return buildSpanOption(func(s AdaptSpan) {
s.SetSpanLayer(layer)
})
}
// WithComponent set the component id of the Span
func WithComponent(componentID int32) SpanOption {
return buildSpanOption(func(s AdaptSpan) {
s.SetComponent(componentID)
})
}
// WithTag set the Tag of the Span
func WithTag(key Tag, value string) SpanOption {
return buildSpanOption(func(s AdaptSpan) {
s.Tag(string(key), value)
})
}
type spanOpImpl struct {
exe func(s AdaptSpan)
}
func (s *spanOpImpl) Apply(span interface{}) {
s.exe(span.(AdaptSpan))
}
func buildSpanOption(e func(s AdaptSpan)) SpanOption {
return &spanOpImpl{exe: e}
}
type ExtractorWrapper interface {
Fun() func(headerKey string) (string, error)
}
type InjectorWrapper interface {
Fun() func(headerKey, headerValue string) error
}
// Span for plugin API
type Span interface {
// AsyncSpan Async API
AsyncSpan
// TraceID of span
TraceID() string
// TraceSegmentID current segment ID of span
TraceSegmentID() string
// SpanID of span
SpanID() int32
// Tag set the Tag of the Span
Tag(string, string)
// SetSpanLayer set the SpanLayer of the Span
SetSpanLayer(int32)
// SetOperationName re-set the operation name of the Span
SetOperationName(string)
// SetPeer re-set the peer address of the Span
SetPeer(string)
// SetComponent re-set the component id of the Span
SetComponent(int32)
// Log add log to the Span
Log(...string)
// Error add error log to the Span
Error(...string)
// End end the Span
End()
}