feat(proxy): record tunnel stability metrics

This commit is contained in:
fawney19
2026-05-08 22:03:17 +08:00
parent 9a84a6ff6c
commit a703acd1fe
81 changed files with 7229 additions and 1110 deletions

View File

@@ -39,7 +39,48 @@ CREATE TABLE IF NOT EXISTS proxy_node_events (
`node_id` VARCHAR(64) NOT NULL,
`event_type` VARCHAR(64) NOT NULL,
`detail` VARCHAR(500),
`event_metadata` JSON,
`created_at` BIGINT NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS proxy_node_metrics_1m (
`node_id` VARCHAR(64) NOT NULL,
`bucket_start_unix_secs` BIGINT NOT NULL,
`samples` BIGINT NOT NULL DEFAULT 0,
`uptime_samples` BIGINT NOT NULL DEFAULT 0,
`active_connections_sum` BIGINT NOT NULL DEFAULT 0,
`active_connections_max` BIGINT NOT NULL DEFAULT 0,
`heartbeat_rtt_ms_sum` BIGINT NOT NULL DEFAULT 0,
`heartbeat_rtt_ms_max` BIGINT NOT NULL DEFAULT 0,
`connect_errors_delta` BIGINT NOT NULL DEFAULT 0,
`disconnects_delta` BIGINT NOT NULL DEFAULT 0,
`error_events_delta` BIGINT NOT NULL DEFAULT 0,
`ws_in_bytes_delta` BIGINT NOT NULL DEFAULT 0,
`ws_out_bytes_delta` BIGINT NOT NULL DEFAULT 0,
`ws_in_frames_delta` BIGINT NOT NULL DEFAULT 0,
`ws_out_frames_delta` BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY (`node_id`, `bucket_start_unix_secs`),
KEY idx_proxy_node_metrics_1m_bucket_start (`bucket_start_unix_secs`)
);
CREATE TABLE IF NOT EXISTS proxy_node_metrics_1h (
`node_id` VARCHAR(64) NOT NULL,
`bucket_start_unix_secs` BIGINT NOT NULL,
`samples` BIGINT NOT NULL DEFAULT 0,
`uptime_samples` BIGINT NOT NULL DEFAULT 0,
`active_connections_sum` BIGINT NOT NULL DEFAULT 0,
`active_connections_max` BIGINT NOT NULL DEFAULT 0,
`heartbeat_rtt_ms_sum` BIGINT NOT NULL DEFAULT 0,
`heartbeat_rtt_ms_max` BIGINT NOT NULL DEFAULT 0,
`connect_errors_delta` BIGINT NOT NULL DEFAULT 0,
`disconnects_delta` BIGINT NOT NULL DEFAULT 0,
`error_events_delta` BIGINT NOT NULL DEFAULT 0,
`ws_in_bytes_delta` BIGINT NOT NULL DEFAULT 0,
`ws_out_bytes_delta` BIGINT NOT NULL DEFAULT 0,
`ws_in_frames_delta` BIGINT NOT NULL DEFAULT 0,
`ws_out_frames_delta` BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY (`node_id`, `bucket_start_unix_secs`),
KEY idx_proxy_node_metrics_1h_bucket_start (`bucket_start_unix_secs`)
);

View File

@@ -40,8 +40,51 @@ CREATE TABLE IF NOT EXISTS public.proxy_node_events (
node_id character varying(64) NOT NULL,
event_type character varying(64) NOT NULL,
detail character varying(500),
event_metadata jsonb,
created_at bigint NOT NULL
);
ALTER TABLE ONLY public.proxy_node_events ADD CONSTRAINT proxy_node_events_pkey PRIMARY KEY (id);
CREATE TABLE IF NOT EXISTS public.proxy_node_metrics_1m (
node_id character varying(64) NOT NULL,
bucket_start_unix_secs bigint NOT NULL,
samples bigint DEFAULT 0 NOT NULL,
uptime_samples bigint DEFAULT 0 NOT NULL,
active_connections_sum bigint DEFAULT 0 NOT NULL,
active_connections_max bigint DEFAULT 0 NOT NULL,
heartbeat_rtt_ms_sum bigint DEFAULT 0 NOT NULL,
heartbeat_rtt_ms_max bigint DEFAULT 0 NOT NULL,
connect_errors_delta bigint DEFAULT 0 NOT NULL,
disconnects_delta bigint DEFAULT 0 NOT NULL,
error_events_delta bigint DEFAULT 0 NOT NULL,
ws_in_bytes_delta bigint DEFAULT 0 NOT NULL,
ws_out_bytes_delta bigint DEFAULT 0 NOT NULL,
ws_in_frames_delta bigint DEFAULT 0 NOT NULL,
ws_out_frames_delta bigint DEFAULT 0 NOT NULL
);
ALTER TABLE ONLY public.proxy_node_metrics_1m ADD CONSTRAINT proxy_node_metrics_1m_pkey PRIMARY KEY (node_id, bucket_start_unix_secs);
CREATE INDEX IF NOT EXISTS idx_proxy_node_metrics_1m_bucket_start ON public.proxy_node_metrics_1m USING btree (bucket_start_unix_secs);
CREATE TABLE IF NOT EXISTS public.proxy_node_metrics_1h (
node_id character varying(64) NOT NULL,
bucket_start_unix_secs bigint NOT NULL,
samples bigint DEFAULT 0 NOT NULL,
uptime_samples bigint DEFAULT 0 NOT NULL,
active_connections_sum bigint DEFAULT 0 NOT NULL,
active_connections_max bigint DEFAULT 0 NOT NULL,
heartbeat_rtt_ms_sum bigint DEFAULT 0 NOT NULL,
heartbeat_rtt_ms_max bigint DEFAULT 0 NOT NULL,
connect_errors_delta bigint DEFAULT 0 NOT NULL,
disconnects_delta bigint DEFAULT 0 NOT NULL,
error_events_delta bigint DEFAULT 0 NOT NULL,
ws_in_bytes_delta bigint DEFAULT 0 NOT NULL,
ws_out_bytes_delta bigint DEFAULT 0 NOT NULL,
ws_in_frames_delta bigint DEFAULT 0 NOT NULL,
ws_out_frames_delta bigint DEFAULT 0 NOT NULL
);
ALTER TABLE ONLY public.proxy_node_metrics_1h ADD CONSTRAINT proxy_node_metrics_1h_pkey PRIMARY KEY (node_id, bucket_start_unix_secs);
CREATE INDEX IF NOT EXISTS idx_proxy_node_metrics_1h_bucket_start ON public.proxy_node_metrics_1h USING btree (bucket_start_unix_secs);

View File

@@ -38,6 +38,47 @@ CREATE TABLE IF NOT EXISTS proxy_node_events (
node_id TEXT NOT NULL,
event_type TEXT NOT NULL,
detail TEXT,
event_metadata TEXT,
created_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS proxy_node_metrics_1m (
node_id TEXT NOT NULL,
bucket_start_unix_secs INTEGER NOT NULL,
samples INTEGER NOT NULL DEFAULT 0,
uptime_samples INTEGER NOT NULL DEFAULT 0,
active_connections_sum INTEGER NOT NULL DEFAULT 0,
active_connections_max INTEGER NOT NULL DEFAULT 0,
heartbeat_rtt_ms_sum INTEGER NOT NULL DEFAULT 0,
heartbeat_rtt_ms_max INTEGER NOT NULL DEFAULT 0,
connect_errors_delta INTEGER NOT NULL DEFAULT 0,
disconnects_delta INTEGER NOT NULL DEFAULT 0,
error_events_delta INTEGER NOT NULL DEFAULT 0,
ws_in_bytes_delta INTEGER NOT NULL DEFAULT 0,
ws_out_bytes_delta INTEGER NOT NULL DEFAULT 0,
ws_in_frames_delta INTEGER NOT NULL DEFAULT 0,
ws_out_frames_delta INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (node_id, bucket_start_unix_secs)
);
CREATE INDEX IF NOT EXISTS idx_proxy_node_metrics_1m_bucket_start ON proxy_node_metrics_1m (bucket_start_unix_secs);
CREATE TABLE IF NOT EXISTS proxy_node_metrics_1h (
node_id TEXT NOT NULL,
bucket_start_unix_secs INTEGER NOT NULL,
samples INTEGER NOT NULL DEFAULT 0,
uptime_samples INTEGER NOT NULL DEFAULT 0,
active_connections_sum INTEGER NOT NULL DEFAULT 0,
active_connections_max INTEGER NOT NULL DEFAULT 0,
heartbeat_rtt_ms_sum INTEGER NOT NULL DEFAULT 0,
heartbeat_rtt_ms_max INTEGER NOT NULL DEFAULT 0,
connect_errors_delta INTEGER NOT NULL DEFAULT 0,
disconnects_delta INTEGER NOT NULL DEFAULT 0,
error_events_delta INTEGER NOT NULL DEFAULT 0,
ws_in_bytes_delta INTEGER NOT NULL DEFAULT 0,
ws_out_bytes_delta INTEGER NOT NULL DEFAULT 0,
ws_in_frames_delta INTEGER NOT NULL DEFAULT 0,
ws_out_frames_delta INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (node_id, bucket_start_unix_secs)
);
CREATE INDEX IF NOT EXISTS idx_proxy_node_metrics_1h_bucket_start ON proxy_node_metrics_1h (bucket_start_unix_secs);