1
0

profiles/monitoring-server: Fetch monitoring targets from json file

This commit is contained in:
2025-06-01 13:31:43 +02:00
parent 92f8495111
commit e475e46e3c
6 changed files with 150 additions and 31 deletions

View File

@@ -14,6 +14,7 @@
./hetzner-cloud
./hydra-build-machine
./mercury-vm
./monitoring-server
./netcup
./network-fallback-dhcp
./router

View File

@@ -0,0 +1,91 @@
{ config, lib, ... }:
with lib;
let
mkAttrsOfSubmoduleOption = description: submoduleOptions: mkOption {
type = with types; attrsOf (submodule { options = submoduleOptions; });
default = {};
description = description;
};
mkSubmoduleOption = description: submoduleOptions: mkOption {
type = types.submodule { options = submoduleOptions; };
default = {};
description = description;
};
mkProbeOption = description: submoduleOptions: mkSubmoduleOption description ({
enable = mkEnableOption "Monitor target using this probe";
} // submoduleOptions);
mkProtocolsOption = mkOption {
type = with types; listOf (enum [ "ipv6" "ipv4" ]);
default = [ "ipv6" "ipv4" ];
description = "Protocols to retrieve metrics for";
};
mkTargetsListOption = mkOption {
type = with types; listOf str;
default = [];
};
listContains = searchValue: listToSearch: any (element: element == searchValue) listToSearch;
targetsForProbe = probeName: condition: attrNames (filterAttrs (targetName: targetConfig:
targetConfig.${probeName}.enable == true && (condition targetConfig.${probeName})
) config.profiles.clerie.monitoring-server.targets);
in {
options.profiles.clerie.monitoring-server = {
targets = mkAttrsOfSubmoduleOption "Monitoring targets config" {
_comment = mkOption {
type = types.str;
default = "";
};
clerie-uberspace = mkProbeOption "This target is a uberspace host managed by clerie" {};
http = mkProbeOption "Monitor HTTP" {
protocols = mkProtocolsOption;
};
icmp = mkProbeOption "Monitor HTTP" {
protocols = mkProtocolsOption;
};
synapse = mkProbeOption "Monitor Synapse Matrix server" {};
};
probeTargets = mkSubmoduleOption "Target per probe" {
blackbox-http4 = mkTargetsListOption;
blackbox-http6 = mkTargetsListOption;
blackbox-icmp4 = mkTargetsListOption;
blackbox-icmp6 = mkTargetsListOption;
node-exporter-uberspace = mkTargetsListOption;
blackbox-local-synapse = mkTargetsListOption;
};
};
config = {
profiles.clerie.monitoring-server.probeTargets.blackbox-http4 = targetsForProbe "http" (probeConfig:
(listContains "ipv4" probeConfig.protocols)
);
profiles.clerie.monitoring-server.probeTargets.blackbox-http6 = targetsForProbe "http" (probeConfig:
(listContains "ipv6" probeConfig.protocols)
);
profiles.clerie.monitoring-server.probeTargets.blackbox-icmp4 = targetsForProbe "icmp" (probeConfig:
(listContains "ipv4" probeConfig.protocols)
);
profiles.clerie.monitoring-server.probeTargets.blackbox-icmp6 = targetsForProbe "icmp" (probeConfig:
(listContains "ipv6" probeConfig.protocols)
);
profiles.clerie.monitoring-server.probeTargets.node-exporter-uberspace = targetsForProbe "clerie-uberspace" (_: true);
profiles.clerie.monitoring-server.probeTargets.blackbox-local-synapse = targetsForProbe "synapse" (_: true);
};
}