#pragma once #include #include "esp_err.h" #ifdef __cplusplus extern "C" { #endif typedef enum { RUNTIME_DIAG_COUNTER_LIFECYCLE_START_ATTEMPT = 0, RUNTIME_DIAG_COUNTER_LIFECYCLE_START_SUCCESS, RUNTIME_DIAG_COUNTER_LIFECYCLE_START_FAILED, RUNTIME_DIAG_COUNTER_LIFECYCLE_START_RETRY, RUNTIME_DIAG_COUNTER_LIFECYCLE_STOP_ATTEMPT, RUNTIME_DIAG_COUNTER_LIFECYCLE_STOP_SUCCESS, RUNTIME_DIAG_COUNTER_LIFECYCLE_STOP_FAILED, RUNTIME_DIAG_COUNTER_WIFI_CONNECT_SUCCESS, RUNTIME_DIAG_COUNTER_WIFI_CONNECT_FAILED, RUNTIME_DIAG_COUNTER_WIFI_CONNECT_TIMEOUT, RUNTIME_DIAG_COUNTER_PRINTER_JOB_SUBMITTED, RUNTIME_DIAG_COUNTER_PRINTER_JOB_SUCCESS, RUNTIME_DIAG_COUNTER_PRINTER_JOB_FAILED, RUNTIME_DIAG_COUNTER_PRINTER_JOB_CANCELED, RUNTIME_DIAG_COUNTER_IMAGE_GENERATE_ATTEMPT, RUNTIME_DIAG_COUNTER_IMAGE_GENERATE_SUCCESS, RUNTIME_DIAG_COUNTER_IMAGE_GENERATE_FAILED, RUNTIME_DIAG_COUNTER_IMAGE_GENERATE_TIMEOUT, RUNTIME_DIAG_COUNTER_REST_RESPONSES_TOTAL, RUNTIME_DIAG_COUNTER_REST_ERRORS_TOTAL, RUNTIME_DIAG_COUNTER_MAX, } runtime_diag_counter_t; typedef enum { RUNTIME_DIAG_GAUGE_LIFECYCLE_STATE = 0, RUNTIME_DIAG_GAUGE_STATUS_POLL_PAUSE_DEPTH, RUNTIME_DIAG_GAUGE_PRINTER_QUEUE_DEPTH, RUNTIME_DIAG_GAUGE_MAX, } runtime_diag_gauge_t; typedef struct { uint64_t counters[RUNTIME_DIAG_COUNTER_MAX]; int32_t gauges[RUNTIME_DIAG_GAUGE_MAX]; int64_t last_error_ms; esp_err_t last_error_code; char last_error_source[32]; char last_error_message[96]; } runtime_diag_snapshot_t; void runtime_diag_counter_add(runtime_diag_counter_t counter, uint32_t delta); void runtime_diag_set_gauge(runtime_diag_gauge_t gauge, int32_t value); void runtime_diag_record_error(const char *source, esp_err_t code, const char *message); void runtime_diag_get_snapshot(runtime_diag_snapshot_t *out_snapshot); const char *runtime_diag_counter_name(runtime_diag_counter_t counter); const char *runtime_diag_gauge_name(runtime_diag_gauge_t gauge); #ifdef __cplusplus } #endif