plugins/toolkit-activation/instrument.go (194 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 traceactivation
import (
"embed"
"github.com/apache/skywalking-go/plugins/core/instrument"
)
//go:embed *
var fs embed.FS
//skywalking:nocopy
type Instrument struct {
}
func NewInstrument() *Instrument {
return &Instrument{}
}
func (i *Instrument) Name() string {
return "toolkit-activation"
}
func (i *Instrument) BasePackage() string {
return "github.com/apache/skywalking-go/toolkit"
}
func (i *Instrument) VersionChecker(version string) bool {
return true
}
func (i *Instrument) Points() []*instrument.Point {
var instPoints []*instrument.Point
// append toolkit/trace related enhancements Point
instPoints = append(instPoints, tracePoint()...)
// append toolkit/logging related enhancements Point
instPoints = append(instPoints, loggingPoint()...)
// append toolkit/metric related enhancements Point
instPoints = append(instPoints, metricPoint()...)
return instPoints
}
func metricPoint() []*instrument.Point {
return []*instrument.Point{
// Counter metric type related enhancement point
{
PackagePath: "metric", At: instrument.NewStructEnhance("CounterRef"),
},
{
PackagePath: "metric", At: instrument.NewStaticMethodEnhance("NewCounter"),
Interceptor: "NewCounterInterceptor",
},
{
PackagePath: "metric", At: instrument.NewMethodEnhance("*CounterRef", "Get"),
Interceptor: "CounterGetInterceptor",
},
{
PackagePath: "metric", At: instrument.NewMethodEnhance("*CounterRef", "Inc"),
Interceptor: "CounterIncInterceptor",
},
// Gauge metric type related enhancement point
{
PackagePath: "metric", At: instrument.NewStructEnhance("GaugeRef"),
},
{
PackagePath: "metric", At: instrument.NewStaticMethodEnhance("NewGauge"),
Interceptor: "NewGaugeInterceptor",
},
{
PackagePath: "metric", At: instrument.NewMethodEnhance("*GaugeRef", "Get"),
Interceptor: "GaugeGetInterceptor",
},
// Histogram metric type related enhancement point
{
PackagePath: "metric", At: instrument.NewStructEnhance("HistogramRef"),
},
{
PackagePath: "metric", At: instrument.NewStaticMethodEnhance("NewHistogram"),
Interceptor: "NewHistogramInterceptor",
},
{
PackagePath: "metric", At: instrument.NewMethodEnhance("*HistogramRef", "Observe"),
Interceptor: "HistogramObserveInterceptor",
},
{
PackagePath: "metric", At: instrument.NewMethodEnhance("*HistogramRef", "ObserveWithCount"),
Interceptor: "HistogramObserveWithCountInterceptor",
},
// metric options related enhancement point
{
PackagePath: "metric", At: instrument.NewStaticMethodEnhance("WithLabels"),
Interceptor: "WithLabelsInterceptor",
},
}
}
func tracePoint() []*instrument.Point {
return []*instrument.Point{
{
PackagePath: "trace", At: instrument.NewStructEnhance("SpanRef"),
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("CreateEntrySpan"),
Interceptor: "CreateEntrySpanInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("CreateLocalSpan"),
Interceptor: "CreateLocalSpanInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("CreateExitSpan"),
Interceptor: "CreateExitSpanInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("StopSpan"),
Interceptor: "StopSpanInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("CaptureContext"),
Interceptor: "CaptureContextInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("ContinueContext"),
Interceptor: "ContinueContextInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("GetTraceID"),
Interceptor: "GetTraceIDInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("GetSegmentID"),
Interceptor: "GetSegmentIDInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("GetSpanID"),
Interceptor: "GetSpanIDInterceptor",
},
{
PackagePath: "trace", At: instrument.NewMethodEnhance("*SpanRef", "SetTag"),
Interceptor: "AsyncTagInterceptor",
},
{
PackagePath: "trace", At: instrument.NewMethodEnhance("*SpanRef", "AddLog"),
Interceptor: "AsyncLogInterceptor",
},
{
PackagePath: "trace", At: instrument.NewMethodEnhance("*SpanRef", "AddEvent"),
Interceptor: "AsyncAddEventInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("AddEvent"),
Interceptor: "AddEventInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("AddLog"),
Interceptor: "AddLogInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("SetTag"),
Interceptor: "SetTagInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("SetOperationName"),
Interceptor: "SetOperationNameInterceptor",
},
{
PackagePath: "trace", At: instrument.NewMethodEnhance("*SpanRef", "PrepareAsync"),
Interceptor: "PrepareAsyncInterceptor",
},
{
PackagePath: "trace", At: instrument.NewMethodEnhance("*SpanRef", "AsyncFinish"),
Interceptor: "AsyncFinishInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("GetCorrelation"),
Interceptor: "GetCorrelationInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("SetCorrelation"),
Interceptor: "SetCorrelationInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("SetComponent"),
Interceptor: "SetComponentInterceptor",
},
{
PackagePath: "trace", At: instrument.NewStaticMethodEnhance("Error"),
Interceptor: "ErrorIntercepter",
},
}
}
func loggingPoint() []*instrument.Point {
return []*instrument.Point{
{
PackagePath: "logging", At: instrument.NewStaticMethodEnhance("Debug"),
Interceptor: "DebugEntryInterceptor",
},
{
PackagePath: "logging", At: instrument.NewStaticMethodEnhance("Info"),
Interceptor: "InfoEntryInterceptor",
},
{
PackagePath: "logging", At: instrument.NewStaticMethodEnhance("Warn"),
Interceptor: "WarnEntryInterceptor",
},
{
PackagePath: "logging", At: instrument.NewStaticMethodEnhance("Error"),
Interceptor: "ErrorEntryInterceptor",
},
}
}
func (i *Instrument) FS() *embed.FS {
return &fs
}