diff --git a/configs/config.json b/configs/config.json index 6211fa0..49f1328 100644 --- a/configs/config.json +++ b/configs/config.json @@ -1,10 +1,38 @@ { "main": { - "addr": "0.0.0.0:443", - "https-cert-file": "/etc/letsencrypt/live/url/fullchain.pem", - "https-key-file": "/etc/letsencrypt/live/url/privkey.pem", + "addr": "0.0.0.0:8082", + "https-cert-file": "", + "https-key-file": "", "jwt-public-key": "kzfYrYy+TzpanWZHJ5qSdMj5uKUWgq74BWhQG6copP0=" }, + "nats": { + "address": "nats://0.0.0.0:4222", + "username": "root", + "password": "root" + }, + "metric-store": { + "checkpoints": { + "interval": "12h", + "directory": "./var/checkpoints" + }, + "memory-cap": 100, + "retention-in-memory": "48h", + "cleanup": { + "mode": "archive", + "interval": "48h", + "directory": "./var/archive" + }, + "nats-subscriptions": [ + { + "subscribe-to": "hpc-nats", + "cluster-tag": "fritz" + }, + { + "subscribe-to": "hpc-nats", + "cluster-tag": "alex" + } + ] + }, "metrics": { "debug_metric": { "frequency": 60, @@ -170,34 +198,5 @@ "frequency": 60, "aggregation": "avg" } - }, - "nats": { - "address": "nats://0.0.0.0:4222", - "username": "root", - "password": "root" - }, - "metric-store": { - "checkpoints": { - "interval": "12h", - "directory": "./var/checkpoints" - }, - "memory-cap": 100, - "retention-in-memory": "48h", - "cleanup": { - "mode": "archive", - "interval": "48h", - "directory": "./var/archive" - }, - "nats-subscriptions": [ - { - "subscribe-to": "hpc-nats", - "cluster-tag": "fritz" - }, - { - "subscribe-to": "hpc-nats", - "cluster-tag": "alex" - } - ] } -} - +} \ No newline at end of file diff --git a/internal/api/metricstore.go b/internal/api/metricstore.go index 2239f12..e043079 100644 --- a/internal/api/metricstore.go +++ b/internal/api/metricstore.go @@ -416,21 +416,31 @@ func debugMetrics(rw http.ResponseWriter, r *http.Request) { // @security ApiKeyAuth // @router /healthcheck/ [get] func metricsHealth(rw http.ResponseWriter, r *http.Request) { - rawCluster := r.URL.Query().Get("cluster") - rawNode := r.URL.Query().Get("node") + req := metricstore.HealthCheckReq{} - if rawCluster == "" || rawNode == "" { - handleError(errors.New("'cluster' and 'node' are required query parameter"), http.StatusBadRequest, rw) + dec := json.NewDecoder(r.Body) + dec.DisallowUnknownFields() + + if err := dec.Decode(&req); err != nil { + handleError(fmt.Errorf("parsing request body failed: %w", err), + http.StatusBadRequest, rw) return } rw.Header().Add("Content-Type", "application/json") - selector := []string{rawCluster, rawNode} - ms := metricstore.GetMemoryStore() - if err := ms.HealthCheck(bufio.NewWriter(rw), selector); err != nil { + results, err := ms.HealthCheck(req.Cluster, req.Nodes, req.MetricNames) + if err != nil { handleError(err, http.StatusBadRequest, rw) return } + + rw.Header().Set("Content-Type", "application/json") + bw := bufio.NewWriter(rw) + defer bw.Flush() + if err := json.NewEncoder(bw).Encode(results); err != nil { + log.Print(err) + return + } } diff --git a/internal/config/metricSchema.go b/internal/config/metricSchema.go index 89c6fbf..8cfb705 100644 --- a/internal/config/metricSchema.go +++ b/internal/config/metricSchema.go @@ -18,7 +18,7 @@ var metricConfigSchema = ` }, "aggregation": { "description": "Aggregation strategy: 'sum', 'avg', or 'null'.", - "type": "string" + "type": ["string", "null"] } }, "required": ["frequency", "aggregation"]