873 lines
22 KiB
JSON
873 lines
22 KiB
JSON
{
|
|
"openrpc": "1.2.6",
|
|
"info": {
|
|
"version": "1.0.0",
|
|
"title": "Zinit JSON-RPC API",
|
|
"description": "JSON-RPC 2.0 API for controlling and querying Zinit services",
|
|
"license": {
|
|
"name": "MIT"
|
|
}
|
|
},
|
|
"servers": [
|
|
{
|
|
"name": "Unix Socket",
|
|
"url": "unix:///tmp/zinit.sock"
|
|
}
|
|
],
|
|
"methods": [
|
|
{
|
|
"name": "rpc_discover",
|
|
"description": "Returns the OpenRPC specification for the API",
|
|
"params": [],
|
|
"result": {
|
|
"name": "OpenRPCSpec",
|
|
"description": "The OpenRPC specification",
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Get API specification",
|
|
"params": [],
|
|
"result": {
|
|
"name": "OpenRPCSpecResult",
|
|
"value": {
|
|
"openrpc": "1.2.6",
|
|
"info": {
|
|
"version": "1.0.0",
|
|
"title": "Zinit JSON-RPC API"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_list",
|
|
"description": "Lists all services managed by Zinit",
|
|
"params": [],
|
|
"result": {
|
|
"name": "ServiceList",
|
|
"description": "A map of service names to their current states",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"description": "Service state (Running, Success, Error, etc.)"
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "List all services",
|
|
"params": [],
|
|
"result": {
|
|
"name": "ServiceListResult",
|
|
"value": {
|
|
"service1": "Running",
|
|
"service2": "Success",
|
|
"service3": "Error"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_status",
|
|
"description": "Shows detailed status information for a specific service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ServiceStatus",
|
|
"description": "Detailed status information for the service",
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Service name"
|
|
},
|
|
"pid": {
|
|
"type": "integer",
|
|
"description": "Process ID of the running service (if running)"
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"description": "Current state of the service (Running, Success, Error, etc.)"
|
|
},
|
|
"target": {
|
|
"type": "string",
|
|
"description": "Target state of the service (Up, Down)"
|
|
},
|
|
"after": {
|
|
"type": "object",
|
|
"description": "Dependencies of the service and their states",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"description": "State of the dependency"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Get status of redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ServiceStatusResult",
|
|
"value": {
|
|
"name": "redis",
|
|
"pid": 1234,
|
|
"state": "Running",
|
|
"target": "Up",
|
|
"after": {
|
|
"dependency1": "Success",
|
|
"dependency2": "Running"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_start",
|
|
"description": "Starts a service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to start",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StartResult",
|
|
"description": "Result of the start operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Start redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StartResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_stop",
|
|
"description": "Stops a service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to stop",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StopResult",
|
|
"description": "Result of the stop operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Stop redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StopResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
},
|
|
{
|
|
"code": -32003,
|
|
"message": "Service is down",
|
|
"data": "service \"redis\" is down"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_monitor",
|
|
"description": "Starts monitoring a service. The service configuration is loaded from the config directory.",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to monitor",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "MonitorResult",
|
|
"description": "Result of the monitor operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Monitor redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "MonitorResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32001,
|
|
"message": "Service already monitored",
|
|
"data": "service \"redis\" already monitored"
|
|
},
|
|
{
|
|
"code": -32005,
|
|
"message": "Config error",
|
|
"data": "failed to load service configuration"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_forget",
|
|
"description": "Stops monitoring a service. You can only forget a stopped service.",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to forget",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ForgetResult",
|
|
"description": "Result of the forget operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Forget redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ForgetResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
},
|
|
{
|
|
"code": -32002,
|
|
"message": "Service is up",
|
|
"data": "service \"redis\" is up"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_kill",
|
|
"description": "Sends a signal to a running service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to send the signal to",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "signal",
|
|
"description": "The signal to send (e.g., SIGTERM, SIGKILL)",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "KillResult",
|
|
"description": "Result of the kill operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Send SIGTERM to redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
},
|
|
{
|
|
"name": "signal",
|
|
"value": "SIGTERM"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "KillResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
},
|
|
{
|
|
"code": -32003,
|
|
"message": "Service is down",
|
|
"data": "service \"redis\" is down"
|
|
},
|
|
{
|
|
"code": -32004,
|
|
"message": "Invalid signal",
|
|
"data": "invalid signal: INVALID"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "system_shutdown",
|
|
"description": "Stops all services and powers off the system",
|
|
"params": [],
|
|
"result": {
|
|
"name": "ShutdownResult",
|
|
"description": "Result of the shutdown operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Shutdown the system",
|
|
"params": [],
|
|
"result": {
|
|
"name": "ShutdownResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32006,
|
|
"message": "Shutting down",
|
|
"data": "system is already shutting down"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "system_reboot",
|
|
"description": "Stops all services and reboots the system",
|
|
"params": [],
|
|
"result": {
|
|
"name": "RebootResult",
|
|
"description": "Result of the reboot operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Reboot the system",
|
|
"params": [],
|
|
"result": {
|
|
"name": "RebootResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32006,
|
|
"message": "Shutting down",
|
|
"data": "system is already shutting down"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_create",
|
|
"description": "Creates a new service configuration file",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to create",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "content",
|
|
"description": "The service configuration content",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"exec": {
|
|
"type": "string",
|
|
"description": "Command to run"
|
|
},
|
|
"oneshot": {
|
|
"type": "boolean",
|
|
"description": "Whether the service should be restarted"
|
|
},
|
|
"after": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Services that must be running before this one starts"
|
|
},
|
|
"log": {
|
|
"type": "string",
|
|
"enum": ["null", "ring", "stdout"],
|
|
"description": "How to handle service output"
|
|
},
|
|
"env": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "Environment variables for the service"
|
|
},
|
|
"shutdown_timeout": {
|
|
"type": "integer",
|
|
"description": "Maximum time to wait for service to stop during shutdown"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "CreateServiceResult",
|
|
"description": "Result of the create operation",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"errors": [
|
|
{
|
|
"code": -32007,
|
|
"message": "Service already exists",
|
|
"data": "Service 'name' already exists"
|
|
},
|
|
{
|
|
"code": -32008,
|
|
"message": "Service file error",
|
|
"data": "Failed to create service file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_delete",
|
|
"description": "Deletes a service configuration file",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to delete",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "DeleteServiceResult",
|
|
"description": "Result of the delete operation",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "Service 'name' not found"
|
|
},
|
|
{
|
|
"code": -32008,
|
|
"message": "Service file error",
|
|
"data": "Failed to delete service file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_get",
|
|
"description": "Gets a service configuration file",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to get",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "GetServiceResult",
|
|
"description": "The service configuration",
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "Service 'name' not found"
|
|
},
|
|
{
|
|
"code": -32008,
|
|
"message": "Service file error",
|
|
"data": "Failed to read service file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "service_stats",
|
|
"description": "Get memory and CPU usage statistics for a service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "The name of the service to get stats for",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ServiceStats",
|
|
"description": "Memory and CPU usage statistics for the service",
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Service name"
|
|
},
|
|
"pid": {
|
|
"type": "integer",
|
|
"description": "Process ID of the service"
|
|
},
|
|
"memory_usage": {
|
|
"type": "integer",
|
|
"description": "Memory usage in bytes"
|
|
},
|
|
"cpu_usage": {
|
|
"type": "number",
|
|
"description": "CPU usage as a percentage (0-100)"
|
|
},
|
|
"children": {
|
|
"type": "array",
|
|
"description": "Stats for child processes",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"pid": {
|
|
"type": "integer",
|
|
"description": "Process ID of the child process"
|
|
},
|
|
"memory_usage": {
|
|
"type": "integer",
|
|
"description": "Memory usage in bytes"
|
|
},
|
|
"cpu_usage": {
|
|
"type": "number",
|
|
"description": "CPU usage as a percentage (0-100)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Get stats for redis service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "ServiceStatsResult",
|
|
"value": {
|
|
"name": "redis",
|
|
"pid": 1234,
|
|
"memory_usage": 10485760,
|
|
"cpu_usage": 2.5,
|
|
"children": [
|
|
{
|
|
"pid": 1235,
|
|
"memory_usage": 5242880,
|
|
"cpu_usage": 1.2
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32000,
|
|
"message": "Service not found",
|
|
"data": "service name \"unknown\" unknown"
|
|
},
|
|
{
|
|
"code": -32003,
|
|
"message": "Service is down",
|
|
"data": "service \"redis\" is down"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "system_start_http_server",
|
|
"description": "Start an HTTP/RPC server at the specified address",
|
|
"params": [
|
|
{
|
|
"name": "address",
|
|
"description": "The network address to bind the server to (e.g., '127.0.0.1:8080')",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StartHttpServerResult",
|
|
"description": "Result of the start HTTP server operation",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Start HTTP server on localhost:8080",
|
|
"params": [
|
|
{
|
|
"name": "address",
|
|
"value": "127.0.0.1:8080"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "StartHttpServerResult",
|
|
"value": "HTTP server started at 127.0.0.1:8080"
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32602,
|
|
"message": "Invalid address",
|
|
"data": "Invalid network address format"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "system_stop_http_server",
|
|
"description": "Stop the HTTP/RPC server if running",
|
|
"params": [],
|
|
"result": {
|
|
"name": "StopHttpServerResult",
|
|
"description": "Result of the stop HTTP server operation",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Stop the HTTP server",
|
|
"params": [],
|
|
"result": {
|
|
"name": "StopHttpServerResult",
|
|
"value": null
|
|
}
|
|
}
|
|
],
|
|
"errors": [
|
|
{
|
|
"code": -32602,
|
|
"message": "Server not running",
|
|
"data": "No HTTP server is currently running"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "stream_currentLogs",
|
|
"description": "Get current logs from zinit and monitored services",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "Optional service name filter. If provided, only logs from this service will be returned",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "LogsResult",
|
|
"description": "Array of log strings",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Get all logs",
|
|
"params": [],
|
|
"result": {
|
|
"name": "LogsResult",
|
|
"value": [
|
|
"2023-01-01T12:00:00 redis: Starting service",
|
|
"2023-01-01T12:00:01 nginx: Starting service"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "Get logs for a specific service",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "LogsResult",
|
|
"value": [
|
|
"2023-01-01T12:00:00 redis: Starting service",
|
|
"2023-01-01T12:00:02 redis: Service started"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "stream_subscribeLogs",
|
|
"description": "Subscribe to log messages generated by zinit and monitored services",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"description": "Optional service name filter. If provided, only logs from this service will be returned",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "LogSubscription",
|
|
"description": "A subscription to log messages",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"examples": [
|
|
{
|
|
"name": "Subscribe to all logs",
|
|
"params": [],
|
|
"result": {
|
|
"name": "LogSubscription",
|
|
"value": "2023-01-01T12:00:00 redis: Service started"
|
|
}
|
|
},
|
|
{
|
|
"name": "Subscribe to filtered logs",
|
|
"params": [
|
|
{
|
|
"name": "name",
|
|
"value": "redis"
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "LogSubscription",
|
|
"value": "2023-01-01T12:00:00 redis: Service started"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
} |