mirror of
https://github.com/ClusterCockpit/cc-specifications.git
synced 2024-12-27 13:59:06 +01:00
2124 lines
72 KiB
JSON
2124 lines
72 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "API for batch job control.",
|
|
"title": "ClusterCockpit REST API",
|
|
"contact": {
|
|
"name": "ClusterCockpit Project",
|
|
"url": "https://github.com/ClusterCockpit",
|
|
"email": "support@clustercockpit.org"
|
|
},
|
|
"license": {
|
|
"name": "MIT License",
|
|
"url": "https://opensource.org/licenses/MIT"
|
|
},
|
|
"version": "1.0.0"
|
|
},
|
|
"host": "localhost:8080",
|
|
"basePath": "/api",
|
|
"paths": {
|
|
"/clusters/": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Get a list of all cluster configs. Specific cluster can be requested using query parameter.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Cluster query"
|
|
],
|
|
"summary": "Lists all cluster configs",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Job Cluster",
|
|
"name": "cluster",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Array of clusters",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetClustersApiResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Get a list of all jobs. Filters can be applied using query parameters.\nNumber of results can be limited by page. Results are sorted by descending startTime.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job query"
|
|
],
|
|
"summary": "Lists all jobs",
|
|
"parameters": [
|
|
{
|
|
"enum": [
|
|
"running",
|
|
"completed",
|
|
"failed",
|
|
"cancelled",
|
|
"stopped",
|
|
"timeout"
|
|
],
|
|
"type": "string",
|
|
"description": "Job State",
|
|
"name": "state",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Job Cluster",
|
|
"name": "cluster",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Syntax: '$from-$to', as unix epoch timestamps in seconds",
|
|
"name": "start-time",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Items per page (Default: 25)",
|
|
"name": "items-per-page",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Page Number (Default: 1)",
|
|
"name": "page",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"description": "Include metadata (e.g. jobScript) in response",
|
|
"name": "with-metadata",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job array and page info",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetJobsApiResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/delete_job/": {
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job to delete is specified by request body. All fields are required in this case.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"description": "All fields required",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DeleteJobApiRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DeleteJobApiResponse"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/delete_job/{id}": {
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job to remove is specified by database ID. This will not remove the job from the job archive.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Database ID of Job",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DeleteJobApiResponse"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/delete_job_before/{ts}": {
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Remove all jobs with start time before timestamp. The jobs will not be removed from the job archive.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job remove"
|
|
],
|
|
"summary": "Remove a job from the sql database",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Unix epoch timestamp",
|
|
"name": "ts",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success message",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.DeleteJobApiResponse"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/edit_meta/{id}": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Edit meta-data json",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job Database ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Kay value pair to add",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/api.EditMetaRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Updated job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/start_job/": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job specified in request body will be saved to database as \"running\" with new DB ID.\nJob specifications follow the 'JobMeta' 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.JobMeta"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Job added successfully",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.StartJobApiResponse"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/stop_job/": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job to stop is specified by request body. All fields are required in this case.\nReturns full job resource information according to 'JobMeta' 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.JobMeta"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/tag_job/{id}": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Adds tag(s) to a job specified by DB ID. Name and Type of Tag(s) can be chosen freely.\nTag Scope for frontend visibility will default to \"global\" if none entered, other options: \"admin\" or specific username.\nIf tagged job is already finished: Tag will be written directly to respective archive files.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job add and modify"
|
|
],
|
|
"summary": "Adds one or more tags to a job",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job Database ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "Array of tag-objects to add",
|
|
"name": "request",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/api.ApiTag"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Updated job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/schema.Job"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Job or tag does not exist",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/{id}": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job to get is specified by database ID\nReturns full job resource information according to 'JobMeta' scheme and all metrics according to 'JobData'.",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Job query"
|
|
],
|
|
"summary": "Get job meta and optional all metric data",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Database ID of Job",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"description": "Include all available metrics",
|
|
"name": "all-metrics",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job resource",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.GetJobApiResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Resource not found",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: finding job failed: sql: no rows in result set",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/api.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Job to get is specified by database ID\nReturns full job resource information according to 'JobMeta' 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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/user/{id}": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Modifies user defined by username (id) in one of four possible ways.\nIf more than one formValue is set then only the highest priority field is used.\nOnly accessible from IPs registered with apiAllowedIPs configuration option.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Updates an existing user",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Database ID of User",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"enum": [
|
|
"admin",
|
|
"support",
|
|
"manager",
|
|
"user",
|
|
"api"
|
|
],
|
|
"type": "string",
|
|
"description": "Priority 1: Role to add",
|
|
"name": "add-role",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"enum": [
|
|
"admin",
|
|
"support",
|
|
"manager",
|
|
"user",
|
|
"api"
|
|
],
|
|
"type": "string",
|
|
"description": "Priority 2: Role to remove",
|
|
"name": "remove-role",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Priority 3: Project to add",
|
|
"name": "add-project",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Priority 4: Project to remove",
|
|
"name": "remove-project",
|
|
"in": "formData"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success Response Message",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: The user could not be updated",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/users/": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Returns a JSON-encoded list of users.\nRequired query-parameter defines if all users or only users with additional special roles are returned.\nOnly accessible from IPs registered with apiAllowedIPs configuration option.",
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "User specified in form data will be saved to database.\nOnly accessible from IPs registered with apiAllowedIPs configuration option.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Adds a new user",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Unique user ID",
|
|
"name": "username",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "User password",
|
|
"name": "password",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"enum": [
|
|
"admin",
|
|
"support",
|
|
"manager",
|
|
"user",
|
|
"api"
|
|
],
|
|
"type": "string",
|
|
"description": "User role",
|
|
"name": "role",
|
|
"in": "formData",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Managed project, required for new manager role user",
|
|
"name": "project",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Users name",
|
|
"name": "name",
|
|
"in": "formData"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Users email",
|
|
"name": "email",
|
|
"in": "formData"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success Response",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: creating user failed",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "User defined by username in form data will be deleted from database.\nOnly accessible from IPs registered with apiAllowedIPs configuration option.",
|
|
"consumes": [
|
|
"multipart/form-data"
|
|
],
|
|
"produces": [
|
|
"text/plain"
|
|
],
|
|
"tags": [
|
|
"User"
|
|
],
|
|
"summary": "Deletes a user",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "User ID to delete",
|
|
"name": "username",
|
|
"in": "formData",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "User deleted successfully"
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unprocessable Entity: deleting user failed",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"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.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.DeleteJobApiResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"msg": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"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.JobMeta"
|
|
}
|
|
},
|
|
"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.StartJobApiResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"msg": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"api.StopJobApiRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"jobState",
|
|
"stopTime"
|
|
],
|
|
"properties": {
|
|
"cluster": {
|
|
"type": "string",
|
|
"example": "fritz"
|
|
},
|
|
"jobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"jobState": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/schema.JobState"
|
|
}
|
|
],
|
|
"example": "completed"
|
|
},
|
|
"startTime": {
|
|
"type": "integer",
|
|
"example": 1649723812
|
|
},
|
|
"stopTime": {
|
|
"type": "integer",
|
|
"example": 1649763839
|
|
}
|
|
}
|
|
},
|
|
"schema.Accelerator": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"schema.Cluster": {
|
|
"type": "object",
|
|
"properties": {
|
|
"metricConfig": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.MetricConfig"
|
|
}
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"subClusters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.SubCluster"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Job": {
|
|
"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"
|
|
}
|
|
},
|
|
"exclusive": {
|
|
"type": "integer",
|
|
"maximum": 2,
|
|
"minimum": 0,
|
|
"example": 1
|
|
},
|
|
"footprint": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"jobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"jobState": {
|
|
"enum": [
|
|
"completed",
|
|
"failed",
|
|
"cancelled",
|
|
"stopped",
|
|
"timeout",
|
|
"out_of_memory"
|
|
],
|
|
"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"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Resource"
|
|
}
|
|
},
|
|
"smt": {
|
|
"type": "integer",
|
|
"example": 4
|
|
},
|
|
"startTime": {
|
|
"type": "string"
|
|
},
|
|
"subCluster": {
|
|
"type": "string",
|
|
"example": "main"
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Tag"
|
|
}
|
|
},
|
|
"user": {
|
|
"type": "string",
|
|
"example": "abcd100h"
|
|
},
|
|
"walltime": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 86400
|
|
}
|
|
}
|
|
},
|
|
"schema.JobLink": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"jobId": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"schema.JobLinkResultList": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "integer"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.JobLink"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.JobMeta": {
|
|
"description": "Meta data 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"
|
|
}
|
|
},
|
|
"exclusive": {
|
|
"type": "integer",
|
|
"maximum": 2,
|
|
"minimum": 0,
|
|
"example": 1
|
|
},
|
|
"footprint": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"jobId": {
|
|
"type": "integer",
|
|
"example": 123000
|
|
},
|
|
"jobState": {
|
|
"enum": [
|
|
"completed",
|
|
"failed",
|
|
"cancelled",
|
|
"stopped",
|
|
"timeout",
|
|
"out_of_memory"
|
|
],
|
|
"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"
|
|
},
|
|
"resources": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Resource"
|
|
}
|
|
},
|
|
"smt": {
|
|
"type": "integer",
|
|
"example": 4
|
|
},
|
|
"startTime": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 1649723812
|
|
},
|
|
"statistics": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/schema.JobStatistics"
|
|
}
|
|
},
|
|
"subCluster": {
|
|
"type": "string",
|
|
"example": "main"
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Tag"
|
|
}
|
|
},
|
|
"user": {
|
|
"type": "string",
|
|
"example": "abcd100h"
|
|
},
|
|
"walltime": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"example": 86400
|
|
}
|
|
}
|
|
},
|
|
"schema.JobMetric": {
|
|
"type": "object",
|
|
"properties": {
|
|
"series": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Series"
|
|
}
|
|
},
|
|
"statisticsSeries": {
|
|
"$ref": "#/definitions/schema.StatsSeries"
|
|
},
|
|
"timestep": {
|
|
"type": "integer"
|
|
},
|
|
"unit": {
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
}
|
|
},
|
|
"schema.JobState": {
|
|
"type": "string",
|
|
"enum": [
|
|
"running",
|
|
"completed",
|
|
"failed",
|
|
"cancelled",
|
|
"stopped",
|
|
"timeout",
|
|
"preempted",
|
|
"out_of_memory"
|
|
],
|
|
"x-enum-varnames": [
|
|
"JobStateRunning",
|
|
"JobStateCompleted",
|
|
"JobStateFailed",
|
|
"JobStateCancelled",
|
|
"JobStateStopped",
|
|
"JobStateTimeout",
|
|
"JobStatePreempted",
|
|
"JobStateOutOfMemory"
|
|
]
|
|
},
|
|
"schema.JobStatistics": {
|
|
"description": "Specification for job metric statistics.",
|
|
"type": "object",
|
|
"properties": {
|
|
"avg": {
|
|
"description": "Job metric average",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 2500
|
|
},
|
|
"max": {
|
|
"description": "Job metric maximum",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 3000
|
|
},
|
|
"min": {
|
|
"description": "Job metric minimum",
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"example": 2000
|
|
},
|
|
"unit": {
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"aggregation": {
|
|
"type": "string"
|
|
},
|
|
"alert": {
|
|
"type": "number"
|
|
},
|
|
"caution": {
|
|
"type": "number"
|
|
},
|
|
"energy": {
|
|
"type": "string"
|
|
},
|
|
"footprint": {
|
|
"type": "string"
|
|
},
|
|
"lowerIsBetter": {
|
|
"type": "boolean"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"normal": {
|
|
"type": "number"
|
|
},
|
|
"peak": {
|
|
"type": "number"
|
|
},
|
|
"scope": {
|
|
"$ref": "#/definitions/schema.MetricScope"
|
|
},
|
|
"subClusters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.SubClusterConfig"
|
|
}
|
|
},
|
|
"timestep": {
|
|
"type": "integer"
|
|
},
|
|
"unit": {
|
|
"$ref": "#/definitions/schema.Unit"
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricScope": {
|
|
"type": "string",
|
|
"enum": [
|
|
"invalid_scope",
|
|
"node",
|
|
"socket",
|
|
"memoryDomain",
|
|
"core",
|
|
"hwthread",
|
|
"accelerator"
|
|
],
|
|
"x-enum-varnames": [
|
|
"MetricScopeInvalid",
|
|
"MetricScopeNode",
|
|
"MetricScopeSocket",
|
|
"MetricScopeMemoryDomain",
|
|
"MetricScopeCore",
|
|
"MetricScopeHWThread",
|
|
"MetricScopeAccelerator"
|
|
]
|
|
},
|
|
"schema.MetricStatistics": {
|
|
"type": "object",
|
|
"properties": {
|
|
"avg": {
|
|
"type": "number"
|
|
},
|
|
"max": {
|
|
"type": "number"
|
|
},
|
|
"min": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"schema.MetricValue": {
|
|
"type": "object",
|
|
"properties": {
|
|
"unit": {
|
|
"$ref": "#/definitions/schema.Unit"
|
|
},
|
|
"value": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"schema.Resource": {
|
|
"description": "A resource used by a job",
|
|
"type": "object",
|
|
"properties": {
|
|
"accelerators": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"configuration": {
|
|
"type": "string"
|
|
},
|
|
"hostname": {
|
|
"type": "string"
|
|
},
|
|
"hwthreads": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Series": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"hostname": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"statistics": {
|
|
"$ref": "#/definitions/schema.MetricStatistics"
|
|
}
|
|
}
|
|
},
|
|
"schema.StatsSeries": {
|
|
"type": "object",
|
|
"properties": {
|
|
"max": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"mean": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"median": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"min": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"percentiles": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.SubCluster": {
|
|
"type": "object",
|
|
"properties": {
|
|
"coresPerSocket": {
|
|
"type": "integer"
|
|
},
|
|
"energyFootprint": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"flopRateScalar": {
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
},
|
|
"flopRateSimd": {
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
},
|
|
"footprint": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"memoryBandwidth": {
|
|
"$ref": "#/definitions/schema.MetricValue"
|
|
},
|
|
"metricConfig": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.MetricConfig"
|
|
}
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"nodes": {
|
|
"type": "string"
|
|
},
|
|
"processorType": {
|
|
"type": "string"
|
|
},
|
|
"socketsPerNode": {
|
|
"type": "integer"
|
|
},
|
|
"threadsPerCore": {
|
|
"type": "integer"
|
|
},
|
|
"topology": {
|
|
"$ref": "#/definitions/schema.Topology"
|
|
}
|
|
}
|
|
},
|
|
"schema.SubClusterConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"alert": {
|
|
"type": "number"
|
|
},
|
|
"caution": {
|
|
"type": "number"
|
|
},
|
|
"energy": {
|
|
"type": "string"
|
|
},
|
|
"footprint": {
|
|
"type": "string"
|
|
},
|
|
"lowerIsBetter": {
|
|
"type": "boolean"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"normal": {
|
|
"type": "number"
|
|
},
|
|
"peak": {
|
|
"type": "number"
|
|
},
|
|
"remove": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"schema.Tag": {
|
|
"description": "Defines a tag using name and type.",
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"example": "Testjob"
|
|
},
|
|
"scope": {
|
|
"type": "string",
|
|
"example": "global"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"example": "Debug"
|
|
}
|
|
}
|
|
},
|
|
"schema.Topology": {
|
|
"type": "object",
|
|
"properties": {
|
|
"accelerators": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/schema.Accelerator"
|
|
}
|
|
},
|
|
"core": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"die": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"memoryDomain": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"node": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"socket": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schema.Unit": {
|
|
"type": "object",
|
|
"properties": {
|
|
"base": {
|
|
"type": "string"
|
|
},
|
|
"prefix": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securityDefinitions": {
|
|
"ApiKeyAuth": {
|
|
"type": "apiKey",
|
|
"name": "X-Auth-Token",
|
|
"in": "header"
|
|
}
|
|
}
|
|
} |