77 lines
1.5 KiB
Go
77 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")
|
||
|
}
|
||
|
}
|