diff --git a/internal/config/metricSchema.go b/internal/config/metricSchema.go index be6244f..89c6fbf 100644 --- a/internal/config/metricSchema.go +++ b/internal/config/metricSchema.go @@ -8,128 +8,19 @@ package config var metricConfigSchema = ` { "type": "object", - "properties": { - "addr": { - "description": "Address where the http (or https) server will listen on (for example: 'localhost:80').", - "type": "string" - }, - "api-allowed-ips": { - "description": "Addresses from which secured API endpoints can be reached", - "type": "array", - "items": { + "description": "Map of metric names to their configuration.", + "additionalProperties": { + "type": "object", + "properties": { + "frequency": { + "description": "Sampling frequency in seconds.", + "type": "integer" + }, + "aggregation": { + "description": "Aggregation strategy: 'sum', 'avg', or 'null'.", "type": "string" } }, - "user": { - "description": "Drop root permissions once .env was read and the port was taken. Only applicable if using privileged port.", - "type": "string" - }, - "group": { - "description": "Drop root permissions once .env was read and the port was taken. Only applicable if using privileged port.", - "type": "string" - }, - "disable-authentication": { - "description": "Disable authentication (for everything: API, Web-UI, ...).", - "type": "boolean" - }, - "embed-static-files": { - "description": "If all files in web/frontend/public should be served from within the binary itself (they are embedded) or not.", - "type": "boolean" - }, - "static-files": { - "description": "Folder where static assets can be found, if embed-static-files is false.", - "type": "string" - }, - "db": { - "description": "Path to SQLite database file (e.g., './var/job.db')", - "type": "string" - }, - "enable-job-taggers": { - "description": "Turn on automatic application and jobclass taggers", - "type": "boolean" - }, - "validate": { - "description": "Validate all input json documents against json schema.", - "type": "boolean" - }, - "session-max-age": { - "description": "Specifies for how long a session shall be valid as a string parsable by time.ParseDuration(). If 0 or empty, the session/token does not expire!", - "type": "string" - }, - "https-cert-file": { - "description": "Filepath to SSL certificate. If also https-key-file is set use HTTPS using those certificates.", - "type": "string" - }, - "https-key-file": { - "description": "Filepath to SSL key file. If also https-cert-file is set use HTTPS using those certificates.", - "type": "string" - }, - "redirect-http-to": { - "description": "If not the empty string and addr does not end in :80, redirect every request incoming at port 80 to that url.", - "type": "string" - }, - "stop-jobs-exceeding-walltime": { - "description": "If not zero, automatically mark jobs as stopped running X seconds longer than their walltime. Only applies if walltime is set for job.", - "type": "integer" - }, - "short-running-jobs-duration": { - "description": "Do not show running jobs shorter than X seconds.", - "type": "integer" - }, - "emission-constant": { - "description": ".", - "type": "integer" - }, - "cron-frequency": { - "description": "Frequency of cron job workers.", - "type": "object", - "properties": { - "duration-worker": { - "description": "Duration Update Worker [Defaults to '5m']", - "type": "string" - }, - "footprint-worker": { - "description": "Metric-Footprint Update Worker [Defaults to '10m']", - "type": "string" - } - } - }, - "enable-resampling": { - "description": "Enable dynamic zoom in frontend metric plots.", - "type": "object", - "properties": { - "minimum-points": { - "description": "Minimum points to trigger resampling of time-series data.", - "type": "integer" - }, - "trigger": { - "description": "Trigger next zoom level at less than this many visible datapoints.", - "type": "integer" - }, - "resolutions": { - "description": "Array of resampling target resolutions, in seconds.", - "type": "array", - "items": { - "type": "integer" - } - } - }, - "required": ["trigger", "resolutions"] - }, - "api-subjects": { - "description": "NATS subjects configuration for subscribing to job and node events.", - "type": "object", - "properties": { - "subject-job-event": { - "description": "NATS subject for job events (start_job, stop_job)", - "type": "string" - }, - "subject-node-state": { - "description": "NATS subject for node state updates", - "type": "string" - } - }, - "required": ["subject-job-event", "subject-node-state"] - } + "required": ["frequency", "aggregation"] } }`