Rework schema

* Add partition and topology to cluster
* Move accelerator spec from job resources to partitions
* Change to consistent camelCase
* Fix ref URLS
This commit is contained in:
Jan Eitzinger 2021-12-17 06:54:16 +01:00
parent be2b977e7a
commit fc69a29b34
4 changed files with 243 additions and 173 deletions

View File

@ -4,43 +4,15 @@
"description": "Meta data information of a HPC cluster", "description": "Meta data information of a HPC cluster",
"type": "object", "type": "object",
"properties":{ "properties":{
"ClusterId": { "name": {
"description": "The unique identifier of a cluster", "description": "The unique identifier of a cluster",
"type": "string" "type": "string"
}, },
"ProcessorType": { "metricDataRepository": {
"description": "Processor type",
"type": "string"
},
"SocketsPerNode": {
"description": "Number of sockets per node",
"type": "integer"
},
"CoresPerSocket": {
"description": "Number of cores per socket",
"type": "integer"
},
"ThreadsPerCore": {
"description": "Number of SMT threads per core",
"type": "integer"
},
"FlopRateScalar": {
"description": "Theoretical node peak flop rate for scalar code in GFlops/s",
"type": "integer"
},
"FlopRateSimd": {
"description": "Theoretical node peak flop rate for SIMD code in GFlops/s",
"type": "integer"
},
"MemoryBandwidth": {
"description": "Theoretical node peak memory bandwidth in GB/s",
"type": "integer"
},
"MetricDataRepository": {
"description": "Type of the metric data repository for this cluster", "description": "Type of the metric data repository for this cluster",
"type": "object", "type": "object",
"properties": { "properties": {
"Kind": { "kind": {
"type": "string", "type": "string",
"enum": [ "enum": [
"influxdb-v1", "influxdb-v1",
@ -49,71 +21,193 @@
"cc-metric-store" "cc-metric-store"
] ]
}, },
"Url": { "url": {
"type": "string" "type": "string"
}, },
"Token": { "token": {
"type": "string" "type": "string"
} }
}, },
"required": [ "required": [
"Kind", "kind",
"Url" "url"
] ]
}, },
"MetricConfig": { "metricConfig": {
"description": "Metric specifications", "description": "Metric specifications",
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",
"properties":{ "properties":{
"Name": { "name": {
"description": "Metric name", "description": "Metric name",
"type": "string" "type": "string"
}, },
"Unit": { "unit": {
"description": "Metric unit", "description": "Metric unit",
"type": "string" "type": "string"
}, },
"Timestep": { "timestep": {
"description": "Frequency of timeseries points", "description": "Frequency of timeseries points",
"type": "integer" "type": "integer"
}, },
"Peak": { "peak": {
"type": "number" "type": "number"
}, },
"Normal": { "normal": {
"type": "number" "type": "number"
}, },
"Caution": { "caution": {
"type": "number" "type": "number"
}, },
"Alert": { "alert": {
"type": "number" "type": "number"
} }
} }
}, },
"partitions": {
"description": "Array of cluster partitions",
"type": "array",
"items": {
"type": "object",
"properties":{
"name": {
"description": "Metric name",
"type": "string"
},
"processorType": {
"description": "Processor type",
"type": "string"
},
"socketsPerNode": {
"description": "Number of sockets per node",
"type": "integer"
},
"coresPerSocket": {
"description": "Number of cores per socket",
"type": "integer"
},
"threadsPerCore": {
"description": "Number of SMT threads per core",
"type": "integer"
},
"flopRateScalar": {
"description": "Theoretical node peak flop rate for scalar code in GFlops/s",
"type": "integer"
},
"flopRateSimd": {
"description": "Theoretical node peak flop rate for SIMD code in GFlops/s",
"type": "integer"
},
"memoryBandwidth": {
"description": "Theoretical node peak memory bandwidth in GB/s",
"type": "integer"
},
"topology": {
"description": "Node topology",
"type": "object",
"properties":{
"node": {
"description": "HwTread lists of node",
"type": "array",
"items": {
"type": "integer"
}
},
"socket": {
"description": "HwTread lists of sockets",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"memoryDomain": {
"description": "HwTread lists of memory domains",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"die": {
"description": "HwTread lists of dies",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"core": {
"description": "HwTread lists of cores",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"accelerators": {
"type": "array",
"description": "List of of accelerator devices",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The unique device id"
},
"type": {
"type": "string",
"description": "The accelerator type",
"enum": [
"Nvidia GPU",
"AMD GPU",
"Intel GPU"
]
},
"model": {
"type": "string",
"description": "The accelerator model"
}
},
"required": [ "required": [
"Name", "id",
"Unit", "type",
"Timestep", "model"
"Peak",
"Normal",
"Caution",
"Alert"
] ]
} }
}, },
"required":[ "required":[
"ClusterId", "node",
"ProcessorType", "socket",
"SocketsPerNode", "memoryDomain"
"CoresPerSocket", ]
"ThreadsPerCore", },
"FlopRateScalar", "required":[
"FlopRateSimd", "name",
"MemoryBandwidth", "topology",
"MetricDataRepository", "processorType",
"MetricConfig" "socketsPerNode",
"coresPerSocket",
"threadsPerCore",
"flopRateScalar",
"flopRateSimd",
"memoryBandwidth"
]
}
},
"required":[
"name",
"metricDataRepository",
"metricConfig",
"partitions"
] ]
} }

View File

@ -4,7 +4,7 @@
"description": "Meta data information of a HPC job", "description": "Meta data information of a HPC job",
"type": "object", "type": "object",
"properties": { "properties": {
"job_id": { "jobId": {
"description": "The unique identifier of a job", "description": "The unique identifier of a job",
"type": "integer" "type": "integer"
}, },
@ -21,24 +21,24 @@
"type": "string" "type": "string"
}, },
"partition": { "partition": {
"description": "The queue to which the job was submitted", "description": "The cluster partition to which the job was submitted",
"type": "string" "type": "string"
}, },
"array_job_id": { "arrayJobId": {
"description": "The unique identifier of an array job", "description": "The unique identifier of an array job",
"type": "integer" "type": "integer"
}, },
"num_nodes": { "numNodes": {
"description": "Number of nodes used", "description": "Number of nodes used",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"num_hwthreads": { "numHwthreads": {
"description": "Number of HWThreads used", "description": "Number of HWThreads used",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"num_acc": { "numAcc": {
"description": "Number of accelerators used", "description": "Number of accelerators used",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
@ -47,7 +47,7 @@
"description": "Job uses only exclusive nodes", "description": "Job uses only exclusive nodes",
"type": "integer" "type": "integer"
}, },
"monitoring_status": { "monitoringStatus": {
"description": "State of monitoring system during job run", "description": "State of monitoring system during job run",
"type": "integer" "type": "integer"
}, },
@ -60,7 +60,7 @@
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"job_state": { "jobState": {
"description": "Final state of job", "description": "Final state of job",
"type": "string", "type": "string",
"enum": [ "enum": [
@ -71,12 +71,12 @@
"timeout" "timeout"
] ]
}, },
"start_time": { "startTime": {
"description": "Start epoch time stamp in seconds", "description": "Start epoch time stamp in seconds",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"stop_time": { "stopTime": {
"description": "Stop epoch time stamp in seconds", "description": "Stop epoch time stamp in seconds",
"type": "integer", "type": "integer",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
@ -104,33 +104,9 @@
}, },
"accelerators": { "accelerators": {
"type": "array", "type": "array",
"description": "List of of accelerator devices", "description": "List of of accelerator ids",
"items": { "items": {
"type": "object", "type": "integer"
"properties": {
"id": {
"type": "string",
"description": "The unique device id"
},
"type": {
"type": "string",
"description": "The accelerator type",
"enum": [
"Nvidia GPU",
"AMD GPU",
"Intel GPU"
]
},
"model": {
"type": "string",
"description": "The accelerator model"
}
},
"required": [
"id",
"type",
"model"
]
} }
}, },
"configuration": { "configuration": {
@ -144,11 +120,11 @@
"minItems": 1 "minItems": 1
} }
}, },
"meta_data": { "metaData": {
"description": "Additional information about the job", "description": "Additional information about the job",
"type": "object", "type": "object",
"properties": { "properties": {
"job_script": { "jobScript": {
"type": "string", "type": "string",
"description": "The batch script of the job" "description": "The batch script of the job"
}, },
@ -184,147 +160,147 @@
"properties": { "properties": {
"mem_used": { "mem_used": {
"description": "Memory capacity used (required)", "description": "Memory capacity used (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"cpu_load": { "cpu_load": {
"description": "CPU requested core utilization (load 1m) (required)", "description": "CPU requested core utilization (load 1m) (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"flops_any": { "flops_any": {
"description": "Total flop rate with DP flops scaled up (required)", "description": "Total flop rate with DP flops scaled up (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"mem_bw": { "mem_bw": {
"description": "Main memory bandwidth (required)", "description": "Main memory bandwidth (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"net_bw": { "net_bw": {
"description": "Total fast interconnect network bandwidth (required)", "description": "Total fast interconnect network bandwidth (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"file_bw": { "file_bw": {
"description": "Total file IO bandwidth (required)", "description": "Total file IO bandwidth (required)",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"ipc": { "ipc": {
"description": "Instructions executed per cycle", "description": "Instructions executed per cycle",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"cpu_used": { "cpu_used": {
"description": "CPU active core utilization", "description": "CPU active core utilization",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"flops_dp": { "flops_dp": {
"description": "Double precision flop rate", "description": "Double precision flop rate",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"flops_sp": { "flops_sp": {
"description": "Single precision flops rate", "description": "Single precision flops rate",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"rapl_power": { "rapl_power": {
"description": "CPU power consumption", "description": "CPU power consumption",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"gpu_used": { "gpu_used": {
"description": "GPU utilization", "description": "GPU utilization",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"gpu_mem_used": { "gpu_mem_used": {
"description": "GPU memory capacity used", "description": "GPU memory capacity used",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"gpu_power": { "gpu_power": {
"description": "GPU power consumption", "description": "GPU power consumption",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"clock": { "clock": {
"description": "Average core frequency", "description": "Average core frequency",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"eth_read_bw": { "eth_read_bw": {
"description": "Ethernet read bandwidth", "description": "Ethernet read bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"eth_write_bw": { "eth_write_bw": {
"description": "Ethernet write bandwidth", "description": "Ethernet write bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_read_bw": { "pfs_read_bw": {
"description": "Parallel file system read bandwidth", "description": "Parallel file system read bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_write_bw": { "pfs_write_bw": {
"description": "Parallel file system write bandwidth", "description": "Parallel file system write bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_read_req": { "pfs_read_req": {
"description": "Parallel file system read requests", "description": "Parallel file system read requests",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_write_req": { "pfs_write_req": {
"description": "Parallel file system write requests", "description": "Parallel file system write requests",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_inodes": { "pfs_inodes": {
"description": "Parallel file system inodes used", "description": "Parallel file system inodes used",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_accesses": { "pfs_accesses": {
"description": "Parallel file system open and close", "description": "Parallel file system open and close",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_fsync": { "pfs_fsync": {
"description": "Parallel file system fsync", "description": "Parallel file system fsync",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_create": { "pfs_create": {
"description": "Parallel file system create", "description": "Parallel file system create",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_open": { "pfs_open": {
"description": "Parallel file system open", "description": "Parallel file system open",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_close": { "pfs_close": {
"description": "Parallel file system close", "description": "Parallel file system close",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"pfs_seek": { "pfs_seek": {
"description": "Parallel file system seek", "description": "Parallel file system seek",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"fs_read_bw": { "fs_read_bw": {
"description": "Local file system read bandwidth", "description": "Local file system read bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"fs_write_bw": { "fs_write_bw": {
"description": "Local file system write bandwidth", "description": "Local file system write bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"fs_inodes": { "fs_inodes": {
"description": "Local file system inodes used", "description": "Local file system inodes used",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"fs_accesses": { "fs_accesses": {
"description": "Local file system open and close", "description": "Local file system open and close",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"ic_rcv_packets": { "ic_rcv_packets": {
"description": "Network interconnect read packets", "description": "Network interconnect read packets",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"ic_send_packets": { "ic_send_packets": {
"description": "Network interconnect send packet", "description": "Network interconnect send packet",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"ic_read_bw": { "ic_read_bw": {
"description": "Network interconnect read bandwidth", "description": "Network interconnect read bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
}, },
"ic_write_bw": { "ic_write_bw": {
"description": "Network interconnect write bandwidth", "description": "Network interconnect write bandwidth",
"#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-data.schema.json" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/job-metric-statistics.schema.json"
} }
}, },
"required": [ "required": [
@ -338,13 +314,13 @@
} }
}, },
"required": [ "required": [
"job_id", "jobId",
"user_id", "user",
"project_id", "project",
"cluster_id", "cluster",
"num_nodes", "numNodes",
"start_time", "startTime",
"stop_time", "stopTime",
"duration", "duration",
"resources", "resources",
"tags", "tags",

View File

@ -4,10 +4,10 @@
"description": "Metric data of a HPC job", "description": "Metric data of a HPC job",
"type": "object", "type": "object",
"properties": { "properties": {
"Unit": { "unit": {
"type": "string" "#ref": "https://github.com/ClusterCockpit/cc-specifications/blob/master/schema/json/unit.schema.json"
}, },
"Scope": { "scope": {
"type": "string", "type": "string",
"enum": [ "enum": [
"node", "node",
@ -19,62 +19,62 @@
"accelerator" "accelerator"
] ]
}, },
"Timestep": { "timestep": {
"description": "Measurement interval in seconds", "description": "Measurement interval in seconds",
"type": "integer" "type": "integer"
}, },
"Thresholds": { "thresholds": {
"description": "Metric thresholds for specific system", "description": "Metric thresholds for specific system",
"type": "object", "type": "object",
"properties": { "properties": {
"Peak": { "peak": {
"type": "number" "type": "number"
}, },
"Normal": { "normal": {
"type": "number" "type": "number"
}, },
"Caution": { "caution": {
"type": "number" "type": "number"
}, },
"Alert": { "alert": {
"type": "number" "type": "number"
} }
} }
}, },
"Series": { "series": {
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",
"properties": { "properties": {
"Hostname": { "hostname": {
"type": "string" "type": "string"
}, },
"Id": { "id": {
"type": "integer" "type": "integer"
}, },
"Statistics": { "statistics": {
"type": "object", "type": "object",
"properties": { "properties": {
"Avg": { "avg": {
"description": "Series average", "description": "Series average",
"type": "number", "type": "number",
"minimum": 0 "minimum": 0
}, },
"Min": { "min": {
"description": "Series minimum", "description": "Series minimum",
"type": "number", "type": "number",
"minimum": 0 "minimum": 0
}, },
"Max": { "max": {
"description": "Series maximum", "description": "Series maximum",
"type": "number", "type": "number",
"minimum": 0 "minimum": 0
} }
}, },
"required": [ "required": [
"Avg", "avg",
"Min", "min",
"Max" "max"
] ]
}, },
"data": { "data": {
@ -87,16 +87,16 @@
} }
}, },
"required": [ "required": [
"Hostname", "hostname",
"Data" "data"
] ]
} }
} }
}, },
"required": [ "required": [
"Unit", "unit",
"Scope", "scope",
"Timestep", "timestep",
"Series" "series"
] ]
} }