Files
BanGUI/Docs/Tasks.md

119 KiB

BanGUI — Task List

This document breaks the entire BanGUI project into development stages, ordered so that each stage builds on the previous one. Every task is described in prose with enough detail for a developer to begin work. References point to the relevant documentation.


  1. DONE — fix ban list 500 error Root cause: compose.debug.yml mounted fail2ban-dev-config as a named Docker volume for the backend container, while fail2ban used a bind-mount of the same local directory. The backend's /config was therefore an empty volume and could not open the fail2ban SQLite database that fail2ban reported via get dbfile. Fix: Changed the backend volume entry from fail2ban-dev-config:/config:ro to ./fail2ban-dev-config:/config:ro (bind-mount), and removed the now-unused named volume.

    1. issue with ban list client.ts:55 GET http://127.0.0.1:5173/api/dashboard/bans?range=24h&page=1&page_size=100 500 (Internal Server Error) request @ client.ts:55 get @ client.ts:88 fetchBans @ dashboard.ts:43 (anonymous) @ useBans.ts:68 (anonymous) @ useBans.ts:90 commitHookEffectListMount @ react-dom.development.js:23189 commitPassiveMountOnFiber @ react-dom.development.js:24965 commitPassiveMountEffects_complete @ react-dom.development.js:24930 commitPassiveMountEffects_begin @ react-dom.development.js:24917 commitPassiveMountEffects @ react-dom.development.js:24905 flushPassiveEffectsImpl @ react-dom.development.js:27078 flushPassiveEffects @ react-dom.development.js:27023 (anonymous) @ react-dom.development.js:26808 workLoop @ scheduler.development.js:266 flushWork @ scheduler.development.js:239 performWorkUntilDeadline @ scheduler.development.js:533 client.ts:55 GET http://127.0.0.1:5173/api/dashboard/bans?range=24h&page=1&page_size=100 500 (Internal Server Error)

9110898d07c7 INFO: 10.89.0.3:55926 - "GET /api/dashboard/bans?range=24h&page=1&page_size=100 HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 107, in get_dashboard_bans 9110898d07c7 return await ban_service.list_bans( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 181, in list_bans 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 INFO: 10.89.0.3:55942 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:55946 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 Looking for jobs to run 9110898d07c7 Next wakeup is due at 2026-03-06 17:47:54.843643+00:00 (in 29.999878 seconds) 9110898d07c7 Running job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:47:54 UTC)" (scheduled at 2026-03-06 17:47:24.843643+00:00) 9110898d07c7 {"command": ["ping"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:24.843895Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["ping"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:24.844510Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:24.844635Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:24.844940Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:24.844983Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:24.845150Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:24.845188Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:24.845396Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"version": "1.1.0", "active_jails": 1, "total_bans": 0, "total_failures": 0, "event": "fail2ban_probe_ok", "timestamp": "2026-03-06T17:47:24.845437Z", "logger": "app.services.health_service", "level": "debug"} 9110898d07c7 {"online": true, "version": "1.1.0", "active_jails": 1, "event": "health_check_complete", "timestamp": "2026-03-06T17:47:24.845498Z", "logger": "app.tasks.health_check", "level": "debug"} 9110898d07c7 Job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:47:54 UTC)" executed successfully 9110898d07c7 INFO: 127.0.0.1:58940 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 INFO: 127.0.0.1:41956 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:54778 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:54780 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:54790 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:54804 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:51.158844Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:51.159260Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"db_path": "/config/fail2ban/fail2ban.sqlite3", "since": 1772732871, "range": "24h", "event": "ban_service_list_accesses", "timestamp": "2026-03-06T17:47:51.159342Z", "logger": "app.services.ban_service", "level": "info"} 9110898d07c7 executing <function connect..connector at 0x7abad4a2aac0> 9110898d07c7 returning exception unable to open database file 9110898d07c7 executing <function Connection.stop..close_and_stop at 0x7abad4a29580> 9110898d07c7 operation <function Connection.stop..close_and_stop at 0x7abad4a29580> completed 9110898d07c7 {"path": "/api/dashboard/accesses", "method": "GET", "event": "unhandled_exception", "timestamp": "2026-03-06T17:47:51.159773Z", "logger": "app.main", "level": "error", "exception": "Traceback (most recent call last):\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call\n with recv_stream, send_stream, collapse_excgroups():\n ^^^^^^^^^^^^^^^^^^^^\n File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit\n self.gen.throw(value)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/main.py", line 294, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/routers/dashboard.py", line 152, in get_dashboard_accesses\n return await ban_service.list_accesses(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/services/ban_service.py", line 280, in list_accesses\n async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db:\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter\n return await self\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect\n self._connection = await future\n ^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread\n result = function()\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector\n return sqlite3.connect(loc, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file"} 9110898d07c7 INFO: 10.89.0.3:54816 - "GET /api/dashboard/accesses?range=24h&page=1&page_size=100 HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 152, in get_dashboard_accesses 9110898d07c7 return await ban_service.list_accesses( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 280, in list_accesses 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 Looking for jobs to run 9110898d07c7 Next wakeup is due at 2026-03-06 17:48:24.843643+00:00 (in 29.999538 seconds) 9110898d07c7 Running job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:48:24 UTC)" (scheduled at 2026-03-06 17:47:54.843643+00:00) 9110898d07c7 {"command": ["ping"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:54.844275Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["ping"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:54.844782Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:54.844845Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:54.845117Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:54.845171Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:54.845424Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:47:54.845486Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:47:54.845745Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"version": "1.1.0", "active_jails": 1, "total_bans": 0, "total_failures": 0, "event": "fail2ban_probe_ok", "timestamp": "2026-03-06T17:47:54.845805Z", "logger": "app.services.health_service", "level": "debug"} 9110898d07c7 {"online": true, "version": "1.1.0", "active_jails": 1, "event": "health_check_complete", "timestamp": "2026-03-06T17:47:54.845871Z", "logger": "app.tasks.health_check", "level": "debug"} 9110898d07c7 Job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:48:24 UTC)" executed successfully 9110898d07c7 INFO: 127.0.0.1:52658 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 INFO: 127.0.0.1:42840 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:59946 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:59952 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 Looking for jobs to run 9110898d07c7 Next wakeup is due at 2026-03-06 17:48:54.843643+00:00 (in 29.998906 seconds) 9110898d07c7 Running job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:48:54 UTC)" (scheduled at 2026-03-06 17:48:24.843643+00:00) 9110898d07c7 {"command": ["ping"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:24.844922Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["ping"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:24.845403Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:24.845477Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:24.845741Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:24.845783Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:24.846021Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:24.846060Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:24.846284Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"version": "1.1.0", "active_jails": 1, "total_bans": 0, "total_failures": 0, "event": "fail2ban_probe_ok", "timestamp": "2026-03-06T17:48:24.846340Z", "logger": "app.services.health_service", "level": "debug"} 9110898d07c7 {"online": true, "version": "1.1.0", "active_jails": 1, "event": "health_check_complete", "timestamp": "2026-03-06T17:48:24.846394Z", "logger": "app.tasks.health_check", "level": "debug"} 9110898d07c7 Job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:48:54 UTC)" executed successfully 9110898d07c7 INFO: 127.0.0.1:39434 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 INFO: 127.0.0.1:47306 - "GET /api/health HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:44266 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:44278 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 Looking for jobs to run 9110898d07c7 Next wakeup is due at 2026-03-06 17:49:24.843643+00:00 (in 29.999723 seconds) 9110898d07c7 Running job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:49:24 UTC)" (scheduled at 2026-03-06 17:48:54.843643+00:00) 9110898d07c7 {"command": ["ping"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:54.844056Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["ping"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:54.844512Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:54.844602Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["version"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:54.844871Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:54.844910Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:54.845133Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:48:54.845172Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["status", "bangui-sim"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:48:54.845364Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"version": "1.1.0", "active_jails": 1, "total_bans": 0, "total_failures": 0, "event": "fail2ban_probe_ok", "timestamp": "2026-03-06T17:48:54.845412Z", "logger": "app.services.health_service", "level": "debug"} 9110898d07c7 {"online": true, "version": "1.1.0", "active_jails": 1, "event": "health_check_complete", "timestamp": "2026-03-06T17:48:54.845463Z", "logger": "app.tasks.health_check", "level": "debug"} 9110898d07c7 Job "_run_probe (trigger: interval[0:00:30], next run at: 2026-03-06 17:49:24 UTC)" executed successfully 9110898d07c7 INFO: 127.0.0.1:57926 - "GET /api/health HTTP/1.1" 200 OK

9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:53218 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 INFO: 10.89.0.3:53230 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6495740>) completed 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:49:14.550932Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:49:14.551431Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"db_path": "/config/fail2ban/fail2ban.sqlite3", "since": 1772732954, "range": "24h", "event": "ban_service_list_bans", "timestamp": "2026-03-06T17:49:14.551521Z", "logger": "app.services.ban_service", "level": "info"} 9110898d07c7 executing <function connect..connector at 0x7abad4a08540> 9110898d07c7 returning exception unable to open database file 9110898d07c7 executing <function Connection.stop..close_and_stop at 0x7abad4b3ede0> 9110898d07c7 operation <function Connection.stop..close_and_stop at 0x7abad4b3ede0> completed 9110898d07c7 {"path": "/api/dashboard/bans", "method": "GET", "event": "unhandled_exception", "timestamp": "2026-03-06T17:49:14.552411Z", "logger": "app.main", "level": "error", "exception": "Traceback (most recent call last):\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call\n with recv_stream, send_stream, collapse_excgroups():\n ^^^^^^^^^^^^^^^^^^^^\n File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit\n self.gen.throw(value)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/main.py", line 294, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/routers/dashboard.py", line 107, in get_dashboard_bans\n return await ban_service.list_bans(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/services/ban_service.py", line 181, in list_bans\n async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db:\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter\n return await self\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect\n self._connection = await future\n ^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread\n result = function()\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector\n return sqlite3.connect(loc, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file"} 9110898d07c7 INFO: 10.89.0.3:53234 - "GET /api/dashboard/bans?range=24h&page=1&page_size=100 HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 107, in get_dashboard_bans 9110898d07c7 return await ban_service.list_bans( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 181, in list_bans 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad

  1. issues with access list

client.ts:55 GET http://127.0.0.1:5173/api/dashboard/accesses?range=24h&page=1&page_size=100 500 (Internal Server Error)

9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 INFO: 10.89.0.3:51584 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 INFO: 10.89.0.3:51594 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:50:15.290244Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:50:15.290773Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"db_path": "/config/fail2ban/fail2ban.sqlite3", "since": 1772733015, "range": "24h", "event": "ban_service_list_accesses", "timestamp": "2026-03-06T17:50:15.290865Z", "logger": "app.services.ban_service", "level": "info"} 9110898d07c7 executing <function connect..connector at 0x7abad4a08720> 9110898d07c7 returning exception unable to open database file 9110898d07c7 executing <function Connection.stop..close_and_stop at 0x7abad4a087c0> 9110898d07c7 operation <function Connection.stop..close_and_stop at 0x7abad4a087c0> completed 9110898d07c7 {"path": "/api/dashboard/accesses", "method": "GET", "event": "unhandled_exception", "timestamp": "2026-03-06T17:50:15.291399Z", "logger": "app.main", "level": "error", "exception": "Traceback (most recent call last):\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call\n with recv_stream, send_stream, collapse_excgroups():\n ^^^^^^^^^^^^^^^^^^^^\n File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit\n self.gen.throw(value)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/main.py", line 294, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/routers/dashboard.py", line 152, in get_dashboard_accesses\n return await ban_service.list_accesses(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/services/ban_service.py", line 280, in list_accesses\n async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db:\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter\n return await self\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect\n self._connection = await future\n ^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread\n result = function()\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector\n return sqlite3.connect(loc, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file"} 9110898d07c7 INFO: 10.89.0.3:51598 - "GET /api/dashboard/accesses?range=24h&page=1&page_size=100 HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 152, in get_dashboard_accesses 9110898d07c7 return await ban_service.list_accesses( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 280, in list_accesses 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7540>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 INFO: 10.89.0.3:51600 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6494ec0>) completed 9110898d07c7 INFO: 10.89.0.3:51606 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 INFO: 127.0.0.1:60528 - "GET /api/health HTTP/1.1" 200 OK

  1. World map

9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 INFO: 10.89.0.3:43234 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 INFO: 10.89.0.3:43236 - "GET /api/dashboard/status HTTP/1.1" 200 OK 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:50:59.369697Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:50:59.370154Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"db_path": "/config/fail2ban/fail2ban.sqlite3", "since": 1772733059, "range": "24h", "event": "ban_service_bans_by_country", "timestamp": "2026-03-06T17:50:59.370213Z", "logger": "app.services.ban_service", "level": "info"} 9110898d07c7 executing <function connect..connector at 0x7abad4a2aca0> 9110898d07c7 returning exception unable to open database file 9110898d07c7 executing <function Connection.stop..close_and_stop at 0x7abad4a2af20> 9110898d07c7 operation <function Connection.stop..close_and_stop at 0x7abad4a2af20> completed 9110898d07c7 {"path": "/api/dashboard/bans/by-country", "method": "GET", "event": "unhandled_exception", "timestamp": "2026-03-06T17:50:59.370651Z", "logger": "app.main", "level": "error", "exception": "Traceback (most recent call last):\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call\n with recv_stream, send_stream, collapse_excgroups():\n ^^^^^^^^^^^^^^^^^^^^\n File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit\n self.gen.throw(value)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/main.py", line 294, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/routers/dashboard.py", line 192, in get_bans_by_country\n return await ban_service.bans_by_country(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/services/ban_service.py", line 366, in bans_by_country\n async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db:\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter\n return await self\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect\n self._connection = await future\n ^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread\n result = function()\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector\n return sqlite3.connect(loc, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file"} 9110898d07c7 INFO: 10.89.0.3:43246 - "GET /api/dashboard/bans/by-country?range=24h HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 192, in get_bans_by_country 9110898d07c7 return await ban_service.bans_by_country( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 366, in bans_by_country 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT value FROM settings WHERE key = ?', ('setup_completed',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad49b7440>) completed 9110898d07c7 executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) 9110898d07c7 operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7abad6521210>, 'SELECT id, token, created_at, expires_at FROM sessions WHERE token = ?', ('e829a2a69e384640c259f069c8574de6b8bb486257f4a7f005a05757260ce832',)) completed 9110898d07c7 executing functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6476ec0>) 9110898d07c7 operation functools.partial(<built-in method fetchone of sqlite3.Cursor object at 0x7abad6476ec0>) completed 9110898d07c7 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6476ec0>) 9110898d07c7 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x7abad6476ec0>) completed 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_sending_command", "timestamp": "2026-03-06T17:50:59.377467Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"command": ["get", "dbfile"], "event": "fail2ban_received_response", "timestamp": "2026-03-06T17:50:59.378109Z", "logger": "app.utils.fail2ban_client", "level": "debug"} 9110898d07c7 {"db_path": "/config/fail2ban/fail2ban.sqlite3", "since": 1772733059, "range": "24h", "event": "ban_service_bans_by_country", "timestamp": "2026-03-06T17:50:59.378383Z", "logger": "app.services.ban_service", "level": "info"} 9110898d07c7 executing <function connect..connector at 0x7abad4b3e660> 9110898d07c7 returning exception unable to open database file 9110898d07c7 executing <function Connection.stop..close_and_stop at 0x7abad4b3dda0> 9110898d07c7 operation <function Connection.stop..close_and_stop at 0x7abad4b3dda0> completed 9110898d07c7 {"path": "/api/dashboard/bans/by-country", "method": "GET", "event": "unhandled_exception", "timestamp": "2026-03-06T17:50:59.380270Z", "logger": "app.main", "level": "error", "exception": "Traceback (most recent call last):\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call\n with recv_stream, send_stream, collapse_excgroups():\n ^^^^^^^^^^^^^^^^^^^^\n File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit\n self.gen.throw(value)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/main.py", line 294, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/routers/dashboard.py", line 192, in get_bans_by_country\n return await ban_service.bans_by_country(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/app/app/services/ban_service.py", line 366, in bans_by_country\n async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db:\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter\n return await self\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect\n self._connection = await future\n ^^^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread\n result = function()\n ^^^^^^^^^^\n File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector\n return sqlite3.connect(loc, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file"} 9110898d07c7 INFO: 10.89.0.3:43258 - "GET /api/dashboard/bans/by-country?range=24h HTTP/1.1" 500 Internal Server Error 9110898d07c7 ERROR: Exception in ASGI application 9110898d07c7 Traceback (most recent call last): 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi 9110898d07c7 result = await app( # type: ignore[func-returns-value] 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call 9110898d07c7 return await self.app(scope, receive, send) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1160, in call 9110898d07c7 await super().call(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in call 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in call 9110898d07c7 await self.app(scope, receive, _send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 191, in call 9110898d07c7 with recv_stream, send_stream, collapse_excgroups(): 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/usr/local/lib/python3.12/contextlib.py", line 158, in exit 9110898d07c7 self.gen.throw(value) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_utils.py", line 87, in collapse_excgroups 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in call 9110898d07c7 response = await self.dispatch_func(request, call_next) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/main.py", line 294, in dispatch 9110898d07c7 return await call_next(request) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next 9110898d07c7 raise app_exc from app_exc.cause or app_exc.context 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro 9110898d07c7 await self.app(scope, receive_or_disconnect, send_no_error) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 87, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in call 9110898d07c7 await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in call 9110898d07c7 await self.middleware_stack(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app 9110898d07c7 await route.handle(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle 9110898d07c7 await self.app(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 129, in app 9110898d07c7 await wrap_app_handling_exceptions(app, request)(scope, receive, send) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app 9110898d07c7 raise exc 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app 9110898d07c7 await app(scope, receive, sender) 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app 9110898d07c7 response = await f(request) 9110898d07c7 ^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 630, in app 9110898d07c7 raw_response = await run_endpoint_function( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/fastapi/routing.py", line 323, in run_endpoint_function 9110898d07c7 return await dependant.call(**values) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/routers/dashboard.py", line 192, in get_bans_by_country 9110898d07c7 return await ban_service.bans_by_country( 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 File "/app/app/services/ban_service.py", line 366, in bans_by_country 9110898d07c7 async with aiosqlite.connect(f"file:{db_path}?mode=ro", uri=True) as f2b_db: 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 181, in aenter 9110898d07c7 return await self 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 168, in _connect 9110898d07c7 self._connection = await future 9110898d07c7 ^^^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 63, in _connection_worker_thread 9110898d07c7 result = function() 9110898d07c7 ^^^^^^^^^^ 9110898d07c7 File "/opt/venv/lib/python3.12/site-packages/aiosqlite/core.py", line 466, in connector 9110898d07c7 return sqlite3.connect(loc, **kwargs) 9110898d07c7 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9110898d07c7 sqlite3.OperationalError: unable to open database file 9110898d07c7 INFO: 127.0.0.1:41282 - "GET /api/health HTTP/1.1" 200 OK