1// Copyright The OpenTelemetry Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package testdata
16
17import (
18	"time"
19
20	"go.opentelemetry.io/collector/model/pdata"
21)
22
23var (
24	TestMetricStartTime      = time.Date(2020, 2, 11, 20, 26, 12, 321, time.UTC)
25	TestMetricStartTimestamp = pdata.TimestampFromTime(TestMetricStartTime)
26
27	TestMetricExemplarTime      = time.Date(2020, 2, 11, 20, 26, 13, 123, time.UTC)
28	TestMetricExemplarTimestamp = pdata.TimestampFromTime(TestMetricExemplarTime)
29
30	TestMetricTime      = time.Date(2020, 2, 11, 20, 26, 13, 789, time.UTC)
31	TestMetricTimestamp = pdata.TimestampFromTime(TestMetricTime)
32)
33
34const (
35	TestGaugeDoubleMetricName     = "gauge-double"
36	TestGaugeIntMetricName        = "gauge-int"
37	TestSumDoubleMetricName       = "counter-double"
38	TestSumIntMetricName          = "counter-int"
39	TestDoubleHistogramMetricName = "double-histogram"
40	TestDoubleSummaryMetricName   = "double-summary"
41)
42
43func GenerateMetricsOneEmptyResourceMetrics() pdata.Metrics {
44	md := pdata.NewMetrics()
45	md.ResourceMetrics().AppendEmpty()
46	return md
47}
48
49func GenerateMetricsNoLibraries() pdata.Metrics {
50	md := GenerateMetricsOneEmptyResourceMetrics()
51	ms0 := md.ResourceMetrics().At(0)
52	initResource1(ms0.Resource())
53	return md
54}
55
56func GenerateMetricsOneEmptyInstrumentationLibrary() pdata.Metrics {
57	md := GenerateMetricsNoLibraries()
58	md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().AppendEmpty()
59	return md
60}
61
62func GenerateMetricsOneMetricNoResource() pdata.Metrics {
63	md := GenerateMetricsOneEmptyResourceMetrics()
64	rm0 := md.ResourceMetrics().At(0)
65	rm0ils0 := rm0.InstrumentationLibraryMetrics().AppendEmpty()
66	initSumIntMetric(rm0ils0.Metrics().AppendEmpty())
67	return md
68}
69
70func GenerateMetricsOneMetric() pdata.Metrics {
71	md := GenerateMetricsOneEmptyInstrumentationLibrary()
72	rm0ils0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
73	initSumIntMetric(rm0ils0.Metrics().AppendEmpty())
74	return md
75}
76
77func GenerateMetricsOneSumMetric() pdata.Metrics {
78	// TODO: this is currently used in place of GenerateMetricsOneMetric
79	// because the OTLP receiver converts IntSum to Sum types and causes a
80	// failure in TestSendMetrics. Once Sum supports setting either Int
81	// or Double, this function can be removed.
82	md := GenerateMetricsOneEmptyInstrumentationLibrary()
83	rm0ils0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
84	initSumMetric(rm0ils0.Metrics().AppendEmpty())
85	return md
86}
87
88func GenerateMetricsTwoMetrics() pdata.Metrics {
89	md := GenerateMetricsOneEmptyInstrumentationLibrary()
90	rm0ils0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
91	initSumIntMetric(rm0ils0.Metrics().AppendEmpty())
92	initSumIntMetric(rm0ils0.Metrics().AppendEmpty())
93	return md
94}
95
96func GenerateMetricsTwoSumMetrics() pdata.Metrics {
97	// TODO: this is currently used in place of GenerateMetricsTwoMetrics
98	// because the OTLP receiver converts IntSum to Sum types and causes a
99	// failure in TestSendMetrics. Once Sum supports setting either Int
100	// or Double, this function can be removed.
101	md := GenerateMetricsOneEmptyInstrumentationLibrary()
102	rm0ils0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
103	initSumMetric(rm0ils0.Metrics().AppendEmpty())
104	initSumMetric(rm0ils0.Metrics().AppendEmpty())
105	return md
106}
107
108func GenerateMetricsOneCounterOneSummaryMetrics() pdata.Metrics {
109	md := GenerateMetricsOneEmptyInstrumentationLibrary()
110	rm0ils0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
111	initSumIntMetric(rm0ils0.Metrics().AppendEmpty())
112	initDoubleSummaryMetric(rm0ils0.Metrics().AppendEmpty())
113	return md
114}
115
116func GenerateMetricsOneMetricNoLabels() pdata.Metrics {
117	md := GenerateMetricsOneMetric()
118	dps := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(0).Sum().DataPoints()
119	dps.At(0).LabelsMap().InitFromMap(map[string]string{})
120	dps.At(1).LabelsMap().InitFromMap(map[string]string{})
121	return md
122}
123
124func GenerateMetricsAllTypesNoDataPoints() pdata.Metrics {
125	md := GenerateMetricsOneEmptyInstrumentationLibrary()
126	ilm0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
127	ms := ilm0.Metrics()
128	initMetric(ms.AppendEmpty(), TestGaugeDoubleMetricName, pdata.MetricDataTypeGauge)
129	initMetric(ms.AppendEmpty(), TestGaugeIntMetricName, pdata.MetricDataTypeGauge)
130	initMetric(ms.AppendEmpty(), TestSumDoubleMetricName, pdata.MetricDataTypeSum)
131	initMetric(ms.AppendEmpty(), TestSumIntMetricName, pdata.MetricDataTypeSum)
132	initMetric(ms.AppendEmpty(), TestDoubleHistogramMetricName, pdata.MetricDataTypeHistogram)
133	initMetric(ms.AppendEmpty(), TestDoubleSummaryMetricName, pdata.MetricDataTypeSummary)
134	return md
135}
136
137func GenerateMetricsAllTypesEmptyDataPoint() pdata.Metrics {
138	md := GenerateMetricsOneEmptyInstrumentationLibrary()
139	ilm0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
140	ms := ilm0.Metrics()
141
142	doubleGauge := ms.AppendEmpty()
143	initMetric(doubleGauge, TestGaugeDoubleMetricName, pdata.MetricDataTypeGauge)
144	doubleGauge.Gauge().DataPoints().AppendEmpty()
145	intGauge := ms.AppendEmpty()
146	initMetric(intGauge, TestGaugeIntMetricName, pdata.MetricDataTypeGauge)
147	intGauge.Gauge().DataPoints().AppendEmpty()
148	doubleSum := ms.AppendEmpty()
149	initMetric(doubleSum, TestSumDoubleMetricName, pdata.MetricDataTypeSum)
150	doubleSum.Sum().DataPoints().AppendEmpty()
151	intSum := ms.AppendEmpty()
152	initMetric(intSum, TestSumIntMetricName, pdata.MetricDataTypeSum)
153	intSum.Sum().DataPoints().AppendEmpty()
154	histogram := ms.AppendEmpty()
155	initMetric(histogram, TestDoubleHistogramMetricName, pdata.MetricDataTypeHistogram)
156	histogram.Histogram().DataPoints().AppendEmpty()
157	summary := ms.AppendEmpty()
158	initMetric(summary, TestDoubleSummaryMetricName, pdata.MetricDataTypeSummary)
159	summary.Summary().DataPoints().AppendEmpty()
160	return md
161}
162
163func GenerateMetricsMetricTypeInvalid() pdata.Metrics {
164	md := GenerateMetricsOneEmptyInstrumentationLibrary()
165	ilm0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
166	initMetric(ilm0.Metrics().AppendEmpty(), TestSumIntMetricName, pdata.MetricDataTypeNone)
167	return md
168}
169
170func GeneratMetricsAllTypesWithSampleDatapoints() pdata.Metrics {
171	md := GenerateMetricsOneEmptyInstrumentationLibrary()
172
173	ilm := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
174	ms := ilm.Metrics()
175	initGaugeIntMetric(ms.AppendEmpty())
176	initGaugeDoubleMetric(ms.AppendEmpty())
177	initSumIntMetric(ms.AppendEmpty())
178	initSumDoubleMetric(ms.AppendEmpty())
179	initDoubleHistogramMetric(ms.AppendEmpty())
180	initDoubleSummaryMetric(ms.AppendEmpty())
181
182	return md
183}
184
185func initSumMetric(im pdata.Metric) {
186	initMetric(im, TestSumIntMetricName, pdata.MetricDataTypeSum)
187
188	idps := im.Sum().DataPoints()
189	idp0 := idps.AppendEmpty()
190	initMetricLabels1(idp0.LabelsMap())
191	idp0.SetStartTimestamp(TestMetricStartTimestamp)
192	idp0.SetTimestamp(TestMetricTimestamp)
193	idp0.SetDoubleVal(123)
194	idp1 := idps.AppendEmpty()
195	initMetricLabels2(idp1.LabelsMap())
196	idp1.SetStartTimestamp(TestMetricStartTimestamp)
197	idp1.SetTimestamp(TestMetricTimestamp)
198	idp1.SetDoubleVal(456)
199}
200
201func initGaugeIntMetric(im pdata.Metric) {
202	initMetric(im, TestGaugeIntMetricName, pdata.MetricDataTypeGauge)
203
204	idps := im.Gauge().DataPoints()
205	idp0 := idps.AppendEmpty()
206	initMetricLabels1(idp0.LabelsMap())
207	idp0.SetStartTimestamp(TestMetricStartTimestamp)
208	idp0.SetTimestamp(TestMetricTimestamp)
209	idp0.SetIntVal(123)
210	idp1 := idps.AppendEmpty()
211	initMetricLabels2(idp1.LabelsMap())
212	idp1.SetStartTimestamp(TestMetricStartTimestamp)
213	idp1.SetTimestamp(TestMetricTimestamp)
214	idp1.SetIntVal(456)
215}
216
217func initGaugeDoubleMetric(im pdata.Metric) {
218	initMetric(im, TestGaugeDoubleMetricName, pdata.MetricDataTypeGauge)
219
220	idps := im.Gauge().DataPoints()
221	idp0 := idps.AppendEmpty()
222	initMetricLabels12(idp0.LabelsMap())
223	idp0.SetStartTimestamp(TestMetricStartTimestamp)
224	idp0.SetTimestamp(TestMetricTimestamp)
225	idp0.SetDoubleVal(1.23)
226	idp1 := idps.AppendEmpty()
227	initMetricLabels13(idp1.LabelsMap())
228	idp1.SetStartTimestamp(TestMetricStartTimestamp)
229	idp1.SetTimestamp(TestMetricTimestamp)
230	idp1.SetDoubleVal(4.56)
231}
232
233func initSumIntMetric(im pdata.Metric) {
234	initMetric(im, TestSumIntMetricName, pdata.MetricDataTypeSum)
235
236	idps := im.Sum().DataPoints()
237	idp0 := idps.AppendEmpty()
238	initMetricLabels1(idp0.LabelsMap())
239	idp0.SetStartTimestamp(TestMetricStartTimestamp)
240	idp0.SetTimestamp(TestMetricTimestamp)
241	idp0.SetIntVal(123)
242	idp1 := idps.AppendEmpty()
243	initMetricLabels2(idp1.LabelsMap())
244	idp1.SetStartTimestamp(TestMetricStartTimestamp)
245	idp1.SetTimestamp(TestMetricTimestamp)
246	idp1.SetIntVal(456)
247}
248
249func initSumDoubleMetric(dm pdata.Metric) {
250	initMetric(dm, TestSumDoubleMetricName, pdata.MetricDataTypeSum)
251
252	ddps := dm.Sum().DataPoints()
253	ddp0 := ddps.AppendEmpty()
254	initMetricLabels12(ddp0.LabelsMap())
255	ddp0.SetStartTimestamp(TestMetricStartTimestamp)
256	ddp0.SetTimestamp(TestMetricTimestamp)
257	ddp0.SetDoubleVal(1.23)
258
259	ddp1 := ddps.AppendEmpty()
260	initMetricLabels13(ddp1.LabelsMap())
261	ddp1.SetStartTimestamp(TestMetricStartTimestamp)
262	ddp1.SetTimestamp(TestMetricTimestamp)
263	ddp1.SetDoubleVal(4.56)
264}
265
266func initDoubleHistogramMetric(hm pdata.Metric) {
267	initMetric(hm, TestDoubleHistogramMetricName, pdata.MetricDataTypeHistogram)
268
269	hdps := hm.Histogram().DataPoints()
270	hdp0 := hdps.AppendEmpty()
271	initMetricLabels13(hdp0.LabelsMap())
272	hdp0.SetStartTimestamp(TestMetricStartTimestamp)
273	hdp0.SetTimestamp(TestMetricTimestamp)
274	hdp0.SetCount(1)
275	hdp0.SetSum(15)
276	hdp1 := hdps.AppendEmpty()
277	initMetricLabels2(hdp1.LabelsMap())
278	hdp1.SetStartTimestamp(TestMetricStartTimestamp)
279	hdp1.SetTimestamp(TestMetricTimestamp)
280	hdp1.SetCount(1)
281	hdp1.SetSum(15)
282	hdp1.SetBucketCounts([]uint64{0, 1})
283	exemplar := hdp1.Exemplars().AppendEmpty()
284	exemplar.SetTimestamp(TestMetricExemplarTimestamp)
285	exemplar.SetDoubleVal(15)
286	initMetricAttachment(exemplar.FilteredLabels())
287	hdp1.SetExplicitBounds([]float64{1})
288}
289
290func initDoubleSummaryMetric(sm pdata.Metric) {
291	initMetric(sm, TestDoubleSummaryMetricName, pdata.MetricDataTypeSummary)
292
293	sdps := sm.Summary().DataPoints()
294	sdp0 := sdps.AppendEmpty()
295	initMetricLabels13(sdp0.LabelsMap())
296	sdp0.SetStartTimestamp(TestMetricStartTimestamp)
297	sdp0.SetTimestamp(TestMetricTimestamp)
298	sdp0.SetCount(1)
299	sdp0.SetSum(15)
300	sdp1 := sdps.AppendEmpty()
301	initMetricLabels2(sdp1.LabelsMap())
302	sdp1.SetStartTimestamp(TestMetricStartTimestamp)
303	sdp1.SetTimestamp(TestMetricTimestamp)
304	sdp1.SetCount(1)
305	sdp1.SetSum(15)
306
307	quantile := sdp1.QuantileValues().AppendEmpty()
308	quantile.SetQuantile(0.01)
309	quantile.SetValue(15)
310}
311
312func initMetric(m pdata.Metric, name string, ty pdata.MetricDataType) {
313	m.SetName(name)
314	m.SetDescription("")
315	m.SetUnit("1")
316	m.SetDataType(ty)
317	switch ty {
318	case pdata.MetricDataTypeSum:
319		sum := m.Sum()
320		sum.SetIsMonotonic(true)
321		sum.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
322	case pdata.MetricDataTypeHistogram:
323		histo := m.Histogram()
324		histo.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
325	}
326}
327
328func GenerateMetricsManyMetricsSameResource(metricsCount int) pdata.Metrics {
329	md := GenerateMetricsOneEmptyInstrumentationLibrary()
330	rs0ilm0 := md.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0)
331	rs0ilm0.Metrics().EnsureCapacity(metricsCount)
332	for i := 0; i < metricsCount; i++ {
333		initSumIntMetric(rs0ilm0.Metrics().AppendEmpty())
334	}
335	return md
336}
337