All checks were successful
Build and Publish Docker Image / deploy (push) Successful in 1m17s
Extend the submission contract to accept a `systemInfo` object and persist it with each submission, including deep-copy support for `extra` metadata. Also update client-facing docs and HTTP examples (JSON and multipart) and document that the schema is available at `GET /api/schema`, so clients can reliably implement the updated payload format.feat(api): support optional systemInfo in submissions Extend the submission contract to accept a `systemInfo` object and persist it with each submission, including deep-copy support for `extra` metadata. Also update client-facing docs and HTTP examples (JSON and multipart) and document that the schema is available at `GET /api/schema`, so clients can reliably implement the updated payload format.
307 lines
6.9 KiB
JSON
307 lines
6.9 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://cpu-benchmarker.local/schemas/submit-schema.json",
|
|
"title": "CPU Benchmark Submission",
|
|
"description": "Request body for POST /api/submit. Older clients may omit systemInfo.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"submitter": {
|
|
"type": "string",
|
|
"description": "Human-readable device or user label."
|
|
},
|
|
"platform": {
|
|
"type": "string",
|
|
"enum": ["windows", "linux", "macos"],
|
|
"description": "Normalized platform value."
|
|
},
|
|
"systemInfo": {
|
|
"$ref": "#/$defs/systemInfo"
|
|
},
|
|
"benchmark": {
|
|
"$ref": "#/$defs/benchmarkResult"
|
|
},
|
|
"result": {
|
|
"$ref": "#/$defs/benchmarkResult"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/benchmarkResult"
|
|
},
|
|
"config": {
|
|
"$ref": "#/$defs/benchmarkConfig"
|
|
},
|
|
"cpuInfo": {
|
|
"$ref": "#/$defs/cpuInfo"
|
|
},
|
|
"startedAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"duration": {
|
|
"type": "integer",
|
|
"description": "Benchmark duration in nanoseconds."
|
|
},
|
|
"totalOps": {
|
|
"type": "integer"
|
|
},
|
|
"mOpsPerSec": {
|
|
"type": "number"
|
|
},
|
|
"score": {
|
|
"type": "integer"
|
|
},
|
|
"coreResults": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/coreResult"
|
|
}
|
|
}
|
|
},
|
|
"anyOf": [
|
|
{
|
|
"required": ["benchmark"]
|
|
},
|
|
{
|
|
"required": ["result"]
|
|
},
|
|
{
|
|
"required": ["data"]
|
|
},
|
|
{
|
|
"required": ["config", "cpuInfo", "startedAt", "duration", "totalOps", "mOpsPerSec", "score", "coreResults"]
|
|
}
|
|
],
|
|
"$defs": {
|
|
"benchmarkConfig": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"durationSecs": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"intensity": {
|
|
"type": "integer"
|
|
},
|
|
"coreFilter": {
|
|
"type": "integer"
|
|
},
|
|
"multiCore": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": ["durationSecs", "intensity", "coreFilter", "multiCore"]
|
|
},
|
|
"cpuInfo": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"brandString": {
|
|
"type": "string"
|
|
},
|
|
"vendorID": {
|
|
"type": "string"
|
|
},
|
|
"physicalCores": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"logicalCores": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"baseClockMHz": {
|
|
"type": "integer",
|
|
"description": "Current server schema expects an integer MHz value."
|
|
},
|
|
"boostClockMHz": {
|
|
"type": "integer"
|
|
},
|
|
"l1DataKB": {
|
|
"type": "integer"
|
|
},
|
|
"l2KB": {
|
|
"type": "integer"
|
|
},
|
|
"l3MB": {
|
|
"type": "integer"
|
|
},
|
|
"isHybrid": {
|
|
"type": "boolean"
|
|
},
|
|
"has3DVCache": {
|
|
"type": "boolean"
|
|
},
|
|
"pCoreCount": {
|
|
"type": "integer"
|
|
},
|
|
"eCoreCount": {
|
|
"type": "integer"
|
|
},
|
|
"cores": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/cpuCoreDescriptor"
|
|
}
|
|
},
|
|
"supportedFeatures": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": ["brandString", "physicalCores", "logicalCores"]
|
|
},
|
|
"cpuCoreDescriptor": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"LogicalID": {
|
|
"type": "integer"
|
|
},
|
|
"PhysicalID": {
|
|
"type": "integer"
|
|
},
|
|
"CoreID": {
|
|
"type": "integer"
|
|
},
|
|
"Type": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": ["LogicalID", "PhysicalID", "CoreID", "Type"]
|
|
},
|
|
"coreResult": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"logicalID": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"coreType": {
|
|
"type": "string"
|
|
},
|
|
"mOpsPerSec": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"totalOps": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"required": ["logicalID", "coreType", "mOpsPerSec", "totalOps"]
|
|
},
|
|
"benchmarkResult": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"config": {
|
|
"$ref": "#/$defs/benchmarkConfig"
|
|
},
|
|
"cpuInfo": {
|
|
"$ref": "#/$defs/cpuInfo"
|
|
},
|
|
"startedAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"duration": {
|
|
"type": "integer"
|
|
},
|
|
"totalOps": {
|
|
"type": "integer"
|
|
},
|
|
"mOpsPerSec": {
|
|
"type": "number"
|
|
},
|
|
"score": {
|
|
"type": "integer"
|
|
},
|
|
"coreResults": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/coreResult"
|
|
}
|
|
}
|
|
},
|
|
"required": ["config", "cpuInfo", "startedAt", "duration", "totalOps", "mOpsPerSec", "score", "coreResults"]
|
|
},
|
|
"systemInfo": {
|
|
"type": "object",
|
|
"description": "Optional analytics and environment metadata. Clients may omit this entire object.",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"hostname": {
|
|
"type": "string"
|
|
},
|
|
"osName": {
|
|
"type": "string"
|
|
},
|
|
"osVersion": {
|
|
"type": "string"
|
|
},
|
|
"distro": {
|
|
"type": "string"
|
|
},
|
|
"kernelVersion": {
|
|
"type": "string"
|
|
},
|
|
"kernelArch": {
|
|
"type": "string"
|
|
},
|
|
"architecture": {
|
|
"type": "string"
|
|
},
|
|
"locale": {
|
|
"type": "string"
|
|
},
|
|
"timezone": {
|
|
"type": "string"
|
|
},
|
|
"region": {
|
|
"type": "string"
|
|
},
|
|
"country": {
|
|
"type": "string"
|
|
},
|
|
"city": {
|
|
"type": "string"
|
|
},
|
|
"isp": {
|
|
"type": "string"
|
|
},
|
|
"sessionID": {
|
|
"type": "string"
|
|
},
|
|
"userID": {
|
|
"type": "string"
|
|
},
|
|
"clientVersion": {
|
|
"type": "string"
|
|
},
|
|
"appVersion": {
|
|
"type": "string"
|
|
},
|
|
"ipAddress": {
|
|
"type": "string",
|
|
"description": "May be supplied by the client, and may also be enriched by the server from the request."
|
|
},
|
|
"forwardedFor": {
|
|
"type": "string"
|
|
},
|
|
"userAgent": {
|
|
"type": "string"
|
|
},
|
|
"extra": {
|
|
"type": "object",
|
|
"description": "Free-form extension point for future analytics.",
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|