diff --git a/clients/quadraticserver/stats/grafana.nix b/clients/quadraticserver/stats/grafana.nix index 12f9d51..bef488f 100644 --- a/clients/quadraticserver/stats/grafana.nix +++ b/clients/quadraticserver/stats/grafana.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, ... }@attrs: let secretName = "grafanaSecret"; @@ -20,6 +20,7 @@ in enable = true; declarativePlugins = [ ]; settings = { + "auth.anonymous".enabled = true; analytics.feedback_links_enabled = false; users.default_theme = "system"; server = { @@ -35,6 +36,23 @@ in admin_user = "quadradical"; admin_password = "$__file{${credentialDirectory}${passwordName}}"; }; + + dashboards.default_home_dashboard_path = toString ( + (import ../../../lib/status.nix attrs) [ + { + name = "Continuwuity (Matrix)"; + service = "continuwuity.service"; + } + { + name = "Forgejo (Git)"; + service = "forgejo.service"; + } + { + name = "SearXNG (Search)"; + service = "searx.service"; + } + ] + ); }; provision = { @@ -43,6 +61,7 @@ in { name = "Prometheus"; type = "prometheus"; + uid = "prometheus"; url = with config.services.prometheus; "http://${listenAddress}:${toString port}"; jsonData.timeInterval = config.services.prometheus.globalConfig.scrape_interval; } diff --git a/clients/quadraticserver/stats/prometheus.nix b/clients/quadraticserver/stats/prometheus.nix index e0b2ac1..2ba8dab 100644 --- a/clients/quadraticserver/stats/prometheus.nix +++ b/clients/quadraticserver/stats/prometheus.nix @@ -4,7 +4,7 @@ enable = true; listenAddress = "127.0.0.7"; - globalConfig.scrape_interval = "10s"; + globalConfig.scrape_interval = "3s"; scrapeConfigs = [ { job_name = "node"; diff --git a/lib/status.nix b/lib/status.nix new file mode 100644 index 0000000..7bb4e6c --- /dev/null +++ b/lib/status.nix @@ -0,0 +1,59 @@ +{ pkgs, lib, ... }: +services: +pkgs.writers.writeJSON "status.json" { + title = "Service Status"; + panels = map ( + { name, service }: + { + datasource = { + type = "prometheus"; + uid = "prometheus"; + }; + fieldConfig = { + defaults = { + color = { + mode = "thresholds"; + }; + mappings = [ + { + options = { + "0" = { + color = "red"; + index = 1; + text = "Failed"; + }; + "1" = { + color = "green"; + index = 0; + text = "Running"; + }; + }; + type = "value"; + } + ]; + thresholds = { + mode = "absolute"; + steps = [ + { + color = "red"; + value = 0; + } + { + color = "green"; + value = 1; + } + ]; + }; + unit = "none"; + }; + }; + targets = [ + { + expr = "node_systemd_unit_state{name=\"${service}\",state=\"active\"}"; + } + ]; + title = name; + type = "stat"; + } + ) services; +}