Skip to content

Commit a264fd3

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

File tree

10 files changed

+218
-876
lines changed

10 files changed

+218
-876
lines changed

otelconf/config_common.go

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
package otelconf // import "go.opentelemetry.io/contrib/otelconf"
55

66
import (
7+
"encoding/json"
78
"fmt"
89
"reflect"
10+
11+
yaml "go.yaml.in/yaml/v3"
912
)
1013

1114
type errBound struct {
@@ -101,6 +104,53 @@ func newErrInvalid(id string) error {
101104
return &errInvalid{Identifier: id}
102105
}
103106

107+
// unmarshalSamplerTypes handles always_on and always_off sampler unmarshaling.
108+
func unmarshalSamplerTypes(raw map[string]any, plain *Sampler) {
109+
// always_on can be nil, must check and set here
110+
if _, ok := raw["always_on"]; ok {
111+
plain.AlwaysOn = AlwaysOnSampler{}
112+
}
113+
// always_off can be nil, must check and set here
114+
if _, ok := raw["always_off"]; ok {
115+
plain.AlwaysOff = AlwaysOffSampler{}
116+
}
117+
}
118+
119+
// unmarshalTextMapPropagatorTypes handles all propagator type unmarshaling.
120+
func unmarshalTextMapPropagatorTypes(raw map[string]any, plain *TextMapPropagator) {
121+
// b3 can be nil, must check and set here
122+
if v, ok := raw["b3"]; ok && v == nil {
123+
plain.B3 = B3Propagator{}
124+
}
125+
if v, ok := raw["b3multi"]; ok && v == nil {
126+
plain.B3Multi = B3MultiPropagator{}
127+
}
128+
if v, ok := raw["baggage"]; ok && v == nil {
129+
plain.Baggage = BaggagePropagator{}
130+
}
131+
if v, ok := raw["jaeger"]; ok && v == nil {
132+
plain.Jaeger = JaegerPropagator{}
133+
}
134+
if v, ok := raw["ottrace"]; ok && v == nil {
135+
plain.Ottrace = OpenTracingPropagator{}
136+
}
137+
if v, ok := raw["tracecontext"]; ok && v == nil {
138+
plain.Tracecontext = TraceContextPropagator{}
139+
}
140+
}
141+
142+
// unmarshalMetricProducer handles opencensus metric producer unmarshaling.
143+
func unmarshalMetricProducer(raw map[string]any, plain *MetricProducer) {
144+
// opencensus can be nil, must check and set here
145+
if v, ok := raw["opencensus"]; ok && v == nil {
146+
delete(raw, "opencensus")
147+
plain.Opencensus = OpenCensusMetricProducer{}
148+
}
149+
if len(raw) > 0 {
150+
plain.AdditionalProperties = raw
151+
}
152+
}
153+
104154
// validatePeriodicMetricReader handles validation for PeriodicMetricReader.
105155
func validatePeriodicMetricReader(plain *PeriodicMetricReader) error {
106156
if plain.Timeout != nil && 0 > *plain.Timeout {
@@ -201,3 +251,91 @@ func validateSpanLimits(plain *SpanLimits) error {
201251
func ptr[T any](v T) *T {
202252
return &v
203253
}
254+
255+
var enumValuesAttributeType = []any{
256+
nil,
257+
"string",
258+
"bool",
259+
"int",
260+
"double",
261+
"string_array",
262+
"bool_array",
263+
"int_array",
264+
"double_array",
265+
}
266+
267+
// MarshalUnmarshaler combines marshal and unmarshal operations.
268+
type MarshalUnmarshaler interface {
269+
Marshal(v any) ([]byte, error)
270+
Unmarshal(data []byte, v any) error
271+
}
272+
273+
// jsonCodec implements MarshalUnmarshaler for JSON.
274+
type jsonCodec struct{}
275+
276+
func (jsonCodec) Marshal(v any) ([]byte, error) {
277+
return json.Marshal(v)
278+
}
279+
280+
func (jsonCodec) Unmarshal(data []byte, v any) error {
281+
return json.Unmarshal(data, v)
282+
}
283+
284+
// yamlCodec implements MarshalUnmarshaler for YAML.
285+
type yamlCodec struct{}
286+
287+
func (yamlCodec) Marshal(v any) ([]byte, error) {
288+
return yaml.Marshal(v)
289+
}
290+
291+
func (yamlCodec) Unmarshal(data []byte, v any) error {
292+
return yaml.Unmarshal(data, v)
293+
}
294+
295+
// setConfigDefaults sets default values for disabled and log_level.
296+
func setConfigDefaults(raw map[string]any, plain *OpenTelemetryConfiguration, codec MarshalUnmarshaler) error {
297+
// Configure if the SDK is disabled or not.
298+
// If omitted or null, false is used.
299+
plain.Disabled = ptr(false)
300+
if v, ok := raw["disabled"]; ok && v != nil {
301+
marshaled, err := codec.Marshal(v)
302+
if err != nil {
303+
return err
304+
}
305+
var disabled bool
306+
if err := codec.Unmarshal(marshaled, &disabled); err != nil {
307+
return err
308+
}
309+
plain.Disabled = &disabled
310+
}
311+
312+
// Configure the log level of the internal logger used by the SDK.
313+
// If omitted, info is used.
314+
plain.LogLevel = ptr("info")
315+
if v, ok := raw["log_level"]; ok && v != nil {
316+
marshaled, err := codec.Marshal(v)
317+
if err != nil {
318+
return err
319+
}
320+
var logLevel string
321+
if err := codec.Unmarshal(marshaled, &logLevel); err != nil {
322+
return err
323+
}
324+
plain.LogLevel = &logLevel
325+
}
326+
327+
return nil
328+
}
329+
330+
// validateStringField validates a string field is present and correct type.
331+
func validateStringField(raw map[string]any, fieldName string) (string, error) {
332+
v, ok := raw[fieldName]
333+
if !ok {
334+
return "", fmt.Errorf("cannot unmarshal field %s in NameStringValuePair required", fieldName)
335+
}
336+
str, ok := v.(string)
337+
if !ok {
338+
return "", fmt.Errorf("cannot unmarshal field %s in NameStringValuePair must be string", fieldName)
339+
}
340+
return str, nil
341+
}

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)