syntax = "proto3"; package monitoring; // Monitoring Service provides comprehensive system health monitoring, performance metrics collection, // alerting capabilities, and training metrics for the HFT trading system. This service tracks latency, // throughput, resource utilization, service health, and ML training progress across all components // with real-time alerting and streaming. service MonitoringService { // Health and Status Monitoring // Get overall system status and individual service health rpc GetSystemStatus(GetSystemStatusRequest) returns (GetSystemStatusResponse); // Stream real-time system status changes rpc StreamSystemStatus(StreamSystemStatusRequest) returns (stream SystemStatusEvent); // Perform detailed health checks on services rpc GetHealthCheck(GetHealthCheckRequest) returns (GetHealthCheckResponse); // Performance Metrics Collection // Get system and application metrics rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse); // Stream real-time performance metrics rpc StreamMetrics(StreamMetricsRequest) returns (stream MetricsEvent); // Get detailed latency performance metrics rpc GetLatencyMetrics(GetLatencyMetricsRequest) returns (GetLatencyMetricsResponse); // Get throughput and capacity metrics rpc GetThroughputMetrics(GetThroughputMetricsRequest) returns (GetThroughputMetricsResponse); // Alerting and Notification System // Stream real-time system alerts and notifications rpc StreamAlerts(StreamAlertsRequest) returns (stream AlertEvent); // Acknowledge an active alert rpc AcknowledgeAlert(AcknowledgeAlertRequest) returns (AcknowledgeAlertResponse); // Get all currently active alerts rpc GetActiveAlerts(GetActiveAlertsRequest) returns (GetActiveAlertsResponse); // Training Metrics (from monitoring_service) // Single snapshot of all active training sessions rpc GetLiveTrainingMetrics(GetLiveTrainingMetricsRequest) returns (GetLiveTrainingMetricsResponse); // Server-streaming: pushes updates every N seconds rpc StreamTrainingMetrics(StreamTrainingMetricsRequest) returns (stream GetLiveTrainingMetricsResponse); // Epoch history for a specific session (ring buffer, max 50 epochs) rpc GetEpochHistory(GetEpochHistoryRequest) returns (GetEpochHistoryResponse); // Kubernetes pod status — streams every N seconds rpc SubscribeClusterPods(SubscribeClusterPodsRequest) returns (stream ClusterPodsResponse); } // ============================================================================ // Health and Status Messages // ============================================================================ message GetSystemStatusRequest { repeated string service_names = 1; } message GetSystemStatusResponse { SystemStatus overall_status = 1; repeated ServiceStatus service_statuses = 2; int64 timestamp = 3; } message StreamSystemStatusRequest { repeated string service_names = 1; optional int32 update_frequency_seconds = 2; } message GetHealthCheckRequest { optional string service_name = 1; } message GetHealthCheckResponse { HealthStatus health_status = 1; repeated HealthCheck health_checks = 2; int64 timestamp = 3; } // ============================================================================ // Performance Metrics Messages // ============================================================================ message GetMetricsRequest { repeated string metric_names = 1; optional int64 start_time = 2; optional int64 end_time = 3; optional MetricAggregation aggregation = 4; } message GetMetricsResponse { repeated Metric metrics = 1; int64 timestamp = 2; } message StreamMetricsRequest { repeated string metric_names = 1; optional int32 update_frequency_seconds = 2; } message GetLatencyMetricsRequest { optional string service_name = 1; optional string operation_name = 2; optional int64 start_time = 3; optional int64 end_time = 4; } message GetLatencyMetricsResponse { repeated LatencyMetric latency_metrics = 1; } message GetThroughputMetricsRequest { optional string service_name = 1; optional string operation_name = 2; optional int64 start_time = 3; optional int64 end_time = 4; } message GetThroughputMetricsResponse { repeated ThroughputMetric throughput_metrics = 1; } // ============================================================================ // Alert Messages // ============================================================================ message StreamAlertsRequest { optional AlertSeverity min_severity = 1; repeated string service_names = 2; repeated AlertType alert_types = 3; } message AcknowledgeAlertRequest { string alert_id = 1; string acknowledged_by = 2; optional string note = 3; } message AcknowledgeAlertResponse { bool success = 1; string message = 2; int64 timestamp = 3; } message GetActiveAlertsRequest { optional AlertSeverity min_severity = 1; repeated string service_names = 2; } message GetActiveAlertsResponse { repeated Alert active_alerts = 1; int32 total_count = 2; } // ============================================================================ // Core Data Types (System Health) // ============================================================================ message ServiceStatus { string service_name = 1; ServiceHealth health = 2; ServiceState state = 3; optional string version = 4; optional string error_message = 5; int64 uptime_seconds = 6; int64 last_health_check = 7; map metadata = 8; repeated Dependency dependencies = 9; } message SystemStatus { SystemHealth overall_health = 1; int32 healthy_services = 2; int32 total_services = 3; repeated string critical_issues = 4; int64 system_uptime_seconds = 5; SystemMetrics system_metrics = 6; } message HealthCheck { string check_name = 1; HealthStatus status = 2; optional string message = 3; optional double response_time_ms = 4; int64 last_checked = 5; map details = 6; } message Dependency { string name = 1; DependencyType dependency_type = 2; HealthStatus status = 3; optional string endpoint = 4; optional double response_time_ms = 5; int64 last_checked = 6; } message SystemMetrics { double cpu_usage_percent = 1; double memory_usage_percent = 2; double disk_usage_percent = 3; double network_io_mbps = 4; int32 active_connections = 5; int32 total_requests = 6; double avg_response_time_ms = 7; double error_rate_percent = 8; } message Metric { string name = 1; MetricType metric_type = 2; double value = 3; string unit = 4; map labels = 5; int64 timestamp = 6; optional MetricStatistics statistics = 7; } message MetricStatistics { double min = 1; double max = 2; double avg = 3; double percentile_95 = 4; double percentile_99 = 5; double std_dev = 6; int32 sample_count = 7; } message LatencyMetric { string service_name = 1; string operation_name = 2; double avg_latency_ms = 3; double p50_latency_ms = 4; double p95_latency_ms = 5; double p99_latency_ms = 6; double max_latency_ms = 7; int32 request_count = 8; int64 time_window_start = 9; int64 time_window_end = 10; } message ThroughputMetric { string service_name = 1; string operation_name = 2; double requests_per_second = 3; double bytes_per_second = 4; int32 total_requests = 5; int64 total_bytes = 6; int64 time_window_start = 7; int64 time_window_end = 8; } message Alert { string alert_id = 1; AlertType alert_type = 2; AlertSeverity severity = 3; string title = 4; string description = 5; string service_name = 6; map labels = 7; int64 triggered_at = 8; optional int64 acknowledged_at = 9; optional string acknowledged_by = 10; optional int64 resolved_at = 11; AlertStatus status = 12; optional string resolution_note = 13; } // ============================================================================ // Event Messages (System Health) // ============================================================================ message SystemStatusEvent { SystemStatus system_status = 1; SystemStatusChangeType change_type = 2; int64 timestamp = 3; } message MetricsEvent { repeated Metric metrics = 1; int64 timestamp = 2; } message AlertEvent { Alert alert = 1; AlertEventType event_type = 2; int64 timestamp = 3; } // ============================================================================ // Training Metrics Messages (from monitoring_service) // ============================================================================ message GetLiveTrainingMetricsRequest { string model_filter = 1; // optional: "dqn", "ppo", etc. } message StreamTrainingMetricsRequest { string model_filter = 1; uint32 interval_seconds = 2; // 0 = server default (3s) } message GetLiveTrainingMetricsResponse { repeated TrainingSession sessions = 1; GpuSnapshot gpu = 2; uint32 active_k8s_jobs = 3; int64 timestamp = 4; float cpu_percent = 5; float memory_used_mb = 6; float memory_total_mb = 7; } message TrainingSession { string model = 1; string fold = 2; bool is_hyperopt = 3; // Epoch/progress float current_epoch = 4; float epoch_loss = 5; float validation_loss = 6; // Throughput float batches_per_second = 7; float batches_processed = 8; float iteration_seconds = 9; // Eval metrics float eval_accuracy = 10; float eval_precision = 11; float eval_recall = 12; float eval_f1 = 13; // Checkpoint float checkpoint_size_bytes = 14; uint32 checkpoint_saves = 15; uint32 checkpoint_failures = 16; // Health counters uint32 nan_detected = 17; uint32 gradient_explosions = 18; uint32 feature_errors = 19; // Hyperopt fields (populated when is_hyperopt=true) uint32 hyperopt_trial_current = 20; uint32 hyperopt_trial_total = 21; float hyperopt_best_objective = 22; uint32 hyperopt_trials_failed = 23; // RL diagnostics float q_value_mean = 24; float q_value_max = 25; float policy_entropy = 26; float kl_divergence = 27; float advantage_mean = 28; uint32 replay_buffer_size = 29; // Gradient & training health float gradient_norm = 30; float learning_rate = 31; float epoch_duration_seconds = 32; // Hyperopt intra-trial uint32 hyperopt_trial_epoch = 33; float hyperopt_trial_best_loss = 34; float hyperopt_elapsed_seconds = 35; // Epoch-level financial metrics float epoch_sharpe = 36; float epoch_sortino = 37; float epoch_win_rate = 38; float epoch_max_drawdown = 39; float epoch_profit_factor = 40; float epoch_total_return = 41; float epoch_avg_return = 42; uint32 epoch_total_trades = 43; // Action distribution float action_buy_pct = 44; float action_sell_pct = 45; float action_hold_pct = 46; } message GpuSnapshot { float utilization_percent = 1; float memory_used_mb = 2; float memory_total_mb = 3; float temperature_celsius = 4; float power_watts = 5; } message GetEpochHistoryRequest { string model = 1; string fold = 2; uint32 max_epochs = 3; // 0 = all (up to 50) } message EpochFinancialSnapshot { uint32 epoch = 1; float sharpe = 2; float sortino = 3; float win_rate = 4; float max_drawdown = 5; float profit_factor = 6; float total_return = 7; float avg_return = 8; uint32 total_trades = 9; float loss = 10; float val_loss = 11; float learning_rate = 12; float action_buy_pct = 13; float action_sell_pct = 14; float action_hold_pct = 15; } message GetEpochHistoryResponse { string model = 1; string fold = 2; repeated EpochFinancialSnapshot epochs = 3; } // ============================================================================ // Cluster Pod Messages // ============================================================================ message SubscribeClusterPodsRequest { uint32 interval_seconds = 1; // 0 = server default (5s) } message ClusterPodsResponse { repeated PodInfo pods = 1; int64 timestamp = 2; } message PodInfo { string name = 1; string service = 2; // app.kubernetes.io/name label string namespace = 3; string status = 4; // Running/Pending/CrashLoopBackOff/Completed/etc int32 restarts = 5; string age = 6; // human-readable: "2d5h", "3m" string node = 7; bool ready = 8; string version = 9; // from FOXHUNT_BUILD_VERSION env or empty } // ============================================================================ // Enums // ============================================================================ // Health status levels for services enum ServiceHealth { SERVICE_HEALTH_UNSPECIFIED = 0; // Default/unknown health SERVICE_HEALTH_HEALTHY = 1; // Service operating normally SERVICE_HEALTH_DEGRADED = 2; // Service performance degraded SERVICE_HEALTH_UNHEALTHY = 3; // Service not functioning properly SERVICE_HEALTH_CRITICAL = 4; // Service in critical failure state } // Operational states of services enum ServiceState { SERVICE_STATE_UNSPECIFIED = 0; // Default/unknown state SERVICE_STATE_STARTING = 1; // Service is starting up SERVICE_STATE_RUNNING = 2; // Service is running normally SERVICE_STATE_STOPPING = 3; // Service is shutting down SERVICE_STATE_STOPPED = 4; // Service is stopped SERVICE_STATE_ERROR = 5; // Service encountered an error } enum SystemHealth { SYSTEM_HEALTH_UNSPECIFIED = 0; SYSTEM_HEALTH_HEALTHY = 1; SYSTEM_HEALTH_DEGRADED = 2; SYSTEM_HEALTH_UNHEALTHY = 3; SYSTEM_HEALTH_CRITICAL = 4; } enum HealthStatus { HEALTH_STATUS_UNSPECIFIED = 0; HEALTH_STATUS_HEALTHY = 1; HEALTH_STATUS_DEGRADED = 2; HEALTH_STATUS_UNHEALTHY = 3; HEALTH_STATUS_CRITICAL = 4; } enum DependencyType { DEPENDENCY_TYPE_UNSPECIFIED = 0; DEPENDENCY_TYPE_DATABASE = 1; DEPENDENCY_TYPE_MESSAGE_QUEUE = 2; DEPENDENCY_TYPE_CACHE = 3; DEPENDENCY_TYPE_EXTERNAL_API = 4; DEPENDENCY_TYPE_FILE_SYSTEM = 5; DEPENDENCY_TYPE_NETWORK = 6; } enum MetricType { METRIC_TYPE_UNSPECIFIED = 0; METRIC_TYPE_COUNTER = 1; METRIC_TYPE_GAUGE = 2; METRIC_TYPE_HISTOGRAM = 3; METRIC_TYPE_TIMER = 4; } enum MetricAggregation { METRIC_AGGREGATION_UNSPECIFIED = 0; METRIC_AGGREGATION_SUM = 1; METRIC_AGGREGATION_AVG = 2; METRIC_AGGREGATION_MIN = 3; METRIC_AGGREGATION_MAX = 4; METRIC_AGGREGATION_COUNT = 5; } enum AlertType { ALERT_TYPE_UNSPECIFIED = 0; ALERT_TYPE_HEALTH_CHECK = 1; ALERT_TYPE_PERFORMANCE = 2; ALERT_TYPE_ERROR_RATE = 3; ALERT_TYPE_LATENCY = 4; ALERT_TYPE_THROUGHPUT = 5; ALERT_TYPE_RESOURCE_USAGE = 6; ALERT_TYPE_DEPENDENCY = 7; ALERT_TYPE_SECURITY = 8; } // Alert severity levels enum AlertSeverity { ALERT_SEVERITY_UNSPECIFIED = 0; // Default/unknown severity ALERT_SEVERITY_INFO = 1; // Informational alert ALERT_SEVERITY_WARNING = 2; // Warning requiring attention ALERT_SEVERITY_CRITICAL = 3; // Critical issue requiring immediate action ALERT_SEVERITY_EMERGENCY = 4; // Emergency requiring immediate response } // Current status of alerts enum AlertStatus { ALERT_STATUS_UNSPECIFIED = 0; // Default/unknown status ALERT_STATUS_ACTIVE = 1; // Alert is currently active ALERT_STATUS_ACKNOWLEDGED = 2; // Alert has been acknowledged ALERT_STATUS_RESOLVED = 3; // Alert has been resolved ALERT_STATUS_SUPPRESSED = 4; // Alert is temporarily suppressed } enum SystemStatusChangeType { SYSTEM_STATUS_CHANGE_TYPE_UNSPECIFIED = 0; SYSTEM_STATUS_CHANGE_TYPE_HEALTH_IMPROVED = 1; SYSTEM_STATUS_CHANGE_TYPE_HEALTH_DEGRADED = 2; SYSTEM_STATUS_CHANGE_TYPE_SERVICE_STARTED = 3; SYSTEM_STATUS_CHANGE_TYPE_SERVICE_STOPPED = 4; SYSTEM_STATUS_CHANGE_TYPE_SERVICE_ERROR = 5; } enum AlertEventType { ALERT_EVENT_TYPE_UNSPECIFIED = 0; ALERT_EVENT_TYPE_TRIGGERED = 1; ALERT_EVENT_TYPE_ACKNOWLEDGED = 2; ALERT_EVENT_TYPE_RESOLVED = 3; ALERT_EVENT_TYPE_ESCALATED = 4; }