photon-protocol 0.0.0

Internal codec and compression traits for Photon
Documentation
syntax = "proto3";

package photon.ingest.v1;

service IngestService {
  // Bidirectional stream for metric batch ingestion.
  // The SDK sends batches, the server sends acks.
  rpc LogMetrics(stream MetricBatchRequest) returns (stream MetricBatchAck);

  // Unary RPC for crash recovery. The SDK asks the server for the
  // last committed sequence number for a given run.
  rpc GetWatermark(WatermarkRequest) returns (WatermarkResponse);
}

message MetricBatchRequest {
  string run_id = 1;
  uint64 sequence_number = 2;
  bytes compressed_payload = 3;
  uint32 crc32 = 4;
  string compressor_name = 5;
  uint64 created_at_epoch_ms = 6;
  uint32 point_count = 7;
  uint32 uncompressed_size = 8;
}

message MetricBatchAck {
  uint64 sequence_number = 1;
  AckStatus status = 2;
  string message = 3;
}

enum AckStatus {
  ACK_STATUS_UNSPECIFIED = 0;
  ACK_STATUS_OK = 1;
  ACK_STATUS_DUPLICATE = 2;
  ACK_STATUS_REJECTED = 3;
}

message MetricBatchContent {
  string run_id = 1;
  repeated string keys = 2;
  repeated MetricPointCompact points = 3;
}

message MetricPointCompact {
  uint32 key_index = 1;
  double value = 2;
  uint64 step = 3;
  uint64 timestamp_epoch_ms = 4;
}

message WatermarkRequest {
  string run_id = 1;
}

message WatermarkResponse {
  uint64 sequence_number = 1;
}