MCPcopy Index your code
hub / github.com/netdata/netdata / compileDimension

Function compileDimension

src/go/plugin/framework/chartengine/compiler.go:195–256  ·  view source on GitHub ↗
(dim charttpl.Dimension, visibleMetrics map[string]struct{})

Source from the content-addressed store, hash-verified

193}
194
195func compileDimension(dim charttpl.Dimension, visibleMetrics map[string]struct{}) (compiledDimension, error) {
196 compiledSel, err := metrixselector.ParseCompiled(dim.Selector)
197 if err != nil {
198 return compiledDimension{}, fmt.Errorf("selector: %w", err)
199 }
200
201 meta := compiledSel.Meta()
202 if len(visibleMetrics) > 0 {
203 for _, metricName := range meta.MetricNames {
204 if _, ok := visibleMetrics[metricName]; !ok {
205 return compiledDimension{}, fmt.Errorf("selector: metric %q is not visible in current group scope", metricName)
206 }
207 }
208 }
209
210 name := strings.TrimSpace(dim.Name)
211 nameFromLabel := strings.TrimSpace(dim.NameFromLabel)
212 // If dimension naming is omitted, runtime planner resolves dynamic key source
213 // from series origin metadata (metrix.Reader.SeriesMeta on flattened series).
214 inferFromSeriesMeta := name == "" && nameFromLabel == ""
215 if inferFromSeriesMeta && !supportsRuntimeInferredDimension(meta) {
216 return compiledDimension{}, fmt.Errorf(
217 "name inference requires inferable selector (histogram bucket/summary quantile/stateset-like metric); set name or name_from_label",
218 )
219 }
220
221 nameTemplate := program.Template{}
222 dynamicLabelKeys := make([]string, 0, 1)
223 if name != "" {
224 nameTemplate, err = parseTemplate(name)
225 if err != nil {
226 return compiledDimension{}, fmt.Errorf("name: %w", err)
227 }
228 } else if nameFromLabel != "" {
229 dynamicLabelKeys = append(dynamicLabelKeys, nameFromLabel)
230 }
231
232 metricKinds := metricKindsFromNames(meta.MetricNames)
233 options := compileDimensionOptions(dim.Options)
234
235 return compiledDimension{
236 dimension: program.Dimension{
237 Selector: program.SelectorBinding{
238 Expression: strings.TrimSpace(dim.Selector),
239 Matcher: selectorMatcher{compiled: compiledSel},
240 MetricNames: append([]string(nil), meta.MetricNames...),
241 ConstrainedLabelKeys: append([]string(nil), meta.ConstrainedLabelKeys...),
242 },
243 NameTemplate: nameTemplate,
244 NameFromLabel: nameFromLabel,
245 InferNameFromSeriesMeta: inferFromSeriesMeta,
246 Hidden: options.hidden,
247 Multiplier: options.multiplier,
248 Divisor: options.divisor,
249 Float: options.float,
250 Dynamic: inferFromSeriesMeta || nameFromLabel != "",
251 },
252 selectorKeys: append([]string(nil), meta.ConstrainedLabelKeys...),

Callers 1

compileChartMethod · 0.85

Calls 7

metricKindsFromNamesFunction · 0.85
compileDimensionOptionsFunction · 0.85
normalizeUniqueFunction · 0.85
parseTemplateFunction · 0.70
ErrorfMethod · 0.65
MetaMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…