mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-01-15 17:21:46 +01:00
2859 lines
100 KiB
JSON
2859 lines
100 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "API for batch job control.",
|
|
"title": "ClusterCockpit REST API",
|
|
"contact": {
|
|
"name": "ClusterCockpit Project",
|
|
"url": "https://github.com/ClusterCockpit",
|
|
"email": "support@clustercockpit.org"
|
|
},
|
|
"license": {
|
|
"name": "MIT License",
|
|
"url": "https://opensource.org/licenses/MIT"
|
|
},
|
|
"version": "1.0.0"
|
|
},
|
|
"host": "localhost:8080",
|
|
"paths": {
|
|
"/api/clusters/": {
|
|
"get": {
|
|
"description": "Get a list of all cluster configs. Specific cluster can be requested using query parameter.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Cluster query"
|
|
],
|
|
"summary": "Lists all cluster configs",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Job Cluster",
|
|
"name": "cluster",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Array of clusters",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetClustersAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/": {
|
|
"get": {
|
|
"description": "Get a list of all jobs. Filters can be applied using query parameters.\nNumber of results can be limited by page. Results are sorted by descending startTime.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job query"
|
|
],
|
|
"summary": "Lists all jobs",
|
|
"parameters": [
|
|
{
|
|
"enum": [
|
|
"running",
|
|
"completed",
|
|
"failed",
|
|
"cancelled",
|
|
"stopped",
|
|
"timeout"
|
|
],
|
|
"type": "string",
|
|
"description": "Job State",
|
|
"name": "state",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Job Cluster",
|
|
"name": "cluster",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Syntax: '$from-$to', as unix epoch timestamps in seconds",
|
|
"name": "start-time",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Items per page (Default: 25)",
|
|
"name": "items-per-page",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Page Number (Default: 1)",
|
|
"name": "page",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"description": "Include metadata (e.g. jobScript) in response",
|
|
"name": "with-metadata",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job array and page info",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetJobsAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/delete_job/": {
|
|
"delete": {
|
|
"description": "Job to delete is specified by request body. All fields are required in this case.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"description": "All fields required",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DeleteJobAPIRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DefaultAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/delete_job/{id}": {
|
|
"delete": {
|
|
"description": "Job to remove is specified by database ID. This will not remove the job from the job archive.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Database ID of Job",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DefaultAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/delete_job_before/{ts}": {
|
|
"delete": {
|
|
"description": "Remove all jobs with start time before timestamp. The jobs will not be removed from the job archive.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Unix epoch timestamp",
|
|
"name": "ts",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"description": "Omit jobs with tags from deletion",
|
|
"name": "omit-tagged",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DefaultAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/edit_meta/{id}": {
|
|
"post": {
|
|
"description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Edit meta-data json",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job Database ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Kay value pair to add",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.EditMetaRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Updated job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/start_job/": {
|
|
"post": {
|
|
"description": "Job specified in request body will be saved to database as \"running\" with new DB ID.\nJob specifications follow the 'Job' scheme, API will fail to execute if requirements are not met.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Adds a new job as \"running\"",
|
|
"parameters": [
|
|
{
|
|
"description": "Job to add",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Job added successfully",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DefaultAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: The combination of jobId, clusterId and startTime does already exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/stop_job/": {
|
|
"post": {
|
|
"description": "Job to stop is specified by request body. All fields are required in this case.\nReturns full job resource information according to 'Job' scheme.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Marks job as completed and triggers archiving",
|
|
"parameters": [
|
|
{
|
|
"description": "All fields required",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.StopJobAPIRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: job has already been stopped",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/tag_job/{id}": {
|
|
"post": {
|
|
"description": "Adds tag(s) to a job specified by DB ID. Name and Type of Tag(s) can be chosen freely.\nTag Scope for frontend visibility will default to \"global\" if none entered, other options: \"admin\" or specific username.\nIf tagged job is already finished: Tag will be written directly to respective archive files.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Adds one or more tags to a job",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job Database ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Array of tag-objects to add",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.APITag"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Updated job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job or tag does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/jobs/{id}": {
|
|
"get": {
|
|
"description": "Job to get is specified by database ID\nReturns full job resource information according to 'Job' scheme and all metrics according to 'JobData'.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job query"
|
|
],
|
|
"summary": "Get job meta and optional all metric data",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Database ID of Job",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"description": "Include all available metrics",
|
|
"name": "all-metrics",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetJobAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"description": "Job to get is specified by database ID\nReturns full job resource information according to 'Job' scheme and all metrics according to 'JobData'.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job query"
|
|
],
|
|
"summary": "Get job meta and configurable metric data",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Database ID of Job",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Array of metric names",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetJobAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/nodestats/": {
|
|
"post": {
|
|
"description": "Returns a JSON-encoded list of users.\nRequired query-parameter defines if all users or only users with additional special roles are returned.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Nodestates"
|
|
],
|
|
"summary": "Deliver updated Slurm node states",
|
|
"parameters": [
|
|
{
|
|
"description": "Request body containing nodes and their states",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.UpdateNodeStatesRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DefaultAPIResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/user/{id}": {
|
|
"post": {
|
|
"description": "Allows admins to add/remove roles and projects for a user",
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Update user roles and projects",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Username",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Role to add",
|
|
"name": "add-role",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Role to remove",
|
|
"name": "remove-role",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Project to add",
|
|
"name": "add-project",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Project to remove",
|
|
"name": "remove-project",
|
|
"in": "formData"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/users/": {
|
|
"get": {
|
|
"description": "Returns a JSON-encoded list of users.\nRequired query-parameter defines if all users or only users with additional special roles are returned.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Returns a list of users",
|
|
"parameters": [
|
|
{
|
|
"type": "boolean",
|
|
"description": "If returned list should contain all users or only users with additional special roles",
|
|
"name": "not-just-user",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of users returned successfully",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.APIReturnedUser"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"description": "Creates a new user with specified credentials and role",
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Create a new user",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Username",
|
|
"name": "username",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Password (not required for API users)",
|
|
"name": "password",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "User role",
|
|
"name": "role",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Full name",
|
|
"name": "name",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Email address",
|
|
"name": "email",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Project (required for managers)",
|
|
"name": "project",
|
|
"in": "formData"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Deletes a user from the system",
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Delete a user",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Username to delete",
|
|
"name": "username",
|
|
"in": "formData",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/configuration/": {
|
|
"post": {
|
|
"description": "Updates a user's configuration key-value pair.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"Frontend"
|
|
],
|
|
"summary": "Update user configuration",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Configuration key",
|
|
"name": "key",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Configuration value",
|
|
"name": "value",
|
|
"in": "formData",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "success",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/debug/": {
|
|
"post": {
|
|
"description": "This endpoint allows the users to print the content of",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"debug"
|
|
],
|
|
"summary": "Debug endpoint",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Selector",
|
|
"name": "selector",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Debug dump",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/free/": {
|
|
"post": {
|
|
"description": "This endpoint allows the users to free the Buffers from the",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"free"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "up to timestamp",
|
|
"name": "to",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "ok",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/healthcheck/": {
|
|
"get": {
|
|
"description": "This endpoint allows the users to check if a node is healthy",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"healthcheck"
|
|
],
|
|
"summary": "HealthCheck endpoint",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Selector",
|
|
"name": "selector",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Debug dump",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/jobs/tag_job/{id}": {
|
|
"delete": {
|
|
"description": "Removes tag(s) from a job specified by DB ID. Name and Type of Tag(s) must match.\nTag Scope is required for matching, options: \"global\", \"admin\". Private tags can not be deleted via API.\nIf tagged job is already finished: Tag will be removed from respective archive files.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Removes one or more tags from a job",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job Database ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Array of tag-objects to remove",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.APITag"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Updated job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job or tag does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/jwt/": {
|
|
"get": {
|
|
"description": "Generates a JWT token for a user. Admins can generate tokens for any user, regular users only for themselves.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"Frontend"
|
|
],
|
|
"summary": "Generate JWT token",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Username to generate JWT for",
|
|
"name": "username",
|
|
"in": "formData",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "JWT token",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "User Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/machine_state/{cluster}/{host}": {
|
|
"get": {
|
|
"description": "Retrieves stored machine state data for a specific cluster node. Validates cluster and host names to prevent path traversal.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Machine State"
|
|
],
|
|
"summary": "Retrieve machine state",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Cluster name",
|
|
"name": "cluster",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Host name",
|
|
"name": "host",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Machine state JSON data",
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Machine state not enabled or file not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"description": "Stores machine state data for a specific cluster node. Validates cluster and host names to prevent path traversal.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"Machine State"
|
|
],
|
|
"summary": "Store machine state",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Cluster name",
|
|
"name": "cluster",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Host name",
|
|
"name": "host",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created"
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Machine state not enabled",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/notice/": {
|
|
"post": {
|
|
"description": "Updates the notice.txt file content. Only admins are allowed. Content is limited to 10000 characters.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"Config"
|
|
],
|
|
"summary": "Update system notice",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "New notice content (max 10000 characters)",
|
|
"name": "new-content",
|
|
"in": "formData",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Update Notice Content Success",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/roles/": {
|
|
"get": {
|
|
"description": "Returns a list of valid user roles. Only admins are allowed.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Config"
|
|
],
|
|
"summary": "Get available roles",
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of role names",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/tags/": {
|
|
"delete": {
|
|
"description": "Removes tags by type and name. Name and Type of Tag(s) must match.\nTag Scope is required for matching, options: \"global\", \"admin\". Private tags can not be deleted via API.\nTag wills be removed from respective archive files.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"Tag remove"
|
|
],
|
|
"summary": "Removes all tags and job-relations for type:name tuple",
|
|
"parameters": [
|
|
{
|
|
"description": "Array of tag-objects to remove",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.APITag"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success Response",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job or tag does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/write/": {
|
|
"post": {
|
|
"consumes": [
|
|
"text/plain"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "If the lines in the body do not have a cluster tag, use this value instead.",
|
|
"name": "cluster",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "ok",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"api.APIReturnedUser": {
|
|
"type": "object",
|
|
"properties": {
|
|
"email": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"projects": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"roles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"api.APITag": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"description": "Tag Name",
|
|
"type": "string",
|
|
"example": "Testjob"
|
|
},
|
|
"scope": {
|
|
"description": "Tag Scope for Frontend Display",
|
|
"type": "string",
|
|
"example": "global"
|
|
},
|
|
"type": {
|
|
"description": "Tag Type",
|
|
"type": "string",
|
|
"example": "Debug"
|
|
}
|
|
}
|
|
},
|
|
"api.DefaultAPIResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"msg": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"api.DeleteJobAPIRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"jobId"
|
|
],
|
|
"properties": {
|
|
"cluster": {
|
|
"description": "Cluster of job",
|
|
"type": "string",
|
|
"example": "fritz"
|
|
},
|
|
"jobId": {
|
|
"description": "Cluster Job ID of job",
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"startTime": {
|
|
"description": "Start Time of job as epoch",
|
|
"type": "integer",
|
|
"example": 1649723812
|
|
}
|
|
}
|
|
},
|
|
"api.EditMetaRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"key": {
|
|
"type": "string",
|
|
"example": "jobScript"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"example": "bash script"
|
|
}
|
|
}
|
|
},
|
|
"api.ErrorResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"description": "Error Message",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"description": "Statustext of Errorcode",
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"api.GetClustersAPIResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"clusters": {
|
|
"description": "Array of clusters",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Cluster"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"api.GetJobAPIResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.JobMetricWithName"
|
|
}
|
|
},
|
|
"meta": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
}
|
|
},
|
|
"api.GetJobsAPIResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"description": "Number of jobs returned",
|
|
"type": "integer"
|
|
},
|
|
"jobs": {
|
|
"description": "Array of jobs",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"page": {
|
|
"description": "Page id returned",
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"api.JobMetricWithName": {
|
|
"type": "object",
|
|
"properties": {
|
|
"metric": {
|
|
"$ref": "#/definitions/schema.JobMetric"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"scope": {
|
|
"$ref": "#/definitions/schema.MetricScope"
|
|
}
|
|
}
|
|
},
|
|
"api.StopJobAPIRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"jobState",
|
|
"stopTime"
|
|
],
|
|
"properties": {
|
|
"cluster": {
|
|
"type": "string",
|
|
"example": "fritz"
|
|
},
|
|
"jobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"jobState": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.JobState"
|
|
}
|
|
],
|
|
"example": "completed"
|
|
},
|
|
"startTime": {
|
|
"type": "integer",
|
|
"example": 1649723812
|
|
},
|
|
"stopTime": {
|
|
"type": "integer",
|
|
"example": 1649763839
|
|
}
|
|
}
|
|
},
|
|
"api.UpdateNodeStatesRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cluster": {
|
|
"type": "string",
|
|
"example": "fritz"
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.NodePayload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Accelerator": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"description": "Unique identifier for the accelerator (e.g., \"0\", \"1\", \"GPU-0\")",
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"description": "Specific model name (e.g., \"A100\", \"MI100\")",
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"description": "Type of accelerator (e.g., \"Nvidia GPU\", \"AMD GPU\")",
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"schema.Cluster": {
|
|
"type": "object",
|
|
"properties": {
|
|
"metricConfig": {
|
|
"description": "Cluster-wide metric configurations",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.MetricConfig"
|
|
}
|
|
},
|
|
"name": {
|
|
"description": "Unique cluster name (e.g., \"fritz\", \"alex\")",
|
|
"type": "string"
|
|
},
|
|
"subClusters": {
|
|
"description": "Homogeneous partitions within the cluster",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.SubCluster"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Job": {
|
|
"description": "Information of a HPC job.",
|
|
"type": "object",
|
|
"properties": {
|
|
"arrayJobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"cluster": {
|
|
"type": "string",
|
|
"example": "fritz"
|
|
},
|
|
"concurrentJobs": {
|
|
"$ref": "#/definitions/schema.JobLinkResultList"
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 43200
|
|
},
|
|
"energy": {
|
|
"type": "number"
|
|
},
|
|
"energyFootprint": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number",
|
|
"format": "float64"
|
|
}
|
|
},
|
|
"exclusive": {
|
|
"description": "for backwards compatibility",
|
|
"type": "integer",
|
|
"maximum": 2,
|
|
"minimum": 0,
|
|
"example": 1
|
|
},
|
|
"footprint": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number",
|
|
"format": "float64"
|
|
}
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"jobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"jobState": {
|
|
"enum": [
|
|
"boot_fail",
|
|
"cancelled",
|
|
"completed",
|
|
"deadline",
|
|
"failed",
|
|
"node_fail",
|
|
"out-of-memory",
|
|
"pending",
|
|
"preempted",
|
|
"running",
|
|
"suspended",
|
|
"timeout"
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.JobState"
|
|
}
|
|
],
|
|
"example": "completed"
|
|
},
|
|
"metaData": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"monitoringStatus": {
|
|
"type": "integer",
|
|
"maximum": 3,
|
|
"minimum": 0,
|
|
"example": 1
|
|
},
|
|
"numAcc": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 2
|
|
},
|
|
"numHwthreads": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 20
|
|
},
|
|
"numNodes": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 2
|
|
},
|
|
"partition": {
|
|
"type": "string",
|
|
"example": "main"
|
|
},
|
|
"project": {
|
|
"type": "string",
|
|
"example": "abcd200"
|
|
},
|
|
"requestedMemory": {
|
|
"description": "in MB",
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 128000
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Resource"
|
|
}
|
|
},
|
|
"shared": {
|
|
"type": "string",
|
|
"enum": [
|
|
"none",
|
|
"single_user",
|
|
"multi_user"
|
|
]
|
|
},
|
|
"smt": {
|
|
"type": "integer",
|
|
"example": 4
|
|
},
|
|
"startTime": {
|
|
"type": "integer",
|
|
"example": 1649723812
|
|
},
|
|
"statistics": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/schema.JobStatistics"
|
|
}
|
|
},
|
|
"subCluster": {
|
|
"type": "string",
|
|
"example": "main"
|
|
},
|
|
"submitTime": {
|
|
"type": "integer",
|
|
"example": 1649723812
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Tag"
|
|
}
|
|
},
|
|
"user": {
|
|
"type": "string",
|
|
"example": "abcd100h"
|
|
},
|
|
"walltime": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 86400
|
|
}
|
|
}
|
|
},
|
|
"schema.JobLink": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"description": "Internal database ID",
|
|
"type": "integer"
|
|
},
|
|
"jobId": {
|
|
"description": "The job's external job ID",
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"schema.JobLinkResultList": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"description": "Total count of available items",
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"description": "List of job links",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.JobLink"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.JobMetric": {
|
|
"type": "object",
|
|
"properties": {
|
|
"series": {
|
|
"description": "Individual time series data",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Series"
|
|
}
|
|
},
|
|
"statisticsSeries": {
|
|
"description": "Aggregated statistics over time",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.StatsSeries"
|
|
}
|
|
]
|
|
},
|
|
"timestep": {
|
|
"description": "Sampling interval in seconds",
|
|
"type": "integer"
|
|
},
|
|
"unit": {
|
|
"description": "Unit of measurement",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"schema.JobState": {
|
|
"type": "string",
|
|
"enum": [
|
|
"boot_fail",
|
|
"cancelled",
|
|
"completed",
|
|
"deadline",
|
|
"failed",
|
|
"node_fail",
|
|
"out_of_memory",
|
|
"pending",
|
|
"preempted",
|
|
"running",
|
|
"suspended",
|
|
"timeout"
|
|
],
|
|
"x-enum-varnames": [
|
|
"JobStateBootFail",
|
|
"JobStateCancelled",
|
|
"JobStateCompleted",
|
|
"JobStateDeadline",
|
|
"JobStateFailed",
|
|
"JobStateNodeFail",
|
|
"JobStateOutOfMemory",
|
|
"JobStatePending",
|
|
"JobStatePreempted",
|
|
"JobStateRunning",
|
|
"JobStateSuspended",
|
|
"JobStateTimeout"
|
|
]
|
|
},
|
|
"schema.JobStatistics": {
|
|
"description": "Specification for job metric statistics.",
|
|
"type": "object",
|
|
"properties": {
|
|
"avg": {
|
|
"description": "Job metric average",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 2500
|
|
},
|
|
"max": {
|
|
"description": "Job metric maximum",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 3000
|
|
},
|
|
"min": {
|
|
"description": "Job metric minimum",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 2000
|
|
},
|
|
"unit": {
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"aggregation": {
|
|
"description": "Aggregation function (avg, sum, min, max)",
|
|
"type": "string"
|
|
},
|
|
"alert": {
|
|
"description": "Alert threshold (requires attention)",
|
|
"type": "number"
|
|
},
|
|
"caution": {
|
|
"description": "Caution threshold (concerning but not critical)",
|
|
"type": "number"
|
|
},
|
|
"energy": {
|
|
"description": "Energy measurement method",
|
|
"type": "string"
|
|
},
|
|
"footprint": {
|
|
"description": "Footprint category",
|
|
"type": "string"
|
|
},
|
|
"lowerIsBetter": {
|
|
"description": "Whether lower values are better",
|
|
"type": "boolean"
|
|
},
|
|
"name": {
|
|
"description": "Metric name (e.g., \"cpu_load\", \"mem_used\")",
|
|
"type": "string"
|
|
},
|
|
"normal": {
|
|
"description": "Normal/typical value (good performance)",
|
|
"type": "number"
|
|
},
|
|
"peak": {
|
|
"description": "Peak/maximum expected value (best performance)",
|
|
"type": "number"
|
|
},
|
|
"restrict": {
|
|
"description": "Restrict visibility to non user roles",
|
|
"type": "boolean"
|
|
},
|
|
"scope": {
|
|
"description": "Metric scope (node, socket, core, etc.)",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.MetricScope"
|
|
}
|
|
]
|
|
},
|
|
"subClusters": {
|
|
"description": "Subcluster-specific overrides",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.SubClusterConfig"
|
|
}
|
|
},
|
|
"timestep": {
|
|
"description": "Measurement interval in seconds",
|
|
"type": "integer"
|
|
},
|
|
"unit": {
|
|
"description": "Unit of measurement",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricScope": {
|
|
"type": "string",
|
|
"enum": [
|
|
"invalid_scope",
|
|
"node",
|
|
"socket",
|
|
"memoryDomain",
|
|
"core",
|
|
"hwthread",
|
|
"accelerator"
|
|
],
|
|
"x-enum-varnames": [
|
|
"MetricScopeInvalid",
|
|
"MetricScopeNode",
|
|
"MetricScopeSocket",
|
|
"MetricScopeMemoryDomain",
|
|
"MetricScopeCore",
|
|
"MetricScopeHWThread",
|
|
"MetricScopeAccelerator"
|
|
]
|
|
},
|
|
"schema.MetricStatistics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"avg": {
|
|
"description": "Average/mean value",
|
|
"type": "number"
|
|
},
|
|
"max": {
|
|
"description": "Maximum value",
|
|
"type": "number"
|
|
},
|
|
"min": {
|
|
"description": "Minimum value",
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricValue": {
|
|
"type": "object",
|
|
"properties": {
|
|
"unit": {
|
|
"description": "Unit of measurement (e.g., FLOP/s, GB/s)",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
]
|
|
},
|
|
"value": {
|
|
"description": "Numeric value of the measurement",
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"schema.NodePayload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cpusAllocated": {
|
|
"description": "Number of allocated CPUs",
|
|
"type": "integer"
|
|
},
|
|
"gpusAllocated": {
|
|
"description": "Number of allocated GPUs",
|
|
"type": "integer"
|
|
},
|
|
"hostname": {
|
|
"description": "Node hostname",
|
|
"type": "string"
|
|
},
|
|
"jobsRunning": {
|
|
"description": "Number of running jobs",
|
|
"type": "integer"
|
|
},
|
|
"memoryAllocated": {
|
|
"description": "Allocated memory in MB",
|
|
"type": "integer"
|
|
},
|
|
"states": {
|
|
"description": "State strings (flexible format)",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Resource": {
|
|
"description": "A resource used by a job",
|
|
"type": "object",
|
|
"properties": {
|
|
"accelerators": {
|
|
"description": "Allocated accelerator IDs (e.g., GPU IDs)",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"configuration": {
|
|
"description": "Optional configuration identifier",
|
|
"type": "string"
|
|
},
|
|
"hostname": {
|
|
"description": "Node hostname",
|
|
"type": "string"
|
|
},
|
|
"hwthreads": {
|
|
"description": "Allocated hardware thread IDs",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Series": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"description": "Time series measurements",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"hostname": {
|
|
"description": "Source hostname",
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"description": "Optional ID (e.g., core ID, GPU ID)",
|
|
"type": "string"
|
|
},
|
|
"statistics": {
|
|
"description": "Statistical summary (min/avg/max)",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.MetricStatistics"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"schema.StatsSeries": {
|
|
"type": "object",
|
|
"properties": {
|
|
"max": {
|
|
"description": "Maximum values over time",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"mean": {
|
|
"description": "Mean values over time",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"median": {
|
|
"description": "Median values over time",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"min": {
|
|
"description": "Minimum values over time",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"percentiles": {
|
|
"description": "Percentile values over time (e.g., 10th, 50th, 90th)",
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number",
|
|
"format": "float64"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.SubCluster": {
|
|
"type": "object",
|
|
"properties": {
|
|
"coresPerSocket": {
|
|
"description": "Number of cores per CPU socket",
|
|
"type": "integer"
|
|
},
|
|
"energyFootprint": {
|
|
"description": "Energy-related footprint metrics",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"flopRateScalar": {
|
|
"description": "Theoretical scalar FLOP rate per node",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
}
|
|
]
|
|
},
|
|
"flopRateSimd": {
|
|
"description": "Theoretical SIMD FLOP rate per node",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
}
|
|
]
|
|
},
|
|
"footprint": {
|
|
"description": "Default footprint metrics for jobs",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"memoryBandwidth": {
|
|
"description": "Theoretical memory bandwidth per node",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
}
|
|
]
|
|
},
|
|
"metricConfig": {
|
|
"description": "Subcluster-specific metric configurations",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.MetricConfig"
|
|
}
|
|
},
|
|
"name": {
|
|
"description": "Name of the subcluster (e.g., \"main\", \"gpu\", \"bigmem\")",
|
|
"type": "string"
|
|
},
|
|
"nodes": {
|
|
"description": "Node list in condensed format (e.g., \"node[001-100]\")",
|
|
"type": "string"
|
|
},
|
|
"processorType": {
|
|
"description": "CPU model (e.g., \"Intel Xeon Gold 6148\")",
|
|
"type": "string"
|
|
},
|
|
"socketsPerNode": {
|
|
"description": "Number of CPU sockets per node",
|
|
"type": "integer"
|
|
},
|
|
"threadsPerCore": {
|
|
"description": "Number of hardware threads per core (SMT level)",
|
|
"type": "integer"
|
|
},
|
|
"topology": {
|
|
"description": "Hardware topology of nodes in this subcluster",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.Topology"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"schema.SubClusterConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"alert": {
|
|
"description": "Alert threshold (requires attention)",
|
|
"type": "number"
|
|
},
|
|
"caution": {
|
|
"description": "Caution threshold (concerning but not critical)",
|
|
"type": "number"
|
|
},
|
|
"energy": {
|
|
"description": "Energy measurement configuration",
|
|
"type": "string"
|
|
},
|
|
"footprint": {
|
|
"description": "Footprint category for this metric",
|
|
"type": "string"
|
|
},
|
|
"lowerIsBetter": {
|
|
"description": "Whether lower values indicate better performance",
|
|
"type": "boolean"
|
|
},
|
|
"name": {
|
|
"description": "Metric name (e.g., \"cpu_load\", \"mem_used\")",
|
|
"type": "string"
|
|
},
|
|
"normal": {
|
|
"description": "Normal/typical value (good performance)",
|
|
"type": "number"
|
|
},
|
|
"peak": {
|
|
"description": "Peak/maximum expected value (best performance)",
|
|
"type": "number"
|
|
},
|
|
"remove": {
|
|
"description": "Whether to exclude this metric for this subcluster",
|
|
"type": "boolean"
|
|
},
|
|
"restrict": {
|
|
"description": "Restrict visibility to non user roles",
|
|
"type": "boolean"
|
|
},
|
|
"unit": {
|
|
"description": "Unit of measurement",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"schema.Tag": {
|
|
"description": "Defines a tag using name and type.",
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"example": "Testjob"
|
|
},
|
|
"scope": {
|
|
"type": "string",
|
|
"example": "global"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"example": "Debug"
|
|
}
|
|
}
|
|
},
|
|
"schema.Topology": {
|
|
"type": "object",
|
|
"properties": {
|
|
"accelerators": {
|
|
"description": "Attached accelerators (GPUs, etc.)",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Accelerator"
|
|
}
|
|
},
|
|
"core": {
|
|
"description": "Hardware threads grouped by core",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"die": {
|
|
"description": "Hardware threads grouped by die (optional)",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"memoryDomain": {
|
|
"description": "Hardware threads grouped by NUMA domain",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"node": {
|
|
"description": "All hardware thread IDs on this node",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"socket": {
|
|
"description": "Hardware threads grouped by socket",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Unit": {
|
|
"type": "object",
|
|
"properties": {
|
|
"base": {
|
|
"description": "Base unit (e.g., \"B/s\", \"F/s\", \"W\")",
|
|
"type": "string"
|
|
},
|
|
"prefix": {
|
|
"description": "SI prefix (e.g., \"G\", \"M\", \"K\", \"T\")",
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securityDefinitions": {
|
|
"ApiKeyAuth": {
|
|
"type": "apiKey",
|
|
"name": "X-Auth-Token",
|
|
"in": "header"
|
|
}
|
|
}
|
|
} |