Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# HELP events_total A nice help message.
# TYPE events_total counter
events_total{file="a",foo="bar"} 10
events_total{file="a",foo="baz"} 20
events_total{file="c",foo="bar"} 50
events_total{file="c",foo="baz"} 60
# HELP node_textfile_mtime_seconds Unixtime mtime of textfiles successfully read.
# TYPE node_textfile_mtime_seconds gauge
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_different_and_no_help/a.prom"} 1
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_different_and_no_help/b.prom"} 1
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_different_and_no_help/c.prom"} 1
# HELP node_textfile_scrape_error 1 if there was an error opening or reading a file, 0 otherwise
# TYPE node_textfile_scrape_error gauge
node_textfile_scrape_error 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# HELP events_total A nice help message.
# TYPE events_total counter
events_total{foo="bar",file="a"} 10
events_total{foo="baz",file="a"} 20

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# HELP events_total A different help message.
# TYPE events_total counter
events_total{foo="bar",file="b"} 30
events_total{foo="baz",file="b"} 40

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# TYPE events_total counter
events_total{foo="bar",file="c"} 50
events_total{foo="baz",file="c"} 60
16 changes: 16 additions & 0 deletions collector/fixtures/textfile/metrics_merge_partial_help.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# HELP events_total A nice help message.
# TYPE events_total counter
events_total{file="a",foo="bar"} 10
events_total{file="a",foo="baz"} 20
events_total{file="b",foo="bar"} 30
events_total{file="b",foo="baz"} 40
events_total{file="c",foo="bar"} 50
events_total{file="c",foo="baz"} 60
# HELP node_textfile_mtime_seconds Unixtime mtime of textfiles successfully read.
# TYPE node_textfile_mtime_seconds gauge
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_partial_help/a.prom"} 1
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_partial_help/b.prom"} 1
node_textfile_mtime_seconds{file="fixtures/textfile/metrics_merge_partial_help/c.prom"} 1
# HELP node_textfile_scrape_error 1 if there was an error opening or reading a file, 0 otherwise
# TYPE node_textfile_scrape_error gauge
node_textfile_scrape_error 0
3 changes: 3 additions & 0 deletions collector/fixtures/textfile/metrics_merge_partial_help/a.prom
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# TYPE events_total counter
events_total{foo="bar",file="a"} 10
events_total{foo="baz",file="a"} 20
4 changes: 4 additions & 0 deletions collector/fixtures/textfile/metrics_merge_partial_help/b.prom
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# HELP events_total A nice help message.
# TYPE events_total counter
events_total{foo="bar",file="b"} 30
events_total{foo="baz",file="b"} 40
3 changes: 3 additions & 0 deletions collector/fixtures/textfile/metrics_merge_partial_help/c.prom
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# TYPE events_total counter
events_total{foo="bar",file="c"} 50
events_total{foo="baz",file="c"} 60
14 changes: 9 additions & 5 deletions collector/textfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,9 @@ func (c *textFileCollector) Update(ch chan<- prometheus.Metric) error {

for _, mf := range families {
// Check for metrics with inconsistent help texts and take the first help text occurrence.
if helpTexts, seen := metricsNamesToHelpTexts[*mf.Name]; seen {
if mf.Help != nil && helpTexts[0] != *mf.Help || helpTexts[1] != "" {
// Families without a help text can't conflict; they inherit one below.
if mf.Help != nil {
if helpTexts, seen := metricsNamesToHelpTexts[*mf.Name]; seen && (helpTexts[0] != *mf.Help || helpTexts[1] != "") {
metricsNamesToHelpTexts[*mf.Name] = [2]string{helpTexts[0], *mf.Help}
errored = true
c.logger.Error("inconsistent metric help text",
Expand All @@ -229,8 +230,6 @@ func (c *textFileCollector) Update(ch chan<- prometheus.Metric) error {
"file", metricsNamesToFiles[*mf.Name][0])
continue
}
}
if mf.Help != nil {
metricsNamesToHelpTexts[*mf.Name] = [2]string{*mf.Help}
}
metricsNamesToFiles[*mf.Name] = append(metricsNamesToFiles[*mf.Name], metricsFilePath)
Expand All @@ -247,7 +246,12 @@ func (c *textFileCollector) Update(ch chan<- prometheus.Metric) error {
}
}

mfHelp := make(map[string]*string)
// Families without a help text take the one another file gave for the same metric,
// so that all families of a metric share the same help text when they are merged.
mfHelp := make(map[string]*string, len(metricsNamesToHelpTexts))
for name, helpTexts := range metricsNamesToHelpTexts {
mfHelp[name] = &helpTexts[0]
}
for _, mf := range parsedFamilies {
if mf.Help == nil {
if help, ok := mfHelp[*mf.Name]; ok {
Expand Down
8 changes: 8 additions & 0 deletions collector/textfile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,14 @@ func TestTextfileCollector(t *testing.T) {
paths: []string{"fixtures/textfile/metrics_merge_different_help"},
out: "fixtures/textfile/metrics_merge_different_help.out",
},
{
paths: []string{"fixtures/textfile/metrics_merge_partial_help"},
out: "fixtures/textfile/metrics_merge_partial_help.out",
},
{
paths: []string{"fixtures/textfile/metrics_merge_different_and_no_help"},
out: "fixtures/textfile/metrics_merge_different_and_no_help.out",
},
}

for i, test := range tests {
Expand Down