{
    "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"
        }
    }
}