diff --git a/api/swagger.json b/api/swagger.json index c9c36de1..3fa3f8c5 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -391,11 +391,6 @@ }, "/api/jobs/edit_meta/": { "patch": { - "security": [ - { - "ApiKeyAuth": [] - } - ], "description": "Edit key value pairs in metadata json of job specified by jobID, StartTime and Cluster\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" @@ -406,7 +401,7 @@ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json by request", + "summary": "Edit meta-data json of job identified by request", "parameters": [ { "description": "Specifies job and payload to add or update", @@ -449,12 +444,17 @@ "$ref": "#/definitions/api.ErrorResponse" } } - } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] } }, "/api/jobs/edit_meta/{id}": { "patch": { - "description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten", + "description": "Edit key value pairs in job metadata json of job specified by database id\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" ], @@ -464,7 +464,7 @@ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json", + "summary": "Edit meta-data json of job identified by database id", "parameters": [ { "type": "integer", @@ -474,7 +474,7 @@ "required": true }, { - "description": "Kay value pair to add", + "description": "Metadata Key value pair to add or update", "name": "request", "in": "body", "required": true, @@ -736,6 +736,64 @@ ] } }, + "/api/jobs/used_nodes": { + "get": { + "description": "Get a map of cluster names to lists of unique hostnames that are currently in use by running jobs that started before the specified timestamp.", + "produces": [ + "application/json" + ], + "tags": [ + "Job query" + ], + "summary": "Lists used nodes by cluster", + "parameters": [ + { + "type": "integer", + "description": "Unix timestamp to filter jobs (jobs with start_time \u003c ts)", + "name": "ts", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Map of cluster names to hostname lists", + "schema": { + "$ref": "#/definitions/api.GetUsedNodesAPIResponse" + } + }, + "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/{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'.", @@ -1374,63 +1432,6 @@ ] } }, - "/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.", @@ -2036,6 +2037,52 @@ } } }, + "api.GetUsedNodesAPIResponse": { + "type": "object", + "properties": { + "usedNodes": { + "description": "Map of cluster names to lists of used node hostnames", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "api.JobMetaRequest": { + "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 + }, + "payload": { + "description": "Content to Add to Job Meta_Data", + "allOf": [ + { + "$ref": "#/definitions/api.EditMetaRequest" + } + ] + }, + "startTime": { + "description": "Start Time of job as epoch", + "type": "integer", + "example": 1649723812 + } + } + }, "api.JobMetricWithName": { "type": "object", "properties": { @@ -2168,13 +2215,6 @@ "format": "float64" } }, - "exclusive": { - "description": "for backwards compatibility", - "type": "integer", - "maximum": 2, - "minimum": 0, - "example": 1 - }, "footprint": { "type": "object", "additionalProperties": { diff --git a/api/swagger.yaml b/api/swagger.yaml index def939dd..e397f672 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -102,6 +102,16 @@ definitions: description: Page id returned type: integer type: object + api.GetUsedNodesAPIResponse: + properties: + usedNodes: + additionalProperties: + items: + type: string + type: array + description: Map of cluster names to lists of used node hostnames + type: object + type: object api.JobMetaRequest: properties: cluster: @@ -214,12 +224,6 @@ definitions: format: float64 type: number type: object - exclusive: - description: for backwards compatibility - example: 1 - maximum: 2 - minimum: 0 - type: integer footprint: additionalProperties: format: float64 @@ -1151,7 +1155,7 @@ paths: $ref: '#/definitions/api.ErrorResponse' security: - ApiKeyAuth: [] - summary: Edit meta-data json by request + summary: Edit meta-data json of job identified by request tags: - Job add and modify /api/jobs/edit_meta/{id}: @@ -1159,7 +1163,7 @@ paths: consumes: - application/json description: |- - Edit key value pairs in job metadata json + Edit key value pairs in job metadata json of job specified by database id If a key already exists its content will be overwritten parameters: - description: Job Database ID @@ -1167,7 +1171,7 @@ paths: name: id required: true type: integer - - description: Kay value pair to add + - description: Metadata Key value pair to add or update in: body name: request required: true @@ -1198,7 +1202,7 @@ paths: $ref: '#/definitions/api.ErrorResponse' security: - ApiKeyAuth: [] - summary: Edit meta-data json + summary: Edit meta-data json of job identified by database id tags: - Job add and modify /api/jobs/start_job/: @@ -1346,6 +1350,44 @@ paths: summary: Adds one or more tags to a job tags: - Job add and modify + /api/jobs/used_nodes: + get: + description: Get a map of cluster names to lists of unique hostnames that are + currently in use by running jobs that started before the specified timestamp. + parameters: + - description: Unix timestamp to filter jobs (jobs with start_time < ts) + in: query + name: ts + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Map of cluster names to hostname lists + schema: + $ref: '#/definitions/api.GetUsedNodesAPIResponse' + "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: [] + summary: Lists used nodes by cluster + tags: + - Job query /api/nodestats/: post: description: |- @@ -1657,42 +1699,6 @@ paths: - ApiKeyAuth: [] tags: - free - /healthcheck/: - get: - description: This endpoint allows the users to check if a node is healthy - parameters: - - description: Selector - in: query - name: selector - type: string - produces: - - application/json - 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: [] - summary: HealthCheck endpoint - tags: - - healthcheck /jobs/tag_job/{id}: delete: consumes: diff --git a/internal/api/docs.go b/internal/api/docs.go index de3cf506..85e28bd1 100644 --- a/internal/api/docs.go +++ b/internal/api/docs.go @@ -398,11 +398,6 @@ const docTemplate = `{ }, "/api/jobs/edit_meta/": { "patch": { - "security": [ - { - "ApiKeyAuth": [] - } - ], "description": "Edit key value pairs in metadata json of job specified by jobID, StartTime and Cluster\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" @@ -413,7 +408,7 @@ const docTemplate = `{ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json by request", + "summary": "Edit meta-data json of job identified by request", "parameters": [ { "description": "Specifies job and payload to add or update", @@ -456,12 +451,17 @@ const docTemplate = `{ "$ref": "#/definitions/api.ErrorResponse" } } - } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] } }, "/api/jobs/edit_meta/{id}": { "patch": { - "description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten", + "description": "Edit key value pairs in job metadata json of job specified by database id\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" ], @@ -471,7 +471,7 @@ const docTemplate = `{ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json", + "summary": "Edit meta-data json of job identified by database id", "parameters": [ { "type": "integer", @@ -481,7 +481,7 @@ const docTemplate = `{ "required": true }, { - "description": "Kay value pair to add", + "description": "Metadata Key value pair to add or update", "name": "request", "in": "body", "required": true, @@ -743,6 +743,64 @@ const docTemplate = `{ ] } }, + "/api/jobs/used_nodes": { + "get": { + "description": "Get a map of cluster names to lists of unique hostnames that are currently in use by running jobs that started before the specified timestamp.", + "produces": [ + "application/json" + ], + "tags": [ + "Job query" + ], + "summary": "Lists used nodes by cluster", + "parameters": [ + { + "type": "integer", + "description": "Unix timestamp to filter jobs (jobs with start_time \u003c ts)", + "name": "ts", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Map of cluster names to hostname lists", + "schema": { + "$ref": "#/definitions/api.GetUsedNodesAPIResponse" + } + }, + "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/{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'.", @@ -1381,63 +1439,6 @@ const docTemplate = `{ ] } }, - "/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.", @@ -2043,6 +2044,52 @@ const docTemplate = `{ } } }, + "api.GetUsedNodesAPIResponse": { + "type": "object", + "properties": { + "usedNodes": { + "description": "Map of cluster names to lists of used node hostnames", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "api.JobMetaRequest": { + "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 + }, + "payload": { + "description": "Content to Add to Job Meta_Data", + "allOf": [ + { + "$ref": "#/definitions/api.EditMetaRequest" + } + ] + }, + "startTime": { + "description": "Start Time of job as epoch", + "type": "integer", + "example": 1649723812 + } + } + }, "api.JobMetricWithName": { "type": "object", "properties": { @@ -2175,13 +2222,6 @@ const docTemplate = `{ "format": "float64" } }, - "exclusive": { - "description": "for backwards compatibility", - "type": "integer", - "maximum": 2, - "minimum": 0, - "example": 1 - }, "footprint": { "type": "object", "additionalProperties": {