Skip to content

Commit 14ceb33

Browse files
committed
fix: initialize prometheus text parsers
1 parent b2ee2f9 commit 14ceb33

3 files changed

Lines changed: 32 additions & 2 deletions

File tree

inputs/node_exporter/collector/textfile.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/prometheus/client_golang/prometheus"
2929
dto "github.com/prometheus/client_model/go"
3030
"github.com/prometheus/common/expfmt"
31+
"github.com/prometheus/common/model"
3132
)
3233

3334
var (
@@ -273,7 +274,7 @@ func (c *textFileCollector) processFile(dir, name string, ch chan<- prometheus.M
273274
}
274275
defer f.Close()
275276

276-
var parser expfmt.TextParser
277+
parser := expfmt.NewTextParser(model.UTF8Validation)
277278
families, err := parser.TextToMetricFamilies(f)
278279
if err != nil {
279280
return nil, nil, fmt.Errorf("failed to parse textfile data from %q: %w", path, err)

pkg/metrics/metrics.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/matttproud/golang_protobuf_extensions/pbutil"
1515
dto "github.com/prometheus/client_model/go"
1616
"github.com/prometheus/common/expfmt"
17+
"github.com/prometheus/common/model"
1718

1819
"flashcat.cloud/categraf/pkg/prom"
1920
"flashcat.cloud/categraf/types"
@@ -125,7 +126,7 @@ func Parse(buf []byte, header http.Header) (map[string]*dto.MetricFamily, error)
125126
}
126127

127128
func ParseReader(r io.Reader, header http.Header) (map[string]*dto.MetricFamily, error) {
128-
var parser expfmt.TextParser
129+
parser := expfmt.NewTextParser(model.UTF8Validation)
129130

130131
reader := bufio.NewReader(r)
131132

pkg/metrics/metrics_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package metrics
2+
3+
import (
4+
"net/http"
5+
"strings"
6+
"testing"
7+
)
8+
9+
func TestParseReaderTextFormatUsesValidationScheme(t *testing.T) {
10+
input := strings.NewReader("# HELP sample_metric sample metric\n# TYPE sample_metric gauge\nsample_metric 1\n")
11+
12+
families, err := ParseReader(input, http.Header{})
13+
if err != nil {
14+
t.Fatalf("ParseReader returned error: %v", err)
15+
}
16+
17+
if _, ok := families["sample_metric"]; !ok {
18+
t.Fatalf("expected sample_metric family, got %v", families)
19+
}
20+
}
21+
22+
func TestParseReaderTextFormatRejectsInvalidUTF8MetricName(t *testing.T) {
23+
input := strings.NewReader("sample_metric\xff 1\n")
24+
25+
if _, err := ParseReader(input, http.Header{}); err == nil {
26+
t.Fatal("expected invalid UTF-8 metric name error")
27+
}
28+
}

0 commit comments

Comments
 (0)