-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathinsights.general.go
89 lines (78 loc) · 2.18 KB
/
insights.general.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
88
89
package metrics
import (
"strings"
"github.com/prometheus/client_golang/prometheus"
)
type (
AzureInsightBaseMetricsResult struct {
prober *MetricProber
}
)
func (r *AzureInsightBaseMetricsResult) buildMetric(labels prometheus.Labels, value float64) (metric PrometheusMetricResult) {
// copy map to ensure we don't keep references
metricLabels := prometheus.Labels{}
for labelName, labelValue := range labels {
metricLabels[labelName] = labelValue
}
metric = PrometheusMetricResult{
Name: r.prober.settings.MetricTemplate,
Labels: metricLabels,
Value: value,
}
// fallback if template is empty (should not be)
if r.prober.settings.MetricTemplate == "" {
metric.Name = r.prober.settings.Name
}
resourceType := r.prober.settings.ResourceType
// MetricNamespace is more descriptive than type
if r.prober.settings.MetricNamespace != "" {
resourceType = r.prober.settings.MetricNamespace
}
// set help
metric.Help = r.prober.settings.HelpTemplate
if metricNamePlaceholders.MatchString(metric.Help) {
metric.Help = metricNamePlaceholders.ReplaceAllStringFunc(
metric.Help,
func(fieldName string) string {
fieldName = strings.Trim(fieldName, "{}")
switch fieldName {
case "name":
return r.prober.settings.Name
case "type":
return resourceType
default:
if fieldValue, exists := metric.Labels[fieldName]; exists {
return fieldValue
}
}
return ""
},
)
}
if metricNamePlaceholders.MatchString(metric.Name) {
metric.Name = metricNamePlaceholders.ReplaceAllStringFunc(
metric.Name,
func(fieldName string) string {
fieldName = strings.Trim(fieldName, "{}")
switch fieldName {
case "name":
return r.prober.settings.Name
case "type":
return resourceType
default:
if fieldValue, exists := metric.Labels[fieldName]; exists {
// remove label, when we add it to metric name
delete(metric.Labels, fieldName)
return fieldValue
}
}
return ""
},
)
}
// sanitize metric name
metric.Name = metricNameReplacer.Replace(metric.Name)
metric.Name = strings.ToLower(metric.Name)
metric.Name = metricNameNotAllowedChars.ReplaceAllString(metric.Name, "")
return
}