{
  "$schema": "http://json-schema.org/draft/2020-12/schema",
  "$id": "embedfs://job-meta.schema.json",
  "title": "Job meta data",
  "description": "Meta data information of a HPC job",
  "type": "object",
  "properties": {
    "jobId": {
      "description": "The unique identifier of a job",
      "type": "integer"
    },
    "user": {
      "description": "The unique identifier of a user",
      "type": "string"
    },
    "project": {
      "description": "The unique identifier of a project",
      "type": "string"
    },
    "cluster": {
      "description": "The unique identifier of a cluster",
      "type": "string"
    },
    "subCluster": {
      "description": "The unique identifier of a sub cluster",
      "type": "string"
    },
    "partition": {
      "description": "The Slurm partition to which the job was submitted",
      "type": "string"
    },
    "arrayJobId": {
      "description": "The unique identifier of an array job",
      "type": "integer"
    },
    "numNodes": {
      "description": "Number of nodes used",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "numHwthreads": {
      "description": "Number of HWThreads used",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "numAcc": {
      "description": "Number of accelerators used",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "exclusive": {
      "description": "Specifies how nodes are shared. 0 - Shared among multiple jobs of multiple users, 1 - Job exclusive, 2 - Shared among multiple jobs of same user",
      "type": "integer",
      "minimum": 0,
      "maximum": 2
    },
    "monitoringStatus": {
      "description": "State of monitoring system during job run",
      "type": "integer"
    },
    "smt": {
      "description": "SMT threads used by job",
      "type": "integer"
    },
    "walltime": {
      "description": "Requested walltime of job in seconds",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "jobState": {
      "description": "Final state of job",
      "type": "string",
      "enum": [
        "completed",
        "failed",
        "cancelled",
        "stopped",
        "out_of_memory",
        "timeout"
      ]
    },
    "startTime": {
      "description": "Start epoch time stamp in seconds",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "duration": {
      "description": "Duration of job in seconds",
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "resources": {
      "description": "Resources used by job",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string"
          },
          "hwthreads": {
            "type": "array",
            "description": "List of OS processor ids",
            "items": {
              "type": "integer"
            }
          },
          "accelerators": {
            "type": "array",
            "description": "List of of accelerator device ids",
            "items": {
              "type": "string"
            }
          },
          "configuration": {
            "type": "string",
            "description": "The configuration options of the node"
          }
        },
        "required": [
          "hostname"
        ],
        "minItems": 1
      }
    },
    "metaData": {
      "description": "Additional information about the job",
      "type": "object",
      "properties": {
        "jobScript": {
          "type": "string",
          "description": "The batch script of the job"
        },
        "jobName": {
          "type": "string",
          "description": "Slurm Job name"
        },
        "slurmInfo": {
          "type": "string",
          "description": "Additional slurm infos as show by scontrol show job"
        }
      }
    },
    "tags": {
      "description": "List of tags",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ]
      },
      "uniqueItems": true
    },
    "statistics": {
      "description": "Job statistic data",
      "type": "object",
      "properties": {
        "mem_used": {
          "description": "Memory capacity used (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "cpu_load": {
          "description": "CPU requested core utilization (load 1m) (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "flops_any": {
          "description": "Total flop rate with DP flops scaled up (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "mem_bw": {
          "description": "Main memory bandwidth (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "net_bw": {
          "description": "Total fast interconnect network bandwidth (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "file_bw": {
          "description": "Total file IO bandwidth (required)",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "ipc": {
          "description": "Instructions executed per cycle",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "cpu_user": {
          "description": "CPU user active core utilization",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "flops_dp": {
          "description": "Double precision flop rate",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "flops_sp": {
          "description": "Single precision flops rate",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "rapl_power": {
          "description": "CPU power consumption",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "acc_used": {
          "description": "GPU utilization",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "acc_mem_used": {
          "description": "GPU memory capacity used",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "acc_power": {
          "description": "GPU power consumption",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "clock": {
          "description": "Average core frequency",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "eth_read_bw": {
          "description": "Ethernet read bandwidth",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "eth_write_bw": {
          "description": "Ethernet write bandwidth",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "ic_rcv_packets": {
          "description": "Network interconnect read packets",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "ic_send_packets": {
          "description": "Network interconnect send packet",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "ic_read_bw": {
          "description": "Network interconnect read bandwidth",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "ic_write_bw": {
          "description": "Network interconnect write bandwidth",
          "$ref": "embedfs://job-metric-statistics.schema.json"
        },
        "filesystems": {
          "description": "Array of filesystems",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "nfs",
                  "lustre",
                  "gpfs",
                  "nvme",
                  "ssd",
                  "hdd",
                  "beegfs"
                ]
              },
              "read_bw": {
                "description": "File system read bandwidth",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "write_bw": {
                "description": "File system write bandwidth",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "read_req": {
                "description": "File system read requests",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "write_req": {
                "description": "File system write requests",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "inodes": {
                "description": "File system write requests",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "accesses": {
                "description": "File system open and close",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "fsync": {
                "description": "File system fsync",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "create": {
                "description": "File system create",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "open": {
                "description": "File system open",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "close": {
                "description": "File system close",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              },
              "seek": {
                "description": "File system seek",
                "$ref": "embedfs://job-metric-statistics.schema.json"
              }
            },
            "required": [
              "name",
              "type",
              "read_bw",
              "write_bw"
            ]
          },
          "minItems": 1
        }
      },
      "required": [
        "cpu_user",
        "cpu_load",
        "mem_used",
        "flops_any",
        "mem_bw"
      ]
    }
  },
  "required": [
    "jobId",
    "user",
    "project",
    "cluster",
    "subCluster",
    "numNodes",
    "exclusive",
    "startTime",
    "jobState",
    "duration",
    "resources",
    "statistics"
  ]
}