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