Heartbeats carry per-level counts, the most frequent log types (a stable hash of the message) and the newest id, no text. The node keeps its last 2048 lines; moshiro.logs.fetch lets the backend pull them. The log page pulls when it is open, and the backend pulls warnings and errors once a minute after a node reports an error.
9863 lines
233 KiB
JSON
9863 lines
233 KiB
JSON
{
|
|
"openapi": "3.1.1",
|
|
"info": {
|
|
"title": "moshiro-backend | v1",
|
|
"version": "1.0.0"
|
|
},
|
|
"paths": {
|
|
"/api/public/overview": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Ranking of all lines over a time range",
|
|
"operationId": "overview_get",
|
|
"parameters": [
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "preset",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metrics",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "sort",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "order",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "ip_version",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OverviewDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/ipv6": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "IPv6 configuration and collector diagnostics without addresses",
|
|
"operationId": "ipv6_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfAgentIpv6Dto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/lines/{line_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "One line",
|
|
"operationId": "lines_get",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LineDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/lines/{line_id}/series": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Time series of one line (columnar)",
|
|
"operationId": "lines_series",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "step",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "tz",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "preset",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metrics",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "anchor",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SeriesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/compare": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "One metric across several lines, aligned on one time axis",
|
|
"operationId": "lines_compare",
|
|
"parameters": [
|
|
{
|
|
"name": "lines",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metric",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "step",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CompareDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/lines/{line_id}/distribution": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Histogram and CDF of a histogram metric",
|
|
"operationId": "lines_distribution",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metric",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DistributionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/lines/{line_id}/heatmap": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Time by latency heat map",
|
|
"operationId": "lines_heatmap",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metric",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "step",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HeatmapDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/tests/{test_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "A test with its result",
|
|
"operationId": "tests_get",
|
|
"parameters": [
|
|
{
|
|
"name": "test_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/live": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Server-sent events: nodes, overview, series and test topics",
|
|
"operationId": "live_stream",
|
|
"parameters": [
|
|
{
|
|
"name": "ip_version",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/hosts": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Latest host resource usage of every visible node (no hardware model, no addresses)",
|
|
"operationId": "hosts_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfHostItemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/hosts/{node_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"public"
|
|
],
|
|
"summary": "Host resource usage history of one node (columnar, averaged per step)",
|
|
"operationId": "hosts_history",
|
|
"parameters": [
|
|
{
|
|
"name": "node_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "range",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HostSeriesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/nodes": {
|
|
"get": {
|
|
"tags": [
|
|
"public-nodes"
|
|
],
|
|
"summary": "Display info of the visible nodes: system, architecture, country and ISP (never an address)",
|
|
"operationId": "nodes_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfNodeInfoDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/about": {
|
|
"get": {
|
|
"tags": [
|
|
"public-nodes"
|
|
],
|
|
"summary": "The backend's version, tag and build time, if the site shows build info",
|
|
"operationId": "about_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AboutDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/catalog/kinds": {
|
|
"get": {
|
|
"tags": [
|
|
"catalog"
|
|
],
|
|
"summary": "Measurement kinds with their building blocks and parameter specs",
|
|
"operationId": "catalog_kinds",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfKindDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/catalog/plans": {
|
|
"get": {
|
|
"tags": [
|
|
"catalog"
|
|
],
|
|
"summary": "On-demand test plans",
|
|
"operationId": "catalog_plans",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfPlanDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/catalog/metrics": {
|
|
"get": {
|
|
"tags": [
|
|
"catalog"
|
|
],
|
|
"summary": "Metric ids with unit, label, direction, thresholds and version",
|
|
"operationId": "catalog_metrics",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfMetricDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/catalog/presets": {
|
|
"get": {
|
|
"tags": [
|
|
"catalog"
|
|
],
|
|
"summary": "Metric groups the front end can display",
|
|
"operationId": "catalog_presets",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfPresetDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/public/catalog/models": {
|
|
"get": {
|
|
"tags": [
|
|
"catalog"
|
|
],
|
|
"summary": "Service models and the metrics they need",
|
|
"operationId": "catalog_models",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfModelDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/auth/login": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Sign in with a username and password",
|
|
"operationId": "auth_login",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/auth/setup": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Whether the panel has no users yet and still has to be claimed",
|
|
"operationId": "setup_status",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetupStatusDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Create the first administrator (needs the claim code from the backend's log); the same response as the password sign-in. Closed once the panel is claimed (a user exists)",
|
|
"operationId": "setup_complete",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetupRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/auth/passkey/options": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "A challenge for signing in with a passkey (discoverable credential, no username needed)",
|
|
"operationId": "auth_passkey_options",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PasskeyRequestOptionsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/auth/passkey/login": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Sign in with a passkey assertion; same response as the password sign-in",
|
|
"operationId": "auth_passkey_login",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PasskeyLoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/auth/logout": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Sign out and clear the session cookie",
|
|
"operationId": "auth_logout",
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
}
|
|
},
|
|
"/api/admin/auth/passkeys": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "The signed-in user's passkeys",
|
|
"operationId": "auth_passkeys_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfPasskeyDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Register a passkey from a WebAuthn attestation (ES256, user verification required)",
|
|
"operationId": "auth_passkeys_register",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegisterPasskeyRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PasskeyDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
}
|
|
},
|
|
"/api/admin/auth/passkeys/options": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "A challenge for registering a new passkey (the user must be signed in)",
|
|
"operationId": "auth_passkeys_options",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PasskeyCreationOptionsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
}
|
|
},
|
|
"/api/admin/auth/passkeys/{id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "Remove one of your own passkeys",
|
|
"operationId": "auth_passkeys_delete",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
}
|
|
},
|
|
"/api/admin/auth/me": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-auth"
|
|
],
|
|
"summary": "The current identity",
|
|
"operationId": "auth_me",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MeDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "authenticated"
|
|
}
|
|
},
|
|
"/api/admin/agents": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "All nodes (agents) including pending and disabled ones; each says whether it listens, which dialers are connected to it and which listeners it dials",
|
|
"operationId": "agents_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfAgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "One agent",
|
|
"operationId": "agents_get",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Update name, labels, public host, ISP or visibility (merge-patch, If-Match supported)",
|
|
"operationId": "agents_update",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/merge-patch+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentPatchRequest"
|
|
}
|
|
},
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentPatchRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"412": {
|
|
"description": "Precondition Failed",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Delete an agent; history expires with the retention policy",
|
|
"operationId": "agents_delete",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.revoke"
|
|
}
|
|
},
|
|
"/api/admin/nodes/{id}/logs": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-nodes"
|
|
],
|
|
"summary": "Recent runtime logs of a node: pulled from the node when it is online, otherwise what the backend kept",
|
|
"operationId": "node_runtime_logs",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/NodeRuntimeLogsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}/approve": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Approve a pending agent",
|
|
"operationId": "agents_approve",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.enroll"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}/disable": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Disable an agent and drop its connection",
|
|
"operationId": "agents_disable",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}/enable": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Enable a disabled agent",
|
|
"operationId": "agents_enable",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}/takeover": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Replace the existing node of the same name with this pending one, keeping history",
|
|
"operationId": "agents_takeover",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.enroll"
|
|
}
|
|
},
|
|
"/api/admin/join-tokens": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-join-tokens"
|
|
],
|
|
"summary": "Join tokens",
|
|
"operationId": "join_tokens_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfJoinTokenDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-join-tokens"
|
|
],
|
|
"summary": "Create a join token for an agent; the plaintext is returned only once",
|
|
"operationId": "join_tokens_create",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateJoinTokenRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatedJoinTokenDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.enroll"
|
|
}
|
|
},
|
|
"/api/admin/join-tokens/{id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"admin-join-tokens"
|
|
],
|
|
"summary": "Revoke a join token; with purge=true delete the record for good",
|
|
"operationId": "join_tokens_revoke",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "purge",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.enroll"
|
|
}
|
|
},
|
|
"/api/admin/agents/{id}/dialers/{dialer_id}/disconnect": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-agents"
|
|
],
|
|
"summary": "Make a listening node drop one dialer's session (the dialer reconnects unless it is disabled)",
|
|
"operationId": "agents_dialer_disconnect",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "dialer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/api/admin/tasks": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-tasks"
|
|
],
|
|
"summary": "Tasks: line templates, per-agent overrides and target tasks",
|
|
"operationId": "tasks_list",
|
|
"parameters": [
|
|
{
|
|
"name": "agent_id",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "scope",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfTaskDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-tasks"
|
|
],
|
|
"summary": "Create a task; params are validated against the kind",
|
|
"operationId": "tasks_create",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateTaskRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TaskDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.write"
|
|
}
|
|
},
|
|
"/api/admin/tasks/{id}": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-tasks"
|
|
],
|
|
"summary": "One task",
|
|
"operationId": "tasks_get",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TaskDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.read"
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"admin-tasks"
|
|
],
|
|
"summary": "Change params, schedule, target or enabled (merge-patch, If-Match supported)",
|
|
"operationId": "tasks_update",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/merge-patch+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PatchTaskRequest"
|
|
}
|
|
},
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PatchTaskRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TaskDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"412": {
|
|
"description": "Precondition Failed",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.write"
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"admin-tasks"
|
|
],
|
|
"summary": "Delete a task",
|
|
"operationId": "tasks_delete",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.write"
|
|
}
|
|
},
|
|
"/api/admin/lines/{line_id}/tests": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-tests"
|
|
],
|
|
"summary": "Start an on-demand test on a line",
|
|
"operationId": "tests_start",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StartTestRequestDto"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Accepted",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.write"
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"admin-tests"
|
|
],
|
|
"summary": "Recent tests of a line",
|
|
"operationId": "tests_list",
|
|
"parameters": [
|
|
{
|
|
"name": "line_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfTestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.read"
|
|
}
|
|
},
|
|
"/api/admin/tests/{id}/cancel": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-tests"
|
|
],
|
|
"summary": "Cancel a running test",
|
|
"operationId": "tests_cancel",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "tasks.write"
|
|
}
|
|
},
|
|
"/api/admin/raw/chunks": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-data"
|
|
],
|
|
"summary": "Raw chunk metadata",
|
|
"operationId": "raw_chunks_list",
|
|
"parameters": [
|
|
{
|
|
"name": "agent_id",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "kind",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "test_id",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfRawChunkMetaDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "data.read"
|
|
}
|
|
},
|
|
"/api/admin/raw/chunks/{chunk_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-data"
|
|
],
|
|
"summary": "Download a raw chunk (application/vnd.moshiro.rawchunk)",
|
|
"operationId": "raw_chunks_get",
|
|
"parameters": [
|
|
{
|
|
"name": "chunk_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"410": {
|
|
"description": "Gone",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "data.read"
|
|
}
|
|
},
|
|
"/api/admin/events": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-data"
|
|
],
|
|
"summary": "Agent events",
|
|
"operationId": "events_list",
|
|
"parameters": [
|
|
{
|
|
"name": "agent_id",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "kind",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"schema": {
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfEventDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "events.read"
|
|
}
|
|
},
|
|
"/api/admin/analysis/recompute": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-data"
|
|
],
|
|
"summary": "Progress of the metric backfill",
|
|
"operationId": "analysis_recompute_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RecomputeDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "data.write"
|
|
}
|
|
},
|
|
"/api/admin/audit": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-audit"
|
|
],
|
|
"summary": "Audit log of admin actions, newest first",
|
|
"operationId": "audit_list",
|
|
"parameters": [
|
|
{
|
|
"name": "actor",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "action",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfAuditDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "audit.read"
|
|
}
|
|
},
|
|
"/api/admin/trust": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-trust"
|
|
],
|
|
"summary": "The operator trust root: genesis fingerprint, version, whether it matches the registered passkeys, and the next version to sign",
|
|
"operationId": "trust_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TrustStateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-trust"
|
|
],
|
|
"summary": "Store the next operator set, signed with a passkey (the first one sets the genesis)",
|
|
"operationId": "trust_commit",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SignedStatementDto"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TrustStateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "accounts.manage"
|
|
}
|
|
},
|
|
"/api/admin/api-tokens": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-api-tokens"
|
|
],
|
|
"summary": "API tokens",
|
|
"operationId": "api_tokens_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfApiTokenDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "keys.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-api-tokens"
|
|
],
|
|
"summary": "Create an API token with the chosen capabilities (a subset of your own); the plaintext is returned only once",
|
|
"operationId": "api_tokens_create",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateApiTokenRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatedApiTokenDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "keys.manage"
|
|
}
|
|
},
|
|
"/api/admin/api-tokens/{id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"admin-api-tokens"
|
|
],
|
|
"summary": "Revoke an API token",
|
|
"operationId": "api_tokens_revoke",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "keys.manage"
|
|
}
|
|
},
|
|
"/api/admin/capabilities": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-api-tokens"
|
|
],
|
|
"summary": "The capability catalog: groups, which ones change trust, which are reserved, and the presets",
|
|
"operationId": "capabilities_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CapabilityCatalogDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "keys.read"
|
|
}
|
|
},
|
|
"/api/admin/settings": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-settings"
|
|
],
|
|
"summary": "Site settings and retention periods",
|
|
"operationId": "settings_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfSettingDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "settings.read"
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"admin-settings"
|
|
],
|
|
"summary": "Change settings (merge-patch)",
|
|
"operationId": "settings_update",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/merge-patch+json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfSettingDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "settings.write"
|
|
}
|
|
},
|
|
"/api/admin/users": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-users"
|
|
],
|
|
"summary": "Panel users",
|
|
"operationId": "users_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfUserDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "accounts.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-users"
|
|
],
|
|
"summary": "Create a panel user",
|
|
"operationId": "users_create",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateUserRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "accounts.manage"
|
|
}
|
|
},
|
|
"/api/admin/users/{id}": {
|
|
"patch": {
|
|
"tags": [
|
|
"admin-users"
|
|
],
|
|
"summary": "Change a user's password",
|
|
"operationId": "users_update",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ChangePasswordRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "accounts.manage"
|
|
}
|
|
},
|
|
"/api/admin/build-info": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "Version, tag, commit, build time and update state of the backend and every node",
|
|
"operationId": "build_info_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BuildInfoDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.read"
|
|
}
|
|
},
|
|
"/api/admin/releases": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "The latest signed release manifest of each component",
|
|
"operationId": "releases_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PageDtoOfReleaseDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.read"
|
|
}
|
|
},
|
|
"/api/admin/nodes/{id}/update": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "Ask an online node to install the release it has been offered",
|
|
"operationId": "nodes_update",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.confirm"
|
|
}
|
|
},
|
|
"/api/admin/backend/update": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "Current channel and host-verified backend update",
|
|
"operationId": "backend_update_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BackendUpdateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.read"
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "Confirm one verified backend release before the host restarts it",
|
|
"operationId": "backend_update_confirm",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ConfirmBackendUpdateRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": { }
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"412": {
|
|
"description": "Precondition Failed",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.confirm"
|
|
}
|
|
},
|
|
"/api/admin/backend/update/live": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-build"
|
|
],
|
|
"summary": "Server-sent backend update notifications",
|
|
"operationId": "backend_update_live",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.read"
|
|
}
|
|
},
|
|
"/api/admin/release-key": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-release-key"
|
|
],
|
|
"summary": "The release keys this panel trusts: the built-in official key and the optional own key",
|
|
"operationId": "release_key_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReleaseKeysDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.read"
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"admin-release-key"
|
|
],
|
|
"summary": "Trust your own release public key (P-256 PEM; never the private key) in addition to the official one",
|
|
"operationId": "release_key_set",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetReleaseKeyRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReleaseKeysDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.confirm"
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"admin-release-key"
|
|
],
|
|
"summary": "Stop trusting your own release key; manifests only it signed are dropped",
|
|
"operationId": "release_key_clear",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReleaseKeysDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "update.confirm"
|
|
}
|
|
},
|
|
"/api/admin/links": {
|
|
"get": {
|
|
"tags": [
|
|
"admin-links"
|
|
],
|
|
"summary": "Every possible dialer/listener pair: whether it is linked, the manual override and whether it is connected; plus the nodes and which of them listen",
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.read"
|
|
}
|
|
},
|
|
"/api/admin/links/reset": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-links"
|
|
],
|
|
"summary": "Drop every manual link setting and turn automatic linking on: who dials whom follows the default rules again",
|
|
"operationId": "links_reset",
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/api/admin/links/{dialer_id}/{listener_id}": {
|
|
"put": {
|
|
"tags": [
|
|
"admin-links"
|
|
],
|
|
"summary": "Connect a node to a listening node (enabled: true), force the link off (false), or give it back to the automatic setting (null)",
|
|
"operationId": "links_set",
|
|
"parameters": [
|
|
{
|
|
"name": "dialer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "listener_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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/api/admin/links/{dialer_id}/{listener_id}/retry": {
|
|
"post": {
|
|
"tags": [
|
|
"admin-links"
|
|
],
|
|
"summary": "Enable and immediately retry the dialer-to-listener connection",
|
|
"operationId": "links_retry",
|
|
"parameters": [
|
|
{
|
|
"name": "dialer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "listener_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LinkRetryDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-moshiro-capability": "fleet.write"
|
|
}
|
|
},
|
|
"/healthz": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "SQLite and the raw data directory are both writable",
|
|
"operationId": "health_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HealthDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"503": {
|
|
"description": "Service Unavailable",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/metrics": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "Prometheus metrics (requires ops.metrics)",
|
|
"operationId": "metrics_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install/openwrt.sh": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The static native OpenWrt installer and updater (Agent)",
|
|
"operationId": "install_openwrt",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The static one-line installer for Linux and macOS nodes (same bytes for everyone; its SHA-256 is published with each release)",
|
|
"operationId": "install_sh",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install/manifest": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The signed release manifest an install code may fetch (exact signed bytes)",
|
|
"operationId": "install_manifest",
|
|
"parameters": [
|
|
{
|
|
"name": "code",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install/manifest.sig": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "Base64 DER ECDSA P-256 signature of the manifest",
|
|
"operationId": "install_manifest_signature",
|
|
"parameters": [
|
|
{
|
|
"name": "code",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install/compose/{file}": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The static compose file of the agent or the backend (agent.yaml, backend.yaml; same bytes for everyone)",
|
|
"operationId": "install_compose",
|
|
"parameters": [
|
|
{
|
|
"name": "file",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install/quadlet/{file}": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The static Podman Quadlet unit of the agent (agent.container; same bytes for everyone)",
|
|
"operationId": "install_quadlet",
|
|
"parameters": [
|
|
{
|
|
"name": "file",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/install.ps1": {
|
|
"get": {
|
|
"tags": [
|
|
"ops"
|
|
],
|
|
"summary": "The static one-line installer for Windows nodes (same bytes for everyone; its SHA-256 is published with each release)",
|
|
"operationId": "install_ps1",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/release/offer": {
|
|
"post": {
|
|
"tags": [
|
|
"release"
|
|
],
|
|
"summary": "Register a release manifest that carries a valid CI signature (no token needed)",
|
|
"operationId": "release_offer",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PublishReleaseRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReleaseDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"content": {
|
|
"application/problem+json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/agent/v1/enroll": {
|
|
"post": {
|
|
"tags": [
|
|
"agent"
|
|
],
|
|
"summary": "Enroll a node with a join token",
|
|
"operationId": "fleet_enroll",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/agent/v1/enroll/trust": {
|
|
"post": {
|
|
"tags": [
|
|
"agent"
|
|
],
|
|
"summary": "The operator set chain and the grant of a join token, for the node to verify before it enrolls",
|
|
"operationId": "fleet_enroll_trust",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"AboutDto": {
|
|
"required": [
|
|
"show_build",
|
|
"backend"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"show_build": {
|
|
"type": "boolean"
|
|
},
|
|
"backend": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/BuildDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"AgentDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"status",
|
|
"online",
|
|
"listens",
|
|
"dialer_connected",
|
|
"dialers",
|
|
"outgoing",
|
|
"host",
|
|
"public_host",
|
|
"tcp_port",
|
|
"quic_ports",
|
|
"labels",
|
|
"public_visible",
|
|
"kinds",
|
|
"agent_version",
|
|
"local_limits",
|
|
"task_version",
|
|
"applied_task_version",
|
|
"rejected",
|
|
"heartbeat",
|
|
"endpoint_changes",
|
|
"runtime_status",
|
|
"created_at",
|
|
"last_seen_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"listens": {
|
|
"type": "boolean"
|
|
},
|
|
"dialer_connected": {
|
|
"type": "boolean"
|
|
},
|
|
"dialers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ConnectedDialerDto"
|
|
}
|
|
},
|
|
"outgoing": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/OutgoingConnectionDto"
|
|
}
|
|
},
|
|
"host": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/HostDto"
|
|
}
|
|
]
|
|
},
|
|
"public_host": {
|
|
"type": "string"
|
|
},
|
|
"tcp_port": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"quic_ports": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"public_visible": {
|
|
"type": "boolean"
|
|
},
|
|
"kinds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"agent_version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"local_limits": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/LocalLimitsDto"
|
|
}
|
|
]
|
|
},
|
|
"task_version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"applied_task_version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"rejected": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RejectedDto"
|
|
}
|
|
},
|
|
"heartbeat": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/HeartbeatDto"
|
|
}
|
|
]
|
|
},
|
|
"endpoint_changes": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"runtime_status": {
|
|
"$ref": "#/components/schemas/NodeRuntimeStatus"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
},
|
|
"last_seen_at": {
|
|
"format": "date-time"
|
|
},
|
|
"ipv6_host": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"ipv6_supported": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"ipv6": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Ipv6DiagnosticDto"
|
|
}
|
|
]
|
|
},
|
|
"public_host_auto": {
|
|
"type": "boolean",
|
|
"default": true
|
|
},
|
|
"ipv6_host_auto": {
|
|
"type": "boolean",
|
|
"default": true
|
|
},
|
|
"added_by": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"AgentIpv6Dto": {
|
|
"required": [
|
|
"agent_id",
|
|
"name",
|
|
"online",
|
|
"ipv6"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"ipv6": {
|
|
"$ref": "#/components/schemas/Ipv6DiagnosticDto"
|
|
}
|
|
}
|
|
},
|
|
"AgentPatchRequest": {
|
|
"required": [
|
|
"name",
|
|
"labels",
|
|
"public_host",
|
|
"public_visible"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"labels": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"public_host": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"public_visible": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"ipv6_host": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"public_host_auto": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"ipv6_host_auto": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"isp": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"ApiTokenDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"capabilities",
|
|
"created_at",
|
|
"last_used_at",
|
|
"expires_at",
|
|
"revoked_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
},
|
|
"last_used_at": {
|
|
"format": "date-time"
|
|
},
|
|
"expires_at": {
|
|
"format": "date-time"
|
|
},
|
|
"revoked_at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"AuditDto": {
|
|
"required": [
|
|
"id",
|
|
"at",
|
|
"actor",
|
|
"method",
|
|
"action",
|
|
"target",
|
|
"detail",
|
|
"remote",
|
|
"success"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
},
|
|
"actor": {
|
|
"type": "string"
|
|
},
|
|
"method": {
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"detail": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"remote": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"success": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"BackendUpdateDto": {
|
|
"required": [
|
|
"channel",
|
|
"enabled",
|
|
"state",
|
|
"current_tag",
|
|
"current_digest",
|
|
"available",
|
|
"error"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"channel": {
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"state": {
|
|
"type": "string"
|
|
},
|
|
"current_tag": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"current_digest": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"available": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ReleaseDto"
|
|
}
|
|
]
|
|
},
|
|
"error": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"BlocksDto": {
|
|
"required": [
|
|
"transport",
|
|
"pacer",
|
|
"payload",
|
|
"behavior",
|
|
"samplers"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"transport": {
|
|
"type": "string"
|
|
},
|
|
"pacer": {
|
|
"type": "string"
|
|
},
|
|
"payload": {
|
|
"type": "string"
|
|
},
|
|
"behavior": {
|
|
"type": "string"
|
|
},
|
|
"samplers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"BuildDto": {
|
|
"required": [
|
|
"version",
|
|
"tag",
|
|
"commit",
|
|
"built_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"tag": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"commit": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"built_at": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"BuildInfoDto": {
|
|
"required": [
|
|
"backend",
|
|
"nodes"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"backend": {
|
|
"$ref": "#/components/schemas/BuildDto"
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeBuildDto"
|
|
}
|
|
},
|
|
"backend_update": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/BackendUpdateDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"CapabilityCatalogDto": {
|
|
"required": [
|
|
"groups",
|
|
"presets"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/CapabilityGroupDto"
|
|
}
|
|
},
|
|
"presets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/CapabilityPresetDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"CapabilityDto": {
|
|
"required": [
|
|
"id",
|
|
"trust",
|
|
"reserved",
|
|
"implies"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"trust": {
|
|
"type": "boolean"
|
|
},
|
|
"reserved": {
|
|
"type": "boolean"
|
|
},
|
|
"implies": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"CapabilityGroupDto": {
|
|
"required": [
|
|
"id",
|
|
"capabilities"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/CapabilityDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"CapabilityPresetDto": {
|
|
"required": [
|
|
"id",
|
|
"capabilities"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ChangePasswordRequest": {
|
|
"required": [
|
|
"password"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ColumnDto": {
|
|
"required": [
|
|
"name",
|
|
"type",
|
|
"encoding",
|
|
"nullable",
|
|
"role"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"encoding": {
|
|
"type": "string"
|
|
},
|
|
"nullable": {
|
|
"type": "boolean"
|
|
},
|
|
"role": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"CompareDto": {
|
|
"required": [
|
|
"metric",
|
|
"from",
|
|
"to",
|
|
"step",
|
|
"source",
|
|
"degraded",
|
|
"t",
|
|
"values",
|
|
"summary"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"metric": {
|
|
"type": "string"
|
|
},
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
},
|
|
"degraded": {
|
|
"type": "boolean"
|
|
},
|
|
"t": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"values": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"summary": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ComposeInstallDto": {
|
|
"required": [
|
|
"env",
|
|
"url",
|
|
"sha256",
|
|
"linux",
|
|
"macos",
|
|
"windows"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"env": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"sha256": {
|
|
"type": "string"
|
|
},
|
|
"linux": {
|
|
"type": "string"
|
|
},
|
|
"macos": {
|
|
"type": "string"
|
|
},
|
|
"windows": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ConfirmBackendUpdateRequest": {
|
|
"required": [
|
|
"seq"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"seq": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"ConnectedDialerDto": {
|
|
"required": [
|
|
"dialer_id",
|
|
"version",
|
|
"remote",
|
|
"connected_since"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"remote": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"connected_since": {
|
|
"format": "date-time"
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
}
|
|
}
|
|
},
|
|
"CreateApiTokenRequest": {
|
|
"required": [
|
|
"name",
|
|
"capabilities"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"expires_in_days": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"CreateJoinTokenRequest": {
|
|
"required": [
|
|
"note",
|
|
"labels",
|
|
"auto_approve",
|
|
"max_uses",
|
|
"expires_in_hours"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"note": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"labels": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"auto_approve": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"max_uses": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"expires_in_hours": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"role": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"controllers": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"CreateTaskRequest": {
|
|
"required": [
|
|
"scope",
|
|
"kind",
|
|
"target",
|
|
"params",
|
|
"schedule",
|
|
"enabled",
|
|
"agent_id",
|
|
"base_task_id"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"scope": {
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"params": {
|
|
"type": [
|
|
"null",
|
|
"object"
|
|
]
|
|
},
|
|
"schedule": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"enabled": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"agent_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"base_task_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"CreateUserRequest": {
|
|
"required": [
|
|
"username",
|
|
"password"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"CreatedApiTokenDto": {
|
|
"required": [
|
|
"token",
|
|
"plaintext"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"token": {
|
|
"$ref": "#/components/schemas/ApiTokenDto"
|
|
},
|
|
"plaintext": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"CreatedJoinTokenDto": {
|
|
"required": [
|
|
"token",
|
|
"plaintext",
|
|
"install_commands",
|
|
"compose",
|
|
"quadlet"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"token": {
|
|
"$ref": "#/components/schemas/JoinTokenDto"
|
|
},
|
|
"plaintext": {
|
|
"type": "string"
|
|
},
|
|
"install_commands": {
|
|
"$ref": "#/components/schemas/InstallCommandsDto"
|
|
},
|
|
"compose": {
|
|
"$ref": "#/components/schemas/ComposeInstallDto"
|
|
},
|
|
"quadlet": {
|
|
"$ref": "#/components/schemas/QuadletInstallDto"
|
|
}
|
|
}
|
|
},
|
|
"DimensionDto": {
|
|
"required": [
|
|
"id",
|
|
"label",
|
|
"weight",
|
|
"value",
|
|
"score"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"weight": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"value": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"score": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"DistributionBucketDto": {
|
|
"required": [
|
|
"le",
|
|
"count"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"le": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"count": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"DistributionDto": {
|
|
"required": [
|
|
"metric",
|
|
"unit",
|
|
"buckets",
|
|
"p50",
|
|
"p95",
|
|
"p99",
|
|
"count"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"metric": {
|
|
"type": "string"
|
|
},
|
|
"unit": {
|
|
"type": "string"
|
|
},
|
|
"buckets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DistributionBucketDto"
|
|
}
|
|
},
|
|
"p50": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"p95": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"p99": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"count": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"EdgePartialDto": {
|
|
"required": [
|
|
"first",
|
|
"last"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"first": {
|
|
"type": "boolean"
|
|
},
|
|
"last": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"EventDto": {
|
|
"required": [
|
|
"id",
|
|
"agent_id",
|
|
"kind",
|
|
"at",
|
|
"detail"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"agent_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
},
|
|
"detail": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"GapDto": {
|
|
"required": [
|
|
"from",
|
|
"to",
|
|
"reason"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"reason": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"HealthDto": {
|
|
"required": [
|
|
"status",
|
|
"database",
|
|
"raw_directory"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"database": {
|
|
"type": "boolean"
|
|
},
|
|
"raw_directory": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"HeartbeatDto": {
|
|
"required": [
|
|
"sessions",
|
|
"pps_in",
|
|
"pps_out",
|
|
"dropped_invalid",
|
|
"dropped_rate_limited",
|
|
"queue_bytes",
|
|
"at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"sessions": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"pps_in": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"pps_out": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"dropped_invalid": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"dropped_rate_limited": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"queue_bytes": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"HeatmapDto": {
|
|
"required": [
|
|
"metric",
|
|
"step",
|
|
"source",
|
|
"degraded",
|
|
"t",
|
|
"edges",
|
|
"counts"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"metric": {
|
|
"type": "string"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
},
|
|
"degraded": {
|
|
"type": "boolean"
|
|
},
|
|
"t": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"edges": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
},
|
|
"counts": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"HostDto": {
|
|
"required": [
|
|
"cpu_percent",
|
|
"mem_used",
|
|
"mem_total",
|
|
"disk_used",
|
|
"disk_total",
|
|
"net_rx_total",
|
|
"net_tx_total",
|
|
"net_rx_bps",
|
|
"net_tx_bps",
|
|
"net_link_mbps",
|
|
"uptime_seconds",
|
|
"at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"cpu_percent": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"mem_used": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"mem_total": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"disk_used": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"disk_total": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"net_rx_total": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"net_tx_total": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"net_rx_bps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"net_tx_bps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"net_link_mbps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"uptime_seconds": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"HostItemDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"online",
|
|
"stale",
|
|
"last_seen_at",
|
|
"host"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"stale": {
|
|
"type": "boolean"
|
|
},
|
|
"last_seen_at": {
|
|
"format": "date-time"
|
|
},
|
|
"host": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/HostDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"HostSeriesDto": {
|
|
"required": [
|
|
"id",
|
|
"from",
|
|
"to",
|
|
"step",
|
|
"t",
|
|
"values"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
},
|
|
"t": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"values": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"InstallCommandsDto": {
|
|
"required": [
|
|
"linux",
|
|
"macos",
|
|
"windows"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"linux": {
|
|
"type": "string"
|
|
},
|
|
"macos": {
|
|
"type": "string"
|
|
},
|
|
"windows": {
|
|
"type": "string"
|
|
},
|
|
"openwrt": {
|
|
"type": "string",
|
|
"default": ""
|
|
}
|
|
}
|
|
},
|
|
"Ipv6DiagnosticDto": {
|
|
"required": [
|
|
"address_configured",
|
|
"socket_supported",
|
|
"listening",
|
|
"has_global_address",
|
|
"has_default_route",
|
|
"state"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"address_configured": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"socket_supported": {
|
|
"type": "boolean"
|
|
},
|
|
"listening": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"has_global_address": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"has_default_route": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"state": {
|
|
"type": "string"
|
|
},
|
|
"network_scope": {
|
|
"type": "string",
|
|
"default": "unknown"
|
|
},
|
|
"host_has_global_address": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"host_has_default_route": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"JoinTokenDto": {
|
|
"required": [
|
|
"id",
|
|
"note",
|
|
"labels",
|
|
"auto_approve",
|
|
"max_uses",
|
|
"uses",
|
|
"expires_at",
|
|
"revoked_at",
|
|
"created_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"note": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"auto_approve": {
|
|
"type": "boolean"
|
|
},
|
|
"max_uses": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"uses": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"expires_at": {
|
|
"format": "date-time"
|
|
},
|
|
"revoked_at": {
|
|
"format": "date-time"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
},
|
|
"created_by": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"JsonElement": { },
|
|
"KindDto": {
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"description",
|
|
"scopes",
|
|
"blocks",
|
|
"params",
|
|
"streams"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"scopes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"blocks": {
|
|
"$ref": "#/components/schemas/BlocksDto"
|
|
},
|
|
"params": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ParamDto"
|
|
}
|
|
},
|
|
"streams": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/StreamDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"LineDto": {
|
|
"required": [
|
|
"id",
|
|
"agent_id",
|
|
"dialer_id",
|
|
"dialer_name",
|
|
"name",
|
|
"labels",
|
|
"online",
|
|
"dialer_connected",
|
|
"data_since",
|
|
"kinds",
|
|
"last_test"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_name": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"dialer_connected": {
|
|
"type": "boolean"
|
|
},
|
|
"data_since": {
|
|
"format": "date-time"
|
|
},
|
|
"kinds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"last_test": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TestSummaryDto"
|
|
}
|
|
]
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
},
|
|
"ipv6_available": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"quic_health": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/QuicLineHealthDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"LinkDto": {
|
|
"required": [
|
|
"dialer_id",
|
|
"dialer_name",
|
|
"listener_id",
|
|
"listener_name",
|
|
"linked",
|
|
"override",
|
|
"connected",
|
|
"dialer_runtime_status",
|
|
"listener_runtime_status"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_name": {
|
|
"type": "string"
|
|
},
|
|
"listener_id": {
|
|
"type": "string"
|
|
},
|
|
"listener_name": {
|
|
"type": "string"
|
|
},
|
|
"linked": {
|
|
"type": "boolean"
|
|
},
|
|
"override": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"connected": {
|
|
"type": "boolean"
|
|
},
|
|
"dialer_runtime_status": {
|
|
"$ref": "#/components/schemas/NodeRuntimeStatus"
|
|
},
|
|
"listener_runtime_status": {
|
|
"$ref": "#/components/schemas/NodeRuntimeStatus"
|
|
},
|
|
"connection_state": {
|
|
"type": "string",
|
|
"default": "control_connecting"
|
|
},
|
|
"connection_reason": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"last_error": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"retry_attempt": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32",
|
|
"default": 0
|
|
},
|
|
"retry_in_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"LinkMatrixDto": {
|
|
"required": [
|
|
"auto_link",
|
|
"nodes",
|
|
"items"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"auto_link": {
|
|
"type": "boolean"
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/LinkNodeDto"
|
|
}
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/LinkDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"LinkNodeDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"listens",
|
|
"online",
|
|
"runtime_status"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"listens": {
|
|
"type": "boolean"
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"runtime_status": {
|
|
"$ref": "#/components/schemas/NodeRuntimeStatus"
|
|
}
|
|
}
|
|
},
|
|
"LinkRetryDto": {
|
|
"required": [
|
|
"queued",
|
|
"link"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"queued": {
|
|
"type": "boolean"
|
|
},
|
|
"link": {
|
|
"$ref": "#/components/schemas/LinkDto"
|
|
}
|
|
}
|
|
},
|
|
"LocalLimitsDto": {
|
|
"required": [
|
|
"max_total_mbps",
|
|
"max_total_pps",
|
|
"allowed_target_cidrs",
|
|
"max_concurrent_tests"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"max_total_mbps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"max_total_pps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"allowed_target_cidrs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"max_concurrent_tests": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"LoginRequest": {
|
|
"required": [
|
|
"username",
|
|
"password",
|
|
"return_session"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
},
|
|
"return_session": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"LoginResponse": {
|
|
"required": [
|
|
"user_id",
|
|
"username",
|
|
"csrf_token",
|
|
"expires_at",
|
|
"session_token"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"user_id": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"csrf_token": {
|
|
"type": "string"
|
|
},
|
|
"expires_at": {
|
|
"format": "date-time"
|
|
},
|
|
"session_token": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"MeDto": {
|
|
"required": [
|
|
"kind",
|
|
"capabilities",
|
|
"user_id",
|
|
"username",
|
|
"csrf_token"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"user_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"username": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"csrf_token": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"auth_method": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"MetricDto": {
|
|
"required": [
|
|
"id",
|
|
"definition_id",
|
|
"accumulator",
|
|
"stat",
|
|
"label",
|
|
"description",
|
|
"unit",
|
|
"better",
|
|
"good",
|
|
"poor",
|
|
"version",
|
|
"from"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"definition_id": {
|
|
"type": "string"
|
|
},
|
|
"accumulator": {
|
|
"type": "string"
|
|
},
|
|
"stat": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"unit": {
|
|
"type": "string"
|
|
},
|
|
"better": {
|
|
"type": "string"
|
|
},
|
|
"good": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"poor": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"from": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ModelDto": {
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"version",
|
|
"needs"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"needs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"NodeBuildDto": {
|
|
"required": [
|
|
"id",
|
|
"os",
|
|
"os_name",
|
|
"arch",
|
|
"version",
|
|
"tag",
|
|
"commit",
|
|
"built_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"os": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"os_name": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"arch": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"tag": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"commit": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"built_at": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"update": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NodeUpdateDto"
|
|
}
|
|
]
|
|
},
|
|
"owners": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeOwnerDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"NodeInfoDto": {
|
|
"required": [
|
|
"id",
|
|
"os",
|
|
"os_name",
|
|
"arch",
|
|
"country",
|
|
"isp_key",
|
|
"isp_name"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"os": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"os_name": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"arch": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"country": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"isp_key": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"isp_name": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"tag": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"isp_manual": {
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
}
|
|
},
|
|
"NodeOwnerDto": {
|
|
"required": [
|
|
"credential_id",
|
|
"passkey",
|
|
"account"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"credential_id": {
|
|
"type": "string"
|
|
},
|
|
"passkey": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"account": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"NodeRuntimeLogDto": {
|
|
"required": [
|
|
"id",
|
|
"at",
|
|
"level",
|
|
"message",
|
|
"fields"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
},
|
|
"level": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"fields": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"NodeRuntimeLogsDto": {
|
|
"required": [
|
|
"items",
|
|
"dropped"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeRuntimeLogDto"
|
|
}
|
|
},
|
|
"dropped": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"NodeRuntimeStatus": {
|
|
"enum": [
|
|
"initializing",
|
|
"running",
|
|
"idle",
|
|
"maintenance",
|
|
"stopping",
|
|
"offline",
|
|
"updating"
|
|
]
|
|
},
|
|
"NodeUpdateDto": {
|
|
"required": [
|
|
"state",
|
|
"current_digest",
|
|
"available_tag",
|
|
"available_version",
|
|
"error",
|
|
"at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"state": {
|
|
"type": "string"
|
|
},
|
|
"current_digest": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"available_tag": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"available_version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"error": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"OutgoingConnectionDto": {
|
|
"required": [
|
|
"listener_id",
|
|
"listener_name",
|
|
"listener_online",
|
|
"version",
|
|
"remote",
|
|
"connected_since"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"listener_id": {
|
|
"type": "string"
|
|
},
|
|
"listener_name": {
|
|
"type": "string"
|
|
},
|
|
"listener_online": {
|
|
"type": "boolean"
|
|
},
|
|
"version": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"remote": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"connected_since": {
|
|
"format": "date-time"
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
}
|
|
}
|
|
},
|
|
"OverviewDto": {
|
|
"required": [
|
|
"range",
|
|
"from",
|
|
"to",
|
|
"step",
|
|
"source",
|
|
"degraded",
|
|
"lines"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"range": {
|
|
"type": "string"
|
|
},
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
},
|
|
"degraded": {
|
|
"type": "boolean"
|
|
},
|
|
"lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/OverviewLineDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"OverviewLineDto": {
|
|
"required": [
|
|
"id",
|
|
"agent_id",
|
|
"dialer_id",
|
|
"dialer_name",
|
|
"name",
|
|
"labels",
|
|
"online",
|
|
"dialer_connected",
|
|
"endpoint_changes",
|
|
"summary",
|
|
"last_test"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_name": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"online": {
|
|
"type": "boolean"
|
|
},
|
|
"dialer_connected": {
|
|
"type": "boolean"
|
|
},
|
|
"endpoint_changes": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"summary": {
|
|
"$ref": "#/components/schemas/SummaryDto"
|
|
},
|
|
"last_test": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TestSummaryDto"
|
|
}
|
|
]
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
},
|
|
"quic_health": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/QuicLineHealthDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfAgentDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AgentDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfAgentIpv6Dto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AgentIpv6Dto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfApiTokenDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ApiTokenDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfAuditDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AuditDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfEventDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/EventDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfHostItemDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/HostItemDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfJoinTokenDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/JoinTokenDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfKindDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/KindDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfMetricDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MetricDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfModelDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ModelDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfNodeInfoDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeInfoDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfPasskeyDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PasskeyDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfPlanDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PlanDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfPresetDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PresetDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfRawChunkMetaDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RawChunkMetaDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfReleaseDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ReleaseDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfSettingDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SettingDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfTaskDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TaskDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfTestDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TestDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PageDtoOfUserDto": {
|
|
"required": [
|
|
"items",
|
|
"next_cursor"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserDto"
|
|
}
|
|
},
|
|
"next_cursor": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"ParamDto": {
|
|
"required": [
|
|
"name",
|
|
"type",
|
|
"default",
|
|
"min",
|
|
"max",
|
|
"unit",
|
|
"values",
|
|
"description"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"default": {
|
|
"$ref": "#/components/schemas/JsonElement"
|
|
},
|
|
"min": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"max": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"unit": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"values": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"PasskeyCreationOptionsDto": {
|
|
"required": [
|
|
"challenge",
|
|
"rp_id",
|
|
"rp_name",
|
|
"user_id",
|
|
"user_name",
|
|
"exclude_credentials",
|
|
"timeout_ms"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"challenge": {
|
|
"type": "string"
|
|
},
|
|
"rp_id": {
|
|
"type": "string"
|
|
},
|
|
"rp_name": {
|
|
"type": "string"
|
|
},
|
|
"user_id": {
|
|
"type": "string"
|
|
},
|
|
"user_name": {
|
|
"type": "string"
|
|
},
|
|
"exclude_credentials": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"timeout_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"PasskeyDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"created_at",
|
|
"last_used_at",
|
|
"transports"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
},
|
|
"last_used_at": {
|
|
"format": "date-time"
|
|
},
|
|
"transports": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PasskeyLoginRequest": {
|
|
"required": [
|
|
"credential_id",
|
|
"authenticator_data",
|
|
"client_data_json",
|
|
"signature",
|
|
"return_session"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"credential_id": {
|
|
"type": "string"
|
|
},
|
|
"authenticator_data": {
|
|
"type": "string"
|
|
},
|
|
"client_data_json": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
},
|
|
"return_session": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PasskeyRequestOptionsDto": {
|
|
"required": [
|
|
"challenge",
|
|
"rp_id",
|
|
"timeout_ms"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"challenge": {
|
|
"type": "string"
|
|
},
|
|
"rp_id": {
|
|
"type": "string"
|
|
},
|
|
"timeout_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"allow_credentials": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PatchTaskRequest": {
|
|
"required": [
|
|
"params",
|
|
"schedule",
|
|
"enabled",
|
|
"target"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"params": {
|
|
"type": [
|
|
"null",
|
|
"object"
|
|
]
|
|
},
|
|
"schedule": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"enabled": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"target": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"PhaseDto": {
|
|
"required": [
|
|
"kind",
|
|
"duration_s",
|
|
"params"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"duration_s": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"params": {
|
|
"$ref": "#/components/schemas/JsonElement"
|
|
}
|
|
}
|
|
},
|
|
"PlanDto": {
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"description",
|
|
"phases"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"phases": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PhaseDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PresetDto": {
|
|
"required": [
|
|
"id",
|
|
"label",
|
|
"metrics"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"metrics": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ProblemDto": {
|
|
"required": [
|
|
"type",
|
|
"title",
|
|
"status",
|
|
"code",
|
|
"detail",
|
|
"trace_id",
|
|
"errors"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"trace_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"errors": {
|
|
"type": [
|
|
"null",
|
|
"object"
|
|
],
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ProposedCredentialDto": {
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"created_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"PublishReleaseRequest": {
|
|
"required": [
|
|
"manifest",
|
|
"signature"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"manifest": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"signature": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"QuadletInstallDto": {
|
|
"required": [
|
|
"env",
|
|
"url",
|
|
"sha256",
|
|
"command"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"env": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"sha256": {
|
|
"type": "string"
|
|
},
|
|
"command": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"QuicLineHealthDto": {
|
|
"required": [
|
|
"connected",
|
|
"handshake_attempts",
|
|
"handshake_successes",
|
|
"handshake_failures",
|
|
"handshake_timeouts",
|
|
"handshake_success_rate",
|
|
"handshake_failure_rate",
|
|
"handshake_timeout_rate",
|
|
"handshake_p95_ms",
|
|
"handshake_sample_count",
|
|
"transport_packet_loss_rate",
|
|
"transport_packets_sent",
|
|
"transport_congestion_events",
|
|
"transport_ecn_congestion_events",
|
|
"path_mtu",
|
|
"at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"connected": {
|
|
"type": "boolean"
|
|
},
|
|
"handshake_attempts": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"handshake_successes": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"handshake_failures": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"handshake_timeouts": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"handshake_success_rate": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"handshake_failure_rate": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"handshake_timeout_rate": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"handshake_p95_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"handshake_sample_count": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"transport_packet_loss_rate": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"transport_packets_sent": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "uint64"
|
|
},
|
|
"transport_congestion_events": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "uint32"
|
|
},
|
|
"transport_ecn_congestion_events": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "uint32"
|
|
},
|
|
"path_mtu": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "uint16"
|
|
},
|
|
"at": {
|
|
"format": "date-time"
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"default": "connecting"
|
|
},
|
|
"retry_attempt": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32",
|
|
"default": 0
|
|
},
|
|
"retry_in_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"control_state": {
|
|
"type": "string",
|
|
"default": "dialing"
|
|
},
|
|
"control_down_since": {}
|
|
}
|
|
},
|
|
"RawChunkMetaDto": {
|
|
"required": [
|
|
"chunk_id",
|
|
"agent_id",
|
|
"series",
|
|
"kind",
|
|
"task_id",
|
|
"test_id",
|
|
"phase",
|
|
"start",
|
|
"duration_ms",
|
|
"partial",
|
|
"bytes"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"chunk_id": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"series": {
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"task_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"test_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"phase": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"start": {
|
|
"format": "date-time"
|
|
},
|
|
"duration_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"partial": {
|
|
"type": "boolean"
|
|
},
|
|
"bytes": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"RecomputeDto": {
|
|
"required": [
|
|
"state",
|
|
"metrics",
|
|
"windows_done",
|
|
"windows_total",
|
|
"from",
|
|
"to",
|
|
"queue_length"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"state": {
|
|
"type": "string"
|
|
},
|
|
"metrics": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"windows_done": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"windows_total": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"queue_length": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"RegisterPasskeyRequest": {
|
|
"required": [
|
|
"name",
|
|
"credential_id",
|
|
"attestation_object",
|
|
"client_data_json",
|
|
"transports"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"credential_id": {
|
|
"type": "string"
|
|
},
|
|
"attestation_object": {
|
|
"type": "string"
|
|
},
|
|
"client_data_json": {
|
|
"type": "string"
|
|
},
|
|
"transports": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"RejectedDto": {
|
|
"required": [
|
|
"id",
|
|
"reason"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"reason": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ReleaseDto": {
|
|
"required": [
|
|
"component",
|
|
"seq",
|
|
"tag",
|
|
"version",
|
|
"digest"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"component": {
|
|
"type": "string"
|
|
},
|
|
"seq": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
},
|
|
"tag": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"digest": {
|
|
"type": "string"
|
|
},
|
|
"channel": {
|
|
"type": "string",
|
|
"default": "release"
|
|
}
|
|
}
|
|
},
|
|
"ReleaseKeyDto": {
|
|
"required": [
|
|
"fingerprint",
|
|
"public_key"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"fingerprint": {
|
|
"type": "string"
|
|
},
|
|
"public_key": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ReleaseKeysDto": {
|
|
"required": [
|
|
"official",
|
|
"custom"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"official": {
|
|
"$ref": "#/components/schemas/ReleaseKeyDto"
|
|
},
|
|
"custom": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ReleaseKeyDto"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"ScoreDto": {
|
|
"required": [
|
|
"score",
|
|
"version",
|
|
"estimated",
|
|
"dimensions",
|
|
"caveats"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"score": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"estimated": {
|
|
"type": "boolean"
|
|
},
|
|
"dimensions": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DimensionDto"
|
|
}
|
|
},
|
|
"caveats": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"SeriesDto": {
|
|
"required": [
|
|
"line_id",
|
|
"agent_id",
|
|
"dialer_id",
|
|
"from",
|
|
"to",
|
|
"step",
|
|
"source",
|
|
"live",
|
|
"degraded",
|
|
"t",
|
|
"values",
|
|
"summary",
|
|
"edge_partial",
|
|
"gaps",
|
|
"events",
|
|
"versions"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"line_id": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"from": {
|
|
"format": "date-time"
|
|
},
|
|
"to": {
|
|
"format": "date-time"
|
|
},
|
|
"step": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
},
|
|
"live": {
|
|
"type": "boolean"
|
|
},
|
|
"degraded": {
|
|
"type": "boolean"
|
|
},
|
|
"t": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"values": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"summary": {
|
|
"$ref": "#/components/schemas/SummaryDto"
|
|
},
|
|
"edge_partial": {
|
|
"$ref": "#/components/schemas/EdgePartialDto"
|
|
},
|
|
"gaps": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GapDto"
|
|
}
|
|
},
|
|
"events": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/EventDto"
|
|
}
|
|
},
|
|
"versions": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
}
|
|
}
|
|
},
|
|
"SetLinkRequest": {
|
|
"required": [
|
|
"enabled"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"SetReleaseKeyRequest": {
|
|
"required": [
|
|
"public_key"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"public_key": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"SettingDto": {
|
|
"required": [
|
|
"key",
|
|
"type",
|
|
"value",
|
|
"default",
|
|
"description"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"default": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"SetupRequest": {
|
|
"required": [
|
|
"claim_code",
|
|
"username",
|
|
"password",
|
|
"return_session"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"claim_code": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"username": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"password": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"return_session": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"SetupStatusDto": {
|
|
"required": [
|
|
"needs_setup"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"needs_setup": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"SignedStatementDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"statement": {
|
|
"type": "string"
|
|
},
|
|
"credential_id": {
|
|
"type": "string"
|
|
},
|
|
"authenticator_data": {
|
|
"type": "string"
|
|
},
|
|
"client_data_json": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"StartTestRequestDto": {
|
|
"required": [
|
|
"plan",
|
|
"params"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"plan": {
|
|
"type": "string"
|
|
},
|
|
"params": {
|
|
"type": [
|
|
"null",
|
|
"object"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"StreamDto": {
|
|
"required": [
|
|
"name",
|
|
"columns"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"columns": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ColumnDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"SummaryDto": {
|
|
"required": [
|
|
"metrics",
|
|
"samples",
|
|
"coverage"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"metrics": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
},
|
|
"samples": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"coverage": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"TaskDto": {
|
|
"required": [
|
|
"id",
|
|
"scope",
|
|
"agent_id",
|
|
"base_task_id",
|
|
"kind",
|
|
"target",
|
|
"params",
|
|
"schedule",
|
|
"enabled",
|
|
"updated_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"base_task_id": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"kind": {
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"params": {
|
|
"type": "object"
|
|
},
|
|
"schedule": {
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"updated_at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"TestDto": {
|
|
"required": [
|
|
"id",
|
|
"agent_id",
|
|
"dialer_id",
|
|
"plan",
|
|
"phases",
|
|
"status",
|
|
"phase",
|
|
"error_code",
|
|
"trigger",
|
|
"requested_at",
|
|
"started_at",
|
|
"finished_at",
|
|
"result"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"agent_id": {
|
|
"type": "string"
|
|
},
|
|
"dialer_id": {
|
|
"type": "string"
|
|
},
|
|
"plan": {
|
|
"type": "string"
|
|
},
|
|
"phases": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"phase": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"error_code": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"trigger": {
|
|
"type": "string"
|
|
},
|
|
"requested_at": {
|
|
"format": "date-time"
|
|
},
|
|
"started_at": {
|
|
"format": "date-time"
|
|
},
|
|
"finished_at": {
|
|
"format": "date-time"
|
|
},
|
|
"result": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TestResultDto"
|
|
}
|
|
]
|
|
},
|
|
"ip_version": {
|
|
"type": "string",
|
|
"default": "ipv4"
|
|
}
|
|
}
|
|
},
|
|
"TestResultDto": {
|
|
"required": [
|
|
"metrics",
|
|
"scores",
|
|
"series",
|
|
"steps",
|
|
"caveats"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"metrics": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
},
|
|
"scores": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/ScoreDto"
|
|
}
|
|
},
|
|
"series": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"steps": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TestStepDto"
|
|
}
|
|
},
|
|
"caveats": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"TestStepDto": {
|
|
"required": [
|
|
"index",
|
|
"target_mbps",
|
|
"loss_pct",
|
|
"jitter_p95_ms",
|
|
"delivered_mbps"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"index": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"target_mbps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"loss_pct": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"jitter_p95_ms": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"null",
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
},
|
|
"delivered_mbps": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
|
|
"type": [
|
|
"number",
|
|
"string"
|
|
],
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"TestSummaryDto": {
|
|
"required": [
|
|
"id",
|
|
"plan",
|
|
"status",
|
|
"requested_at",
|
|
"finished_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"plan": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"requested_at": {
|
|
"format": "date-time"
|
|
},
|
|
"finished_at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"TrustProposalDto": {
|
|
"required": [
|
|
"statement",
|
|
"version",
|
|
"challenge",
|
|
"added",
|
|
"removed",
|
|
"server_key_changed"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"statement": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"challenge": {
|
|
"type": "string"
|
|
},
|
|
"added": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProposedCredentialDto"
|
|
}
|
|
},
|
|
"removed": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"server_key_changed": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"TrustStateDto": {
|
|
"required": [
|
|
"initialized",
|
|
"genesis",
|
|
"version",
|
|
"in_sync",
|
|
"proposal"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"initialized": {
|
|
"type": "boolean"
|
|
},
|
|
"genesis": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"version": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"in_sync": {
|
|
"type": "boolean"
|
|
},
|
|
"proposal": {
|
|
"oneOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TrustProposalDto"
|
|
}
|
|
]
|
|
},
|
|
"install_url": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"operators": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"install_sh_sha256": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"install_ps1_sha256": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"install_matches_release": {
|
|
"type": [
|
|
"null",
|
|
"boolean"
|
|
]
|
|
},
|
|
"server_key": {
|
|
"type": "string",
|
|
"default": ""
|
|
},
|
|
"server_key_listed": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"operator_details": {
|
|
"type": [
|
|
"null",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"$ref": "#/components/schemas/NodeOwnerDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"UserDto": {
|
|
"required": [
|
|
"id",
|
|
"username",
|
|
"created_at"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "public"
|
|
},
|
|
{
|
|
"name": "public-nodes"
|
|
},
|
|
{
|
|
"name": "catalog"
|
|
},
|
|
{
|
|
"name": "admin-auth"
|
|
},
|
|
{
|
|
"name": "admin-agents"
|
|
},
|
|
{
|
|
"name": "admin-nodes"
|
|
},
|
|
{
|
|
"name": "admin-join-tokens"
|
|
},
|
|
{
|
|
"name": "admin-tasks"
|
|
},
|
|
{
|
|
"name": "admin-tests"
|
|
},
|
|
{
|
|
"name": "admin-data"
|
|
},
|
|
{
|
|
"name": "admin-audit"
|
|
},
|
|
{
|
|
"name": "admin-trust"
|
|
},
|
|
{
|
|
"name": "admin-api-tokens"
|
|
},
|
|
{
|
|
"name": "admin-settings"
|
|
},
|
|
{
|
|
"name": "admin-users"
|
|
},
|
|
{
|
|
"name": "admin-build"
|
|
},
|
|
{
|
|
"name": "admin-release-key"
|
|
},
|
|
{
|
|
"name": "admin-links"
|
|
},
|
|
{
|
|
"name": "ops"
|
|
},
|
|
{
|
|
"name": "release"
|
|
},
|
|
{
|
|
"name": "agent"
|
|
}
|
|
]
|
|
}
|