Files
cameleer-server/ui/src/api/openapi.json

1071 lines
25 KiB
JSON
Raw Normal View History

{
"openapi": "3.1.0",
"info": {
"title": "OpenAPI definition",
"version": "v0"
},
"servers": [
{
"url": "http://192.168.50.86:30081",
"description": "Generated server url"
}
],
"tags": [
{
"name": "Agent SSE",
"description": "Server-Sent Events endpoint for agent communication"
},
{
"name": "Agent Commands",
"description": "Command push endpoints for agent communication"
},
{
"name": "Agent Management",
"description": "Agent registration and lifecycle endpoints"
},
{
"name": "Ingestion",
"description": "Data ingestion endpoints"
},
{
"name": "Diagrams",
"description": "Diagram rendering endpoints"
},
{
"name": "Detail",
"description": "Execution detail and processor snapshot endpoints"
},
{
"name": "Search",
"description": "Transaction search endpoints"
}
],
"paths": {
"/api/v1/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": "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
}
}
],
"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"
}
}
}
}
}
}
},
"/api/v1/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"
}
}
}
},
"/api/v1/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"
},
"503": {
"description": "Buffer full, retry later"
}
}
}
},
"/api/v1/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"
},
"503": {
"description": "Buffer full, retry later"
}
}
}
},
"/api/v1/auth/refresh": {
"post": {
"tags": [
"ui-auth-controller"
],
"operationId": "refresh",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefreshRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v1/auth/login": {
"post": {
"tags": [
"ui-auth-controller"
],
"operationId": "login",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v1/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": {
"type": "string"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "New access token issued",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"description": "Invalid or expired refresh token",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"404": {
"description": "Agent not found",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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"
}
}
}
},
"/api/v1/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": {
"type": "string"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Command accepted",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"404": {
"description": "Agent not registered",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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"
}
}
}
},
"/api/v1/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": {
"type": "string"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Agent registered successfully",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "Invalid registration payload",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"description": "Missing or invalid bootstrap token",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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": {
"type": "string"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Commands accepted",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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": {
"type": "string"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Commands accepted",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ExecutionDetail"
}
}
}
}
}
}
},
"/api/v1/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": "OK",
"content": {
"*/*": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
}
}
},
"/api/v1/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": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"404": {
"description": "Diagram not found",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v1/agents": {
"get": {
"tags": [
"Agent Management"
],
"summary": "List all agents",
"description": "Returns all registered agents, optionally filtered by status",
"operationId": "listAgents",
"parameters": [
{
"name": "status",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Agent list returned",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
},
"400": {
"description": "Invalid status filter",
"content": {
"*/*": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v1/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"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"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"
},
"offset": {
"type": "integer",
"format": "int32"
},
"limit": {
"type": "integer",
"format": "int32"
}
}
},
"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"
}
}
},
"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"
}
}
},
"RefreshRequest": {
"type": "object",
"properties": {
"refreshToken": {
"type": "string"
}
}
},
"LoginRequest": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"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"
}
}
}
},
"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"
}
}
},
"SseEmitter": {
"type": "object",
"properties": {
"timeout": {
"type": "integer",
"format": "int64"
}
}
}
}
}
}