Skip to content

Commit

Permalink
adding otel attributes to config_telemetry (#15084)
Browse files Browse the repository at this point in the history
* adding otel attributes to config_telemetry

* removing test log line and adding tests

* using epsilon compare for floating point
  • Loading branch information
patrickhuie19 authored Nov 8, 2024
1 parent 45db6b7 commit c759978
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 1 deletion.
1 change: 1 addition & 0 deletions core/cmd/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ func initGlobals(cfgProm config.Prometheus, cfgTracing config.Tracing, cfgTeleme
for k, v := range cfgTelemetry.ResourceAttributes() {
attributes = append(attributes, attribute.String(k, v))
}

clientCfg := beholder.Config{
InsecureConnection: cfgTelemetry.InsecureConnection(),
CACertFile: cfgTelemetry.CACertFile(),
Expand Down
19 changes: 18 additions & 1 deletion core/services/chainlink/config_telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package chainlink

import (
"github.com/smartcontractkit/chainlink/v2/core/config/toml"
"github.com/smartcontractkit/chainlink/v2/core/static"
)

type telemetryConfig struct {
Expand Down Expand Up @@ -31,8 +32,24 @@ func (b *telemetryConfig) OtelExporterGRPCEndpoint() string {
return *b.s.Endpoint
}

// ResourceAttributes returns the resource attributes set in the TOML config
// by the user, but first sets OTEL required attributes:
//
// service.name
// service.version
//
// These can be overridden by the TOML if the user so chooses
func (b *telemetryConfig) ResourceAttributes() map[string]string {
return b.s.ResourceAttributes
defaults := map[string]string{
"service.name": "chainlink",
"service.version": static.Version,
}

for k, v := range b.s.ResourceAttributes {
defaults[k] = v
}

return defaults
}

func (b *telemetryConfig) TraceSampleRatio() float64 {
Expand Down
142 changes: 142 additions & 0 deletions core/services/chainlink/config_telemetry_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package chainlink

import (
"testing"

"github.com/stretchr/testify/assert"

"github.com/smartcontractkit/chainlink/v2/core/config/toml"
"github.com/smartcontractkit/chainlink/v2/core/static"
)

func TestTelemetryConfig_Enabled(t *testing.T) {
trueVal := true
falseVal := false

tests := []struct {
name string
telemetry toml.Telemetry
expected bool
}{
{"EnabledTrue", toml.Telemetry{Enabled: &trueVal}, true},
{"EnabledFalse", toml.Telemetry{Enabled: &falseVal}, false},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.Equal(t, tt.expected, tc.Enabled())
})
}
}

func TestTelemetryConfig_InsecureConnection(t *testing.T) {
trueVal := true
falseVal := false

tests := []struct {
name string
telemetry toml.Telemetry
expected bool
}{
{"InsecureConnectionTrue", toml.Telemetry{InsecureConnection: &trueVal}, true},
{"InsecureConnectionFalse", toml.Telemetry{InsecureConnection: &falseVal}, false},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.Equal(t, tt.expected, tc.InsecureConnection())
})
}
}

func TestTelemetryConfig_CACertFile(t *testing.T) {
tests := []struct {
name string
telemetry toml.Telemetry
expected string
}{
{"CACertFileSet", toml.Telemetry{CACertFile: ptr("test.pem")}, "test.pem"},
{"CACertFileNil", toml.Telemetry{CACertFile: nil}, ""},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.Equal(t, tt.expected, tc.CACertFile())
})
}
}

func TestTelemetryConfig_OtelExporterGRPCEndpoint(t *testing.T) {
tests := []struct {
name string
telemetry toml.Telemetry
expected string
}{
{"EndpointSet", toml.Telemetry{Endpoint: ptr("localhost:4317")}, "localhost:4317"},
{"EndpointNil", toml.Telemetry{Endpoint: nil}, ""},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.Equal(t, tt.expected, tc.OtelExporterGRPCEndpoint())
})
}
}

func TestTelemetryConfig_ResourceAttributes(t *testing.T) {
tests := []struct {
name string
telemetry toml.Telemetry
expected map[string]string
}{
{
"DefaultAttributes",
toml.Telemetry{ResourceAttributes: nil},
map[string]string{
"service.name": "chainlink",
"service.version": static.Version,
},
},
{
"CustomAttributes",
toml.Telemetry{ResourceAttributes: map[string]string{"custom.key": "custom.value"}},
map[string]string{
"service.name": "chainlink",
"service.version": static.Version,
"custom.key": "custom.value",
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.Equal(t, tt.expected, tc.ResourceAttributes())
})
}
}

func TestTelemetryConfig_TraceSampleRatio(t *testing.T) {
tests := []struct {
name string
telemetry toml.Telemetry
expected float64
}{
{"TraceSampleRatioSet", toml.Telemetry{TraceSampleRatio: ptrFloat(0.5)}, 0.5},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := telemetryConfig{s: tt.telemetry}
assert.InEpsilon(t, tt.expected, tc.TraceSampleRatio(), 0.0001)
})
}
}

func ptrFloat(f float64) *float64 {
return &f
}

0 comments on commit c759978

Please sign in to comment.