Skip to content

Commit

Permalink
Use dedicated type EecRuntimeConfig instead of a generic map[string]i…
Browse files Browse the repository at this point in the history
…nterface{}
  • Loading branch information
toszr committed Feb 18, 2022
1 parent ad78aec commit 3a124d1
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,22 @@ import (

const extensionsRuntimeProperties = dynatracev1beta1.InternalFlagPrefix + "extensions."

type EecRuntimeConfig struct {
Revision int `json:"revision"`
BooleanMap map[string]bool `json:"booleanMap"`
StringMap map[string]string `json:"stringMap"`
LongMap map[string]int64 `json:"longMap"`
}

func NewEecRuntimeConfig() *EecRuntimeConfig {
return &EecRuntimeConfig{
Revision: 1,
BooleanMap: make(map[string]bool),
StringMap: make(map[string]string),
LongMap: make(map[string]int64),
}
}

func getExtensionsFlagsFromAnnotations(instance *dynatracev1beta1.DynaKube) map[string]string {
extensionsFlags := make(map[string]string)
for flag, val := range dynatracev1beta1.GetInternalFlags(instance) {
Expand All @@ -24,27 +40,20 @@ func getExtensionsFlagsFromAnnotations(instance *dynatracev1beta1.DynaKube) map[
return extensionsFlags
}

func buildEecRuntimeConfig(instance *dynatracev1beta1.DynaKube) map[string]interface{} {
booleanMap := make(map[string]bool)
stringMap := make(map[string]string)
longMap := make(map[string]int64)
func buildEecRuntimeConfig(instance *dynatracev1beta1.DynaKube) *EecRuntimeConfig {
eecRuntimeConfig := NewEecRuntimeConfig()

for runtimeProp, val := range getExtensionsFlagsFromAnnotations(instance) {
if parsedLongInt, err := strconv.ParseInt(val, 10, 64); err == nil {
longMap[runtimeProp] = parsedLongInt
eecRuntimeConfig.LongMap[runtimeProp] = parsedLongInt
} else if parsedBool, err := strconv.ParseBool(val); err == nil {
booleanMap[runtimeProp] = parsedBool
eecRuntimeConfig.BooleanMap[runtimeProp] = parsedBool
} else {
stringMap[runtimeProp] = val
eecRuntimeConfig.StringMap[runtimeProp] = val
}
}

return map[string]interface{}{
"revision": 1,
"booleanMap": booleanMap,
"stringMap": stringMap,
"longMap": longMap,
}
return eecRuntimeConfig
}

func buildEecRuntimeConfigJson(instance *dynatracev1beta1.DynaKube) (string, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func TestCreateEecConfigMap(t *testing.T) {
"internal.operator.dynatrace.com/extensions.debugExtensionDSstatsdlogoutboundminttraffic": "true",
"internal.operator.dynatrace.com/extensions.debugExtensionDSstatsdcustomloglevel": "trace",
})
runtimeConfig := make(map[string]interface{})
runtimeConfig := NewEecRuntimeConfig()

eecConfigMap := CreateEecConfigMap(instance, "activegate")
runtimeConfigJson := eecConfigMap.Data["runtimeConfiguration"]
Expand All @@ -49,19 +49,19 @@ func TestCreateEecConfigMap(t *testing.T) {

require.NotEmpty(t, eecConfigMap.Data)
require.NoError(t, json.Unmarshal([]byte(runtimeConfigJson), &runtimeConfig))
assert.Equal(t, 1., runtimeConfig["revision"])
assert.True(t, runtimeConfig["booleanMap"].(map[string]interface{})["debugExtensionDSstatsdlogoutboundminttraffic"].(bool))
assert.False(t, runtimeConfig["booleanMap"].(map[string]interface{})["debugExtensionDSstatsddisablenamedalivesignals"].(bool))
assert.Equal(t, "trace", runtimeConfig["stringMap"].(map[string]interface{})["debugExtensionDSstatsdcustomloglevel"])
assert.Empty(t, runtimeConfig["longMap"].(map[string]interface{}))
assert.Equal(t, 1, runtimeConfig.Revision)
assert.True(t, runtimeConfig.BooleanMap["debugExtensionDSstatsdlogoutboundminttraffic"])
assert.False(t, runtimeConfig.BooleanMap["debugExtensionDSstatsddisablenamedalivesignals"])
assert.Equal(t, "trace", runtimeConfig.StringMap["debugExtensionDSstatsdcustomloglevel"])
assert.Empty(t, runtimeConfig.LongMap)
})

t.Run("no valid EEC runtime properties, StatsD enabled", func(t *testing.T) {
instance := testBuildDynaKubeWithAnnotations("dynakube", true, map[string]string{
"internal.operator.dynatrace.com/debugExtensionDSstatsdlogoutboundminttraffic": "true",
"debugExtensionDSstatsdcustomloglevel": "info",
})
runtimeConfig := make(map[string]interface{})
runtimeConfig := NewEecRuntimeConfig()

eecConfigMap := CreateEecConfigMap(instance, "activegate")
runtimeConfigJson := eecConfigMap.Data["runtimeConfiguration"]
Expand All @@ -70,10 +70,10 @@ func TestCreateEecConfigMap(t *testing.T) {

require.NotEmpty(t, eecConfigMap.Data)
require.NoError(t, json.Unmarshal([]byte(runtimeConfigJson), &runtimeConfig))
assert.Equal(t, 1., runtimeConfig["revision"])
assert.Empty(t, runtimeConfig["booleanMap"].(map[string]interface{}))
assert.Empty(t, runtimeConfig["stringMap"].(map[string]interface{}))
assert.Empty(t, runtimeConfig["longMap"].(map[string]interface{}))
assert.Equal(t, 1, runtimeConfig.Revision)
assert.Empty(t, runtimeConfig.BooleanMap)
assert.Empty(t, runtimeConfig.StringMap)
assert.Empty(t, runtimeConfig.LongMap)
})

t.Run("valid EEC runtime properties but StatsD disabled", func(t *testing.T) {
Expand Down

0 comments on commit 3a124d1

Please sign in to comment.