[PRW 2.0] Moved rw2 proto to the full path (both package name and placement) (#13973)

undefined
This commit is contained in:
Bartlomiej Plotka 2024-05-08 09:08:00 +02:00 committed by GitHub
parent 7b88101cf5
commit 6673c346e9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 194 additions and 196 deletions

View file

@ -25,7 +25,7 @@ func (h Histogram) IsFloatHistogram() bool {
return ok return ok
} }
func (m *WriteRequest) OptimizedMarshal(dst []byte) ([]byte, error) { func (m *Request) OptimizedMarshal(dst []byte) ([]byte, error) {
siz := m.Size() siz := m.Size()
if cap(dst) < siz { if cap(dst) < siz {
dst = make([]byte, siz) dst = make([]byte, siz)
@ -41,7 +41,7 @@ func (m *WriteRequest) OptimizedMarshal(dst []byte) ([]byte, error) {
// OptimizedMarshalToSizedBuffer is mostly a copy of the generated MarshalToSizedBuffer, // OptimizedMarshalToSizedBuffer is mostly a copy of the generated MarshalToSizedBuffer,
// but calls OptimizedMarshalToSizedBuffer on the timeseries. // but calls OptimizedMarshalToSizedBuffer on the timeseries.
func (m *WriteRequest) OptimizedMarshalToSizedBuffer(dAtA []byte) (int, error) { func (m *Request) OptimizedMarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA) i := len(dAtA)
_ = i _ = i
var l int var l int

View file

@ -23,7 +23,7 @@ func TestOptimizedMarshal(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
m *WriteRequest m *Request
}{ }{
// { // {
// name: "empty", // name: "empty",
@ -31,7 +31,7 @@ func TestOptimizedMarshal(t *testing.T) {
// }, // },
{ {
name: "simple", name: "simple",
m: &WriteRequest{ m: &Request{
Timeseries: []TimeSeries{ Timeseries: []TimeSeries{
{ {
LabelsRefs: []uint32{ LabelsRefs: []uint32{
@ -90,7 +90,7 @@ func TestOptimizedMarshal(t *testing.T) {
require.Equal(t, expected, got) require.Equal(t, expected, got)
// round trip // round trip
m := &WriteRequest{} m := &Request{}
require.NoError(t, m.Unmarshal(got)) require.NoError(t, m.Unmarshal(got))
require.Equal(t, tt.m, m) require.Equal(t, tt.m, m)
}) })

View file

@ -1,5 +1,5 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT. // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: write/v2/types.proto // source: io/prometheus/write/v2/types.proto
package writev2 package writev2
@ -64,7 +64,7 @@ func (x Metadata_MetricType) String() string {
} }
func (Metadata_MetricType) EnumDescriptor() ([]byte, []int) { func (Metadata_MetricType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{4, 0} return fileDescriptor_f139519efd9fa8d7, []int{4, 0}
} }
type Histogram_ResetHint int32 type Histogram_ResetHint int32
@ -95,40 +95,44 @@ func (x Histogram_ResetHint) String() string {
} }
func (Histogram_ResetHint) EnumDescriptor() ([]byte, []int) { func (Histogram_ResetHint) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{5, 0} return fileDescriptor_f139519efd9fa8d7, []int{5, 0}
} }
// WriteRequest represents a Remote Write 2.0 request to write given time series // Request represents a request to write the given timeseries to a remote destination.
// to remote destination. Note that Remote Write 2.0 requires a content // This was introduced in the Remote Write 2.0 specification:
// negotiation for version and compressions, explained in // https://prometheus.io/docs/concepts/remote_write_spec_2_0/
// https://docs.google.com/document/d/1jx1fqpRnM0pAndeo3AgY7g6BLxN3Ah8R0Mm8RvNsHoU/edit // The canonical Content-Type request header value for this message is
// TODO(bwplotka): Change URL to Prometheus docs once ready. // "application/x-protobuf;proto=io.prometheus.write.v2.Request"
type WriteRequest struct { //
// symbols contains de-duplicated array of string elements used for various // NOTE: gogoproto options might change in future for this file, they
// items in WriteRequest like labels and some metadata items. To decode // are not part of the spec proto (they only modify the generated Go code, not
// the serialized message). See: https://github.com/prometheus/prometheus/issues/11908
type Request struct {
// symbols contains a de-duplicated array of string elements used for various
// items in a Request message, like labels and metadata items. To decode
// each of those items, referenced, by "ref(s)" suffix, you need to lookup the // each of those items, referenced, by "ref(s)" suffix, you need to lookup the
// actual string by index from symbols array. The order of strings is up to // actual string by index from symbols array. The order of strings is up to
// the client, server should not assume any particular encoding. // the client, server should not assume any particular encoding.
Symbols []string `protobuf:"bytes,1,rep,name=symbols,proto3" json:"symbols,omitempty"` Symbols []string `protobuf:"bytes,1,rep,name=symbols,proto3" json:"symbols,omitempty"`
// timeseries represents array of distinct series with 0 or more samples. // timeseries represents an array of distinct series with 0 or more samples.
Timeseries []TimeSeries `protobuf:"bytes,2,rep,name=timeseries,proto3" json:"timeseries"` Timeseries []TimeSeries `protobuf:"bytes,2,rep,name=timeseries,proto3" json:"timeseries"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *WriteRequest) Reset() { *m = WriteRequest{} } func (m *Request) Reset() { *m = Request{} }
func (m *WriteRequest) String() string { return proto.CompactTextString(m) } func (m *Request) String() string { return proto.CompactTextString(m) }
func (*WriteRequest) ProtoMessage() {} func (*Request) ProtoMessage() {}
func (*WriteRequest) Descriptor() ([]byte, []int) { func (*Request) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{0} return fileDescriptor_f139519efd9fa8d7, []int{0}
} }
func (m *WriteRequest) XXX_Unmarshal(b []byte) error { func (m *Request) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
} }
func (m *WriteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic { if deterministic {
return xxx_messageInfo_WriteRequest.Marshal(b, m, deterministic) return xxx_messageInfo_Request.Marshal(b, m, deterministic)
} else { } else {
b = b[:cap(b)] b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b) n, err := m.MarshalToSizedBuffer(b)
@ -138,26 +142,26 @@ func (m *WriteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
return b[:n], nil return b[:n], nil
} }
} }
func (m *WriteRequest) XXX_Merge(src proto.Message) { func (m *Request) XXX_Merge(src proto.Message) {
xxx_messageInfo_WriteRequest.Merge(m, src) xxx_messageInfo_Request.Merge(m, src)
} }
func (m *WriteRequest) XXX_Size() int { func (m *Request) XXX_Size() int {
return m.Size() return m.Size()
} }
func (m *WriteRequest) XXX_DiscardUnknown() { func (m *Request) XXX_DiscardUnknown() {
xxx_messageInfo_WriteRequest.DiscardUnknown(m) xxx_messageInfo_Request.DiscardUnknown(m)
} }
var xxx_messageInfo_WriteRequest proto.InternalMessageInfo var xxx_messageInfo_Request proto.InternalMessageInfo
func (m *WriteRequest) GetSymbols() []string { func (m *Request) GetSymbols() []string {
if m != nil { if m != nil {
return m.Symbols return m.Symbols
} }
return nil return nil
} }
func (m *WriteRequest) GetTimeseries() []TimeSeries { func (m *Request) GetTimeseries() []TimeSeries {
if m != nil { if m != nil {
return m.Timeseries return m.Timeseries
} }
@ -167,45 +171,36 @@ func (m *WriteRequest) GetTimeseries() []TimeSeries {
// TimeSeries represents a single series. // TimeSeries represents a single series.
type TimeSeries struct { type TimeSeries struct {
// labels_refs is a list of label name-value pair references, encoded // labels_refs is a list of label name-value pair references, encoded
// as indices to the WriteRequest.symbols array. This list's len is always // as indices to the Request.symbols array. This list's length is always
// a multiple of 2, and the underlying labels should be sorted. // a multiple of two, and the underlying labels should be sorted.
// //
// Note that there might be multiple TimeSeries objects in the same // Note that there might be multiple TimeSeries objects in the same
// WriteRequests with the same labels e.g. for different exemplars, metadata // Requests with the same labels e.g. for different exemplars, metadata
// or created timestamp. // or created timestamp.
LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"` LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"`
// samples contain zero or more samples for a given timeseries. For typical // Timeseries messages can either specify samples or (native) histogram samples
// clients, in healthy cases, there will be only one sample, for ~real // (histogram field), but not both. For typical clients (~real-time metric
// time metric streaming. Samples can, in theory, co-exist with histogram samples // streaming), in healthy cases, there will be only one sample or histogram.
// (histograms field), although it should be extremely rare in practice (e.g.
// only when classic histogram series and native histogram share exactly the
// same metric name).
// //
// Samples are sorted by timestamp (older first). // Samples and histograms are sorted by timestamp (older first).
Samples []Sample `protobuf:"bytes,2,rep,name=samples,proto3" json:"samples"` Samples []Sample `protobuf:"bytes,2,rep,name=samples,proto3" json:"samples"`
// histograms contain zero or more histogram samples for a given timeseries.
// For typical clients, in healthy cases, there will be only one sample, for ~real
// time metric streaming. histograms can co-exist with samples (see samples
// for details).
//
// histograms are sorted by timestamp (older first).
Histograms []Histogram `protobuf:"bytes,3,rep,name=histograms,proto3" json:"histograms"` Histograms []Histogram `protobuf:"bytes,3,rep,name=histograms,proto3" json:"histograms"`
// exemplars represents optional set of exemplars attached to this series' samples. // exemplars represents an optional set of exemplars attached to this series' samples.
Exemplars []Exemplar `protobuf:"bytes,4,rep,name=exemplars,proto3" json:"exemplars"` Exemplars []Exemplar `protobuf:"bytes,4,rep,name=exemplars,proto3" json:"exemplars"`
// metadata represents the metadata associated with the given series' samples. // metadata represents the metadata associated with the given series' samples.
Metadata Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata"` Metadata Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata"`
// created_timestamp represents an optional created timestamp associated with // created_timestamp represents an optional created timestamp associated with
// this series' samples in ms format, typically for counter or histogram type // this series' samples in ms format, typically for counter or histogram type
// metrics. Note that some servers might require this and in return fail to // metrics. Note that some servers might require this and in return fail to
// ingest such series within the WriteRequest. // ingest such samples within the Request.
// //
// For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go
// for conversion from/to time.Time to Prometheus timestamp. // for conversion from/to time.Time to Prometheus timestamp.
// //
// NOTE: Optional key word is omitted due to // Note that the "optional" keyword is omitted due to
// https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields
// Zero value means value not set. If you need to use exactly zero value for // Zero value means value not set. If you need to use exactly zero value for
// timestamp, use 1 millisecond before or after. // the timestamp, use 1 millisecond before or after.
CreatedTimestamp int64 `protobuf:"varint,6,opt,name=created_timestamp,json=createdTimestamp,proto3" json:"created_timestamp,omitempty"` CreatedTimestamp int64 `protobuf:"varint,6,opt,name=created_timestamp,json=createdTimestamp,proto3" json:"created_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -216,7 +211,7 @@ func (m *TimeSeries) Reset() { *m = TimeSeries{} }
func (m *TimeSeries) String() string { return proto.CompactTextString(m) } func (m *TimeSeries) String() string { return proto.CompactTextString(m) }
func (*TimeSeries) ProtoMessage() {} func (*TimeSeries) ProtoMessage() {}
func (*TimeSeries) Descriptor() ([]byte, []int) { func (*TimeSeries) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{1} return fileDescriptor_f139519efd9fa8d7, []int{1}
} }
func (m *TimeSeries) XXX_Unmarshal(b []byte) error { func (m *TimeSeries) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -292,7 +287,7 @@ func (m *TimeSeries) GetCreatedTimestamp() int64 {
// the metric changes. // the metric changes.
type Exemplar struct { type Exemplar struct {
// labels_refs is a list of label name-value pair references, encoded // labels_refs is a list of label name-value pair references, encoded
// as indices to the WriteRequest.symbols array. This list's len is always // as indices to the Request.symbols array. This list's len is always
// a multiple of 2, and the underlying labels should be sorted. // a multiple of 2, and the underlying labels should be sorted.
LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"` LabelsRefs []uint32 `protobuf:"varint,1,rep,packed,name=labels_refs,json=labelsRefs,proto3" json:"labels_refs,omitempty"`
// value represents an exact example value. This can be useful when the exemplar // value represents an exact example value. This can be useful when the exemplar
@ -302,10 +297,10 @@ type Exemplar struct {
// For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go
// for conversion from/to time.Time to Prometheus timestamp. // for conversion from/to time.Time to Prometheus timestamp.
// //
// NOTE: Optional key word is omitted due to // Note that the "optional" keyword is omitted due to
// https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields
// Zero value means value not set. If you need to use exactly zero value for // Zero value means value not set. If you need to use exactly zero value for
// timestamp, use 1 millisecond before or after. // the timestamp, use 1 millisecond before or after.
Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -316,7 +311,7 @@ func (m *Exemplar) Reset() { *m = Exemplar{} }
func (m *Exemplar) String() string { return proto.CompactTextString(m) } func (m *Exemplar) String() string { return proto.CompactTextString(m) }
func (*Exemplar) ProtoMessage() {} func (*Exemplar) ProtoMessage() {}
func (*Exemplar) Descriptor() ([]byte, []int) { func (*Exemplar) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{2} return fileDescriptor_f139519efd9fa8d7, []int{2}
} }
func (m *Exemplar) XXX_Unmarshal(b []byte) error { func (m *Exemplar) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -383,7 +378,7 @@ func (m *Sample) Reset() { *m = Sample{} }
func (m *Sample) String() string { return proto.CompactTextString(m) } func (m *Sample) String() string { return proto.CompactTextString(m) }
func (*Sample) ProtoMessage() {} func (*Sample) ProtoMessage() {}
func (*Sample) Descriptor() ([]byte, []int) { func (*Sample) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{3} return fileDescriptor_f139519efd9fa8d7, []int{3}
} }
func (m *Sample) XXX_Unmarshal(b []byte) error { func (m *Sample) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -428,11 +423,11 @@ func (m *Sample) GetTimestamp() int64 {
// Metadata represents the metadata associated with the given series' samples. // Metadata represents the metadata associated with the given series' samples.
type Metadata struct { type Metadata struct {
Type Metadata_MetricType `protobuf:"varint,1,opt,name=type,proto3,enum=write.v2.Metadata_MetricType" json:"type,omitempty"` Type Metadata_MetricType `protobuf:"varint,1,opt,name=type,proto3,enum=io.prometheus.write.v2.Metadata_MetricType" json:"type,omitempty"`
// help_ref is a reference to the WriteRequest.symbols array representing help // help_ref is a reference to the Request.symbols array representing help
// text for the metric. // text for the metric.
HelpRef uint32 `protobuf:"varint,3,opt,name=help_ref,json=helpRef,proto3" json:"help_ref,omitempty"` HelpRef uint32 `protobuf:"varint,3,opt,name=help_ref,json=helpRef,proto3" json:"help_ref,omitempty"`
// unit_ref is a reference to the WriteRequest.symbols array representing unit // unit_ref is a reference to the Request.symbols array representing unit
// for the metric. // for the metric.
UnitRef uint32 `protobuf:"varint,4,opt,name=unit_ref,json=unitRef,proto3" json:"unit_ref,omitempty"` UnitRef uint32 `protobuf:"varint,4,opt,name=unit_ref,json=unitRef,proto3" json:"unit_ref,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -444,7 +439,7 @@ func (m *Metadata) Reset() { *m = Metadata{} }
func (m *Metadata) String() string { return proto.CompactTextString(m) } func (m *Metadata) String() string { return proto.CompactTextString(m) }
func (*Metadata) ProtoMessage() {} func (*Metadata) ProtoMessage() {}
func (*Metadata) Descriptor() ([]byte, []int) { func (*Metadata) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{4} return fileDescriptor_f139519efd9fa8d7, []int{4}
} }
func (m *Metadata) XXX_Unmarshal(b []byte) error { func (m *Metadata) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -544,7 +539,7 @@ type Histogram struct {
// float histograms. // float histograms.
PositiveDeltas []int64 `protobuf:"zigzag64,12,rep,packed,name=positive_deltas,json=positiveDeltas,proto3" json:"positive_deltas,omitempty"` PositiveDeltas []int64 `protobuf:"zigzag64,12,rep,packed,name=positive_deltas,json=positiveDeltas,proto3" json:"positive_deltas,omitempty"`
PositiveCounts []float64 `protobuf:"fixed64,13,rep,packed,name=positive_counts,json=positiveCounts,proto3" json:"positive_counts,omitempty"` PositiveCounts []float64 `protobuf:"fixed64,13,rep,packed,name=positive_counts,json=positiveCounts,proto3" json:"positive_counts,omitempty"`
ResetHint Histogram_ResetHint `protobuf:"varint,14,opt,name=reset_hint,json=resetHint,proto3,enum=write.v2.Histogram_ResetHint" json:"reset_hint,omitempty"` ResetHint Histogram_ResetHint `protobuf:"varint,14,opt,name=reset_hint,json=resetHint,proto3,enum=io.prometheus.write.v2.Histogram_ResetHint" json:"reset_hint,omitempty"`
// timestamp represents timestamp of the sample in ms. // timestamp represents timestamp of the sample in ms.
// For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go
// for conversion from/to time.Time to Prometheus timestamp. // for conversion from/to time.Time to Prometheus timestamp.
@ -586,7 +581,7 @@ func (m *Histogram) Reset() { *m = Histogram{} }
func (m *Histogram) String() string { return proto.CompactTextString(m) } func (m *Histogram) String() string { return proto.CompactTextString(m) }
func (*Histogram) ProtoMessage() {} func (*Histogram) ProtoMessage() {}
func (*Histogram) Descriptor() ([]byte, []int) { func (*Histogram) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{5} return fileDescriptor_f139519efd9fa8d7, []int{5}
} }
func (m *Histogram) XXX_Unmarshal(b []byte) error { func (m *Histogram) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -796,7 +791,7 @@ func (m *BucketSpan) Reset() { *m = BucketSpan{} }
func (m *BucketSpan) String() string { return proto.CompactTextString(m) } func (m *BucketSpan) String() string { return proto.CompactTextString(m) }
func (*BucketSpan) ProtoMessage() {} func (*BucketSpan) ProtoMessage() {}
func (*BucketSpan) Descriptor() ([]byte, []int) { func (*BucketSpan) Descriptor() ([]byte, []int) {
return fileDescriptor_4919b8b88a093366, []int{6} return fileDescriptor_f139519efd9fa8d7, []int{6}
} }
func (m *BucketSpan) XXX_Unmarshal(b []byte) error { func (m *BucketSpan) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -840,81 +835,84 @@ func (m *BucketSpan) GetLength() uint32 {
} }
func init() { func init() {
proto.RegisterEnum("write.v2.Metadata_MetricType", Metadata_MetricType_name, Metadata_MetricType_value) proto.RegisterEnum("io.prometheus.write.v2.Metadata_MetricType", Metadata_MetricType_name, Metadata_MetricType_value)
proto.RegisterEnum("write.v2.Histogram_ResetHint", Histogram_ResetHint_name, Histogram_ResetHint_value) proto.RegisterEnum("io.prometheus.write.v2.Histogram_ResetHint", Histogram_ResetHint_name, Histogram_ResetHint_value)
proto.RegisterType((*WriteRequest)(nil), "write.v2.WriteRequest") proto.RegisterType((*Request)(nil), "io.prometheus.write.v2.Request")
proto.RegisterType((*TimeSeries)(nil), "write.v2.TimeSeries") proto.RegisterType((*TimeSeries)(nil), "io.prometheus.write.v2.TimeSeries")
proto.RegisterType((*Exemplar)(nil), "write.v2.Exemplar") proto.RegisterType((*Exemplar)(nil), "io.prometheus.write.v2.Exemplar")
proto.RegisterType((*Sample)(nil), "write.v2.Sample") proto.RegisterType((*Sample)(nil), "io.prometheus.write.v2.Sample")
proto.RegisterType((*Metadata)(nil), "write.v2.Metadata") proto.RegisterType((*Metadata)(nil), "io.prometheus.write.v2.Metadata")
proto.RegisterType((*Histogram)(nil), "write.v2.Histogram") proto.RegisterType((*Histogram)(nil), "io.prometheus.write.v2.Histogram")
proto.RegisterType((*BucketSpan)(nil), "write.v2.BucketSpan") proto.RegisterType((*BucketSpan)(nil), "io.prometheus.write.v2.BucketSpan")
} }
func init() { proto.RegisterFile("write/v2/types.proto", fileDescriptor_4919b8b88a093366) } func init() {
proto.RegisterFile("io/prometheus/write/v2/types.proto", fileDescriptor_f139519efd9fa8d7)
var fileDescriptor_4919b8b88a093366 = []byte{
// 897 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0xdd, 0x6e, 0x1b, 0x45,
0x14, 0xce, 0x78, 0x1d, 0xff, 0x9c, 0xd8, 0xee, 0x7a, 0xea, 0xb4, 0xdb, 0x40, 0x53, 0x63, 0x04,
0x58, 0x20, 0x39, 0x60, 0x10, 0x12, 0x28, 0x37, 0x76, 0xba, 0x89, 0x7d, 0x61, 0xa7, 0x1a, 0x6f,
0x40, 0xe1, 0x66, 0xb5, 0xb1, 0xc7, 0xf6, 0x8a, 0xfd, 0x63, 0x67, 0x6c, 0x08, 0x8f, 0xc2, 0x7b,
0xf0, 0x0e, 0xbd, 0x44, 0xe2, 0x1a, 0x84, 0xf2, 0x24, 0x68, 0x66, 0x7f, 0xed, 0xaa, 0xca, 0xdd,
0xcc, 0xf7, 0x33, 0xe7, 0xdb, 0x93, 0x73, 0x62, 0x68, 0xfd, 0x1a, 0xda, 0x9c, 0x9e, 0x6d, 0xfb,
0x67, 0xfc, 0x3e, 0xa0, 0xac, 0x17, 0x84, 0x3e, 0xf7, 0x71, 0x45, 0xa2, 0xbd, 0x6d, 0xff, 0xa4,
0xb5, 0xf2, 0x57, 0xbe, 0x04, 0xcf, 0xc4, 0x29, 0xe2, 0x3b, 0x0b, 0xa8, 0xfd, 0x28, 0x14, 0x84,
0xfe, 0xb2, 0xa1, 0x8c, 0x63, 0x0d, 0xca, 0xec, 0xde, 0xbd, 0xf3, 0x1d, 0xa6, 0xa1, 0xb6, 0xd2,
0xad, 0x92, 0xe4, 0x8a, 0xbf, 0x07, 0xe0, 0xb6, 0x4b, 0x19, 0x0d, 0x6d, 0xca, 0xb4, 0x42, 0x5b,
0xe9, 0x1e, 0xf5, 0x5b, 0xbd, 0xe4, 0xf9, 0x9e, 0x61, 0xbb, 0x74, 0x26, 0xb9, 0x61, 0xf1, 0xed,
0xbf, 0xaf, 0x0e, 0x48, 0x4e, 0xdd, 0xf9, 0xb3, 0x00, 0x90, 0x09, 0xf0, 0x2b, 0x38, 0x72, 0xac,
0x3b, 0xea, 0x30, 0x33, 0xa4, 0xcb, 0xa8, 0x50, 0x9d, 0x40, 0x04, 0x11, 0xba, 0x64, 0xf8, 0x4b,
0x28, 0x33, 0xcb, 0x0d, 0x9c, 0xb4, 0x90, 0x9a, 0x15, 0x9a, 0x49, 0x22, 0x2e, 0x92, 0xc8, 0xf0,
0x77, 0x00, 0x6b, 0x9b, 0x71, 0x7f, 0x15, 0x5a, 0x2e, 0xd3, 0x14, 0x69, 0x7a, 0x9a, 0x99, 0x46,
0x09, 0x97, 0x84, 0xcb, 0xc4, 0xf8, 0x5b, 0xa8, 0xd2, 0xdf, 0xa8, 0x1b, 0x38, 0x56, 0xc8, 0xb4,
0xa2, 0x74, 0xe2, 0xcc, 0xa9, 0xc7, 0x54, 0x6c, 0xcc, 0xa4, 0xf8, 0x1b, 0xa8, 0xb8, 0x94, 0x5b,
0x0b, 0x8b, 0x5b, 0xda, 0x61, 0x1b, 0xed, 0xda, 0x26, 0x31, 0x13, 0xdb, 0x52, 0x25, 0xfe, 0x02,
0x9a, 0xf3, 0x90, 0x5a, 0x9c, 0x2e, 0x4c, 0xd9, 0x20, 0x6e, 0xb9, 0x81, 0x56, 0x6a, 0xa3, 0xae,
0x42, 0xd4, 0x98, 0x30, 0x12, 0xbc, 0x63, 0x42, 0x25, 0xa9, 0xff, 0x78, 0xd3, 0x5a, 0x70, 0xb8,
0xb5, 0x9c, 0x0d, 0xd5, 0x0a, 0x6d, 0xd4, 0x45, 0x24, 0xba, 0xe0, 0x0f, 0xa1, 0x9a, 0xd5, 0x51,
0x64, 0x9d, 0x0c, 0xe8, 0x9c, 0x43, 0x29, 0xea, 0x67, 0xe6, 0x46, 0xef, 0x75, 0x17, 0xf6, 0xdd,
0x7f, 0x17, 0xa0, 0x92, 0x7c, 0x28, 0xfe, 0x0a, 0x8a, 0x62, 0xf0, 0xa4, 0xbf, 0xd1, 0x7f, 0xf9,
0x6e, 0x2b, 0xc4, 0x21, 0xb4, 0xe7, 0xc6, 0x7d, 0x40, 0x89, 0x94, 0xe2, 0x17, 0x50, 0x59, 0x53,
0x27, 0x10, 0x1f, 0x24, 0xa3, 0xd5, 0x49, 0x59, 0xdc, 0x09, 0x5d, 0x0a, 0x6a, 0xe3, 0xd9, 0x5c,
0x52, 0xc5, 0x88, 0x12, 0x77, 0x42, 0x97, 0x9d, 0x7f, 0x10, 0x40, 0xf6, 0x14, 0xfe, 0x00, 0x9e,
0x4f, 0x74, 0x83, 0x8c, 0x2f, 0x4c, 0xe3, 0xf6, 0x8d, 0x6e, 0xde, 0x4c, 0x67, 0x6f, 0xf4, 0x8b,
0xf1, 0xe5, 0x58, 0x7f, 0xad, 0x1e, 0xe0, 0xe7, 0xf0, 0x34, 0x4f, 0x5e, 0x5c, 0xdf, 0x4c, 0x0d,
0x9d, 0xa8, 0x08, 0x1f, 0x43, 0x33, 0x4f, 0x5c, 0x0d, 0x6e, 0xae, 0x74, 0xb5, 0x80, 0x5f, 0xc0,
0x71, 0x1e, 0x1e, 0x8d, 0x67, 0xc6, 0xf5, 0x15, 0x19, 0x4c, 0x54, 0x05, 0x9f, 0xc2, 0xc9, 0x3b,
0x8e, 0x8c, 0x2f, 0xee, 0x97, 0x9a, 0xdd, 0x4c, 0x26, 0x03, 0x72, 0xab, 0x1e, 0xe2, 0x16, 0xa8,
0x79, 0x62, 0x3c, 0xbd, 0xbc, 0x56, 0x4b, 0x58, 0x83, 0xd6, 0x8e, 0xdc, 0x18, 0x18, 0xfa, 0x4c,
0x37, 0xd4, 0x72, 0xe7, 0x8f, 0x12, 0x54, 0xd3, 0x79, 0xc5, 0x2f, 0xa1, 0x3a, 0xf7, 0x37, 0x1e,
0x37, 0x6d, 0x8f, 0xcb, 0xde, 0x16, 0x47, 0x07, 0xa4, 0x22, 0xa1, 0xb1, 0xc7, 0xf1, 0x47, 0x70,
0x14, 0xd1, 0x4b, 0xc7, 0xb7, 0x78, 0xf4, 0xa7, 0x1f, 0x1d, 0x10, 0x90, 0xe0, 0xa5, 0xc0, 0xb0,
0x0a, 0x0a, 0xdb, 0xb8, 0xb2, 0xc1, 0x88, 0x88, 0x23, 0x7e, 0x06, 0x25, 0x36, 0x5f, 0x53, 0xd7,
0x92, 0xad, 0x6d, 0x92, 0xf8, 0x86, 0x3f, 0x81, 0xc6, 0xef, 0x34, 0xf4, 0x4d, 0xbe, 0x0e, 0x29,
0x5b, 0xfb, 0xce, 0x42, 0xce, 0x35, 0x22, 0x75, 0x81, 0x1a, 0x09, 0x88, 0x3f, 0x8d, 0x65, 0x59,
0xae, 0x92, 0xcc, 0x85, 0x48, 0x4d, 0xe0, 0x17, 0x49, 0xb6, 0xcf, 0x41, 0xcd, 0xe9, 0xa2, 0x80,
0x65, 0x19, 0x10, 0x91, 0x46, 0xaa, 0x8c, 0x42, 0x0e, 0xa0, 0xe1, 0xd1, 0x95, 0xc5, 0xed, 0x2d,
0x35, 0x59, 0x60, 0x79, 0x4c, 0xab, 0xec, 0xff, 0x87, 0x19, 0x6e, 0xe6, 0x3f, 0x53, 0x3e, 0x0b,
0x2c, 0x2f, 0x5e, 0xaa, 0x7a, 0xe2, 0x10, 0x18, 0xc3, 0x9f, 0xc1, 0x93, 0xf4, 0x89, 0x05, 0x75,
0xb8, 0xc5, 0xb4, 0x6a, 0x5b, 0xe9, 0x62, 0x92, 0xbe, 0xfc, 0x5a, 0xa2, 0x3b, 0x42, 0x99, 0x8d,
0x69, 0xd0, 0x56, 0xba, 0x28, 0x13, 0xca, 0x60, 0x4c, 0x84, 0x0a, 0x7c, 0x66, 0xe7, 0x42, 0x1d,
0x3d, 0x1e, 0x2a, 0x71, 0xa4, 0xa1, 0xd2, 0x27, 0xe2, 0x50, 0xb5, 0x28, 0x54, 0x02, 0x67, 0xa1,
0x52, 0x61, 0x1c, 0xaa, 0x1e, 0x85, 0x4a, 0xe0, 0x38, 0xd4, 0x39, 0x40, 0x48, 0x19, 0xe5, 0xe6,
0x5a, 0x74, 0xbe, 0xb1, 0xbf, 0x6d, 0xe9, 0xe4, 0xf4, 0x88, 0x50, 0x8d, 0x6c, 0x8f, 0x93, 0x6a,
0x98, 0x1c, 0x77, 0x17, 0xfa, 0xc9, 0xde, 0x42, 0xe3, 0x8f, 0xa1, 0x3e, 0xdf, 0x30, 0xee, 0xbb,
0xa6, 0x5c, 0x7f, 0xa6, 0xa9, 0x32, 0x42, 0x2d, 0x02, 0x7f, 0x90, 0x58, 0x67, 0x01, 0xd5, 0xf4,
0x69, 0x7c, 0x02, 0xcf, 0x88, 0x98, 0x5b, 0x73, 0x34, 0x9e, 0x1a, 0x7b, 0xcb, 0x87, 0xa1, 0x91,
0xe3, 0x6e, 0xf5, 0x99, 0x8a, 0x70, 0x13, 0xea, 0x39, 0x6c, 0x7a, 0xad, 0x16, 0xc4, 0x7e, 0xe4,
0xa0, 0x68, 0x13, 0x95, 0x61, 0x19, 0x0e, 0x65, 0x1b, 0x86, 0x35, 0x80, 0x6c, 0x8a, 0x3a, 0xe7,
0x00, 0x59, 0xcb, 0xc5, 0x20, 0xfb, 0xcb, 0x25, 0xa3, 0xd1, 0x66, 0x34, 0x49, 0x7c, 0x13, 0xb8,
0x43, 0xbd, 0x15, 0x5f, 0xcb, 0x85, 0xa8, 0x93, 0xf8, 0x36, 0x3c, 0x7e, 0xfb, 0x70, 0x8a, 0xfe,
0x7a, 0x38, 0x45, 0xff, 0x3d, 0x9c, 0xa2, 0x9f, 0xca, 0xb2, 0x69, 0xdb, 0xfe, 0x5d, 0x49, 0xfe,
0x16, 0x7e, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x86, 0xd6, 0x1e, 0x43, 0x07, 0x00,
0x00,
} }
func (m *WriteRequest) Marshal() (dAtA []byte, err error) { var fileDescriptor_f139519efd9fa8d7 = []byte{
// 915 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x5d, 0x6f, 0xe3, 0x44,
0x14, 0xed, 0xc4, 0x69, 0x3e, 0x6e, 0x9b, 0xac, 0x3b, 0xb4, 0x5d, 0x6f, 0x81, 0x6c, 0xd6, 0x08,
0x88, 0x58, 0x29, 0x91, 0xc2, 0xeb, 0x0a, 0xd4, 0xb4, 0x6e, 0x13, 0xa4, 0x24, 0xab, 0x89, 0x8b,
0x54, 0x5e, 0x2c, 0x37, 0x99, 0x24, 0x16, 0xfe, 0xc2, 0x33, 0x09, 0x94, 0xdf, 0xc7, 0xc3, 0x3e,
0xf2, 0x07, 0x40, 0xd0, 0x77, 0xfe, 0x03, 0x9a, 0xf1, 0x67, 0x0b, 0xed, 0x6a, 0xdf, 0x66, 0xce,
0x3d, 0xe7, 0xde, 0x93, 0xeb, 0x7b, 0x27, 0xa0, 0x3b, 0x41, 0x2f, 0x8c, 0x02, 0x8f, 0xf2, 0x35,
0xdd, 0xb0, 0xde, 0xcf, 0x91, 0xc3, 0x69, 0x6f, 0xdb, 0xef, 0xf1, 0xdb, 0x90, 0xb2, 0x6e, 0x18,
0x05, 0x3c, 0xc0, 0xc7, 0x4e, 0xd0, 0xcd, 0x39, 0x5d, 0xc9, 0xe9, 0x6e, 0xfb, 0x27, 0x87, 0xab,
0x60, 0x15, 0x48, 0x4a, 0x4f, 0x9c, 0x62, 0xb6, 0xee, 0x41, 0x95, 0xd0, 0x9f, 0x36, 0x94, 0x71,
0xac, 0x41, 0x95, 0xdd, 0x7a, 0x37, 0x81, 0xcb, 0x34, 0xd4, 0x56, 0x3a, 0x75, 0x92, 0x5e, 0xf1,
0x10, 0x80, 0x3b, 0x1e, 0x65, 0x34, 0x72, 0x28, 0xd3, 0x4a, 0x6d, 0xa5, 0xb3, 0xd7, 0xd7, 0xbb,
0xff, 0x5f, 0xa7, 0x6b, 0x3a, 0x1e, 0x9d, 0x49, 0xe6, 0xa0, 0xfc, 0xee, 0xcf, 0x97, 0x3b, 0xa4,
0xa0, 0xd5, 0xff, 0x29, 0x01, 0xe4, 0x04, 0xfc, 0x12, 0xf6, 0x5c, 0xfb, 0x86, 0xba, 0xcc, 0x8a,
0xe8, 0x32, 0x2e, 0xdb, 0x20, 0x10, 0x43, 0x84, 0x2e, 0x19, 0xfe, 0x06, 0xaa, 0xcc, 0xf6, 0x42,
0x37, 0x2b, 0xdb, 0x7a, 0xac, 0xec, 0x4c, 0xd2, 0x92, 0x92, 0xa9, 0x08, 0x5f, 0x02, 0xac, 0x1d,
0xc6, 0x83, 0x55, 0x64, 0x7b, 0x4c, 0x53, 0x64, 0x8a, 0x57, 0x8f, 0xa5, 0x18, 0xa6, 0xcc, 0xd4,
0x78, 0x2e, 0xc5, 0xe7, 0x50, 0xa7, 0xbf, 0x50, 0x2f, 0x74, 0xed, 0x88, 0x69, 0x65, 0x99, 0xa7,
0xfd, 0x58, 0x1e, 0x23, 0x21, 0x26, 0x69, 0x72, 0x21, 0x1e, 0x40, 0xcd, 0xa3, 0xdc, 0x5e, 0xd8,
0xdc, 0xd6, 0x76, 0xdb, 0xe8, 0xa9, 0x24, 0xe3, 0x84, 0x97, 0x24, 0xc9, 0x74, 0xf8, 0x35, 0x1c,
0xcc, 0x23, 0x6a, 0x73, 0xba, 0xb0, 0x64, 0x63, 0xb9, 0xed, 0x85, 0x5a, 0xa5, 0x8d, 0x3a, 0x0a,
0x51, 0x93, 0x80, 0x99, 0xe2, 0xba, 0x05, 0xb5, 0xd4, 0xcd, 0xfb, 0x9b, 0x7d, 0x08, 0xbb, 0x5b,
0xdb, 0xdd, 0x50, 0xad, 0xd4, 0x46, 0x1d, 0x44, 0xe2, 0x0b, 0xfe, 0x04, 0xea, 0x79, 0x1d, 0x45,
0xd6, 0xc9, 0x01, 0xfd, 0x0d, 0x54, 0xe2, 0xce, 0xe7, 0x6a, 0xf4, 0xa8, 0xba, 0xf4, 0x50, 0xfd,
0x77, 0x09, 0x6a, 0xe9, 0x0f, 0xc5, 0xdf, 0x42, 0x59, 0xcc, 0xb1, 0xd4, 0x37, 0xfb, 0xaf, 0xdf,
0xd7, 0x18, 0x71, 0x88, 0x9c, 0xb9, 0x79, 0x1b, 0x52, 0x22, 0x85, 0xf8, 0x05, 0xd4, 0xd6, 0xd4,
0x0d, 0xc5, 0xcf, 0x93, 0x46, 0x1b, 0xa4, 0x2a, 0xee, 0x84, 0x2e, 0x45, 0x68, 0xe3, 0x3b, 0x5c,
0x86, 0xca, 0x71, 0x48, 0xdc, 0x09, 0x5d, 0xea, 0x7f, 0x20, 0x80, 0x3c, 0x15, 0xfe, 0x18, 0x9e,
0x8f, 0x0d, 0x93, 0x8c, 0xce, 0x2c, 0xf3, 0xfa, 0xad, 0x61, 0x5d, 0x4d, 0x66, 0x6f, 0x8d, 0xb3,
0xd1, 0xc5, 0xc8, 0x38, 0x57, 0x77, 0xf0, 0x73, 0xf8, 0xa8, 0x18, 0x3c, 0x9b, 0x5e, 0x4d, 0x4c,
0x83, 0xa8, 0x08, 0x1f, 0xc1, 0x41, 0x31, 0x70, 0x79, 0x7a, 0x75, 0x69, 0xa8, 0x25, 0xfc, 0x02,
0x8e, 0x8a, 0xf0, 0x70, 0x34, 0x33, 0xa7, 0x97, 0xe4, 0x74, 0xac, 0x2a, 0xb8, 0x05, 0x27, 0xff,
0x51, 0xe4, 0xf1, 0xf2, 0xc3, 0x52, 0xb3, 0xab, 0xf1, 0xf8, 0x94, 0x5c, 0xab, 0xbb, 0xf8, 0x10,
0xd4, 0x62, 0x60, 0x34, 0xb9, 0x98, 0xaa, 0x15, 0xac, 0xc1, 0xe1, 0x3d, 0xba, 0x79, 0x6a, 0x1a,
0x33, 0xc3, 0x54, 0xab, 0xfa, 0x6f, 0x15, 0xa8, 0x67, 0x93, 0x8d, 0x3f, 0x85, 0xfa, 0x3c, 0xd8,
0xf8, 0xdc, 0x72, 0x7c, 0x2e, 0x3b, 0x5d, 0x1e, 0xee, 0x90, 0x9a, 0x84, 0x46, 0x3e, 0xc7, 0xaf,
0x60, 0x2f, 0x0e, 0x2f, 0xdd, 0xc0, 0xe6, 0xf1, 0x20, 0x0c, 0x77, 0x08, 0x48, 0xf0, 0x42, 0x60,
0x58, 0x05, 0x85, 0x6d, 0x3c, 0xd9, 0x60, 0x44, 0xc4, 0x11, 0x1f, 0x43, 0x85, 0xcd, 0xd7, 0xd4,
0xb3, 0x65, 0x6b, 0x0f, 0x48, 0x72, 0xc3, 0x9f, 0x43, 0xf3, 0x57, 0x1a, 0x05, 0x16, 0x5f, 0x47,
0x94, 0xad, 0x03, 0x77, 0x21, 0x67, 0x1e, 0x91, 0x86, 0x40, 0xcd, 0x14, 0xc4, 0x5f, 0x24, 0xb4,
0xdc, 0x57, 0x45, 0xfa, 0x42, 0x64, 0x5f, 0xe0, 0x67, 0xa9, 0xb7, 0xaf, 0x40, 0x2d, 0xf0, 0x62,
0x83, 0x55, 0x69, 0x10, 0x91, 0x66, 0xc6, 0x8c, 0x4d, 0x4e, 0xa1, 0xe9, 0xd3, 0x95, 0xcd, 0x9d,
0x2d, 0xb5, 0x58, 0x68, 0xfb, 0x4c, 0xab, 0x3d, 0xfd, 0x6a, 0x0d, 0x36, 0xf3, 0x1f, 0x29, 0x9f,
0x85, 0xb6, 0x9f, 0x2c, 0x5c, 0x23, 0xd5, 0x0b, 0x8c, 0xe1, 0x2f, 0xe1, 0x59, 0x96, 0x70, 0x41,
0x5d, 0x6e, 0x33, 0xad, 0xde, 0x56, 0x3a, 0x98, 0x64, 0x75, 0xce, 0x25, 0x7a, 0x8f, 0x28, 0x9d,
0x32, 0x0d, 0xda, 0x4a, 0x07, 0xe5, 0x44, 0x69, 0x93, 0x09, 0x8b, 0x61, 0xc0, 0x9c, 0x82, 0xc5,
0xbd, 0x0f, 0xb5, 0x98, 0xea, 0x33, 0x8b, 0x59, 0xc2, 0xc4, 0xe2, 0x7e, 0x6c, 0x31, 0x85, 0x73,
0x8b, 0x19, 0x31, 0xb1, 0xd8, 0x88, 0x2d, 0xa6, 0x70, 0x62, 0xf1, 0x3b, 0x80, 0x88, 0x32, 0xca,
0xad, 0xb5, 0xf8, 0x2a, 0xcd, 0xa7, 0xf7, 0x32, 0x9b, 0xb1, 0x2e, 0x11, 0x9a, 0xa1, 0xe3, 0x73,
0x52, 0x8f, 0xd2, 0xe3, 0xfd, 0x87, 0xe0, 0xd9, 0x83, 0x87, 0x00, 0x7f, 0x06, 0x8d, 0xf9, 0x86,
0xf1, 0xc0, 0xb3, 0xe4, 0xb3, 0xc1, 0x34, 0x55, 0x1a, 0xda, 0x8f, 0xc1, 0xef, 0x25, 0xa6, 0x2f,
0xa0, 0x9e, 0xa5, 0xc6, 0x27, 0x70, 0x4c, 0xc4, 0x84, 0x5b, 0xc3, 0xd1, 0xc4, 0x7c, 0xb0, 0xa6,
0x18, 0x9a, 0x85, 0xd8, 0xb5, 0x31, 0x53, 0x11, 0x3e, 0x80, 0x46, 0x01, 0x9b, 0x4c, 0xd5, 0x92,
0xd8, 0xa4, 0x02, 0x14, 0xef, 0xac, 0x32, 0xa8, 0xc2, 0xae, 0x6c, 0xca, 0x60, 0x1f, 0x20, 0x9f,
0x37, 0xfd, 0x0d, 0x40, 0xfe, 0x01, 0xc4, 0xc8, 0x07, 0xcb, 0x25, 0xa3, 0xf1, 0x0e, 0x1d, 0x90,
0xe4, 0x26, 0x70, 0x97, 0xfa, 0x2b, 0xbe, 0x96, 0xab, 0xd3, 0x20, 0xc9, 0x6d, 0x70, 0xf4, 0xee,
0xae, 0x85, 0x7e, 0xbf, 0x6b, 0xa1, 0xbf, 0xee, 0x5a, 0xe8, 0x87, 0xaa, 0x6c, 0xda, 0xb6, 0x7f,
0x53, 0x91, 0x7f, 0xc2, 0x5f, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x14, 0x33, 0x22, 0x66, 0xd8,
0x07, 0x00, 0x00,
}
func (m *Request) Marshal() (dAtA []byte, err error) {
size := m.Size() size := m.Size()
dAtA = make([]byte, size) dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size]) n, err := m.MarshalToSizedBuffer(dAtA[:size])
@ -924,12 +922,12 @@ func (m *WriteRequest) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil return dAtA[:n], nil
} }
func (m *WriteRequest) MarshalTo(dAtA []byte) (int, error) { func (m *Request) MarshalTo(dAtA []byte) (int, error) {
size := m.Size() size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size]) return m.MarshalToSizedBuffer(dAtA[:size])
} }
func (m *WriteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { func (m *Request) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA) i := len(dAtA)
_ = i _ = i
var l int var l int
@ -1470,7 +1468,7 @@ func encodeVarintTypes(dAtA []byte, offset int, v uint64) int {
dAtA[offset] = uint8(v) dAtA[offset] = uint8(v)
return base return base
} }
func (m *WriteRequest) Size() (n int) { func (m *Request) Size() (n int) {
if m == nil { if m == nil {
return 0 return 0
} }
@ -1728,7 +1726,7 @@ func sovTypes(x uint64) (n int) {
func sozTypes(x uint64) (n int) { func sozTypes(x uint64) (n int) {
return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63))))
} }
func (m *WriteRequest) Unmarshal(dAtA []byte) error { func (m *Request) Unmarshal(dAtA []byte) error {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
for iNdEx < l { for iNdEx < l {
@ -1751,10 +1749,10 @@ func (m *WriteRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3) fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7) wireType := int(wire & 0x7)
if wireType == 4 { if wireType == 4 {
return fmt.Errorf("proto: WriteRequest: wiretype end group for non-group") return fmt.Errorf("proto: Request: wiretype end group for non-group")
} }
if fieldNum <= 0 { if fieldNum <= 0 {
return fmt.Errorf("proto: WriteRequest: illegal tag %d (wire type %d)", fieldNum, wire) return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
} }
switch fieldNum { switch fieldNum {
case 1: case 1:

View file

@ -1,4 +1,4 @@
// Copyright 2017 Prometheus Team // Copyright 2024 Prometheus Team
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
// You may obtain a copy of the License at // You may obtain a copy of the License at
@ -11,58 +11,55 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// NOTE: This file is also available on https://buf.build/prometheus/prometheus/docs/main:io.prometheus.write.v2
syntax = "proto3"; syntax = "proto3";
package write.v2; package io.prometheus.write.v2;
option go_package = "writev2"; option go_package = "writev2";
import "gogoproto/gogo.proto"; import "gogoproto/gogo.proto";
// WriteRequest represents a Remote Write 2.0 request to write given time series // Request represents a request to write the given timeseries to a remote destination.
// to remote destination. Note that Remote Write 2.0 requires a content // This was introduced in the Remote Write 2.0 specification:
// negotiation for version and compressions, explained in // https://prometheus.io/docs/concepts/remote_write_spec_2_0/
// https://docs.google.com/document/d/1jx1fqpRnM0pAndeo3AgY7g6BLxN3Ah8R0Mm8RvNsHoU/edit // The canonical Content-Type request header value for this message is
// TODO(bwplotka): Change URL to Prometheus docs once ready. // "application/x-protobuf;proto=io.prometheus.write.v2.Request"
message WriteRequest { //
// symbols contains de-duplicated array of string elements used for various // NOTE: gogoproto options might change in future for this file, they
// items in WriteRequest like labels and some metadata items. To decode // are not part of the spec proto (they only modify the generated Go code, not
// the serialized message). See: https://github.com/prometheus/prometheus/issues/11908
message Request {
// symbols contains a de-duplicated array of string elements used for various
// items in a Request message, like labels and metadata items. To decode
// each of those items, referenced, by "ref(s)" suffix, you need to lookup the // each of those items, referenced, by "ref(s)" suffix, you need to lookup the
// actual string by index from symbols array. The order of strings is up to // actual string by index from symbols array. The order of strings is up to
// the client, server should not assume any particular encoding. // the client, server should not assume any particular encoding.
repeated string symbols = 1; repeated string symbols = 1;
// timeseries represents array of distinct series with 0 or more samples. // timeseries represents an array of distinct series with 0 or more samples.
repeated TimeSeries timeseries = 2 [(gogoproto.nullable) = false]; repeated TimeSeries timeseries = 2 [(gogoproto.nullable) = false];
} }
// TimeSeries represents a single series. // TimeSeries represents a single series.
message TimeSeries { message TimeSeries {
// labels_refs is a list of label name-value pair references, encoded // labels_refs is a list of label name-value pair references, encoded
// as indices to the WriteRequest.symbols array. This list's len is always // as indices to the Request.symbols array. This list's length is always
// a multiple of 2, and the underlying labels should be sorted. // a multiple of two, and the underlying labels should be sorted.
// //
// Note that there might be multiple TimeSeries objects in the same // Note that there might be multiple TimeSeries objects in the same
// WriteRequests with the same labels e.g. for different exemplars, metadata // Requests with the same labels e.g. for different exemplars, metadata
// or created timestamp. // or created timestamp.
repeated uint32 labels_refs = 1; repeated uint32 labels_refs = 1;
// samples contain zero or more samples for a given timeseries. For typical // Timeseries messages can either specify samples or (native) histogram samples
// clients, in healthy cases, there will be only one sample, for ~real // (histogram field), but not both. For typical clients (~real-time metric
// time metric streaming. Samples can, in theory, co-exist with histogram samples // streaming), in healthy cases, there will be only one sample or histogram.
// (histograms field), although it should be extremely rare in practice (e.g.
// only when classic histogram series and native histogram share exactly the
// same metric name).
// //
// Samples are sorted by timestamp (older first). // Samples and histograms are sorted by timestamp (older first).
repeated Sample samples = 2 [(gogoproto.nullable) = false]; repeated Sample samples = 2 [(gogoproto.nullable) = false];
// histograms contain zero or more histogram samples for a given timeseries.
// For typical clients, in healthy cases, there will be only one sample, for ~real
// time metric streaming. histograms can co-exist with samples (see samples
// for details).
//
// histograms are sorted by timestamp (older first).
repeated Histogram histograms = 3 [(gogoproto.nullable) = false]; repeated Histogram histograms = 3 [(gogoproto.nullable) = false];
// exemplars represents optional set of exemplars attached to this series' samples. // exemplars represents an optional set of exemplars attached to this series' samples.
repeated Exemplar exemplars = 4 [(gogoproto.nullable) = false]; repeated Exemplar exemplars = 4 [(gogoproto.nullable) = false];
// metadata represents the metadata associated with the given series' samples. // metadata represents the metadata associated with the given series' samples.
@ -71,15 +68,15 @@ message TimeSeries {
// created_timestamp represents an optional created timestamp associated with // created_timestamp represents an optional created timestamp associated with
// this series' samples in ms format, typically for counter or histogram type // this series' samples in ms format, typically for counter or histogram type
// metrics. Note that some servers might require this and in return fail to // metrics. Note that some servers might require this and in return fail to
// ingest such series within the WriteRequest. // ingest such samples within the Request.
// //
// For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go
// for conversion from/to time.Time to Prometheus timestamp. // for conversion from/to time.Time to Prometheus timestamp.
// //
// NOTE: Optional key word is omitted due to // Note that the "optional" keyword is omitted due to
// https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields
// Zero value means value not set. If you need to use exactly zero value for // Zero value means value not set. If you need to use exactly zero value for
// timestamp, use 1 millisecond before or after. // the timestamp, use 1 millisecond before or after.
int64 created_timestamp = 6; int64 created_timestamp = 6;
} }
@ -88,7 +85,7 @@ message TimeSeries {
// the metric changes. // the metric changes.
message Exemplar { message Exemplar {
// labels_refs is a list of label name-value pair references, encoded // labels_refs is a list of label name-value pair references, encoded
// as indices to the WriteRequest.symbols array. This list's len is always // as indices to the Request.symbols array. This list's len is always
// a multiple of 2, and the underlying labels should be sorted. // a multiple of 2, and the underlying labels should be sorted.
repeated uint32 labels_refs = 1; repeated uint32 labels_refs = 1;
// value represents an exact example value. This can be useful when the exemplar // value represents an exact example value. This can be useful when the exemplar
@ -97,11 +94,11 @@ message Exemplar {
// timestamp represents an optional timestamp of the example in ms. // timestamp represents an optional timestamp of the example in ms.
// For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go // For Go, see github.com/prometheus/prometheus/model/timestamp/timestamp.go
// for conversion from/to time.Time to Prometheus timestamp. // for conversion from/to time.Time to Prometheus timestamp.
// //
// NOTE: Optional key word is omitted due to // Note that the "optional" keyword is omitted due to
// https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields // https://cloud.google.com/apis/design/design_patterns.md#optional_primitive_fields
// Zero value means value not set. If you need to use exactly zero value for // Zero value means value not set. If you need to use exactly zero value for
// timestamp, use 1 millisecond before or after. // the timestamp, use 1 millisecond before or after.
int64 timestamp = 3; int64 timestamp = 3;
} }
@ -128,10 +125,10 @@ message Metadata {
METRIC_TYPE_STATESET = 7; METRIC_TYPE_STATESET = 7;
} }
MetricType type = 1; MetricType type = 1;
// help_ref is a reference to the WriteRequest.symbols array representing help // help_ref is a reference to the Request.symbols array representing help
// text for the metric. // text for the metric.
uint32 help_ref = 3; uint32 help_ref = 3;
// unit_ref is a reference to the WriteRequest.symbols array representing unit // unit_ref is a reference to the Request.symbols array representing unit
// for the metric. // for the metric.
uint32 unit_ref = 4; uint32 unit_ref = 4;
} }

View file

@ -42,7 +42,7 @@ for dir in ${DIRS}; do
./*.proto ./*.proto
protoc --gogofast_out=plugins=grpc:. -I=. \ protoc --gogofast_out=plugins=grpc:. -I=. \
-I="${GOGOPROTO_PATH}" \ -I="${GOGOPROTO_PATH}" \
./write/v2/*.proto ./io/prometheus/write/v2/*.proto
protoc --gogofast_out=Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,paths=source_relative:. -I=. \ protoc --gogofast_out=Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,paths=source_relative:. -I=. \
-I="${GOGOPROTO_PATH}" \ -I="${GOGOPROTO_PATH}" \
./io/prometheus/client/*.proto ./io/prometheus/client/*.proto

View file

@ -35,7 +35,7 @@ import (
"github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/metadata" "github.com/prometheus/prometheus/model/metadata"
"github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/prompb"
writev2 "github.com/prometheus/prometheus/prompb/write/v2" writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2"
"github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/storage"
"github.com/prometheus/prometheus/tsdb/chunkenc" "github.com/prometheus/prometheus/tsdb/chunkenc"
"github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/chunks"
@ -1059,7 +1059,7 @@ func DecodeOTLPWriteRequest(r *http.Request) (pmetricotlp.ExportRequest, error)
return otlpReq, nil return otlpReq, nil
} }
func DecodeMinimizedWriteRequestStr(r io.Reader) (*writev2.WriteRequest, error) { func DecodeMinimizedWriteRequestStr(r io.Reader) (*writev2.Request, error) {
compressed, err := io.ReadAll(r) compressed, err := io.ReadAll(r)
if err != nil { if err != nil {
return nil, err return nil, err
@ -1070,7 +1070,7 @@ func DecodeMinimizedWriteRequestStr(r io.Reader) (*writev2.WriteRequest, error)
return nil, err return nil, err
} }
var req writev2.WriteRequest var req writev2.Request
if err := proto.Unmarshal(reqBuf, &req); err != nil { if err := proto.Unmarshal(reqBuf, &req); err != nil {
return nil, err return nil, err
} }
@ -1078,7 +1078,7 @@ func DecodeMinimizedWriteRequestStr(r io.Reader) (*writev2.WriteRequest, error)
return &req, nil return &req, nil
} }
func MinimizedWriteRequestToWriteRequest(redReq *writev2.WriteRequest) (*prompb.WriteRequest, error) { func MinimizedWriteRequestToWriteRequest(redReq *writev2.Request) (*prompb.WriteRequest, error) {
req := &prompb.WriteRequest{ req := &prompb.WriteRequest{
Timeseries: make([]prompb.TimeSeries, len(redReq.Timeseries)), Timeseries: make([]prompb.TimeSeries, len(redReq.Timeseries)),
// TODO handle metadata? // TODO handle metadata?

View file

@ -27,7 +27,7 @@ import (
"github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/histogram"
"github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/prompb"
writev2 "github.com/prometheus/prometheus/prompb/write/v2" writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2"
"github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/storage"
"github.com/prometheus/prometheus/tsdb/chunkenc" "github.com/prometheus/prometheus/tsdb/chunkenc"
"github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/chunks"
@ -77,7 +77,7 @@ var writeRequestFixture = &prompb.WriteRequest{
} }
// writeRequestMinimizedFixture represents the same request as writeRequestFixture, but using the minimized representation. // writeRequestMinimizedFixture represents the same request as writeRequestFixture, but using the minimized representation.
var writeRequestMinimizedFixture = func() *writev2.WriteRequest { var writeRequestMinimizedFixture = func() *writev2.Request {
st := newRwSymbolTable() st := newRwSymbolTable()
var labels []uint32 var labels []uint32
for _, s := range []string{ for _, s := range []string{
@ -97,7 +97,7 @@ var writeRequestMinimizedFixture = func() *writev2.WriteRequest {
st.RefStr(s) st.RefStr(s)
} }
return &writev2.WriteRequest{ return &writev2.Request{
Timeseries: []writev2.TimeSeries{ Timeseries: []writev2.TimeSeries{
{ {
LabelsRefs: labels, LabelsRefs: labels,

View file

@ -34,6 +34,8 @@ import (
semconv "go.opentelemetry.io/otel/semconv/v1.21.0" semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
"go.uber.org/atomic" "go.uber.org/atomic"
writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2"
"github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/histogram"
"github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/labels"
@ -41,7 +43,6 @@ import (
"github.com/prometheus/prometheus/model/relabel" "github.com/prometheus/prometheus/model/relabel"
"github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/model/timestamp"
"github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/prompb"
writev2 "github.com/prometheus/prometheus/prompb/write/v2"
"github.com/prometheus/prometheus/scrape" "github.com/prometheus/prometheus/scrape"
"github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/chunks"
"github.com/prometheus/prometheus/tsdb/record" "github.com/prometheus/prometheus/tsdb/record"
@ -2233,7 +2234,7 @@ func buildV2WriteRequest(logger log.Logger, samples []writev2.TimeSeries, labels
level.Debug(logger).Log("msg", "dropped data due to their age", "droppedSamples", droppedSamples, "droppedExemplars", droppedExemplars, "droppedHistograms", droppedHistograms) level.Debug(logger).Log("msg", "dropped data due to their age", "droppedSamples", droppedSamples, "droppedExemplars", droppedExemplars, "droppedHistograms", droppedHistograms)
} }
req := &writev2.WriteRequest{ req := &writev2.Request{
Symbols: labels, Symbols: labels,
Timeseries: timeSeries, Timeseries: timeSeries,
} }

View file

@ -36,13 +36,14 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.uber.org/atomic" "go.uber.org/atomic"
writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2"
"github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/model/histogram" "github.com/prometheus/prometheus/model/histogram"
"github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/relabel" "github.com/prometheus/prometheus/model/relabel"
"github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/model/timestamp"
"github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/prompb"
writev2 "github.com/prometheus/prometheus/prompb/write/v2"
"github.com/prometheus/prometheus/scrape" "github.com/prometheus/prometheus/scrape"
"github.com/prometheus/prometheus/tsdb/chunks" "github.com/prometheus/prometheus/tsdb/chunks"
"github.com/prometheus/prometheus/tsdb/record" "github.com/prometheus/prometheus/tsdb/record"
@ -1129,7 +1130,7 @@ func (c *TestWriteClient) Store(_ context.Context, req []byte, attemptNos int, r
reqProto = &prompb.WriteRequest{} reqProto = &prompb.WriteRequest{}
err = proto.Unmarshal(reqBuf, reqProto) err = proto.Unmarshal(reqBuf, reqProto)
case Version2: case Version2:
var reqMin writev2.WriteRequest var reqMin writev2.Request
err = proto.Unmarshal(reqBuf, &reqMin) err = proto.Unmarshal(reqBuf, &reqMin)
if err == nil { if err == nil {
reqProto, err = MinimizedWriteRequestToWriteRequest(&reqMin) reqProto, err = MinimizedWriteRequestToWriteRequest(&reqMin)

View file

@ -24,6 +24,8 @@ import (
"github.com/go-kit/log" "github.com/go-kit/log"
"github.com/go-kit/log/level" "github.com/go-kit/log/level"
writev2 "github.com/prometheus/prometheus/prompb/io/prometheus/write/v2"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/golang/snappy" "github.com/golang/snappy"
@ -33,7 +35,6 @@ import (
"github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/exemplar"
"github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/prompb" "github.com/prometheus/prometheus/prompb"
writev2 "github.com/prometheus/prometheus/prompb/write/v2"
"github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/storage"
otlptranslator "github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite" otlptranslator "github.com/prometheus/prometheus/storage/remote/otlptranslator/prometheusremotewrite"
) )
@ -204,7 +205,7 @@ func (h *writeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
err = h.write(r.Context(), &req) err = h.write(r.Context(), &req)
case RemoteWriteVersion20HeaderValue: case RemoteWriteVersion20HeaderValue:
// 2.0 request. // 2.0 request.
var reqMinStr writev2.WriteRequest var reqMinStr writev2.Request
if err := proto.Unmarshal(decompressed, &reqMinStr); err != nil { if err := proto.Unmarshal(decompressed, &reqMinStr); err != nil {
level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err.Error()) level.Error(h.logger).Log("msg", "Error decoding remote write request", "err", err.Error())
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
@ -452,7 +453,7 @@ func (h *otlpWriteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
} }
func (h *writeHandler) writeMinStr(ctx context.Context, req *writev2.WriteRequest) (err error) { func (h *writeHandler) writeMinStr(ctx context.Context, req *writev2.Request) (err error) {
outOfOrderExemplarErrs := 0 outOfOrderExemplarErrs := 0
app := h.appendable.Appender(ctx) app := h.appendable.Appender(ctx)