Log audit startup and validate audit path

This commit is contained in:
2026-02-08 00:58:27 +03:00
parent 80bd01a766
commit ec30d09c52
2 changed files with 24 additions and 1 deletions

View File

@@ -8,7 +8,7 @@ from services.alerts import monitor_resources, monitor_smart
from services.metrics import MetricsStore, start_sampler from services.metrics import MetricsStore, start_sampler
from services.queue import worker as queue_worker from services.queue import worker as queue_worker
from services.notify import notify from services.notify import notify
from services.audit import AuditMiddleware from services.audit import AuditMiddleware, audit_start
import state import state
import handlers.menu import handlers.menu
import handlers.status import handlers.status
@@ -31,6 +31,7 @@ async def notify_start():
async def main(): async def main():
dp.update.outer_middleware(AuditMiddleware(cfg)) dp.update.outer_middleware(AuditMiddleware(cfg))
audit_start(cfg)
state.DOCKER_MAP.clear() state.DOCKER_MAP.clear()
state.DOCKER_MAP.update(await discover_containers(cfg)) state.DOCKER_MAP.update(await discover_containers(cfg))
if cfg.get("docker", {}).get("watchdog", True): if cfg.get("docker", {}).get("watchdog", True):

View File

@@ -40,6 +40,28 @@ def get_audit_logger(cfg: dict[str, Any]) -> logging.Logger:
return logger return logger
def audit_health(cfg: dict[str, Any]) -> tuple[bool, str]:
path = _get_audit_path(cfg)
directory = os.path.dirname(path)
try:
os.makedirs(directory, exist_ok=True)
if not os.path.exists(path):
with open(path, "a", encoding="utf-8"):
pass
if not os.access(path, os.W_OK):
return False, f"Audit log not writable: {path}"
except Exception as e:
return False, f"Audit log error: {e}"
return True, path
def audit_start(cfg: dict[str, Any]) -> None:
logger = get_audit_logger(cfg)
ok, detail = audit_health(cfg)
status = "ok" if ok else "error"
logger.info("startup\tstatus=%s\tpath=%s", status, detail)
def _user_label(message: Message | CallbackQuery) -> str: def _user_label(message: Message | CallbackQuery) -> str:
user = message.from_user user = message.from_user
if not user: if not user: