forked from aws/amazon-cloudwatch-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefaultKeyCase.go
87 lines (79 loc) · 2.77 KB
/
defaultKeyCase.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package translator
import (
"fmt"
)
// DefaultCase check if current input overrides the default value for the given config entry key.
func DefaultCase(key string, defaultVal, input interface{}) (returnKey string, returnVal interface{}) {
m, ok := input.(map[string]interface{})
if !ok {
// bypassing special formats like:
// "procstat": [
// {
// "pid_file": "/var/run/example1.pid",
// ...
returnKey = ""
returnVal = ""
}
if val, ok := m[key]; ok {
//The key is in current input instance, use the value in JSON.
returnVal = val
} else {
//The key is not in current input instance, use the default value for the config key
returnVal = defaultVal
}
returnKey = key
return
}
func DefaultTimeIntervalCase(key string, defaultVal, input interface{}) (returnKey string, returnVal interface{}) {
returnKey, returnVal = DefaultCase(key, defaultVal, input)
// By default json unmarshal will store number as float64
if floatVal, ok := returnVal.(float64); ok {
returnVal = fmt.Sprintf("%ds", int(floatVal))
} else {
AddErrorMessages(
fmt.Sprintf("time interval key: %s", key),
fmt.Sprintf("%s value (%v) in json is not valid for time interval.", key, returnVal))
}
return
}
func DefaultIntegralCase(key string, defaultVal, input interface{}) (returnKey string, returnVal interface{}) {
returnKey, returnVal = DefaultCase(key, defaultVal, input)
// By default json unmarshal will store number as float64
if floatVal, ok := returnVal.(float64); ok {
returnVal = int(floatVal)
} else {
AddErrorMessages(
fmt.Sprintf("integral key: %s", key),
fmt.Sprintf("%s value (%v) in json is not valid as an integer.", key, returnVal))
}
return
}
func DefaultStringArrayCase(key string, defaultVal, input interface{}) (returnKey string, returnVal interface{}) {
returnKey, returnVal = DefaultCase(key, defaultVal, input)
if arrayVal, ok := returnVal.([]interface{}); ok {
stringArrayVal := make([]string, len(arrayVal))
for i, v := range arrayVal {
stringArrayVal[i] = v.(string)
}
returnVal = stringArrayVal
} else {
AddErrorMessages(
fmt.Sprintf("string array key: %s", key),
fmt.Sprintf("%s value (%v) in json is not valid as an array of strings.", key, returnVal))
}
return
}
func DefaultRetentionInDaysCase(key string, defaultVal, input interface{}) (returnKey string, returnVal interface{}) {
returnKey, returnVal = DefaultIntegralCase(key, defaultVal, input)
if intVal, ok := returnVal.(int); ok && IsValidRetentionDays(intVal) {
returnVal = intVal
} else {
returnVal = -1
AddErrorMessages(
fmt.Sprintf("Retention in Days key: %s", key),
fmt.Sprintf("%s value (%v) in is not valid retention in days.", key, returnVal))
}
return
}