master
go 65 lines 1.96 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package chartengine
4
5 import (
6 "fmt"
7 "strings"
8
9 "github.com/netdata/netdata/go/plugins/pkg/metrix"
10 "github.com/netdata/netdata/go/plugins/plugin/framework/chartengine/internal/program"
11 )
12
13 func resolveDimensionName(dim program.Dimension, metricName string, labels metrix.LabelView, meta metrix.SeriesMeta) (string, string, bool, error) {
14 if dim.InferNameFromSeriesMeta {
15 labelKey, ok, err := inferDimensionLabelKey(metricName, meta)
16 if err != nil {
17 return "", "", false, err
18 }
19 if !ok {
20 return "", "", false, nil
21 }
22 value, ok := labels.Get(labelKey)
23 if !ok || strings.TrimSpace(value) == "" {
24 return "", "", false, nil
25 }
26 return value, labelKey, true, nil
27 }
28
29 if dim.NameFromLabel != "" {
30 value, ok := labels.Get(dim.NameFromLabel)
31 if !ok || strings.TrimSpace(value) == "" {
32 return "", "", false, nil
33 }
34 return value, dim.NameFromLabel, true, nil
35 }
36
37 if dim.NameTemplate.Raw != "" {
38 return dim.NameTemplate.Raw, "", true, nil
39 }
40
41 return "", "", false, nil
42 }
43
44 func inferDimensionLabelKey(metricName string, meta metrix.SeriesMeta) (string, bool, error) {
45 switch meta.FlattenRole {
46 case metrix.FlattenRoleHistogramBucket:
47 return metrix.HistogramBucketLabel, true, nil
48 case metrix.FlattenRoleSummaryQuantile:
49 return metrix.SummaryQuantileLabel, true, nil
50 case metrix.FlattenRoleStateSetState:
51 if strings.TrimSpace(metricName) == "" {
52 return "", false, fmt.Errorf("chartengine: stateset inference requires metric family name")
53 }
54 return metricName, true, nil
55 case metrix.FlattenRoleHistogramCount,
56 metrix.FlattenRoleHistogramSum,
57 metrix.FlattenRoleSummaryCount,
58 metrix.FlattenRoleSummarySum:
59 return "", false, nil
60 case metrix.FlattenRoleNone:
61 return "", false, fmt.Errorf("chartengine: cannot infer dimension label key from non-flattened series metadata")
62 default:
63 return "", false, fmt.Errorf("chartengine: unsupported flatten role %d for runtime dimension inference", meta.FlattenRole)
64 }
65 }