photoncloud-monorepo/nightlight/crates/nightlight-api/proto/remote_write.proto
centra d2149b6249 fix(lightningstor): Fix SigV4 canonicalization for AWS S3 auth
- Replace form_urlencoded with RFC 3986 compliant URI encoding
- Implement aws_uri_encode() matching AWS SigV4 spec exactly
- Unreserved chars (A-Z,a-z,0-9,-,_,.,~) not encoded
- All other chars percent-encoded with uppercase hex
- Preserve slashes in paths, encode in query params
- Normalize empty paths to '/' per AWS spec
- Fix test expectations (body hash, HMAC values)
- Add comprehensive SigV4 signature determinism test

This fixes the canonicalization mismatch that caused signature
validation failures in T047. Auth can now be enabled for production.

Refs: T058.S1
2025-12-12 06:23:46 +09:00

62 lines
2 KiB
Protocol Buffer

// Prometheus Remote Write Protocol v1
// Reference: https://prometheus.io/docs/concepts/remote_write_spec/
//
// This proto definition is based on the Prometheus remote write specification
// for push-based metric ingestion. It's compatible with Prometheus, VictoriaMetrics,
// and other systems that implement the remote write protocol.
syntax = "proto3";
package prometheus;
// WriteRequest is the top-level message for remote write operations.
// Clients send a WriteRequest containing multiple time series to the server.
message WriteRequest {
// Time series data to be written
repeated TimeSeries timeseries = 1;
// Metadata about the time series (optional, not used in v1)
// Reserved for future use with metadata support
// repeated MetricMetadata metadata = 3;
}
// TimeSeries represents a single time series with its labels and samples.
// A time series is uniquely identified by its label set.
message TimeSeries {
// Set of labels that uniquely identify this time series
// Must include at least one label, typically __name__ for the metric name
repeated Label labels = 1;
// Samples (data points) for this time series
// Samples must be ordered by timestamp (ascending)
repeated Sample samples = 2;
// Exemplars are optional (used for tracing correlation)
// Not implemented in initial version
// repeated Exemplar exemplars = 3;
}
// Label is a key-value pair that identifies a time series dimension.
// Examples: {__name__="http_requests_total", method="GET", status="200"}
message Label {
// Label name (e.g., "__name__", "job", "instance")
string name = 1;
// Label value
string value = 2;
}
// Sample is a single data point in a time series.
message Sample {
// Metric value (float64)
double value = 1;
// Timestamp in milliseconds since Unix epoch
int64 timestamp = 2;
}
// WriteResponse is returned after a successful write operation.
message WriteResponse {
// Empty for successful writes
// Error information is conveyed via gRPC status codes
}