Previously the refresh endpoint only returned a new accessToken, causing agents to lose their refreshToken after the first refresh cycle and forcing a full re-registration every ~2 hours. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4068 lines
99 KiB
JSON
4068 lines
99 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "Cameleer3 Server API",
|
|
"version": "1.0"
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "/api/v1",
|
|
"description": "Relative"
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"bearer": []
|
|
}
|
|
],
|
|
"tags": [
|
|
{
|
|
"name": "Database Admin",
|
|
"description": "Database monitoring and management (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Threshold Admin",
|
|
"description": "Monitoring threshold configuration (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Agent Commands",
|
|
"description": "Command push endpoints for agent communication"
|
|
},
|
|
{
|
|
"name": "User Admin",
|
|
"description": "User management (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Agent Management",
|
|
"description": "Agent registration and lifecycle endpoints"
|
|
},
|
|
{
|
|
"name": "Authentication",
|
|
"description": "Login and token refresh endpoints"
|
|
},
|
|
{
|
|
"name": "Role Admin",
|
|
"description": "Role management (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "RBAC Stats",
|
|
"description": "RBAC statistics (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "OIDC Config Admin",
|
|
"description": "OIDC provider configuration (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Search",
|
|
"description": "Transaction search endpoints"
|
|
},
|
|
{
|
|
"name": "Agent SSE",
|
|
"description": "Server-Sent Events endpoint for agent communication"
|
|
},
|
|
{
|
|
"name": "Ingestion",
|
|
"description": "Data ingestion endpoints"
|
|
},
|
|
{
|
|
"name": "Audit Log",
|
|
"description": "Audit log viewer (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Group Admin",
|
|
"description": "Group management (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Diagrams",
|
|
"description": "Diagram rendering endpoints"
|
|
},
|
|
{
|
|
"name": "OpenSearch Admin",
|
|
"description": "OpenSearch monitoring and management (ADMIN only)"
|
|
},
|
|
{
|
|
"name": "Detail",
|
|
"description": "Execution detail and processor snapshot endpoints"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/admin/thresholds": {
|
|
"get": {
|
|
"tags": [
|
|
"Threshold Admin"
|
|
],
|
|
"summary": "Get current threshold configuration",
|
|
"operationId": "getThresholds",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ThresholdConfig"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"Threshold Admin"
|
|
],
|
|
"summary": "Update threshold configuration",
|
|
"operationId": "updateThresholds",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ThresholdConfigRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ThresholdConfig"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/roles/{id}": {
|
|
"get": {
|
|
"tags": [
|
|
"Role Admin"
|
|
],
|
|
"summary": "Get role by ID with effective principals",
|
|
"operationId": "getRole",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Role not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoleDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"Role Admin"
|
|
],
|
|
"summary": "Update a custom role",
|
|
"operationId": "updateRole",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateRoleRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role updated"
|
|
},
|
|
"403": {
|
|
"description": "Cannot modify system role"
|
|
},
|
|
"404": {
|
|
"description": "Role not found"
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"Role Admin"
|
|
],
|
|
"summary": "Delete a custom role",
|
|
"operationId": "deleteRole",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Role deleted"
|
|
},
|
|
"403": {
|
|
"description": "Cannot delete system role"
|
|
},
|
|
"404": {
|
|
"description": "Role not found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/oidc": {
|
|
"get": {
|
|
"tags": [
|
|
"OIDC Config Admin"
|
|
],
|
|
"summary": "Get OIDC configuration",
|
|
"operationId": "getConfig",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Current OIDC configuration (client_secret masked)",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcAdminConfigResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"OIDC Config Admin"
|
|
],
|
|
"summary": "Save OIDC configuration",
|
|
"operationId": "saveConfig",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcAdminConfigRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Configuration saved",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcAdminConfigResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid configuration",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"OIDC Config Admin"
|
|
],
|
|
"summary": "Delete OIDC configuration",
|
|
"operationId": "deleteConfig",
|
|
"responses": {
|
|
"204": {
|
|
"description": "Configuration deleted"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/groups/{id}": {
|
|
"get": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Get group by ID with effective roles",
|
|
"operationId": "getGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Group found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroupDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Group not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroupDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Update group name or parent",
|
|
"operationId": "updateGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateGroupRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Group updated"
|
|
},
|
|
"404": {
|
|
"description": "Group not found"
|
|
},
|
|
"409": {
|
|
"description": "Cycle detected in group hierarchy"
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Delete group",
|
|
"operationId": "deleteGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Group deleted"
|
|
},
|
|
"404": {
|
|
"description": "Group not found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/search/executions": {
|
|
"get": {
|
|
"tags": [
|
|
"Search"
|
|
],
|
|
"summary": "Search executions with basic filters",
|
|
"operationId": "searchGet",
|
|
"parameters": [
|
|
{
|
|
"name": "status",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "timeFrom",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "timeTo",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "correlationId",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "text",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "routeId",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "agentId",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "processorType",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "group",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 0
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 50
|
|
}
|
|
},
|
|
{
|
|
"name": "sortField",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "sortDir",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SearchResultExecutionSummary"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"Search"
|
|
],
|
|
"summary": "Advanced search with all filters",
|
|
"operationId": "searchPost",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SearchRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SearchResultExecutionSummary"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/data/metrics": {
|
|
"post": {
|
|
"tags": [
|
|
"Ingestion"
|
|
],
|
|
"summary": "Ingest agent metrics",
|
|
"description": "Accepts an array of MetricsSnapshot objects",
|
|
"operationId": "ingestMetrics",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Data accepted for processing"
|
|
},
|
|
"503": {
|
|
"description": "Buffer full, retry later"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/data/executions": {
|
|
"post": {
|
|
"tags": [
|
|
"Ingestion"
|
|
],
|
|
"summary": "Ingest route execution data",
|
|
"description": "Accepts a single RouteExecution or an array of RouteExecutions",
|
|
"operationId": "ingestExecutions",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Data accepted for processing"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/data/diagrams": {
|
|
"post": {
|
|
"tags": [
|
|
"Ingestion"
|
|
],
|
|
"summary": "Ingest route diagram data",
|
|
"description": "Accepts a single RouteGraph or an array of RouteGraphs",
|
|
"operationId": "ingestDiagrams",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Data accepted for processing"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/refresh": {
|
|
"post": {
|
|
"tags": [
|
|
"Authentication"
|
|
],
|
|
"summary": "Refresh access token",
|
|
"operationId": "refresh",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RefreshRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Token refreshed",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthTokenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Invalid refresh token",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/oidc/callback": {
|
|
"post": {
|
|
"tags": [
|
|
"Authentication"
|
|
],
|
|
"summary": "Exchange OIDC authorization code for JWTs",
|
|
"operationId": "callback",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CallbackRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Authentication successful",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthTokenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "OIDC authentication failed",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Account not provisioned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "OIDC not configured or disabled",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthTokenResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/login": {
|
|
"post": {
|
|
"tags": [
|
|
"Authentication"
|
|
],
|
|
"summary": "Login with local credentials",
|
|
"operationId": "login",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Login successful",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthTokenResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Invalid credentials",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/{id}/refresh": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Management"
|
|
],
|
|
"summary": "Refresh access token",
|
|
"description": "Issues a new access JWT from a valid refresh token",
|
|
"operationId": "refresh_1",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRefreshRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "New access token issued",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRefreshResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Invalid or expired refresh token",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRefreshResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Agent not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRefreshResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/{id}/heartbeat": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Management"
|
|
],
|
|
"summary": "Agent heartbeat ping",
|
|
"description": "Updates the agent's last heartbeat timestamp",
|
|
"operationId": "heartbeat",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Heartbeat accepted"
|
|
},
|
|
"404": {
|
|
"description": "Agent not registered"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/{id}/commands": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Commands"
|
|
],
|
|
"summary": "Send command to a specific agent",
|
|
"description": "Sends a config-update, deep-trace, or replay command to the specified agent",
|
|
"operationId": "sendCommand",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Command accepted",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandSingleResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid command payload",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandSingleResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Agent not registered",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandSingleResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/{id}/commands/{commandId}/ack": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Commands"
|
|
],
|
|
"summary": "Acknowledge command receipt",
|
|
"description": "Agent acknowledges that it has received and processed a command",
|
|
"operationId": "acknowledgeCommand",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "commandId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Command acknowledged"
|
|
},
|
|
"404": {
|
|
"description": "Command not found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/register": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Management"
|
|
],
|
|
"summary": "Register an agent",
|
|
"description": "Registers a new agent or re-registers an existing one. Requires bootstrap token in Authorization header.",
|
|
"operationId": "register",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRegistrationRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Agent registered successfully",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRegistrationResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid registration payload",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid bootstrap token",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AgentRegistrationResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/groups/{group}/commands": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Commands"
|
|
],
|
|
"summary": "Send command to all agents in a group",
|
|
"description": "Sends a command to all LIVE agents in the specified group",
|
|
"operationId": "sendGroupCommand",
|
|
"parameters": [
|
|
{
|
|
"name": "group",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Commands accepted",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandBroadcastResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid command payload",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandBroadcastResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/commands": {
|
|
"post": {
|
|
"tags": [
|
|
"Agent Commands"
|
|
],
|
|
"summary": "Broadcast command to all live agents",
|
|
"description": "Sends a command to all agents currently in LIVE state",
|
|
"operationId": "broadcastCommand",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "Commands accepted",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandBroadcastResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid command payload",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CommandBroadcastResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/users/{userId}/roles/{roleId}": {
|
|
"post": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Assign a role to a user",
|
|
"operationId": "assignRoleToUser",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "roleId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role assigned"
|
|
},
|
|
"404": {
|
|
"description": "User or role not found"
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Remove a role from a user",
|
|
"operationId": "removeRoleFromUser",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "roleId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Role removed"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/users/{userId}/groups/{groupId}": {
|
|
"post": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Add a user to a group",
|
|
"operationId": "addUserToGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "groupId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "User added to group"
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Remove a user from a group",
|
|
"operationId": "removeUserFromGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "groupId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "User removed from group"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/roles": {
|
|
"get": {
|
|
"tags": [
|
|
"Role Admin"
|
|
],
|
|
"summary": "List all roles (system and custom)",
|
|
"operationId": "listRoles",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role list returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"Role Admin"
|
|
],
|
|
"summary": "Create a custom role",
|
|
"operationId": "createRole",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateRoleRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role created",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/oidc/test": {
|
|
"post": {
|
|
"tags": [
|
|
"OIDC Config Admin"
|
|
],
|
|
"summary": "Test OIDC provider connectivity",
|
|
"operationId": "testConnection",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Provider reachable",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcTestResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Provider unreachable or misconfigured",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/groups": {
|
|
"get": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "List all groups with hierarchy and effective roles",
|
|
"operationId": "listGroups",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Group list returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroupDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Create a new group",
|
|
"operationId": "createGroup",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateGroupRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Group created",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/groups/{id}/roles/{roleId}": {
|
|
"post": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Assign a role to a group",
|
|
"operationId": "assignRoleToGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
},
|
|
{
|
|
"name": "roleId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Role assigned to group"
|
|
},
|
|
"404": {
|
|
"description": "Group not found"
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"Group Admin"
|
|
],
|
|
"summary": "Remove a role from a group",
|
|
"operationId": "removeRoleFromGroup",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
},
|
|
{
|
|
"name": "roleId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Role removed from group"
|
|
},
|
|
"404": {
|
|
"description": "Group not found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/database/queries/{pid}/kill": {
|
|
"post": {
|
|
"tags": [
|
|
"Database Admin"
|
|
],
|
|
"summary": "Terminate a query by PID",
|
|
"operationId": "killQuery",
|
|
"parameters": [
|
|
{
|
|
"name": "pid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/search/stats": {
|
|
"get": {
|
|
"tags": [
|
|
"Search"
|
|
],
|
|
"summary": "Aggregate execution stats (P99 latency, active count)",
|
|
"operationId": "stats",
|
|
"parameters": [
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "routeId",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "group",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ExecutionStats"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/search/stats/timeseries": {
|
|
"get": {
|
|
"tags": [
|
|
"Search"
|
|
],
|
|
"summary": "Bucketed time-series stats over a time window",
|
|
"operationId": "timeseries",
|
|
"parameters": [
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
{
|
|
"name": "buckets",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 24
|
|
}
|
|
},
|
|
{
|
|
"name": "routeId",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "group",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/StatsTimeseries"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/executions/{executionId}": {
|
|
"get": {
|
|
"tags": [
|
|
"Detail"
|
|
],
|
|
"summary": "Get execution detail with nested processor tree",
|
|
"operationId": "getDetail",
|
|
"parameters": [
|
|
{
|
|
"name": "executionId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Execution detail found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ExecutionDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Execution not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ExecutionDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/executions/{executionId}/processors/{index}/snapshot": {
|
|
"get": {
|
|
"tags": [
|
|
"Detail"
|
|
],
|
|
"summary": "Get exchange snapshot for a specific processor",
|
|
"operationId": "getProcessorSnapshot",
|
|
"parameters": [
|
|
{
|
|
"name": "executionId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "index",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Snapshot data",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Snapshot not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/diagrams": {
|
|
"get": {
|
|
"tags": [
|
|
"Diagrams"
|
|
],
|
|
"summary": "Find diagram by application group and route ID",
|
|
"description": "Resolves group to agent IDs and finds the latest diagram for the route",
|
|
"operationId": "findByGroupAndRoute",
|
|
"parameters": [
|
|
{
|
|
"name": "group",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "routeId",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Diagram layout returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DiagramLayout"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No diagram found for the given group and route",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DiagramLayout"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/diagrams/{contentHash}/render": {
|
|
"get": {
|
|
"tags": [
|
|
"Diagrams"
|
|
],
|
|
"summary": "Render a route diagram",
|
|
"description": "Returns SVG (default) or JSON layout based on Accept header",
|
|
"operationId": "renderDiagram",
|
|
"parameters": [
|
|
{
|
|
"name": "contentHash",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Diagram rendered successfully",
|
|
"content": {
|
|
"image/svg+xml": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DiagramLayout"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Diagram not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/auth/oidc/config": {
|
|
"get": {
|
|
"tags": [
|
|
"Authentication"
|
|
],
|
|
"summary": "Get OIDC config for SPA login flow",
|
|
"operationId": "getConfig_1",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OIDC configuration",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcPublicConfigResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "OIDC not configured or disabled",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OidcPublicConfigResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Failed to retrieve OIDC provider metadata",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents": {
|
|
"get": {
|
|
"tags": [
|
|
"Agent Management"
|
|
],
|
|
"summary": "List all agents",
|
|
"description": "Returns all registered agents, optionally filtered by status and/or group",
|
|
"operationId": "listAgents",
|
|
"parameters": [
|
|
{
|
|
"name": "status",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "group",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Agent list returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AgentInstanceResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid status filter",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/agents/{id}/events": {
|
|
"get": {
|
|
"tags": [
|
|
"Agent SSE"
|
|
],
|
|
"summary": "Open SSE event stream",
|
|
"description": "Opens a Server-Sent Events stream for the specified agent. Commands (config-update, deep-trace, replay) are pushed as events. Ping keepalive comments sent every 15 seconds.",
|
|
"operationId": "events",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "Last-Event-ID",
|
|
"in": "header",
|
|
"description": "Last received event ID (no replay, acknowledged only)",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "SSE stream opened",
|
|
"content": {
|
|
"text/event-stream": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SseEmitter"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Agent not registered",
|
|
"content": {
|
|
"text/event-stream": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SseEmitter"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/users": {
|
|
"get": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "List all users with RBAC detail",
|
|
"operationId": "listUsers",
|
|
"responses": {
|
|
"200": {
|
|
"description": "User list returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/users/{userId}": {
|
|
"get": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Get user by ID with RBAC detail",
|
|
"operationId": "getUser",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "User found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserDetail"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "User not found",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserDetail"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"User Admin"
|
|
],
|
|
"summary": "Delete user",
|
|
"operationId": "deleteUser",
|
|
"parameters": [
|
|
{
|
|
"name": "userId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "User deleted"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/rbac/stats": {
|
|
"get": {
|
|
"tags": [
|
|
"RBAC Stats"
|
|
],
|
|
"summary": "Get RBAC statistics for the dashboard",
|
|
"operationId": "getStats",
|
|
"responses": {
|
|
"200": {
|
|
"description": "RBAC stats returned",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RbacStats"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/opensearch/status": {
|
|
"get": {
|
|
"tags": [
|
|
"OpenSearch Admin"
|
|
],
|
|
"summary": "Get OpenSearch cluster status and version",
|
|
"operationId": "getStatus",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/OpenSearchStatusResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/opensearch/pipeline": {
|
|
"get": {
|
|
"tags": [
|
|
"OpenSearch Admin"
|
|
],
|
|
"summary": "Get indexing pipeline statistics",
|
|
"operationId": "getPipeline",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PipelineStatsResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/opensearch/performance": {
|
|
"get": {
|
|
"tags": [
|
|
"OpenSearch Admin"
|
|
],
|
|
"summary": "Get OpenSearch performance metrics",
|
|
"operationId": "getPerformance",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PerformanceResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/opensearch/indices": {
|
|
"get": {
|
|
"tags": [
|
|
"OpenSearch Admin"
|
|
],
|
|
"summary": "Get OpenSearch indices with pagination",
|
|
"operationId": "getIndices",
|
|
"parameters": [
|
|
{
|
|
"name": "page",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 0
|
|
}
|
|
},
|
|
{
|
|
"name": "size",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 20
|
|
}
|
|
},
|
|
{
|
|
"name": "search",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"default": ""
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IndicesPageResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/database/tables": {
|
|
"get": {
|
|
"tags": [
|
|
"Database Admin"
|
|
],
|
|
"summary": "Get table sizes and row counts",
|
|
"operationId": "getTables",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TableSizeResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/database/status": {
|
|
"get": {
|
|
"tags": [
|
|
"Database Admin"
|
|
],
|
|
"summary": "Get database connection status and version",
|
|
"operationId": "getStatus_1",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DatabaseStatusResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/database/queries": {
|
|
"get": {
|
|
"tags": [
|
|
"Database Admin"
|
|
],
|
|
"summary": "Get active queries",
|
|
"operationId": "getQueries",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveQueryResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/database/pool": {
|
|
"get": {
|
|
"tags": [
|
|
"Database Admin"
|
|
],
|
|
"summary": "Get HikariCP connection pool stats",
|
|
"operationId": "getPool",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ConnectionPoolResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/audit": {
|
|
"get": {
|
|
"tags": [
|
|
"Audit Log"
|
|
],
|
|
"summary": "Search audit log entries with pagination",
|
|
"operationId": "getAuditLog",
|
|
"parameters": [
|
|
{
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "category",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "search",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "from",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
},
|
|
{
|
|
"name": "sort",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "timestamp"
|
|
}
|
|
},
|
|
{
|
|
"name": "order",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string",
|
|
"default": "desc"
|
|
}
|
|
},
|
|
{
|
|
"name": "page",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 0
|
|
}
|
|
},
|
|
{
|
|
"name": "size",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"default": 25
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"content": {
|
|
"*/*": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuditLogPageResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/admin/opensearch/indices/{name}": {
|
|
"delete": {
|
|
"tags": [
|
|
"OpenSearch Admin"
|
|
],
|
|
"summary": "Delete an OpenSearch index",
|
|
"operationId": "deleteIndex",
|
|
"parameters": [
|
|
{
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"DatabaseThresholdsRequest": {
|
|
"type": "object",
|
|
"description": "Database monitoring thresholds",
|
|
"properties": {
|
|
"connectionPoolWarning": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Connection pool usage warning threshold (percentage)",
|
|
"maximum": 100,
|
|
"minimum": 0
|
|
},
|
|
"connectionPoolCritical": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Connection pool usage critical threshold (percentage)",
|
|
"maximum": 100,
|
|
"minimum": 0
|
|
},
|
|
"queryDurationWarning": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Query duration warning threshold (seconds)"
|
|
},
|
|
"queryDurationCritical": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Query duration critical threshold (seconds)"
|
|
}
|
|
}
|
|
},
|
|
"OpenSearchThresholdsRequest": {
|
|
"type": "object",
|
|
"description": "OpenSearch monitoring thresholds",
|
|
"properties": {
|
|
"clusterHealthWarning": {
|
|
"type": "string",
|
|
"description": "Cluster health warning threshold (GREEN, YELLOW, RED)",
|
|
"minLength": 1
|
|
},
|
|
"clusterHealthCritical": {
|
|
"type": "string",
|
|
"description": "Cluster health critical threshold (GREEN, YELLOW, RED)",
|
|
"minLength": 1
|
|
},
|
|
"queueDepthWarning": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Queue depth warning threshold",
|
|
"minimum": 0
|
|
},
|
|
"queueDepthCritical": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Queue depth critical threshold",
|
|
"minimum": 0
|
|
},
|
|
"jvmHeapWarning": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "JVM heap usage warning threshold (percentage)",
|
|
"maximum": 100,
|
|
"minimum": 0
|
|
},
|
|
"jvmHeapCritical": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "JVM heap usage critical threshold (percentage)",
|
|
"maximum": 100,
|
|
"minimum": 0
|
|
},
|
|
"failedDocsWarning": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Failed document count warning threshold",
|
|
"minimum": 0
|
|
},
|
|
"failedDocsCritical": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Failed document count critical threshold",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"ThresholdConfigRequest": {
|
|
"type": "object",
|
|
"description": "Threshold configuration for admin monitoring",
|
|
"properties": {
|
|
"database": {
|
|
"$ref": "#/components/schemas/DatabaseThresholdsRequest"
|
|
},
|
|
"opensearch": {
|
|
"$ref": "#/components/schemas/OpenSearchThresholdsRequest"
|
|
}
|
|
},
|
|
"required": [
|
|
"database",
|
|
"opensearch"
|
|
]
|
|
},
|
|
"DatabaseThresholds": {
|
|
"type": "object",
|
|
"properties": {
|
|
"connectionPoolWarning": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"connectionPoolCritical": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"queryDurationWarning": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"queryDurationCritical": {
|
|
"type": "number",
|
|
"format": "double"
|
|
}
|
|
}
|
|
},
|
|
"OpenSearchThresholds": {
|
|
"type": "object",
|
|
"properties": {
|
|
"clusterHealthWarning": {
|
|
"type": "string"
|
|
},
|
|
"clusterHealthCritical": {
|
|
"type": "string"
|
|
},
|
|
"queueDepthWarning": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"queueDepthCritical": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"jvmHeapWarning": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"jvmHeapCritical": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"failedDocsWarning": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"failedDocsCritical": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"ThresholdConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"database": {
|
|
"$ref": "#/components/schemas/DatabaseThresholds"
|
|
},
|
|
"opensearch": {
|
|
"$ref": "#/components/schemas/OpenSearchThresholds"
|
|
}
|
|
}
|
|
},
|
|
"UpdateRoleRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"OidcAdminConfigRequest": {
|
|
"type": "object",
|
|
"description": "OIDC configuration update request",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"issuerUri": {
|
|
"type": "string"
|
|
},
|
|
"clientId": {
|
|
"type": "string"
|
|
},
|
|
"clientSecret": {
|
|
"type": "string"
|
|
},
|
|
"rolesClaim": {
|
|
"type": "string"
|
|
},
|
|
"defaultRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"autoSignup": {
|
|
"type": "boolean"
|
|
},
|
|
"displayNameClaim": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ErrorResponse": {
|
|
"type": "object",
|
|
"description": "Error response",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"message"
|
|
]
|
|
},
|
|
"OidcAdminConfigResponse": {
|
|
"type": "object",
|
|
"description": "OIDC configuration for admin management",
|
|
"properties": {
|
|
"configured": {
|
|
"type": "boolean"
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"issuerUri": {
|
|
"type": "string"
|
|
},
|
|
"clientId": {
|
|
"type": "string"
|
|
},
|
|
"clientSecretSet": {
|
|
"type": "boolean"
|
|
},
|
|
"rolesClaim": {
|
|
"type": "string"
|
|
},
|
|
"defaultRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"autoSignup": {
|
|
"type": "boolean"
|
|
},
|
|
"displayNameClaim": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"UpdateGroupRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"parentGroupId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
},
|
|
"SearchRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"timeFrom": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"timeTo": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"durationMin": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"durationMax": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"correlationId": {
|
|
"type": "string"
|
|
},
|
|
"text": {
|
|
"type": "string"
|
|
},
|
|
"textInBody": {
|
|
"type": "string"
|
|
},
|
|
"textInHeaders": {
|
|
"type": "string"
|
|
},
|
|
"textInErrors": {
|
|
"type": "string"
|
|
},
|
|
"routeId": {
|
|
"type": "string"
|
|
},
|
|
"agentId": {
|
|
"type": "string"
|
|
},
|
|
"processorType": {
|
|
"type": "string"
|
|
},
|
|
"group": {
|
|
"type": "string"
|
|
},
|
|
"agentIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"offset": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"sortField": {
|
|
"type": "string"
|
|
},
|
|
"sortDir": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"ExecutionSummary": {
|
|
"type": "object",
|
|
"properties": {
|
|
"executionId": {
|
|
"type": "string"
|
|
},
|
|
"routeId": {
|
|
"type": "string"
|
|
},
|
|
"agentId": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"startTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"endTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"durationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"correlationId": {
|
|
"type": "string"
|
|
},
|
|
"errorMessage": {
|
|
"type": "string"
|
|
},
|
|
"diagramContentHash": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"agentId",
|
|
"correlationId",
|
|
"diagramContentHash",
|
|
"durationMs",
|
|
"endTime",
|
|
"errorMessage",
|
|
"executionId",
|
|
"routeId",
|
|
"startTime",
|
|
"status"
|
|
]
|
|
},
|
|
"SearchResultExecutionSummary": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ExecutionSummary"
|
|
}
|
|
},
|
|
"total": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"offset": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
},
|
|
"required": [
|
|
"data",
|
|
"limit",
|
|
"offset",
|
|
"total"
|
|
]
|
|
},
|
|
"RefreshRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"refreshToken": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"AuthTokenResponse": {
|
|
"type": "object",
|
|
"description": "JWT token pair",
|
|
"properties": {
|
|
"accessToken": {
|
|
"type": "string"
|
|
},
|
|
"refreshToken": {
|
|
"type": "string"
|
|
},
|
|
"displayName": {
|
|
"type": "string"
|
|
},
|
|
"idToken": {
|
|
"type": "string",
|
|
"description": "OIDC id_token for end-session logout (only present after OIDC login)"
|
|
}
|
|
},
|
|
"required": [
|
|
"accessToken",
|
|
"displayName",
|
|
"refreshToken"
|
|
]
|
|
},
|
|
"CallbackRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"redirectUri": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"LoginRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"AgentRefreshRequest": {
|
|
"type": "object",
|
|
"description": "Agent token refresh request",
|
|
"properties": {
|
|
"refreshToken": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"refreshToken"
|
|
]
|
|
},
|
|
"AgentRefreshResponse": {
|
|
"type": "object",
|
|
"description": "Refreshed access and refresh tokens",
|
|
"properties": {
|
|
"accessToken": {
|
|
"type": "string"
|
|
},
|
|
"refreshToken": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"accessToken",
|
|
"refreshToken"
|
|
]
|
|
},
|
|
"CommandRequest": {
|
|
"type": "object",
|
|
"description": "Command to send to agent(s)",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Command type: config-update, deep-trace, or replay"
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"description": "Command payload JSON"
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"CommandSingleResponse": {
|
|
"type": "object",
|
|
"description": "Result of sending a command to a single agent",
|
|
"properties": {
|
|
"commandId": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"commandId",
|
|
"status"
|
|
]
|
|
},
|
|
"AgentRegistrationRequest": {
|
|
"type": "object",
|
|
"description": "Agent registration payload",
|
|
"properties": {
|
|
"agentId": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"group": {
|
|
"type": "string",
|
|
"default": "default"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"routeIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"capabilities": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"agentId",
|
|
"name"
|
|
]
|
|
},
|
|
"AgentRegistrationResponse": {
|
|
"type": "object",
|
|
"description": "Agent registration result with JWT tokens and SSE endpoint",
|
|
"properties": {
|
|
"agentId": {
|
|
"type": "string"
|
|
},
|
|
"sseEndpoint": {
|
|
"type": "string"
|
|
},
|
|
"heartbeatIntervalMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"serverPublicKey": {
|
|
"type": "string"
|
|
},
|
|
"accessToken": {
|
|
"type": "string"
|
|
},
|
|
"refreshToken": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"accessToken",
|
|
"agentId",
|
|
"refreshToken",
|
|
"serverPublicKey",
|
|
"sseEndpoint"
|
|
]
|
|
},
|
|
"CommandBroadcastResponse": {
|
|
"type": "object",
|
|
"description": "Result of broadcasting a command to multiple agents",
|
|
"properties": {
|
|
"commandIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"targetCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
},
|
|
"required": [
|
|
"commandIds"
|
|
]
|
|
},
|
|
"CreateRoleRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"OidcTestResult": {
|
|
"type": "object",
|
|
"description": "OIDC provider connectivity test result",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"authorizationEndpoint": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"authorizationEndpoint",
|
|
"status"
|
|
]
|
|
},
|
|
"CreateGroupRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"parentGroupId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
},
|
|
"ExecutionStats": {
|
|
"type": "object",
|
|
"properties": {
|
|
"totalCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"failedCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"avgDurationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"p99LatencyMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"activeCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"totalToday": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"prevTotalCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"prevFailedCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"prevAvgDurationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"prevP99LatencyMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"required": [
|
|
"activeCount",
|
|
"avgDurationMs",
|
|
"failedCount",
|
|
"p99LatencyMs",
|
|
"prevAvgDurationMs",
|
|
"prevFailedCount",
|
|
"prevP99LatencyMs",
|
|
"prevTotalCount",
|
|
"totalCount",
|
|
"totalToday"
|
|
]
|
|
},
|
|
"StatsTimeseries": {
|
|
"type": "object",
|
|
"properties": {
|
|
"buckets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TimeseriesBucket"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"buckets"
|
|
]
|
|
},
|
|
"TimeseriesBucket": {
|
|
"type": "object",
|
|
"properties": {
|
|
"time": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"totalCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"failedCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"avgDurationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"p99DurationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"activeCount": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
},
|
|
"required": [
|
|
"activeCount",
|
|
"avgDurationMs",
|
|
"failedCount",
|
|
"p99DurationMs",
|
|
"time",
|
|
"totalCount"
|
|
]
|
|
},
|
|
"ExecutionDetail": {
|
|
"type": "object",
|
|
"properties": {
|
|
"executionId": {
|
|
"type": "string"
|
|
},
|
|
"routeId": {
|
|
"type": "string"
|
|
},
|
|
"agentId": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"startTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"endTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"durationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"correlationId": {
|
|
"type": "string"
|
|
},
|
|
"exchangeId": {
|
|
"type": "string"
|
|
},
|
|
"errorMessage": {
|
|
"type": "string"
|
|
},
|
|
"errorStackTrace": {
|
|
"type": "string"
|
|
},
|
|
"diagramContentHash": {
|
|
"type": "string"
|
|
},
|
|
"processors": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProcessorNode"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"agentId",
|
|
"correlationId",
|
|
"diagramContentHash",
|
|
"durationMs",
|
|
"endTime",
|
|
"errorMessage",
|
|
"errorStackTrace",
|
|
"exchangeId",
|
|
"executionId",
|
|
"processors",
|
|
"routeId",
|
|
"startTime",
|
|
"status"
|
|
]
|
|
},
|
|
"ProcessorNode": {
|
|
"type": "object",
|
|
"properties": {
|
|
"processorId": {
|
|
"type": "string"
|
|
},
|
|
"processorType": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"startTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"endTime": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"durationMs": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"diagramNodeId": {
|
|
"type": "string"
|
|
},
|
|
"errorMessage": {
|
|
"type": "string"
|
|
},
|
|
"errorStackTrace": {
|
|
"type": "string"
|
|
},
|
|
"children": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProcessorNode"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"children",
|
|
"diagramNodeId",
|
|
"durationMs",
|
|
"endTime",
|
|
"errorMessage",
|
|
"errorStackTrace",
|
|
"processorId",
|
|
"processorType",
|
|
"startTime",
|
|
"status"
|
|
]
|
|
},
|
|
"DiagramLayout": {
|
|
"type": "object",
|
|
"properties": {
|
|
"width": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"height": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PositionedNode"
|
|
}
|
|
},
|
|
"edges": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PositionedEdge"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PositionedEdge": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sourceId": {
|
|
"type": "string"
|
|
},
|
|
"targetId": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"points": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number",
|
|
"format": "double"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PositionedNode": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"x": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"y": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"width": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"height": {
|
|
"type": "number",
|
|
"format": "double"
|
|
},
|
|
"children": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/PositionedNode"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"OidcPublicConfigResponse": {
|
|
"type": "object",
|
|
"description": "OIDC configuration for SPA login flow",
|
|
"properties": {
|
|
"issuer": {
|
|
"type": "string"
|
|
},
|
|
"clientId": {
|
|
"type": "string"
|
|
},
|
|
"authorizationEndpoint": {
|
|
"type": "string"
|
|
},
|
|
"endSessionEndpoint": {
|
|
"type": "string",
|
|
"description": "Present if the provider supports RP-initiated logout"
|
|
}
|
|
},
|
|
"required": [
|
|
"authorizationEndpoint",
|
|
"clientId",
|
|
"issuer"
|
|
]
|
|
},
|
|
"AgentInstanceResponse": {
|
|
"type": "object",
|
|
"description": "Agent instance summary",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"group": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"routeIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"registeredAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"lastHeartbeat": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
"required": [
|
|
"group",
|
|
"id",
|
|
"lastHeartbeat",
|
|
"name",
|
|
"registeredAt",
|
|
"routeIds",
|
|
"status"
|
|
]
|
|
},
|
|
"SseEmitter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"timeout": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"GroupSummary": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"RoleSummary": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"system": {
|
|
"type": "boolean"
|
|
},
|
|
"source": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"UserDetail": {
|
|
"type": "object",
|
|
"properties": {
|
|
"userId": {
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"type": "string"
|
|
},
|
|
"email": {
|
|
"type": "string"
|
|
},
|
|
"displayName": {
|
|
"type": "string"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"directRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleSummary"
|
|
}
|
|
},
|
|
"directGroups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroupSummary"
|
|
}
|
|
},
|
|
"effectiveRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleSummary"
|
|
}
|
|
},
|
|
"effectiveGroups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroupSummary"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"RoleDetail": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"type": "string"
|
|
},
|
|
"system": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"assignedGroups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroupSummary"
|
|
}
|
|
},
|
|
"directUsers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserSummary"
|
|
}
|
|
},
|
|
"effectivePrincipals": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserSummary"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"UserSummary": {
|
|
"type": "object",
|
|
"properties": {
|
|
"userId": {
|
|
"type": "string"
|
|
},
|
|
"displayName": {
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"RbacStats": {
|
|
"type": "object",
|
|
"properties": {
|
|
"userCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"activeUserCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"groupCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"maxGroupDepth": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"roleCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"OpenSearchStatusResponse": {
|
|
"type": "object",
|
|
"description": "OpenSearch cluster status",
|
|
"properties": {
|
|
"reachable": {
|
|
"type": "boolean",
|
|
"description": "Whether the cluster is reachable"
|
|
},
|
|
"clusterHealth": {
|
|
"type": "string",
|
|
"description": "Cluster health status (GREEN, YELLOW, RED)"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "OpenSearch version"
|
|
},
|
|
"nodeCount": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of nodes in the cluster"
|
|
},
|
|
"host": {
|
|
"type": "string",
|
|
"description": "OpenSearch host"
|
|
}
|
|
}
|
|
},
|
|
"PipelineStatsResponse": {
|
|
"type": "object",
|
|
"description": "Search indexing pipeline statistics",
|
|
"properties": {
|
|
"queueDepth": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Current queue depth"
|
|
},
|
|
"maxQueueSize": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Maximum queue size"
|
|
},
|
|
"failedCount": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Number of failed indexing operations"
|
|
},
|
|
"indexedCount": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Number of successfully indexed documents"
|
|
},
|
|
"debounceMs": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Debounce interval in milliseconds"
|
|
},
|
|
"indexingRate": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Current indexing rate (docs/sec)"
|
|
},
|
|
"lastIndexedAt": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "Timestamp of last indexed document"
|
|
}
|
|
}
|
|
},
|
|
"PerformanceResponse": {
|
|
"type": "object",
|
|
"description": "OpenSearch performance metrics",
|
|
"properties": {
|
|
"queryCacheHitRate": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Query cache hit rate (0.0-1.0)"
|
|
},
|
|
"requestCacheHitRate": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Request cache hit rate (0.0-1.0)"
|
|
},
|
|
"searchLatencyMs": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Average search latency in milliseconds"
|
|
},
|
|
"indexingLatencyMs": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Average indexing latency in milliseconds"
|
|
},
|
|
"jvmHeapUsedBytes": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "JVM heap used in bytes"
|
|
},
|
|
"jvmHeapMaxBytes": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "JVM heap max in bytes"
|
|
}
|
|
}
|
|
},
|
|
"IndexInfoResponse": {
|
|
"type": "object",
|
|
"description": "OpenSearch index information",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Index name"
|
|
},
|
|
"docCount": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Document count"
|
|
},
|
|
"size": {
|
|
"type": "string",
|
|
"description": "Human-readable index size"
|
|
},
|
|
"sizeBytes": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Index size in bytes"
|
|
},
|
|
"health": {
|
|
"type": "string",
|
|
"description": "Index health status"
|
|
},
|
|
"primaryShards": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of primary shards"
|
|
},
|
|
"replicaShards": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of replica shards"
|
|
}
|
|
}
|
|
},
|
|
"IndicesPageResponse": {
|
|
"type": "object",
|
|
"description": "Paginated list of OpenSearch indices",
|
|
"properties": {
|
|
"indices": {
|
|
"type": "array",
|
|
"description": "Index list for current page",
|
|
"items": {
|
|
"$ref": "#/components/schemas/IndexInfoResponse"
|
|
}
|
|
},
|
|
"totalIndices": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Total number of indices"
|
|
},
|
|
"totalDocs": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Total document count across all indices"
|
|
},
|
|
"totalSize": {
|
|
"type": "string",
|
|
"description": "Human-readable total size"
|
|
},
|
|
"page": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Current page number (0-based)"
|
|
},
|
|
"pageSize": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Page size"
|
|
},
|
|
"totalPages": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Total number of pages"
|
|
}
|
|
}
|
|
},
|
|
"GroupDetail": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"parentGroupId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"directRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleSummary"
|
|
}
|
|
},
|
|
"effectiveRoles": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoleSummary"
|
|
}
|
|
},
|
|
"members": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserSummary"
|
|
}
|
|
},
|
|
"childGroups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroupSummary"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"TableSizeResponse": {
|
|
"type": "object",
|
|
"description": "Table size and row count information",
|
|
"properties": {
|
|
"tableName": {
|
|
"type": "string",
|
|
"description": "Table name"
|
|
},
|
|
"rowCount": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Approximate row count"
|
|
},
|
|
"dataSize": {
|
|
"type": "string",
|
|
"description": "Human-readable data size"
|
|
},
|
|
"indexSize": {
|
|
"type": "string",
|
|
"description": "Human-readable index size"
|
|
},
|
|
"dataSizeBytes": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Data size in bytes"
|
|
},
|
|
"indexSizeBytes": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Index size in bytes"
|
|
}
|
|
}
|
|
},
|
|
"DatabaseStatusResponse": {
|
|
"type": "object",
|
|
"description": "Database connection and version status",
|
|
"properties": {
|
|
"connected": {
|
|
"type": "boolean",
|
|
"description": "Whether the database is reachable"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "PostgreSQL version string"
|
|
},
|
|
"host": {
|
|
"type": "string",
|
|
"description": "Database host"
|
|
},
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "Current schema search path"
|
|
},
|
|
"timescaleDb": {
|
|
"type": "boolean",
|
|
"description": "Whether TimescaleDB extension is available"
|
|
}
|
|
}
|
|
},
|
|
"ActiveQueryResponse": {
|
|
"type": "object",
|
|
"description": "Currently running database query",
|
|
"properties": {
|
|
"pid": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Backend process ID"
|
|
},
|
|
"durationSeconds": {
|
|
"type": "number",
|
|
"format": "double",
|
|
"description": "Query duration in seconds"
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"description": "Backend state (active, idle, etc.)"
|
|
},
|
|
"query": {
|
|
"type": "string",
|
|
"description": "SQL query text"
|
|
}
|
|
}
|
|
},
|
|
"ConnectionPoolResponse": {
|
|
"type": "object",
|
|
"description": "HikariCP connection pool statistics",
|
|
"properties": {
|
|
"activeConnections": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of currently active connections"
|
|
},
|
|
"idleConnections": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of idle connections"
|
|
},
|
|
"pendingThreads": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Number of threads waiting for a connection"
|
|
},
|
|
"maxWaitMs": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Maximum wait time in milliseconds"
|
|
},
|
|
"maxPoolSize": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Maximum pool size"
|
|
}
|
|
}
|
|
},
|
|
"AuditLogPageResponse": {
|
|
"type": "object",
|
|
"description": "Paginated audit log entries",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"description": "Audit log entries",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AuditRecord"
|
|
}
|
|
},
|
|
"totalCount": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"description": "Total number of matching entries"
|
|
},
|
|
"page": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Current page number (0-based)"
|
|
},
|
|
"pageSize": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Page size"
|
|
},
|
|
"totalPages": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"description": "Total number of pages"
|
|
}
|
|
}
|
|
},
|
|
"AuditRecord": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"enum": [
|
|
"INFRA",
|
|
"AUTH",
|
|
"USER_MGMT",
|
|
"CONFIG",
|
|
"RBAC"
|
|
]
|
|
},
|
|
"target": {
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"result": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SUCCESS",
|
|
"FAILURE"
|
|
]
|
|
},
|
|
"ipAddress": {
|
|
"type": "string"
|
|
},
|
|
"userAgent": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"bearer": {
|
|
"type": "http",
|
|
"scheme": "bearer",
|
|
"bearerFormat": "JWT"
|
|
}
|
|
}
|
|
}
|
|
} |