This commit is contained in:
Mateusz Gruszczyński committed 2026-10-13 00:00:06 +02:00
1 parent d23fa5e154
commit 81ab39e70a
51 files changed
+5352 -1489

No files matched your search

+270 -10
View File
@@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "RustProxy Administration API",
"version": "0.31.9",
"version": "0.32.0",
"description": "Administration API for the active panel origin. Sign in through the panel; the same-origin HttpOnly cookie authenticates all private operations. Mutations also require the exact Origin, X-RustProxy-Request: 1 and a session-bound X-CSRF-Token. Loopback HTTP is the default; Settings can enable HTTPS before using a non-loopback administration bind. This document contains no live configuration or credentials. Object schemas marked extensible are summaries: full configuration validation is authoritative in Rust."
},
"servers": [
@@ -1521,7 +1521,7 @@
},
"upstream": {
"type": "string",
"description": "Single raw upstream as IP:port."
"description": "Legacy single TCP/UDP upstream (IP:port); used only when backends is empty. An omitted field gets the legacy model default."
},
"connect_timeout_seconds": {
"type": "integer",
@@ -1537,13 +1537,34 @@
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"backends": {
"type": "array",
"maxItems": 32,
"items": {
"$ref": "#/components/schemas/StreamBackend"
},
"description": "Optional backend pool. Empty retains legacy upstream as primary."
},
"balance": {
"type": "string",
"enum": [
"round_robin",
"least_connections",
"least_sessions"
],
"default": "round_robin"
},
"metrics_enabled": {
"type": "boolean",
"nullable": true,
"description": "Optional default for per-backend detailed accounting. Null defaults off; basic Stream counters remain active and Prometheus include_streams remains authoritative."
}
},
"required": [
"id",
"protocol",
"listen",
"upstream"
"listen"
],
"additionalProperties": false,
"description": "Layer-4 stream host. It bypasses the HTTP vhost/ACL/cache/header/compression pipeline."
@@ -1595,6 +1616,13 @@
"type": "integer",
"format": "int64",
"minimum": 0
},
"backends": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StreamBackendMetrics"
},
"description": "Runtime backend states; detail metrics are null when disabled."
}
},
"additionalProperties": false,
@@ -3350,7 +3378,7 @@
"dashboard_widgets": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "string",
@@ -3366,7 +3394,11 @@
"http3",
"tls",
"http_protocol",
"websocket_protocol"
"websocket_protocol",
"stream_overview",
"stream_traffic",
"stream_sessions",
"stream_backend_health"
]
},
"default": [
@@ -3381,13 +3413,17 @@
"http3",
"tls",
"http_protocol",
"websocket_protocol"
"websocket_protocol",
"stream_overview",
"stream_traffic",
"stream_sessions",
"stream_backend_health"
],
"description": "Account-scoped order for configurable Overview telemetry cards."
},
"dashboard_hidden_widgets": {
"type": "array",
"maxItems": 12,
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "string",
@@ -3403,10 +3439,19 @@
"http3",
"tls",
"http_protocol",
"websocket_protocol"
"websocket_protocol",
"stream_overview",
"stream_traffic",
"stream_sessions",
"stream_backend_health"
]
},
"default": [],
"default": [
"stream_overview",
"stream_traffic",
"stream_sessions",
"stream_backend_health"
],
"description": "Account-scoped Overview telemetry cards hidden from the dashboard."
},
"backend_table_columns": {
@@ -6116,6 +6161,221 @@
"credential",
"token"
]
},
"StreamBackend": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"address"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$"
},
"name": {
"type": "string",
"maxLength": 96
},
"address": {
"type": "string",
"description": "Concrete upstream IP:port"
},
"enabled": {
"type": "boolean",
"default": true
},
"drain": {
"type": "boolean",
"default": false
},
"weight": {
"type": "integer",
"minimum": 1,
"maximum": 16,
"default": 1
},
"max_sessions": {
"type": "integer",
"nullable": true,
"minimum": 1,
"maximum": 65535
},
"health": {
"$ref": "#/components/schemas/StreamHealthCheck"
},
"metrics_enabled": {
"type": "boolean",
"nullable": true,
"description": "Optional detailed backend metrics. Null inherits Stream metrics_enabled (off when unset); an explicit boolean overrides it."
}
}
},
"StreamHealthCheck": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": [
"off",
"tcp_connect",
"udp_probe"
],
"default": "off"
},
"interval_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 3600,
"default": 10
},
"timeout_ms": {
"type": "integer",
"minimum": 50,
"maximum": 30000,
"default": 1000
},
"rise": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 2
},
"fall": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 2
},
"payload_hex": {
"type": "string",
"maxLength": 256,
"description": "At most 128 bytes; sent only when exact reply expected"
},
"expect_hex": {
"type": "string",
"nullable": true,
"maxLength": 256,
"description": "Exact response; without it, UDP stays Unverified and no probe is sent"
}
}
},
"StreamBackendMetrics": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"address": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"drain": {
"type": "boolean"
},
"detail_enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"enum": [
"unverified",
"checking",
"healthy",
"unhealthy",
"disabled"
]
},
"active": {
"type": "integer",
"minimum": 0
},
"sessions_total": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"sessions_completed": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"assignments": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"rejected": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"errors": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"bytes_in": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"bytes_out": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"packets_in": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"packets_out": {
"type": "integer",
"nullable": true,
"minimum": 0
},
"health": {
"type": "object",
"additionalProperties": false,
"properties": {
"last_checked_unix_ms": {
"type": "integer",
"nullable": true
},
"latency_ms": {
"type": "integer",
"nullable": true
},
"last_error": {
"type": "string",
"nullable": true
},
"successful": {
"type": "integer"
},
"failed": {
"type": "integer"
},
"last_result": {
"type": "string",
"nullable": true,
"enum": [
"success",
"failure"
],
"description": "Most recent active probe outcome, null if no probe has completed."
}
}
}
}
}
}
},