| 47 | } |
| 48 | |
| 49 | func New(cfg Config, reg registry.Registry, filteredSpansCounter, invalidUTF8Counter prometheus.Counter) (gen.Processor, error) { |
| 50 | var configuredIntrinsicDimensions []string |
| 51 | |
| 52 | if cfg.IntrinsicDimensions.Service { |
| 53 | configuredIntrinsicDimensions = append(configuredIntrinsicDimensions, gen.DimService) |
| 54 | } |
| 55 | if cfg.IntrinsicDimensions.SpanName { |
| 56 | configuredIntrinsicDimensions = append(configuredIntrinsicDimensions, gen.DimSpanName) |
| 57 | } |
| 58 | if cfg.IntrinsicDimensions.SpanKind { |
| 59 | configuredIntrinsicDimensions = append(configuredIntrinsicDimensions, gen.DimSpanKind) |
| 60 | } |
| 61 | if cfg.IntrinsicDimensions.StatusCode { |
| 62 | configuredIntrinsicDimensions = append(configuredIntrinsicDimensions, gen.DimStatusCode) |
| 63 | } |
| 64 | if cfg.IntrinsicDimensions.StatusMessage { |
| 65 | configuredIntrinsicDimensions = append(configuredIntrinsicDimensions, gen.DimStatusMessage) |
| 66 | } |
| 67 | |
| 68 | c := reclaimable.New(validation.SanitizeLabelName, 10000) |
| 69 | |
| 70 | err := validation.ValidateDimensions(cfg.Dimensions, configuredIntrinsicDimensions, cfg.DimensionMappings, c.Get) |
| 71 | if err != nil { |
| 72 | return nil, err |
| 73 | } |
| 74 | |
| 75 | p := &Processor{ |
| 76 | Cfg: cfg, |
| 77 | registry: reg, |
| 78 | spanMetricsTargetInfo: reg.NewGauge(targetInfo), |
| 79 | now: time.Now, |
| 80 | filteredSpansCounter: filteredSpansCounter, |
| 81 | invalidUTF8Counter: invalidUTF8Counter, |
| 82 | sanitizeCache: c, |
| 83 | } |
| 84 | |
| 85 | if cfg.Subprocessors[Latency] { |
| 86 | p.spanMetricsDurationSeconds = reg.NewHistogram(metricDurationSeconds, cfg.HistogramBuckets, cfg.HistogramOverride) |
| 87 | } |
| 88 | if cfg.Subprocessors[Count] { |
| 89 | p.spanMetricsCallsTotal = reg.NewCounter(metricCallsTotal) |
| 90 | } |
| 91 | if cfg.Subprocessors[Size] { |
| 92 | p.spanMetricsSizeTotal = reg.NewCounter(metricSizeTotal) |
| 93 | } |
| 94 | |
| 95 | filter, err := spanfilter.NewSpanFilter(cfg.FilterPolicies) |
| 96 | if err != nil { |
| 97 | return nil, err |
| 98 | } |
| 99 | |
| 100 | p.filter = filter |
| 101 | return p, nil |
| 102 | } |
| 103 | |
| 104 | func (p *Processor) Name() string { |
| 105 | return gen.SpanMetricsName |