{
    "$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",
                "mem_used",
                "flops_any",
                "mem_bw"
            ]
        }
    },
    "required": [
        "jobId",
        "user",
        "project",
        "cluster",
        "subCluster",
        "numNodes",
        "exclusive",
        "startTime",
        "jobState",
        "duration",
        "resources",
        "statistics"
    ]
}
