This commit is contained in:
Mateusz Gruszczyński
2026-03-24 15:00:54 +01:00
parent db26938791
commit 55a3c1ab7b
6 changed files with 256 additions and 32 deletions

View File

@@ -165,6 +165,34 @@ class InfluxHTTPService:
logger.warning("Influx last_before error for %s: %s", metric.id, exc)
return None
def diagnose(self) -> dict:
config = self.settings.influx
payload = {
"status": "connected",
"reachable": True,
"database_exists": False,
"url": self.base_url,
"database": config["database"],
"username_masked": _mask_secret(config.get("username") or ""),
"verify_ssl": bool(config.get("verify_ssl", False)),
"timeout_seconds": int(config.get("timeout_seconds", 15)),
"error": None,
}
try:
series = self._execute("SHOW DATABASES")
databases: set[str] = set()
for item in series:
for row in self._rows_from_series(item):
value = row.get("name")
if isinstance(value, str):
databases.add(value)
payload["database_exists"] = config["database"] in databases
except Exception as exc:
payload["status"] = "error"
payload["reachable"] = False
payload["error"] = str(exc)
return payload
def _single_value(self, query: str) -> SeriesPoint | None:
try:
series = self._execute(query)
@@ -239,3 +267,11 @@ def _parse_time(value: str | None) -> datetime | None:
return datetime.fromisoformat(value.replace("Z", "+00:00"))
except ValueError:
return None
def _mask_secret(value: str) -> str:
if not value:
return ""
if len(value) <= 2:
return "*" * len(value)
return value[:1] + ("*" * max(len(value) - 2, 1)) + value[-1:]