/
logs_collected.go
87 lines (71 loc) · 2.31 KB
/
logs_collected.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 logs_collected
import (
"github.com/aws/amazon-cloudwatch-agent/translator"
"github.com/aws/amazon-cloudwatch-agent/translator/config"
"github.com/aws/amazon-cloudwatch-agent/translator/jsonconfig/mergeJsonRule"
"github.com/aws/amazon-cloudwatch-agent/translator/jsonconfig/mergeJsonUtil"
parent "github.com/aws/amazon-cloudwatch-agent/translator/translate/logs"
)
type Rule translator.Rule
type LogsCollected struct {
}
var ChildRule = map[string]Rule{}
var (
windowsMetricCollectRule = map[string]Rule{}
linuxMetricCollectRule = map[string]Rule{}
darwinMetricCollectRule = map[string]Rule{}
)
const SectionKey = "logs_collected"
func GetCurPath() string {
curPath := parent.GetCurPath() + SectionKey + "/"
return curPath
}
func RegisterLinuxRule(ruleName string, r Rule) {
linuxMetricCollectRule[ruleName] = r
}
func RegisterDarwinRule(ruleName string, r Rule) {
darwinMetricCollectRule[ruleName] = r
}
func RegisterWindowsRule(ruleName string, r Rule) {
windowsMetricCollectRule[ruleName] = r
}
func (l *LogsCollected) ApplyRule(input interface{}) (returnKey string, returnVal interface{}) {
im := input.(map[string]interface{})
var targetRuleMap map[string]Rule
result := map[string]interface{}{}
switch translator.GetTargetPlatform() {
case config.OS_TYPE_LINUX:
targetRuleMap = linuxMetricCollectRule
case config.OS_TYPE_DARWIN:
targetRuleMap = darwinMetricCollectRule
case config.OS_TYPE_WINDOWS:
targetRuleMap = windowsMetricCollectRule
default:
panic("unknown target platform " + translator.GetTargetPlatform())
}
if _, ok := im[SectionKey]; !ok {
returnKey = ""
returnVal = ""
} else {
for _, rule := range targetRuleMap {
key, val := rule.ApplyRule(im[SectionKey])
if key == "inputs" {
result = translator.MergeTwoUniqueMaps(result, val.(map[string]interface{}))
}
}
returnKey = "inputs"
returnVal = result
}
return
}
var MergeRuleMap = map[string]mergeJsonRule.MergeRule{}
func (l *LogsCollected) Merge(source map[string]interface{}, result map[string]interface{}) {
mergeJsonUtil.MergeMap(source, result, SectionKey, MergeRuleMap, GetCurPath())
}
func init() {
obj := new(LogsCollected)
parent.RegisterRule(SectionKey, obj)
parent.MergeRuleMap[SectionKey] = obj
}