traefik/vendor/github.com/instana/go-sensor/sensor.go
2019-02-18 16:52:03 +01:00

76 lines
1.5 KiB
Go

package instana
import (
"os"
"path/filepath"
)
const (
DefaultMaxBufferedSpans = 1000
DefaultForceSpanSendAt = 500
)
type sensorS struct {
meter *meterS
agent *agentS
options *Options
serviceName string
}
var sensor *sensorS
func (r *sensorS) init(options *Options) {
//sensor can be initialized explicit or implicit through OpenTracing global init
if r.meter == nil {
r.setOptions(options)
r.configureServiceName()
r.agent = r.initAgent()
r.meter = r.initMeter()
}
}
func (r *sensorS) setOptions(options *Options) {
r.options = options
if r.options == nil {
r.options = &Options{}
}
if r.options.MaxBufferedSpans == 0 {
r.options.MaxBufferedSpans = DefaultMaxBufferedSpans
}
if r.options.ForceTransmissionStartingAt == 0 {
r.options.ForceTransmissionStartingAt = DefaultForceSpanSendAt
}
}
func (r *sensorS) getOptions() *Options {
return r.options
}
func (r *sensorS) configureServiceName() {
if r.options != nil {
r.serviceName = r.options.Service
}
if r.serviceName == "" {
r.serviceName = filepath.Base(os.Args[0])
}
}
// InitSensor Intializes the sensor (without tracing) to begin collecting
// and reporting metrics.
func InitSensor(options *Options) {
if sensor == nil {
sensor = new(sensorS)
// If this environment variable is set, then override log level
_, ok := os.LookupEnv("INSTANA_DEV")
if ok {
options.LogLevel = Debug
}
sensor.initLog()
sensor.init(options)
log.debug("initialized sensor")
}
}