Skip to content

Commit 6347773

Browse files
committed
clean up
Signed-off-by: alex boten <[email protected]>
1 parent d26dad5 commit 6347773

File tree

6 files changed

+169
-829
lines changed

6 files changed

+169
-829
lines changed

otelconf/config_common.go

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package otelconf // import "go.opentelemetry.io/contrib/otelconf"
55

66
import (
77
"context"
8+
"encoding/json"
89
"errors"
910
"fmt"
1011
"reflect"
@@ -13,6 +14,7 @@ import (
1314
sdklog "go.opentelemetry.io/otel/sdk/log"
1415
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
1516
sdktrace "go.opentelemetry.io/otel/sdk/trace"
17+
yaml "go.yaml.in/yaml/v3"
1618
)
1719

1820
const (
@@ -127,6 +129,53 @@ func newErrInvalid(id string) error {
127129
return &errInvalid{Identifier: id}
128130
}
129131

132+
// unmarshalSamplerTypes handles always_on and always_off sampler unmarshaling.
133+
func unmarshalSamplerTypes(raw map[string]any, plain *Sampler) {
134+
// always_on can be nil, must check and set here
135+
if _, ok := raw["always_on"]; ok {
136+
plain.AlwaysOn = AlwaysOnSampler{}
137+
}
138+
// always_off can be nil, must check and set here
139+
if _, ok := raw["always_off"]; ok {
140+
plain.AlwaysOff = AlwaysOffSampler{}
141+
}
142+
}
143+
144+
// unmarshalTextMapPropagatorTypes handles all propagator type unmarshaling.
145+
func unmarshalTextMapPropagatorTypes(raw map[string]any, plain *TextMapPropagator) {
146+
// b3 can be nil, must check and set here
147+
if v, ok := raw["b3"]; ok && v == nil {
148+
plain.B3 = B3Propagator{}
149+
}
150+
if v, ok := raw["b3multi"]; ok && v == nil {
151+
plain.B3Multi = B3MultiPropagator{}
152+
}
153+
if v, ok := raw["baggage"]; ok && v == nil {
154+
plain.Baggage = BaggagePropagator{}
155+
}
156+
if v, ok := raw["jaeger"]; ok && v == nil {
157+
plain.Jaeger = JaegerPropagator{}
158+
}
159+
if v, ok := raw["ottrace"]; ok && v == nil {
160+
plain.Ottrace = OpenTracingPropagator{}
161+
}
162+
if v, ok := raw["tracecontext"]; ok && v == nil {
163+
plain.Tracecontext = TraceContextPropagator{}
164+
}
165+
}
166+
167+
// unmarshalMetricProducer handles opencensus metric producer unmarshaling.
168+
func unmarshalMetricProducer(raw map[string]any, plain *MetricProducer) {
169+
// opencensus can be nil, must check and set here
170+
if v, ok := raw["opencensus"]; ok && v == nil {
171+
delete(raw, "opencensus")
172+
plain.Opencensus = OpenCensusMetricProducer{}
173+
}
174+
if len(raw) > 0 {
175+
plain.AdditionalProperties = raw
176+
}
177+
}
178+
130179
// validatePeriodicMetricReader handles validation for PeriodicMetricReader.
131180
func validatePeriodicMetricReader(plain *PeriodicMetricReader) error {
132181
if plain.Timeout != nil && 0 > *plain.Timeout {
@@ -249,3 +298,91 @@ func createHeadersConfig(headers []NameStringValuePair, headersList *string) (ma
249298
}
250299
return result, nil
251300
}
301+
302+
var enumValuesAttributeType = []any{
303+
nil,
304+
"string",
305+
"bool",
306+
"int",
307+
"double",
308+
"string_array",
309+
"bool_array",
310+
"int_array",
311+
"double_array",
312+
}
313+
314+
// MarshalUnmarshaler combines marshal and unmarshal operations.
315+
type MarshalUnmarshaler interface {
316+
Marshal(v any) ([]byte, error)
317+
Unmarshal(data []byte, v any) error
318+
}
319+
320+
// jsonCodec implements MarshalUnmarshaler for JSON.
321+
type jsonCodec struct{}
322+
323+
func (jsonCodec) Marshal(v any) ([]byte, error) {
324+
return json.Marshal(v)
325+
}
326+
327+
func (jsonCodec) Unmarshal(data []byte, v any) error {
328+
return json.Unmarshal(data, v)
329+
}
330+
331+
// yamlCodec implements MarshalUnmarshaler for YAML.
332+
type yamlCodec struct{}
333+
334+
func (yamlCodec) Marshal(v any) ([]byte, error) {
335+
return yaml.Marshal(v)
336+
}
337+
338+
func (yamlCodec) Unmarshal(data []byte, v any) error {
339+
return yaml.Unmarshal(data, v)
340+
}
341+
342+
// setConfigDefaults sets default values for disabled and log_level.
343+
func setConfigDefaults(raw map[string]any, plain *OpenTelemetryConfiguration, codec MarshalUnmarshaler) error {
344+
// Configure if the SDK is disabled or not.
345+
// If omitted or null, false is used.
346+
plain.Disabled = ptr(false)
347+
if v, ok := raw["disabled"]; ok && v != nil {
348+
marshaled, err := codec.Marshal(v)
349+
if err != nil {
350+
return err
351+
}
352+
var disabled bool
353+
if err := codec.Unmarshal(marshaled, &disabled); err != nil {
354+
return err
355+
}
356+
plain.Disabled = &disabled
357+
}
358+
359+
// Configure the log level of the internal logger used by the SDK.
360+
// If omitted, info is used.
361+
plain.LogLevel = ptr("info")
362+
if v, ok := raw["log_level"]; ok && v != nil {
363+
marshaled, err := codec.Marshal(v)
364+
if err != nil {
365+
return err
366+
}
367+
var logLevel string
368+
if err := codec.Unmarshal(marshaled, &logLevel); err != nil {
369+
return err
370+
}
371+
plain.LogLevel = &logLevel
372+
}
373+
374+
return nil
375+
}
376+
377+
// validateStringField validates a string field is present and correct type.
378+
func validateStringField(raw map[string]any, fieldName string) (string, error) {
379+
v, ok := raw[fieldName]
380+
if !ok {
381+
return "", fmt.Errorf("cannot unmarshal field %s in NameStringValuePair required", fieldName)
382+
}
383+
str, ok := v.(string)
384+
if !ok {
385+
return "", fmt.Errorf("cannot unmarshal field %s in NameStringValuePair must be string", fieldName)
386+
}
387+
return str, nil
388+
}

otelconf/config_json.go

Lines changed: 1 addition & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ func (j *LogRecordExporter) UnmarshalJSON(b []byte) error {
191191
sh.Plain.Console = c
192192
}
193193
*j = LogRecordExporter(sh.Plain)
194+
return nil
194195
}
195196

196197
// MarshalJSON implements json.Marshaler.
@@ -804,63 +805,6 @@ func (j *AttributeNameValue) UnmarshalJSON(b []byte) error {
804805
return nil
805806
}
806807

807-
// UnmarshalJSON implements json.Unmarshaler.
808-
func (j *PushMetricExporter) UnmarshalJSON(b []byte) error {
809-
var raw map[string]any
810-
if err := json.Unmarshal(b, &raw); err != nil {
811-
return err
812-
}
813-
type Plain PushMetricExporter
814-
var plain Plain
815-
if err := json.Unmarshal(b, &plain); err != nil {
816-
return err
817-
}
818-
// console can be nil, must check and set here
819-
if checkConsoleExporter(raw) {
820-
plain.Console = ConsoleExporter{}
821-
}
822-
*j = PushMetricExporter(plain)
823-
return nil
824-
}
825-
826-
// UnmarshalJSON implements json.Unmarshaler.
827-
func (j *SpanExporter) UnmarshalJSON(b []byte) error {
828-
var raw map[string]any
829-
if err := json.Unmarshal(b, &raw); err != nil {
830-
return err
831-
}
832-
type Plain SpanExporter
833-
var plain Plain
834-
if err := json.Unmarshal(b, &plain); err != nil {
835-
return err
836-
}
837-
// console can be nil, must check and set here
838-
if checkConsoleExporter(raw) {
839-
plain.Console = ConsoleExporter{}
840-
}
841-
*j = SpanExporter(plain)
842-
return nil
843-
}
844-
845-
// UnmarshalJSON implements json.Unmarshaler.
846-
func (j *LogRecordExporter) UnmarshalJSON(b []byte) error {
847-
var raw map[string]any
848-
if err := json.Unmarshal(b, &raw); err != nil {
849-
return err
850-
}
851-
type Plain LogRecordExporter
852-
var plain Plain
853-
if err := json.Unmarshal(b, &plain); err != nil {
854-
return err
855-
}
856-
// console can be nil, must check and set here
857-
if checkConsoleExporter(raw) {
858-
plain.Console = ConsoleExporter{}
859-
}
860-
*j = LogRecordExporter(plain)
861-
return nil
862-
}
863-
864808
// UnmarshalJSON implements json.Unmarshaler.
865809
func (j *Sampler) UnmarshalJSON(b []byte) error {
866810
var raw map[string]any
@@ -892,47 +836,3 @@ func (j *MetricProducer) UnmarshalJSON(b []byte) error {
892836
*j = MetricProducer(plain)
893837
return nil
894838
}
895-
896-
// UnmarshalJSON implements json.Unmarshaler.
897-
func (j *TextMapPropagator) UnmarshalJSON(b []byte) error {
898-
var raw map[string]any
899-
if err := json.Unmarshal(b, &raw); err != nil {
900-
return err
901-
}
902-
type Plain TextMapPropagator
903-
var plain Plain
904-
if err := json.Unmarshal(b, &plain); err != nil {
905-
return err
906-
}
907-
unmarshalTextMapPropagatorTypes(raw, (*TextMapPropagator)(&plain))
908-
*j = TextMapPropagator(plain)
909-
return nil
910-
}
911-
912-
// UnmarshalJSON implements json.Unmarshaler.
913-
func (j *CardinalityLimits) UnmarshalJSON(value []byte) error {
914-
type Plain CardinalityLimits
915-
var plain Plain
916-
if err := json.Unmarshal(value, &plain); err != nil {
917-
return err
918-
}
919-
if err := validateCardinalityLimits((*CardinalityLimits)(&plain)); err != nil {
920-
return err
921-
}
922-
*j = CardinalityLimits(plain)
923-
return nil
924-
}
925-
926-
// UnmarshalJSON implements json.Unmarshaler.
927-
func (j *SpanLimits) UnmarshalJSON(value []byte) error {
928-
type Plain SpanLimits
929-
var plain Plain
930-
if err := json.Unmarshal(value, &plain); err != nil {
931-
return err
932-
}
933-
if err := validateSpanLimits((*SpanLimits)(&plain)); err != nil {
934-
return err
935-
}
936-
*j = SpanLimits(plain)
937-
return nil
938-
}

0 commit comments

Comments
 (0)