-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathksm-crs.yaml
75 lines (74 loc) · 3.28 KB
/
ksm-crs.yaml
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
groupVersionResource:
group: "apps"
version: "v1"
resource: "deployments"
stub: |
package stub
import future.keywords.in
commonLabels := [{"object_type": "native"}] # For objects native to KSM.
labelsFromPathName := {"name": ["metadata", "name"]}
printer {
familyName := "replica_count"
familyHelp := sprintf("# HELP %s %s", [familyName, "number of replicas available"])
familyType := sprintf("# TYPE %s %s", [familyName, "gauge"])
path := ["spec"]
labelFromKeyRelative := {"k8s": ["selector", "matchLabels"]}
labelsFromPathRelative := {"desired_count": ["replicas"]}
valueFromNonRelative := ["status", "availableReplicas"]
customLabels := array.concat(commonLabels, [{"custom_metric": "yes"}])
unfurlFields := [["metadata", "labels"], ["metadata", "annotations"]]
labelFormat := "%s=\"%v\""
validationRegex := "\\.|/|-"
resolvedPaths := [deployment[p] |
deployment := input[_]
p := path[_]
]
resolvedFormattedLabelsFromPathNonRelative := [sprintf(labelFormat, [regex.replace(k, validationRegex, "_"), o]) |
some k, v in labelsFromPathName
o := object.get(input[_], v, false)
]
resolvedFormattedLabelsFromPathRelative := [sprintf(labelFormat, [regex.replace(k, validationRegex, "_"), o]) |
some k, v in labelsFromPathRelative
o := object.get(resolvedPaths[_], v, false)
]
resolvedFormattedLabelFromKeyRelative := [sprintf(labelFormat, [regex.replace(kk, validationRegex, "_"), vv]) |
some k, v in labelFromKeyRelative
o := object.get(resolvedPaths[_], v, false)
some kk, vv in o
startswith(kk, k)
]
resolvedFormattedCustomLabels := [sprintf(labelFormat, [regex.replace(k, validationRegex, "_"), v]) |
el := customLabels[_]
some k, v in el
]
resolvedUnfurlFields := [[o |
o := object.get(input[_], el, false)
] |
el := unfurlFields[_]
]
formattedResolvedUnfurlFields := [sprintf(labelFormat, [regex.replace(k, validationRegex, "_"), v]) |
el := resolvedUnfurlFields[_]
ell := el[_]
some k, v in ell
]
values := [o | o := object.get(input[_], valueFromNonRelative, false)]
# Generate metrics: familyName{<labelsFromPathRelative>, <labelFromKeyRelative>, <customLabels>, <unfurlFields>} valueFromNonRelative
labelSets := [
resolvedFormattedLabelsFromPathRelative,
resolvedFormattedLabelFromKeyRelative,
resolvedFormattedCustomLabels,
formattedResolvedUnfurlFields,
]
labelSet := [concat(",", arr) |
arr := labelSets[_]
]
labels := concat(",", labelSet)
metricSet := [{sprintf("%s{%s}", [familyName, dedup(withDeployment)]): value} |
some i, v in resolvedFormattedLabelsFromPathNonRelative
value := values[i]
withDeployment := concat(",", [v, labels])
]
metrics := [sprintf("%s %d\n", [metric, value]) | some metric,value in metricSet[_]]
out := sprintf("%s\n%s\n%s", [familyHelp, familyType, concat("", metrics)])
print(out)
}