2024-05-15 15:18:33 +02:00
|
|
|
package datasource
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"io"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func BenchmarkMetrics(b *testing.B) {
|
|
|
|
payload := []byte(`[{"metric":{"__name__":"vm_rows"},"value":[1583786142,"13763"]},{"metric":{"__name__":"vm_requests", "foo":"bar", "baz": "qux"},"value":[1583786140,"2000"]}]`)
|
|
|
|
|
|
|
|
var pi promInstant
|
|
|
|
if err := pi.Unmarshal(payload); err != nil {
|
2024-08-19 21:15:33 +02:00
|
|
|
b.Fatal(err.Error())
|
2024-05-15 15:18:33 +02:00
|
|
|
}
|
|
|
|
b.Run("Instant", func(b *testing.B) {
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
_, _ = pi.metrics()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkParsePrometheusResponse(b *testing.B) {
|
|
|
|
req, _ := http.NewRequest("GET", "", nil)
|
|
|
|
resp := &http.Response{StatusCode: http.StatusOK}
|
|
|
|
data, err := os.ReadFile("testdata/instant_response.json")
|
|
|
|
if err != nil {
|
|
|
|
b.Fatalf("error while reading file: %s", err)
|
|
|
|
}
|
|
|
|
resp.Body = io.NopCloser(bytes.NewReader(data))
|
|
|
|
|
|
|
|
b.Run("Instant", func(b *testing.B) {
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
_, err := parsePrometheusResponse(req, resp)
|
|
|
|
if err != nil {
|
|
|
|
b.Fatalf("unexpected parse err: %s", err)
|
|
|
|
}
|
|
|
|
resp.Body = io.NopCloser(bytes.NewReader(data))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|