Skip to content

Commit c50b02e

Browse files
authored
Fix internal metrics for output split into multiple lines (#7119)
1 parent 64fecfa commit c50b02e

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

internal/models/buffer.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ type Buffer struct {
3333

3434
// NewBuffer returns a new empty Buffer with the given capacity.
3535
func NewBuffer(name string, alias string, capacity int) *Buffer {
36+
tags := map[string]string{"output": name}
37+
if alias != "" {
38+
tags["alias"] = alias
39+
}
40+
3641
b := &Buffer{
3742
buf: make([]telegraf.Metric, capacity),
3843
first: 0,
@@ -43,27 +48,27 @@ func NewBuffer(name string, alias string, capacity int) *Buffer {
4348
MetricsAdded: selfstat.Register(
4449
"write",
4550
"metrics_added",
46-
map[string]string{"output": name, "alias": alias},
51+
tags,
4752
),
4853
MetricsWritten: selfstat.Register(
4954
"write",
5055
"metrics_written",
51-
map[string]string{"output": name, "alias": alias},
56+
tags,
5257
),
5358
MetricsDropped: selfstat.Register(
5459
"write",
5560
"metrics_dropped",
56-
map[string]string{"output": name, "alias": alias},
61+
tags,
5762
),
5863
BufferSize: selfstat.Register(
5964
"write",
6065
"buffer_size",
61-
map[string]string{"output": name, "alias": alias},
66+
tags,
6267
),
6368
BufferLimit: selfstat.Register(
6469
"write",
6570
"buffer_limit",
66-
map[string]string{"output": name, "alias": alias},
71+
tags,
6772
),
6873
}
6974
b.BufferSize.Set(int64(0))

internal/models/running_output_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import (
44
"fmt"
55
"sync"
66
"testing"
7+
"time"
78

89
"github.com/influxdata/telegraf"
10+
"github.com/influxdata/telegraf/selfstat"
911
"github.com/influxdata/telegraf/testutil"
1012
"github.com/stretchr/testify/assert"
1113
"github.com/stretchr/testify/require"
@@ -412,6 +414,50 @@ func TestRunningOutputWriteFailOrder3(t *testing.T) {
412414
assert.Equal(t, expected, m.Metrics())
413415
}
414416

417+
func TestInternalMetrics(t *testing.T) {
418+
_ = NewRunningOutput(
419+
"test_internal",
420+
&mockOutput{},
421+
&OutputConfig{
422+
Filter: Filter{},
423+
Name: "test_name",
424+
Alias: "test_alias",
425+
},
426+
5,
427+
10)
428+
429+
expected := []telegraf.Metric{
430+
testutil.MustMetric(
431+
"internal_write",
432+
map[string]string{
433+
"output": "test_name",
434+
"alias": "test_alias",
435+
},
436+
map[string]interface{}{
437+
"buffer_limit": 10,
438+
"buffer_size": 0,
439+
"errors": 0,
440+
"metrics_added": 0,
441+
"metrics_dropped": 0,
442+
"metrics_filtered": 0,
443+
"metrics_written": 0,
444+
"write_time_ns": 0,
445+
},
446+
time.Unix(0, 0),
447+
),
448+
}
449+
450+
var actual []telegraf.Metric
451+
for _, m := range selfstat.Metrics() {
452+
output, _ := m.GetTag("output")
453+
if m.Name() == "internal_write" && output == "test_name" {
454+
actual = append(actual, m)
455+
}
456+
}
457+
458+
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
459+
}
460+
415461
type mockOutput struct {
416462
sync.Mutex
417463

0 commit comments

Comments
 (0)