90 lines
1.8 KiB
Rust
90 lines
1.8 KiB
Rust
const LIVE_LOG_COLUMNS: &[&str] = &[
|
|
"time",
|
|
"request",
|
|
"host",
|
|
"source_ip",
|
|
"vhost",
|
|
"backend",
|
|
"status",
|
|
"duration",
|
|
"cache",
|
|
"outcome",
|
|
"transport",
|
|
"websocket",
|
|
"upstream_error",
|
|
];
|
|
const FILE_LOG_COLUMN_MAX: usize = 64;
|
|
const BACKEND_TABLE_COLUMNS: &[&str] = &[
|
|
"vhost",
|
|
"backend",
|
|
"status",
|
|
"active",
|
|
"requests",
|
|
"errors",
|
|
"latency",
|
|
"traffic",
|
|
"generation",
|
|
"generationRequests",
|
|
"generationAge",
|
|
"rotations",
|
|
"lastFailure",
|
|
"lastRecovery",
|
|
];
|
|
const VHOST_LIST_SORT_COLUMNS: &[&str] = &[
|
|
"id",
|
|
"hostname",
|
|
"status",
|
|
"listeners",
|
|
"certificate",
|
|
"backends",
|
|
];
|
|
const DOCKER_VHOST_SORT_COLUMNS: &[&str] = &[
|
|
"service",
|
|
"hostname",
|
|
"status",
|
|
"backend",
|
|
"scheme",
|
|
"published",
|
|
];
|
|
const REDIRECT_LIST_SORT_COLUMNS: &[&str] = &[
|
|
"id",
|
|
"name",
|
|
"hostname",
|
|
"status",
|
|
"target",
|
|
"rules",
|
|
"listeners",
|
|
"certificate",
|
|
];
|
|
const NOTFOUND_LIST_SORT_COLUMNS: &[&str] = &[
|
|
"id",
|
|
"name",
|
|
"hostname",
|
|
"status",
|
|
"mode",
|
|
"listeners",
|
|
"certificate",
|
|
];
|
|
const STREAM_LIST_SORT_COLUMNS: &[&str] = &[
|
|
"name",
|
|
"id",
|
|
"protocol",
|
|
"listen",
|
|
"upstream",
|
|
"status",
|
|
"maxConnections",
|
|
"idleTimeout",
|
|
];
|
|
// The same JSON registry is embedded into the authenticated admin JS bundle.
|
|
// No independent allowlist is maintained by the browser or backend.
|
|
#[derive(serde::Deserialize)]
|
|
struct DashboardWidgetDefinition {
|
|
id: String,
|
|
default_hidden: bool,
|
|
}
|
|
static DASHBOARD_WIDGETS: std::sync::LazyLock<Vec<DashboardWidgetDefinition>> =
|
|
std::sync::LazyLock::new(|| {
|
|
serde_json::from_str(include_str!("web/dashboard-widgets.json"))
|
|
.expect("invalid bundled Overview Cards registry")
|
|
});
|