master
go 190 lines 5.53 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package metrix
4
5 type writeView struct {
6 backend meterBackend
7 }
8
9 type snapshotMeter struct {
10 backend meterBackend
11 prefix string
12 scope HostScope
13 sets []LabelSet
14 }
15
16 type snapshotVecMeter struct {
17 meter *snapshotMeter
18 labelKeys []string
19 }
20
21 type statefulMeter struct {
22 backend meterBackend
23 prefix string
24 scope HostScope
25 sets []LabelSet
26 }
27
28 type statefulVecMeter struct {
29 meter *statefulMeter
30 labelKeys []string
31 }
32
33 // SnapshotMeter returns a snapshot-mode declaration/write scope.
34 func (w *writeView) SnapshotMeter(prefix string) SnapshotMeter {
35 return &snapshotMeter{backend: w.backend, prefix: prefix}
36 }
37
38 // StatefulMeter returns a stateful-mode declaration/write scope.
39 func (w *writeView) StatefulMeter(prefix string) StatefulMeter {
40 return &statefulMeter{backend: w.backend, prefix: prefix}
41 }
42
43 func (m *snapshotMeter) WithLabels(labels ...Label) SnapshotMeter {
44 set := m.LabelSet(labels...)
45 return m.WithLabelSet(set)
46 }
47
48 func (m *snapshotMeter) WithHostScope(scope HostScope) SnapshotMeter {
49 return &snapshotMeter{
50 backend: m.backend,
51 prefix: m.prefix,
52 scope: mustNormalizeHostScope(scope),
53 sets: appendLabelSets(m.sets, nil),
54 }
55 }
56
57 func (m *snapshotMeter) WithLabelSet(labels ...LabelSet) SnapshotMeter {
58 for _, ls := range labels {
59 if ls.set == nil || ls.set.owner != m.backend {
60 panic(errForeignLabelSet)
61 }
62 }
63 return &snapshotMeter{backend: m.backend, prefix: m.prefix, scope: m.scope, sets: appendLabelSets(m.sets, labels)}
64 }
65
66 func (m *snapshotMeter) Vec(labelKeys ...string) SnapshotVecMeter {
67 return &snapshotVecMeter{
68 meter: m,
69 labelKeys: append([]string(nil), labelKeys...),
70 }
71 }
72
73 func (m *snapshotMeter) LabelSet(labels ...Label) LabelSet {
74 return m.backend.compileLabelSet(labels...)
75 }
76
77 func (m *statefulMeter) WithLabels(labels ...Label) StatefulMeter {
78 set := m.LabelSet(labels...)
79 return m.WithLabelSet(set)
80 }
81
82 func (m *statefulMeter) WithHostScope(scope HostScope) StatefulMeter {
83 return &statefulMeter{
84 backend: m.backend,
85 prefix: m.prefix,
86 scope: mustNormalizeHostScope(scope),
87 sets: appendLabelSets(m.sets, nil),
88 }
89 }
90
91 func (m *statefulMeter) WithLabelSet(labels ...LabelSet) StatefulMeter {
92 for _, ls := range labels {
93 if ls.set == nil || ls.set.owner != m.backend {
94 panic(errForeignLabelSet)
95 }
96 }
97 return &statefulMeter{backend: m.backend, prefix: m.prefix, scope: m.scope, sets: appendLabelSets(m.sets, labels)}
98 }
99
100 func (m *statefulMeter) Vec(labelKeys ...string) StatefulVecMeter {
101 return &statefulVecMeter{
102 meter: m,
103 labelKeys: append([]string(nil), labelKeys...),
104 }
105 }
106
107 func (m *statefulMeter) LabelSet(labels ...Label) LabelSet {
108 return m.backend.compileLabelSet(labels...)
109 }
110
111 func (m *snapshotVecMeter) Gauge(name string, opts ...InstrumentOption) SnapshotGaugeVec {
112 return m.meter.GaugeVec(name, m.labelKeys, opts...)
113 }
114
115 func (m *snapshotVecMeter) WithHostScope(scope HostScope) SnapshotVecMeter {
116 return &snapshotVecMeter{
117 meter: m.meter.WithHostScope(scope).(*snapshotMeter),
118 labelKeys: append([]string(nil), m.labelKeys...),
119 }
120 }
121
122 func (m *snapshotVecMeter) Counter(name string, opts ...InstrumentOption) SnapshotCounterVec {
123 return m.meter.CounterVec(name, m.labelKeys, opts...)
124 }
125
126 func (m *snapshotVecMeter) Histogram(name string, opts ...InstrumentOption) SnapshotHistogramVec {
127 return m.meter.HistogramVec(name, m.labelKeys, opts...)
128 }
129
130 func (m *snapshotVecMeter) Summary(name string, opts ...InstrumentOption) SnapshotSummaryVec {
131 return m.meter.SummaryVec(name, m.labelKeys, opts...)
132 }
133
134 func (m *snapshotVecMeter) StateSet(name string, opts ...InstrumentOption) SnapshotStateSetVec {
135 return m.meter.StateSetVec(name, m.labelKeys, opts...)
136 }
137
138 func (m *snapshotVecMeter) MeasureSetGauge(name string, opts ...InstrumentOption) SnapshotMeasureSetGaugeVec {
139 return m.meter.MeasureSetGaugeVec(name, m.labelKeys, opts...)
140 }
141
142 func (m *snapshotVecMeter) MeasureSetCounter(name string, opts ...InstrumentOption) SnapshotMeasureSetCounterVec {
143 return m.meter.MeasureSetCounterVec(name, m.labelKeys, opts...)
144 }
145
146 func (m *statefulVecMeter) Gauge(name string, opts ...InstrumentOption) StatefulGaugeVec {
147 return m.meter.GaugeVec(name, m.labelKeys, opts...)
148 }
149
150 func (m *statefulVecMeter) WithHostScope(scope HostScope) StatefulVecMeter {
151 return &statefulVecMeter{
152 meter: m.meter.WithHostScope(scope).(*statefulMeter),
153 labelKeys: append([]string(nil), m.labelKeys...),
154 }
155 }
156
157 func (m *statefulVecMeter) Counter(name string, opts ...InstrumentOption) StatefulCounterVec {
158 return m.meter.CounterVec(name, m.labelKeys, opts...)
159 }
160
161 func (m *statefulVecMeter) Histogram(name string, opts ...InstrumentOption) StatefulHistogramVec {
162 return m.meter.HistogramVec(name, m.labelKeys, opts...)
163 }
164
165 func (m *statefulVecMeter) Summary(name string, opts ...InstrumentOption) StatefulSummaryVec {
166 return m.meter.SummaryVec(name, m.labelKeys, opts...)
167 }
168
169 func (m *statefulVecMeter) StateSet(name string, opts ...InstrumentOption) StatefulStateSetVec {
170 return m.meter.StateSetVec(name, m.labelKeys, opts...)
171 }
172
173 func (m *statefulVecMeter) MeasureSetGauge(name string, opts ...InstrumentOption) StatefulMeasureSetGaugeVec {
174 return m.meter.MeasureSetGaugeVec(name, m.labelKeys, opts...)
175 }
176
177 func (m *statefulVecMeter) MeasureSetCounter(name string, opts ...InstrumentOption) StatefulMeasureSetCounterVec {
178 return m.meter.MeasureSetCounterVec(name, m.labelKeys, opts...)
179 }
180
181 // metricName composes meter prefix with instrument local name.
182 func metricName(prefix, name string) string {
183 if prefix == "" {
184 return name
185 }
186 if name == "" {
187 return prefix
188 }
189 return prefix + "." + name
190 }