Skip to content

Commit 910e588

Browse files
committed
Make metric-type configurable as a CLI parameter, remove metric attributes
1 parent 1f8f7b0 commit 910e588

File tree

3 files changed

+51
-49
lines changed

3 files changed

+51
-49
lines changed

cmd/telemetrygen/internal/metrics/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ import (
1313
type Config struct {
1414
common.Config
1515
NumMetrics int
16+
MetricType metricType
1617
}
1718

1819
// Flags registers config flags.
1920
func (c *Config) Flags(fs *pflag.FlagSet) {
21+
c.MetricType = metricTypeGauge
22+
2023
c.CommonFlags(fs)
24+
fs.Var(&c.MetricType, "metric-type", "Metric type enum. must be one of 'gauge', 'sum', 'histogram' or 'all'")
2125
fs.IntVar(&c.NumMetrics, "metrics", 1, "Number of metrics to generate in each worker (ignored if duration is provided)")
2226
}

cmd/telemetrygen/internal/metrics/metrics.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ func Start(cfg *Config) error {
2828
if err != nil {
2929
return err
3030
}
31+
logger.Info("starting the metrics generator with configuration", zap.Any("config", cfg))
3132

3233
grpcExpOpt := []otlpmetricgrpc.Option{
3334
otlpmetricgrpc.WithEndpoint(cfg.Endpoint),
@@ -104,6 +105,7 @@ func Run(c *Config, exp sdkmetric.Exporter, logger *zap.Logger) error {
104105
wg.Add(1)
105106
w := worker{
106107
numMetrics: c.NumMetrics,
108+
metricType: c.MetricType,
107109
limitPerSecond: limit,
108110
totalDuration: c.TotalDuration,
109111
running: running,

cmd/telemetrygen/internal/metrics/worker.go

Lines changed: 45 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"sync/atomic"
1010
"time"
1111

12-
"go.opentelemetry.io/otel/attribute"
1312
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
1413
"go.opentelemetry.io/otel/sdk/metric/metricdata"
1514
"go.opentelemetry.io/otel/sdk/resource"
@@ -19,6 +18,7 @@ import (
1918

2019
type worker struct {
2120
running *atomic.Bool // pointer to shared flag that indicates it's time to stop the test
21+
metricType metricType // type of metric to generate
2222
numMetrics int // how many metrics the worker has to generate (only when duration==0)
2323
totalDuration time.Duration // how long to run the test for (overrides `numMetrics`)
2424
limitPerSecond rate.Limit // how many metrics per second to generate
@@ -31,63 +31,59 @@ func (w worker) simulateMetrics(res *resource.Resource, exporter sdkmetric.Expor
3131
limiter := rate.NewLimiter(w.limitPerSecond, 1)
3232

3333
var i int64
34-
value := 24.42
35-
attrs := attribute.NewSet(attribute.KeyValue{
36-
Key: attribute.Key("status.code"),
37-
Value: attribute.StringValue("STATUS_CODE_OK"),
38-
})
39-
4034
for w.running.Load() {
41-
rm := metricdata.ResourceMetrics{
42-
Resource: res,
43-
ScopeMetrics: []metricdata.ScopeMetrics{
44-
{
45-
Metrics: []metricdata.Metrics{
35+
var metrics []metricdata.Metrics
36+
if w.metricType == metricTypeGauge || w.metricType == metricTypeAll {
37+
metrics = append(metrics, metricdata.Metrics{
38+
Name: "gen.metric.gauge",
39+
Data: metricdata.Gauge[int64]{
40+
DataPoints: []metricdata.DataPoint[int64]{
4641
{
47-
Name: "gen.metric.gauge",
48-
Data: metricdata.Gauge[int64]{
49-
DataPoints: []metricdata.DataPoint[int64]{
50-
{
51-
Attributes: attrs,
52-
Time: time.Now(),
53-
Value: i,
54-
},
55-
},
56-
},
42+
StartTime: time.Now(),
43+
Time: time.Now().Add(1 * time.Second),
44+
Value: i,
5745
},
46+
},
47+
},
48+
})
49+
} else if w.metricType == metricTypeSum || w.metricType == metricTypeAll {
50+
metrics = append(metrics, metricdata.Metrics{
51+
Name: "gen.metric.sum",
52+
Data: metricdata.Sum[int64]{
53+
IsMonotonic: true,
54+
Temporality: metricdata.DeltaTemporality,
55+
DataPoints: []metricdata.DataPoint[int64]{
5856
{
59-
Name: "gen.metric.sum",
60-
Data: metricdata.Sum[int64]{
61-
IsMonotonic: true,
62-
Temporality: metricdata.DeltaTemporality,
63-
DataPoints: []metricdata.DataPoint[int64]{
64-
{
65-
Attributes: attrs,
66-
StartTime: time.Now(),
67-
Time: time.Now().Add(1 * time.Second),
68-
Value: i,
69-
},
70-
},
71-
},
57+
StartTime: time.Now(),
58+
Time: time.Now().Add(1 * time.Second),
59+
Value: i,
7260
},
61+
},
62+
},
63+
})
64+
} else if w.metricType == metricTypeHistogram || w.metricType == metricTypeAll {
65+
value := 24.42
66+
metrics = append(metrics, metricdata.Metrics{
67+
Name: "gen.metric.histogram",
68+
Data: metricdata.Histogram[float64]{
69+
Temporality: metricdata.CumulativeTemporality,
70+
DataPoints: []metricdata.HistogramDataPoint[float64]{
7371
{
74-
Name: "gen.metric.histogram",
75-
Data: metricdata.Histogram[float64]{
76-
Temporality: metricdata.CumulativeTemporality,
77-
DataPoints: []metricdata.HistogramDataPoint[float64]{
78-
{
79-
Attributes: attrs,
80-
Sum: float64(float32(value)),
81-
Max: metricdata.NewExtrema(float64(float32(value))),
82-
Min: metricdata.NewExtrema(float64(float32(value))),
83-
Count: 1,
84-
},
85-
},
86-
},
72+
Sum: float64(float32(value)),
73+
Max: metricdata.NewExtrema(float64(float32(value))),
74+
Min: metricdata.NewExtrema(float64(float32(value))),
75+
Count: 1,
8776
},
8877
},
8978
},
90-
},
79+
})
80+
} else {
81+
w.logger.Fatal("unknown metric type")
82+
}
83+
84+
rm := metricdata.ResourceMetrics{
85+
Resource: res,
86+
ScopeMetrics: []metricdata.ScopeMetrics{{Metrics: metrics}},
9187
}
9288

9389
if err := exporter.Export(context.Background(), &rm); err != nil {

0 commit comments

Comments
 (0)