mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-10-31 16:05:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1987 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			1987 lines
		
	
	
		
			67 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": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/": {
 | |
|             "get": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/delete_job/": {
 | |
|             "delete": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/delete_job/{id}": {
 | |
|             "delete": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/delete_job_before/{ts}": {
 | |
|             "delete": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/edit_meta/{id}": {
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/start_job/": {
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/stop_job/": {
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/tag_job/{id}": {
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/jobs/{id}": {
 | |
|             "get": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/nodestats/": {
 | |
|             "post": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/api/users/": {
 | |
|             "get": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/jobs/tag_job/{id}": {
 | |
|             "delete": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "/tags/": {
 | |
|             "delete": {
 | |
|                 "security": [
 | |
|                     {
 | |
|                         "ApiKeyAuth": []
 | |
|                     }
 | |
|                 ],
 | |
|                 "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"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     },
 | |
|     "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.Node": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "cpusAllocated": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "cpusTotal": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "gpusAllocated": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "gpusTotal": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "hostname": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "memoryAllocated": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "memoryTotal": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "states": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "string"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "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/api.Node"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.Accelerator": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "id": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "model": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "type": {
 | |
|                     "type": "string"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.Cluster": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "metricConfig": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.MetricConfig"
 | |
|                     }
 | |
|                 },
 | |
|                 "name": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "subClusters": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.SubCluster"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.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"
 | |
|                     }
 | |
|                 },
 | |
|                 "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": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "jobId": {
 | |
|                     "type": "integer"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.JobLinkResultList": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "count": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "items": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.JobLink"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.JobMetric": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "series": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.Series"
 | |
|                     }
 | |
|                 },
 | |
|                 "statisticsSeries": {
 | |
|                     "$ref": "#/definitions/schema.StatsSeries"
 | |
|                 },
 | |
|                 "timestep": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "unit": {
 | |
|                     "$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": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "alert": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "caution": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "energy": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "footprint": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "lowerIsBetter": {
 | |
|                     "type": "boolean"
 | |
|                 },
 | |
|                 "name": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "normal": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "peak": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "scope": {
 | |
|                     "$ref": "#/definitions/schema.MetricScope"
 | |
|                 },
 | |
|                 "subClusters": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.SubClusterConfig"
 | |
|                     }
 | |
|                 },
 | |
|                 "timestep": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "unit": {
 | |
|                     "$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": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "max": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "min": {
 | |
|                     "type": "number"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.MetricValue": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "unit": {
 | |
|                     "$ref": "#/definitions/schema.Unit"
 | |
|                 },
 | |
|                 "value": {
 | |
|                     "type": "number"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.Resource": {
 | |
|             "description": "A resource used by a job",
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "accelerators": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "string"
 | |
|                     }
 | |
|                 },
 | |
|                 "configuration": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "hostname": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "hwthreads": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "integer"
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.Series": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "data": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "number"
 | |
|                     }
 | |
|                 },
 | |
|                 "hostname": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "id": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "statistics": {
 | |
|                     "$ref": "#/definitions/schema.MetricStatistics"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.StatsSeries": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "max": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "number"
 | |
|                     }
 | |
|                 },
 | |
|                 "mean": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "number"
 | |
|                     }
 | |
|                 },
 | |
|                 "median": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "number"
 | |
|                     }
 | |
|                 },
 | |
|                 "min": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "number"
 | |
|                     }
 | |
|                 },
 | |
|                 "percentiles": {
 | |
|                     "type": "object",
 | |
|                     "additionalProperties": {
 | |
|                         "type": "array",
 | |
|                         "items": {
 | |
|                             "type": "number",
 | |
|                             "format": "float64"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.SubCluster": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "coresPerSocket": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "energyFootprint": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "string"
 | |
|                     }
 | |
|                 },
 | |
|                 "flopRateScalar": {
 | |
|                     "$ref": "#/definitions/schema.MetricValue"
 | |
|                 },
 | |
|                 "flopRateSimd": {
 | |
|                     "$ref": "#/definitions/schema.MetricValue"
 | |
|                 },
 | |
|                 "footprint": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "string"
 | |
|                     }
 | |
|                 },
 | |
|                 "memoryBandwidth": {
 | |
|                     "$ref": "#/definitions/schema.MetricValue"
 | |
|                 },
 | |
|                 "metricConfig": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.MetricConfig"
 | |
|                     }
 | |
|                 },
 | |
|                 "name": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "nodes": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "processorType": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "socketsPerNode": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "threadsPerCore": {
 | |
|                     "type": "integer"
 | |
|                 },
 | |
|                 "topology": {
 | |
|                     "$ref": "#/definitions/schema.Topology"
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.SubClusterConfig": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "alert": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "caution": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "energy": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "footprint": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "lowerIsBetter": {
 | |
|                     "type": "boolean"
 | |
|                 },
 | |
|                 "name": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "normal": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "peak": {
 | |
|                     "type": "number"
 | |
|                 },
 | |
|                 "remove": {
 | |
|                     "type": "boolean"
 | |
|                 },
 | |
|                 "unit": {
 | |
|                     "$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": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "$ref": "#/definitions/schema.Accelerator"
 | |
|                     }
 | |
|                 },
 | |
|                 "core": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "array",
 | |
|                         "items": {
 | |
|                             "type": "integer"
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
|                 "die": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "array",
 | |
|                         "items": {
 | |
|                             "type": "integer"
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
|                 "memoryDomain": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "array",
 | |
|                         "items": {
 | |
|                             "type": "integer"
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
|                 "node": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "integer"
 | |
|                     }
 | |
|                 },
 | |
|                 "socket": {
 | |
|                     "type": "array",
 | |
|                     "items": {
 | |
|                         "type": "array",
 | |
|                         "items": {
 | |
|                             "type": "integer"
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         "schema.Unit": {
 | |
|             "type": "object",
 | |
|             "properties": {
 | |
|                 "base": {
 | |
|                     "type": "string"
 | |
|                 },
 | |
|                 "prefix": {
 | |
|                     "type": "string"
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     },
 | |
|     "securityDefinitions": {
 | |
|         "ApiKeyAuth": {
 | |
|             "type": "apiKey",
 | |
|             "name": "X-Auth-Token",
 | |
|             "in": "header"
 | |
|         }
 | |
|     }
 | |
| } |