Files
akvorado/common/reporter/tests.go
2022-04-01 20:21:53 +02:00

59 lines
1.4 KiB
Go

//go:build !release
package reporter
import (
"net/http/httptest"
"strings"
"testing"
)
// NewMock creates a new reporter for tests. Currently, this is the same as a production reporter.
func NewMock(t *testing.T) *Reporter {
t.Helper()
r, err := New(Configuration{})
if err != nil {
t.Errorf("New() error:\n%+v", err)
}
return r
}
// GetMetrics returns a map from metric name to its value (as a
// string). It keeps only metrics matching the provided prefix.
func (r *Reporter) GetMetrics(prefix string, subset ...string) map[string]string {
results := make(map[string]string)
req := httptest.NewRequest("GET", "/api/v0/metrics", nil)
w := httptest.NewRecorder()
r.MetricsHTTPHandler().ServeHTTP(w, req)
lines := strings.Split(w.Body.String(), "\n")
for _, line := range lines {
// Very basic parsing
if strings.HasPrefix(line, "#") || !strings.HasPrefix(line, prefix) {
continue
}
var result []string
if idx := strings.Index(line, "} "); idx >= 0 {
result = []string{line[:idx+1], line[idx+2:]}
} else {
result = strings.SplitN(line, " ", 2)
if len(result) != 2 {
continue
}
}
trimmed := strings.TrimPrefix(result[0], prefix)
if len(subset) > 0 {
for _, oPrefix := range subset {
if strings.HasPrefix(trimmed, oPrefix) {
results[trimmed] = result[1]
break
}
}
} else {
results[trimmed] = result[1]
}
}
return results
}