profiles/monitoring-server: Fetch monitoring targets from json file
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
./hetzner-cloud
|
||||
./hydra-build-machine
|
||||
./mercury-vm
|
||||
./monitoring-server
|
||||
./netcup
|
||||
./network-fallback-dhcp
|
||||
./router
|
||||
|
91
profiles/monitoring-server/default.nix
Normal file
91
profiles/monitoring-server/default.nix
Normal 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);
|
||||
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user