Release 1.7.0: Grafana catalog, ingress/IRM, tests
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
from fastapi import Request
|
||||
|
||||
from onguard24.config import Settings
|
||||
from onguard24.grafana_sources import iter_grafana_sources
|
||||
from onguard24.integrations import forgejo_api, grafana_api
|
||||
from onguard24.vaultcheck import ping as vault_ping
|
||||
|
||||
@ -31,31 +32,46 @@ async def build(request: Request) -> dict:
|
||||
else:
|
||||
out["vault"] = "disabled"
|
||||
|
||||
gu = settings.grafana_url.strip()
|
||||
if not gu:
|
||||
sources = iter_grafana_sources(settings)
|
||||
if not sources:
|
||||
out["grafana"] = "disabled"
|
||||
elif settings.grafana_service_account_token.strip():
|
||||
ok, err = await grafana_api.ping(gu, settings.grafana_service_account_token)
|
||||
if ok:
|
||||
user, _ = await grafana_api.get_signed_in_user(gu, settings.grafana_service_account_token)
|
||||
entry: dict = {"status": "ok", "url": gu, "api": "authenticated"}
|
||||
if user:
|
||||
login = user.get("login") or user.get("email")
|
||||
if login:
|
||||
entry["service_account_login"] = login
|
||||
out["grafana"] = entry
|
||||
else:
|
||||
out["grafana"] = {"status": "error", "detail": err, "url": gu}
|
||||
else:
|
||||
live_ok, live_err = await grafana_api.health_live(gu)
|
||||
if live_ok:
|
||||
out["grafana"] = {
|
||||
"status": "reachable",
|
||||
"url": gu,
|
||||
"detail": "задай GRAFANA_SERVICE_ACCOUNT_TOKEN для вызовов API",
|
||||
}
|
||||
instances: list[dict] = []
|
||||
for src in sources:
|
||||
entry: dict = {"slug": src.slug, "url": src.api_url}
|
||||
if src.api_token.strip():
|
||||
ok, err = await grafana_api.ping(src.api_url, src.api_token)
|
||||
if ok:
|
||||
user, _ = await grafana_api.get_signed_in_user(src.api_url, src.api_token)
|
||||
entry["status"] = "ok"
|
||||
entry["api"] = "authenticated"
|
||||
if user:
|
||||
login = user.get("login") or user.get("email")
|
||||
if login:
|
||||
entry["service_account_login"] = login
|
||||
else:
|
||||
entry["status"] = "error"
|
||||
entry["detail"] = err
|
||||
else:
|
||||
live_ok, live_err = await grafana_api.health_live(src.api_url)
|
||||
if live_ok:
|
||||
entry["status"] = "reachable"
|
||||
entry["detail"] = "задай api_token в GRAFANA_SOURCES_JSON для проверки API"
|
||||
else:
|
||||
entry["status"] = "error"
|
||||
entry["detail"] = live_err
|
||||
instances.append(entry)
|
||||
|
||||
if all(i.get("status") == "ok" for i in instances):
|
||||
agg = "ok"
|
||||
elif any(i.get("status") == "error" for i in instances):
|
||||
agg = "error"
|
||||
else:
|
||||
out["grafana"] = {"status": "error", "detail": live_err, "url": gu}
|
||||
agg = "reachable"
|
||||
out["grafana"] = {
|
||||
"status": agg,
|
||||
"instances": instances,
|
||||
}
|
||||
|
||||
fj = settings.forgejo_url.strip()
|
||||
if not fj:
|
||||
|
||||
Reference in New Issue
Block a user