prompb

package
v0.2.0-beta.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 18, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package prompb implements the small subset of Prometheus's remote-read wire protocol needed for a Prometheus remote read endpoint (ReadRequest/ReadResponse and their nested messages), by hand, using google.golang.org/protobuf's low-level protowire primitives (already a transitive dependency, no new module).

Deliberately not github.com/prometheus/prometheus/prompb: that's the full Prometheus server module, known in practice to drag in a much heavier dependency tree than the handful of stable, simple messages this package actually needs, the same reasoning ADR 009 already applied against embedding VictoriaMetrics's storage engine for the metrics store itself. The remote-read wire format (field numbers, message shapes) has been stable for years across the Prometheus/ Thanos/Cortex/Grafana Mimir ecosystem, precisely because changing it would break every tool that speaks it; hand-encoding against that stable, public contract is a reasonable trade for staying dependency- light, unlike hand-rolling an internal format Levelrail alone reads.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MarshalReadRequest

func MarshalReadRequest(req ReadRequest) []byte

MarshalReadRequest encodes req as plain (uncompressed) protobuf bytes. The remote-read HTTP transport wraps this in snappy block compression; that's the HTTP handler's concern, not this package's, which only speaks the message format.

func MarshalReadResponse

func MarshalReadResponse(resp ReadResponse) []byte

MarshalReadResponse encodes resp as plain (uncompressed) protobuf bytes.

Types

type Label

type Label struct {
	Name  string
	Value string
}

Label is one name/value pair identifying a time series, e.g. {__name__="levelrail_cpu_percent"} or {service="web"}.

type LabelMatcher

type LabelMatcher struct {
	Type  MatcherType
	Name  string
	Value string
}

LabelMatcher is one selector term in a Query, e.g. Type=MatchEqual, Name="service", Value="web".

type MatcherType

type MatcherType int32

MatcherType mirrors prometheus/prometheus/prompb's LabelMatcher_Type enum values exactly; these are wire-format constants, not this package's own invention.

const (
	MatchEqual     MatcherType = 0
	MatchNotEqual  MatcherType = 1
	MatchRegexp    MatcherType = 2
	MatchNotRegexp MatcherType = 3
)

The four matcher types Prometheus's remote-read protocol defines. This pass's HTTP handler (internal/api/prometheus.go) only actually resolves MatchEqual; the others are still decoded correctly (an unsupported matcher type is a valid, representable value, not a decode error) so the codec itself stays a complete, honest implementation of the wire format even where the handler built on top of it is narrower.

type Query

type Query struct {
	StartTimestampMs int64
	EndTimestampMs   int64
	Matchers         []LabelMatcher
}

Query is one time-series selection: a time range plus the matchers that narrow which series it covers.

type QueryResult

type QueryResult struct {
	TimeSeries []TimeSeries
}

QueryResult answers one Query with every matching TimeSeries.

type ReadRequest

type ReadRequest struct {
	Queries []Query
}

ReadRequest is the top-level message a remote-read client (Prometheus or Grafana pointed directly at this control plane) sends.

func UnmarshalReadRequest

func UnmarshalReadRequest(b []byte) (ReadRequest, error)

UnmarshalReadRequest decodes plain (uncompressed) protobuf bytes.

type ReadResponse

type ReadResponse struct {
	Results []QueryResult
}

ReadResponse is the top-level message this control plane sends back, one QueryResult per Query in the originating ReadRequest, same order.

func UnmarshalReadResponse

func UnmarshalReadResponse(b []byte) (ReadResponse, error)

UnmarshalReadResponse decodes plain (uncompressed) protobuf bytes. Exported for tests (round-tripping this package's own output) and for any future client-side use; the HTTP handler itself only ever calls MarshalReadResponse.

type Sample

type Sample struct {
	Value     float64
	Timestamp int64
}

Sample is one metric value at one point in time. Timestamp is milliseconds since the Unix epoch, matching Prometheus's own convention (not seconds, and not this repo's more common time.Time).

type TimeSeries

type TimeSeries struct {
	Labels  []Label
	Samples []Sample
}

TimeSeries is one selected series: the labels that identify it plus every sample found for it within the query's time range.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL