syntax = "proto3"; package haproxy.ingest.v1; message LogBatch { uint32 schema_version = 1; string machine_id = 2; string hostname = 3; optional string previous_cursor = 4; string last_cursor = 5; int64 first_journal_timestamp_us = 6; int64 last_journal_timestamp_us = 7; repeated LogRecord records = 8; } message LogRecord { int64 journal_timestamp_us = 1; oneof payload { HAProxyEvent event = 2; RejectedEvent rejected = 3; JournalGap gap = 4; } } message HAProxyEvent { reserved 22; optional string client_ip = 1; optional uint32 client_port = 2; optional string frontend_name = 3; optional string backend_name = 4; optional string server_name = 5; optional string http_method = 6; optional string request_path = 7; optional string http_version = 8; int32 status_code = 9; uint64 bytes_sent = 10; int32 time_request_ms = 11; int32 time_wait_ms = 12; int32 time_connect_ms = 13; int32 time_response_ms = 14; int32 time_total_ms = 15; optional string termination_state = 16; uint32 retries = 17; optional string tls_sni = 18; optional string tls_version = 19; optional string tls_cipher = 20; optional bool tls_resumed = 21; repeated string normalization_flags = 23; optional uint32 active_connections = 24; optional uint32 frontend_connections = 25; optional uint32 backend_connections = 26; optional uint32 server_connections = 27; optional uint32 server_queue = 28; optional uint32 backend_queue = 29; } message RejectedEvent { string reason = 1; bytes message_sha256 = 2; optional string raw_message_prefix = 3; bool raw_message_truncated = 4; } message JournalGap { string expected_cursor = 1; string first_available_cursor = 2; optional int64 first_available_timestamp_us = 3; string reason = 4; }