feat: push directly to prometheus

This commit is contained in:
LunaChocken
2026-05-19 21:57:54 +01:00
parent c31a460175
commit 781e8f45fa
6 changed files with 537 additions and 69 deletions
+39
View File
@@ -0,0 +1,39 @@
from time import time
def aggregate(domains: dict[str, list[str]]) -> list[dict]:
data = {"no_auth": 0, "no_wan": 0, "auth": 0, "wan": 0, "none": 0}
for domain, imports in domains.items():
num = len(imports)
if num == 0:
data["none"] += 1
continue
if "auth" in imports:
data["auth"] += 1
if "wan" in imports:
data["wan"] += 1
if "auth" not in imports:
data["no_auth"] += 1
if "wan" not in imports:
data["no_wan"] += 1
# return data
p = [
{
"metric": {"__name__": "caddy_domain_imports", "import": "caddy_"+imported, "host": "server1"},
"values": [count],
"timestamps": [int(time())],
}
for imported, count in data.items()
]
return p
def domain_imports(domains: dict[str, list[str]]):
# print(domains)
return [
{"metric": {"__name__": "caddy_domain_imported", "domain": domain, "auth": 1 if "auth" in import_lists else 0, "wan": 1 if "wan" in import_lists else 0}, "values": [1], "timestamps": [int(time())]}
for domain, import_lists in domains.items()
]
+4 -12
View File
@@ -1,7 +1,7 @@
import shlex
def tokenize(text):
def tokenize(text) -> list:
lexer = shlex.shlex(text, posix=True)
lexer.whitespace_split = True
lexer.commenters = "#"
@@ -24,12 +24,9 @@ def parse_sites_imports(text):
if i + 1 < len(tokens) and tokens[i + 1] == "{":
if depth == 0:
sites = [s.strip() for s in tok.split(",")]
for s in sites:
result.setdefault(s, [])
current_site = sites
depth += 1
i += 2
continue
@@ -48,13 +45,11 @@ def parse_sites_imports(text):
result[site].append(name)
i += 2
continue
i += 1
return result
def filter_globals_out(data):
def filter_globals_out(data) -> dict:
import re
ret = dict()
@@ -65,11 +60,8 @@ def filter_globals_out(data):
return ret
def parse(data):
data = parse_sites_imports(data)
data = filter_globals_out(data)
return data
def parse(caddy_string) -> dict[str, list[str]]:
return filter_globals_out(parse_sites_imports(caddy_string))
if __name__ == "__main__":
with open("Caddyfile") as f: