MCPcopy
hub / github.com/grafana/tempo / DiffConfig

Function DiffConfig

pkg/util/config.go:9–68  ·  view source on GitHub ↗

DiffConfig utility function that returns the diff between two config map objects

(defaultConfig, actualConfig map[interface{}]interface{})

Source from the content-addressed store, hash-verified

7
8// DiffConfig utility function that returns the diff between two config map objects
9func DiffConfig(defaultConfig, actualConfig map[interface{}]interface{}) (map[interface{}]interface{}, error) {
10 output := make(map[interface{}]interface{})
11
12 for key, value := range actualConfig {
13
14 defaultValue, ok := defaultConfig[key]
15 if !ok {
16 output[key] = value
17 continue
18 }
19
20 switch v := value.(type) {
21 case int:
22 defaultV, ok := defaultValue.(int)
23 if !ok || defaultV != v {
24 output[key] = v
25 }
26 case string:
27 defaultV, ok := defaultValue.(string)
28 if !ok || defaultV != v {
29 output[key] = v
30 }
31 case bool:
32 defaultV, ok := defaultValue.(bool)
33 if !ok || defaultV != v {
34 output[key] = v
35 }
36 case []interface{}:
37 defaultV, ok := defaultValue.([]interface{})
38 if !ok || !reflect.DeepEqual(defaultV, v) {
39 output[key] = v
40 }
41 case float64:
42 defaultV, ok := defaultValue.(float64)
43 if !ok || !reflect.DeepEqual(defaultV, v) {
44 output[key] = v
45 }
46 case nil:
47 if defaultValue != nil {
48 output[key] = v
49 }
50 case map[interface{}]interface{}:
51 defaultV, ok := defaultValue.(map[interface{}]interface{})
52 if !ok {
53 output[key] = value
54 }
55 diff, err := DiffConfig(defaultV, v)
56 if err != nil {
57 return nil, err
58 }
59 if len(diff) > 0 {
60 output[key] = diff
61 }
62 default:
63 return nil, fmt.Errorf("unsupported type %T", v)
64 }
65 }
66

Callers 2

writeStatusConfigMethod · 0.92

Calls

no outgoing calls

Tested by

no test coverage detected