package prompbmarshal

import (
	"fmt"
	"testing"
)

func BenchmarkWriteRequestMarshalProtobuf(b *testing.B) {
	b.ReportAllocs()
	b.SetBytes(int64(len(benchWriteRequest.Timeseries)))
	b.RunParallel(func(pb *testing.PB) {
		var data []byte
		for pb.Next() {
			data = benchWriteRequest.MarshalProtobuf(data[:0])
		}
	})
}

var benchWriteRequest = func() *WriteRequest {
	var tss []TimeSeries
	for i := 0; i < 1_000; i++ {
		ts := TimeSeries{
			Labels: []Label{
				{
					Name:  "__name__",
					Value: "process_cpu_seconds_total",
				},
				{
					Name:  "instance",
					Value: fmt.Sprintf("host-%d:4567", i),
				},
				{
					Name:  "job",
					Value: "node-exporter",
				},
				{
					Name:  "pod",
					Value: "foo-bar-pod-8983423843",
				},
				{
					Name:  "cpu",
					Value: "1",
				},
				{
					Name:  "mode",
					Value: "system",
				},
				{
					Name:  "node",
					Value: "host-123",
				},
				{
					Name:  "namespace",
					Value: "foo-bar-baz",
				},
				{
					Name:  "container",
					Value: fmt.Sprintf("aaa-bb-cc-dd-ee-%d", i),
				},
			},
			Samples: []Sample{
				{
					Value:     float64(i),
					Timestamp: 1e9 + int64(i)*1000,
				},
			},
		}
		tss = append(tss, ts)
	}
	wr := &WriteRequest{
		Timeseries: tss,
	}
	return wr
}()