diff options
Diffstat (limited to 'flakes/private/monitoring/to_objects.nix')
-rw-r--r-- | flakes/private/monitoring/to_objects.nix | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/flakes/private/monitoring/to_objects.nix b/flakes/private/monitoring/to_objects.nix new file mode 100644 index 0000000..57a71ad --- /dev/null +++ b/flakes/private/monitoring/to_objects.nix | |||
@@ -0,0 +1,77 @@ | |||
1 | { lib }: | ||
2 | with lib.attrsets; | ||
3 | with lib.strings; | ||
4 | with lib.lists; | ||
5 | with lib.trivial; | ||
6 | let | ||
7 | pad = width: str: let | ||
8 | padWidth = width - stringLength str; | ||
9 | padding = concatStrings (genList (const " ") padWidth); | ||
10 | in str + optionalString (padWidth > 0) padding; | ||
11 | toStr = k: v: | ||
12 | if k == "check_command" && builtins.isList v | ||
13 | then builtins.concatStringsSep "!" v | ||
14 | else builtins.toString v; | ||
15 | |||
16 | toService = service: '' | ||
17 | define service { | ||
18 | ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v: | ||
19 | " ${pad 30 k} ${toStr k v}" | ||
20 | ) (filterAttrs (k: v: ! hasPrefix "__passive_" k) service))} | ||
21 | } | ||
22 | ''; | ||
23 | toServices = services: builtins.concatStringsSep "\n" (map toService services); | ||
24 | |||
25 | toCommand = k: v: '' | ||
26 | define command { | ||
27 | ${pad 30 "command_name"} ${k} | ||
28 | ${pad 30 "command_line"} ${v} | ||
29 | } | ||
30 | ''; | ||
31 | toCommands = a: builtins.concatStringsSep "\n" (mapAttrsToList toCommand a); | ||
32 | |||
33 | toOther = keyname: k: v: '' | ||
34 | define ${keyname} { | ||
35 | ${pad 30 "${keyname}_name"} ${k} | ||
36 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | ||
37 | " ${pad 30 kk} ${vv}" | ||
38 | ) v)} | ||
39 | } | ||
40 | ''; | ||
41 | toOtherNoName = keyname: v: '' | ||
42 | define ${keyname} { | ||
43 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | ||
44 | " ${pad 30 kk} ${vv}" | ||
45 | ) v)} | ||
46 | } | ||
47 | ''; | ||
48 | toOthers = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toOther keyname) a); | ||
49 | toOthersArray = keyname: a: builtins.concatStringsSep "\n" (map (toOtherNoName keyname) a); | ||
50 | |||
51 | toTemplate = keyname: k: v: '' | ||
52 | define ${keyname} { | ||
53 | ${pad 30 "name"} ${k} | ||
54 | ${pad 30 "register"} 0 | ||
55 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | ||
56 | " ${pad 30 kk} ${builtins.toString vv}" | ||
57 | ) v)} | ||
58 | } | ||
59 | ''; | ||
60 | toTemplates' = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toTemplate keyname) a); | ||
61 | toTemplates = v: builtins.concatStringsSep "\n" (mapAttrsToList toTemplates' v); | ||
62 | |||
63 | toObjects' = keyname: v: | ||
64 | if keyname == "service" | ||
65 | then toServices v | ||
66 | else if keyname == "command" | ||
67 | then toCommands v | ||
68 | else if keyname == "templates" | ||
69 | then toTemplates v | ||
70 | else if builtins.elem keyname ["hostgroup" "host" "contactgroup" "contact" "timeperiod" "servicegroup"] | ||
71 | then toOthers keyname v | ||
72 | else if builtins.elem keyname ["servicedependency" "hostdependency"] | ||
73 | then toOthersArray keyname v | ||
74 | else builtins.trace ("Warning: unknown object type " + keyname) ""; | ||
75 | toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v); | ||
76 | in | ||
77 | toObjects | ||