photoncloud-monorepo/nightlight/crates/nightlight-api/proto/admin.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

148 lines
3.5 KiB
Protocol Buffer

// Nightlight Admin API
//
// Provides health checks, statistics, and administrative operations.
syntax = "proto3";
package nightlight;
// Admin service provides operational and monitoring endpoints.
service Admin {
// Health check endpoint
rpc Health(HealthRequest) returns (HealthResponse);
// Get storage and query statistics
rpc Stats(StatsRequest) returns (StatsResponse);
// Get build information
rpc BuildInfo(BuildInfoRequest) returns (BuildInfoResponse);
}
// HealthRequest is empty (health check has no parameters).
message HealthRequest {}
// HealthResponse indicates server health status.
message HealthResponse {
// Status: "ok", "degraded", "error"
string status = 1;
// Human-readable status message
string message = 2;
// Component-level health checks
repeated ComponentHealth components = 3;
}
// ComponentHealth represents the health of a single component.
message ComponentHealth {
// Component name (e.g., "storage", "query_engine", "ingestion")
string name = 1;
// Status: "ok", "degraded", "error"
string status = 2;
// Optional details or error message
string message = 3;
}
// StatsRequest is empty (stats have no parameters).
message StatsRequest {}
// StatsResponse provides storage and operational statistics.
message StatsResponse {
// Storage statistics
StorageStats storage = 1;
// Ingestion statistics
IngestionStats ingestion = 2;
// Query statistics
QueryStats query = 3;
// Server uptime in seconds
uint64 uptime_seconds = 4;
}
// StorageStats provides time-series database statistics.
message StorageStats {
// Number of active time series (in-memory head)
uint64 active_series = 1;
// Total number of samples stored
uint64 total_samples = 2;
// Number of storage blocks (on-disk chunks)
uint64 blocks_count = 3;
// Number of samples in the head block (in-memory)
uint64 head_samples = 4;
// Total disk space used (bytes)
uint64 disk_bytes_used = 5;
// Oldest sample timestamp (milliseconds since epoch)
int64 oldest_sample_time = 6;
// Newest sample timestamp (milliseconds since epoch)
int64 newest_sample_time = 7;
}
// IngestionStats provides write/ingestion statistics.
message IngestionStats {
// Total samples ingested since server start
uint64 samples_ingested_total = 1;
// Total write requests received
uint64 write_requests_total = 2;
// Failed write requests
uint64 write_requests_failed = 3;
// Current samples per second (recent average)
double samples_per_second = 4;
// Samples currently in the write buffer
uint64 buffer_samples = 5;
}
// QueryStats provides query execution statistics.
message QueryStats {
// Total queries executed since server start
uint64 queries_total = 1;
// Failed queries
uint64 queries_failed = 2;
// Active queries (currently executing)
uint64 queries_active = 3;
// Query duration p50 (milliseconds)
double query_duration_p50 = 4;
// Query duration p95 (milliseconds)
double query_duration_p95 = 5;
// Query duration p99 (milliseconds)
double query_duration_p99 = 6;
}
// BuildInfoRequest is empty (build info has no parameters).
message BuildInfoRequest {}
// BuildInfoResponse provides server build and version information.
message BuildInfoResponse {
// Server version (e.g., "0.1.0")
string version = 1;
// Git commit hash
string commit = 2;
// Build timestamp (ISO 8601 format)
string build_time = 3;
// Rust compiler version
string rust_version = 4;
// Target platform (e.g., "x86_64-unknown-linux-gnu")
string target = 5;
}