feat: choose probe/agent links from the admin, fix the overview popover [CI]

The panel decides which probes link to which agents (probes dial out): an
auto-link setting plus per-pair manual overrides with a link matrix in the
admin, and the hovered overview card is lifted above its neighbours.
This commit is contained in:
justme committed 2026-10-06 23:22:45 +08:00
1 parent d449e50791
commit 6e945657c1
32 files changed
+788 -39

No files matched your search

+203
View File
@@ -3901,6 +3901,136 @@
}
}
},
"/api/admin/links": {
"get": {
"tags": [
"admin-links"
],
"summary": "Every probe/agent pair: whether it is linked, the manual override and whether it is connected",
"operationId": "links_list",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LinkMatrixDto"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
}
}
}
},
"/api/admin/links/{probe_id}/{agent_id}": {
"put": {
"tags": [
"admin-links"
],
"summary": "Force a link on or off, or give it back to the automatic setting (enabled: null)",
"operationId": "links_set",
"parameters": [
{
"name": "probe_id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "agent_id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SetLinkRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LinkDto"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDto"
}
}
}
}
}
}
},
"/healthz": {
"get": {
"tags": [
@@ -5418,6 +5548,62 @@
}
}
},
"LinkDto": {
"required": [
"probe_id",
"probe_name",
"agent_id",
"agent_name",
"linked",
"override",
"connected"
],
"type": "object",
"properties": {
"probe_id": {
"type": "string"
},
"probe_name": {
"type": "string"
},
"agent_id": {
"type": "string"
},
"agent_name": {
"type": "string"
},
"linked": {
"type": "boolean"
},
"override": {
"type": [
"null",
"boolean"
]
},
"connected": {
"type": "boolean"
}
}
},
"LinkMatrixDto": {
"required": [
"auto_link",
"items"
],
"type": "object",
"properties": {
"auto_link": {
"type": "boolean"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LinkDto"
}
}
}
},
"LocalLimitsDto": {
"required": [
"max_total_mbps",
@@ -7013,6 +7199,20 @@
}
}
},
"SetLinkRequest": {
"required": [
"enabled"
],
"type": "object",
"properties": {
"enabled": {
"type": [
"null",
"boolean"
]
}
}
},
"SettingDto": {
"required": [
"key",
@@ -7451,6 +7651,9 @@
{
"name": "admin-users"
},
{
"name": "admin-links"
},
{
"name": "ops"
},