2026-07-01 22:59:22,625 INFO: wsgi.py loading...
2026-07-01 22:59:22,625 INFO: Importing app.main...
2026-07-01 22:59:24,465 INFO: app.main imported successfully.
2026-07-01 22:59:24,465 INFO: Running DB init...
2026-07-01 22:59:24,528 INFO: All tables OK.
2026-07-01 22:59:24,659 INFO: Migration OK: allowances ENUM+DAILY
2026-07-01 22:59:24,661 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,664 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,667 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,669 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,671 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,674 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,682 INFO: Dip chart data seeded.
2026-07-01 22:59:24,683 INFO: DB init complete.
2026-07-01 22:59:24,683 INFO: wsgi.py ready.
2026-07-01 22:59:24,686 INFO: >> OPTIONS /api/notifications/count
2026-07-01 22:59:24,687 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,688 INFO: >> OPTIONS /api/dashboard/today
2026-07-01 22:59:24,690 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,690 INFO: >> OPTIONS /api/dashboard/summary
2026-07-01 22:59:24,692 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,698 INFO: OPTIONS /api/notifications/count
2026-07-01 22:59:24,699 INFO: << 200 /api/notifications/count
2026-07-01 22:59:24,700 INFO: OPTIONS /api/dashboard/today
2026-07-01 22:59:24,701 INFO: << 200 /api/dashboard/today
2026-07-01 22:59:24,702 INFO: OPTIONS /api/dashboard/summary
2026-07-01 22:59:24,703 INFO: << 200 /api/dashboard/summary
2026-07-01 22:59:24,828 INFO: >> GET /api/dashboard/summary
2026-07-01 22:59:24,828 INFO: >> GET /api/dashboard/today
2026-07-01 22:59:24,828 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,828 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,828 INFO: >> GET /api/notifications/count
2026-07-01 22:59:24,828 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:24,828 INFO: GET /api/dashboard/summary
2026-07-01 22:59:24,828 INFO: GET /api/dashboard/today
2026-07-01 22:59:24,829 INFO: GET /api/notifications/count
2026-07-01 22:59:24,838 ERROR: GET /api/dashboard/today -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:24,847 INFO: << 500 /api/dashboard/today
2026-07-01 22:59:24,852 ERROR: GET /api/dashboard/summary -> UNHANDLED: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/database.py", line 23, in get_db
    yield db
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 680, in solve_dependencies
    solved = await run_in_threadpool(call, **solved_result.values)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/dependencies.py", line 27, in get_current_user
    user = db.query(User).filter(User.id == user_id, User.is_active == True).first()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2766, in first
    return self.limit(1)._iter().first()  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 309, in orm_execute_statement
    return cls.orm_setup_cursor_result(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 616, in orm_setup_cursor_result
    return loading.instances(result, querycontext)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/loading.py", line 133, in instances
    with util.safe_reraise():
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 121, in __exit__
    raise exc_value.with_traceback(exc_tb)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/loading.py", line 114, in instances
    *[
     ^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/loading.py", line 115, in <listcomp>
    query_entity.row_processor(context, cursor)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 2786, in row_processor
    _instance = loading._instance_processor(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/loading.py", line 878, in _instance_processor
    primary_key_getter = result._tuple_getter(pk_cols)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/result.py", line 1211, in _tuple_getter
    return self._metadata._row_as_tuple_getter(keys)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/result.py", line 191, in _row_as_tuple_getter
    indexes = self._indexes_for_keys(keys)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/result.py", line 168, in _indexes_for_keys
    raise NotImplementedError()
NotImplementedError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1128, in _rollback_impl
    self.engine.dialect.do_rollback(self.connection)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 826, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 116, in app
    async with AsyncExitStack() as request_stack:
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 745, in __aexit__
    raise exc_details[1]
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 728, in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 231, in __aexit__
    await self.gen.athrow(typ, value, traceback)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/home/docuralk/api.fuelops.docura.lk/app/database.py", line 25, in get_db
    db.close()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2507, in close
    self._close_impl(invalidate=False)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2576, in _close_impl
    transaction.close(invalidate)
  File "<string>", line 2, in close
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
    ret_value = fn(self, *arg, **kw)
                ^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 1417, in close
    transaction.close()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2597, in close
    self._do_close()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2735, in _do_close
    self._close_impl()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2721, in _close_impl
    self._connection_rollback_impl()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2713, in _connection_rollback_impl
    self.connection._rollback_impl()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1130, in _rollback_impl
    self._handle_dbapi_exception(e, None, None, None, None)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1128, in _rollback_impl
    self.engine.dialect.do_rollback(self.connection)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 826, in _read_bytes
    raise err.OperationalError(
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 22:59:24,872 INFO: << 500 /api/dashboard/summary
2026-07-01 22:59:24,908 INFO: << 200 /api/notifications/count
2026-07-01 22:59:50,980 INFO: >> GET /api/dashboard/today
2026-07-01 22:59:50,981 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:50,985 INFO: >> GET /api/dashboard/summary
2026-07-01 22:59:50,986 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:50,991 INFO: GET /api/dashboard/today
2026-07-01 22:59:50,996 INFO: GET /api/dashboard/summary
2026-07-01 22:59:51,003 ERROR: GET /api/dashboard/today -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:51,011 INFO: << 500 /api/dashboard/today
2026-07-01 22:59:51,008 ERROR: GET /api/dashboard/summary -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:51,015 INFO: << 500 /api/dashboard/summary
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 22:59:53,412 INFO: >> OPTIONS /api/shifts
2026-07-01 22:59:53,413 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,431 INFO: OPTIONS /api/shifts
2026-07-01 22:59:53,433 INFO: << 200 /api/shifts
2026-07-01 22:59:53,436 INFO: >> OPTIONS /api/pumps/by-shift/MS
2026-07-01 22:59:53,437 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,437 INFO: OPTIONS /api/pumps/by-shift/MS
2026-07-01 22:59:53,438 INFO: << 200 /api/pumps/by-shift/MS
2026-07-01 22:59:53,442 INFO: >> OPTIONS /api/shifts/last-meters
2026-07-01 22:59:53,442 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,443 INFO: OPTIONS /api/shifts/last-meters
2026-07-01 22:59:53,443 INFO: << 200 /api/shifts/last-meters
2026-07-01 22:59:53,444 INFO: >> OPTIONS /api/roster
2026-07-01 22:59:53,444 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,445 INFO: OPTIONS /api/roster
2026-07-01 22:59:53,445 INFO: << 200 /api/roster
2026-07-01 22:59:53,452 INFO: >> OPTIONS /api/shift-templates
2026-07-01 22:59:53,454 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,463 INFO: OPTIONS /api/shift-templates
2026-07-01 22:59:53,465 INFO: << 200 /api/shift-templates
2026-07-01 22:59:53,526 INFO: >> GET /api/shifts
2026-07-01 22:59:53,526 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,527 INFO: GET /api/shifts
2026-07-01 22:59:53,527 INFO: >> GET /api/shifts/last-meters
2026-07-01 22:59:53,527 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,528 INFO: GET /api/shifts/last-meters
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 22:59:53,536 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:53,544 INFO: << 500 /api/shifts
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 22:59:53,546 INFO: >> GET /api/roster
2026-07-01 22:59:53,547 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,536 ERROR: GET /api/shifts/last-meters -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:53,547 INFO: GET /api/roster
2026-07-01 22:59:53,548 INFO: << 500 /api/shifts/last-meters
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 22:59:53,550 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:53,554 INFO: << 500 /api/roster
2026-07-01 22:59:53,566 INFO: >> GET /api/shift-templates
2026-07-01 22:59:53,566 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:53,566 INFO: GET /api/shift-templates
2026-07-01 22:59:53,569 ERROR: GET /api/shift-templates -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:53,573 INFO: << 500 /api/shift-templates
2026-07-01 22:59:54,250 INFO: >> OPTIONS /api/shifts
2026-07-01 22:59:54,251 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,251 INFO: OPTIONS /api/shifts
2026-07-01 22:59:54,252 INFO: << 200 /api/shifts
2026-07-01 22:59:54,295 INFO: >> OPTIONS /api/staff
2026-07-01 22:59:54,295 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,295 INFO: OPTIONS /api/staff
2026-07-01 22:59:54,296 INFO: << 200 /api/staff
2026-07-01 22:59:54,307 INFO: >> OPTIONS /api/fuel-rates/current
2026-07-01 22:59:54,307 INFO: >> OPTIONS /api/staff
2026-07-01 22:59:54,307 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,307 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,308 INFO: OPTIONS /api/fuel-rates/current
2026-07-01 22:59:54,308 INFO: OPTIONS /api/staff
2026-07-01 22:59:54,308 INFO: << 200 /api/staff
2026-07-01 22:59:54,308 INFO: << 200 /api/fuel-rates/current
2026-07-01 22:59:54,347 INFO: >> GET /api/shifts
2026-07-01 22:59:54,347 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,347 INFO: GET /api/shifts
2026-07-01 22:59:54,351 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,354 INFO: << 500 /api/shifts
2026-07-01 22:59:54,385 INFO: >> GET /api/staff
2026-07-01 22:59:54,385 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,385 INFO: >> GET /api/fuel-rates/current
2026-07-01 22:59:54,385 INFO: >> GET /api/staff
2026-07-01 22:59:54,385 INFO: GET /api/staff
2026-07-01 22:59:54,385 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,385 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,386 INFO: GET /api/fuel-rates/current
2026-07-01 22:59:54,386 INFO: GET /api/staff
2026-07-01 22:59:54,388 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,388 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,391 INFO: << 500 /api/staff
2026-07-01 22:59:54,392 INFO: << 500 /api/staff
2026-07-01 22:59:54,388 ERROR: GET /api/fuel-rates/current -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,396 INFO: << 500 /api/fuel-rates/current
2026-07-01 22:59:54,627 INFO: >> GET /api/shifts
2026-07-01 22:59:54,627 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,628 INFO: GET /api/shifts
2026-07-01 22:59:54,632 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,636 INFO: << 500 /api/shifts
2026-07-01 22:59:54,636 INFO: >> GET /api/pumps/by-shift/MS
2026-07-01 22:59:54,636 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,637 INFO: GET /api/pumps/by-shift/MS
2026-07-01 22:59:54,642 INFO: >> GET /api/roster
2026-07-01 22:59:54,642 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,643 INFO: GET /api/roster
2026-07-01 22:59:54,644 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,647 INFO: >> GET /api/shifts/last-meters
2026-07-01 22:59:54,647 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,647 INFO: << 500 /api/roster
2026-07-01 22:59:54,648 INFO: GET /api/shifts/last-meters
2026-07-01 22:59:54,647 ERROR: GET /api/pumps/by-shift/MS -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,651 INFO: << 500 /api/pumps/by-shift/MS
2026-07-01 22:59:54,652 ERROR: GET /api/shifts/last-meters -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,656 INFO: << 500 /api/shifts/last-meters
2026-07-01 22:59:54,675 INFO: >> GET /api/shift-templates
2026-07-01 22:59:54,675 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:54,676 INFO: GET /api/shift-templates
2026-07-01 22:59:54,678 ERROR: GET /api/shift-templates -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:54,682 INFO: << 500 /api/shift-templates
2026-07-01 22:59:55,036 INFO: >> GET /api/notifications/count
2026-07-01 22:59:55,036 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:55,037 INFO: GET /api/notifications/count
2026-07-01 22:59:55,038 ERROR: GET /api/notifications/count -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 22:59:55,041 INFO: << 500 /api/notifications/count
2026-07-01 22:59:56,136 INFO: >> GET /api/notifications/count
2026-07-01 22:59:56,136 DEBUG: Using selector: EpollSelector
2026-07-01 22:59:56,136 INFO: GET /api/notifications/count
2026-07-01 22:59:56,186 INFO: << 200 /api/notifications/count
2026-07-01 23:00:05,506 INFO: >> GET /api/shift-templates
2026-07-01 23:00:05,506 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,507 INFO: GET /api/shift-templates
2026-07-01 23:00:05,507 INFO: >> GET /api/shifts
2026-07-01 23:00:05,508 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,508 INFO: >> GET /api/shifts
2026-07-01 23:00:05,508 INFO: GET /api/shifts
2026-07-01 23:00:05,508 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,508 INFO: GET /api/shifts
2026-07-01 23:00:05,509 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,509 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,512 INFO: << 500 /api/shifts
2026-07-01 23:00:05,513 INFO: << 500 /api/shifts
2026-07-01 23:00:05,531 INFO: >> GET /api/pumps/by-shift/MS
2026-07-01 23:00:05,532 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,537 INFO: GET /api/pumps/by-shift/MS
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 23:00:05,609 INFO: >> GET /api/shifts/last-meters
2026-07-01 23:00:05,609 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,610 INFO: GET /api/shifts/last-meters
2026-07-01 23:00:05,611 ERROR: GET /api/shifts/last-meters -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,614 INFO: << 500 /api/shifts/last-meters
2026-07-01 23:00:05,615 INFO: >> GET /api/roster
2026-07-01 23:00:05,615 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,615 INFO: GET /api/roster
2026-07-01 23:00:05,620 INFO: << 200 /api/shift-templates
2026-07-01 23:00:05,618 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,621 INFO: << 500 /api/roster
2026-07-01 23:00:05,621 ERROR: GET /api/pumps/by-shift/MS -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,625 INFO: << 500 /api/pumps/by-shift/MS
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 23:00:05,629 INFO: >> GET /api/staff
2026-07-01 23:00:05,629 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,630 INFO: GET /api/staff
2026-07-01 23:00:05,631 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,634 INFO: << 500 /api/staff
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 23:00:05,641 INFO: >> GET /api/fuel-rates/current
2026-07-01 23:00:05,641 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,642 INFO: GET /api/fuel-rates/current
[UID:1034][2574107] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-01 23:00:05,644 ERROR: GET /api/fuel-rates/current -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-01 23:00:05,647 INFO: << 500 /api/fuel-rates/current
2026-07-01 23:00:05,648 INFO: >> GET /api/staff
2026-07-01 23:00:05,648 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:05,649 INFO: GET /api/staff
2026-07-01 23:00:05,666 INFO: << 200 /api/staff
2026-07-01 23:00:06,669 INFO: >> GET /api/shifts
2026-07-01 23:00:06,669 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:06,669 INFO: GET /api/shifts
2026-07-01 23:00:06,687 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 24), 'record_date_2': datetime.date(2026, 7, 1)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 24), 'record_date_2': datetime.date(2026, 7, 1)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:00:06,700 INFO: << 500 /api/shifts
2026-07-01 23:00:07,423 INFO: >> OPTIONS /api/shifts
2026-07-01 23:00:07,423 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:07,424 INFO: OPTIONS /api/shifts
2026-07-01 23:00:07,424 INFO: << 200 /api/shifts
2026-07-01 23:00:07,517 INFO: >> GET /api/shifts
2026-07-01 23:00:07,517 DEBUG: Using selector: EpollSelector
2026-07-01 23:00:07,517 INFO: GET /api/shifts
2026-07-01 23:00:07,540 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:00:07,546 INFO: << 500 /api/shifts
2026-07-01 23:02:45,746 INFO: >> GET /api/shifts
2026-07-01 23:02:45,746 DEBUG: Using selector: EpollSelector
2026-07-01 23:02:45,747 INFO: GET /api/shifts
2026-07-01 23:02:45,748 INFO: >> GET /api/notifications/count
2026-07-01 23:02:45,750 DEBUG: Using selector: EpollSelector
2026-07-01 23:02:45,760 INFO: GET /api/notifications/count
2026-07-01 23:02:45,770 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:02:45,776 INFO: << 500 /api/shifts
2026-07-01 23:02:45,840 INFO: << 200 /api/notifications/count
2026-07-01 23:02:52,643 INFO: >> GET /api/shifts
2026-07-01 23:02:52,643 DEBUG: Using selector: EpollSelector
2026-07-01 23:02:52,643 INFO: GET /api/shifts
2026-07-01 23:02:52,666 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:02:52,681 INFO: << 500 /api/shifts
2026-07-01 23:02:53,756 INFO: >> GET /api/shifts
2026-07-01 23:02:53,756 DEBUG: Using selector: EpollSelector
2026-07-01 23:02:53,756 INFO: GET /api/shifts
2026-07-01 23:02:53,763 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:02:53,769 INFO: << 500 /api/shifts
2026-07-01 23:03:00,456 INFO: >> GET /api/shifts
2026-07-01 23:03:00,457 DEBUG: Using selector: EpollSelector
2026-07-01 23:03:00,457 INFO: GET /api/shifts
2026-07-01 23:03:00,463 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:03:00,470 INFO: << 500 /api/shifts
2026-07-01 23:54:15,345 INFO: wsgi.py loading...
2026-07-01 23:54:15,345 INFO: Importing app.main...
2026-07-01 23:54:17,050 INFO: app.main imported successfully.
2026-07-01 23:54:17,050 INFO: Running DB init...
2026-07-01 23:54:17,113 INFO: All tables OK.
2026-07-01 23:54:17,247 INFO: Migration OK: allowances ENUM+DAILY
2026-07-01 23:54:17,250 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,252 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,255 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,258 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,260 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,263 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,271 INFO: Dip chart data seeded.
2026-07-01 23:54:17,271 INFO: DB init complete.
2026-07-01 23:54:17,271 INFO: wsgi.py ready.
2026-07-01 23:54:17,274 INFO: >> GET /api/notifications/count
2026-07-01 23:54:17,276 DEBUG: Using selector: EpollSelector
2026-07-01 23:54:17,276 INFO: >> GET /api/shifts
2026-07-01 23:54:17,277 DEBUG: Using selector: EpollSelector
2026-07-01 23:54:17,285 INFO: GET /api/notifications/count
2026-07-01 23:54:17,287 INFO: GET /api/shifts
2026-07-01 23:54:17,329 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-01 23:54:17,344 INFO: << 500 /api/shifts
2026-07-01 23:54:17,346 INFO: << 200 /api/notifications/count
2026-07-02 00:04:17,544 INFO: wsgi.py loading...
2026-07-02 00:04:17,544 INFO: Importing app.main...
2026-07-02 00:04:19,305 INFO: app.main imported successfully.
2026-07-02 00:04:19,305 INFO: Running DB init...
2026-07-02 00:04:19,368 INFO: All tables OK.
2026-07-02 00:04:19,496 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 00:04:19,499 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,502 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,504 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,507 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,509 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,512 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,520 INFO: Dip chart data seeded.
2026-07-02 00:04:19,520 INFO: DB init complete.
2026-07-02 00:04:19,520 INFO: wsgi.py ready.
2026-07-02 00:04:19,523 INFO: >> GET /api/notifications/count
2026-07-02 00:04:19,525 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:19,525 INFO: >> GET /api/shifts
2026-07-02 00:04:19,527 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:19,534 INFO: GET /api/notifications/count
2026-07-02 00:04:19,536 INFO: GET /api/shifts
2026-07-02 00:04:19,579 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:04:19,594 INFO: << 500 /api/shifts
2026-07-02 00:04:19,594 INFO: << 200 /api/notifications/count
2026-07-02 00:04:20,332 INFO: >> OPTIONS /api/settings
2026-07-02 00:04:20,332 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:20,332 INFO: OPTIONS /api/settings
2026-07-02 00:04:20,333 INFO: << 200 /api/settings
2026-07-02 00:04:20,411 INFO: >> GET /api/settings
2026-07-02 00:04:20,411 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:20,412 INFO: GET /api/settings
2026-07-02 00:04:20,426 INFO: << 200 /api/settings
2026-07-02 00:04:25,736 INFO: >> OPTIONS /api/pumps
2026-07-02 00:04:25,736 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:25,737 INFO: OPTIONS /api/pumps
2026-07-02 00:04:25,737 INFO: << 200 /api/pumps
2026-07-02 00:04:25,886 INFO: >> GET /api/pumps
2026-07-02 00:04:25,886 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:25,887 INFO: GET /api/pumps
2026-07-02 00:04:25,899 INFO: << 200 /api/pumps
2026-07-02 00:04:28,888 INFO: >> OPTIONS /api/fuel-rates/history
2026-07-02 00:04:28,888 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:28,888 INFO: OPTIONS /api/fuel-rates/history
2026-07-02 00:04:28,889 INFO: << 200 /api/fuel-rates/history
2026-07-02 00:04:28,975 INFO: >> GET /api/fuel-rates/history
2026-07-02 00:04:28,975 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:28,975 INFO: GET /api/fuel-rates/history
2026-07-02 00:04:28,987 INFO: << 200 /api/fuel-rates/history
2026-07-02 00:04:30,815 INFO: >> OPTIONS /api/shift-templates
2026-07-02 00:04:30,816 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:30,816 INFO: OPTIONS /api/shift-templates
2026-07-02 00:04:30,817 INFO: << 200 /api/shift-templates
2026-07-02 00:04:30,906 INFO: >> GET /api/shift-templates
2026-07-02 00:04:30,906 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:30,906 INFO: GET /api/shift-templates
2026-07-02 00:04:30,918 INFO: << 200 /api/shift-templates
2026-07-02 00:04:35,295 INFO: >> OPTIONS /api/pump-shift-configs
2026-07-02 00:04:35,295 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:35,295 INFO: OPTIONS /api/pump-shift-configs
2026-07-02 00:04:35,296 INFO: << 200 /api/pump-shift-configs
2026-07-02 00:04:35,405 INFO: >> GET /api/pump-shift-configs
2026-07-02 00:04:35,406 DEBUG: Using selector: EpollSelector
2026-07-02 00:04:35,406 INFO: GET /api/pump-shift-configs
2026-07-02 00:04:35,420 INFO: << 200 /api/pump-shift-configs
2026-07-02 00:06:46,465 INFO: >> GET /api/settings
2026-07-02 00:06:46,465 DEBUG: Using selector: EpollSelector
2026-07-02 00:06:46,466 INFO: GET /api/settings
2026-07-02 00:06:46,494 INFO: >> GET /api/notifications/count
2026-07-02 00:06:46,495 DEBUG: Using selector: EpollSelector
2026-07-02 00:06:46,495 INFO: GET /api/notifications/count
2026-07-02 00:06:46,520 INFO: << 200 /api/settings
2026-07-02 00:06:46,541 INFO: << 200 /api/notifications/count
2026-07-02 00:07:20,735 INFO: >> GET /api/notifications/count
2026-07-02 00:07:20,735 DEBUG: Using selector: EpollSelector
2026-07-02 00:07:20,735 INFO: >> GET /api/settings
2026-07-02 00:07:20,735 DEBUG: Using selector: EpollSelector
2026-07-02 00:07:20,735 INFO: GET /api/notifications/count
2026-07-02 00:07:20,736 INFO: GET /api/settings
2026-07-02 00:07:20,783 INFO: << 200 /api/settings
2026-07-02 00:07:20,789 INFO: << 200 /api/notifications/count
2026-07-02 00:08:15,570 INFO: >> GET /api/notifications/count
2026-07-02 00:08:15,570 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:15,570 INFO: GET /api/notifications/count
2026-07-02 00:08:15,589 INFO: >> GET /api/settings
2026-07-02 00:08:15,589 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:15,590 INFO: GET /api/settings
2026-07-02 00:08:15,615 INFO: << 200 /api/notifications/count
2026-07-02 00:08:15,636 INFO: << 200 /api/settings
2026-07-02 00:08:18,975 INFO: >> OPTIONS /api/shifts
2026-07-02 00:08:18,975 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,975 INFO: OPTIONS /api/shifts
2026-07-02 00:08:18,976 INFO: << 200 /api/shifts
2026-07-02 00:08:18,980 INFO: >> OPTIONS /api/shifts
2026-07-02 00:08:18,980 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,981 INFO: OPTIONS /api/shifts
2026-07-02 00:08:18,981 INFO: << 200 /api/shifts
2026-07-02 00:08:18,986 INFO: >> GET /api/shift-templates
2026-07-02 00:08:18,986 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,986 INFO: GET /api/shift-templates
2026-07-02 00:08:18,991 INFO: >> GET /api/staff
2026-07-02 00:08:18,991 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,992 INFO: GET /api/staff
2026-07-02 00:08:18,994 INFO: >> GET /api/staff
2026-07-02 00:08:18,995 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,996 INFO: << 200 /api/shift-templates
2026-07-02 00:08:18,996 INFO: >> GET /api/shifts/last-meters
2026-07-02 00:08:18,996 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:18,996 INFO: GET /api/shifts/last-meters
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:19,004 INFO: << 200 /api/staff
2026-07-02 00:08:19,005 INFO: >> GET /api/roster
2026-07-02 00:08:19,006 INFO: GET /api/staff
2026-07-02 00:08:19,007 DEBUG: Using selector: EpollSelector
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:19,009 INFO: >> GET /api/pumps/by-shift/MS
2026-07-02 00:08:19,010 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:19,010 INFO: GET /api/pumps/by-shift/MS
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:19,017 INFO: GET /api/roster
2026-07-02 00:08:19,014 ERROR: GET /api/pumps/by-shift/MS -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:19,018 INFO: << 500 /api/pumps/by-shift/MS
2026-07-02 00:08:19,015 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:19,022 INFO: << 200 /api/shifts/last-meters
2026-07-02 00:08:19,023 INFO: << 500 /api/staff
2026-07-02 00:08:19,045 INFO: >> GET /api/shifts
2026-07-02 00:08:19,046 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:19,046 INFO: GET /api/shifts
2026-07-02 00:08:19,050 INFO: >> GET /api/shifts
2026-07-02 00:08:19,051 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:19,051 INFO: GET /api/shifts
2026-07-02 00:08:19,050 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:19,053 INFO: << 500 /api/shifts
2026-07-02 00:08:19,054 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:19,061 INFO: << 500 /api/shifts
2026-07-02 00:08:19,071 ERROR: GET /api/roster -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 7, 1), 'record_date_2': datetime.date(2026, 7, 31)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/roster.py", line 52, in get_roster_month
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 7, 1), 'record_date_2': datetime.date(2026, 7, 31)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:08:19,086 INFO: << 500 /api/roster
2026-07-02 00:08:20,099 INFO: >> GET /api/fuel-rates/current
2026-07-02 00:08:20,099 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,099 INFO: GET /api/fuel-rates/current
2026-07-02 00:08:20,106 INFO: >> GET /api/pumps/by-shift/MS
2026-07-02 00:08:20,106 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,106 INFO: >> GET /api/staff
2026-07-02 00:08:20,106 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,106 INFO: GET /api/pumps/by-shift/MS
2026-07-02 00:08:20,106 INFO: GET /api/staff
2026-07-02 00:08:20,108 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:20,111 INFO: << 500 /api/staff
2026-07-02 00:08:20,110 ERROR: GET /api/pumps/by-shift/MS -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:20,114 INFO: << 500 /api/pumps/by-shift/MS
2026-07-02 00:08:20,131 INFO: >> GET /api/shifts
2026-07-02 00:08:20,132 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,132 INFO: GET /api/shifts
2026-07-02 00:08:20,134 INFO: >> GET /api/shifts
2026-07-02 00:08:20,134 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,135 INFO: GET /api/shifts
2026-07-02 00:08:20,133 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:20,136 INFO: << 500 /api/shifts
2026-07-02 00:08:20,137 INFO: << 200 /api/fuel-rates/current
2026-07-02 00:08:20,135 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:20,139 INFO: << 500 /api/shifts
2026-07-02 00:08:20,166 INFO: >> GET /api/roster
2026-07-02 00:08:20,166 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:20,166 INFO: GET /api/roster
2026-07-02 00:08:20,214 ERROR: GET /api/roster -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 7, 1), 'record_date_2': datetime.date(2026, 7, 31)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/roster.py", line 52, in get_roster_month
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 7, 1), 'record_date_2': datetime.date(2026, 7, 31)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:08:20,226 INFO: << 500 /api/roster
2026-07-02 00:08:33,561 INFO: >> GET /api/shifts
2026-07-02 00:08:33,562 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:33,562 INFO: GET /api/shifts
2026-07-02 00:08:33,566 INFO: >> GET /api/staff
2026-07-02 00:08:33,566 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:33,566 INFO: >> GET /api/pumps/by-shift/MS
2026-07-02 00:08:33,566 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:33,566 INFO: GET /api/staff
2026-07-02 00:08:33,567 INFO: GET /api/pumps/by-shift/MS
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:33,568 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:33,572 INFO: << 500 /api/staff
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:33,575 INFO: >> GET /api/roster
2026-07-02 00:08:33,575 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:33,575 INFO: GET /api/roster
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:33,578 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-02 00:08:33,581 INFO: << 500 /api/roster
[UID:1034][2757642] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-02 00:08:33,583 INFO: << 200 /api/pumps/by-shift/MS
2026-07-02 00:08:33,581 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:08:33,587 INFO: << 500 /api/shifts
2026-07-02 00:08:34,665 INFO: >> GET /api/staff
2026-07-02 00:08:34,665 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:34,666 INFO: GET /api/staff
2026-07-02 00:08:34,675 INFO: >> GET /api/shifts
2026-07-02 00:08:34,675 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:34,675 INFO: GET /api/shifts
2026-07-02 00:08:34,687 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:08:34,694 INFO: << 500 /api/shifts
2026-07-02 00:08:34,697 INFO: << 200 /api/staff
2026-07-02 00:08:35,795 INFO: >> GET /api/shifts
2026-07-02 00:08:35,795 DEBUG: Using selector: EpollSelector
2026-07-02 00:08:35,795 INFO: GET /api/shifts
2026-07-02 00:08:35,801 ERROR: GET /api/shifts -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/shifts.py", line 303, in list_shifts
    shifts = q.order_by(DailyShift.record_date.desc(), DailyShift.shift_type).all()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at, staff_1.id AS staff_1_id, staff_1.employee_id AS staff_1_employee_id, staff_1.full_name AS staff_1_full_name, staff_1.contact AS staff_1_contact, staff_1.basic_salary AS staff_1_basic_salary, staff_1.join_date AS staff_1_join_date, staff_1.status AS staff_1_status, staff_1.category AS staff_1_category, staff_1.notes AS staff_1_notes, staff_1.created_at AS staff_1_created_at, pump_readings_1.id AS pump_readings_1_id, pump_readings_1.shift_id AS pump_readings_1_shift_id, pump_readings_1.pump_id AS pump_readings_1_pump_id, pump_readings_1.staff_id AS pump_readings_1_staff_id, pump_readings_1.starting_meter AS pump_readings_1_starting_meter, pump_readings_1.ending_meter AS pump_readings_1_ending_meter, pump_readings_1.meter_out AS pump_readings_1_meter_out, pump_readings_1.testing_ltr AS pump_readings_1_testing_ltr, pump_readings_1.sale_ltr AS pump_readings_1_sale_ltr, pump_readings_1.fuel_rate AS pump_readings_1_fuel_rate, pump_readings_1.sale_amount AS pump_readings_1_sale_amount, pump_readings_1.status AS pump_readings_1_status, pump_readings_1.created_at AS pump_readings_1_created_at 
FROM daily_shifts LEFT OUTER JOIN staff AS staff_1 ON staff_1.id = daily_shifts.staff_id LEFT OUTER JOIN pump_readings AS pump_readings_1 ON daily_shifts.id = pump_readings_1.shift_id 
WHERE daily_shifts.record_date >= %(record_date_1)s AND daily_shifts.record_date <= %(record_date_2)s ORDER BY daily_shifts.record_date DESC, daily_shifts.shift_type]
[parameters: {'record_date_1': datetime.date(2026, 6, 25), 'record_date_2': datetime.date(2026, 7, 2)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 00:08:35,808 INFO: << 500 /api/shifts
2026-07-02 02:50:54,720 INFO: wsgi.py loading...
2026-07-02 02:50:54,721 INFO: Importing app.main...
2026-07-02 02:50:56,500 INFO: app.main imported successfully.
2026-07-02 02:50:56,500 INFO: Running DB init...
2026-07-02 02:50:56,566 INFO: All tables OK.
2026-07-02 02:50:56,699 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 02:50:56,701 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,704 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,706 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,709 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,711 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,714 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 02:50:56,722 INFO: Dip chart data seeded.
2026-07-02 02:50:56,722 INFO: DB init complete.
2026-07-02 02:50:56,722 INFO: wsgi.py ready.
2026-07-02 02:50:56,725 INFO: >> OPTIONS /api/shifts
2026-07-02 02:50:56,726 DEBUG: Using selector: EpollSelector
2026-07-02 02:50:56,727 INFO: >> OPTIONS /api/notifications/count
2026-07-02 02:50:56,728 DEBUG: Using selector: EpollSelector
2026-07-02 02:50:56,736 INFO: OPTIONS /api/shifts
2026-07-02 02:50:56,737 INFO: << 200 /api/shifts
2026-07-02 02:50:56,738 INFO: OPTIONS /api/notifications/count
2026-07-02 02:50:56,739 INFO: << 200 /api/notifications/count
2026-07-02 08:06:34,577 INFO: wsgi.py loading...
2026-07-02 08:06:34,577 INFO: Importing app.main...
2026-07-02 08:06:38,174 INFO: app.main imported successfully.
2026-07-02 08:06:38,174 INFO: Running DB init...
2026-07-02 08:06:38,249 INFO: All tables OK.
2026-07-02 08:06:38,380 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 08:06:38,382 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,385 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,388 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,390 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,393 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,395 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:06:38,404 INFO: Dip chart data seeded.
2026-07-02 08:06:38,404 INFO: DB init complete.
2026-07-02 08:06:38,404 INFO: wsgi.py ready.
2026-07-02 08:06:38,408 INFO: >> GET /
2026-07-02 08:06:38,409 DEBUG: Using selector: EpollSelector
2026-07-02 08:06:38,419 INFO: GET /
2026-07-02 08:06:38,422 WARNING: GET / -> 404
2026-07-02 08:06:38,431 INFO: << 404 /
2026-07-02 08:35:00,459 INFO: wsgi.py loading...
2026-07-02 08:35:00,459 INFO: Importing app.main...
2026-07-02 08:35:02,298 INFO: app.main imported successfully.
2026-07-02 08:35:02,298 INFO: Running DB init...
2026-07-02 08:35:02,393 INFO: All tables OK.
2026-07-02 08:35:02,655 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 08:35:02,693 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,735 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,753 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,761 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,766 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,769 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 08:35:02,778 INFO: Dip chart data seeded.
2026-07-02 08:35:02,778 INFO: DB init complete.
2026-07-02 08:35:02,778 INFO: wsgi.py ready.
2026-07-02 08:35:02,782 INFO: >> GET /
2026-07-02 08:35:02,784 DEBUG: Using selector: EpollSelector
2026-07-02 08:35:02,796 INFO: GET /
2026-07-02 08:35:02,799 WARNING: GET / -> 404
2026-07-02 08:35:02,810 INFO: << 404 /
2026-07-02 13:40:31,257 INFO: wsgi.py loading...
2026-07-02 13:40:31,257 INFO: Importing app.main...
2026-07-02 13:40:34,843 INFO: app.main imported successfully.
2026-07-02 13:40:34,843 INFO: Running DB init...
2026-07-02 13:40:34,907 INFO: All tables OK.
2026-07-02 13:40:35,035 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 13:40:35,038 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,040 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,043 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,045 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,047 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,050 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 13:40:35,058 INFO: Dip chart data seeded.
2026-07-02 13:40:35,058 INFO: DB init complete.
2026-07-02 13:40:35,058 INFO: wsgi.py ready.
2026-07-02 13:40:35,062 INFO: >> GET /
2026-07-02 13:40:35,063 DEBUG: Using selector: EpollSelector
2026-07-02 13:40:35,073 INFO: GET /
2026-07-02 13:40:35,076 WARNING: GET / -> 404
2026-07-02 13:40:35,084 INFO: << 404 /
2026-07-02 17:28:05,685 INFO: wsgi.py loading...
2026-07-02 17:28:05,686 INFO: Importing app.main...
2026-07-02 17:28:07,503 INFO: app.main imported successfully.
2026-07-02 17:28:07,503 INFO: Running DB init...
2026-07-02 17:28:07,563 INFO: All tables OK.
2026-07-02 17:28:07,701 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 17:28:07,704 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,707 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,709 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,712 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,715 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,717 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 17:28:07,725 INFO: Dip chart data seeded.
2026-07-02 17:28:07,725 INFO: DB init complete.
2026-07-02 17:28:07,725 INFO: wsgi.py ready.
2026-07-02 17:28:07,729 INFO: >> GET /
2026-07-02 17:28:07,730 DEBUG: Using selector: EpollSelector
2026-07-02 17:28:07,741 INFO: GET /
2026-07-02 17:28:07,744 WARNING: GET / -> 404
2026-07-02 17:28:07,753 INFO: << 404 /
2026-07-02 18:45:08,586 INFO: wsgi.py loading...
2026-07-02 18:45:08,586 INFO: Importing app.main...
2026-07-02 18:45:10,319 INFO: app.main imported successfully.
2026-07-02 18:45:10,320 INFO: Running DB init...
2026-07-02 18:45:10,389 INFO: All tables OK.
2026-07-02 18:45:10,527 INFO: Migration OK: allowances ENUM+DAILY
2026-07-02 18:45:10,530 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,533 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,536 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,539 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,541 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,545 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-02 18:45:10,552 INFO: Dip chart data seeded.
2026-07-02 18:45:10,552 INFO: DB init complete.
2026-07-02 18:45:10,552 INFO: wsgi.py ready.
2026-07-02 18:45:10,555 INFO: >> GET //wp-includes/ID3/license.txt
2026-07-02 18:45:10,557 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:10,566 INFO: GET //wp-includes/ID3/license.txt
2026-07-02 18:45:10,569 WARNING: GET //wp-includes/ID3/license.txt -> 404
2026-07-02 18:45:10,578 INFO: << 404 //wp-includes/ID3/license.txt
2026-07-02 18:45:10,813 INFO: >> GET //feed/
2026-07-02 18:45:10,813 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:10,813 INFO: GET //feed/
2026-07-02 18:45:10,815 WARNING: GET //feed/ -> 404
2026-07-02 18:45:10,817 INFO: << 404 //feed/
2026-07-02 18:45:11,081 INFO: >> GET //xmlrpc.php
2026-07-02 18:45:11,081 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:11,081 INFO: GET //xmlrpc.php
2026-07-02 18:45:11,083 WARNING: GET //xmlrpc.php -> 404
2026-07-02 18:45:11,085 INFO: << 404 //xmlrpc.php
2026-07-02 18:45:11,320 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,320 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:11,321 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,322 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:11,325 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,558 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,558 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:11,558 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,560 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:11,563 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,801 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,801 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:11,802 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-02 18:45:11,803 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:11,806 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,038 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,039 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:12,039 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,040 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:12,043 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,275 INFO: >> GET //2020/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,275 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:12,276 INFO: GET //2020/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,277 WARNING: GET //2020/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:12,280 INFO: << 404 //2020/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,521 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,521 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:12,521 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,523 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:12,526 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,761 INFO: >> GET //2021/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,761 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:12,761 INFO: GET //2021/wp-includes/wlwmanifest.xml
2026-07-02 18:45:12,762 WARNING: GET //2021/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:12,765 INFO: << 404 //2021/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,013 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,013 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:13,014 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,015 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:13,017 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,249 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,249 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:13,250 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,251 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:13,254 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,485 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,485 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:13,486 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,487 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:13,489 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,721 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,721 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:13,722 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,723 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:13,726 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,994 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,994 DEBUG: Using selector: EpollSelector
2026-07-02 18:45:13,995 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-07-02 18:45:13,996 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-07-02 18:45:13,999 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-07-03 00:21:34,099 INFO: wsgi.py loading...
2026-07-03 00:21:34,100 INFO: Importing app.main...
2026-07-03 00:21:36,583 INFO: app.main imported successfully.
2026-07-03 00:21:36,583 INFO: Running DB init...
2026-07-03 00:21:36,645 INFO: All tables OK.
2026-07-03 00:21:36,780 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 00:21:36,783 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,785 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,788 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,790 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,793 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,796 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:21:36,804 INFO: Dip chart data seeded.
2026-07-03 00:21:36,804 INFO: DB init complete.
2026-07-03 00:21:36,804 INFO: wsgi.py ready.
2026-07-03 00:21:36,808 INFO: >> GET /
2026-07-03 00:21:36,809 DEBUG: Using selector: EpollSelector
2026-07-03 00:21:36,819 INFO: GET /
2026-07-03 00:21:36,822 WARNING: GET / -> 404
2026-07-03 00:21:36,830 INFO: << 404 /
2026-07-03 00:21:41,464 INFO: >> GET /
2026-07-03 00:21:41,466 DEBUG: Using selector: EpollSelector
2026-07-03 00:21:41,476 INFO: GET /
2026-07-03 00:21:41,478 WARNING: GET / -> 404
2026-07-03 00:21:41,487 INFO: << 404 /
2026-07-03 00:46:21,078 INFO: wsgi.py loading...
2026-07-03 00:46:21,078 INFO: Importing app.main...
2026-07-03 00:46:22,849 INFO: app.main imported successfully.
2026-07-03 00:46:22,849 INFO: Running DB init...
2026-07-03 00:46:22,915 INFO: All tables OK.
2026-07-03 00:46:23,054 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 00:46:23,057 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,059 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,062 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,065 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,068 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,070 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 00:46:23,079 INFO: Dip chart data seeded.
2026-07-03 00:46:23,079 INFO: DB init complete.
2026-07-03 00:46:23,079 INFO: wsgi.py ready.
2026-07-03 00:46:23,083 INFO: >> OPTIONS /api/notifications/count
2026-07-03 00:46:23,084 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,085 INFO: >> OPTIONS /api/dashboard/today
2026-07-03 00:46:23,087 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,088 INFO: >> OPTIONS /api/dashboard/summary
2026-07-03 00:46:23,090 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,096 INFO: OPTIONS /api/notifications/count
2026-07-03 00:46:23,098 INFO: << 200 /api/notifications/count
2026-07-03 00:46:23,098 INFO: OPTIONS /api/dashboard/today
2026-07-03 00:46:23,099 INFO: << 200 /api/dashboard/today
2026-07-03 00:46:23,101 INFO: OPTIONS /api/dashboard/summary
2026-07-03 00:46:23,102 INFO: << 200 /api/dashboard/summary
2026-07-03 00:46:23,209 INFO: >> GET /api/notifications/count
2026-07-03 00:46:23,210 INFO: >> GET /api/dashboard/today
2026-07-03 00:46:23,210 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,210 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,210 INFO: >> GET /api/dashboard/summary
2026-07-03 00:46:23,210 DEBUG: Using selector: EpollSelector
2026-07-03 00:46:23,210 INFO: GET /api/notifications/count
2026-07-03 00:46:23,210 INFO: GET /api/dashboard/today
2026-07-03 00:46:23,210 INFO: GET /api/dashboard/summary
2026-07-03 00:46:23,228 WARNING: GET /api/dashboard/summary -> 401
2026-07-03 00:46:23,228 WARNING: GET /api/notifications/count -> 401
2026-07-03 00:46:23,220 ERROR: GET /api/dashboard/today -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 00:46:23,230 INFO: << 500 /api/dashboard/today
2026-07-03 00:46:23,238 INFO: << 401 /api/dashboard/summary
2026-07-03 00:46:23,238 INFO: << 401 /api/notifications/count
2026-07-03 01:54:58,576 INFO: wsgi.py loading...
2026-07-03 01:54:58,576 INFO: Importing app.main...
2026-07-03 01:55:00,408 INFO: app.main imported successfully.
2026-07-03 01:55:00,408 INFO: Running DB init...
2026-07-03 01:55:00,473 INFO: All tables OK.
2026-07-03 01:55:00,618 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 01:55:00,621 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,624 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,626 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,629 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,631 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,634 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 01:55:00,643 INFO: Dip chart data seeded.
2026-07-03 01:55:00,643 INFO: DB init complete.
2026-07-03 01:55:00,643 INFO: wsgi.py ready.
2026-07-03 01:55:00,646 INFO: >> GET /
2026-07-03 01:55:00,647 DEBUG: Using selector: EpollSelector
2026-07-03 01:55:00,657 INFO: GET /
2026-07-03 01:55:00,659 WARNING: GET / -> 404
2026-07-03 01:55:00,669 INFO: << 404 /
2026-07-03 02:16:27,977 INFO: wsgi.py loading...
2026-07-03 02:16:27,977 INFO: Importing app.main...
2026-07-03 02:16:29,742 INFO: app.main imported successfully.
2026-07-03 02:16:29,742 INFO: Running DB init...
2026-07-03 02:16:29,804 INFO: All tables OK.
2026-07-03 02:16:29,950 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 02:16:29,953 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,956 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,959 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,961 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,964 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,967 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:29,975 INFO: Dip chart data seeded.
2026-07-03 02:16:29,975 INFO: DB init complete.
2026-07-03 02:16:29,975 INFO: wsgi.py ready.
2026-07-03 02:16:29,978 INFO: >> OPTIONS /api/auth/login
2026-07-03 02:16:29,980 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:29,990 INFO: OPTIONS /api/auth/login
2026-07-03 02:16:29,991 INFO: << 200 /api/auth/login
2026-07-03 02:16:30,069 INFO: >> POST /api/auth/login
2026-07-03 02:16:30,069 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,070 INFO: POST /api/auth/login
2026-07-03 02:16:30,387 INFO: << 200 /api/auth/login
2026-07-03 02:16:30,454 INFO: >> OPTIONS /api/auth/me
2026-07-03 02:16:30,454 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,455 INFO: OPTIONS /api/auth/me
2026-07-03 02:16:30,455 INFO: << 200 /api/auth/me
2026-07-03 02:16:30,534 INFO: >> GET /api/auth/me
2026-07-03 02:16:30,534 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,535 INFO: GET /api/auth/me
2026-07-03 02:16:30,545 INFO: << 200 /api/auth/me
2026-07-03 02:16:30,654 INFO: >> GET /api/notifications/count
2026-07-03 02:16:30,654 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,654 INFO: GET /api/notifications/count
2026-07-03 02:16:30,662 INFO: >> GET /api/dashboard/summary
2026-07-03 02:16:30,663 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,664 INFO: >> GET /api/dashboard/today
2026-07-03 02:16:30,666 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:30,674 INFO: GET /api/dashboard/summary
2026-07-03 02:16:30,674 INFO: << 200 /api/notifications/count
2026-07-03 02:16:30,676 INFO: GET /api/dashboard/today
2026-07-03 02:16:30,710 ERROR: GET /api/dashboard/today -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/dashboard.py", line 25, in today_summary
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:30,729 INFO: << 500 /api/dashboard/today
2026-07-03 02:16:30,734 INFO: << 200 /api/dashboard/summary
2026-07-03 02:16:31,804 INFO: >> GET /api/dashboard/today
2026-07-03 02:16:31,804 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:31,804 INFO: GET /api/dashboard/today
2026-07-03 02:16:31,815 ERROR: GET /api/dashboard/today -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/dashboard.py", line 25, in today_summary
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:16:31,828 INFO: << 500 /api/dashboard/today
2026-07-03 02:16:34,869 INFO: >> OPTIONS /api/shift-templates
2026-07-03 02:16:34,869 INFO: >> OPTIONS /api/shifts
2026-07-03 02:16:34,869 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,870 INFO: >> OPTIONS /api/staff
2026-07-03 02:16:34,870 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,870 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,870 INFO: OPTIONS /api/shift-templates
2026-07-03 02:16:34,870 INFO: OPTIONS /api/shifts
2026-07-03 02:16:34,870 INFO: OPTIONS /api/staff
2026-07-03 02:16:34,871 INFO: << 200 /api/staff
2026-07-03 02:16:34,871 INFO: << 200 /api/shift-templates
2026-07-03 02:16:34,871 INFO: >> OPTIONS /api/shifts/last-meters
2026-07-03 02:16:34,871 INFO: << 200 /api/shifts
2026-07-03 02:16:34,871 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,871 INFO: >> OPTIONS /api/roster
2026-07-03 02:16:34,871 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,871 INFO: OPTIONS /api/shifts/last-meters
2026-07-03 02:16:34,872 INFO: OPTIONS /api/roster
2026-07-03 02:16:34,872 INFO: << 200 /api/shifts/last-meters
2026-07-03 02:16:34,873 INFO: << 200 /api/roster
2026-07-03 02:16:34,873 INFO: >> OPTIONS /api/staff
2026-07-03 02:16:34,875 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,876 INFO: >> OPTIONS /api/fuel-rates/current
2026-07-03 02:16:34,877 DEBUG: Using selector: EpollSelector
[UID:1034][2788131] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-03 02:16:34,881 INFO: >> OPTIONS /api/pump-groups
2026-07-03 02:16:34,881 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,882 INFO: OPTIONS /api/pump-groups
2026-07-03 02:16:34,882 INFO: << 200 /api/pump-groups
2026-07-03 02:16:34,887 INFO: OPTIONS /api/staff
2026-07-03 02:16:34,887 INFO: OPTIONS /api/fuel-rates/current
2026-07-03 02:16:34,888 INFO: << 200 /api/fuel-rates/current
2026-07-03 02:16:34,888 INFO: << 200 /api/staff
2026-07-03 02:16:34,944 INFO: >> GET /api/staff
2026-07-03 02:16:34,944 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,944 INFO: >> GET /api/shift-templates
2026-07-03 02:16:34,944 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,944 INFO: >> GET /api/shifts
2026-07-03 02:16:34,944 INFO: GET /api/staff
2026-07-03 02:16:34,945 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,945 INFO: >> GET /api/shifts/last-meters
2026-07-03 02:16:34,945 INFO: GET /api/shift-templates
2026-07-03 02:16:34,945 INFO: >> GET /api/roster
2026-07-03 02:16:34,945 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,945 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,945 INFO: GET /api/shifts
2026-07-03 02:16:34,945 INFO: GET /api/shifts/last-meters
2026-07-03 02:16:34,945 INFO: GET /api/roster
2026-07-03 02:16:34,949 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
[UID:1034][2788131] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-03 02:16:34,954 INFO: << 500 /api/roster
2026-07-03 02:16:34,950 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,954 INFO: >> GET /api/fuel-rates/current
2026-07-03 02:16:34,954 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,955 INFO: << 500 /api/shifts
2026-07-03 02:16:34,955 INFO: GET /api/fuel-rates/current
2026-07-03 02:16:34,948 ERROR: GET /api/shifts/last-meters -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,955 INFO: >> GET /api/staff
2026-07-03 02:16:34,955 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,955 INFO: << 500 /api/shifts/last-meters
2026-07-03 02:16:34,955 INFO: GET /api/staff
[UID:1034][2788131] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-03 02:16:34,958 INFO: >> GET /api/pump-groups
2026-07-03 02:16:34,958 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:34,958 INFO: GET /api/pump-groups
2026-07-03 02:16:34,952 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,960 INFO: << 500 /api/staff
2026-07-03 02:16:34,957 ERROR: GET /api/fuel-rates/current -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,960 INFO: << 500 /api/fuel-rates/current
2026-07-03 02:16:34,958 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,961 INFO: << 500 /api/staff
2026-07-03 02:16:34,961 ERROR: GET /api/pump-groups -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,964 INFO: << 500 /api/pump-groups
2026-07-03 02:16:34,956 ERROR: GET /api/shift-templates -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:34,966 INFO: << 500 /api/shift-templates
2026-07-03 02:16:36,044 INFO: >> GET /api/roster
2026-07-03 02:16:36,044 INFO: >> GET /api/shifts
2026-07-03 02:16:36,044 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,044 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,044 INFO: >> GET /api/shifts/last-meters
2026-07-03 02:16:36,045 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,045 INFO: >> GET /api/staff
2026-07-03 02:16:36,045 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,045 INFO: >> GET /api/fuel-rates/current
2026-07-03 02:16:36,045 INFO: GET /api/shifts
2026-07-03 02:16:36,045 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,045 INFO: GET /api/roster
2026-07-03 02:16:36,045 INFO: GET /api/shifts/last-meters
2026-07-03 02:16:36,045 INFO: GET /api/staff
2026-07-03 02:16:36,045 INFO: GET /api/fuel-rates/current
2026-07-03 02:16:36,048 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,047 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
[UID:1034][2788131] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-03 02:16:36,050 INFO: << 500 /api/shifts
2026-07-03 02:16:36,051 INFO: << 500 /api/staff
2026-07-03 02:16:36,051 INFO: >> GET /api/pump-groups
2026-07-03 02:16:36,051 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,048 ERROR: GET /api/shifts/last-meters -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,051 INFO: >> GET /api/shift-templates
2026-07-03 02:16:36,048 ERROR: GET /api/fuel-rates/current -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,051 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,051 INFO: GET /api/pump-groups
2026-07-03 02:16:36,051 INFO: << 500 /api/shifts/last-meters
2026-07-03 02:16:36,052 INFO: GET /api/shift-templates
2026-07-03 02:16:36,052 INFO: << 500 /api/fuel-rates/current
2026-07-03 02:16:36,049 ERROR: GET /api/roster -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,053 INFO: << 500 /api/roster
2026-07-03 02:16:36,052 ERROR: GET /api/pump-groups -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,055 INFO: << 500 /api/pump-groups
[UID:1034][2788131] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-07-03 02:16:36,055 INFO: >> GET /api/staff
2026-07-03 02:16:36,055 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,056 INFO: GET /api/staff
2026-07-03 02:16:36,055 ERROR: GET /api/shift-templates -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,058 INFO: << 500 /api/shift-templates
2026-07-03 02:16:36,058 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,060 INFO: << 500 /api/staff
2026-07-03 02:16:36,259 INFO: >> OPTIONS /api/staff
2026-07-03 02:16:36,259 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,259 INFO: OPTIONS /api/staff
2026-07-03 02:16:36,260 INFO: << 200 /api/staff
2026-07-03 02:16:36,264 INFO: >> GET /api/shifts
2026-07-03 02:16:36,264 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,264 INFO: >> GET /api/pump-groups
2026-07-03 02:16:36,264 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,264 INFO: GET /api/shifts
2026-07-03 02:16:36,264 INFO: GET /api/pump-groups
2026-07-03 02:16:36,265 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,268 INFO: << 500 /api/shifts
2026-07-03 02:16:36,267 ERROR: GET /api/pump-groups -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,270 INFO: << 500 /api/pump-groups
2026-07-03 02:16:36,324 INFO: >> GET /api/staff
2026-07-03 02:16:36,324 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:36,324 INFO: GET /api/staff
2026-07-03 02:16:36,325 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:36,329 INFO: << 500 /api/staff
2026-07-03 02:16:37,339 INFO: >> GET /api/shifts
2026-07-03 02:16:37,339 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:37,339 INFO: GET /api/shifts
2026-07-03 02:16:37,344 INFO: >> GET /api/pump-groups
2026-07-03 02:16:37,344 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:37,344 INFO: GET /api/pump-groups
2026-07-03 02:16:37,342 ERROR: GET /api/shifts -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:37,346 INFO: << 500 /api/shifts
2026-07-03 02:16:37,345 ERROR: GET /api/pump-groups -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:37,348 INFO: << 500 /api/pump-groups
2026-07-03 02:16:37,419 INFO: >> GET /api/staff
2026-07-03 02:16:37,419 DEBUG: Using selector: EpollSelector
2026-07-03 02:16:37,420 INFO: GET /api/staff
2026-07-03 02:16:37,421 ERROR: GET /api/staff -> UNHANDLED: can't start new thread
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 29, in contextmanager_in_threadpool
    yield await run_in_threadpool(cm.__enter__)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 457, in app
    solved_result = await solve_dependencies(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 672, in solve_dependencies
    solved = await _solve_generator(
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/dependencies/utils.py", line 586, in _solve_generator
    return await stack.enter_async_context(cm)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 650, in enter_async_context
    result = await _enter(cm)
             ^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/concurrency.py", line 32, in contextmanager_in_threadpool
    await anyio.to_thread.run_sync(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2486, in run_sync_in_worker_thread
    worker.start()
  File "/opt/alt/python311/lib64/python3.11/threading.py", line 964, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
2026-07-03 02:16:37,424 INFO: << 500 /api/staff
2026-07-03 02:17:00,789 INFO: >> GET /api/notifications/count
2026-07-03 02:17:00,789 DEBUG: Using selector: EpollSelector
2026-07-03 02:17:00,789 INFO: GET /api/notifications/count
2026-07-03 02:17:00,837 INFO: << 200 /api/notifications/count
2026-07-03 02:17:31,092 INFO: >> GET /api/notifications/count
2026-07-03 02:17:31,094 DEBUG: Using selector: EpollSelector
2026-07-03 02:17:31,105 INFO: GET /api/notifications/count
2026-07-03 02:17:31,194 INFO: << 200 /api/notifications/count
2026-07-03 02:18:01,283 INFO: >> GET /api/notifications/count
2026-07-03 02:18:01,284 DEBUG: Using selector: EpollSelector
2026-07-03 02:18:01,295 INFO: GET /api/notifications/count
2026-07-03 02:18:01,370 INFO: << 200 /api/notifications/count
2026-07-03 02:18:31,614 INFO: >> GET /api/notifications/count
2026-07-03 02:18:31,614 DEBUG: Using selector: EpollSelector
2026-07-03 02:18:31,615 INFO: GET /api/notifications/count
2026-07-03 02:18:31,665 INFO: << 200 /api/notifications/count
2026-07-03 02:19:01,755 INFO: >> GET /api/notifications/count
2026-07-03 02:19:01,755 DEBUG: Using selector: EpollSelector
2026-07-03 02:19:01,755 INFO: GET /api/notifications/count
2026-07-03 02:19:01,800 INFO: << 200 /api/notifications/count
2026-07-03 02:19:31,969 INFO: >> GET /api/notifications/count
2026-07-03 02:19:31,969 DEBUG: Using selector: EpollSelector
2026-07-03 02:19:31,970 INFO: GET /api/notifications/count
2026-07-03 02:19:32,015 INFO: << 200 /api/notifications/count
2026-07-03 02:20:02,101 INFO: >> GET /api/notifications/count
2026-07-03 02:20:02,102 DEBUG: Using selector: EpollSelector
2026-07-03 02:20:02,102 INFO: GET /api/notifications/count
2026-07-03 02:20:02,263 INFO: << 200 /api/notifications/count
2026-07-03 02:20:32,470 INFO: >> GET /api/notifications/count
2026-07-03 02:20:32,470 DEBUG: Using selector: EpollSelector
2026-07-03 02:20:32,470 INFO: GET /api/notifications/count
2026-07-03 02:20:32,515 INFO: << 200 /api/notifications/count
2026-07-03 02:21:02,633 INFO: >> GET /api/notifications/count
2026-07-03 02:21:02,634 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:02,645 INFO: GET /api/notifications/count
2026-07-03 02:21:02,723 INFO: << 200 /api/notifications/count
2026-07-03 02:21:13,443 INFO: >> OPTIONS /api/settings
2026-07-03 02:21:13,444 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:13,444 INFO: OPTIONS /api/settings
2026-07-03 02:21:13,445 INFO: << 200 /api/settings
2026-07-03 02:21:13,533 INFO: >> GET /api/settings
2026-07-03 02:21:13,534 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:13,534 INFO: GET /api/settings
2026-07-03 02:21:13,551 INFO: << 200 /api/settings
2026-07-03 02:21:16,289 INFO: >> OPTIONS /api/notification-preferences
2026-07-03 02:21:16,289 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:16,290 INFO: OPTIONS /api/notification-preferences
2026-07-03 02:21:16,290 INFO: << 200 /api/notification-preferences
2026-07-03 02:21:16,358 INFO: >> GET /api/notification-preferences
2026-07-03 02:21:16,359 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:16,359 INFO: GET /api/notification-preferences
2026-07-03 02:21:16,372 INFO: << 200 /api/notification-preferences
2026-07-03 02:21:21,699 INFO: >> PUT /api/notification-preferences
2026-07-03 02:21:21,699 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:21,699 INFO: PUT /api/notification-preferences
2026-07-03 02:21:21,717 INFO: << 200 /api/notification-preferences
2026-07-03 02:21:21,788 INFO: >> GET /api/notification-preferences
2026-07-03 02:21:21,789 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:21,789 INFO: GET /api/notification-preferences
2026-07-03 02:21:21,799 INFO: << 200 /api/notification-preferences
2026-07-03 02:21:32,808 INFO: >> GET /api/notifications/count
2026-07-03 02:21:32,809 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:32,809 INFO: GET /api/notifications/count
2026-07-03 02:21:32,818 INFO: << 200 /api/notifications/count
2026-07-03 02:21:36,928 INFO: >> OPTIONS /api/notifications
2026-07-03 02:21:36,929 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:36,929 INFO: OPTIONS /api/notifications
2026-07-03 02:21:36,930 INFO: << 200 /api/notifications
2026-07-03 02:21:37,018 INFO: >> GET /api/notifications
2026-07-03 02:21:37,018 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:37,019 INFO: GET /api/notifications
2026-07-03 02:21:37,030 INFO: << 200 /api/notifications
2026-07-03 02:21:50,403 INFO: >> GET /api/dashboard/today
2026-07-03 02:21:50,404 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:50,404 INFO: >> GET /api/dashboard/summary
2026-07-03 02:21:50,404 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:50,404 INFO: GET /api/dashboard/today
2026-07-03 02:21:50,404 INFO: GET /api/dashboard/summary
2026-07-03 02:21:50,418 ERROR: GET /api/dashboard/today -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/dashboard.py", line 25, in today_summary
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:21:50,432 INFO: << 500 /api/dashboard/today
2026-07-03 02:21:50,457 INFO: << 200 /api/dashboard/summary
2026-07-03 02:21:51,508 INFO: >> GET /api/dashboard/today
2026-07-03 02:21:51,509 DEBUG: Using selector: EpollSelector
2026-07-03 02:21:51,509 INFO: GET /api/dashboard/today
2026-07-03 02:21:51,523 ERROR: GET /api/dashboard/today -> UNHANDLED: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
pymysql.err.OperationalError: (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/docuralk/api.fuelops.docura.lk/app/main.py", line 100, in log_requests
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 168, in call_next
    raise app_exc from app_exc.__cause__ or app_exc.__context__
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 144, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 96, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/cors.py", line 154, in simple_response
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
    return await anyio.to_thread.run_sync(func)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/to_thread.py", line 63, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2518, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1002, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/api.fuelops.docura.lk/app/routers/dashboard.py", line 25, in today_summary
    .all()
     ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2711, in all
    return self._iter().all()  # type: ignore
           ^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2864, in _iter
    result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
                                                  ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/orm/context.py", line 306, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 159, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/cursors.py", line 330, in _query
    conn.query(q)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 582, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 847, in _read_query_result
    result.read()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 1245, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 803, in _read_packet
    packet.raise_for_error()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/err.py", line 154, in raise_mysql_exception
    raise errorclass(errno, errval, sqlstate=sqlstate)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'daily_shifts.shift_template_id' in 'SELECT'")
[SQL: SELECT daily_shifts.id AS daily_shifts_id, daily_shifts.record_date AS daily_shifts_record_date, daily_shifts.shift_type AS daily_shifts_shift_type, daily_shifts.shift_template_id AS daily_shifts_shift_template_id, daily_shifts.shift_start_time AS daily_shifts_shift_start_time, daily_shifts.shift_end_time AS daily_shifts_shift_end_time, daily_shifts.staff_id AS daily_shifts_staff_id, daily_shifts.cash_collected AS daily_shifts_cash_collected, daily_shifts.card_visa AS daily_shifts_card_visa, daily_shifts.card_amex AS daily_shifts_card_amex, daily_shifts.card_touch AS daily_shifts_card_touch, daily_shifts.credit_total AS daily_shifts_credit_total, daily_shifts.other_income AS daily_shifts_other_income, daily_shifts.shortage AS daily_shifts_shortage, daily_shifts.advance AS daily_shifts_advance, daily_shifts.total_sale_calc AS daily_shifts_total_sale_calc, daily_shifts.total_collected AS daily_shifts_total_collected, daily_shifts.difference AS daily_shifts_difference, daily_shifts.is_locked AS daily_shifts_is_locked, daily_shifts.status AS daily_shifts_status, daily_shifts.notes AS daily_shifts_notes, daily_shifts.created_by AS daily_shifts_created_by, daily_shifts.updated_by AS daily_shifts_updated_by, daily_shifts.created_at AS daily_shifts_created_at, daily_shifts.updated_at AS daily_shifts_updated_at 
FROM daily_shifts 
WHERE daily_shifts.record_date = %(record_date_1)s]
[parameters: {'record_date_1': datetime.date(2026, 7, 3)}]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 02:21:51,542 INFO: << 500 /api/dashboard/today
2026-07-03 07:31:11,756 INFO: wsgi.py loading...
2026-07-03 07:31:11,756 INFO: Importing app.main...
2026-07-03 07:31:14,598 INFO: app.main imported successfully.
2026-07-03 07:31:14,599 INFO: Running DB init...
2026-07-03 07:31:14,670 INFO: All tables OK.
2026-07-03 07:31:14,818 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 07:31:14,821 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,823 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,826 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,829 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,831 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,834 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 07:31:14,843 INFO: Dip chart data seeded.
2026-07-03 07:31:14,843 INFO: DB init complete.
2026-07-03 07:31:14,843 INFO: wsgi.py ready.
2026-07-03 07:31:14,847 INFO: >> GET /
2026-07-03 07:31:14,848 DEBUG: Using selector: EpollSelector
2026-07-03 07:31:14,859 INFO: GET /
2026-07-03 07:31:14,862 WARNING: GET / -> 404
2026-07-03 07:31:14,871 INFO: << 404 /
2026-07-03 13:14:40,535 INFO: wsgi.py loading...
2026-07-03 13:14:40,536 INFO: Importing app.main...
2026-07-03 13:14:43,912 INFO: app.main imported successfully.
2026-07-03 13:14:43,912 INFO: Running DB init...
2026-07-03 13:14:43,977 INFO: All tables OK.
2026-07-03 13:14:44,120 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 13:14:44,123 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,126 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,128 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,131 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,133 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,135 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 13:14:44,144 INFO: Dip chart data seeded.
2026-07-03 13:14:44,144 INFO: DB init complete.
2026-07-03 13:14:44,144 INFO: wsgi.py ready.
2026-07-03 13:14:44,148 INFO: >> GET //wp-includes/ID3/license.txt
2026-07-03 13:14:44,149 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:44,160 INFO: GET //wp-includes/ID3/license.txt
2026-07-03 13:14:44,163 WARNING: GET //wp-includes/ID3/license.txt -> 404
2026-07-03 13:14:44,172 INFO: << 404 //wp-includes/ID3/license.txt
2026-07-03 13:14:44,339 INFO: >> GET //feed/
2026-07-03 13:14:44,339 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:44,339 INFO: GET //feed/
2026-07-03 13:14:44,341 WARNING: GET //feed/ -> 404
2026-07-03 13:14:44,344 INFO: << 404 //feed/
2026-07-03 13:14:44,622 INFO: >> GET //xmlrpc.php
2026-07-03 13:14:44,622 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:44,623 INFO: GET //xmlrpc.php
2026-07-03 13:14:44,624 WARNING: GET //xmlrpc.php -> 404
2026-07-03 13:14:44,627 INFO: << 404 //xmlrpc.php
2026-07-03 13:14:44,793 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-07-03 13:14:44,793 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:44,793 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-07-03 13:14:44,795 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:44,797 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-07-03 13:14:44,990 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-07-03 13:14:44,991 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:44,991 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-07-03 13:14:44,992 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:44,995 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,163 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,163 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:45,163 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,165 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:45,167 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,429 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,429 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:45,429 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,430 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:45,433 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,599 INFO: >> GET //2020/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,599 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:45,599 INFO: GET //2020/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,601 WARNING: GET //2020/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:45,604 INFO: << 404 //2020/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,769 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,770 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:45,770 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-07-03 13:14:45,771 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:45,774 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,042 INFO: >> GET //2021/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,042 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:46,042 INFO: GET //2021/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,043 WARNING: GET //2021/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:46,046 INFO: << 404 //2021/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,212 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,212 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:46,212 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,213 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:46,216 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,603 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,603 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:46,603 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,605 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:46,607 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,782 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,782 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:46,782 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-07-03 13:14:46,783 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:46,786 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,142 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,143 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:47,143 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,144 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:47,147 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,390 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,390 DEBUG: Using selector: EpollSelector
2026-07-03 13:14:47,391 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-07-03 13:14:47,392 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-07-03 13:14:47,396 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-07-03 17:41:43,162 INFO: wsgi.py loading...
2026-07-03 17:41:43,162 INFO: Importing app.main...
2026-07-03 17:41:45,043 INFO: app.main imported successfully.
2026-07-03 17:41:45,043 INFO: Running DB init...
2026-07-03 17:41:45,107 INFO: All tables OK.
2026-07-03 17:41:45,239 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 17:41:45,242 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,244 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,247 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,249 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,252 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,255 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:41:45,263 INFO: Dip chart data seeded.
2026-07-03 17:41:45,263 INFO: DB init complete.
2026-07-03 17:41:45,263 INFO: wsgi.py ready.
2026-07-03 17:41:45,266 INFO: >> GET /
2026-07-03 17:41:45,268 DEBUG: Using selector: EpollSelector
2026-07-03 17:41:45,278 INFO: GET /
2026-07-03 17:41:45,281 WARNING: GET / -> 404
2026-07-03 17:41:45,289 INFO: << 404 /
2026-07-03 17:49:31,298 INFO: wsgi.py loading...
2026-07-03 17:49:31,298 INFO: Importing app.main...
2026-07-03 17:49:33,086 INFO: app.main imported successfully.
2026-07-03 17:49:33,086 INFO: Running DB init...
2026-07-03 17:49:33,148 INFO: All tables OK.
2026-07-03 17:49:33,285 INFO: Migration OK: allowances ENUM+DAILY
2026-07-03 17:49:33,288 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,291 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,293 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,295 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,298 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,300 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-03 17:49:33,307 INFO: Dip chart data seeded.
2026-07-03 17:49:33,307 INFO: DB init complete.
2026-07-03 17:49:33,307 INFO: wsgi.py ready.
2026-07-03 17:49:33,311 INFO: >> GET /robots.txt
2026-07-03 17:49:33,312 DEBUG: Using selector: EpollSelector
2026-07-03 17:49:33,322 INFO: GET /robots.txt
2026-07-03 17:49:33,325 WARNING: GET /robots.txt -> 404
2026-07-03 17:49:33,334 INFO: << 404 /robots.txt
2026-07-03 17:49:34,190 INFO: >> GET /
2026-07-03 17:49:34,190 DEBUG: Using selector: EpollSelector
2026-07-03 17:49:34,190 INFO: GET /
2026-07-03 17:49:34,191 WARNING: GET / -> 404
2026-07-03 17:49:34,194 INFO: << 404 /
2026-07-04 00:40:16,634 INFO: wsgi.py loading...
2026-07-04 00:40:16,635 INFO: Importing app.main...
2026-07-04 00:40:19,750 INFO: app.main imported successfully.
2026-07-04 00:40:19,750 INFO: Running DB init...
2026-07-04 00:40:19,813 INFO: All tables OK.
2026-07-04 00:40:19,958 INFO: Migration OK: allowances ENUM+DAILY
2026-07-04 00:40:19,960 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,963 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,966 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,968 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,971 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,974 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 00:40:19,982 INFO: Dip chart data seeded.
2026-07-04 00:40:19,982 INFO: DB init complete.
2026-07-04 00:40:19,982 INFO: wsgi.py ready.
2026-07-04 00:40:19,986 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-04 00:40:19,987 DEBUG: Using selector: EpollSelector
2026-07-04 00:40:19,998 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-04 00:40:20,001 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-07-04 00:40:20,010 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-04 05:29:22,639 INFO: wsgi.py loading...
2026-07-04 05:29:22,639 INFO: Importing app.main...
2026-07-04 05:29:25,645 INFO: app.main imported successfully.
2026-07-04 05:29:25,645 INFO: Running DB init...
2026-07-04 05:29:25,707 INFO: All tables OK.
2026-07-04 05:29:25,846 INFO: Migration OK: allowances ENUM+DAILY
2026-07-04 05:29:25,849 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,852 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,854 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,857 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,859 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,862 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-04 05:29:25,871 INFO: Dip chart data seeded.
2026-07-04 05:29:25,871 INFO: DB init complete.
2026-07-04 05:29:25,871 INFO: wsgi.py ready.
2026-07-04 05:29:25,878 INFO: >> GET /wp-login.php
2026-07-04 05:29:25,888 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,899 INFO: GET /wp-login.php
2026-07-04 05:29:25,903 WARNING: GET /wp-login.php -> 404
2026-07-04 05:29:25,912 INFO: << 404 /wp-login.php
2026-07-04 05:29:25,916 INFO: >> GET /wp-admin/
2026-07-04 05:29:25,916 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,916 INFO: GET /wp-admin/
2026-07-04 05:29:25,918 WARNING: GET /wp-admin/ -> 404
2026-07-04 05:29:25,920 INFO: << 404 /wp-admin/
2026-07-04 05:29:25,923 INFO: >> GET /
2026-07-04 05:29:25,923 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,924 INFO: GET /
2026-07-04 05:29:25,925 WARNING: GET / -> 404
2026-07-04 05:29:25,942 INFO: << 404 /
2026-07-04 05:29:25,960 INFO: >> GET /wp-admin/admin-ajax.php
2026-07-04 05:29:25,960 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,961 INFO: GET /wp-admin/admin-ajax.php
2026-07-04 05:29:25,962 WARNING: GET /wp-admin/admin-ajax.php -> 404
2026-07-04 05:29:25,964 INFO: << 404 /wp-admin/admin-ajax.php
2026-07-04 05:29:25,972 INFO: >> GET /wp-admin/load-scripts.php
2026-07-04 05:29:25,972 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,972 INFO: GET /wp-admin/load-scripts.php
2026-07-04 05:29:25,973 WARNING: GET /wp-admin/load-scripts.php -> 404
2026-07-04 05:29:25,976 INFO: << 404 /wp-admin/load-scripts.php
2026-07-04 05:29:25,992 INFO: >> GET /wp-admin/load-styles.php
2026-07-04 05:29:25,993 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:25,993 INFO: GET /wp-admin/load-styles.php
2026-07-04 05:29:25,994 WARNING: GET /wp-admin/load-styles.php -> 404
2026-07-04 05:29:25,997 INFO: << 404 /wp-admin/load-styles.php
2026-07-04 05:29:26,000 INFO: >> GET /wp-includes/js/jquery/jquery.js
2026-07-04 05:29:26,001 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,001 INFO: GET /wp-includes/js/jquery/jquery.js
2026-07-04 05:29:26,002 WARNING: GET /wp-includes/js/jquery/jquery.js -> 404
2026-07-04 05:29:26,005 INFO: << 404 /wp-includes/js/jquery/jquery.js
2026-07-04 05:29:26,008 INFO: >> GET /wp-includes/css/dashicons.css
2026-07-04 05:29:26,008 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,009 INFO: GET /wp-includes/css/dashicons.css
2026-07-04 05:29:26,010 WARNING: GET /wp-includes/css/dashicons.css -> 404
2026-07-04 05:29:26,013 INFO: << 404 /wp-includes/css/dashicons.css
2026-07-04 05:29:26,016 INFO: >> GET /wp-content/themes/
2026-07-04 05:29:26,016 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,016 INFO: GET /wp-content/themes/
2026-07-04 05:29:26,018 WARNING: GET /wp-content/themes/ -> 404
2026-07-04 05:29:26,020 INFO: << 404 /wp-content/themes/
2026-07-04 05:29:26,024 INFO: >> GET /wp-content/plugins/
2026-07-04 05:29:26,024 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,024 INFO: GET /wp-content/plugins/
2026-07-04 05:29:26,025 WARNING: GET /wp-content/plugins/ -> 404
2026-07-04 05:29:26,028 INFO: << 404 /wp-content/plugins/
2026-07-04 05:29:26,032 INFO: >> GET /wp-includes/version.php
2026-07-04 05:29:26,032 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,032 INFO: GET /wp-includes/version.php
2026-07-04 05:29:26,034 WARNING: GET /wp-includes/version.php -> 404
2026-07-04 05:29:26,036 INFO: << 404 /wp-includes/version.php
2026-07-04 05:29:26,041 INFO: >> GET /wp-includes/functions.php
2026-07-04 05:29:26,041 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,042 INFO: GET /wp-includes/functions.php
2026-07-04 05:29:26,043 WARNING: GET /wp-includes/functions.php -> 404
2026-07-04 05:29:26,046 INFO: << 404 /wp-includes/functions.php
2026-07-04 05:29:26,049 INFO: >> GET /wp-includes/class-wp.php
2026-07-04 05:29:26,049 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,050 INFO: GET /wp-includes/class-wp.php
2026-07-04 05:29:26,051 WARNING: GET /wp-includes/class-wp.php -> 404
2026-07-04 05:29:26,054 INFO: << 404 /wp-includes/class-wp.php
2026-07-04 05:29:26,058 INFO: >> GET /wp-includes/option.php
2026-07-04 05:29:26,058 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,059 INFO: GET /wp-includes/option.php
2026-07-04 05:29:26,060 WARNING: GET /wp-includes/option.php -> 404
2026-07-04 05:29:26,062 INFO: << 404 /wp-includes/option.php
2026-07-04 05:29:26,066 INFO: >> GET /wp-includes/post.php
2026-07-04 05:29:26,066 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,066 INFO: GET /wp-includes/post.php
2026-07-04 05:29:26,067 WARNING: GET /wp-includes/post.php -> 404
2026-07-04 05:29:26,070 INFO: << 404 /wp-includes/post.php
2026-07-04 05:29:26,074 INFO: >> GET /wp-includes/user.php
2026-07-04 05:29:26,074 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,075 INFO: GET /wp-includes/user.php
2026-07-04 05:29:26,076 WARNING: GET /wp-includes/user.php -> 404
2026-07-04 05:29:26,078 INFO: << 404 /wp-includes/user.php
2026-07-04 05:29:26,082 INFO: >> GET /wp-json/
2026-07-04 05:29:26,082 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,082 INFO: GET /wp-json/
2026-07-04 05:29:26,083 WARNING: GET /wp-json/ -> 404
2026-07-04 05:29:26,086 INFO: << 404 /wp-json/
2026-07-04 05:29:26,089 INFO: >> GET /wp-json/wp/v2/
2026-07-04 05:29:26,089 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,089 INFO: GET /wp-json/wp/v2/
2026-07-04 05:29:26,091 WARNING: GET /wp-json/wp/v2/ -> 404
2026-07-04 05:29:26,093 INFO: << 404 /wp-json/wp/v2/
2026-07-04 05:29:26,096 INFO: >> GET /wp-json/oembed/1.0/embed
2026-07-04 05:29:26,096 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,096 INFO: GET /wp-json/oembed/1.0/embed
2026-07-04 05:29:26,098 WARNING: GET /wp-json/oembed/1.0/embed -> 404
2026-07-04 05:29:26,100 INFO: << 404 /wp-json/oembed/1.0/embed
2026-07-04 05:29:26,103 INFO: >> GET /
2026-07-04 05:29:26,103 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,103 INFO: GET /
2026-07-04 05:29:26,104 WARNING: GET / -> 404
2026-07-04 05:29:26,106 INFO: << 404 /
2026-07-04 05:29:26,110 INFO: >> GET /wp-json/wp/v2/posts
2026-07-04 05:29:26,110 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,110 INFO: GET /wp-json/wp/v2/posts
2026-07-04 05:29:26,112 WARNING: GET /wp-json/wp/v2/posts -> 404
2026-07-04 05:29:26,114 INFO: << 404 /wp-json/wp/v2/posts
2026-07-04 05:29:26,149 INFO: >> GET /wp-json/wp/v2/pages
2026-07-04 05:29:26,150 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,150 INFO: GET /wp-json/wp/v2/pages
2026-07-04 05:29:26,151 WARNING: GET /wp-json/wp/v2/pages -> 404
2026-07-04 05:29:26,154 INFO: << 404 /wp-json/wp/v2/pages
2026-07-04 05:29:26,157 INFO: >> GET /wp-json/wp/v2/media
2026-07-04 05:29:26,157 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,158 INFO: GET /wp-json/wp/v2/media
2026-07-04 05:29:26,159 WARNING: GET /wp-json/wp/v2/media -> 404
2026-07-04 05:29:26,162 INFO: << 404 /wp-json/wp/v2/media
2026-07-04 05:29:26,165 INFO: >> GET /wp-json/wp/v2/categories
2026-07-04 05:29:26,165 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,166 INFO: GET /wp-json/wp/v2/categories
2026-07-04 05:29:26,167 WARNING: GET /wp-json/wp/v2/categories -> 404
2026-07-04 05:29:26,169 INFO: << 404 /wp-json/wp/v2/categories
2026-07-04 05:29:26,173 INFO: >> GET /wp-json/wp/v2/tags
2026-07-04 05:29:26,173 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,173 INFO: GET /wp-json/wp/v2/tags
2026-07-04 05:29:26,175 WARNING: GET /wp-json/wp/v2/tags -> 404
2026-07-04 05:29:26,177 INFO: << 404 /wp-json/wp/v2/tags
2026-07-04 05:29:26,181 INFO: >> GET /
2026-07-04 05:29:26,182 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,182 INFO: GET /
2026-07-04 05:29:26,183 WARNING: GET / -> 404
2026-07-04 05:29:26,185 INFO: << 404 /
2026-07-04 05:29:26,189 INFO: >> GET /wp-content/uploads/
2026-07-04 05:29:26,189 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,189 INFO: GET /wp-content/uploads/
2026-07-04 05:29:26,191 WARNING: GET /wp-content/uploads/ -> 404
2026-07-04 05:29:26,193 INFO: << 404 /wp-content/uploads/
2026-07-04 05:29:26,196 INFO: >> GET /wp-content/themes/twentytwenty/
2026-07-04 05:29:26,197 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,197 INFO: GET /wp-content/themes/twentytwenty/
2026-07-04 05:29:26,198 WARNING: GET /wp-content/themes/twentytwenty/ -> 404
2026-07-04 05:29:26,201 INFO: << 404 /wp-content/themes/twentytwenty/
2026-07-04 05:29:26,204 INFO: >> GET /wp-content/themes/twentytwentyone/
2026-07-04 05:29:26,204 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,205 INFO: GET /wp-content/themes/twentytwentyone/
2026-07-04 05:29:26,206 WARNING: GET /wp-content/themes/twentytwentyone/ -> 404
2026-07-04 05:29:26,208 INFO: << 404 /wp-content/themes/twentytwentyone/
2026-07-04 05:29:26,212 INFO: >> GET /wp-content/themes/twentytwentytwo/
2026-07-04 05:29:26,213 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,213 INFO: GET /wp-content/themes/twentytwentytwo/
2026-07-04 05:29:26,214 WARNING: GET /wp-content/themes/twentytwentytwo/ -> 404
2026-07-04 05:29:26,217 INFO: << 404 /wp-content/themes/twentytwentytwo/
2026-07-04 05:29:26,220 INFO: >> GET /wp-content/themes/twentytwentythree/
2026-07-04 05:29:26,220 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,220 INFO: GET /wp-content/themes/twentytwentythree/
2026-07-04 05:29:26,221 WARNING: GET /wp-content/themes/twentytwentythree/ -> 404
2026-07-04 05:29:26,224 INFO: << 404 /wp-content/themes/twentytwentythree/
2026-07-04 05:29:26,227 INFO: >> GET /wp-content/plugins/hello.php
2026-07-04 05:29:26,227 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,228 INFO: GET /wp-content/plugins/hello.php
2026-07-04 05:29:26,229 WARNING: GET /wp-content/plugins/hello.php -> 404
2026-07-04 05:29:26,231 INFO: << 404 /wp-content/plugins/hello.php
2026-07-04 05:29:26,234 INFO: >> GET /wp-content/plugins/akismet/
2026-07-04 05:29:26,234 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,235 INFO: GET /wp-content/plugins/akismet/
2026-07-04 05:29:26,236 WARNING: GET /wp-content/plugins/akismet/ -> 404
2026-07-04 05:29:26,238 INFO: << 404 /wp-content/plugins/akismet/
2026-07-04 05:29:26,246 INFO: >> GET /wp-includes/images/w-logo-blue.png
2026-07-04 05:29:26,246 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,247 INFO: GET /wp-includes/images/w-logo-blue.png
2026-07-04 05:29:26,248 WARNING: GET /wp-includes/images/w-logo-blue.png -> 404
2026-07-04 05:29:26,250 INFO: << 404 /wp-includes/images/w-logo-blue.png
2026-07-04 05:29:26,254 INFO: >> GET /robots.txt
2026-07-04 05:29:26,255 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,255 INFO: GET /robots.txt
2026-07-04 05:29:26,256 WARNING: GET /robots.txt -> 404
2026-07-04 05:29:26,259 INFO: << 404 /robots.txt
2026-07-04 05:29:26,263 INFO: >> GET /sitemap.xml
2026-07-04 05:29:26,263 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,263 INFO: GET /sitemap.xml
2026-07-04 05:29:26,265 WARNING: GET /sitemap.xml -> 404
2026-07-04 05:29:26,267 INFO: << 404 /sitemap.xml
2026-07-04 05:29:26,270 INFO: >> GET /feed/
2026-07-04 05:29:26,270 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,271 INFO: GET /feed/
2026-07-04 05:29:26,272 WARNING: GET /feed/ -> 404
2026-07-04 05:29:26,275 INFO: << 404 /feed/
2026-07-04 05:29:26,280 INFO: >> GET /feed/rss/
2026-07-04 05:29:26,280 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,280 INFO: GET /feed/rss/
2026-07-04 05:29:26,282 WARNING: GET /feed/rss/ -> 404
2026-07-04 05:29:26,284 INFO: << 404 /feed/rss/
2026-07-04 05:29:26,288 INFO: >> GET /feed/rss2/
2026-07-04 05:29:26,288 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,288 INFO: GET /feed/rss2/
2026-07-04 05:29:26,290 WARNING: GET /feed/rss2/ -> 404
2026-07-04 05:29:26,292 INFO: << 404 /feed/rss2/
2026-07-04 05:29:26,296 INFO: >> GET /feed/atom/
2026-07-04 05:29:26,296 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,296 INFO: GET /feed/atom/
2026-07-04 05:29:26,298 WARNING: GET /feed/atom/ -> 404
2026-07-04 05:29:26,300 INFO: << 404 /feed/atom/
2026-07-04 05:29:26,303 INFO: >> GET /
2026-07-04 05:29:26,303 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,304 INFO: GET /
2026-07-04 05:29:26,305 WARNING: GET / -> 404
2026-07-04 05:29:26,307 INFO: << 404 /
2026-07-04 05:29:26,311 INFO: >> GET /
2026-07-04 05:29:26,311 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,311 INFO: GET /
2026-07-04 05:29:26,312 WARNING: GET / -> 404
2026-07-04 05:29:26,315 INFO: << 404 /
2026-07-04 05:29:26,319 INFO: >> GET /
2026-07-04 05:29:26,319 DEBUG: Using selector: EpollSelector
2026-07-04 05:29:26,320 INFO: GET /
2026-07-04 05:29:26,321 WARNING: GET / -> 404
2026-07-04 05:29:26,323 INFO: << 404 /
2026-07-05 16:35:44,742 INFO: wsgi.py loading...
2026-07-05 16:35:44,742 INFO: Importing app.main...
2026-07-05 16:35:48,420 INFO: app.main imported successfully.
2026-07-05 16:35:48,420 INFO: Running DB init...
2026-07-05 16:35:48,486 INFO: All tables OK.
2026-07-05 16:35:48,631 INFO: Migration OK: allowances ENUM+DAILY
2026-07-05 16:35:48,633 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,636 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,638 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,641 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,644 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,646 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 16:35:48,655 INFO: Dip chart data seeded.
2026-07-05 16:35:48,655 INFO: DB init complete.
2026-07-05 16:35:48,655 INFO: wsgi.py ready.
2026-07-05 16:35:48,658 INFO: >> GET /
2026-07-05 16:35:48,660 DEBUG: Using selector: EpollSelector
2026-07-05 16:35:48,670 INFO: GET /
2026-07-05 16:35:48,673 WARNING: GET / -> 404
2026-07-05 16:35:48,682 INFO: << 404 /
2026-07-05 18:53:52,550 INFO: wsgi.py loading...
2026-07-05 18:53:52,551 INFO: Importing app.main...
2026-07-05 18:53:54,371 INFO: app.main imported successfully.
2026-07-05 18:53:54,371 INFO: Running DB init...
2026-07-05 18:53:54,437 INFO: All tables OK.
2026-07-05 18:53:54,586 INFO: Migration OK: allowances ENUM+DAILY
2026-07-05 18:53:54,589 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,592 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,594 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,597 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,600 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,603 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-05 18:53:54,610 INFO: Dip chart data seeded.
2026-07-05 18:53:54,610 INFO: DB init complete.
2026-07-05 18:53:54,610 INFO: wsgi.py ready.
2026-07-05 18:53:54,614 INFO: >> GET /robots.txt
2026-07-05 18:53:54,615 DEBUG: Using selector: EpollSelector
2026-07-05 18:53:54,616 INFO: >> GET /
2026-07-05 18:53:54,618 DEBUG: Using selector: EpollSelector
2026-07-05 18:53:54,626 INFO: GET /robots.txt
2026-07-05 18:53:54,628 INFO: GET /
2026-07-05 18:53:54,629 WARNING: GET /robots.txt -> 404
2026-07-05 18:53:54,631 WARNING: GET / -> 404
2026-07-05 18:53:54,638 INFO: << 404 /robots.txt
2026-07-05 18:53:54,641 INFO: << 404 /
2026-07-05 18:58:33,474 INFO: >> GET /
2026-07-05 18:58:33,475 DEBUG: Using selector: EpollSelector
2026-07-05 18:58:33,485 INFO: GET /
2026-07-05 18:58:33,487 WARNING: GET / -> 404
2026-07-05 18:58:33,516 INFO: << 404 /
2026-07-05 18:58:37,930 INFO: >> GET /favicon.ico
2026-07-05 18:58:37,932 DEBUG: Using selector: EpollSelector
2026-07-05 18:58:37,941 INFO: GET /favicon.ico
2026-07-05 18:58:37,944 WARNING: GET /favicon.ico -> 404
2026-07-05 18:58:37,973 INFO: << 404 /favicon.ico
2026-07-06 13:04:18,388 INFO: wsgi.py loading...
2026-07-06 13:04:18,388 INFO: Importing app.main...
2026-07-06 13:04:22,104 INFO: app.main imported successfully.
2026-07-06 13:04:22,104 INFO: Running DB init...
2026-07-06 13:04:22,163 INFO: All tables OK.
2026-07-06 13:04:22,315 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 13:04:22,318 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,320 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,323 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,325 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,328 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,331 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 13:04:22,341 INFO: Dip chart data seeded.
2026-07-06 13:04:22,341 INFO: DB init complete.
2026-07-06 13:04:22,341 INFO: wsgi.py ready.
2026-07-06 13:04:22,344 INFO: >> GET /
2026-07-06 13:04:22,346 DEBUG: Using selector: EpollSelector
2026-07-06 13:04:22,356 INFO: GET /
2026-07-06 13:04:22,359 WARNING: GET / -> 404
2026-07-06 13:04:22,368 INFO: << 404 /
2026-07-06 14:25:12,141 INFO: wsgi.py loading...
2026-07-06 14:25:12,141 INFO: Importing app.main...
2026-07-06 14:25:14,008 INFO: app.main imported successfully.
2026-07-06 14:25:14,008 INFO: Running DB init...
2026-07-06 14:25:14,076 INFO: All tables OK.
2026-07-06 14:25:14,215 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 14:25:14,218 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,221 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,223 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,226 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,229 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,231 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 14:25:14,239 INFO: Dip chart data seeded.
2026-07-06 14:25:14,239 INFO: DB init complete.
2026-07-06 14:25:14,239 INFO: wsgi.py ready.
2026-07-06 14:25:14,242 INFO: >> GET /
2026-07-06 14:25:14,244 DEBUG: Using selector: EpollSelector
2026-07-06 14:25:14,245 INFO: >> GET /
2026-07-06 14:25:14,246 DEBUG: Using selector: EpollSelector
2026-07-06 14:25:14,254 INFO: GET /
2026-07-06 14:25:14,257 INFO: GET /
2026-07-06 14:25:14,257 WARNING: GET / -> 404
2026-07-06 14:25:14,259 WARNING: GET / -> 404
2026-07-06 14:25:14,266 INFO: << 404 /
2026-07-06 14:25:14,268 INFO: << 404 /
2026-07-06 15:07:05,616 INFO: wsgi.py loading...
2026-07-06 15:07:05,616 INFO: Importing app.main...
2026-07-06 15:07:07,377 INFO: app.main imported successfully.
2026-07-06 15:07:07,377 INFO: Running DB init...
2026-07-06 15:07:07,441 INFO: All tables OK.
2026-07-06 15:07:07,577 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 15:07:07,579 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,582 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,584 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,587 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,589 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,592 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:07:07,600 INFO: Dip chart data seeded.
2026-07-06 15:07:07,600 INFO: DB init complete.
2026-07-06 15:07:07,600 INFO: wsgi.py ready.
2026-07-06 15:07:07,603 INFO: >> GET /robots.txt
2026-07-06 15:07:07,605 DEBUG: Using selector: EpollSelector
2026-07-06 15:07:07,615 INFO: GET /robots.txt
2026-07-06 15:07:07,618 WARNING: GET /robots.txt -> 404
2026-07-06 15:07:07,627 INFO: << 404 /robots.txt
2026-07-06 15:07:07,813 INFO: >> GET /
2026-07-06 15:07:07,813 DEBUG: Using selector: EpollSelector
2026-07-06 15:07:07,814 INFO: GET /
2026-07-06 15:07:07,815 WARNING: GET / -> 404
2026-07-06 15:07:07,818 INFO: << 404 /
2026-07-06 15:15:58,545 INFO: wsgi.py loading...
2026-07-06 15:15:58,546 INFO: Importing app.main...
2026-07-06 15:16:00,332 INFO: app.main imported successfully.
2026-07-06 15:16:00,332 INFO: Running DB init...
2026-07-06 15:16:00,400 INFO: All tables OK.
2026-07-06 15:16:00,554 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 15:16:00,557 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,560 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,562 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,565 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,568 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,570 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 15:16:00,579 INFO: Dip chart data seeded.
2026-07-06 15:16:00,579 INFO: DB init complete.
2026-07-06 15:16:00,579 INFO: wsgi.py ready.
2026-07-06 15:16:00,582 INFO: >> GET /
2026-07-06 15:16:00,584 DEBUG: Using selector: EpollSelector
2026-07-06 15:16:00,594 INFO: GET /
2026-07-06 15:16:00,597 WARNING: GET / -> 404
2026-07-06 15:16:00,606 INFO: << 404 /
2026-07-06 20:03:28,954 INFO: wsgi.py loading...
2026-07-06 20:03:28,954 INFO: Importing app.main...
2026-07-06 20:03:32,701 INFO: app.main imported successfully.
2026-07-06 20:03:32,701 INFO: Running DB init...
2026-07-06 20:03:32,765 INFO: All tables OK.
2026-07-06 20:03:32,903 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 20:03:32,905 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,908 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,910 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,912 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,915 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,918 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:03:32,926 INFO: Dip chart data seeded.
2026-07-06 20:03:32,926 INFO: DB init complete.
2026-07-06 20:03:32,926 INFO: wsgi.py ready.
2026-07-06 20:03:32,929 INFO: >> GET /
2026-07-06 20:03:32,931 DEBUG: Using selector: EpollSelector
2026-07-06 20:03:32,941 INFO: GET /
2026-07-06 20:03:32,944 WARNING: GET / -> 404
2026-07-06 20:03:32,953 INFO: << 404 /
2026-07-06 20:10:03,237 INFO: wsgi.py loading...
2026-07-06 20:10:03,238 INFO: Importing app.main...
2026-07-06 20:10:05,105 INFO: app.main imported successfully.
2026-07-06 20:10:05,105 INFO: Running DB init...
2026-07-06 20:10:05,171 INFO: All tables OK.
2026-07-06 20:10:05,309 INFO: Migration OK: allowances ENUM+DAILY
2026-07-06 20:10:05,312 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,315 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,317 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,320 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,322 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,325 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-06 20:10:05,333 INFO: Dip chart data seeded.
2026-07-06 20:10:05,333 INFO: DB init complete.
2026-07-06 20:10:05,333 INFO: wsgi.py ready.
2026-07-06 20:10:05,337 INFO: >> GET /favicon.ico
2026-07-06 20:10:05,338 DEBUG: Using selector: EpollSelector
2026-07-06 20:10:05,348 INFO: GET /favicon.ico
2026-07-06 20:10:05,351 WARNING: GET /favicon.ico -> 404
2026-07-06 20:10:05,359 INFO: << 404 /favicon.ico
2026-07-07 02:56:27,816 INFO: wsgi.py loading...
2026-07-07 02:56:27,817 INFO: Importing app.main...
2026-07-07 02:56:30,580 INFO: app.main imported successfully.
2026-07-07 02:56:30,580 INFO: Running DB init...
2026-07-07 02:56:30,641 INFO: All tables OK.
2026-07-07 02:56:30,769 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 02:56:30,771 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,773 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,776 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,778 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,780 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,783 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 02:56:30,792 INFO: Dip chart data seeded.
2026-07-07 02:56:30,792 INFO: DB init complete.
2026-07-07 02:56:30,792 INFO: wsgi.py ready.
2026-07-07 02:56:30,795 INFO: >> GET /
2026-07-07 02:56:30,796 DEBUG: Using selector: EpollSelector
2026-07-07 02:56:30,806 INFO: GET /
2026-07-07 02:56:30,809 WARNING: GET / -> 404
2026-07-07 02:56:30,817 INFO: << 404 /
2026-07-07 03:02:11,624 INFO: >> GET /
2026-07-07 03:02:11,626 DEBUG: Using selector: EpollSelector
2026-07-07 03:02:11,638 INFO: GET /
2026-07-07 03:02:11,640 WARNING: GET / -> 404
2026-07-07 03:02:11,679 INFO: << 404 /
2026-07-07 04:23:18,058 INFO: wsgi.py loading...
2026-07-07 04:23:18,059 INFO: Importing app.main...
2026-07-07 04:23:19,895 INFO: app.main imported successfully.
2026-07-07 04:23:19,895 INFO: Running DB init...
2026-07-07 04:23:19,959 INFO: All tables OK.
2026-07-07 04:23:20,098 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 04:23:20,101 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,104 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,106 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,109 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,112 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,114 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 04:23:20,123 INFO: Dip chart data seeded.
2026-07-07 04:23:20,123 INFO: DB init complete.
2026-07-07 04:23:20,123 INFO: wsgi.py ready.
2026-07-07 04:23:20,126 INFO: >> GET /
2026-07-07 04:23:20,127 DEBUG: Using selector: EpollSelector
2026-07-07 04:23:20,137 INFO: GET /
2026-07-07 04:23:20,139 WARNING: GET / -> 404
2026-07-07 04:23:20,148 INFO: << 404 /
2026-07-07 08:56:01,114 INFO: wsgi.py loading...
2026-07-07 08:56:01,115 INFO: Importing app.main...
2026-07-07 08:56:04,476 INFO: app.main imported successfully.
2026-07-07 08:56:04,476 INFO: Running DB init...
2026-07-07 08:56:04,542 INFO: All tables OK.
2026-07-07 08:56:04,677 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 08:56:04,680 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,683 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,685 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,688 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,690 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,693 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 08:56:04,702 INFO: Dip chart data seeded.
2026-07-07 08:56:04,702 INFO: DB init complete.
2026-07-07 08:56:04,702 INFO: wsgi.py ready.
2026-07-07 08:56:04,705 INFO: >> GET /
2026-07-07 08:56:04,707 DEBUG: Using selector: EpollSelector
2026-07-07 08:56:04,717 INFO: GET /
2026-07-07 08:56:04,720 WARNING: GET / -> 404
2026-07-07 08:56:04,729 INFO: << 404 /
2026-07-07 14:41:38,108 INFO: wsgi.py loading...
2026-07-07 14:41:38,108 INFO: Importing app.main...
2026-07-07 14:41:41,933 INFO: app.main imported successfully.
2026-07-07 14:41:41,933 INFO: Running DB init...
2026-07-07 14:41:41,999 INFO: All tables OK.
2026-07-07 14:41:42,137 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 14:41:42,140 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,142 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,145 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,147 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,150 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,152 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 14:41:42,162 INFO: Dip chart data seeded.
2026-07-07 14:41:42,162 INFO: DB init complete.
2026-07-07 14:41:42,162 INFO: wsgi.py ready.
2026-07-07 14:41:42,166 INFO: >> GET /
2026-07-07 14:41:42,167 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:42,178 INFO: GET /
2026-07-07 14:41:42,180 WARNING: GET / -> 404
2026-07-07 14:41:42,190 INFO: << 404 /
2026-07-07 14:41:42,345 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-07-07 14:41:42,346 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:42,346 INFO: GET //wp-includes/wlwmanifest.xml
2026-07-07 14:41:42,347 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:42,351 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-07-07 14:41:42,506 INFO: >> GET //xmlrpc.php
2026-07-07 14:41:42,506 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:42,506 INFO: GET //xmlrpc.php
2026-07-07 14:41:42,508 WARNING: GET //xmlrpc.php -> 404
2026-07-07 14:41:42,511 INFO: << 404 //xmlrpc.php
2026-07-07 14:41:42,666 INFO: >> GET /
2026-07-07 14:41:42,666 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:42,667 INFO: GET /
2026-07-07 14:41:42,668 WARNING: GET / -> 404
2026-07-07 14:41:42,670 INFO: << 404 /
2026-07-07 14:41:42,825 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-07-07 14:41:42,826 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:42,826 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-07-07 14:41:42,827 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:42,830 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,003 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,006 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,009 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,010 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,013 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,170 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,170 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,171 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,172 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,175 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,330 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,331 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,331 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,333 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,335 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,490 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,491 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,491 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,492 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,495 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,661 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,661 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,662 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,663 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,666 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,821 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,822 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,822 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,823 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,826 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,981 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,981 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:43,982 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-07-07 14:41:43,983 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:43,985 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,140 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,140 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,141 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,142 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,145 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,300 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,301 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,301 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,302 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,305 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,460 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,460 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,461 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,462 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,465 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,620 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,620 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,620 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,621 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,624 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,779 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,780 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,780 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,781 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,784 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,939 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,939 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:44,940 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-07-07 14:41:44,941 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:44,943 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,098 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,099 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:45,099 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,100 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:45,103 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,259 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,259 DEBUG: Using selector: EpollSelector
2026-07-07 14:41:45,259 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-07-07 14:41:45,261 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-07-07 14:41:45,264 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-07-07 17:03:49,497 INFO: wsgi.py loading...
2026-07-07 17:03:49,498 INFO: Importing app.main...
2026-07-07 17:03:51,395 INFO: app.main imported successfully.
2026-07-07 17:03:51,395 INFO: Running DB init...
2026-07-07 17:03:51,467 INFO: All tables OK.
2026-07-07 17:03:51,604 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 17:03:51,607 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,609 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,612 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,614 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,617 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,620 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:03:51,628 INFO: Dip chart data seeded.
2026-07-07 17:03:51,628 INFO: DB init complete.
2026-07-07 17:03:51,628 INFO: wsgi.py ready.
2026-07-07 17:03:51,631 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-07 17:03:51,633 DEBUG: Using selector: EpollSelector
2026-07-07 17:03:51,644 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-07 17:03:51,647 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-07-07 17:03:51,656 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-07 17:50:01,718 INFO: wsgi.py loading...
2026-07-07 17:50:01,718 INFO: Importing app.main...
2026-07-07 17:50:04,381 INFO: app.main imported successfully.
2026-07-07 17:50:04,381 INFO: Running DB init...
2026-07-07 17:50:04,452 INFO: All tables OK.
2026-07-07 17:50:04,625 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 17:50:04,629 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,632 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,638 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,641 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,645 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,650 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 17:50:04,659 INFO: Dip chart data seeded.
2026-07-07 17:50:04,660 INFO: DB init complete.
2026-07-07 17:50:04,660 INFO: wsgi.py ready.
2026-07-07 17:50:04,663 INFO: >> GET /
2026-07-07 17:50:04,665 DEBUG: Using selector: EpollSelector
2026-07-07 17:50:04,678 INFO: GET /
2026-07-07 17:50:04,681 WARNING: GET / -> 404
2026-07-07 17:50:04,691 INFO: << 404 /
2026-07-07 22:28:10,524 INFO: wsgi.py loading...
2026-07-07 22:28:10,525 INFO: Importing app.main...
2026-07-07 22:28:14,175 INFO: app.main imported successfully.
2026-07-07 22:28:14,175 INFO: Running DB init...
2026-07-07 22:28:14,250 INFO: All tables OK.
2026-07-07 22:28:14,401 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 22:28:14,403 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,405 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,408 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,410 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,413 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,415 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 22:28:14,423 INFO: Dip chart data seeded.
2026-07-07 22:28:14,423 INFO: DB init complete.
2026-07-07 22:28:14,423 INFO: wsgi.py ready.
2026-07-07 22:28:14,426 INFO: >> GET /
2026-07-07 22:28:14,428 DEBUG: Using selector: EpollSelector
2026-07-07 22:28:14,438 INFO: GET /
2026-07-07 22:28:14,440 WARNING: GET / -> 404
2026-07-07 22:28:14,448 INFO: << 404 /
2026-07-07 22:28:15,664 INFO: >> GET /favicon.ico
2026-07-07 22:28:15,666 DEBUG: Using selector: EpollSelector
2026-07-07 22:28:15,675 INFO: GET /favicon.ico
2026-07-07 22:28:15,678 WARNING: GET /favicon.ico -> 404
2026-07-07 22:28:15,686 INFO: << 404 /favicon.ico
2026-07-07 22:29:24,955 INFO: >> GET /
2026-07-07 22:29:24,955 DEBUG: Using selector: EpollSelector
2026-07-07 22:29:24,956 INFO: GET /
2026-07-07 22:29:24,957 WARNING: GET / -> 404
2026-07-07 22:29:24,980 INFO: << 404 /
2026-07-07 22:29:25,843 INFO: >> GET /favicon.ico
2026-07-07 22:29:25,844 DEBUG: Using selector: EpollSelector
2026-07-07 22:29:25,844 INFO: GET /favicon.ico
2026-07-07 22:29:25,845 WARNING: GET /favicon.ico -> 404
2026-07-07 22:29:25,868 INFO: << 404 /favicon.ico
2026-07-07 23:51:13,251 INFO: wsgi.py loading...
2026-07-07 23:51:13,258 INFO: Importing app.main...
2026-07-07 23:51:15,183 INFO: app.main imported successfully.
2026-07-07 23:51:15,184 INFO: Running DB init...
2026-07-07 23:51:15,269 INFO: All tables OK.
2026-07-07 23:51:15,407 INFO: Migration OK: allowances ENUM+DAILY
2026-07-07 23:51:15,410 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,412 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,415 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,417 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,420 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,423 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-07 23:51:15,431 INFO: Dip chart data seeded.
2026-07-07 23:51:15,431 INFO: DB init complete.
2026-07-07 23:51:15,431 INFO: wsgi.py ready.
2026-07-07 23:51:15,434 INFO: >> GET /
2026-07-07 23:51:15,435 DEBUG: Using selector: EpollSelector
2026-07-07 23:51:15,446 INFO: GET /
2026-07-07 23:51:15,448 WARNING: GET / -> 404
2026-07-07 23:51:15,461 INFO: << 404 /
2026-07-08 02:49:01,288 INFO: wsgi.py loading...
2026-07-08 02:49:01,289 INFO: Importing app.main...
2026-07-08 02:49:03,131 INFO: app.main imported successfully.
2026-07-08 02:49:03,131 INFO: Running DB init...
2026-07-08 02:49:03,197 INFO: All tables OK.
2026-07-08 02:49:03,329 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 02:49:03,331 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,334 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,336 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,338 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,341 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,343 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 02:49:03,351 INFO: Dip chart data seeded.
2026-07-08 02:49:03,351 INFO: DB init complete.
2026-07-08 02:49:03,351 INFO: wsgi.py ready.
2026-07-08 02:49:03,355 INFO: >> GET /robots.txt
2026-07-08 02:49:03,356 DEBUG: Using selector: EpollSelector
2026-07-08 02:49:03,366 INFO: GET /robots.txt
2026-07-08 02:49:03,369 WARNING: GET /robots.txt -> 404
2026-07-08 02:49:03,377 INFO: << 404 /robots.txt
2026-07-08 02:49:03,578 INFO: >> GET /
2026-07-08 02:49:03,578 DEBUG: Using selector: EpollSelector
2026-07-08 02:49:03,579 INFO: GET /
2026-07-08 02:49:03,580 WARNING: GET / -> 404
2026-07-08 02:49:03,582 INFO: << 404 /
2026-07-08 06:20:43,157 INFO: wsgi.py loading...
2026-07-08 06:20:43,158 INFO: Importing app.main...
2026-07-08 06:20:46,505 INFO: app.main imported successfully.
2026-07-08 06:20:46,505 INFO: Running DB init...
2026-07-08 06:20:46,568 INFO: All tables OK.
2026-07-08 06:20:46,710 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 06:20:46,713 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,716 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,719 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,721 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,725 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,734 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 06:20:46,742 INFO: Dip chart data seeded.
2026-07-08 06:20:46,742 INFO: DB init complete.
2026-07-08 06:20:46,742 INFO: wsgi.py ready.
2026-07-08 06:20:46,746 INFO: >> GET /v1/metadata
2026-07-08 06:20:46,748 DEBUG: Using selector: EpollSelector
2026-07-08 06:20:46,758 INFO: GET /v1/metadata
2026-07-08 06:20:46,761 WARNING: GET /v1/metadata -> 404
2026-07-08 06:20:46,771 INFO: << 404 /v1/metadata
2026-07-08 07:55:10,028 INFO: wsgi.py loading...
2026-07-08 07:55:10,028 INFO: Importing app.main...
2026-07-08 07:55:11,962 INFO: app.main imported successfully.
2026-07-08 07:55:11,962 INFO: Running DB init...
2026-07-08 07:55:12,036 INFO: All tables OK.
2026-07-08 07:55:12,172 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 07:55:12,175 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,178 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,180 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,183 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,186 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,189 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 07:55:12,198 INFO: Dip chart data seeded.
2026-07-08 07:55:12,198 INFO: DB init complete.
2026-07-08 07:55:12,198 INFO: wsgi.py ready.
2026-07-08 07:55:12,202 INFO: >> GET /
2026-07-08 07:55:12,203 DEBUG: Using selector: EpollSelector
2026-07-08 07:55:12,214 INFO: GET /
2026-07-08 07:55:12,217 WARNING: GET / -> 404
2026-07-08 07:55:12,226 INFO: << 404 /
2026-07-08 07:55:26,880 INFO: >> POST /elfinder/connector.php
2026-07-08 07:55:26,880 DEBUG: Using selector: EpollSelector
2026-07-08 07:55:26,880 INFO: POST /elfinder/connector.php
2026-07-08 07:55:26,882 WARNING: POST /elfinder/connector.php -> 404
2026-07-08 07:55:26,885 INFO: << 404 /elfinder/connector.php
2026-07-08 10:56:26,904 INFO: wsgi.py loading...
2026-07-08 10:56:26,911 INFO: Importing app.main...
2026-07-08 10:56:30,383 INFO: app.main imported successfully.
2026-07-08 10:56:30,383 INFO: Running DB init...
2026-07-08 10:56:30,469 INFO: All tables OK.
2026-07-08 10:56:30,647 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 10:56:30,650 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,653 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,656 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,659 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,663 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,666 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 10:56:30,676 INFO: Dip chart data seeded.
2026-07-08 10:56:30,676 INFO: DB init complete.
2026-07-08 10:56:30,676 INFO: wsgi.py ready.
2026-07-08 10:56:30,680 INFO: >> GET /
2026-07-08 10:56:30,682 DEBUG: Using selector: EpollSelector
2026-07-08 10:56:30,693 INFO: GET /
2026-07-08 10:56:30,696 WARNING: GET / -> 404
2026-07-08 10:56:30,717 INFO: << 404 /
2026-07-08 16:36:41,663 INFO: wsgi.py loading...
2026-07-08 16:36:41,664 INFO: Importing app.main...
2026-07-08 16:36:45,485 INFO: app.main imported successfully.
2026-07-08 16:36:45,485 INFO: Running DB init...
2026-07-08 16:36:45,549 INFO: All tables OK.
2026-07-08 16:36:45,689 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 16:36:45,692 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,695 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,697 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,700 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,703 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,705 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 16:36:45,713 INFO: Dip chart data seeded.
2026-07-08 16:36:45,714 INFO: DB init complete.
2026-07-08 16:36:45,714 INFO: wsgi.py ready.
2026-07-08 16:36:45,717 INFO: >> GET /
2026-07-08 16:36:45,719 DEBUG: Using selector: EpollSelector
2026-07-08 16:36:45,730 INFO: GET /
2026-07-08 16:36:45,732 WARNING: GET / -> 404
2026-07-08 16:36:45,742 INFO: << 404 /
2026-07-08 20:20:25,351 INFO: wsgi.py loading...
2026-07-08 20:20:25,351 INFO: Importing app.main...
2026-07-08 20:20:29,104 INFO: app.main imported successfully.
2026-07-08 20:20:29,105 INFO: Running DB init...
2026-07-08 20:20:29,171 INFO: All tables OK.
2026-07-08 20:20:29,316 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 20:20:29,319 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,322 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,325 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,328 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,331 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,334 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:20:29,341 INFO: Dip chart data seeded.
2026-07-08 20:20:29,341 INFO: DB init complete.
2026-07-08 20:20:29,341 INFO: wsgi.py ready.
2026-07-08 20:20:29,345 INFO: >> GET /
2026-07-08 20:20:29,346 DEBUG: Using selector: EpollSelector
2026-07-08 20:20:29,357 INFO: GET /
2026-07-08 20:20:29,360 WARNING: GET / -> 404
2026-07-08 20:20:29,369 INFO: << 404 /
2026-07-08 20:55:53,248 INFO: wsgi.py loading...
2026-07-08 20:55:53,248 INFO: Importing app.main...
2026-07-08 20:55:55,032 INFO: app.main imported successfully.
2026-07-08 20:55:55,033 INFO: Running DB init...
2026-07-08 20:55:55,096 INFO: All tables OK.
2026-07-08 20:55:55,238 INFO: Migration OK: allowances ENUM+DAILY
2026-07-08 20:55:55,241 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,244 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,247 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,250 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,253 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,256 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-08 20:55:55,262 INFO: Dip chart data seeded.
2026-07-08 20:55:55,262 INFO: DB init complete.
2026-07-08 20:55:55,263 INFO: wsgi.py ready.
2026-07-08 20:55:55,266 INFO: >> GET /robots.txt
2026-07-08 20:55:55,268 DEBUG: Using selector: EpollSelector
2026-07-08 20:55:55,278 INFO: GET /robots.txt
2026-07-08 20:55:55,281 WARNING: GET /robots.txt -> 404
2026-07-08 20:55:55,290 INFO: << 404 /robots.txt
2026-07-08 20:56:00,077 INFO: >> GET /
2026-07-08 20:56:00,079 DEBUG: Using selector: EpollSelector
2026-07-08 20:56:00,089 INFO: GET /
2026-07-08 20:56:00,092 WARNING: GET / -> 404
2026-07-08 20:56:00,101 INFO: << 404 /
2026-07-09 07:12:22,265 INFO: wsgi.py loading...
2026-07-09 07:12:22,265 INFO: Importing app.main...
2026-07-09 07:12:26,100 INFO: app.main imported successfully.
2026-07-09 07:12:26,100 INFO: Running DB init...
2026-07-09 07:12:26,170 INFO: All tables OK.
2026-07-09 07:12:26,309 INFO: Migration OK: allowances ENUM+DAILY
2026-07-09 07:12:26,311 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,314 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,316 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,319 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,322 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,324 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 07:12:26,334 INFO: Dip chart data seeded.
2026-07-09 07:12:26,334 INFO: DB init complete.
2026-07-09 07:12:26,334 INFO: wsgi.py ready.
2026-07-09 07:12:26,337 INFO: >> GET /robots.txt
2026-07-09 07:12:26,339 DEBUG: Using selector: EpollSelector
2026-07-09 07:12:26,350 INFO: GET /robots.txt
2026-07-09 07:12:26,354 WARNING: GET /robots.txt -> 404
2026-07-09 07:12:26,365 INFO: << 404 /robots.txt
2026-07-09 11:47:31,552 INFO: wsgi.py loading...
2026-07-09 11:47:31,552 INFO: Importing app.main...
2026-07-09 11:47:33,407 INFO: app.main imported successfully.
2026-07-09 11:47:33,407 INFO: Running DB init...
2026-07-09 11:47:33,471 INFO: All tables OK.
2026-07-09 11:47:33,609 INFO: Migration OK: allowances ENUM+DAILY
2026-07-09 11:47:33,612 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,614 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,617 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,619 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,622 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,624 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 11:47:33,633 INFO: Dip chart data seeded.
2026-07-09 11:47:33,633 INFO: DB init complete.
2026-07-09 11:47:33,633 INFO: wsgi.py ready.
2026-07-09 11:47:33,636 INFO: >> GET /
2026-07-09 11:47:33,638 DEBUG: Using selector: EpollSelector
2026-07-09 11:47:33,648 INFO: GET /
2026-07-09 11:47:33,651 WARNING: GET / -> 404
2026-07-09 11:47:33,660 INFO: << 404 /
2026-07-09 16:59:09,637 INFO: wsgi.py loading...
2026-07-09 16:59:09,637 INFO: Importing app.main...
2026-07-09 16:59:11,514 INFO: app.main imported successfully.
2026-07-09 16:59:11,514 INFO: Running DB init...
2026-07-09 16:59:11,574 INFO: All tables OK.
2026-07-09 16:59:11,710 INFO: Migration OK: allowances ENUM+DAILY
2026-07-09 16:59:11,713 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,716 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,718 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,720 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,723 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,725 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 16:59:11,734 INFO: Dip chart data seeded.
2026-07-09 16:59:11,734 INFO: DB init complete.
2026-07-09 16:59:11,734 INFO: wsgi.py ready.
2026-07-09 16:59:11,737 INFO: >> GET /
2026-07-09 16:59:11,738 DEBUG: Using selector: EpollSelector
2026-07-09 16:59:11,739 INFO: >> GET /robots.txt
2026-07-09 16:59:11,740 DEBUG: Using selector: EpollSelector
2026-07-09 16:59:11,750 INFO: GET /robots.txt
2026-07-09 16:59:11,751 INFO: GET /
2026-07-09 16:59:11,753 WARNING: GET /robots.txt -> 404
2026-07-09 16:59:11,754 WARNING: GET / -> 404
2026-07-09 16:59:11,763 INFO: << 404 /
2026-07-09 16:59:11,763 INFO: << 404 /robots.txt
2026-07-09 22:38:11,873 INFO: wsgi.py loading...
2026-07-09 22:38:11,893 INFO: Importing app.main...
2026-07-09 22:38:17,258 INFO: app.main imported successfully.
2026-07-09 22:38:17,258 INFO: Running DB init...
2026-07-09 22:38:18,005 INFO: All tables OK.
2026-07-09 22:38:18,401 INFO: Migration OK: allowances ENUM+DAILY
2026-07-09 22:38:18,419 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,422 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,425 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,429 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,457 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,490 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 22:38:18,499 INFO: Dip chart data seeded.
2026-07-09 22:38:18,499 INFO: DB init complete.
2026-07-09 22:38:18,499 INFO: wsgi.py ready.
2026-07-09 22:38:18,503 INFO: >> GET /
2026-07-09 22:38:18,504 DEBUG: Using selector: EpollSelector
2026-07-09 22:38:18,516 INFO: GET /
2026-07-09 22:38:18,519 WARNING: GET / -> 404
2026-07-09 22:38:18,530 INFO: << 404 /
2026-07-09 23:05:14,555 INFO: wsgi.py loading...
2026-07-09 23:05:14,555 INFO: Importing app.main...
2026-07-09 23:05:16,376 INFO: app.main imported successfully.
2026-07-09 23:05:16,376 INFO: Running DB init...
2026-07-09 23:05:16,438 INFO: All tables OK.
2026-07-09 23:05:16,580 INFO: Migration OK: allowances ENUM+DAILY
2026-07-09 23:05:16,583 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,587 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,589 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,592 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,597 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,600 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-09 23:05:16,608 INFO: Dip chart data seeded.
2026-07-09 23:05:16,608 INFO: DB init complete.
2026-07-09 23:05:16,608 INFO: wsgi.py ready.
2026-07-09 23:05:16,611 INFO: >> GET /robots.txt
2026-07-09 23:05:16,612 DEBUG: Using selector: EpollSelector
2026-07-09 23:05:16,623 INFO: GET /robots.txt
2026-07-09 23:05:16,626 WARNING: GET /robots.txt -> 404
2026-07-09 23:05:16,636 INFO: << 404 /robots.txt
2026-07-10 04:52:08,056 INFO: wsgi.py loading...
2026-07-10 04:52:08,056 INFO: Importing app.main...
2026-07-10 04:52:09,869 INFO: app.main imported successfully.
2026-07-10 04:52:09,869 INFO: Running DB init...
2026-07-10 04:52:09,933 INFO: All tables OK.
2026-07-10 04:52:10,066 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 04:52:10,069 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,071 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,074 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,076 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,079 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,081 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 04:52:10,090 INFO: Dip chart data seeded.
2026-07-10 04:52:10,090 INFO: DB init complete.
2026-07-10 04:52:10,090 INFO: wsgi.py ready.
2026-07-10 04:52:10,093 INFO: >> GET /
2026-07-10 04:52:10,094 DEBUG: Using selector: EpollSelector
2026-07-10 04:52:10,104 INFO: GET /
2026-07-10 04:52:10,107 WARNING: GET / -> 404
2026-07-10 04:52:10,115 INFO: << 404 /
2026-07-10 07:03:36,407 INFO: wsgi.py loading...
2026-07-10 07:03:36,407 INFO: Importing app.main...
2026-07-10 07:03:38,305 INFO: app.main imported successfully.
2026-07-10 07:03:38,305 INFO: Running DB init...
2026-07-10 07:03:38,371 INFO: All tables OK.
2026-07-10 07:03:38,536 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 07:03:38,550 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,553 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,556 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,560 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,563 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,567 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 07:03:38,575 INFO: Dip chart data seeded.
2026-07-10 07:03:38,575 INFO: DB init complete.
2026-07-10 07:03:38,575 INFO: wsgi.py ready.
2026-07-10 07:03:38,579 INFO: >> POST /
2026-07-10 07:03:38,580 DEBUG: Using selector: EpollSelector
2026-07-10 07:03:38,596 INFO: POST /
2026-07-10 07:03:38,599 WARNING: POST / -> 404
2026-07-10 07:03:38,609 INFO: << 404 /
2026-07-10 09:55:02,770 INFO: wsgi.py loading...
2026-07-10 09:55:02,770 INFO: Importing app.main...
2026-07-10 09:55:05,000 INFO: app.main imported successfully.
2026-07-10 09:55:05,000 INFO: Running DB init...
2026-07-10 09:55:05,059 INFO: All tables OK.
2026-07-10 09:55:05,217 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 09:55:05,220 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,225 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,228 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,231 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,235 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,239 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 09:55:05,246 INFO: Dip chart data seeded.
2026-07-10 09:55:05,246 INFO: DB init complete.
2026-07-10 09:55:05,246 INFO: wsgi.py ready.
2026-07-10 09:55:05,250 INFO: >> GET /robots.txt
2026-07-10 09:55:05,251 DEBUG: Using selector: EpollSelector
2026-07-10 09:55:05,262 INFO: GET /robots.txt
2026-07-10 09:55:05,265 WARNING: GET /robots.txt -> 404
2026-07-10 09:55:05,274 INFO: << 404 /robots.txt
2026-07-10 12:07:10,365 INFO: wsgi.py loading...
2026-07-10 12:07:10,365 INFO: Importing app.main...
2026-07-10 12:07:12,293 INFO: app.main imported successfully.
2026-07-10 12:07:12,293 INFO: Running DB init...
2026-07-10 12:07:12,357 INFO: All tables OK.
2026-07-10 12:07:12,501 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 12:07:12,504 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,507 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,510 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,512 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,515 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,518 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 12:07:12,524 INFO: Dip chart data seeded.
2026-07-10 12:07:12,524 INFO: DB init complete.
2026-07-10 12:07:12,524 INFO: wsgi.py ready.
2026-07-10 12:07:12,528 INFO: >> GET /
2026-07-10 12:07:12,529 DEBUG: Using selector: EpollSelector
2026-07-10 12:07:12,540 INFO: GET /
2026-07-10 12:07:12,542 WARNING: GET / -> 404
2026-07-10 12:07:12,551 INFO: << 404 /
2026-07-10 13:58:28,378 INFO: wsgi.py loading...
2026-07-10 13:58:28,379 INFO: Importing app.main...
2026-07-10 13:58:30,197 INFO: app.main imported successfully.
2026-07-10 13:58:30,198 INFO: Running DB init...
2026-07-10 13:58:30,266 INFO: All tables OK.
2026-07-10 13:58:30,417 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 13:58:30,420 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,423 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,425 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,428 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,431 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,434 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 13:58:30,442 INFO: Dip chart data seeded.
2026-07-10 13:58:30,442 INFO: DB init complete.
2026-07-10 13:58:30,442 INFO: wsgi.py ready.
2026-07-10 13:58:30,445 INFO: >> POST /
2026-07-10 13:58:30,447 DEBUG: Using selector: EpollSelector
2026-07-10 13:58:30,457 INFO: POST /
2026-07-10 13:58:30,459 WARNING: POST / -> 404
2026-07-10 13:58:30,468 INFO: << 404 /
2026-07-10 15:04:47,064 INFO: wsgi.py loading...
2026-07-10 15:04:47,064 INFO: Importing app.main...
2026-07-10 15:04:49,932 INFO: app.main imported successfully.
2026-07-10 15:04:49,932 INFO: Running DB init...
2026-07-10 15:04:49,992 INFO: All tables OK.
2026-07-10 15:04:50,124 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 15:04:50,127 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,129 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,132 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,134 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,137 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,140 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 15:04:50,149 INFO: Dip chart data seeded.
2026-07-10 15:04:50,149 INFO: DB init complete.
2026-07-10 15:04:50,149 INFO: wsgi.py ready.
2026-07-10 15:04:50,152 INFO: >> GET /robots.txt
2026-07-10 15:04:50,154 DEBUG: Using selector: EpollSelector
2026-07-10 15:04:50,165 INFO: GET /robots.txt
2026-07-10 15:04:50,168 WARNING: GET /robots.txt -> 404
2026-07-10 15:04:50,177 INFO: << 404 /robots.txt
2026-07-10 20:45:34,283 INFO: wsgi.py loading...
2026-07-10 20:45:34,284 INFO: Importing app.main...
2026-07-10 20:45:36,242 INFO: app.main imported successfully.
2026-07-10 20:45:36,242 INFO: Running DB init...
2026-07-10 20:45:36,303 INFO: All tables OK.
2026-07-10 20:45:36,437 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 20:45:36,440 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,443 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,445 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,447 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,450 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,452 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:45:36,461 INFO: Dip chart data seeded.
2026-07-10 20:45:36,461 INFO: DB init complete.
2026-07-10 20:45:36,461 INFO: wsgi.py ready.
2026-07-10 20:45:36,464 INFO: >> GET /
2026-07-10 20:45:36,465 DEBUG: Using selector: EpollSelector
2026-07-10 20:45:36,476 INFO: GET /
2026-07-10 20:45:36,478 WARNING: GET / -> 404
2026-07-10 20:45:36,487 INFO: << 404 /
2026-07-10 20:56:08,580 INFO: wsgi.py loading...
2026-07-10 20:56:08,580 INFO: Importing app.main...
2026-07-10 20:56:10,354 INFO: app.main imported successfully.
2026-07-10 20:56:10,354 INFO: Running DB init...
2026-07-10 20:56:10,416 INFO: All tables OK.
2026-07-10 20:56:10,553 INFO: Migration OK: allowances ENUM+DAILY
2026-07-10 20:56:10,559 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,562 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,565 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,567 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,570 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,572 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-10 20:56:10,581 INFO: Dip chart data seeded.
2026-07-10 20:56:10,581 INFO: DB init complete.
2026-07-10 20:56:10,581 INFO: wsgi.py ready.
2026-07-10 20:56:10,585 INFO: >> POST /
2026-07-10 20:56:10,586 DEBUG: Using selector: EpollSelector
2026-07-10 20:56:10,596 INFO: POST /
2026-07-10 20:56:10,598 WARNING: POST / -> 404
2026-07-10 20:56:10,607 INFO: << 404 /
2026-07-11 00:29:20,250 INFO: wsgi.py loading...
2026-07-11 00:29:20,250 INFO: Importing app.main...
2026-07-11 00:29:22,003 INFO: app.main imported successfully.
2026-07-11 00:29:22,003 INFO: Running DB init...
2026-07-11 00:29:22,065 INFO: All tables OK.
2026-07-11 00:29:22,195 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 00:29:22,197 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,200 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,202 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,205 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,207 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,209 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 00:29:22,218 INFO: Dip chart data seeded.
2026-07-11 00:29:22,218 INFO: DB init complete.
2026-07-11 00:29:22,218 INFO: wsgi.py ready.
2026-07-11 00:29:22,221 INFO: >> GET /robots.txt
2026-07-11 00:29:22,222 DEBUG: Using selector: EpollSelector
2026-07-11 00:29:22,232 INFO: GET /robots.txt
2026-07-11 00:29:22,235 WARNING: GET /robots.txt -> 404
2026-07-11 00:29:22,243 INFO: << 404 /robots.txt
2026-07-11 06:42:58,971 INFO: wsgi.py loading...
2026-07-11 06:42:58,971 INFO: Importing app.main...
2026-07-11 06:43:02,660 INFO: app.main imported successfully.
2026-07-11 06:43:02,660 INFO: Running DB init...
2026-07-11 06:43:02,745 INFO: All tables OK.
2026-07-11 06:43:02,938 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 06:43:02,981 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,005 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,010 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,013 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,016 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,019 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 06:43:03,028 INFO: Dip chart data seeded.
2026-07-11 06:43:03,028 INFO: DB init complete.
2026-07-11 06:43:03,028 INFO: wsgi.py ready.
2026-07-11 06:43:03,032 INFO: >> GET /
2026-07-11 06:43:03,033 DEBUG: Using selector: EpollSelector
2026-07-11 06:43:03,034 INFO: >> GET /robots.txt
2026-07-11 06:43:03,035 DEBUG: Using selector: EpollSelector
2026-07-11 06:43:03,044 INFO: GET /
2026-07-11 06:43:03,046 INFO: GET /robots.txt
2026-07-11 06:43:03,049 WARNING: GET /robots.txt -> 404
2026-07-11 06:43:03,049 WARNING: GET / -> 404
2026-07-11 06:43:03,059 INFO: << 404 /robots.txt
2026-07-11 06:43:03,086 INFO: << 404 /
2026-07-11 07:44:13,697 INFO: wsgi.py loading...
2026-07-11 07:44:13,698 INFO: Importing app.main...
2026-07-11 07:44:15,599 INFO: app.main imported successfully.
2026-07-11 07:44:15,600 INFO: Running DB init...
2026-07-11 07:44:15,664 INFO: All tables OK.
2026-07-11 07:44:15,812 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 07:44:15,815 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,817 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,820 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,822 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,825 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,828 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 07:44:15,835 INFO: Dip chart data seeded.
2026-07-11 07:44:15,836 INFO: DB init complete.
2026-07-11 07:44:15,836 INFO: wsgi.py ready.
2026-07-11 07:44:15,839 INFO: >> GET /
2026-07-11 07:44:15,841 DEBUG: Using selector: EpollSelector
2026-07-11 07:44:15,851 INFO: GET /
2026-07-11 07:44:15,853 WARNING: GET / -> 404
2026-07-11 07:44:15,862 INFO: << 404 /
2026-07-11 09:38:30,379 INFO: wsgi.py loading...
2026-07-11 09:38:30,380 INFO: Importing app.main...
2026-07-11 09:38:32,214 INFO: app.main imported successfully.
2026-07-11 09:38:32,214 INFO: Running DB init...
2026-07-11 09:38:32,277 INFO: All tables OK.
2026-07-11 09:38:32,415 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 09:38:32,417 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,420 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,422 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,424 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,427 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,429 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 09:38:32,435 INFO: Dip chart data seeded.
2026-07-11 09:38:32,435 INFO: DB init complete.
2026-07-11 09:38:32,436 INFO: wsgi.py ready.
2026-07-11 09:38:32,439 INFO: >> GET /
2026-07-11 09:38:32,440 DEBUG: Using selector: EpollSelector
2026-07-11 09:38:32,450 INFO: GET /
2026-07-11 09:38:32,452 WARNING: GET / -> 404
2026-07-11 09:38:32,461 INFO: << 404 /
2026-07-11 14:17:19,464 INFO: wsgi.py loading...
2026-07-11 14:17:19,464 INFO: Importing app.main...
2026-07-11 14:17:23,190 INFO: app.main imported successfully.
2026-07-11 14:17:23,190 INFO: Running DB init...
2026-07-11 14:17:23,253 INFO: All tables OK.
2026-07-11 14:17:23,391 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 14:17:23,394 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,396 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,399 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,401 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,404 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,407 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 14:17:23,416 INFO: Dip chart data seeded.
2026-07-11 14:17:23,416 INFO: DB init complete.
2026-07-11 14:17:23,416 INFO: wsgi.py ready.
2026-07-11 14:17:23,420 INFO: >> GET /
2026-07-11 14:17:23,421 DEBUG: Using selector: EpollSelector
2026-07-11 14:17:23,432 INFO: GET /
2026-07-11 14:17:23,434 WARNING: GET / -> 404
2026-07-11 14:17:23,443 INFO: << 404 /
2026-07-11 16:25:36,194 INFO: wsgi.py loading...
2026-07-11 16:25:36,194 INFO: Importing app.main...
2026-07-11 16:25:38,045 INFO: app.main imported successfully.
2026-07-11 16:25:38,045 INFO: Running DB init...
2026-07-11 16:25:38,110 INFO: All tables OK.
2026-07-11 16:25:38,246 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 16:25:38,249 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,252 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,254 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,257 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,260 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,263 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 16:25:38,269 INFO: Dip chart data seeded.
2026-07-11 16:25:38,269 INFO: DB init complete.
2026-07-11 16:25:38,269 INFO: wsgi.py ready.
2026-07-11 16:25:38,273 INFO: >> GET /robots.txt
2026-07-11 16:25:38,274 DEBUG: Using selector: EpollSelector
2026-07-11 16:25:38,285 INFO: GET /robots.txt
2026-07-11 16:25:38,288 WARNING: GET /robots.txt -> 404
2026-07-11 16:25:38,298 INFO: << 404 /robots.txt
2026-07-11 18:43:26,336 INFO: wsgi.py loading...
2026-07-11 18:43:26,336 INFO: Importing app.main...
2026-07-11 18:43:28,142 INFO: app.main imported successfully.
2026-07-11 18:43:28,142 INFO: Running DB init...
2026-07-11 18:43:28,203 INFO: All tables OK.
2026-07-11 18:43:28,334 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 18:43:28,336 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,339 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,341 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,343 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,346 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,348 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 18:43:28,357 INFO: Dip chart data seeded.
2026-07-11 18:43:28,357 INFO: DB init complete.
2026-07-11 18:43:28,357 INFO: wsgi.py ready.
2026-07-11 18:43:28,360 INFO: >> POST /
2026-07-11 18:43:28,361 DEBUG: Using selector: EpollSelector
2026-07-11 18:43:28,371 INFO: POST /
2026-07-11 18:43:28,374 WARNING: POST / -> 404
2026-07-11 18:43:28,382 INFO: << 404 /
2026-07-11 22:20:09,786 INFO: wsgi.py loading...
2026-07-11 22:20:09,787 INFO: Importing app.main...
2026-07-11 22:20:13,183 INFO: app.main imported successfully.
2026-07-11 22:20:13,184 INFO: Running DB init...
2026-07-11 22:20:13,246 INFO: All tables OK.
2026-07-11 22:20:13,383 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 22:20:13,386 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,388 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,391 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,393 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,397 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,400 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:20:13,408 INFO: Dip chart data seeded.
2026-07-11 22:20:13,409 INFO: DB init complete.
2026-07-11 22:20:13,409 INFO: wsgi.py ready.
2026-07-11 22:20:13,412 INFO: >> GET /
2026-07-11 22:20:13,413 DEBUG: Using selector: EpollSelector
2026-07-11 22:20:13,424 INFO: GET /
2026-07-11 22:20:13,426 WARNING: GET / -> 404
2026-07-11 22:20:13,435 INFO: << 404 /
2026-07-11 22:35:47,073 INFO: wsgi.py loading...
2026-07-11 22:35:47,073 INFO: Importing app.main...
2026-07-11 22:35:48,945 INFO: app.main imported successfully.
2026-07-11 22:35:48,945 INFO: Running DB init...
2026-07-11 22:35:49,012 INFO: All tables OK.
2026-07-11 22:35:49,175 INFO: Migration OK: allowances ENUM+DAILY
2026-07-11 22:35:49,177 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,180 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,182 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,191 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,194 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,197 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-11 22:35:49,205 INFO: Dip chart data seeded.
2026-07-11 22:35:49,205 INFO: DB init complete.
2026-07-11 22:35:49,205 INFO: wsgi.py ready.
2026-07-11 22:35:49,208 INFO: >> GET /robots.txt
2026-07-11 22:35:49,210 DEBUG: Using selector: EpollSelector
2026-07-11 22:35:49,220 INFO: GET /robots.txt
2026-07-11 22:35:49,223 WARNING: GET /robots.txt -> 404
2026-07-11 22:35:49,232 INFO: << 404 /robots.txt
2026-07-12 06:34:16,502 INFO: wsgi.py loading...
2026-07-12 06:34:16,503 INFO: Importing app.main...
2026-07-12 06:34:19,996 INFO: app.main imported successfully.
2026-07-12 06:34:19,996 INFO: Running DB init...
2026-07-12 06:34:20,065 INFO: All tables OK.
2026-07-12 06:34:20,233 INFO: Migration OK: allowances ENUM+DAILY
2026-07-12 06:34:20,236 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,239 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,241 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,244 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,247 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,249 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 06:34:20,256 INFO: Dip chart data seeded.
2026-07-12 06:34:20,256 INFO: DB init complete.
2026-07-12 06:34:20,256 INFO: wsgi.py ready.
2026-07-12 06:34:20,260 INFO: >> GET /
2026-07-12 06:34:20,261 DEBUG: Using selector: EpollSelector
2026-07-12 06:34:20,272 INFO: GET /
2026-07-12 06:34:20,274 WARNING: GET / -> 404
2026-07-12 06:34:20,283 INFO: << 404 /
2026-07-12 08:19:51,045 INFO: wsgi.py loading...
2026-07-12 08:19:51,045 INFO: Importing app.main...
2026-07-12 08:19:52,917 INFO: app.main imported successfully.
2026-07-12 08:19:52,917 INFO: Running DB init...
2026-07-12 08:19:52,987 INFO: All tables OK.
2026-07-12 08:19:53,120 INFO: Migration OK: allowances ENUM+DAILY
2026-07-12 08:19:53,123 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,125 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,128 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,130 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,133 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,135 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 08:19:53,144 INFO: Dip chart data seeded.
2026-07-12 08:19:53,144 INFO: DB init complete.
2026-07-12 08:19:53,144 INFO: wsgi.py ready.
2026-07-12 08:19:53,147 INFO: >> GET /
2026-07-12 08:19:53,148 DEBUG: Using selector: EpollSelector
2026-07-12 08:19:53,158 INFO: GET /
2026-07-12 08:19:53,161 WARNING: GET / -> 404
2026-07-12 08:19:53,170 INFO: << 404 /
2026-07-12 14:24:09,988 INFO: wsgi.py loading...
2026-07-12 14:24:09,989 INFO: Importing app.main...
2026-07-12 14:24:13,817 INFO: app.main imported successfully.
2026-07-12 14:24:13,817 INFO: Running DB init...
2026-07-12 14:24:13,892 INFO: All tables OK.
2026-07-12 14:24:14,037 INFO: Migration OK: allowances ENUM+DAILY
2026-07-12 14:24:14,040 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,045 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,048 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,051 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,055 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,058 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-12 14:24:14,067 INFO: Dip chart data seeded.
2026-07-12 14:24:14,067 INFO: DB init complete.
2026-07-12 14:24:14,067 INFO: wsgi.py ready.
2026-07-12 14:24:14,071 INFO: >> GET /robots.txt
2026-07-12 14:24:14,072 DEBUG: Using selector: EpollSelector
2026-07-12 14:24:14,084 INFO: GET /robots.txt
2026-07-12 14:24:14,087 WARNING: GET /robots.txt -> 404
2026-07-12 14:24:14,097 INFO: << 404 /robots.txt
2026-07-13 01:31:42,178 INFO: wsgi.py loading...
2026-07-13 01:31:42,179 INFO: Importing app.main...
2026-07-13 01:31:46,057 INFO: app.main imported successfully.
2026-07-13 01:31:46,058 INFO: Running DB init...
2026-07-13 01:31:46,121 INFO: All tables OK.
2026-07-13 01:31:46,257 INFO: Migration OK: allowances ENUM+DAILY
2026-07-13 01:31:46,260 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,262 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,265 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,267 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,270 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,272 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 01:31:46,281 INFO: Dip chart data seeded.
2026-07-13 01:31:46,281 INFO: DB init complete.
2026-07-13 01:31:46,281 INFO: wsgi.py ready.
2026-07-13 01:31:46,285 INFO: >> GET /
2026-07-13 01:31:46,286 DEBUG: Using selector: EpollSelector
2026-07-13 01:31:46,302 INFO: GET /
2026-07-13 01:31:46,311 WARNING: GET / -> 404
2026-07-13 01:31:46,321 INFO: << 404 /
2026-07-13 02:03:11,462 INFO: wsgi.py loading...
2026-07-13 02:03:11,462 INFO: Importing app.main...
2026-07-13 02:03:13,140 INFO: app.main imported successfully.
2026-07-13 02:03:13,140 INFO: Running DB init...
2026-07-13 02:03:13,200 INFO: All tables OK.
2026-07-13 02:03:13,330 INFO: Migration OK: allowances ENUM+DAILY
2026-07-13 02:03:13,333 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,335 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,337 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,340 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,342 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,344 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 02:03:13,352 INFO: Dip chart data seeded.
2026-07-13 02:03:13,352 INFO: DB init complete.
2026-07-13 02:03:13,353 INFO: wsgi.py ready.
2026-07-13 02:03:13,356 INFO: >> POST /
2026-07-13 02:03:13,357 DEBUG: Using selector: EpollSelector
2026-07-13 02:03:13,367 INFO: POST /
2026-07-13 02:03:13,369 WARNING: POST / -> 404
2026-07-13 02:03:13,378 INFO: << 404 /
2026-07-13 05:50:30,192 INFO: wsgi.py loading...
2026-07-13 05:50:30,193 INFO: Importing app.main...
2026-07-13 05:50:32,082 INFO: app.main imported successfully.
2026-07-13 05:50:32,082 INFO: Running DB init...
2026-07-13 05:50:32,152 INFO: All tables OK.
2026-07-13 05:50:32,285 INFO: Migration OK: allowances ENUM+DAILY
2026-07-13 05:50:32,287 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,290 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,292 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,294 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,297 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,299 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 05:50:32,307 INFO: Dip chart data seeded.
2026-07-13 05:50:32,307 INFO: DB init complete.
2026-07-13 05:50:32,307 INFO: wsgi.py ready.
2026-07-13 05:50:32,311 INFO: >> GET /v1/metadata
2026-07-13 05:50:32,312 DEBUG: Using selector: EpollSelector
2026-07-13 05:50:32,322 INFO: GET /v1/metadata
2026-07-13 05:50:32,325 WARNING: GET /v1/metadata -> 404
2026-07-13 05:50:32,333 INFO: << 404 /v1/metadata
2026-07-13 05:55:30,206 INFO: >> GET /robots.txt
2026-07-13 05:55:30,208 DEBUG: Using selector: EpollSelector
2026-07-13 05:55:30,218 INFO: GET /robots.txt
2026-07-13 05:55:30,221 WARNING: GET /robots.txt -> 404
2026-07-13 05:55:30,250 INFO: << 404 /robots.txt
2026-07-13 06:59:09,048 INFO: wsgi.py loading...
2026-07-13 06:59:09,048 INFO: Importing app.main...
2026-07-13 06:59:10,918 INFO: app.main imported successfully.
2026-07-13 06:59:10,919 INFO: Running DB init...
2026-07-13 06:59:10,982 INFO: All tables OK.
2026-07-13 06:59:11,136 INFO: Migration OK: allowances ENUM+DAILY
2026-07-13 06:59:11,141 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,145 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,148 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,151 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,154 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,157 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 06:59:11,164 INFO: Dip chart data seeded.
2026-07-13 06:59:11,164 INFO: DB init complete.
2026-07-13 06:59:11,164 INFO: wsgi.py ready.
2026-07-13 06:59:11,168 INFO: >> GET /
2026-07-13 06:59:11,169 DEBUG: Using selector: EpollSelector
2026-07-13 06:59:11,170 INFO: >> GET /robots.txt
2026-07-13 06:59:11,172 DEBUG: Using selector: EpollSelector
2026-07-13 06:59:11,180 INFO: GET /
2026-07-13 06:59:11,182 INFO: GET /robots.txt
2026-07-13 06:59:11,183 WARNING: GET / -> 404
2026-07-13 06:59:11,185 WARNING: GET /robots.txt -> 404
2026-07-13 06:59:11,193 INFO: << 404 /
2026-07-13 06:59:11,194 INFO: << 404 /robots.txt
2026-07-13 23:07:01,806 INFO: wsgi.py loading...
2026-07-13 23:07:01,806 INFO: Importing app.main...
2026-07-13 23:07:05,614 INFO: app.main imported successfully.
2026-07-13 23:07:05,614 INFO: Running DB init...
2026-07-13 23:07:05,678 INFO: All tables OK.
2026-07-13 23:07:05,814 INFO: Migration OK: allowances ENUM+DAILY
2026-07-13 23:07:05,817 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,819 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,821 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,824 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,826 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,829 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-13 23:07:05,837 INFO: Dip chart data seeded.
2026-07-13 23:07:05,838 INFO: DB init complete.
2026-07-13 23:07:05,838 INFO: wsgi.py ready.
2026-07-13 23:07:05,841 INFO: >> GET /
2026-07-13 23:07:05,842 DEBUG: Using selector: EpollSelector
2026-07-13 23:07:05,852 INFO: GET /
2026-07-13 23:07:05,855 WARNING: GET / -> 404
2026-07-13 23:07:05,864 INFO: << 404 /
2026-07-14 05:16:29,578 INFO: wsgi.py loading...
2026-07-14 05:16:29,579 INFO: Importing app.main...
2026-07-14 05:16:31,432 INFO: app.main imported successfully.
2026-07-14 05:16:31,432 INFO: Running DB init...
2026-07-14 05:16:31,498 INFO: All tables OK.
2026-07-14 05:16:31,670 INFO: Migration OK: allowances ENUM+DAILY
2026-07-14 05:16:31,673 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,676 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,679 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,682 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,685 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,688 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 05:16:31,698 INFO: Dip chart data seeded.
2026-07-14 05:16:31,698 INFO: DB init complete.
2026-07-14 05:16:31,698 INFO: wsgi.py ready.
2026-07-14 05:16:31,702 INFO: >> GET /robots.txt
2026-07-14 05:16:31,703 DEBUG: Using selector: EpollSelector
2026-07-14 05:16:31,716 INFO: GET /robots.txt
2026-07-14 05:16:31,719 WARNING: GET /robots.txt -> 404
2026-07-14 05:16:31,731 INFO: << 404 /robots.txt
2026-07-14 06:04:22,289 INFO: wsgi.py loading...
2026-07-14 06:04:22,290 INFO: Importing app.main...
2026-07-14 06:04:25,991 INFO: app.main imported successfully.
2026-07-14 06:04:25,991 INFO: Running DB init...
2026-07-14 06:04:26,057 INFO: All tables OK.
2026-07-14 06:04:26,201 INFO: Migration OK: allowances ENUM+DAILY
2026-07-14 06:04:26,204 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,207 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,209 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,212 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,215 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,219 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 06:04:26,227 INFO: Dip chart data seeded.
2026-07-14 06:04:26,227 INFO: DB init complete.
2026-07-14 06:04:26,227 INFO: wsgi.py ready.
2026-07-14 06:04:26,231 INFO: >> GET /wp-login.php
2026-07-14 06:04:26,232 DEBUG: Using selector: EpollSelector
2026-07-14 06:04:26,244 INFO: GET /wp-login.php
2026-07-14 06:04:26,247 WARNING: GET /wp-login.php -> 404
2026-07-14 06:04:26,257 INFO: << 404 /wp-login.php
2026-07-14 21:49:36,921 INFO: wsgi.py loading...
2026-07-14 21:49:36,921 INFO: Importing app.main...
2026-07-14 21:49:40,698 INFO: app.main imported successfully.
2026-07-14 21:49:40,698 INFO: Running DB init...
2026-07-14 21:49:40,759 INFO: All tables OK.
2026-07-14 21:49:40,902 INFO: Migration OK: allowances ENUM+DAILY
2026-07-14 21:49:40,905 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,908 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,910 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,913 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,916 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,919 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 21:49:40,928 INFO: Dip chart data seeded.
2026-07-14 21:49:40,929 INFO: DB init complete.
2026-07-14 21:49:40,929 INFO: wsgi.py ready.
2026-07-14 21:49:40,932 INFO: >> GET /
2026-07-14 21:49:40,933 DEBUG: Using selector: EpollSelector
2026-07-14 21:49:40,934 INFO: >> GET /robots.txt
2026-07-14 21:49:40,936 DEBUG: Using selector: EpollSelector
2026-07-14 21:49:40,945 INFO: GET /
2026-07-14 21:49:40,946 INFO: GET /robots.txt
2026-07-14 21:49:40,948 WARNING: GET / -> 404
2026-07-14 21:49:40,949 WARNING: GET /robots.txt -> 404
2026-07-14 21:49:40,958 INFO: << 404 /robots.txt
2026-07-14 21:49:40,958 INFO: << 404 /
2026-07-14 22:06:35,083 INFO: wsgi.py loading...
2026-07-14 22:06:35,084 INFO: Importing app.main...
2026-07-14 22:06:36,825 INFO: app.main imported successfully.
2026-07-14 22:06:36,825 INFO: Running DB init...
2026-07-14 22:06:36,889 INFO: All tables OK.
2026-07-14 22:06:37,026 INFO: Migration OK: allowances ENUM+DAILY
2026-07-14 22:06:37,028 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,031 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,033 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,036 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,038 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,041 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-14 22:06:37,048 INFO: Dip chart data seeded.
2026-07-14 22:06:37,048 INFO: DB init complete.
2026-07-14 22:06:37,048 INFO: wsgi.py ready.
2026-07-14 22:06:37,052 INFO: >> GET /
2026-07-14 22:06:37,053 DEBUG: Using selector: EpollSelector
2026-07-14 22:06:37,064 INFO: GET /
2026-07-14 22:06:37,067 WARNING: GET / -> 404
2026-07-14 22:06:37,078 INFO: << 404 /
2026-07-15 00:28:38,194 INFO: wsgi.py loading...
2026-07-15 00:28:38,194 INFO: Importing app.main...
2026-07-15 00:28:40,014 INFO: app.main imported successfully.
2026-07-15 00:28:40,014 INFO: Running DB init...
2026-07-15 00:28:40,077 INFO: All tables OK.
2026-07-15 00:28:40,214 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 00:28:40,217 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,219 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,222 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,224 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,227 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,230 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 00:28:40,238 INFO: Dip chart data seeded.
2026-07-15 00:28:40,238 INFO: DB init complete.
2026-07-15 00:28:40,238 INFO: wsgi.py ready.
2026-07-15 00:28:40,241 INFO: >> GET /robots.txt
2026-07-15 00:28:40,243 DEBUG: Using selector: EpollSelector
2026-07-15 00:28:40,253 INFO: GET /robots.txt
2026-07-15 00:28:40,256 WARNING: GET /robots.txt -> 404
2026-07-15 00:28:40,265 INFO: << 404 /robots.txt
2026-07-15 03:40:53,368 INFO: wsgi.py loading...
2026-07-15 03:40:53,368 INFO: Importing app.main...
2026-07-15 03:40:55,214 INFO: app.main imported successfully.
2026-07-15 03:40:55,214 INFO: Running DB init...
2026-07-15 03:40:55,276 INFO: All tables OK.
2026-07-15 03:40:55,413 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 03:40:55,416 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,418 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,421 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,423 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,426 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,428 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 03:40:55,437 INFO: Dip chart data seeded.
2026-07-15 03:40:55,437 INFO: DB init complete.
2026-07-15 03:40:55,437 INFO: wsgi.py ready.
2026-07-15 03:40:55,441 INFO: >> GET /
2026-07-15 03:40:55,442 DEBUG: Using selector: EpollSelector
2026-07-15 03:40:55,453 INFO: GET /
2026-07-15 03:40:55,455 WARNING: GET / -> 404
2026-07-15 03:40:55,465 INFO: << 404 /
2026-07-15 06:23:22,570 INFO: wsgi.py loading...
2026-07-15 06:23:22,577 INFO: Importing app.main...
2026-07-15 06:23:24,750 INFO: app.main imported successfully.
2026-07-15 06:23:24,750 INFO: Running DB init...
2026-07-15 06:23:24,814 INFO: All tables OK.
2026-07-15 06:23:24,959 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 06:23:24,962 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,964 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,967 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,969 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,972 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,974 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 06:23:24,983 INFO: Dip chart data seeded.
2026-07-15 06:23:24,983 INFO: DB init complete.
2026-07-15 06:23:24,983 INFO: wsgi.py ready.
2026-07-15 06:23:24,986 INFO: >> GET /robots.txt
2026-07-15 06:23:24,988 DEBUG: Using selector: EpollSelector
2026-07-15 06:23:24,998 INFO: GET /robots.txt
2026-07-15 06:23:25,001 WARNING: GET /robots.txt -> 404
2026-07-15 06:23:25,010 INFO: << 404 /robots.txt
2026-07-15 07:40:19,828 INFO: wsgi.py loading...
2026-07-15 07:40:19,829 INFO: Importing app.main...
2026-07-15 07:40:22,239 INFO: app.main imported successfully.
2026-07-15 07:40:22,239 INFO: Running DB init...
2026-07-15 07:40:22,311 INFO: All tables OK.
2026-07-15 07:40:22,448 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 07:40:22,451 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,454 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,456 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,459 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,462 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,472 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 07:40:22,480 INFO: Dip chart data seeded.
2026-07-15 07:40:22,480 INFO: DB init complete.
2026-07-15 07:40:22,480 INFO: wsgi.py ready.
2026-07-15 07:40:22,484 INFO: >> GET /
2026-07-15 07:40:22,485 DEBUG: Using selector: EpollSelector
2026-07-15 07:40:22,495 INFO: GET /
2026-07-15 07:40:22,498 WARNING: GET / -> 404
2026-07-15 07:40:22,507 INFO: << 404 /
2026-07-15 15:39:31,213 INFO: wsgi.py loading...
2026-07-15 15:39:31,214 INFO: Importing app.main...
2026-07-15 15:39:35,015 INFO: app.main imported successfully.
2026-07-15 15:39:35,015 INFO: Running DB init...
2026-07-15 15:39:35,078 INFO: All tables OK.
2026-07-15 15:39:35,216 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 15:39:35,218 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,221 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,223 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,226 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,229 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,231 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 15:39:35,240 INFO: Dip chart data seeded.
2026-07-15 15:39:35,240 INFO: DB init complete.
2026-07-15 15:39:35,240 INFO: wsgi.py ready.
2026-07-15 15:39:35,243 INFO: >> GET /robots.txt
2026-07-15 15:39:35,244 DEBUG: Using selector: EpollSelector
2026-07-15 15:39:35,255 INFO: GET /robots.txt
2026-07-15 15:39:35,258 WARNING: GET /robots.txt -> 404
2026-07-15 15:39:35,267 INFO: << 404 /robots.txt
2026-07-15 18:11:39,890 INFO: wsgi.py loading...
2026-07-15 18:11:39,890 INFO: Importing app.main...
2026-07-15 18:11:41,688 INFO: app.main imported successfully.
2026-07-15 18:11:41,689 INFO: Running DB init...
2026-07-15 18:11:41,749 INFO: All tables OK.
2026-07-15 18:11:41,882 INFO: Migration OK: allowances ENUM+DAILY
2026-07-15 18:11:41,884 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,888 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,890 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,892 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,895 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,897 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-15 18:11:41,905 INFO: Dip chart data seeded.
2026-07-15 18:11:41,906 INFO: DB init complete.
2026-07-15 18:11:41,906 INFO: wsgi.py ready.
2026-07-15 18:11:41,909 INFO: >> GET /
2026-07-15 18:11:41,910 DEBUG: Using selector: EpollSelector
2026-07-15 18:11:41,920 INFO: GET /
2026-07-15 18:11:41,922 WARNING: GET / -> 404
2026-07-15 18:11:41,931 INFO: << 404 /
2026-07-16 06:52:56,162 INFO: wsgi.py loading...
2026-07-16 06:52:56,163 INFO: Importing app.main...
2026-07-16 06:52:59,874 INFO: app.main imported successfully.
2026-07-16 06:52:59,874 INFO: Running DB init...
2026-07-16 06:52:59,953 INFO: All tables OK.
2026-07-16 06:53:00,105 INFO: Migration OK: allowances ENUM+DAILY
2026-07-16 06:53:00,108 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,111 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,114 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,117 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,120 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,123 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 06:53:00,131 INFO: Dip chart data seeded.
2026-07-16 06:53:00,131 INFO: DB init complete.
2026-07-16 06:53:00,131 INFO: wsgi.py ready.
2026-07-16 06:53:00,135 INFO: >> GET /
2026-07-16 06:53:00,136 DEBUG: Using selector: EpollSelector
2026-07-16 06:53:00,147 INFO: GET /
2026-07-16 06:53:00,149 WARNING: GET / -> 404
2026-07-16 06:53:00,159 INFO: << 404 /
2026-07-16 21:21:33,951 INFO: wsgi.py loading...
2026-07-16 21:21:33,951 INFO: Importing app.main...
2026-07-16 21:21:37,839 INFO: app.main imported successfully.
2026-07-16 21:21:37,839 INFO: Running DB init...
2026-07-16 21:21:37,902 INFO: All tables OK.
2026-07-16 21:21:38,044 INFO: Migration OK: allowances ENUM+DAILY
2026-07-16 21:21:38,047 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,050 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,053 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,055 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,058 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,061 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 21:21:38,068 INFO: Dip chart data seeded.
2026-07-16 21:21:38,068 INFO: DB init complete.
2026-07-16 21:21:38,068 INFO: wsgi.py ready.
2026-07-16 21:21:38,072 INFO: >> GET /.env.production
2026-07-16 21:21:38,073 DEBUG: Using selector: EpollSelector
2026-07-16 21:21:38,074 INFO: >> GET /api/.env
2026-07-16 21:21:38,076 DEBUG: Using selector: EpollSelector
2026-07-16 21:21:38,084 INFO: GET /.env.production
2026-07-16 21:21:38,086 INFO: GET /api/.env
2026-07-16 21:21:38,087 WARNING: GET /.env.production -> 404
2026-07-16 21:21:38,089 WARNING: GET /api/.env -> 404
2026-07-16 21:21:38,097 INFO: << 404 /api/.env
2026-07-16 21:21:38,097 INFO: << 404 /.env.production
2026-07-16 21:21:40,867 INFO: >> GET /.aws/credentials
2026-07-16 21:21:40,869 DEBUG: Using selector: EpollSelector
2026-07-16 21:21:40,879 INFO: GET /.aws/credentials
2026-07-16 21:21:40,881 WARNING: GET /.aws/credentials -> 404
2026-07-16 21:21:40,890 INFO: << 404 /.aws/credentials
2026-07-16 22:21:46,308 INFO: wsgi.py loading...
2026-07-16 22:21:46,308 INFO: Importing app.main...
2026-07-16 22:21:48,088 INFO: app.main imported successfully.
2026-07-16 22:21:48,088 INFO: Running DB init...
2026-07-16 22:21:48,149 INFO: All tables OK.
2026-07-16 22:21:48,284 INFO: Migration OK: allowances ENUM+DAILY
2026-07-16 22:21:48,287 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,289 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,292 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,294 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,297 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,300 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-16 22:21:48,308 INFO: Dip chart data seeded.
2026-07-16 22:21:48,308 INFO: DB init complete.
2026-07-16 22:21:48,308 INFO: wsgi.py ready.
2026-07-16 22:21:48,311 INFO: >> GET /
2026-07-16 22:21:48,313 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:48,322 INFO: GET /
2026-07-16 22:21:48,325 WARNING: GET / -> 404
2026-07-16 22:21:48,333 INFO: << 404 /
2026-07-16 22:21:49,252 INFO: >> GET /console/
2026-07-16 22:21:49,253 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:49,263 INFO: GET /console/
2026-07-16 22:21:49,266 WARNING: GET /console/ -> 404
2026-07-16 22:21:49,275 INFO: << 404 /console/
2026-07-16 22:21:50,134 INFO: >> GET /server
2026-07-16 22:21:50,135 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:50,145 INFO: GET /server
2026-07-16 22:21:50,149 WARNING: GET /server -> 404
2026-07-16 22:21:50,158 INFO: << 404 /server
2026-07-16 22:21:51,208 INFO: >> GET /server-status
2026-07-16 22:21:51,210 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:51,220 INFO: GET /server-status
2026-07-16 22:21:51,223 WARNING: GET /server-status -> 404
2026-07-16 22:21:51,233 INFO: << 404 /server-status
2026-07-16 22:21:53,100 INFO: >> GET /about
2026-07-16 22:21:53,102 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:53,112 INFO: GET /about
2026-07-16 22:21:53,115 WARNING: GET /about -> 404
2026-07-16 22:21:53,124 INFO: << 404 /about
2026-07-16 22:21:53,958 INFO: >> GET /
2026-07-16 22:21:53,958 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:53,959 INFO: GET /
2026-07-16 22:21:53,960 WARNING: GET / -> 404
2026-07-16 22:21:53,963 INFO: << 404 /
2026-07-16 22:21:54,213 INFO: >> GET /login.action
2026-07-16 22:21:54,214 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:54,224 INFO: GET /login.action
2026-07-16 22:21:54,227 WARNING: GET /login.action -> 404
2026-07-16 22:21:54,237 INFO: << 404 /login.action
2026-07-16 22:21:55,359 INFO: >> GET /
2026-07-16 22:21:55,360 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:55,371 INFO: GET /
2026-07-16 22:21:55,373 WARNING: GET / -> 404
2026-07-16 22:21:55,382 INFO: << 404 /
2026-07-16 22:21:55,643 INFO: >> GET /console/
2026-07-16 22:21:55,645 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:55,655 INFO: GET /console/
2026-07-16 22:21:55,658 WARNING: GET /console/ -> 404
2026-07-16 22:21:55,668 INFO: << 404 /console/
2026-07-16 22:21:56,641 INFO: >> GET /___proxy_subdomain_whm/login
2026-07-16 22:21:56,642 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:56,652 INFO: GET /___proxy_subdomain_whm/login
2026-07-16 22:21:56,655 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-07-16 22:21:56,664 INFO: << 404 /___proxy_subdomain_whm/login
2026-07-16 22:21:57,503 INFO: >> GET /server
2026-07-16 22:21:57,505 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:57,517 INFO: GET /server
2026-07-16 22:21:57,520 WARNING: GET /server -> 404
2026-07-16 22:21:57,530 INFO: << 404 /server
2026-07-16 22:21:57,738 INFO: >> GET /___proxy_subdomain_cpanel
2026-07-16 22:21:57,739 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:57,798 INFO: GET /___proxy_subdomain_cpanel
2026-07-16 22:21:57,801 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-07-16 22:21:57,812 INFO: << 404 /___proxy_subdomain_cpanel
2026-07-16 22:21:58,862 INFO: >> GET /v2/_catalog
2026-07-16 22:21:58,864 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:58,875 INFO: GET /v2/_catalog
2026-07-16 22:21:58,878 WARNING: GET /v2/_catalog -> 404
2026-07-16 22:21:58,887 INFO: << 404 /v2/_catalog
2026-07-16 22:21:59,028 INFO: >> GET /server-status
2026-07-16 22:21:59,028 DEBUG: Using selector: EpollSelector
2026-07-16 22:21:59,029 INFO: GET /server-status
2026-07-16 22:21:59,030 WARNING: GET /server-status -> 404
2026-07-16 22:21:59,033 INFO: << 404 /server-status
2026-07-16 22:22:00,260 INFO: >> GET /.DS_Store
2026-07-16 22:22:00,260 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:00,260 INFO: GET /.DS_Store
2026-07-16 22:22:00,262 WARNING: GET /.DS_Store -> 404
2026-07-16 22:22:00,265 INFO: << 404 /.DS_Store
2026-07-16 22:22:00,686 INFO: >> GET /about
2026-07-16 22:22:00,687 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:00,699 INFO: GET /about
2026-07-16 22:22:00,702 WARNING: GET /about -> 404
2026-07-16 22:22:00,711 INFO: << 404 /about
2026-07-16 22:22:03,090 INFO: >> GET /login.action
2026-07-16 22:22:03,092 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:03,103 INFO: GET /login.action
2026-07-16 22:22:03,106 WARNING: GET /login.action -> 404
2026-07-16 22:22:03,117 INFO: << 404 /login.action
2026-07-16 22:22:03,851 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:03,852 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:03,862 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:03,865 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-07-16 22:22:03,874 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:04,651 INFO: >> GET /
2026-07-16 22:22:04,651 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:04,651 INFO: GET /
2026-07-16 22:22:04,652 WARNING: GET / -> 404
2026-07-16 22:22:04,655 INFO: << 404 /
2026-07-16 22:22:06,273 INFO: >> GET /___proxy_subdomain_whm/login
2026-07-16 22:22:06,274 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:06,285 INFO: GET /___proxy_subdomain_whm/login
2026-07-16 22:22:06,288 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-07-16 22:22:06,301 INFO: << 404 /___proxy_subdomain_whm/login
2026-07-16 22:22:07,554 INFO: >> GET /___proxy_subdomain_cpanel
2026-07-16 22:22:07,556 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:07,565 INFO: GET /___proxy_subdomain_cpanel
2026-07-16 22:22:07,568 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-07-16 22:22:07,577 INFO: << 404 /___proxy_subdomain_cpanel
2026-07-16 22:22:07,958 INFO: >> POST /graphql
2026-07-16 22:22:07,959 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:07,969 INFO: POST /graphql
2026-07-16 22:22:07,972 WARNING: POST /graphql -> 404
2026-07-16 22:22:07,981 INFO: << 404 /graphql
2026-07-16 22:22:09,370 INFO: >> POST /api
2026-07-16 22:22:09,372 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:09,382 INFO: POST /api
2026-07-16 22:22:09,385 WARNING: POST /api -> 404
2026-07-16 22:22:09,395 INFO: << 404 /api
2026-07-16 22:22:11,005 INFO: >> POST /api/graphql
2026-07-16 22:22:11,005 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:11,006 INFO: POST /api/graphql
2026-07-16 22:22:11,009 WARNING: POST /api/graphql -> 404
2026-07-16 22:22:11,012 INFO: << 404 /api/graphql
2026-07-16 22:22:12,435 INFO: >> POST /graphql/api
2026-07-16 22:22:12,437 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:12,447 INFO: POST /graphql/api
2026-07-16 22:22:12,450 WARNING: POST /graphql/api -> 404
2026-07-16 22:22:12,460 INFO: << 404 /graphql/api
2026-07-16 22:22:12,473 INFO: >> GET /.DS_Store
2026-07-16 22:22:12,475 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:12,486 INFO: GET /.DS_Store
2026-07-16 22:22:12,489 WARNING: GET /.DS_Store -> 404
2026-07-16 22:22:12,501 INFO: << 404 /.DS_Store
2026-07-16 22:22:13,898 INFO: >> POST /api/gql
2026-07-16 22:22:13,899 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:13,910 INFO: POST /api/gql
2026-07-16 22:22:13,913 WARNING: POST /api/gql -> 404
2026-07-16 22:22:13,922 INFO: << 404 /api/gql
2026-07-16 22:22:16,117 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:16,118 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:16,128 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:16,131 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-07-16 22:22:16,140 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:16,767 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:16,767 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:16,767 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:16,769 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-07-16 22:22:16,772 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-16 22:22:17,418 INFO: >> GET /config.json
2026-07-16 22:22:17,419 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:17,429 INFO: GET /config.json
2026-07-16 22:22:17,432 WARNING: GET /config.json -> 404
2026-07-16 22:22:17,441 INFO: << 404 /config.json
2026-07-16 22:22:18,797 INFO: >> GET /telescope/requests
2026-07-16 22:22:18,797 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:18,797 INFO: GET /telescope/requests
2026-07-16 22:22:18,799 WARNING: GET /telescope/requests -> 404
2026-07-16 22:22:18,802 INFO: << 404 /telescope/requests
2026-07-16 22:22:19,903 INFO: >> GET /version
2026-07-16 22:22:19,903 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:19,903 INFO: GET /version
2026-07-16 22:22:19,905 WARNING: GET /version -> 404
2026-07-16 22:22:19,908 INFO: << 404 /version
2026-07-16 22:22:21,286 INFO: >> GET /info.php
2026-07-16 22:22:21,286 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:21,287 INFO: GET /info.php
2026-07-16 22:22:21,288 WARNING: GET /info.php -> 404
2026-07-16 22:22:21,291 INFO: << 404 /info.php
2026-07-16 22:22:21,345 INFO: >> POST /graphql
2026-07-16 22:22:21,345 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:21,346 INFO: POST /graphql
2026-07-16 22:22:21,347 WARNING: POST /graphql -> 404
2026-07-16 22:22:21,350 INFO: << 404 /graphql
2026-07-16 22:22:22,640 INFO: >> GET /actuator/env
2026-07-16 22:22:22,641 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:22,652 INFO: GET /actuator/env
2026-07-16 22:22:22,655 WARNING: GET /actuator/env -> 404
2026-07-16 22:22:22,665 INFO: << 404 /actuator/env
2026-07-16 22:22:23,108 INFO: >> POST /api
2026-07-16 22:22:23,108 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:23,108 INFO: POST /api
2026-07-16 22:22:23,110 WARNING: POST /api -> 404
2026-07-16 22:22:23,112 INFO: << 404 /api
2026-07-16 22:22:24,281 INFO: >> GET /trace.axd
2026-07-16 22:22:24,282 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:24,292 INFO: GET /trace.axd
2026-07-16 22:22:24,295 WARNING: GET /trace.axd -> 404
2026-07-16 22:22:24,304 INFO: >> POST /api/graphql
2026-07-16 22:22:24,304 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:24,305 INFO: POST /api/graphql
2026-07-16 22:22:24,305 INFO: << 404 /trace.axd
2026-07-16 22:22:24,306 WARNING: POST /api/graphql -> 404
2026-07-16 22:22:24,309 INFO: << 404 /api/graphql
2026-07-16 22:22:25,433 INFO: >> GET /@vite/env
2026-07-16 22:22:25,434 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:25,445 INFO: GET /@vite/env
2026-07-16 22:22:25,448 WARNING: GET /@vite/env -> 404
2026-07-16 22:22:25,457 INFO: << 404 /@vite/env
2026-07-16 22:22:25,656 INFO: >> POST /graphql/api
2026-07-16 22:22:25,656 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:25,656 INFO: POST /graphql/api
2026-07-16 22:22:25,658 WARNING: POST /graphql/api -> 404
2026-07-16 22:22:25,660 INFO: << 404 /graphql/api
2026-07-16 22:22:26,224 INFO: >> GET /.vscode/sftp.json
2026-07-16 22:22:26,224 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:26,225 INFO: GET /.vscode/sftp.json
2026-07-16 22:22:26,226 WARNING: GET /.vscode/sftp.json -> 404
2026-07-16 22:22:26,228 INFO: << 404 /.vscode/sftp.json
2026-07-16 22:22:27,049 INFO: >> POST /api/gql
2026-07-16 22:22:27,049 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:27,050 INFO: POST /api/gql
2026-07-16 22:22:27,051 WARNING: POST /api/gql -> 404
2026-07-16 22:22:27,054 INFO: << 404 /api/gql
2026-07-16 22:22:27,360 INFO: >> OPTIONS /
2026-07-16 22:22:27,361 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:27,371 INFO: OPTIONS /
2026-07-16 22:22:27,374 WARNING: OPTIONS / -> 404
2026-07-16 22:22:27,375 INFO: << 404 /
2026-07-16 22:22:28,560 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:28,561 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:28,561 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:28,563 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-07-16 22:22:28,566 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-16 22:22:28,568 INFO: >> GET /
2026-07-16 22:22:28,569 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:28,580 INFO: GET /
2026-07-16 22:22:28,583 WARNING: GET / -> 404
2026-07-16 22:22:28,593 INFO: << 404 /
2026-07-16 22:22:29,599 INFO: >> GET /debug/default/view
2026-07-16 22:22:29,600 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:29,600 INFO: GET /debug/default/view
2026-07-16 22:22:29,602 WARNING: GET /debug/default/view -> 404
2026-07-16 22:22:29,611 INFO: << 404 /debug/default/view
2026-07-16 22:22:30,096 INFO: >> GET /config.json
2026-07-16 22:22:30,098 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:30,108 INFO: GET /config.json
2026-07-16 22:22:30,111 WARNING: GET /config.json -> 404
2026-07-16 22:22:30,121 INFO: << 404 /config.json
2026-07-16 22:22:31,688 INFO: >> GET /telescope/requests
2026-07-16 22:22:31,689 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:31,699 INFO: GET /telescope/requests
2026-07-16 22:22:31,702 WARNING: GET /telescope/requests -> 404
2026-07-16 22:22:31,712 INFO: << 404 /telescope/requests
2026-07-16 22:22:34,390 INFO: >> GET /version
2026-07-16 22:22:34,392 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:34,402 INFO: GET /version
2026-07-16 22:22:34,405 WARNING: GET /version -> 404
2026-07-16 22:22:34,414 INFO: << 404 /version
2026-07-16 22:22:36,614 INFO: >> GET /info.php
2026-07-16 22:22:36,615 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:36,615 INFO: GET /info.php
2026-07-16 22:22:36,616 WARNING: GET /info.php -> 404
2026-07-16 22:22:36,619 INFO: << 404 /info.php
2026-07-16 22:22:38,868 INFO: >> GET /actuator/env
2026-07-16 22:22:38,869 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:38,879 INFO: GET /actuator/env
2026-07-16 22:22:38,882 WARNING: GET /actuator/env -> 404
2026-07-16 22:22:38,905 INFO: << 404 /actuator/env
2026-07-16 22:22:40,293 INFO: >> GET /trace.axd
2026-07-16 22:22:40,293 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:40,294 INFO: GET /trace.axd
2026-07-16 22:22:40,295 WARNING: GET /trace.axd -> 404
2026-07-16 22:22:40,300 INFO: << 404 /trace.axd
2026-07-16 22:22:41,361 INFO: >> GET /@vite/env
2026-07-16 22:22:41,361 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:41,361 INFO: GET /@vite/env
2026-07-16 22:22:41,363 WARNING: GET /@vite/env -> 404
2026-07-16 22:22:41,365 INFO: << 404 /@vite/env
2026-07-16 22:22:42,344 INFO: >> GET /.vscode/sftp.json
2026-07-16 22:22:42,345 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:42,355 INFO: GET /.vscode/sftp.json
2026-07-16 22:22:42,358 WARNING: GET /.vscode/sftp.json -> 404
2026-07-16 22:22:42,367 INFO: << 404 /.vscode/sftp.json
2026-07-16 22:22:43,948 INFO: >> OPTIONS /
2026-07-16 22:22:43,949 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:43,959 INFO: OPTIONS /
2026-07-16 22:22:43,962 WARNING: OPTIONS / -> 404
2026-07-16 22:22:43,963 INFO: << 404 /
2026-07-16 22:22:45,196 INFO: >> GET /
2026-07-16 22:22:45,197 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:45,197 INFO: GET /
2026-07-16 22:22:45,198 WARNING: GET / -> 404
2026-07-16 22:22:45,201 INFO: << 404 /
2026-07-16 22:22:46,387 INFO: >> GET /debug/default/view
2026-07-16 22:22:46,389 DEBUG: Using selector: EpollSelector
2026-07-16 22:22:46,399 INFO: GET /debug/default/view
2026-07-16 22:22:46,402 WARNING: GET /debug/default/view -> 404
2026-07-16 22:22:46,412 INFO: << 404 /debug/default/view
2026-07-17 00:59:41,361 INFO: wsgi.py loading...
2026-07-17 00:59:41,364 INFO: Importing app.main...
2026-07-17 00:59:44,536 INFO: app.main imported successfully.
2026-07-17 00:59:44,541 INFO: Running DB init...
2026-07-17 00:59:44,720 INFO: All tables OK.
2026-07-17 00:59:44,977 INFO: Migration OK: allowances ENUM+DAILY
2026-07-17 00:59:44,980 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:44,983 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:44,985 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:45,005 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:45,049 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:45,061 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 00:59:45,072 INFO: Dip chart data seeded.
2026-07-17 00:59:45,072 INFO: DB init complete.
2026-07-17 00:59:45,072 INFO: wsgi.py ready.
2026-07-17 00:59:45,107 INFO: >> HEAD /
2026-07-17 00:59:45,108 DEBUG: Using selector: EpollSelector
2026-07-17 00:59:45,121 INFO: HEAD /
2026-07-17 00:59:45,126 WARNING: HEAD / -> 404
2026-07-17 00:59:45,127 INFO: << 404 /
2026-07-17 00:59:45,143 INFO: >> HEAD /
2026-07-17 00:59:45,145 DEBUG: Using selector: EpollSelector
2026-07-17 00:59:45,157 INFO: HEAD /
2026-07-17 00:59:45,160 WARNING: HEAD / -> 404
2026-07-17 00:59:45,160 INFO: << 404 /
2026-07-17 00:59:45,500 INFO: >> GET /
2026-07-17 00:59:45,501 DEBUG: Using selector: EpollSelector
2026-07-17 00:59:45,513 INFO: GET /
2026-07-17 00:59:45,515 WARNING: GET / -> 404
2026-07-17 00:59:45,531 INFO: << 404 /
2026-07-17 01:00:05,425 INFO: >> GET /settings.py
2026-07-17 01:00:05,426 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,426 INFO: GET /settings.py
2026-07-17 01:00:05,428 WARNING: GET /settings.py -> 404
2026-07-17 01:00:05,441 INFO: << 404 /settings.py
2026-07-17 01:00:05,454 INFO: >> GET /db.sql
2026-07-17 01:00:05,454 INFO: >> GET /dump.sql
2026-07-17 01:00:05,455 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,456 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,475 INFO: GET /db.sql
2026-07-17 01:00:05,478 WARNING: GET /db.sql -> 404
2026-07-17 01:00:05,482 INFO: GET /dump.sql
2026-07-17 01:00:05,482 INFO: >> GET /config.js
2026-07-17 01:00:05,484 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,485 WARNING: GET /dump.sql -> 404
2026-07-17 01:00:05,495 INFO: >> GET /.env.local
2026-07-17 01:00:05,496 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,509 INFO: GET /config.js
2026-07-17 01:00:05,512 WARNING: GET /config.js -> 404
2026-07-17 01:00:05,526 INFO: << 404 /db.sql
2026-07-17 01:00:05,527 INFO: >> GET /config.json
2026-07-17 01:00:05,528 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,549 INFO: GET /.env.local
2026-07-17 01:00:05,553 WARNING: GET /.env.local -> 404
2026-07-17 01:00:05,591 INFO: GET /config.json
2026-07-17 01:00:05,595 WARNING: GET /config.json -> 404
2026-07-17 01:00:05,728 INFO: << 404 /dump.sql
2026-07-17 01:00:05,729 INFO: << 404 /config.js
2026-07-17 01:00:05,744 INFO: << 404 /config.json
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:05,844 INFO: << 404 /.env.local
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:05,987 INFO: >> GET /secrets.json
2026-07-17 01:00:05,987 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:05,987 INFO: GET /secrets.json
2026-07-17 01:00:05,989 WARNING: GET /secrets.json -> 404
2026-07-17 01:00:06,022 INFO: >> GET /docker-compose.yml
2026-07-17 01:00:06,022 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:06,023 INFO: GET /docker-compose.yml
2026-07-17 01:00:06,024 WARNING: GET /docker-compose.yml -> 404
2026-07-17 01:00:06,062 INFO: >> GET /config.yml
2026-07-17 01:00:06,063 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:06,063 INFO: GET /config.yml
2026-07-17 01:00:06,065 WARNING: GET /config.yml -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:06,077 INFO: << 404 /docker-compose.yml
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:06,321 INFO: << 404 /secrets.json
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:06,545 INFO: << 404 /config.yml
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:06,670 INFO: >> GET /.env.staging
2026-07-17 01:00:06,671 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:06,683 INFO: GET /.env.staging
2026-07-17 01:00:06,686 WARNING: GET /.env.staging -> 404
2026-07-17 01:00:06,740 INFO: << 404 /.env.staging
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:08,718 INFO: >> GET /data.sql
2026-07-17 01:00:08,719 DEBUG: Using selector: EpollSelector
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:08,866 INFO: GET /data.sql
2026-07-17 01:00:08,870 WARNING: GET /data.sql -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:09,065 INFO: << 404 /data.sql
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 6, please increase LSAPI_CHILDREN.
2026-07-17 01:00:09,661 INFO: >> GET /config.php
2026-07-17 01:00:09,663 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:09,694 INFO: GET /config.php
2026-07-17 01:00:09,701 WARNING: GET /config.php -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:09,765 INFO: >> GET /.env.backup
2026-07-17 01:00:09,767 DEBUG: Using selector: EpollSelector
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:09,772 INFO: << 404 /config.php
2026-07-17 01:00:09,778 INFO: GET /.env.backup
2026-07-17 01:00:09,780 INFO: >> GET /backup.sql
2026-07-17 01:00:09,781 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:09,824 INFO: GET /backup.sql
2026-07-17 01:00:09,827 WARNING: GET /backup.sql -> 404
2026-07-17 01:00:09,861 WARNING: GET /.env.backup -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:09,987 INFO: << 404 /.env.backup
2026-07-17 01:00:10,064 INFO: << 404 /backup.sql
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:10,159 INFO: >> GET /.env.dev
2026-07-17 01:00:10,161 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:10,205 INFO: GET /.env.dev
2026-07-17 01:00:10,208 WARNING: GET /.env.dev -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:10,278 INFO: >> GET /.env.production
2026-07-17 01:00:10,279 INFO: << 404 /.env.dev
2026-07-17 01:00:10,280 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:10,329 INFO: GET /.env.production
2026-07-17 01:00:10,345 WARNING: GET /.env.production -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:10,410 INFO: >> GET /credentials.json
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:10,412 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:10,419 INFO: >> GET /app/config/parameters.yml
2026-07-17 01:00:10,420 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:10,426 INFO: GET /credentials.json
2026-07-17 01:00:10,429 WARNING: GET /credentials.json -> 404
2026-07-17 01:00:10,434 INFO: << 404 /.env.production
2026-07-17 01:00:10,437 INFO: GET /app/config/parameters.yml
2026-07-17 01:00:10,440 WARNING: GET /app/config/parameters.yml -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:10,528 INFO: << 404 /app/config/parameters.yml
2026-07-17 01:00:10,530 INFO: << 404 /credentials.json
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:11,523 INFO: >> GET /database.sql
2026-07-17 01:00:11,524 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:11,541 INFO: GET /database.sql
2026-07-17 01:00:11,544 WARNING: GET /database.sql -> 404
2026-07-17 01:00:11,582 INFO: << 404 /database.sql
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:12,365 INFO: >> GET /backup.sql
2026-07-17 01:00:12,367 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:12,379 INFO: GET /backup.sql
2026-07-17 01:00:12,382 WARNING: GET /backup.sql -> 404
2026-07-17 01:00:12,454 INFO: << 404 /backup.sql
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:12,484 INFO: >> GET /data.sql
2026-07-17 01:00:12,484 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:12,485 INFO: GET /data.sql
2026-07-17 01:00:12,487 WARNING: GET /data.sql -> 404
2026-07-17 01:00:12,548 INFO: << 404 /data.sql
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:12,764 INFO: >> GET /credentials.json
2026-07-17 01:00:12,764 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:12,765 INFO: GET /credentials.json
2026-07-17 01:00:12,766 WARNING: GET /credentials.json -> 404
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 01:00:12,773 INFO: >> GET /app/config/parameters.yml
2026-07-17 01:00:12,799 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:12,817 INFO: GET /app/config/parameters.yml
2026-07-17 01:00:12,821 WARNING: GET /app/config/parameters.yml -> 404
2026-07-17 01:00:12,838 INFO: << 404 /credentials.json
2026-07-17 01:00:12,867 INFO: << 404 /app/config/parameters.yml
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:13,172 INFO: >> GET /.env.backup
2026-07-17 01:00:13,172 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:13,172 INFO: GET /.env.backup
2026-07-17 01:00:13,174 WARNING: GET /.env.backup -> 404
2026-07-17 01:00:13,218 INFO: << 404 /.env.backup
[UID:1034][2575112] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 01:00:13,261 INFO: >> GET /.env.dev
2026-07-17 01:00:13,263 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:13,308 INFO: GET /.env.dev
2026-07-17 01:00:13,311 WARNING: GET /.env.dev -> 404
2026-07-17 01:00:13,399 INFO: << 404 /.env.dev
2026-07-17 01:00:14,751 INFO: >> GET /database.sql
2026-07-17 01:00:14,752 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:14,752 INFO: GET /database.sql
2026-07-17 01:00:14,753 WARNING: GET /database.sql -> 404
2026-07-17 01:00:14,758 INFO: << 404 /database.sql
2026-07-17 01:00:15,460 INFO: >> GET /.env.production
2026-07-17 01:00:15,462 DEBUG: Using selector: EpollSelector
2026-07-17 01:00:15,473 INFO: GET /.env.production
2026-07-17 01:00:15,478 WARNING: GET /.env.production -> 404
2026-07-17 01:00:15,530 INFO: << 404 /.env.production
2026-07-17 08:27:04,173 INFO: wsgi.py loading...
2026-07-17 08:27:04,174 INFO: Importing app.main...
2026-07-17 08:27:07,900 INFO: app.main imported successfully.
2026-07-17 08:27:07,900 INFO: Running DB init...
2026-07-17 08:27:07,986 INFO: All tables OK.
2026-07-17 08:27:08,128 INFO: Migration OK: allowances ENUM+DAILY
2026-07-17 08:27:08,131 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,133 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,136 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,139 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,142 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,144 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 08:27:08,153 INFO: Dip chart data seeded.
2026-07-17 08:27:08,154 INFO: DB init complete.
2026-07-17 08:27:08,154 INFO: wsgi.py ready.
2026-07-17 08:27:08,157 INFO: >> HEAD /
2026-07-17 08:27:08,158 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:08,159 INFO: >> HEAD /
2026-07-17 08:27:08,160 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:08,169 INFO: HEAD /
2026-07-17 08:27:08,171 INFO: HEAD /
2026-07-17 08:27:08,172 WARNING: HEAD / -> 404
2026-07-17 08:27:08,172 INFO: << 404 /
2026-07-17 08:27:08,173 WARNING: HEAD / -> 404
2026-07-17 08:27:08,174 INFO: << 404 /
2026-07-17 08:27:08,924 INFO: >> GET /
2026-07-17 08:27:08,925 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:08,935 INFO: GET /
2026-07-17 08:27:08,937 WARNING: GET / -> 404
2026-07-17 08:27:08,946 INFO: << 404 /
2026-07-17 08:27:27,073 INFO: >> GET /.env.production
2026-07-17 08:27:27,073 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,074 INFO: GET /.env.production
2026-07-17 08:27:27,076 WARNING: GET /.env.production -> 404
2026-07-17 08:27:27,087 INFO: << 404 /.env.production
2026-07-17 08:27:27,132 INFO: >> GET /.env.staging
2026-07-17 08:27:27,134 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,136 INFO: >> GET /.env.local
2026-07-17 08:27:27,137 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,145 INFO: GET /.env.staging
2026-07-17 08:27:27,147 INFO: GET /.env.local
2026-07-17 08:27:27,149 WARNING: GET /.env.staging -> 404
2026-07-17 08:27:27,150 WARNING: GET /.env.local -> 404
2026-07-17 08:27:27,159 INFO: << 404 /.env.local
2026-07-17 08:27:27,160 INFO: << 404 /.env.staging
2026-07-17 08:27:27,202 INFO: >> GET /dump.sql
2026-07-17 08:27:27,204 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,215 INFO: GET /dump.sql
2026-07-17 08:27:27,218 WARNING: GET /dump.sql -> 404
2026-07-17 08:27:27,228 INFO: << 404 /dump.sql
2026-07-17 08:27:27,289 INFO: >> GET /.env.backup
2026-07-17 08:27:27,289 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,290 INFO: >> GET /db.sql
2026-07-17 08:27:27,290 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,290 INFO: GET /.env.backup
2026-07-17 08:27:27,290 INFO: GET /db.sql
2026-07-17 08:27:27,291 WARNING: GET /.env.backup -> 404
2026-07-17 08:27:27,291 WARNING: GET /db.sql -> 404
2026-07-17 08:27:27,296 INFO: << 404 /.env.backup
2026-07-17 08:27:27,297 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 810, in _read_bytes
    data = self._rfile.read(num_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/socket.py", line 718, in readinto
    return self._sock.recv_into(b)
           ^^^^^^^^^^^^^^^^^^^^^^^
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 816, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([Errno 104] Connection reset by peer)')
2026-07-17 08:27:27,310 INFO: << 404 /db.sql
2026-07-17 08:27:27,318 INFO: >> GET /.env.dev
2026-07-17 08:27:27,320 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,320 INFO: >> GET /config.js
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 08:27:27,322 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,330 INFO: >> GET /database.sql
2026-07-17 08:27:27,330 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,331 INFO: GET /database.sql
2026-07-17 08:27:27,331 INFO: >> GET /wp-config.php
2026-07-17 08:27:27,331 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,332 INFO: GET /wp-config.php
2026-07-17 08:27:27,332 WARNING: GET /database.sql -> 404
2026-07-17 08:27:27,332 INFO: GET /.env.dev
2026-07-17 08:27:27,333 INFO: GET /config.js
2026-07-17 08:27:27,335 WARNING: GET /.env.dev -> 404
2026-07-17 08:27:27,336 WARNING: GET /config.js -> 404
2026-07-17 08:27:27,336 WARNING: GET /wp-config.php -> 404
2026-07-17 08:27:27,341 INFO: >> GET /app/config/parameters.yml
2026-07-17 08:27:27,341 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,341 INFO: GET /app/config/parameters.yml
2026-07-17 08:27:27,343 WARNING: GET /app/config/parameters.yml -> 404
2026-07-17 08:27:27,356 INFO: << 404 /wp-config.php
2026-07-17 08:27:27,364 INFO: << 404 /database.sql
2026-07-17 08:27:27,390 INFO: << 404 /.env.dev
2026-07-17 08:27:27,392 INFO: << 404 /config.js
2026-07-17 08:27:27,396 INFO: >> GET /secrets.json
2026-07-17 08:27:27,396 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,396 INFO: GET /secrets.json
2026-07-17 08:27:27,398 WARNING: GET /secrets.json -> 404
2026-07-17 08:27:27,401 INFO: << 404 /secrets.json
2026-07-17 08:27:27,401 INFO: << 404 /app/config/parameters.yml
2026-07-17 08:27:27,410 INFO: >> GET /docker-compose.yml
2026-07-17 08:27:27,411 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,411 INFO: GET /docker-compose.yml
2026-07-17 08:27:27,413 WARNING: GET /docker-compose.yml -> 404
2026-07-17 08:27:27,417 INFO: >> GET /credentials.json
2026-07-17 08:27:27,417 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:27,418 INFO: GET /credentials.json
2026-07-17 08:27:27,419 WARNING: GET /credentials.json -> 404
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 08:27:27,423 INFO: << 404 /credentials.json
2026-07-17 08:27:27,445 INFO: << 404 /docker-compose.yml
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,213 INFO: >> GET /config.yml
2026-07-17 08:27:30,215 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:30,292 INFO: GET /config.yml
2026-07-17 08:27:30,295 WARNING: GET /config.yml -> 404
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,440 INFO: << 404 /config.yml
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,703 INFO: >> GET /data.sql
2026-07-17 08:27:30,705 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:30,722 INFO: GET /data.sql
2026-07-17 08:27:30,726 WARNING: GET /data.sql -> 404
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,802 INFO: >> GET /config.php
2026-07-17 08:27:30,804 DEBUG: Using selector: EpollSelector
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,834 INFO: GET /config.php
2026-07-17 08:27:30,835 INFO: >> GET /config.json
2026-07-17 08:27:30,836 INFO: << 404 /data.sql
2026-07-17 08:27:30,837 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:30,838 WARNING: GET /config.php -> 404
2026-07-17 08:27:30,897 INFO: GET /config.json
[UID:1034][3775266] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 08:27:30,911 INFO: >> GET /settings.py
2026-07-17 08:27:30,913 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:30,924 INFO: GET /settings.py
2026-07-17 08:27:30,927 WARNING: GET /settings.py -> 404
2026-07-17 08:27:30,929 INFO: << 404 /config.php
2026-07-17 08:27:30,930 WARNING: GET /config.json -> 404
2026-07-17 08:27:30,933 INFO: >> GET /backup.sql
2026-07-17 08:27:30,934 DEBUG: Using selector: EpollSelector
2026-07-17 08:27:30,946 INFO: GET /backup.sql
2026-07-17 08:27:30,949 WARNING: GET /backup.sql -> 404
2026-07-17 08:27:31,002 INFO: << 404 /settings.py
2026-07-17 08:27:31,024 INFO: << 404 /config.json
2026-07-17 08:27:31,038 INFO: << 404 /backup.sql
2026-07-17 10:57:33,215 INFO: wsgi.py loading...
2026-07-17 10:57:33,216 INFO: Importing app.main...
2026-07-17 10:57:35,057 INFO: app.main imported successfully.
2026-07-17 10:57:35,057 INFO: Running DB init...
2026-07-17 10:57:35,134 INFO: All tables OK.
2026-07-17 10:57:35,272 INFO: Migration OK: allowances ENUM+DAILY
2026-07-17 10:57:35,275 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,278 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,283 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,295 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,298 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,301 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 10:57:35,309 INFO: Dip chart data seeded.
2026-07-17 10:57:35,309 INFO: DB init complete.
2026-07-17 10:57:35,309 INFO: wsgi.py ready.
2026-07-17 10:57:35,313 INFO: >> GET /
2026-07-17 10:57:35,314 DEBUG: Using selector: EpollSelector
2026-07-17 10:57:35,325 INFO: GET /
2026-07-17 10:57:35,327 WARNING: GET / -> 404
2026-07-17 10:57:35,351 INFO: << 404 /
2026-07-17 19:58:32,176 INFO: wsgi.py loading...
2026-07-17 19:58:32,176 INFO: Importing app.main...
2026-07-17 19:58:35,793 INFO: app.main imported successfully.
2026-07-17 19:58:35,793 INFO: Running DB init...
2026-07-17 19:58:35,858 INFO: All tables OK.
2026-07-17 19:58:35,998 INFO: Migration OK: allowances ENUM+DAILY
2026-07-17 19:58:36,001 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,003 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,006 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,009 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,012 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,014 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-17 19:58:36,021 INFO: Dip chart data seeded.
2026-07-17 19:58:36,022 INFO: DB init complete.
2026-07-17 19:58:36,022 INFO: wsgi.py ready.
2026-07-17 19:58:36,025 INFO: >> HEAD /
2026-07-17 19:58:36,026 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:36,038 INFO: HEAD /
2026-07-17 19:58:36,040 WARNING: HEAD / -> 404
2026-07-17 19:58:36,041 INFO: << 404 /
2026-07-17 19:58:36,837 INFO: >> GET /
2026-07-17 19:58:36,837 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:36,838 INFO: GET /
2026-07-17 19:58:36,838 WARNING: GET / -> 404
2026-07-17 19:58:36,847 INFO: << 404 /
2026-07-17 19:58:42,228 INFO: >> GET /configuration.php
2026-07-17 19:58:42,229 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,234 INFO: >> GET /wp-config.php.bak
2026-07-17 19:58:42,236 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,239 INFO: GET /configuration.php
2026-07-17 19:58:42,242 WARNING: GET /configuration.php -> 404
2026-07-17 19:58:42,246 INFO: GET /wp-config.php.bak
2026-07-17 19:58:42,247 INFO: >> GET /.env.backup
2026-07-17 19:58:42,248 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,248 INFO: GET /.env.backup
2026-07-17 19:58:42,249 WARNING: GET /wp-config.php.bak -> 404
2026-07-17 19:58:42,249 WARNING: GET /.env.backup -> 404
2026-07-17 19:58:42,252 INFO: << 404 /configuration.php
2026-07-17 19:58:42,253 INFO: << 404 /.env.backup
2026-07-17 19:58:42,254 INFO: >> GET /dump.sql
2026-07-17 19:58:42,255 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,257 INFO: >> GET /wp-config.old
2026-07-17 19:58:42,257 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,258 INFO: GET /wp-config.old
2026-07-17 19:58:42,257 INFO: >> GET /backup.sql
2026-07-17 19:58:42,259 WARNING: GET /wp-config.old -> 404
2026-07-17 19:58:42,259 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,259 INFO: << 404 /wp-config.php.bak
2026-07-17 19:58:42,262 INFO: << 404 /wp-config.old
2026-07-17 19:58:42,266 INFO: GET /dump.sql
2026-07-17 19:58:42,269 WARNING: GET /dump.sql -> 404
2026-07-17 19:58:42,270 INFO: GET /backup.sql
2026-07-17 19:58:42,273 INFO: >> GET /.env.dev
2026-07-17 19:58:42,273 WARNING: GET /backup.sql -> 404
2026-07-17 19:58:42,274 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,278 INFO: << 404 /dump.sql
2026-07-17 19:58:42,282 INFO: >> GET /wp-config.php
2026-07-17 19:58:42,283 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,284 INFO: << 404 /backup.sql
2026-07-17 19:58:42,284 INFO: GET /.env.dev
2026-07-17 19:58:42,287 WARNING: GET /.env.dev -> 404
2026-07-17 19:58:42,294 INFO: GET /wp-config.php
2026-07-17 19:58:42,296 INFO: << 404 /.env.dev
2026-07-17 19:58:42,297 WARNING: GET /wp-config.php -> 404
2026-07-17 19:58:42,307 INFO: << 404 /wp-config.php
2026-07-17 19:58:42,309 INFO: >> GET /configuration.php.bak
2026-07-17 19:58:42,309 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,309 INFO: >> GET /wp-config.php.old
2026-07-17 19:58:42,310 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,310 INFO: GET /configuration.php.bak
2026-07-17 19:58:42,310 INFO: GET /wp-config.php.old
2026-07-17 19:58:42,311 WARNING: GET /configuration.php.bak -> 404
2026-07-17 19:58:42,311 WARNING: GET /wp-config.php.old -> 404
2026-07-17 19:58:42,315 INFO: << 404 /wp-config.php.old
2026-07-17 19:58:42,316 INFO: << 404 /configuration.php.bak
2026-07-17 19:58:42,324 INFO: >> GET /.env.staging
2026-07-17 19:58:42,326 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,336 INFO: GET /.env.staging
2026-07-17 19:58:42,339 WARNING: GET /.env.staging -> 404
2026-07-17 19:58:42,344 INFO: >> GET /.env.production
2026-07-17 19:58:42,344 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,344 INFO: GET /.env.production
2026-07-17 19:58:42,346 WARNING: GET /.env.production -> 404
2026-07-17 19:58:42,368 INFO: << 404 /.env.production
2026-07-17 19:58:42,369 INFO: << 404 /.env.staging
2026-07-17 19:58:42,408 INFO: >> GET /.env.local
2026-07-17 19:58:42,408 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,409 INFO: GET /.env.local
2026-07-17 19:58:42,410 WARNING: GET /.env.local -> 404
2026-07-17 19:58:42,431 INFO: << 404 /.env.local
2026-07-17 19:58:42,476 INFO: >> GET /db.sql
2026-07-17 19:58:42,476 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,477 INFO: GET /db.sql
2026-07-17 19:58:42,478 WARNING: GET /db.sql -> 404
2026-07-17 19:58:42,478 INFO: >> GET /database.sql
2026-07-17 19:58:42,478 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,479 INFO: GET /database.sql
2026-07-17 19:58:42,479 INFO: >> GET /data.sql
2026-07-17 19:58:42,480 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,480 INFO: GET /data.sql
2026-07-17 19:58:42,480 WARNING: GET /database.sql -> 404
2026-07-17 19:58:42,481 WARNING: GET /data.sql -> 404
2026-07-17 19:58:42,484 INFO: >> GET /config.js
2026-07-17 19:58:42,484 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,484 INFO: GET /config.js
2026-07-17 19:58:42,485 WARNING: GET /config.js -> 404
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 19:58:42,501 INFO: << 404 /data.sql
2026-07-17 19:58:42,501 INFO: << 404 /db.sql
2026-07-17 19:58:42,503 INFO: << 404 /database.sql
2026-07-17 19:58:42,508 INFO: << 404 /config.js
2026-07-17 19:58:42,508 INFO: >> GET /config.yml
2026-07-17 19:58:42,508 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,509 INFO: GET /config.yml
2026-07-17 19:58:42,510 WARNING: GET /config.yml -> 404
2026-07-17 19:58:42,512 INFO: << 404 /config.yml
2026-07-17 19:58:42,535 INFO: >> GET /.aws/credentials
2026-07-17 19:58:42,535 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,536 INFO: GET /.aws/credentials
2026-07-17 19:58:42,537 WARNING: GET /.aws/credentials -> 404
2026-07-17 19:58:42,539 INFO: >> GET /settings.py
2026-07-17 19:58:42,539 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,539 INFO: GET /settings.py
2026-07-17 19:58:42,540 INFO: << 404 /.aws/credentials
2026-07-17 19:58:42,541 WARNING: GET /settings.py -> 404
2026-07-17 19:58:42,543 INFO: << 404 /settings.py
2026-07-17 19:58:42,547 INFO: >> GET /credentials.json
2026-07-17 19:58:42,548 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,548 INFO: GET /credentials.json
2026-07-17 19:58:42,549 WARNING: GET /credentials.json -> 404
2026-07-17 19:58:42,552 INFO: << 404 /credentials.json
2026-07-17 19:58:42,586 INFO: >> GET /secrets.json
2026-07-17 19:58:42,586 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,586 INFO: GET /secrets.json
2026-07-17 19:58:42,588 WARNING: GET /secrets.json -> 404
2026-07-17 19:58:42,591 INFO: << 404 /secrets.json
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 19:58:42,619 INFO: >> GET /docker-compose.yml
2026-07-17 19:58:42,619 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,620 INFO: GET /docker-compose.yml
2026-07-17 19:58:42,621 INFO: >> GET /config/database.yml
2026-07-17 19:58:42,621 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,621 WARNING: GET /docker-compose.yml -> 404
2026-07-17 19:58:42,621 INFO: GET /config/database.yml
2026-07-17 19:58:42,622 INFO: >> GET /app/config/parameters.yml
2026-07-17 19:58:42,623 WARNING: GET /config/database.yml -> 404
2026-07-17 19:58:42,623 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:42,623 INFO: GET /app/config/parameters.yml
2026-07-17 19:58:42,624 INFO: << 404 /docker-compose.yml
2026-07-17 19:58:42,625 WARNING: GET /app/config/parameters.yml -> 404
2026-07-17 19:58:42,625 INFO: << 404 /config/database.yml
2026-07-17 19:58:42,627 INFO: << 404 /app/config/parameters.yml
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 19:58:44,671 INFO: >> GET /config.php
2026-07-17 19:58:44,672 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:44,685 INFO: GET /config.php
2026-07-17 19:58:44,764 WARNING: GET /config.php -> 404
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 19:58:44,874 INFO: << 404 /config.php
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-17 19:58:45,269 INFO: >> GET /config.json
2026-07-17 19:58:45,271 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:45,283 INFO: GET /config.json
2026-07-17 19:58:45,286 WARNING: GET /config.json -> 404
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 19:58:45,385 INFO: << 404 /config.json
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1449664] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-17 19:58:45,869 INFO: >> GET /.npmrc
2026-07-17 19:58:45,870 DEBUG: Using selector: EpollSelector
2026-07-17 19:58:45,883 INFO: GET /.npmrc
2026-07-17 19:58:45,886 WARNING: GET /.npmrc -> 404
2026-07-17 19:58:45,985 INFO: << 404 /.npmrc
2026-07-18 08:25:52,624 INFO: wsgi.py loading...
2026-07-18 08:25:52,624 INFO: Importing app.main...
2026-07-18 08:25:56,312 INFO: app.main imported successfully.
2026-07-18 08:25:56,312 INFO: Running DB init...
2026-07-18 08:25:56,385 INFO: All tables OK.
2026-07-18 08:25:56,520 INFO: Migration OK: allowances ENUM+DAILY
2026-07-18 08:25:56,523 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,525 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,528 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,530 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,533 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,535 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:25:56,545 INFO: Dip chart data seeded.
2026-07-18 08:25:56,545 INFO: DB init complete.
2026-07-18 08:25:56,545 INFO: wsgi.py ready.
2026-07-18 08:25:56,548 INFO: >> GET /
2026-07-18 08:25:56,549 DEBUG: Using selector: EpollSelector
2026-07-18 08:25:56,550 INFO: >> GET /robots.txt
2026-07-18 08:25:56,551 DEBUG: Using selector: EpollSelector
2026-07-18 08:25:56,560 INFO: GET /
2026-07-18 08:25:56,561 INFO: GET /robots.txt
2026-07-18 08:25:56,562 WARNING: GET / -> 404
2026-07-18 08:25:56,564 WARNING: GET /robots.txt -> 404
2026-07-18 08:25:56,572 INFO: << 404 /
2026-07-18 08:25:56,573 INFO: << 404 /robots.txt
2026-07-18 08:33:36,874 INFO: wsgi.py loading...
2026-07-18 08:33:36,875 INFO: Importing app.main...
2026-07-18 08:33:38,861 INFO: app.main imported successfully.
2026-07-18 08:33:38,861 INFO: Running DB init...
2026-07-18 08:33:38,933 INFO: All tables OK.
2026-07-18 08:33:39,139 INFO: Migration OK: allowances ENUM+DAILY
2026-07-18 08:33:39,143 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,146 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,149 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,151 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,154 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,158 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 08:33:39,166 INFO: Dip chart data seeded.
2026-07-18 08:33:39,166 INFO: DB init complete.
2026-07-18 08:33:39,166 INFO: wsgi.py ready.
2026-07-18 08:33:39,170 INFO: >> HEAD /
2026-07-18 08:33:39,171 DEBUG: Using selector: EpollSelector
2026-07-18 08:33:39,182 INFO: HEAD /
2026-07-18 08:33:39,184 WARNING: HEAD / -> 404
2026-07-18 08:33:39,185 INFO: << 404 /
2026-07-18 17:02:19,613 INFO: wsgi.py loading...
2026-07-18 17:02:19,614 INFO: Importing app.main...
2026-07-18 17:02:21,504 INFO: app.main imported successfully.
2026-07-18 17:02:21,504 INFO: Running DB init...
2026-07-18 17:02:21,568 INFO: All tables OK.
2026-07-18 17:02:21,705 INFO: Migration OK: allowances ENUM+DAILY
2026-07-18 17:02:21,708 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,712 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,715 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,717 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,720 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,723 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-18 17:02:21,731 INFO: Dip chart data seeded.
2026-07-18 17:02:21,732 INFO: DB init complete.
2026-07-18 17:02:21,732 INFO: wsgi.py ready.
2026-07-18 17:02:21,735 INFO: >> GET /robots.txt
2026-07-18 17:02:21,736 DEBUG: Using selector: EpollSelector
2026-07-18 17:02:21,747 INFO: GET /robots.txt
2026-07-18 17:02:21,750 WARNING: GET /robots.txt -> 404
2026-07-18 17:02:21,760 INFO: << 404 /robots.txt
2026-07-18 17:02:22,616 INFO: >> GET /
2026-07-18 17:02:22,617 DEBUG: Using selector: EpollSelector
2026-07-18 17:02:22,627 INFO: GET /
2026-07-18 17:02:22,629 WARNING: GET / -> 404
2026-07-18 17:02:22,638 INFO: << 404 /
2026-07-19 08:53:31,428 INFO: wsgi.py loading...
2026-07-19 08:53:31,429 INFO: Importing app.main...
2026-07-19 08:53:35,128 INFO: app.main imported successfully.
2026-07-19 08:53:35,128 INFO: Running DB init...
2026-07-19 08:53:35,194 INFO: All tables OK.
2026-07-19 08:53:35,335 INFO: Migration OK: allowances ENUM+DAILY
2026-07-19 08:53:35,337 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,340 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,342 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,345 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,348 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,350 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 08:53:35,359 INFO: Dip chart data seeded.
2026-07-19 08:53:35,359 INFO: DB init complete.
2026-07-19 08:53:35,359 INFO: wsgi.py ready.
2026-07-19 08:53:35,363 INFO: >> GET /
2026-07-19 08:53:35,364 DEBUG: Using selector: EpollSelector
2026-07-19 08:53:35,374 INFO: GET /
2026-07-19 08:53:35,377 WARNING: GET / -> 404
2026-07-19 08:53:35,387 INFO: << 404 /
2026-07-19 10:23:37,999 INFO: wsgi.py loading...
2026-07-19 10:23:38,000 INFO: Importing app.main...
2026-07-19 10:23:39,891 INFO: app.main imported successfully.
2026-07-19 10:23:39,891 INFO: Running DB init...
2026-07-19 10:23:39,955 INFO: All tables OK.
2026-07-19 10:23:40,100 INFO: Migration OK: allowances ENUM+DAILY
2026-07-19 10:23:40,102 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,105 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,108 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,110 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,113 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,116 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 10:23:40,125 INFO: Dip chart data seeded.
2026-07-19 10:23:40,125 INFO: DB init complete.
2026-07-19 10:23:40,125 INFO: wsgi.py ready.
2026-07-19 10:23:40,128 INFO: >> GET /
2026-07-19 10:23:40,130 DEBUG: Using selector: EpollSelector
2026-07-19 10:23:40,140 INFO: GET /
2026-07-19 10:23:40,143 WARNING: GET / -> 404
2026-07-19 10:23:40,152 INFO: << 404 /
2026-07-19 18:38:33,768 INFO: wsgi.py loading...
2026-07-19 18:38:33,769 INFO: Importing app.main...
2026-07-19 18:38:37,495 INFO: app.main imported successfully.
2026-07-19 18:38:37,495 INFO: Running DB init...
2026-07-19 18:38:37,559 INFO: All tables OK.
2026-07-19 18:38:37,695 INFO: Migration OK: allowances ENUM+DAILY
2026-07-19 18:38:37,698 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,700 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,703 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,705 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,708 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,710 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-19 18:38:37,719 INFO: Dip chart data seeded.
2026-07-19 18:38:37,719 INFO: DB init complete.
2026-07-19 18:38:37,719 INFO: wsgi.py ready.
2026-07-19 18:38:37,722 INFO: >> GET /
2026-07-19 18:38:37,724 DEBUG: Using selector: EpollSelector
2026-07-19 18:38:37,734 INFO: GET /
2026-07-19 18:38:37,737 WARNING: GET / -> 404
2026-07-19 18:38:37,745 INFO: << 404 /
2026-07-20 00:17:58,308 INFO: wsgi.py loading...
2026-07-20 00:17:58,308 INFO: Importing app.main...
2026-07-20 00:18:00,129 INFO: app.main imported successfully.
2026-07-20 00:18:00,129 INFO: Running DB init...
2026-07-20 00:18:00,193 INFO: All tables OK.
2026-07-20 00:18:00,326 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 00:18:00,329 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,331 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,334 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,336 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,340 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,342 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 00:18:00,350 INFO: Dip chart data seeded.
2026-07-20 00:18:00,351 INFO: DB init complete.
2026-07-20 00:18:00,351 INFO: wsgi.py ready.
2026-07-20 00:18:00,354 INFO: >> GET /
2026-07-20 00:18:00,355 DEBUG: Using selector: EpollSelector
2026-07-20 00:18:00,366 INFO: GET /
2026-07-20 00:18:00,368 WARNING: GET / -> 404
2026-07-20 00:18:00,377 INFO: << 404 /
2026-07-20 05:19:13,803 INFO: wsgi.py loading...
2026-07-20 05:19:13,804 INFO: Importing app.main...
2026-07-20 05:19:17,483 INFO: app.main imported successfully.
2026-07-20 05:19:17,483 INFO: Running DB init...
2026-07-20 05:19:17,546 INFO: All tables OK.
2026-07-20 05:19:17,687 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 05:19:17,689 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,692 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,694 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,697 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,699 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,702 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 05:19:17,709 INFO: Dip chart data seeded.
2026-07-20 05:19:17,709 INFO: DB init complete.
2026-07-20 05:19:17,709 INFO: wsgi.py ready.
2026-07-20 05:19:17,712 INFO: >> GET /
2026-07-20 05:19:17,714 DEBUG: Using selector: EpollSelector
2026-07-20 05:19:17,724 INFO: GET /
2026-07-20 05:19:17,727 WARNING: GET / -> 404
2026-07-20 05:19:17,736 INFO: << 404 /
2026-07-20 15:23:07,892 INFO: wsgi.py loading...
2026-07-20 15:23:07,892 INFO: Importing app.main...
2026-07-20 15:23:11,732 INFO: app.main imported successfully.
2026-07-20 15:23:11,732 INFO: Running DB init...
2026-07-20 15:23:11,796 INFO: All tables OK.
2026-07-20 15:23:11,931 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 15:23:11,933 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,936 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,938 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,941 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,943 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,946 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 15:23:11,954 INFO: Dip chart data seeded.
2026-07-20 15:23:11,954 INFO: DB init complete.
2026-07-20 15:23:11,954 INFO: wsgi.py ready.
2026-07-20 15:23:11,957 INFO: >> GET /
2026-07-20 15:23:11,959 DEBUG: Using selector: EpollSelector
2026-07-20 15:23:11,969 INFO: GET /
2026-07-20 15:23:11,971 WARNING: GET / -> 404
2026-07-20 15:23:11,979 INFO: << 404 /
2026-07-20 21:28:02,459 INFO: wsgi.py loading...
2026-07-20 21:28:02,459 INFO: Importing app.main...
2026-07-20 21:28:06,329 INFO: app.main imported successfully.
2026-07-20 21:28:06,329 INFO: Running DB init...
2026-07-20 21:28:06,390 INFO: All tables OK.
2026-07-20 21:28:06,559 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 21:28:06,562 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,565 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,567 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,570 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,573 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,576 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:28:06,585 INFO: Dip chart data seeded.
2026-07-20 21:28:06,585 INFO: DB init complete.
2026-07-20 21:28:06,585 INFO: wsgi.py ready.
2026-07-20 21:28:06,589 INFO: >> GET /
2026-07-20 21:28:06,591 DEBUG: Using selector: EpollSelector
2026-07-20 21:28:06,628 INFO: GET /
2026-07-20 21:28:06,630 WARNING: GET / -> 404
2026-07-20 21:28:06,639 INFO: << 404 /
2026-07-20 21:43:54,024 INFO: wsgi.py loading...
2026-07-20 21:43:54,024 INFO: Importing app.main...
2026-07-20 21:43:55,875 INFO: app.main imported successfully.
2026-07-20 21:43:55,875 INFO: Running DB init...
2026-07-20 21:43:55,943 INFO: All tables OK.
2026-07-20 21:43:56,088 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 21:43:56,091 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,094 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,097 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,100 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,103 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,106 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 21:43:56,114 INFO: Dip chart data seeded.
2026-07-20 21:43:56,114 INFO: DB init complete.
2026-07-20 21:43:56,114 INFO: wsgi.py ready.
2026-07-20 21:43:56,118 INFO: >> GET /
2026-07-20 21:43:56,119 DEBUG: Using selector: EpollSelector
2026-07-20 21:43:56,129 INFO: GET /
2026-07-20 21:43:56,132 WARNING: GET / -> 404
2026-07-20 21:43:56,141 INFO: << 404 /
2026-07-20 23:39:34,182 INFO: wsgi.py loading...
2026-07-20 23:39:34,182 INFO: Importing app.main...
2026-07-20 23:39:36,031 INFO: app.main imported successfully.
2026-07-20 23:39:36,031 INFO: Running DB init...
2026-07-20 23:39:36,096 INFO: All tables OK.
2026-07-20 23:39:36,245 INFO: Migration OK: allowances ENUM+DAILY
2026-07-20 23:39:36,248 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,251 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,253 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,256 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,259 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,261 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-20 23:39:36,270 INFO: Dip chart data seeded.
2026-07-20 23:39:36,270 INFO: DB init complete.
2026-07-20 23:39:36,270 INFO: wsgi.py ready.
2026-07-20 23:39:36,273 INFO: >> GET /
2026-07-20 23:39:36,275 DEBUG: Using selector: EpollSelector
2026-07-20 23:39:36,284 INFO: GET /
2026-07-20 23:39:36,287 WARNING: GET / -> 404
2026-07-20 23:39:36,295 INFO: << 404 /
2026-07-21 10:51:04,402 INFO: wsgi.py loading...
2026-07-21 10:51:04,402 INFO: Importing app.main...
2026-07-21 10:51:08,127 INFO: app.main imported successfully.
2026-07-21 10:51:08,127 INFO: Running DB init...
2026-07-21 10:51:08,193 INFO: All tables OK.
2026-07-21 10:51:08,337 INFO: Migration OK: allowances ENUM+DAILY
2026-07-21 10:51:08,340 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,342 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,345 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,347 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,350 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,352 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 10:51:08,362 INFO: Dip chart data seeded.
2026-07-21 10:51:08,362 INFO: DB init complete.
2026-07-21 10:51:08,362 INFO: wsgi.py ready.
2026-07-21 10:51:08,365 INFO: >> GET /
2026-07-21 10:51:08,367 DEBUG: Using selector: EpollSelector
2026-07-21 10:51:08,377 INFO: GET /
2026-07-21 10:51:08,379 WARNING: GET / -> 404
2026-07-21 10:51:08,389 INFO: << 404 /
2026-07-21 11:27:43,602 INFO: wsgi.py loading...
2026-07-21 11:27:43,602 INFO: Importing app.main...
2026-07-21 11:27:45,515 INFO: app.main imported successfully.
2026-07-21 11:27:45,515 INFO: Running DB init...
2026-07-21 11:27:45,577 INFO: All tables OK.
2026-07-21 11:27:45,713 INFO: Migration OK: allowances ENUM+DAILY
2026-07-21 11:27:45,715 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,718 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,720 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,723 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,725 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,728 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 11:27:45,736 INFO: Dip chart data seeded.
2026-07-21 11:27:45,736 INFO: DB init complete.
2026-07-21 11:27:45,736 INFO: wsgi.py ready.
2026-07-21 11:27:45,740 INFO: >> GET /
2026-07-21 11:27:45,741 DEBUG: Using selector: EpollSelector
2026-07-21 11:27:45,751 INFO: GET /
2026-07-21 11:27:45,753 WARNING: GET / -> 404
2026-07-21 11:27:45,762 INFO: << 404 /
2026-07-21 22:19:23,311 INFO: wsgi.py loading...
2026-07-21 22:19:23,312 INFO: Importing app.main...
2026-07-21 22:19:27,075 INFO: app.main imported successfully.
2026-07-21 22:19:27,076 INFO: Running DB init...
2026-07-21 22:19:27,138 INFO: All tables OK.
2026-07-21 22:19:27,282 INFO: Migration OK: allowances ENUM+DAILY
2026-07-21 22:19:27,284 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,287 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,289 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,292 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,295 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,297 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-21 22:19:27,307 INFO: Dip chart data seeded.
2026-07-21 22:19:27,307 INFO: DB init complete.
2026-07-21 22:19:27,307 INFO: wsgi.py ready.
2026-07-21 22:19:27,310 INFO: >> GET /
2026-07-21 22:19:27,312 DEBUG: Using selector: EpollSelector
2026-07-21 22:19:27,312 INFO: >> GET /robots.txt
2026-07-21 22:19:27,314 DEBUG: Using selector: EpollSelector
2026-07-21 22:19:27,322 INFO: GET /
2026-07-21 22:19:27,324 INFO: GET /robots.txt
2026-07-21 22:19:27,325 WARNING: GET / -> 404
2026-07-21 22:19:27,327 WARNING: GET /robots.txt -> 404
2026-07-21 22:19:27,335 INFO: << 404 /
2026-07-21 22:19:27,336 INFO: << 404 /robots.txt
2026-07-22 02:07:37,759 INFO: wsgi.py loading...
2026-07-22 02:07:37,760 INFO: Importing app.main...
2026-07-22 02:07:39,603 INFO: app.main imported successfully.
2026-07-22 02:07:39,603 INFO: Running DB init...
2026-07-22 02:07:39,668 INFO: All tables OK.
2026-07-22 02:07:39,804 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 02:07:39,807 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,809 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,812 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,814 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,816 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,819 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 02:07:39,827 INFO: Dip chart data seeded.
2026-07-22 02:07:39,828 INFO: DB init complete.
2026-07-22 02:07:39,828 INFO: wsgi.py ready.
2026-07-22 02:07:39,831 INFO: >> GET /
2026-07-22 02:07:39,832 DEBUG: Using selector: EpollSelector
2026-07-22 02:07:39,842 INFO: GET /
2026-07-22 02:07:39,845 WARNING: GET / -> 404
2026-07-22 02:07:39,854 INFO: << 404 /
2026-07-22 02:09:00,888 INFO: >> GET /
2026-07-22 02:09:00,889 DEBUG: Using selector: EpollSelector
2026-07-22 02:09:00,889 INFO: GET /
2026-07-22 02:09:00,890 WARNING: GET / -> 404
2026-07-22 02:09:00,913 INFO: << 404 /
2026-07-22 09:50:42,430 INFO: wsgi.py loading...
2026-07-22 09:50:42,431 INFO: Importing app.main...
2026-07-22 09:50:46,244 INFO: app.main imported successfully.
2026-07-22 09:50:46,244 INFO: Running DB init...
2026-07-22 09:50:46,308 INFO: All tables OK.
2026-07-22 09:50:46,450 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 09:50:46,453 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,456 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,459 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,461 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,464 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,467 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 09:50:46,474 INFO: Dip chart data seeded.
2026-07-22 09:50:46,474 INFO: DB init complete.
2026-07-22 09:50:46,475 INFO: wsgi.py ready.
2026-07-22 09:50:46,478 INFO: >> GET /robots.txt
2026-07-22 09:50:46,480 DEBUG: Using selector: EpollSelector
2026-07-22 09:50:46,491 INFO: GET /robots.txt
2026-07-22 09:50:46,494 WARNING: GET /robots.txt -> 404
2026-07-22 09:50:46,504 INFO: << 404 /robots.txt
2026-07-22 09:50:47,319 INFO: >> GET /
2026-07-22 09:50:47,321 DEBUG: Using selector: EpollSelector
2026-07-22 09:50:47,330 INFO: GET /
2026-07-22 09:50:47,333 WARNING: GET / -> 404
2026-07-22 09:50:47,342 INFO: << 404 /
2026-07-22 12:51:10,576 INFO: wsgi.py loading...
2026-07-22 12:51:10,577 INFO: Importing app.main...
2026-07-22 12:51:12,471 INFO: app.main imported successfully.
2026-07-22 12:51:12,471 INFO: Running DB init...
2026-07-22 12:51:12,557 INFO: All tables OK.
2026-07-22 12:51:12,703 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 12:51:12,706 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,708 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,711 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,713 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,716 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,718 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 12:51:12,727 INFO: Dip chart data seeded.
2026-07-22 12:51:12,727 INFO: DB init complete.
2026-07-22 12:51:12,727 INFO: wsgi.py ready.
2026-07-22 12:51:12,730 INFO: >> GET /
2026-07-22 12:51:12,732 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:12,732 INFO: >> GET /
2026-07-22 12:51:12,734 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:12,743 INFO: GET /
2026-07-22 12:51:12,744 INFO: GET /
2026-07-22 12:51:12,745 WARNING: GET / -> 404
2026-07-22 12:51:12,746 WARNING: GET / -> 404
2026-07-22 12:51:12,755 INFO: << 404 /
2026-07-22 12:51:12,755 INFO: << 404 /
2026-07-22 12:51:12,764 INFO: >> GET /console/
2026-07-22 12:51:12,766 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:12,766 INFO: >> GET /console/
2026-07-22 12:51:12,768 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:12,777 INFO: GET /console/
2026-07-22 12:51:12,780 WARNING: GET /console/ -> 404
2026-07-22 12:51:12,780 INFO: GET /console/
2026-07-22 12:51:12,784 WARNING: GET /console/ -> 404
2026-07-22 12:51:12,790 INFO: << 404 /console/
2026-07-22 12:51:12,793 INFO: << 404 /console/
2026-07-22 12:51:13,763 INFO: >> GET /server
2026-07-22 12:51:13,763 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:13,763 INFO: GET /server
2026-07-22 12:51:13,765 WARNING: GET /server -> 404
2026-07-22 12:51:13,767 INFO: >> GET /server
2026-07-22 12:51:13,768 INFO: << 404 /server
2026-07-22 12:51:13,768 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:13,778 INFO: GET /server
2026-07-22 12:51:13,782 WARNING: GET /server -> 404
2026-07-22 12:51:13,791 INFO: << 404 /server
2026-07-22 12:51:14,764 INFO: >> GET /server-status
2026-07-22 12:51:14,764 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:14,764 INFO: >> GET /server-status
2026-07-22 12:51:14,764 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:14,764 INFO: GET /server-status
2026-07-22 12:51:14,765 INFO: GET /server-status
2026-07-22 12:51:14,766 WARNING: GET /server-status -> 404
2026-07-22 12:51:14,766 WARNING: GET /server-status -> 404
2026-07-22 12:51:14,768 INFO: << 404 /server-status
2026-07-22 12:51:14,768 INFO: << 404 /server-status
2026-07-22 12:51:16,767 INFO: >> GET /about
2026-07-22 12:51:16,768 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:16,769 INFO: >> GET /about
2026-07-22 12:51:16,770 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:16,779 INFO: GET /about
2026-07-22 12:51:16,782 INFO: GET /about
2026-07-22 12:51:16,782 WARNING: GET /about -> 404
2026-07-22 12:51:16,784 WARNING: GET /about -> 404
2026-07-22 12:51:16,791 INFO: << 404 /about
2026-07-22 12:51:16,794 INFO: << 404 /about
2026-07-22 12:51:17,765 INFO: >> GET /login.action
2026-07-22 12:51:17,765 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:17,766 INFO: GET /login.action
2026-07-22 12:51:17,766 INFO: >> GET /login.action
2026-07-22 12:51:17,766 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:17,766 INFO: GET /login.action
2026-07-22 12:51:17,767 WARNING: GET /login.action -> 404
2026-07-22 12:51:17,768 WARNING: GET /login.action -> 404
2026-07-22 12:51:17,770 INFO: << 404 /login.action
2026-07-22 12:51:17,791 INFO: << 404 /login.action
2026-07-22 12:51:18,768 INFO: >> GET /
2026-07-22 12:51:18,768 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,768 INFO: >> GET /
2026-07-22 12:51:18,769 INFO: GET /
2026-07-22 12:51:18,769 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,770 WARNING: GET / -> 404
2026-07-22 12:51:18,779 INFO: GET /
2026-07-22 12:51:18,782 WARNING: GET / -> 404
2026-07-22 12:51:18,793 INFO: << 404 /
2026-07-22 12:51:18,804 INFO: >> GET /___proxy_subdomain_whm/login
2026-07-22 12:51:18,805 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,814 INFO: << 404 /
2026-07-22 12:51:18,815 INFO: GET /___proxy_subdomain_whm/login
2026-07-22 12:51:18,818 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-07-22 12:51:18,822 INFO: >> GET /___proxy_subdomain_whm/login
2026-07-22 12:51:18,822 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,823 INFO: GET /___proxy_subdomain_whm/login
2026-07-22 12:51:18,824 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-07-22 12:51:18,827 INFO: << 404 /___proxy_subdomain_whm/login
2026-07-22 12:51:18,837 INFO: >> GET /___proxy_subdomain_cpanel
2026-07-22 12:51:18,838 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,838 INFO: GET /___proxy_subdomain_cpanel
2026-07-22 12:51:18,839 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-07-22 12:51:18,848 INFO: << 404 /___proxy_subdomain_whm/login
2026-07-22 12:51:18,856 INFO: >> GET /___proxy_subdomain_cpanel
2026-07-22 12:51:18,856 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,857 INFO: GET /___proxy_subdomain_cpanel
2026-07-22 12:51:18,858 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-07-22 12:51:18,861 INFO: << 404 /___proxy_subdomain_cpanel
2026-07-22 12:51:18,864 INFO: << 404 /___proxy_subdomain_cpanel
2026-07-22 12:51:18,870 INFO: >> GET /v2/_catalog
2026-07-22 12:51:18,870 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,871 INFO: GET /v2/_catalog
2026-07-22 12:51:18,871 INFO: >> GET /v2/_catalog
2026-07-22 12:51:18,871 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:18,871 INFO: GET /v2/_catalog
2026-07-22 12:51:18,873 WARNING: GET /v2/_catalog -> 404
2026-07-22 12:51:18,875 WARNING: GET /v2/_catalog -> 404
2026-07-22 12:51:18,875 INFO: << 404 /v2/_catalog
2026-07-22 12:51:18,894 INFO: << 404 /v2/_catalog
2026-07-22 12:51:19,874 INFO: >> GET /.DS_Store
2026-07-22 12:51:19,876 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:19,886 INFO: GET /.DS_Store
2026-07-22 12:51:19,889 WARNING: GET /.DS_Store -> 404
2026-07-22 12:51:19,920 INFO: << 404 /.DS_Store
2026-07-22 12:51:20,189 INFO: >> GET /.DS_Store
2026-07-22 12:51:20,191 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:20,201 INFO: GET /.DS_Store
2026-07-22 12:51:20,204 WARNING: GET /.DS_Store -> 404
2026-07-22 12:51:20,233 INFO: << 404 /.DS_Store
2026-07-22 12:51:22,887 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:22,889 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:22,891 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:22,892 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:22,900 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:22,903 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-07-22 12:51:22,904 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:22,907 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-07-22 12:51:22,933 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:22,936 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-07-22 12:51:25,875 INFO: >> POST /graphql
2026-07-22 12:51:25,875 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,876 INFO: POST /graphql
2026-07-22 12:51:25,877 WARNING: POST /graphql -> 404
2026-07-22 12:51:25,879 INFO: >> POST /graphql
2026-07-22 12:51:25,880 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,880 INFO: << 404 /graphql
2026-07-22 12:51:25,890 INFO: >> POST /api
2026-07-22 12:51:25,890 INFO: POST /graphql
2026-07-22 12:51:25,891 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,893 WARNING: POST /graphql -> 404
2026-07-22 12:51:25,901 INFO: POST /api
2026-07-22 12:51:25,904 WARNING: POST /api -> 404
2026-07-22 12:51:25,923 INFO: << 404 /graphql
2026-07-22 12:51:25,931 INFO: >> POST /api
2026-07-22 12:51:25,931 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,932 INFO: POST /api
2026-07-22 12:51:25,933 WARNING: POST /api -> 404
2026-07-22 12:51:25,934 INFO: << 404 /api
2026-07-22 12:51:25,936 INFO: << 404 /api
2026-07-22 12:51:25,944 INFO: >> POST /api/graphql
2026-07-22 12:51:25,944 INFO: >> POST /api/graphql
2026-07-22 12:51:25,944 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,945 INFO: POST /api/graphql
2026-07-22 12:51:25,945 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,946 WARNING: POST /api/graphql -> 404
2026-07-22 12:51:25,949 INFO: << 404 /api/graphql
2026-07-22 12:51:25,955 INFO: POST /api/graphql
2026-07-22 12:51:25,957 INFO: >> POST /graphql/api
2026-07-22 12:51:25,957 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,958 INFO: POST /graphql/api
2026-07-22 12:51:25,958 WARNING: POST /api/graphql -> 404
2026-07-22 12:51:25,959 WARNING: POST /graphql/api -> 404
2026-07-22 12:51:25,962 INFO: << 404 /graphql/api
2026-07-22 12:51:25,970 INFO: >> POST /api/gql
2026-07-22 12:51:25,970 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:25,971 INFO: POST /api/gql
2026-07-22 12:51:25,972 WARNING: POST /api/gql -> 404
2026-07-22 12:51:25,975 INFO: << 404 /api/gql
2026-07-22 12:51:25,987 INFO: << 404 /api/graphql
2026-07-22 12:51:25,997 INFO: >> POST /graphql/api
2026-07-22 12:51:25,999 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:26,009 INFO: POST /graphql/api
2026-07-22 12:51:26,012 WARNING: POST /graphql/api -> 404
2026-07-22 12:51:26,055 INFO: << 404 /graphql/api
2026-07-22 12:51:26,075 INFO: >> POST /api/gql
2026-07-22 12:51:26,076 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:26,086 INFO: POST /api/gql
2026-07-22 12:51:26,089 WARNING: POST /api/gql -> 404
2026-07-22 12:51:26,118 INFO: << 404 /api/gql
2026-07-22 12:51:26,874 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:26,875 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:26,875 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:26,876 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:26,876 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-07-22 12:51:26,876 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:26,877 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:26,878 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-07-22 12:51:26,879 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:26,881 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-07-22 12:51:28,870 INFO: >> GET /config.json
2026-07-22 12:51:28,872 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:28,895 INFO: GET /config.json
2026-07-22 12:51:28,898 WARNING: GET /config.json -> 404
2026-07-22 12:51:28,905 INFO: >> GET /config.json
2026-07-22 12:51:28,907 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:28,989 INFO: GET /config.json
2026-07-22 12:51:29,013 WARNING: GET /config.json -> 404
2026-07-22 12:51:29,109 INFO: << 404 /config.json
2026-07-22 12:51:29,110 INFO: << 404 /config.json
2026-07-22 12:51:29,873 INFO: >> GET /telescope/requests
2026-07-22 12:51:29,873 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:29,874 INFO: GET /telescope/requests
2026-07-22 12:51:29,875 WARNING: GET /telescope/requests -> 404
2026-07-22 12:51:29,879 INFO: << 404 /telescope/requests
2026-07-22 12:51:29,878 INFO: >> GET /telescope/requests
2026-07-22 12:51:29,880 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:29,891 INFO: GET /telescope/requests
2026-07-22 12:51:29,894 WARNING: GET /telescope/requests -> 404
2026-07-22 12:51:29,924 INFO: << 404 /telescope/requests
2026-07-22 12:51:30,120 INFO: >> GET /version
2026-07-22 12:51:30,121 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:30,122 INFO: >> GET /version
2026-07-22 12:51:30,123 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:30,131 INFO: GET /version
2026-07-22 12:51:30,133 INFO: GET /version
2026-07-22 12:51:30,134 WARNING: GET /version -> 404
2026-07-22 12:51:30,136 WARNING: GET /version -> 404
2026-07-22 12:51:30,164 INFO: << 404 /version
2026-07-22 12:51:30,164 INFO: << 404 /version
2026-07-22 12:51:31,118 INFO: >> GET /info.php
2026-07-22 12:51:31,119 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:31,119 INFO: GET /info.php
2026-07-22 12:51:31,121 WARNING: GET /info.php -> 404
2026-07-22 12:51:31,121 INFO: >> GET /info.php
2026-07-22 12:51:31,123 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:31,123 INFO: << 404 /info.php
2026-07-22 12:51:31,132 INFO: GET /info.php
2026-07-22 12:51:31,135 WARNING: GET /info.php -> 404
2026-07-22 12:51:31,165 INFO: << 404 /info.php
2026-07-22 12:51:32,118 INFO: >> GET /actuator/env
2026-07-22 12:51:32,119 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:32,119 INFO: GET /actuator/env
2026-07-22 12:51:32,120 WARNING: GET /actuator/env -> 404
2026-07-22 12:51:32,124 INFO: << 404 /actuator/env
2026-07-22 12:51:32,214 INFO: >> GET /actuator/env
2026-07-22 12:51:32,215 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:32,225 INFO: GET /actuator/env
2026-07-22 12:51:32,228 WARNING: GET /actuator/env -> 404
2026-07-22 12:51:32,258 INFO: << 404 /actuator/env
2026-07-22 12:51:34,124 INFO: >> GET /trace.axd
2026-07-22 12:51:34,125 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:34,138 INFO: GET /trace.axd
2026-07-22 12:51:34,141 WARNING: GET /trace.axd -> 404
2026-07-22 12:51:34,173 INFO: << 404 /trace.axd
2026-07-22 12:51:34,989 INFO: >> GET /trace.axd
2026-07-22 12:51:34,990 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:35,002 INFO: GET /trace.axd
2026-07-22 12:51:35,006 WARNING: GET /trace.axd -> 404
2026-07-22 12:51:35,089 INFO: << 404 /trace.axd
2026-07-22 12:51:35,096 INFO: >> GET /@vite/env
2026-07-22 12:51:35,096 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:35,097 INFO: GET /@vite/env
2026-07-22 12:51:35,097 INFO: >> GET /@vite/env
2026-07-22 12:51:35,098 WARNING: GET /@vite/env -> 404
2026-07-22 12:51:35,098 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:35,101 INFO: << 404 /@vite/env
2026-07-22 12:51:35,108 INFO: GET /@vite/env
2026-07-22 12:51:35,111 WARNING: GET /@vite/env -> 404
2026-07-22 12:51:35,180 INFO: << 404 /@vite/env
2026-07-22 12:51:35,191 INFO: >> GET /.vscode/sftp.json
2026-07-22 12:51:35,193 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:35,203 INFO: GET /.vscode/sftp.json
2026-07-22 12:51:35,207 WARNING: GET /.vscode/sftp.json -> 404
2026-07-22 12:51:35,236 INFO: << 404 /.vscode/sftp.json
2026-07-22 12:51:36,099 INFO: >> GET /.vscode/sftp.json
2026-07-22 12:51:36,100 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:36,111 INFO: GET /.vscode/sftp.json
2026-07-22 12:51:36,114 WARNING: GET /.vscode/sftp.json -> 404
2026-07-22 12:51:36,147 INFO: << 404 /.vscode/sftp.json
2026-07-22 12:51:36,189 INFO: >> OPTIONS /
2026-07-22 12:51:36,189 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:36,189 INFO: OPTIONS /
2026-07-22 12:51:36,190 WARNING: OPTIONS / -> 404
2026-07-22 12:51:36,191 INFO: << 404 /
2026-07-22 12:51:37,098 INFO: >> OPTIONS /
2026-07-22 12:51:37,100 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:37,110 INFO: OPTIONS /
2026-07-22 12:51:37,113 WARNING: OPTIONS / -> 404
2026-07-22 12:51:37,113 INFO: << 404 /
2026-07-22 12:51:37,192 INFO: >> GET /
2026-07-22 12:51:37,193 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:37,203 INFO: GET /
2026-07-22 12:51:37,205 WARNING: GET / -> 404
2026-07-22 12:51:37,234 INFO: << 404 /
2026-07-22 12:51:38,101 INFO: >> GET /
2026-07-22 12:51:38,103 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:38,113 INFO: GET /
2026-07-22 12:51:38,116 WARNING: GET / -> 404
2026-07-22 12:51:38,144 INFO: << 404 /
2026-07-22 12:51:38,190 INFO: >> GET /debug/default/view
2026-07-22 12:51:38,191 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:38,191 INFO: GET /debug/default/view
2026-07-22 12:51:38,192 WARNING: GET /debug/default/view -> 404
2026-07-22 12:51:38,195 INFO: << 404 /debug/default/view
2026-07-22 12:51:39,102 INFO: >> GET /debug/default/view
2026-07-22 12:51:39,103 DEBUG: Using selector: EpollSelector
2026-07-22 12:51:39,113 INFO: GET /debug/default/view
2026-07-22 12:51:39,116 WARNING: GET /debug/default/view -> 404
2026-07-22 12:51:39,148 INFO: << 404 /debug/default/view
2026-07-22 14:54:47,403 INFO: wsgi.py loading...
2026-07-22 14:54:47,403 INFO: Importing app.main...
2026-07-22 14:54:50,236 INFO: app.main imported successfully.
2026-07-22 14:54:50,236 INFO: Running DB init...
2026-07-22 14:54:50,301 INFO: All tables OK.
2026-07-22 14:54:50,434 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 14:54:50,437 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,439 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,442 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,445 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,447 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,450 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 14:54:50,458 INFO: Dip chart data seeded.
2026-07-22 14:54:50,458 INFO: DB init complete.
2026-07-22 14:54:50,459 INFO: wsgi.py ready.
2026-07-22 14:54:50,462 INFO: >> GET /
2026-07-22 14:54:50,463 DEBUG: Using selector: EpollSelector
2026-07-22 14:54:50,464 INFO: >> GET /
2026-07-22 14:54:50,465 DEBUG: Using selector: EpollSelector
2026-07-22 14:54:50,474 INFO: GET /
2026-07-22 14:54:50,475 INFO: GET /
2026-07-22 14:54:50,476 WARNING: GET / -> 404
2026-07-22 14:54:50,478 WARNING: GET / -> 404
2026-07-22 14:54:50,486 INFO: << 404 /
2026-07-22 14:54:50,487 INFO: << 404 /
2026-07-22 22:32:26,032 INFO: wsgi.py loading...
2026-07-22 22:32:26,033 INFO: Importing app.main...
2026-07-22 22:32:28,874 INFO: app.main imported successfully.
2026-07-22 22:32:28,875 INFO: Running DB init...
2026-07-22 22:32:28,940 INFO: All tables OK.
2026-07-22 22:32:29,080 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 22:32:29,082 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,085 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,088 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,090 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,100 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,102 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 22:32:29,112 INFO: Dip chart data seeded.
2026-07-22 22:32:29,112 INFO: DB init complete.
2026-07-22 22:32:29,112 INFO: wsgi.py ready.
2026-07-22 22:32:29,115 INFO: >> POST /
2026-07-22 22:32:29,117 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,118 INFO: >> HEAD /
2026-07-22 22:32:29,119 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,120 INFO: >> GET /
2026-07-22 22:32:29,122 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,128 INFO: POST /
2026-07-22 22:32:29,129 INFO: HEAD /
2026-07-22 22:32:29,131 WARNING: POST / -> 404
2026-07-22 22:32:29,132 WARNING: HEAD / -> 404
2026-07-22 22:32:29,132 INFO: GET /
2026-07-22 22:32:29,132 INFO: << 404 /
2026-07-22 22:32:29,134 WARNING: GET / -> 404
2026-07-22 22:32:29,140 INFO: << 404 /
2026-07-22 22:32:29,143 INFO: << 404 /
2026-07-22 22:32:29,338 INFO: >> GET /storage/logs/laravel.log
2026-07-22 22:32:29,338 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,339 INFO: GET /storage/logs/laravel.log
2026-07-22 22:32:29,340 WARNING: GET /storage/logs/laravel.log -> 404
2026-07-22 22:32:29,350 INFO: << 404 /storage/logs/laravel.log
2026-07-22 22:32:29,556 INFO: >> GET /database_backup.sql
2026-07-22 22:32:29,556 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,556 INFO: GET /database_backup.sql
2026-07-22 22:32:29,558 WARNING: GET /database_backup.sql -> 404
2026-07-22 22:32:29,561 INFO: << 404 /database_backup.sql
2026-07-22 22:32:29,767 INFO: >> GET /.ssh/id_rsa
2026-07-22 22:32:29,768 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,768 INFO: GET /.ssh/id_rsa
2026-07-22 22:32:29,769 WARNING: GET /.ssh/id_rsa -> 404
2026-07-22 22:32:29,772 INFO: << 404 /.ssh/id_rsa
2026-07-22 22:32:29,981 INFO: >> GET /config.php
2026-07-22 22:32:29,981 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:29,981 INFO: GET /config.php
2026-07-22 22:32:29,983 WARNING: GET /config.php -> 404
2026-07-22 22:32:29,985 INFO: << 404 /config.php
2026-07-22 22:32:30,191 INFO: >> GET /wp-config.php
2026-07-22 22:32:30,192 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,192 INFO: GET /wp-config.php
2026-07-22 22:32:30,193 WARNING: GET /wp-config.php -> 404
2026-07-22 22:32:30,196 INFO: << 404 /wp-config.php
2026-07-22 22:32:30,343 INFO: >> GET /backup.zip
2026-07-22 22:32:30,343 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,344 INFO: GET /backup.zip
2026-07-22 22:32:30,345 WARNING: GET /backup.zip -> 404
2026-07-22 22:32:30,348 INFO: << 404 /backup.zip
2026-07-22 22:32:30,350 INFO: >> GET /actuator/heapdump
2026-07-22 22:32:30,351 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,361 INFO: GET /actuator/heapdump
2026-07-22 22:32:30,364 WARNING: GET /actuator/heapdump -> 404
2026-07-22 22:32:30,373 INFO: << 404 /actuator/heapdump
2026-07-22 22:32:30,557 INFO: >> GET /backup.tar.gz
2026-07-22 22:32:30,558 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,558 INFO: GET /backup.tar.gz
2026-07-22 22:32:30,560 WARNING: GET /backup.tar.gz -> 404
2026-07-22 22:32:30,563 INFO: << 404 /backup.tar.gz
2026-07-22 22:32:30,588 INFO: >> GET /.ssh/id_ed25519
2026-07-22 22:32:30,589 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,589 INFO: GET /.ssh/id_ed25519
2026-07-22 22:32:30,590 WARNING: GET /.ssh/id_ed25519 -> 404
2026-07-22 22:32:30,593 INFO: << 404 /.ssh/id_ed25519
2026-07-22 22:32:30,607 INFO: >> GET /.ssh/id_ecdsa
2026-07-22 22:32:30,607 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,607 INFO: GET /.ssh/id_ecdsa
2026-07-22 22:32:30,608 WARNING: GET /.ssh/id_ecdsa -> 404
2026-07-22 22:32:30,611 INFO: << 404 /.ssh/id_ecdsa
2026-07-22 22:32:30,768 INFO: >> GET /backup.sql
2026-07-22 22:32:30,768 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,768 INFO: GET /backup.sql
2026-07-22 22:32:30,770 WARNING: GET /backup.sql -> 404
2026-07-22 22:32:30,773 INFO: << 404 /backup.sql
2026-07-22 22:32:30,799 INFO: >> GET /dump.sql
2026-07-22 22:32:30,799 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,799 INFO: GET /dump.sql
2026-07-22 22:32:30,801 WARNING: GET /dump.sql -> 404
2026-07-22 22:32:30,804 INFO: << 404 /dump.sql
2026-07-22 22:32:30,818 INFO: >> GET /database.sql
2026-07-22 22:32:30,818 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,818 INFO: GET /database.sql
2026-07-22 22:32:30,820 WARNING: GET /database.sql -> 404
2026-07-22 22:32:30,822 INFO: << 404 /database.sql
2026-07-22 22:32:30,980 INFO: >> GET /user_secrets.yml
2026-07-22 22:32:30,980 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:30,981 INFO: GET /user_secrets.yml
2026-07-22 22:32:30,982 WARNING: GET /user_secrets.yml -> 404
2026-07-22 22:32:30,985 INFO: << 404 /user_secrets.yml
2026-07-22 22:32:31,009 INFO: >> GET /_vti_pvt/service.pwd
2026-07-22 22:32:31,009 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,010 INFO: GET /_vti_pvt/service.pwd
2026-07-22 22:32:31,011 WARNING: GET /_vti_pvt/service.pwd -> 404
2026-07-22 22:32:31,014 INFO: << 404 /_vti_pvt/service.pwd
2026-07-22 22:32:31,028 INFO: >> GET /wp-admin/setup-config.php
2026-07-22 22:32:31,028 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,029 INFO: GET /wp-admin/setup-config.php
2026-07-22 22:32:31,030 WARNING: GET /wp-admin/setup-config.php -> 404
2026-07-22 22:32:31,033 INFO: << 404 /wp-admin/setup-config.php
2026-07-22 22:32:31,226 INFO: >> GET /.env.production
2026-07-22 22:32:31,226 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,227 INFO: GET /.env.production
2026-07-22 22:32:31,228 WARNING: GET /.env.production -> 404
2026-07-22 22:32:31,231 INFO: << 404 /.env.production
2026-07-22 22:32:31,395 INFO: >> GET /etc/ssl/private/server.key
2026-07-22 22:32:31,395 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,395 INFO: GET /etc/ssl/private/server.key
2026-07-22 22:32:31,397 WARNING: GET /etc/ssl/private/server.key -> 404
2026-07-22 22:32:31,400 INFO: << 404 /etc/ssl/private/server.key
2026-07-22 22:32:31,444 INFO: >> GET /api/.env
2026-07-22 22:32:31,445 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,445 INFO: GET /api/.env
2026-07-22 22:32:31,446 INFO: >> GET /phpinfo.php
2026-07-22 22:32:31,446 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,446 WARNING: GET /api/.env -> 404
2026-07-22 22:32:31,447 INFO: GET /phpinfo.php
2026-07-22 22:32:31,448 WARNING: GET /phpinfo.php -> 404
2026-07-22 22:32:31,449 INFO: << 404 /api/.env
2026-07-22 22:32:31,450 INFO: << 404 /phpinfo.php
2026-07-22 22:32:31,606 INFO: >> GET /docker-compose.yml
2026-07-22 22:32:31,606 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,606 INFO: GET /docker-compose.yml
2026-07-22 22:32:31,608 WARNING: GET /docker-compose.yml -> 404
2026-07-22 22:32:31,612 INFO: << 404 /docker-compose.yml
2026-07-22 22:32:31,817 INFO: >> GET /secrets.json
2026-07-22 22:32:31,817 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:31,818 INFO: GET /secrets.json
2026-07-22 22:32:31,819 WARNING: GET /secrets.json -> 404
2026-07-22 22:32:31,823 INFO: << 404 /secrets.json
2026-07-22 22:32:32,027 INFO: >> GET /server.key
2026-07-22 22:32:32,027 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,028 INFO: GET /server.key
2026-07-22 22:32:32,029 WARNING: GET /server.key -> 404
2026-07-22 22:32:32,031 INFO: << 404 /server.key
2026-07-22 22:32:32,077 INFO: >> GET /config/production.json
2026-07-22 22:32:32,077 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,077 INFO: GET /config/production.json
2026-07-22 22:32:32,078 WARNING: GET /config/production.json -> 404
2026-07-22 22:32:32,081 INFO: << 404 /config/production.json
2026-07-22 22:32:32,116 INFO: >> GET /.npmrc
2026-07-22 22:32:32,116 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,117 INFO: GET /.npmrc
2026-07-22 22:32:32,118 WARNING: GET /.npmrc -> 404
2026-07-22 22:32:32,121 INFO: << 404 /.npmrc
2026-07-22 22:32:32,236 INFO: >> GET /.bash_history
2026-07-22 22:32:32,236 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,237 INFO: GET /.bash_history
2026-07-22 22:32:32,238 WARNING: GET /.bash_history -> 404
2026-07-22 22:32:32,240 INFO: << 404 /.bash_history
2026-07-22 22:32:32,287 INFO: >> GET /.vscode/sftp.json
2026-07-22 22:32:32,287 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,288 INFO: GET /.vscode/sftp.json
2026-07-22 22:32:32,289 WARNING: GET /.vscode/sftp.json -> 404
2026-07-22 22:32:32,291 INFO: << 404 /.vscode/sftp.json
2026-07-22 22:32:32,327 INFO: >> GET /config.xml
2026-07-22 22:32:32,327 DEBUG: Using selector: EpollSelector
2026-07-22 22:32:32,327 INFO: GET /config.xml
2026-07-22 22:32:32,329 WARNING: GET /config.xml -> 404
2026-07-22 22:32:32,331 INFO: << 404 /config.xml
2026-07-22 22:34:28,041 INFO: >> HEAD /
2026-07-22 22:34:28,042 DEBUG: Using selector: EpollSelector
2026-07-22 22:34:28,052 INFO: HEAD /
2026-07-22 22:34:28,055 WARNING: HEAD / -> 404
2026-07-22 22:34:28,056 INFO: << 404 /
2026-07-22 22:35:10,521 INFO: >> GET /
2026-07-22 22:35:10,522 DEBUG: Using selector: EpollSelector
2026-07-22 22:35:10,532 INFO: GET /
2026-07-22 22:35:10,534 WARNING: GET / -> 404
2026-07-22 22:35:10,563 INFO: << 404 /
2026-07-22 22:35:11,607 INFO: >> GET /
2026-07-22 22:35:11,608 DEBUG: Using selector: EpollSelector
2026-07-22 22:35:11,618 INFO: GET /
2026-07-22 22:35:11,621 WARNING: GET / -> 404
2026-07-22 22:35:11,651 INFO: << 404 /
2026-07-22 22:35:41,076 INFO: >> GET /
2026-07-22 22:35:41,076 DEBUG: Using selector: EpollSelector
2026-07-22 22:35:41,076 INFO: GET /
2026-07-22 22:35:41,078 WARNING: GET / -> 404
2026-07-22 22:35:41,101 INFO: << 404 /
2026-07-22 22:35:41,954 INFO: >> GET /favicon.ico
2026-07-22 22:35:41,954 DEBUG: Using selector: EpollSelector
2026-07-22 22:35:41,955 INFO: GET /favicon.ico
2026-07-22 22:35:41,956 WARNING: GET /favicon.ico -> 404
2026-07-22 22:35:41,977 INFO: << 404 /favicon.ico
2026-07-22 22:36:38,932 INFO: >> GET /
2026-07-22 22:36:38,933 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:38,943 INFO: GET /
2026-07-22 22:36:38,946 WARNING: GET / -> 404
2026-07-22 22:36:38,976 INFO: << 404 /
2026-07-22 22:36:39,629 INFO: >> GET /favicon.ico
2026-07-22 22:36:39,630 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:39,641 INFO: GET /favicon.ico
2026-07-22 22:36:39,644 WARNING: GET /favicon.ico -> 404
2026-07-22 22:36:39,674 INFO: << 404 /favicon.ico
2026-07-22 22:36:58,907 INFO: >> GET /
2026-07-22 22:36:58,908 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:58,909 INFO: >> GET /config.js
2026-07-22 22:36:58,910 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:58,918 INFO: GET /
2026-07-22 22:36:58,920 INFO: GET /config.js
2026-07-22 22:36:58,921 WARNING: GET / -> 404
2026-07-22 22:36:58,923 WARNING: GET /config.js -> 404
2026-07-22 22:36:58,950 INFO: << 404 /
2026-07-22 22:36:58,952 INFO: << 404 /config.js
2026-07-22 22:36:59,333 INFO: >> GET /js/config.js
2026-07-22 22:36:59,333 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:59,334 INFO: GET /js/config.js
2026-07-22 22:36:59,335 WARNING: GET /js/config.js -> 404
2026-07-22 22:36:59,338 INFO: << 404 /js/config.js
2026-07-22 22:36:59,661 INFO: >> GET /.env.local
2026-07-22 22:36:59,661 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:59,662 INFO: GET /.env.local
2026-07-22 22:36:59,663 WARNING: GET /.env.local -> 404
2026-07-22 22:36:59,665 INFO: >> GET /.env.production
2026-07-22 22:36:59,665 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:59,665 INFO: GET /.env.production
2026-07-22 22:36:59,666 INFO: << 404 /.env.local
2026-07-22 22:36:59,667 WARNING: GET /.env.production -> 404
2026-07-22 22:36:59,669 INFO: << 404 /.env.production
2026-07-22 22:36:59,953 INFO: >> GET /.env.example
2026-07-22 22:36:59,953 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:59,953 INFO: GET /.env.example
2026-07-22 22:36:59,955 WARNING: GET /.env.example -> 404
2026-07-22 22:36:59,957 INFO: << 404 /.env.example
2026-07-22 22:36:59,967 INFO: >> GET /api/config
2026-07-22 22:36:59,967 DEBUG: Using selector: EpollSelector
2026-07-22 22:36:59,967 INFO: GET /api/config
2026-07-22 22:36:59,969 WARNING: GET /api/config -> 404
2026-07-22 22:36:59,972 INFO: << 404 /api/config
2026-07-22 22:37:00,247 INFO: >> GET /config.json
2026-07-22 22:37:00,247 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:00,248 INFO: GET /config.json
2026-07-22 22:37:00,248 INFO: >> GET /api/env
2026-07-22 22:37:00,248 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:00,248 INFO: GET /api/env
2026-07-22 22:37:00,249 WARNING: GET /config.json -> 404
2026-07-22 22:37:00,250 WARNING: GET /api/env -> 404
2026-07-22 22:37:00,252 INFO: << 404 /config.json
2026-07-22 22:37:00,253 INFO: << 404 /api/env
2026-07-22 22:37:00,533 INFO: >> GET /js/env.js
2026-07-22 22:37:00,534 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:00,534 INFO: GET /js/env.js
2026-07-22 22:37:00,536 WARNING: GET /js/env.js -> 404
2026-07-22 22:37:00,538 INFO: << 404 /js/env.js
2026-07-22 22:37:00,540 INFO: >> GET /settings.js
2026-07-22 22:37:00,540 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:00,540 INFO: GET /settings.js
2026-07-22 22:37:00,541 WARNING: GET /settings.js -> 404
2026-07-22 22:37:00,544 INFO: << 404 /settings.js
2026-07-22 22:37:21,992 INFO: >> GET /js/env.js
2026-07-22 22:37:21,992 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:21,993 INFO: GET /js/env.js
2026-07-22 22:37:21,994 WARNING: GET /js/env.js -> 404
2026-07-22 22:37:22,015 INFO: << 404 /js/env.js
2026-07-22 22:37:22,358 INFO: >> GET /config.js
2026-07-22 22:37:22,358 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:22,359 INFO: GET /config.js
2026-07-22 22:37:22,360 WARNING: GET /config.js -> 404
2026-07-22 22:37:22,363 INFO: << 404 /config.js
2026-07-22 22:37:22,706 INFO: >> GET /settings.js
2026-07-22 22:37:22,707 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:22,707 INFO: GET /settings.js
2026-07-22 22:37:22,709 WARNING: GET /settings.js -> 404
2026-07-22 22:37:22,712 INFO: << 404 /settings.js
2026-07-22 22:37:29,541 INFO: >> GET /
2026-07-22 22:37:29,541 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:29,542 INFO: GET /
2026-07-22 22:37:29,543 WARNING: GET / -> 404
2026-07-22 22:37:29,564 INFO: << 404 /
2026-07-22 22:37:29,756 INFO: >> GET /config.js
2026-07-22 22:37:29,757 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:29,757 INFO: GET /config.js
2026-07-22 22:37:29,758 WARNING: GET /config.js -> 404
2026-07-22 22:37:29,761 INFO: << 404 /config.js
2026-07-22 22:37:29,948 INFO: >> GET /js/config.js
2026-07-22 22:37:29,948 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:29,948 INFO: GET /js/config.js
2026-07-22 22:37:29,950 WARNING: GET /js/config.js -> 404
2026-07-22 22:37:29,952 INFO: << 404 /js/config.js
2026-07-22 22:37:30,344 INFO: >> GET /.env.local
2026-07-22 22:37:30,344 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,345 INFO: GET /.env.local
2026-07-22 22:37:30,346 WARNING: GET /.env.local -> 404
2026-07-22 22:37:30,349 INFO: << 404 /.env.local
2026-07-22 22:37:30,426 INFO: >> GET /.env.production
2026-07-22 22:37:30,428 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,438 INFO: GET /.env.production
2026-07-22 22:37:30,442 WARNING: GET /.env.production -> 404
2026-07-22 22:37:30,472 INFO: << 404 /.env.production
2026-07-22 22:37:30,527 INFO: >> GET /.env.example
2026-07-22 22:37:30,527 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,527 INFO: GET /.env.example
2026-07-22 22:37:30,529 WARNING: GET /.env.example -> 404
2026-07-22 22:37:30,532 INFO: << 404 /.env.example
2026-07-22 22:37:30,764 INFO: >> GET /api/config
2026-07-22 22:37:30,764 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,764 INFO: GET /api/config
2026-07-22 22:37:30,766 WARNING: GET /api/config -> 404
2026-07-22 22:37:30,768 INFO: >> GET /api/env
2026-07-22 22:37:30,768 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,768 INFO: << 404 /api/config
2026-07-22 22:37:30,769 INFO: GET /api/env
2026-07-22 22:37:30,771 WARNING: GET /api/env -> 404
2026-07-22 22:37:30,774 INFO: << 404 /api/env
2026-07-22 22:37:30,895 INFO: >> GET /config.json
2026-07-22 22:37:30,895 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,896 INFO: GET /config.json
2026-07-22 22:37:30,897 WARNING: GET /config.json -> 404
2026-07-22 22:37:30,900 INFO: << 404 /config.json
2026-07-22 22:37:30,961 INFO: >> GET /js/env.js
2026-07-22 22:37:30,961 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:30,962 INFO: GET /js/env.js
2026-07-22 22:37:30,963 WARNING: GET /js/env.js -> 404
2026-07-22 22:37:30,966 INFO: << 404 /js/env.js
2026-07-22 22:37:31,075 INFO: >> GET /settings.js
2026-07-22 22:37:31,075 DEBUG: Using selector: EpollSelector
2026-07-22 22:37:31,076 INFO: GET /settings.js
2026-07-22 22:37:31,077 WARNING: GET /settings.js -> 404
2026-07-22 22:37:31,080 INFO: << 404 /settings.js
2026-07-22 22:39:12,120 INFO: >> GET /
2026-07-22 22:39:12,122 DEBUG: Using selector: EpollSelector
2026-07-22 22:39:12,132 INFO: GET /
2026-07-22 22:39:12,134 WARNING: GET / -> 404
2026-07-22 22:39:12,163 INFO: << 404 /
2026-07-22 22:39:12,170 INFO: >> GET /
2026-07-22 22:39:12,172 DEBUG: Using selector: EpollSelector
2026-07-22 22:39:12,182 INFO: GET /
2026-07-22 22:39:12,184 WARNING: GET / -> 404
2026-07-22 22:39:12,213 INFO: << 404 /
2026-07-22 23:06:44,755 INFO: wsgi.py loading...
2026-07-22 23:06:44,755 INFO: Importing app.main...
2026-07-22 23:06:46,610 INFO: app.main imported successfully.
2026-07-22 23:06:46,610 INFO: Running DB init...
2026-07-22 23:06:46,707 INFO: All tables OK.
2026-07-22 23:06:46,923 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 23:06:46,926 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,929 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,932 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,935 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,939 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,942 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:06:46,949 INFO: Dip chart data seeded.
2026-07-22 23:06:46,949 INFO: DB init complete.
2026-07-22 23:06:46,949 INFO: wsgi.py ready.
2026-07-22 23:06:46,952 INFO: >> GET /
2026-07-22 23:06:46,954 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:46,964 INFO: GET /
2026-07-22 23:06:46,967 WARNING: GET / -> 404
2026-07-22 23:06:46,989 INFO: << 404 /
2026-07-22 23:06:47,876 INFO: >> GET /assets/js/telegram_redirect.js
2026-07-22 23:06:47,876 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:47,877 INFO: GET /assets/js/telegram_redirect.js
2026-07-22 23:06:47,878 WARNING: GET /assets/js/telegram_redirect.js -> 404
2026-07-22 23:06:47,882 INFO: << 404 /assets/js/telegram_redirect.js
2026-07-22 23:06:48,051 INFO: >> GET /setup/
2026-07-22 23:06:48,051 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:48,052 INFO: GET /setup/
2026-07-22 23:06:48,053 WARNING: GET /setup/ -> 404
2026-07-22 23:06:48,056 INFO: << 404 /setup/
2026-07-22 23:06:48,228 INFO: >> POST /_internal/api/setup.php
2026-07-22 23:06:48,234 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:48,236 INFO: POST /_internal/api/setup.php
2026-07-22 23:06:48,238 WARNING: POST /_internal/api/setup.php -> 404
2026-07-22 23:06:48,241 INFO: << 404 /_internal/api/setup.php
2026-07-22 23:06:48,406 INFO: >> POST /_internal/api/setup.php
2026-07-22 23:06:48,407 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:48,407 INFO: POST /_internal/api/setup.php
2026-07-22 23:06:48,409 WARNING: POST /_internal/api/setup.php -> 404
2026-07-22 23:06:48,412 INFO: << 404 /_internal/api/setup.php
2026-07-22 23:06:48,578 INFO: >> GET /api/user/
2026-07-22 23:06:48,578 DEBUG: Using selector: EpollSelector
2026-07-22 23:06:48,578 INFO: GET /api/user/
2026-07-22 23:06:48,580 WARNING: GET /api/user/ -> 404
2026-07-22 23:06:48,582 INFO: << 404 /api/user/
2026-07-22 23:18:53,759 INFO: wsgi.py loading...
2026-07-22 23:18:53,760 INFO: Importing app.main...
2026-07-22 23:18:55,550 INFO: app.main imported successfully.
2026-07-22 23:18:55,550 INFO: Running DB init...
2026-07-22 23:18:55,618 INFO: All tables OK.
2026-07-22 23:18:55,759 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 23:18:55,762 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,764 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,767 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,769 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,772 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,774 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:18:55,783 INFO: Dip chart data seeded.
2026-07-22 23:18:55,783 INFO: DB init complete.
2026-07-22 23:18:55,783 INFO: wsgi.py ready.
2026-07-22 23:18:55,786 INFO: >> GET /
2026-07-22 23:18:55,788 DEBUG: Using selector: EpollSelector
2026-07-22 23:18:55,789 INFO: >> GET /
2026-07-22 23:18:55,790 DEBUG: Using selector: EpollSelector
2026-07-22 23:18:55,798 INFO: GET /
2026-07-22 23:18:55,801 WARNING: GET / -> 404
2026-07-22 23:18:55,801 INFO: GET /
2026-07-22 23:18:55,804 WARNING: GET / -> 404
2026-07-22 23:18:55,810 INFO: << 404 /
2026-07-22 23:18:55,813 INFO: << 404 /
2026-07-22 23:26:45,241 INFO: >> GET /
2026-07-22 23:26:45,242 DEBUG: Using selector: EpollSelector
2026-07-22 23:26:45,252 INFO: GET /
2026-07-22 23:26:45,254 WARNING: GET / -> 404
2026-07-22 23:26:45,284 INFO: << 404 /
2026-07-22 23:33:45,814 INFO: wsgi.py loading...
2026-07-22 23:33:45,814 INFO: Importing app.main...
2026-07-22 23:33:47,518 INFO: app.main imported successfully.
2026-07-22 23:33:47,518 INFO: Running DB init...
2026-07-22 23:33:47,580 INFO: All tables OK.
2026-07-22 23:33:47,714 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 23:33:47,716 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,719 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,721 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,723 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,726 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,729 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:33:47,737 INFO: Dip chart data seeded.
2026-07-22 23:33:47,737 INFO: DB init complete.
2026-07-22 23:33:47,737 INFO: wsgi.py ready.
2026-07-22 23:33:47,741 INFO: >> GET /
2026-07-22 23:33:47,742 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:47,752 INFO: GET /
2026-07-22 23:33:47,754 WARNING: GET / -> 404
2026-07-22 23:33:47,763 INFO: << 404 /
2026-07-22 23:33:48,503 INFO: >> GET /assets/js/telegram_redirect.js
2026-07-22 23:33:48,503 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:48,503 INFO: GET /assets/js/telegram_redirect.js
2026-07-22 23:33:48,505 WARNING: GET /assets/js/telegram_redirect.js -> 404
2026-07-22 23:33:48,508 INFO: << 404 /assets/js/telegram_redirect.js
2026-07-22 23:33:48,701 INFO: >> GET /setup/
2026-07-22 23:33:48,702 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:48,702 INFO: GET /setup/
2026-07-22 23:33:48,704 WARNING: GET /setup/ -> 404
2026-07-22 23:33:48,707 INFO: << 404 /setup/
2026-07-22 23:33:48,900 INFO: >> POST /_internal/api/setup.php
2026-07-22 23:33:48,900 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:48,901 INFO: POST /_internal/api/setup.php
2026-07-22 23:33:48,903 WARNING: POST /_internal/api/setup.php -> 404
2026-07-22 23:33:48,905 INFO: << 404 /_internal/api/setup.php
2026-07-22 23:33:49,099 INFO: >> POST /_internal/api/setup.php
2026-07-22 23:33:49,099 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:49,100 INFO: POST /_internal/api/setup.php
2026-07-22 23:33:49,101 WARNING: POST /_internal/api/setup.php -> 404
2026-07-22 23:33:49,104 INFO: << 404 /_internal/api/setup.php
2026-07-22 23:33:49,298 INFO: >> GET /api/user/
2026-07-22 23:33:49,298 DEBUG: Using selector: EpollSelector
2026-07-22 23:33:49,299 INFO: GET /api/user/
2026-07-22 23:33:49,300 WARNING: GET /api/user/ -> 404
2026-07-22 23:33:49,303 INFO: << 404 /api/user/
2026-07-22 23:42:29,353 INFO: wsgi.py loading...
2026-07-22 23:42:29,354 INFO: Importing app.main...
2026-07-22 23:42:31,070 INFO: app.main imported successfully.
2026-07-22 23:42:31,071 INFO: Running DB init...
2026-07-22 23:42:31,134 INFO: All tables OK.
2026-07-22 23:42:31,264 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 23:42:31,267 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,269 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,271 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,274 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,276 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,278 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:42:31,287 INFO: Dip chart data seeded.
2026-07-22 23:42:31,287 INFO: DB init complete.
2026-07-22 23:42:31,287 INFO: wsgi.py ready.
2026-07-22 23:42:31,290 INFO: >> GET /robots.txt
2026-07-22 23:42:31,291 DEBUG: Using selector: EpollSelector
2026-07-22 23:42:31,301 INFO: GET /robots.txt
2026-07-22 23:42:31,303 WARNING: GET /robots.txt -> 404
2026-07-22 23:42:31,312 INFO: << 404 /robots.txt
2026-07-22 23:53:01,990 INFO: wsgi.py loading...
2026-07-22 23:53:01,991 INFO: Importing app.main...
2026-07-22 23:53:03,797 INFO: app.main imported successfully.
2026-07-22 23:53:03,797 INFO: Running DB init...
2026-07-22 23:53:03,860 INFO: All tables OK.
2026-07-22 23:53:03,997 INFO: Migration OK: allowances ENUM+DAILY
2026-07-22 23:53:04,000 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,003 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,006 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,008 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,011 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,014 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-22 23:53:04,022 INFO: Dip chart data seeded.
2026-07-22 23:53:04,022 INFO: DB init complete.
2026-07-22 23:53:04,022 INFO: wsgi.py ready.
2026-07-22 23:53:04,025 INFO: >> GET /
2026-07-22 23:53:04,027 DEBUG: Using selector: EpollSelector
2026-07-22 23:53:04,037 INFO: GET /
2026-07-22 23:53:04,039 WARNING: GET / -> 404
2026-07-22 23:53:04,049 INFO: << 404 /
2026-07-22 23:53:05,633 INFO: >> GET /
2026-07-22 23:53:05,634 DEBUG: Using selector: EpollSelector
2026-07-22 23:53:05,644 INFO: GET /
2026-07-22 23:53:05,646 WARNING: GET / -> 404
2026-07-22 23:53:05,655 INFO: << 404 /
2026-07-23 00:22:22,891 INFO: wsgi.py loading...
2026-07-23 00:22:22,891 INFO: Importing app.main...
2026-07-23 00:22:24,606 INFO: app.main imported successfully.
2026-07-23 00:22:24,606 INFO: Running DB init...
2026-07-23 00:22:24,667 INFO: All tables OK.
2026-07-23 00:22:24,801 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 00:22:24,804 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,806 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,809 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,811 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,814 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,817 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 00:22:24,825 INFO: Dip chart data seeded.
2026-07-23 00:22:24,825 INFO: DB init complete.
2026-07-23 00:22:24,825 INFO: wsgi.py ready.
2026-07-23 00:22:24,829 INFO: >> GET /
2026-07-23 00:22:24,830 DEBUG: Using selector: EpollSelector
2026-07-23 00:22:24,840 INFO: GET /
2026-07-23 00:22:24,842 WARNING: GET / -> 404
2026-07-23 00:22:24,851 INFO: << 404 /
2026-07-23 00:22:25,493 INFO: >> GET /
2026-07-23 00:22:25,493 DEBUG: Using selector: EpollSelector
2026-07-23 00:22:25,493 INFO: GET /
2026-07-23 00:22:25,494 WARNING: GET / -> 404
2026-07-23 00:22:25,497 INFO: << 404 /
2026-07-23 00:22:29,046 INFO: >> GET /
2026-07-23 00:22:29,047 DEBUG: Using selector: EpollSelector
2026-07-23 00:22:29,057 INFO: GET /
2026-07-23 00:22:29,059 WARNING: GET / -> 404
2026-07-23 00:22:29,068 INFO: << 404 /
2026-07-23 00:26:43,388 INFO: >> GET /
2026-07-23 00:26:43,390 DEBUG: Using selector: EpollSelector
2026-07-23 00:26:43,399 INFO: GET /
2026-07-23 00:26:43,402 WARNING: GET / -> 404
2026-07-23 00:26:43,431 INFO: << 404 /
2026-07-23 00:26:43,852 INFO: >> GET /
2026-07-23 00:26:43,853 DEBUG: Using selector: EpollSelector
2026-07-23 00:26:43,863 INFO: GET /
2026-07-23 00:26:43,865 WARNING: GET / -> 404
2026-07-23 00:26:43,903 INFO: << 404 /
2026-07-23 03:11:29,722 INFO: wsgi.py loading...
2026-07-23 03:11:29,722 INFO: Importing app.main...
2026-07-23 03:11:31,639 INFO: app.main imported successfully.
2026-07-23 03:11:31,639 INFO: Running DB init...
2026-07-23 03:11:31,706 INFO: All tables OK.
2026-07-23 03:11:31,843 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 03:11:31,846 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,848 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,851 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,853 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,856 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,858 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 03:11:31,866 INFO: Dip chart data seeded.
2026-07-23 03:11:31,867 INFO: DB init complete.
2026-07-23 03:11:31,867 INFO: wsgi.py ready.
2026-07-23 03:11:31,870 INFO: >> GET /_rNd9xZ7kL3
2026-07-23 03:11:31,872 DEBUG: Using selector: EpollSelector
2026-07-23 03:11:31,873 INFO: >> GET /_rNd9xZ7kL3
2026-07-23 03:11:31,874 DEBUG: Using selector: EpollSelector
2026-07-23 03:11:31,883 INFO: GET /_rNd9xZ7kL3
2026-07-23 03:11:31,886 INFO: GET /_rNd9xZ7kL3
2026-07-23 03:11:31,886 WARNING: GET /_rNd9xZ7kL3 -> 404
2026-07-23 03:11:31,889 WARNING: GET /_rNd9xZ7kL3 -> 404
2026-07-23 03:11:31,899 INFO: << 404 /_rNd9xZ7kL3
2026-07-23 03:11:31,896 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 474, in _read_ok_packet
    raise err.OperationalError(
pymysql.err.OperationalError: (2014, 'Command Out of Sync')
2026-07-23 03:11:31,904 INFO: << 404 /_rNd9xZ7kL3
2026-07-23 03:11:34,834 INFO: >> GET /_rNd9xZ7kL3
2026-07-23 03:11:34,834 DEBUG: Using selector: EpollSelector
2026-07-23 03:11:34,835 INFO: GET /_rNd9xZ7kL3
2026-07-23 03:11:34,836 WARNING: GET /_rNd9xZ7kL3 -> 404
2026-07-23 03:11:34,856 INFO: << 404 /_rNd9xZ7kL3
2026-07-23 03:11:41,917 INFO: >> GET /
2026-07-23 03:11:41,918 DEBUG: Using selector: EpollSelector
2026-07-23 03:11:41,928 INFO: GET /
2026-07-23 03:11:41,931 WARNING: GET / -> 404
2026-07-23 03:11:41,960 INFO: << 404 /
2026-07-23 03:11:44,701 INFO: >> GET /
2026-07-23 03:11:44,702 DEBUG: Using selector: EpollSelector
2026-07-23 03:11:44,712 INFO: GET /
2026-07-23 03:11:44,715 WARNING: GET / -> 404
2026-07-23 03:11:44,744 INFO: << 404 /
2026-07-23 03:16:38,455 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 834, in _write_bytes
    self._sock.sendall(data)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 511, in rollback
    self._execute_command(COMMAND.COM_QUERY, "ROLLBACK")
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 886, in _execute_command
    self._write_bytes(packet)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 837, in _write_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))")
2026-07-23 04:49:31,318 INFO: wsgi.py loading...
2026-07-23 04:49:31,318 INFO: Importing app.main...
2026-07-23 04:49:33,729 INFO: app.main imported successfully.
2026-07-23 04:49:33,729 INFO: Running DB init...
2026-07-23 04:49:33,798 INFO: All tables OK.
2026-07-23 04:49:33,940 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 04:49:33,942 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,945 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,948 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,950 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,953 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,956 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 04:49:33,964 INFO: Dip chart data seeded.
2026-07-23 04:49:33,964 INFO: DB init complete.
2026-07-23 04:49:33,964 INFO: wsgi.py ready.
2026-07-23 04:49:33,968 INFO: >> GET /
2026-07-23 04:49:33,969 DEBUG: Using selector: EpollSelector
2026-07-23 04:49:33,970 INFO: >> GET /
2026-07-23 04:49:33,971 DEBUG: Using selector: EpollSelector
2026-07-23 04:49:33,981 INFO: GET /
2026-07-23 04:49:33,981 INFO: GET /
2026-07-23 04:49:33,983 WARNING: GET / -> 404
2026-07-23 04:49:33,984 WARNING: GET / -> 404
2026-07-23 04:49:33,993 INFO: << 404 /
2026-07-23 04:49:33,993 INFO: << 404 /
2026-07-23 04:49:34,263 INFO: >> GET /favicon.ico
2026-07-23 04:49:34,264 DEBUG: Using selector: EpollSelector
2026-07-23 04:49:34,264 INFO: GET /favicon.ico
2026-07-23 04:49:34,266 WARNING: GET /favicon.ico -> 404
2026-07-23 04:49:34,268 INFO: << 404 /favicon.ico
2026-07-23 06:52:47,225 INFO: wsgi.py loading...
2026-07-23 06:52:47,226 INFO: Importing app.main...
2026-07-23 06:52:49,253 INFO: app.main imported successfully.
2026-07-23 06:52:49,253 INFO: Running DB init...
2026-07-23 06:52:49,324 INFO: All tables OK.
2026-07-23 06:52:49,465 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 06:52:49,475 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,478 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,480 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,484 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,487 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,490 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 06:52:49,498 INFO: Dip chart data seeded.
2026-07-23 06:52:49,498 INFO: DB init complete.
2026-07-23 06:52:49,498 INFO: wsgi.py ready.
2026-07-23 06:52:49,502 INFO: >> GET /
2026-07-23 06:52:49,503 DEBUG: Using selector: EpollSelector
2026-07-23 06:52:49,514 INFO: GET /
2026-07-23 06:52:49,517 WARNING: GET / -> 404
2026-07-23 06:52:49,526 INFO: << 404 /
2026-07-23 07:02:01,547 INFO: wsgi.py loading...
2026-07-23 07:02:01,548 INFO: Importing app.main...
2026-07-23 07:02:03,621 INFO: app.main imported successfully.
2026-07-23 07:02:03,621 INFO: Running DB init...
2026-07-23 07:02:03,700 INFO: All tables OK.
2026-07-23 07:02:03,855 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 07:02:03,859 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,875 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,894 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,905 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,910 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,925 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:02:03,933 INFO: Dip chart data seeded.
2026-07-23 07:02:03,933 INFO: DB init complete.
2026-07-23 07:02:03,933 INFO: wsgi.py ready.
2026-07-23 07:02:03,937 INFO: >> GET /robots.txt
2026-07-23 07:02:03,939 DEBUG: Using selector: EpollSelector
2026-07-23 07:02:03,950 INFO: GET /robots.txt
2026-07-23 07:02:03,953 WARNING: GET /robots.txt -> 404
2026-07-23 07:02:03,963 INFO: << 404 /robots.txt
2026-07-23 07:34:42,151 INFO: wsgi.py loading...
2026-07-23 07:34:42,151 INFO: Importing app.main...
2026-07-23 07:34:44,087 INFO: app.main imported successfully.
2026-07-23 07:34:44,087 INFO: Running DB init...
2026-07-23 07:34:44,157 INFO: All tables OK.
2026-07-23 07:34:44,311 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 07:34:44,314 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,317 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,325 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,328 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,331 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,335 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 07:34:44,344 INFO: Dip chart data seeded.
2026-07-23 07:34:44,344 INFO: DB init complete.
2026-07-23 07:34:44,344 INFO: wsgi.py ready.
2026-07-23 07:34:44,347 INFO: >> POST /aaa
2026-07-23 07:34:44,349 DEBUG: Using selector: EpollSelector
2026-07-23 07:34:44,359 INFO: POST /aaa
2026-07-23 07:34:44,362 WARNING: POST /aaa -> 404
2026-07-23 07:34:44,371 INFO: << 404 /aaa
2026-07-23 09:27:18,630 INFO: wsgi.py loading...
2026-07-23 09:27:18,631 INFO: Importing app.main...
2026-07-23 09:27:21,840 INFO: app.main imported successfully.
2026-07-23 09:27:21,840 INFO: Running DB init...
2026-07-23 09:27:21,908 INFO: All tables OK.
2026-07-23 09:27:22,044 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 09:27:22,047 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,049 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,052 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,054 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,057 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,060 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:27:22,069 INFO: Dip chart data seeded.
2026-07-23 09:27:22,069 INFO: DB init complete.
2026-07-23 09:27:22,069 INFO: wsgi.py ready.
2026-07-23 09:27:22,072 INFO: >> GET /robots.txt
2026-07-23 09:27:22,073 DEBUG: Using selector: EpollSelector
2026-07-23 09:27:22,084 INFO: GET /robots.txt
2026-07-23 09:27:22,087 WARNING: GET /robots.txt -> 404
2026-07-23 09:27:22,096 INFO: << 404 /robots.txt
2026-07-23 09:43:53,082 INFO: wsgi.py loading...
2026-07-23 09:43:53,082 INFO: Importing app.main...
2026-07-23 09:43:54,991 INFO: app.main imported successfully.
2026-07-23 09:43:54,992 INFO: Running DB init...
2026-07-23 09:43:55,062 INFO: All tables OK.
2026-07-23 09:43:55,216 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 09:43:55,219 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,222 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,224 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,227 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,230 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,233 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 09:43:55,240 INFO: Dip chart data seeded.
2026-07-23 09:43:55,240 INFO: DB init complete.
2026-07-23 09:43:55,240 INFO: wsgi.py ready.
2026-07-23 09:43:55,244 INFO: >> GET /_rNd9xZ7kL3
2026-07-23 09:43:55,245 DEBUG: Using selector: EpollSelector
2026-07-23 09:43:55,257 INFO: GET /_rNd9xZ7kL3
2026-07-23 09:43:55,260 WARNING: GET /_rNd9xZ7kL3 -> 404
2026-07-23 09:43:55,270 INFO: << 404 /_rNd9xZ7kL3
2026-07-23 09:44:00,865 INFO: >> GET /
2026-07-23 09:44:00,867 DEBUG: Using selector: EpollSelector
2026-07-23 09:44:00,877 INFO: GET /
2026-07-23 09:44:00,880 WARNING: GET / -> 404
2026-07-23 09:44:00,890 INFO: << 404 /
2026-07-23 10:35:55,911 INFO: wsgi.py loading...
2026-07-23 10:35:55,911 INFO: Importing app.main...
2026-07-23 10:35:57,785 INFO: app.main imported successfully.
2026-07-23 10:35:57,785 INFO: Running DB init...
2026-07-23 10:35:57,849 INFO: All tables OK.
2026-07-23 10:35:57,990 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 10:35:57,993 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:57,996 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:57,999 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:58,002 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:58,005 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:58,008 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 10:35:58,015 INFO: Dip chart data seeded.
2026-07-23 10:35:58,015 INFO: DB init complete.
2026-07-23 10:35:58,015 INFO: wsgi.py ready.
2026-07-23 10:35:58,019 INFO: >> GET /wp-json/batch/v1
2026-07-23 10:35:58,020 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:58,022 INFO: >> GET /wp-json/batch/v1
2026-07-23 10:35:58,024 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:58,032 INFO: GET /wp-json/batch/v1
2026-07-23 10:35:58,035 WARNING: GET /wp-json/batch/v1 -> 404
2026-07-23 10:35:58,037 INFO: GET /wp-json/batch/v1
2026-07-23 10:35:58,041 WARNING: GET /wp-json/batch/v1 -> 404
2026-07-23 10:35:58,045 INFO: << 404 /wp-json/batch/v1
2026-07-23 10:35:58,054 INFO: << 404 /wp-json/batch/v1
2026-07-23 10:35:59,195 INFO: >> GET /
2026-07-23 10:35:59,197 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:59,207 INFO: GET /
2026-07-23 10:35:59,209 WARNING: GET / -> 404
2026-07-23 10:35:59,218 INFO: << 404 /
2026-07-23 10:35:59,225 INFO: >> GET /
2026-07-23 10:35:59,227 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:59,237 INFO: GET /
2026-07-23 10:35:59,239 WARNING: GET / -> 404
2026-07-23 10:35:59,249 INFO: << 404 /
2026-07-23 10:35:59,928 INFO: >> POST /wp-json/batch/v1
2026-07-23 10:35:59,929 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:59,954 INFO: POST /wp-json/batch/v1
2026-07-23 10:35:59,955 INFO: >> POST /wp-json/batch/v1
2026-07-23 10:35:59,956 DEBUG: Using selector: EpollSelector
2026-07-23 10:35:59,957 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-23 10:35:59,966 INFO: << 404 /wp-json/batch/v1
2026-07-23 10:35:59,966 INFO: POST /wp-json/batch/v1
2026-07-23 10:35:59,969 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-23 10:35:59,978 INFO: << 404 /wp-json/batch/v1
2026-07-23 10:36:00,646 INFO: >> POST /
2026-07-23 10:36:00,646 DEBUG: Using selector: EpollSelector
2026-07-23 10:36:00,646 INFO: POST /
2026-07-23 10:36:00,647 WARNING: POST / -> 404
2026-07-23 10:36:00,651 INFO: << 404 /
2026-07-23 10:36:00,657 INFO: >> POST /
2026-07-23 10:36:00,657 DEBUG: Using selector: EpollSelector
2026-07-23 10:36:00,657 INFO: POST /
2026-07-23 10:36:00,658 WARNING: POST / -> 404
2026-07-23 10:36:00,661 INFO: << 404 /
2026-07-23 11:31:15,028 INFO: wsgi.py loading...
2026-07-23 11:31:15,029 INFO: Importing app.main...
2026-07-23 11:31:17,657 INFO: app.main imported successfully.
2026-07-23 11:31:17,658 INFO: Running DB init...
2026-07-23 11:31:17,788 INFO: All tables OK.
2026-07-23 11:31:18,175 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 11:31:18,368 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,505 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,673 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,826 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,845 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,863 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 11:31:18,875 INFO: Dip chart data seeded.
2026-07-23 11:31:18,875 INFO: DB init complete.
2026-07-23 11:31:18,875 INFO: wsgi.py ready.
2026-07-23 11:31:18,879 INFO: >> GET /
2026-07-23 11:31:18,881 DEBUG: Using selector: EpollSelector
2026-07-23 11:31:18,893 INFO: GET /
2026-07-23 11:31:18,896 WARNING: GET / -> 404
2026-07-23 11:31:18,917 INFO: << 404 /
2026-07-23 12:20:44,828 INFO: wsgi.py loading...
2026-07-23 12:20:44,828 INFO: Importing app.main...
2026-07-23 12:20:46,671 INFO: app.main imported successfully.
2026-07-23 12:20:46,671 INFO: Running DB init...
2026-07-23 12:20:46,734 INFO: All tables OK.
2026-07-23 12:20:46,870 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 12:20:46,873 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,875 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,878 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,880 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,883 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,885 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:20:46,893 INFO: Dip chart data seeded.
2026-07-23 12:20:46,893 INFO: DB init complete.
2026-07-23 12:20:46,893 INFO: wsgi.py ready.
2026-07-23 12:20:46,897 INFO: >> GET /
2026-07-23 12:20:46,898 DEBUG: Using selector: EpollSelector
2026-07-23 12:20:46,908 INFO: GET /
2026-07-23 12:20:46,910 WARNING: GET / -> 404
2026-07-23 12:20:46,919 INFO: << 404 /
2026-07-23 12:35:49,278 INFO: wsgi.py loading...
2026-07-23 12:35:49,278 INFO: Importing app.main...
2026-07-23 12:35:50,956 INFO: app.main imported successfully.
2026-07-23 12:35:50,957 INFO: Running DB init...
2026-07-23 12:35:51,018 INFO: All tables OK.
2026-07-23 12:35:51,165 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 12:35:51,168 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,170 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,173 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,175 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,178 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,180 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 12:35:51,189 INFO: Dip chart data seeded.
2026-07-23 12:35:51,189 INFO: DB init complete.
2026-07-23 12:35:51,189 INFO: wsgi.py ready.
2026-07-23 12:35:51,193 INFO: >> GET /
2026-07-23 12:35:51,194 DEBUG: Using selector: EpollSelector
2026-07-23 12:35:51,204 INFO: GET /
2026-07-23 12:35:51,206 WARNING: GET / -> 404
2026-07-23 12:35:51,215 INFO: << 404 /
2026-07-23 12:35:55,654 INFO: >> GET /favicon.ico
2026-07-23 12:35:55,655 DEBUG: Using selector: EpollSelector
2026-07-23 12:35:55,665 INFO: GET /favicon.ico
2026-07-23 12:35:55,668 WARNING: GET /favicon.ico -> 404
2026-07-23 12:35:55,677 INFO: << 404 /favicon.ico
2026-07-23 15:45:12,966 INFO: wsgi.py loading...
2026-07-23 15:45:12,966 INFO: Importing app.main...
2026-07-23 15:45:16,572 INFO: app.main imported successfully.
2026-07-23 15:45:16,573 INFO: Running DB init...
2026-07-23 15:45:16,634 INFO: All tables OK.
2026-07-23 15:45:16,769 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 15:45:16,772 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,774 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,777 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,779 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,782 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,784 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:45:16,792 INFO: Dip chart data seeded.
2026-07-23 15:45:16,793 INFO: DB init complete.
2026-07-23 15:45:16,793 INFO: wsgi.py ready.
2026-07-23 15:45:16,796 INFO: >> GET /
2026-07-23 15:45:16,797 DEBUG: Using selector: EpollSelector
2026-07-23 15:45:16,808 INFO: GET /
2026-07-23 15:45:16,810 WARNING: GET / -> 404
2026-07-23 15:45:16,819 INFO: << 404 /
2026-07-23 15:59:29,812 INFO: wsgi.py loading...
2026-07-23 15:59:29,812 INFO: Importing app.main...
2026-07-23 15:59:31,570 INFO: app.main imported successfully.
2026-07-23 15:59:31,571 INFO: Running DB init...
2026-07-23 15:59:31,639 INFO: All tables OK.
2026-07-23 15:59:31,784 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 15:59:31,787 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,789 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,792 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,795 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,798 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,801 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 15:59:31,809 INFO: Dip chart data seeded.
2026-07-23 15:59:31,809 INFO: DB init complete.
2026-07-23 15:59:31,809 INFO: wsgi.py ready.
2026-07-23 15:59:31,812 INFO: >> GET /
2026-07-23 15:59:31,814 DEBUG: Using selector: EpollSelector
2026-07-23 15:59:31,825 INFO: GET /
2026-07-23 15:59:31,827 WARNING: GET / -> 404
2026-07-23 15:59:31,836 INFO: << 404 /
2026-07-23 16:08:39,645 INFO: >> GET /
2026-07-23 16:08:39,646 DEBUG: Using selector: EpollSelector
2026-07-23 16:08:39,658 INFO: GET /
2026-07-23 16:08:39,660 WARNING: GET / -> 404
2026-07-23 16:08:39,691 INFO: << 404 /
2026-07-23 17:08:37,182 INFO: wsgi.py loading...
2026-07-23 17:08:37,182 INFO: Importing app.main...
2026-07-23 17:08:38,973 INFO: app.main imported successfully.
2026-07-23 17:08:38,974 INFO: Running DB init...
2026-07-23 17:08:39,043 INFO: All tables OK.
2026-07-23 17:08:39,226 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 17:08:39,229 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,232 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,234 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,237 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,240 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,243 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:08:39,252 INFO: Dip chart data seeded.
2026-07-23 17:08:39,252 INFO: DB init complete.
2026-07-23 17:08:39,252 INFO: wsgi.py ready.
2026-07-23 17:08:39,255 INFO: >> GET /
2026-07-23 17:08:39,257 DEBUG: Using selector: EpollSelector
2026-07-23 17:08:39,267 INFO: GET /
2026-07-23 17:08:39,270 WARNING: GET / -> 404
2026-07-23 17:08:39,280 INFO: << 404 /
2026-07-23 17:18:58,681 INFO: wsgi.py loading...
2026-07-23 17:18:58,681 INFO: Importing app.main...
2026-07-23 17:19:00,455 INFO: app.main imported successfully.
2026-07-23 17:19:00,455 INFO: Running DB init...
2026-07-23 17:19:00,517 INFO: All tables OK.
2026-07-23 17:19:00,658 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 17:19:00,661 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,664 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,666 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,668 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,671 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,673 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:19:00,682 INFO: Dip chart data seeded.
2026-07-23 17:19:00,682 INFO: DB init complete.
2026-07-23 17:19:00,682 INFO: wsgi.py ready.
2026-07-23 17:19:00,685 INFO: >> GET /
2026-07-23 17:19:00,687 DEBUG: Using selector: EpollSelector
2026-07-23 17:19:00,697 INFO: GET /
2026-07-23 17:19:00,699 WARNING: GET / -> 404
2026-07-23 17:19:00,708 INFO: << 404 /
2026-07-23 17:19:26,068 INFO: >> GET /
2026-07-23 17:19:26,069 DEBUG: Using selector: EpollSelector
2026-07-23 17:19:26,080 INFO: GET /
2026-07-23 17:19:26,082 WARNING: GET / -> 404
2026-07-23 17:19:26,091 INFO: << 404 /
2026-07-23 17:19:30,345 INFO: >> GET /favicon.ico
2026-07-23 17:19:30,345 DEBUG: Using selector: EpollSelector
2026-07-23 17:19:30,346 INFO: GET /favicon.ico
2026-07-23 17:19:30,347 WARNING: GET /favicon.ico -> 404
2026-07-23 17:19:30,350 INFO: << 404 /favicon.ico
2026-07-23 17:41:25,122 INFO: wsgi.py loading...
2026-07-23 17:41:25,122 INFO: Importing app.main...
2026-07-23 17:41:26,885 INFO: app.main imported successfully.
2026-07-23 17:41:26,886 INFO: Running DB init...
2026-07-23 17:41:26,949 INFO: All tables OK.
2026-07-23 17:41:27,084 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 17:41:27,086 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,089 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,097 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,100 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,103 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,105 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:41:27,113 INFO: Dip chart data seeded.
2026-07-23 17:41:27,113 INFO: DB init complete.
2026-07-23 17:41:27,113 INFO: wsgi.py ready.
2026-07-23 17:41:27,117 INFO: >> HEAD /
2026-07-23 17:41:27,118 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:27,128 INFO: HEAD /
2026-07-23 17:41:27,130 WARNING: HEAD / -> 404
2026-07-23 17:41:27,131 INFO: << 404 /
2026-07-23 17:41:27,439 INFO: >> HEAD /
2026-07-23 17:41:27,440 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:27,450 INFO: HEAD /
2026-07-23 17:41:27,452 WARNING: HEAD / -> 404
2026-07-23 17:41:27,453 INFO: << 404 /
2026-07-23 17:41:27,959 INFO: >> GET /
2026-07-23 17:41:27,959 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:27,959 INFO: GET /
2026-07-23 17:41:27,960 WARNING: GET / -> 404
2026-07-23 17:41:27,969 INFO: << 404 /
2026-07-23 17:41:28,597 INFO: >> GET /env
2026-07-23 17:41:28,597 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:28,597 INFO: GET /env
2026-07-23 17:41:28,599 WARNING: GET /env -> 404
2026-07-23 17:41:28,608 INFO: << 404 /env
2026-07-23 17:41:29,195 INFO: >> GET /.env.local
2026-07-23 17:41:29,196 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:29,196 INFO: GET /.env.local
2026-07-23 17:41:29,198 WARNING: GET /.env.local -> 404
2026-07-23 17:41:29,200 INFO: << 404 /.env.local
2026-07-23 17:41:29,213 INFO: >> GET /.env.production
2026-07-23 17:41:29,213 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:29,214 INFO: GET /.env.production
2026-07-23 17:41:29,215 WARNING: GET /.env.production -> 404
2026-07-23 17:41:29,218 INFO: << 404 /.env.production
2026-07-23 17:41:30,440 INFO: >> GET /.env.development
2026-07-23 17:41:30,440 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,440 INFO: GET /.env.development
2026-07-23 17:41:30,442 WARNING: GET /.env.development -> 404
2026-07-23 17:41:30,445 INFO: << 404 /.env.development
2026-07-23 17:41:30,451 INFO: >> GET /backend/.env
2026-07-23 17:41:30,451 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,451 INFO: GET /backend/.env
2026-07-23 17:41:30,453 WARNING: GET /backend/.env -> 404
2026-07-23 17:41:30,456 INFO: << 404 /backend/.env
2026-07-23 17:41:30,804 INFO: >> GET /api/.env
2026-07-23 17:41:30,806 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,807 INFO: >> GET /config.json
2026-07-23 17:41:30,808 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,809 INFO: >> GET /.aws/credentials
2026-07-23 17:41:30,811 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,816 INFO: GET /api/.env
2026-07-23 17:41:30,819 INFO: GET /config.json
2026-07-23 17:41:30,819 WARNING: GET /api/.env -> 404
2026-07-23 17:41:30,821 INFO: GET /.aws/credentials
2026-07-23 17:41:30,821 WARNING: GET /config.json -> 404
2026-07-23 17:41:30,824 WARNING: GET /.aws/credentials -> 404
2026-07-23 17:41:30,830 INFO: << 404 /config.json
2026-07-23 17:41:30,829 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 474, in _read_ok_packet
    raise err.OperationalError(
pymysql.err.OperationalError: (2014, 'Command Out of Sync')
2026-07-23 17:41:30,833 INFO: << 404 /.aws/credentials
2026-07-23 17:41:30,835 INFO: << 404 /api/.env
2026-07-23 17:41:30,839 INFO: >> GET /js/config.js
2026-07-23 17:41:30,840 DEBUG: Using selector: EpollSelector
2026-07-23 17:41:30,850 INFO: GET /js/config.js
2026-07-23 17:41:30,853 WARNING: GET /js/config.js -> 404
2026-07-23 17:41:30,883 INFO: << 404 /js/config.js
2026-07-23 17:41:32,916 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 834, in _write_bytes
    self._sock.sendall(data)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 511, in rollback
    self._execute_command(COMMAND.COM_QUERY, "ROLLBACK")
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 886, in _execute_command
    self._write_bytes(packet)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 837, in _write_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))")
2026-07-23 17:52:17,190 INFO: wsgi.py loading...
2026-07-23 17:52:17,190 INFO: Importing app.main...
2026-07-23 17:52:18,999 INFO: app.main imported successfully.
2026-07-23 17:52:18,999 INFO: Running DB init...
2026-07-23 17:52:19,067 INFO: All tables OK.
2026-07-23 17:52:19,240 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 17:52:19,242 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,245 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,248 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,251 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,254 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,256 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 17:52:19,265 INFO: Dip chart data seeded.
2026-07-23 17:52:19,266 INFO: DB init complete.
2026-07-23 17:52:19,266 INFO: wsgi.py ready.
2026-07-23 17:52:19,270 INFO: >> GET /
2026-07-23 17:52:19,271 DEBUG: Using selector: EpollSelector
2026-07-23 17:52:19,281 INFO: GET /
2026-07-23 17:52:19,284 WARNING: GET / -> 404
2026-07-23 17:52:19,293 INFO: << 404 /
2026-07-23 17:52:20,527 INFO: >> GET /
2026-07-23 17:52:20,529 DEBUG: Using selector: EpollSelector
2026-07-23 17:52:20,539 INFO: GET /
2026-07-23 17:52:20,542 WARNING: GET / -> 404
2026-07-23 17:52:20,550 INFO: << 404 /
2026-07-23 17:52:37,422 INFO: >> GET /
2026-07-23 17:52:37,422 DEBUG: Using selector: EpollSelector
2026-07-23 17:52:37,422 INFO: GET /
2026-07-23 17:52:37,423 WARNING: GET / -> 404
2026-07-23 17:52:37,426 INFO: << 404 /
2026-07-23 18:18:28,322 INFO: wsgi.py loading...
2026-07-23 18:18:28,322 INFO: Importing app.main...
2026-07-23 18:18:30,106 INFO: app.main imported successfully.
2026-07-23 18:18:30,107 INFO: Running DB init...
2026-07-23 18:18:30,175 INFO: All tables OK.
2026-07-23 18:18:30,326 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 18:18:30,329 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,332 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,335 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,337 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,340 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,343 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:18:30,351 INFO: Dip chart data seeded.
2026-07-23 18:18:30,351 INFO: DB init complete.
2026-07-23 18:18:30,351 INFO: wsgi.py ready.
2026-07-23 18:18:30,355 INFO: >> GET /
2026-07-23 18:18:30,356 DEBUG: Using selector: EpollSelector
2026-07-23 18:18:30,366 INFO: GET /
2026-07-23 18:18:30,369 WARNING: GET / -> 404
2026-07-23 18:18:30,378 INFO: << 404 /
2026-07-23 18:45:15,489 INFO: wsgi.py loading...
2026-07-23 18:45:15,489 INFO: Importing app.main...
2026-07-23 18:45:17,261 INFO: app.main imported successfully.
2026-07-23 18:45:17,261 INFO: Running DB init...
2026-07-23 18:45:17,324 INFO: All tables OK.
2026-07-23 18:45:17,467 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 18:45:17,470 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,473 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,475 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,478 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,481 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,483 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:45:17,491 INFO: Dip chart data seeded.
2026-07-23 18:45:17,491 INFO: DB init complete.
2026-07-23 18:45:17,491 INFO: wsgi.py ready.
2026-07-23 18:45:17,494 INFO: >> HEAD /
2026-07-23 18:45:17,496 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:17,497 INFO: >> HEAD /
2026-07-23 18:45:17,498 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:17,507 INFO: HEAD /
2026-07-23 18:45:17,509 WARNING: HEAD / -> 404
2026-07-23 18:45:17,510 INFO: HEAD /
2026-07-23 18:45:17,510 INFO: << 404 /
2026-07-23 18:45:17,512 WARNING: HEAD / -> 404
2026-07-23 18:45:17,513 INFO: << 404 /
2026-07-23 18:45:18,190 INFO: >> GET /
2026-07-23 18:45:18,190 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:18,190 INFO: GET /
2026-07-23 18:45:18,191 WARNING: GET / -> 404
2026-07-23 18:45:18,201 INFO: << 404 /
2026-07-23 18:45:19,792 INFO: >> GET /env
2026-07-23 18:45:19,792 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:19,792 INFO: GET /env
2026-07-23 18:45:19,794 WARNING: GET /env -> 404
2026-07-23 18:45:19,801 INFO: >> GET /.env.local
2026-07-23 18:45:19,801 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:19,802 INFO: GET /.env.local
2026-07-23 18:45:19,804 WARNING: GET /.env.local -> 404
2026-07-23 18:45:19,805 INFO: << 404 /env
2026-07-23 18:45:19,809 INFO: << 404 /.env.local
2026-07-23 18:45:20,378 INFO: >> GET /.env.production
2026-07-23 18:45:20,378 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,378 INFO: GET /.env.production
2026-07-23 18:45:20,378 INFO: >> GET /.env.development
2026-07-23 18:45:20,378 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,379 INFO: GET /.env.development
2026-07-23 18:45:20,380 WARNING: GET /.env.production -> 404
2026-07-23 18:45:20,380 WARNING: GET /.env.development -> 404
2026-07-23 18:45:20,383 INFO: << 404 /.env.development
2026-07-23 18:45:20,383 INFO: << 404 /.env.production
2026-07-23 18:45:20,816 INFO: >> GET /backend/.env
2026-07-23 18:45:20,816 INFO: >> GET /api/.env
2026-07-23 18:45:20,816 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,816 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,817 INFO: GET /backend/.env
2026-07-23 18:45:20,817 INFO: GET /api/.env
2026-07-23 18:45:20,818 WARNING: GET /api/.env -> 404
2026-07-23 18:45:20,819 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/streams/memory.py", line 117, in receive
    return self.receive_nowait()
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/anyio/streams/memory.py", line 112, in receive_nowait
    raise WouldBlock
anyio.WouldBlock

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 826, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
2026-07-23 18:45:20,824 WARNING: GET /backend/.env -> 404
2026-07-23 18:45:20,844 INFO: << 404 /backend/.env
2026-07-23 18:45:20,845 INFO: << 404 /api/.env
2026-07-23 18:45:20,948 INFO: >> GET /js/config.js
2026-07-23 18:45:20,948 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,949 INFO: GET /js/config.js
2026-07-23 18:45:20,950 WARNING: GET /js/config.js -> 404
2026-07-23 18:45:20,951 INFO: >> GET /config.json
2026-07-23 18:45:20,952 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:20,952 INFO: << 404 /js/config.js
2026-07-23 18:45:20,962 INFO: GET /config.json
2026-07-23 18:45:20,965 WARNING: GET /config.json -> 404
2026-07-23 18:45:20,995 INFO: << 404 /config.json
2026-07-23 18:45:21,011 INFO: >> GET /.aws/credentials
2026-07-23 18:45:21,011 DEBUG: Using selector: EpollSelector
2026-07-23 18:45:21,012 INFO: GET /.aws/credentials
2026-07-23 18:45:21,013 WARNING: GET /.aws/credentials -> 404
2026-07-23 18:45:21,016 INFO: << 404 /.aws/credentials
2026-07-23 18:55:50,032 INFO: wsgi.py loading...
2026-07-23 18:55:50,032 INFO: Importing app.main...
2026-07-23 18:55:51,800 INFO: app.main imported successfully.
2026-07-23 18:55:51,800 INFO: Running DB init...
2026-07-23 18:55:51,864 INFO: All tables OK.
2026-07-23 18:55:52,007 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 18:55:52,010 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,013 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,015 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,018 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,021 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,024 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 18:55:52,032 INFO: Dip chart data seeded.
2026-07-23 18:55:52,032 INFO: DB init complete.
2026-07-23 18:55:52,032 INFO: wsgi.py ready.
2026-07-23 18:55:52,035 INFO: >> GET /
2026-07-23 18:55:52,037 DEBUG: Using selector: EpollSelector
2026-07-23 18:55:52,047 INFO: GET /
2026-07-23 18:55:52,050 WARNING: GET / -> 404
2026-07-23 18:55:52,059 INFO: << 404 /
2026-07-23 19:03:53,845 INFO: wsgi.py loading...
2026-07-23 19:03:53,845 INFO: Importing app.main...
2026-07-23 19:03:55,599 INFO: app.main imported successfully.
2026-07-23 19:03:55,599 INFO: Running DB init...
2026-07-23 19:03:55,663 INFO: All tables OK.
2026-07-23 19:03:55,800 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 19:03:55,803 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,805 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,808 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,810 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,813 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,815 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:03:55,824 INFO: Dip chart data seeded.
2026-07-23 19:03:55,824 INFO: DB init complete.
2026-07-23 19:03:55,824 INFO: wsgi.py ready.
2026-07-23 19:03:55,827 INFO: >> GET /
2026-07-23 19:03:55,828 DEBUG: Using selector: EpollSelector
2026-07-23 19:03:55,838 INFO: GET /
2026-07-23 19:03:55,840 WARNING: GET / -> 404
2026-07-23 19:03:55,849 INFO: << 404 /
2026-07-23 19:31:32,034 INFO: wsgi.py loading...
2026-07-23 19:31:32,034 INFO: Importing app.main...
2026-07-23 19:31:33,889 INFO: app.main imported successfully.
2026-07-23 19:31:33,889 INFO: Running DB init...
2026-07-23 19:31:33,956 INFO: All tables OK.
2026-07-23 19:31:34,100 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 19:31:34,103 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,105 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,108 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,111 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,114 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,116 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 19:31:34,124 INFO: Dip chart data seeded.
2026-07-23 19:31:34,124 INFO: DB init complete.
2026-07-23 19:31:34,124 INFO: wsgi.py ready.
2026-07-23 19:31:34,127 INFO: >> GET /aws.env
2026-07-23 19:31:34,129 DEBUG: Using selector: EpollSelector
2026-07-23 19:31:34,130 INFO: >> GET /.env.production
2026-07-23 19:31:34,131 DEBUG: Using selector: EpollSelector
2026-07-23 19:31:34,132 INFO: >> GET /.aws/credentials
2026-07-23 19:31:34,134 DEBUG: Using selector: EpollSelector
2026-07-23 19:31:34,140 INFO: GET /aws.env
2026-07-23 19:31:34,142 INFO: GET /.env.production
2026-07-23 19:31:34,143 WARNING: GET /aws.env -> 404
2026-07-23 19:31:34,145 WARNING: GET /.env.production -> 404
2026-07-23 19:31:34,148 INFO: GET /.aws/credentials
2026-07-23 19:31:34,152 WARNING: GET /.aws/credentials -> 404
2026-07-23 19:31:34,153 INFO: << 404 /aws.env
2026-07-23 19:31:34,156 INFO: << 404 /.env.production
2026-07-23 19:31:34,165 INFO: << 404 /.aws/credentials
2026-07-23 21:20:18,246 INFO: wsgi.py loading...
2026-07-23 21:20:18,247 INFO: Importing app.main...
2026-07-23 21:20:20,143 INFO: app.main imported successfully.
2026-07-23 21:20:20,143 INFO: Running DB init...
2026-07-23 21:20:20,200 INFO: All tables OK.
2026-07-23 21:20:20,337 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 21:20:20,340 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,342 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,345 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,347 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,350 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,353 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 21:20:20,361 INFO: Dip chart data seeded.
2026-07-23 21:20:20,361 INFO: DB init complete.
2026-07-23 21:20:20,361 INFO: wsgi.py ready.
2026-07-23 21:20:20,365 INFO: >> GET /robots.txt
2026-07-23 21:20:20,366 DEBUG: Using selector: EpollSelector
2026-07-23 21:20:20,376 INFO: GET /robots.txt
2026-07-23 21:20:20,379 WARNING: GET /robots.txt -> 404
2026-07-23 21:20:20,388 INFO: << 404 /robots.txt
2026-07-23 22:31:20,250 INFO: wsgi.py loading...
2026-07-23 22:31:20,250 INFO: Importing app.main...
2026-07-23 22:31:22,018 INFO: app.main imported successfully.
2026-07-23 22:31:22,018 INFO: Running DB init...
2026-07-23 22:31:22,084 INFO: All tables OK.
2026-07-23 22:31:22,223 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 22:31:22,226 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,228 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,231 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,233 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,236 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,239 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:31:22,247 INFO: Dip chart data seeded.
2026-07-23 22:31:22,247 INFO: DB init complete.
2026-07-23 22:31:22,247 INFO: wsgi.py ready.
2026-07-23 22:31:22,251 INFO: >> GET /
2026-07-23 22:31:22,252 DEBUG: Using selector: EpollSelector
2026-07-23 22:31:22,253 INFO: >> GET /
2026-07-23 22:31:22,255 DEBUG: Using selector: EpollSelector
2026-07-23 22:31:22,263 INFO: GET /
2026-07-23 22:31:22,265 INFO: GET /
2026-07-23 22:31:22,265 WARNING: GET / -> 404
2026-07-23 22:31:22,267 WARNING: GET / -> 404
2026-07-23 22:31:22,274 INFO: << 404 /
2026-07-23 22:31:22,276 INFO: << 404 /
2026-07-23 22:31:22,849 INFO: >> GET /
2026-07-23 22:31:22,850 DEBUG: Using selector: EpollSelector
2026-07-23 22:31:22,861 INFO: GET /
2026-07-23 22:31:22,863 WARNING: GET / -> 404
2026-07-23 22:31:22,873 INFO: << 404 /
2026-07-23 22:31:23,095 INFO: >> GET /
2026-07-23 22:31:23,095 DEBUG: Using selector: EpollSelector
2026-07-23 22:31:23,096 INFO: GET /
2026-07-23 22:31:23,097 WARNING: GET / -> 404
2026-07-23 22:31:23,100 INFO: << 404 /
2026-07-23 22:53:07,567 INFO: wsgi.py loading...
2026-07-23 22:53:07,567 INFO: Importing app.main...
2026-07-23 22:53:09,412 INFO: app.main imported successfully.
2026-07-23 22:53:09,412 INFO: Running DB init...
2026-07-23 22:53:09,474 INFO: All tables OK.
2026-07-23 22:53:09,613 INFO: Migration OK: allowances ENUM+DAILY
2026-07-23 22:53:09,616 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,619 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,621 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,624 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,627 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,630 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-23 22:53:09,637 INFO: Dip chart data seeded.
2026-07-23 22:53:09,637 INFO: DB init complete.
2026-07-23 22:53:09,637 INFO: wsgi.py ready.
2026-07-23 22:53:09,640 INFO: >> GET /_ignition/execute-solution
2026-07-23 22:53:09,642 DEBUG: Using selector: EpollSelector
2026-07-23 22:53:09,652 INFO: GET /_ignition/execute-solution
2026-07-23 22:53:09,655 WARNING: GET /_ignition/execute-solution -> 404
2026-07-23 22:53:09,665 INFO: << 404 /_ignition/execute-solution
2026-07-24 00:04:21,225 INFO: wsgi.py loading...
2026-07-24 00:04:21,225 INFO: Importing app.main...
2026-07-24 00:04:23,019 INFO: app.main imported successfully.
2026-07-24 00:04:23,019 INFO: Running DB init...
2026-07-24 00:04:23,087 INFO: All tables OK.
2026-07-24 00:04:23,233 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 00:04:23,236 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,239 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,242 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,244 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,247 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,250 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:04:23,257 INFO: Dip chart data seeded.
2026-07-24 00:04:23,257 INFO: DB init complete.
2026-07-24 00:04:23,257 INFO: wsgi.py ready.
2026-07-24 00:04:23,261 INFO: >> GET /
2026-07-24 00:04:23,262 DEBUG: Using selector: EpollSelector
2026-07-24 00:04:23,263 INFO: >> GET /
2026-07-24 00:04:23,265 DEBUG: Using selector: EpollSelector
2026-07-24 00:04:23,273 INFO: GET /
2026-07-24 00:04:23,275 WARNING: GET / -> 404
2026-07-24 00:04:23,276 INFO: GET /
2026-07-24 00:04:23,278 WARNING: GET / -> 404
2026-07-24 00:04:23,285 INFO: << 404 /
2026-07-24 00:04:23,289 INFO: << 404 /
2026-07-24 00:15:36,658 INFO: wsgi.py loading...
2026-07-24 00:15:36,658 INFO: Importing app.main...
2026-07-24 00:15:38,419 INFO: app.main imported successfully.
2026-07-24 00:15:38,419 INFO: Running DB init...
2026-07-24 00:15:38,483 INFO: All tables OK.
2026-07-24 00:15:38,618 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 00:15:38,621 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,623 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,626 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,628 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,631 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,633 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 00:15:38,640 INFO: Dip chart data seeded.
2026-07-24 00:15:38,641 INFO: DB init complete.
2026-07-24 00:15:38,641 INFO: wsgi.py ready.
2026-07-24 00:15:38,644 INFO: >> GET /_ignition/execute-solution
2026-07-24 00:15:38,646 DEBUG: Using selector: EpollSelector
2026-07-24 00:15:38,656 INFO: GET /_ignition/execute-solution
2026-07-24 00:15:38,659 WARNING: GET /_ignition/execute-solution -> 404
2026-07-24 00:15:38,669 INFO: << 404 /_ignition/execute-solution
2026-07-24 01:23:55,951 INFO: wsgi.py loading...
2026-07-24 01:23:55,951 INFO: Importing app.main...
2026-07-24 01:23:57,881 INFO: app.main imported successfully.
2026-07-24 01:23:57,881 INFO: Running DB init...
2026-07-24 01:23:57,946 INFO: All tables OK.
2026-07-24 01:23:58,083 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 01:23:58,086 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,088 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,091 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,093 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,096 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,099 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 01:23:58,107 INFO: Dip chart data seeded.
2026-07-24 01:23:58,108 INFO: DB init complete.
2026-07-24 01:23:58,108 INFO: wsgi.py ready.
2026-07-24 01:23:58,111 INFO: >> GET /
2026-07-24 01:23:58,112 DEBUG: Using selector: EpollSelector
2026-07-24 01:23:58,122 INFO: GET /
2026-07-24 01:23:58,125 WARNING: GET / -> 404
2026-07-24 01:23:58,133 INFO: << 404 /
2026-07-24 02:00:03,333 INFO: wsgi.py loading...
2026-07-24 02:00:03,333 INFO: Importing app.main...
2026-07-24 02:00:06,032 INFO: app.main imported successfully.
2026-07-24 02:00:06,032 INFO: Running DB init...
2026-07-24 02:00:06,098 INFO: All tables OK.
2026-07-24 02:00:06,281 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 02:00:06,284 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,287 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,290 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,293 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,296 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,299 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 02:00:06,308 INFO: Dip chart data seeded.
2026-07-24 02:00:06,308 INFO: DB init complete.
2026-07-24 02:00:06,308 INFO: wsgi.py ready.
2026-07-24 02:00:06,312 INFO: >> GET /
2026-07-24 02:00:06,313 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:06,324 INFO: GET /
2026-07-24 02:00:06,327 WARNING: GET / -> 404
2026-07-24 02:00:06,336 INFO: << 404 /
2026-07-24 02:00:08,130 INFO: >> GET /a0bh0vsbx4pj5hck9ilk3mlw
2026-07-24 02:00:08,130 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:08,131 INFO: GET /a0bh0vsbx4pj5hck9ilk3mlw
2026-07-24 02:00:08,132 WARNING: GET /a0bh0vsbx4pj5hck9ilk3mlw -> 404
2026-07-24 02:00:08,136 INFO: << 404 /a0bh0vsbx4pj5hck9ilk3mlw
2026-07-24 02:00:09,944 INFO: >> GET /h5m5cenax4rx1rnked3c6w464.html
2026-07-24 02:00:09,944 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:09,945 INFO: GET /h5m5cenax4rx1rnked3c6w464.html
2026-07-24 02:00:09,946 WARNING: GET /h5m5cenax4rx1rnked3c6w464.html -> 404
2026-07-24 02:00:09,949 INFO: << 404 /h5m5cenax4rx1rnked3c6w464.html
2026-07-24 02:00:10,609 INFO: >> GET /1jcaudgx2oa061ghwa19foo3jt.php
2026-07-24 02:00:10,610 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:10,610 INFO: GET /1jcaudgx2oa061ghwa19foo3jt.php
2026-07-24 02:00:10,611 WARNING: GET /1jcaudgx2oa061ghwa19foo3jt.php -> 404
2026-07-24 02:00:10,614 INFO: << 404 /1jcaudgx2oa061ghwa19foo3jt.php
2026-07-24 02:00:11,352 INFO: >> GET /WEB-INF/web.xml
2026-07-24 02:00:11,353 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:11,353 INFO: GET /WEB-INF/web.xml
2026-07-24 02:00:11,354 WARNING: GET /WEB-INF/web.xml -> 404
2026-07-24 02:00:11,356 INFO: >> GET /backend/.env
2026-07-24 02:00:11,357 INFO: << 404 /WEB-INF/web.xml
2026-07-24 02:00:11,357 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:11,367 INFO: GET /backend/.env
2026-07-24 02:00:11,370 WARNING: GET /backend/.env -> 404
2026-07-24 02:00:11,379 INFO: << 404 /backend/.env
2026-07-24 02:00:11,874 INFO: >> GET /.env.production
2026-07-24 02:00:11,874 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:11,875 INFO: GET /.env.production
2026-07-24 02:00:11,876 WARNING: GET /.env.production -> 404
2026-07-24 02:00:11,879 INFO: << 404 /.env.production
2026-07-24 02:00:12,298 INFO: >> GET /deploy.sh
2026-07-24 02:00:12,298 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:12,299 INFO: GET /deploy.sh
2026-07-24 02:00:12,300 WARNING: GET /deploy.sh -> 404
2026-07-24 02:00:12,304 INFO: << 404 /deploy.sh
2026-07-24 02:00:12,622 INFO: >> GET /source/.env
2026-07-24 02:00:12,622 INFO: >> GET /config.env
2026-07-24 02:00:12,623 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:12,623 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:12,623 INFO: GET /config.env
2026-07-24 02:00:12,623 INFO: GET /source/.env
2026-07-24 02:00:12,624 WARNING: GET /config.env -> 404
2026-07-24 02:00:12,625 WARNING: GET /source/.env -> 404
2026-07-24 02:00:12,626 INFO: >> GET /framework/.env
2026-07-24 02:00:12,627 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:12,627 INFO: << 404 /config.env
2026-07-24 02:00:12,637 INFO: GET /framework/.env
2026-07-24 02:00:12,640 WARNING: GET /framework/.env -> 404
2026-07-24 02:00:12,653 INFO: << 404 /source/.env
2026-07-24 02:00:12,670 INFO: << 404 /framework/.env
2026-07-24 02:00:13,106 INFO: >> GET /ikiwiki/.env
2026-07-24 02:00:13,106 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,106 INFO: >> GET /config.inc.php
2026-07-24 02:00:13,107 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,107 INFO: >> GET /system/.env
2026-07-24 02:00:13,107 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,107 INFO: GET /ikiwiki/.env
2026-07-24 02:00:13,107 INFO: GET /config.inc.php
2026-07-24 02:00:13,107 INFO: GET /system/.env
2026-07-24 02:00:13,108 WARNING: GET /ikiwiki/.env -> 404
2026-07-24 02:00:13,108 WARNING: GET /config.inc.php -> 404
2026-07-24 02:00:13,109 WARNING: GET /system/.env -> 404
2026-07-24 02:00:13,111 INFO: << 404 /config.inc.php
2026-07-24 02:00:13,111 INFO: << 404 /ikiwiki/.env
2026-07-24 02:00:13,134 INFO: << 404 /system/.env
2026-07-24 02:00:13,958 INFO: >> GET /wp-config.php.backup
2026-07-24 02:00:13,958 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,958 INFO: >> GET /test/
2026-07-24 02:00:13,958 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,958 INFO: >> GET /.env.dev
2026-07-24 02:00:13,959 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:13,959 INFO: GET /wp-config.php.backup
2026-07-24 02:00:13,959 INFO: GET /test/
2026-07-24 02:00:13,959 INFO: GET /.env.dev
2026-07-24 02:00:13,960 WARNING: GET /test/ -> 404
2026-07-24 02:00:13,960 WARNING: GET /wp-config.php.backup -> 404
2026-07-24 02:00:13,961 WARNING: GET /.env.dev -> 404
2026-07-24 02:00:13,963 INFO: << 404 /wp-config.php.backup
2026-07-24 02:00:13,963 INFO: << 404 /test/
2026-07-24 02:00:13,964 INFO: << 404 /.env.dev
2026-07-24 02:00:14,522 INFO: >> GET /.env.sample
2026-07-24 02:00:14,522 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:14,522 INFO: >> GET /app_dev.php/_profiler/open
2026-07-24 02:00:14,522 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:14,522 INFO: GET /.env.sample
2026-07-24 02:00:14,523 INFO: >> GET /wp-content/mysql.sql
2026-07-24 02:00:14,523 INFO: GET /app_dev.php/_profiler/open
2026-07-24 02:00:14,523 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:14,523 INFO: GET /wp-content/mysql.sql
2026-07-24 02:00:14,524 WARNING: GET /app_dev.php/_profiler/open -> 404
2026-07-24 02:00:14,524 WARNING: GET /.env.sample -> 404
2026-07-24 02:00:14,524 WARNING: GET /wp-content/mysql.sql -> 404
2026-07-24 02:00:14,526 INFO: << 404 /app_dev.php/_profiler/open
2026-07-24 02:00:14,527 INFO: << 404 /.env.sample
2026-07-24 02:00:14,527 INFO: << 404 /wp-content/mysql.sql
2026-07-24 02:00:14,992 INFO: >> GET /.env.example
2026-07-24 02:00:14,992 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:14,992 INFO: >> GET /.env.dev.local
2026-07-24 02:00:14,992 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:14,992 INFO: GET /.env.example
2026-07-24 02:00:14,992 INFO: GET /.env.dev.local
2026-07-24 02:00:14,994 WARNING: GET /.env.example -> 404
2026-07-24 02:00:14,994 WARNING: GET /.env.dev.local -> 404
2026-07-24 02:00:14,996 INFO: << 404 /.env.example
2026-07-24 02:00:14,996 INFO: << 404 /.env.dev.local
2026-07-24 02:00:15,020 INFO: >> GET /php-info.php
2026-07-24 02:00:15,020 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:15,020 INFO: GET /php-info.php
2026-07-24 02:00:15,022 WARNING: GET /php-info.php -> 404
2026-07-24 02:00:15,024 INFO: << 404 /php-info.php
2026-07-24 02:00:15,473 INFO: >> GET /.env.prod
2026-07-24 02:00:15,474 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:15,474 INFO: >> GET /.env.stage
2026-07-24 02:00:15,474 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:15,474 INFO: >> GET /info.php.bak
2026-07-24 02:00:15,474 INFO: GET /.env.prod
2026-07-24 02:00:15,474 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:15,474 INFO: GET /.env.stage
2026-07-24 02:00:15,475 INFO: GET /info.php.bak
2026-07-24 02:00:15,475 WARNING: GET /.env.prod -> 404
2026-07-24 02:00:15,476 WARNING: GET /.env.stage -> 404
2026-07-24 02:00:15,476 WARNING: GET /info.php.bak -> 404
2026-07-24 02:00:15,478 INFO: << 404 /.env.prod
2026-07-24 02:00:15,478 INFO: << 404 /.env.stage
2026-07-24 02:00:15,479 INFO: << 404 /info.php.bak
2026-07-24 02:00:16,939 INFO: >> GET /phpinfo.php.bak
2026-07-24 02:00:16,939 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:16,939 INFO: >> GET /.aws/credentials
2026-07-24 02:00:16,939 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:16,939 INFO: >> GET /info.txt
2026-07-24 02:00:16,939 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:16,939 INFO: GET /phpinfo.php.bak
2026-07-24 02:00:16,939 INFO: GET /.aws/credentials
2026-07-24 02:00:16,939 INFO: GET /info.txt
2026-07-24 02:00:16,940 WARNING: GET /phpinfo.php.bak -> 404
2026-07-24 02:00:16,940 WARNING: GET /.aws/credentials -> 404
2026-07-24 02:00:16,941 WARNING: GET /info.txt -> 404
2026-07-24 02:00:16,943 INFO: << 404 /.aws/credentials
2026-07-24 02:00:16,943 INFO: << 404 /info.txt
2026-07-24 02:00:16,943 INFO: << 404 /phpinfo.php.bak
2026-07-24 02:00:17,675 INFO: >> GET /env/.env
2026-07-24 02:00:17,675 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:17,675 INFO: >> GET /config.json
2026-07-24 02:00:17,676 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:17,676 INFO: >> GET /src/.env
2026-07-24 02:00:17,676 INFO: GET /env/.env
2026-07-24 02:00:17,676 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:17,676 INFO: GET /config.json
2026-07-24 02:00:17,676 INFO: GET /src/.env
2026-07-24 02:00:17,677 WARNING: GET /env/.env -> 404
2026-07-24 02:00:17,677 WARNING: GET /config.json -> 404
2026-07-24 02:00:17,677 WARNING: GET /src/.env -> 404
2026-07-24 02:00:17,680 INFO: << 404 /config.json
2026-07-24 02:00:17,680 INFO: << 404 /env/.env
2026-07-24 02:00:17,680 INFO: << 404 /src/.env
2026-07-24 02:00:18,144 INFO: >> GET /.env_copy
2026-07-24 02:00:18,144 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,144 INFO: >> GET /config/app.php
2026-07-24 02:00:18,145 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,145 INFO: GET /.env_copy
2026-07-24 02:00:18,145 INFO: GET /config/app.php
2026-07-24 02:00:18,146 WARNING: GET /.env_copy -> 404
2026-07-24 02:00:18,147 WARNING: GET /config/app.php -> 404
2026-07-24 02:00:18,149 INFO: << 404 /.env_copy
2026-07-24 02:00:18,149 INFO: << 404 /config/app.php
2026-07-24 02:00:18,163 INFO: >> GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-24 02:00:18,163 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,163 INFO: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-24 02:00:18,165 WARNING: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php -> 404
2026-07-24 02:00:18,167 INFO: << 404 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-24 02:00:18,783 INFO: >> GET /env.example
2026-07-24 02:00:18,783 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,783 INFO: >> GET /web/.env
2026-07-24 02:00:18,783 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,783 INFO: >> GET /core/.env
2026-07-24 02:00:18,783 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:18,783 INFO: GET /env.example
2026-07-24 02:00:18,783 INFO: GET /web/.env
2026-07-24 02:00:18,784 INFO: GET /core/.env
2026-07-24 02:00:18,784 WARNING: GET /web/.env -> 404
2026-07-24 02:00:18,785 WARNING: GET /core/.env -> 404
2026-07-24 02:00:18,785 WARNING: GET /env.example -> 404
2026-07-24 02:00:18,787 INFO: << 404 /core/.env
2026-07-24 02:00:18,787 INFO: << 404 /web/.env
2026-07-24 02:00:18,788 INFO: << 404 /env.example
2026-07-24 02:00:19,368 INFO: >> GET /phpinfo.php3
2026-07-24 02:00:19,368 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:19,368 INFO: >> GET /.bashrc
2026-07-24 02:00:19,368 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:19,368 INFO: GET /phpinfo.php3
2026-07-24 02:00:19,368 INFO: GET /.bashrc
2026-07-24 02:00:19,369 WARNING: GET /phpinfo.php3 -> 404
2026-07-24 02:00:19,370 WARNING: GET /.bashrc -> 404
2026-07-24 02:00:19,371 INFO: << 404 /phpinfo.php3
2026-07-24 02:00:19,372 INFO: << 404 /.bashrc
2026-07-24 02:00:20,054 INFO: >> GET /env
2026-07-24 02:00:20,054 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:20,054 INFO: GET /env
2026-07-24 02:00:20,055 WARNING: GET /env -> 404
2026-07-24 02:00:20,058 INFO: << 404 /env
2026-07-24 02:00:20,340 INFO: >> GET /.envrc
2026-07-24 02:00:20,340 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:20,340 INFO: >> GET /
2026-07-24 02:00:20,340 DEBUG: Using selector: EpollSelector
2026-07-24 02:00:20,341 INFO: GET /.envrc
2026-07-24 02:00:20,341 INFO: GET /
2026-07-24 02:00:20,342 WARNING: GET / -> 404
2026-07-24 02:00:20,342 WARNING: GET /.envrc -> 404
2026-07-24 02:00:20,345 INFO: << 404 /
2026-07-24 02:00:20,345 INFO: << 404 /.envrc
2026-07-24 03:12:53,522 INFO: wsgi.py loading...
2026-07-24 03:12:53,522 INFO: Importing app.main...
2026-07-24 03:12:56,125 INFO: app.main imported successfully.
2026-07-24 03:12:56,125 INFO: Running DB init...
2026-07-24 03:12:56,186 INFO: All tables OK.
2026-07-24 03:12:56,325 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 03:12:56,328 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,330 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,333 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,335 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,338 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,341 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 03:12:56,349 INFO: Dip chart data seeded.
2026-07-24 03:12:56,349 INFO: DB init complete.
2026-07-24 03:12:56,349 INFO: wsgi.py ready.
2026-07-24 03:12:56,353 INFO: >> GET /
2026-07-24 03:12:56,354 DEBUG: Using selector: EpollSelector
2026-07-24 03:12:56,365 INFO: GET /
2026-07-24 03:12:56,367 WARNING: GET / -> 404
2026-07-24 03:12:56,376 INFO: << 404 /
2026-07-24 06:25:06,341 INFO: wsgi.py loading...
2026-07-24 06:25:06,342 INFO: Importing app.main...
2026-07-24 06:25:08,240 INFO: app.main imported successfully.
2026-07-24 06:25:08,240 INFO: Running DB init...
2026-07-24 06:25:08,305 INFO: All tables OK.
2026-07-24 06:25:08,447 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 06:25:08,450 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,453 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,456 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,459 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,463 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,466 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:25:08,474 INFO: Dip chart data seeded.
2026-07-24 06:25:08,474 INFO: DB init complete.
2026-07-24 06:25:08,474 INFO: wsgi.py ready.
2026-07-24 06:25:08,477 INFO: >> GET /
2026-07-24 06:25:08,479 DEBUG: Using selector: EpollSelector
2026-07-24 06:25:08,489 INFO: GET /
2026-07-24 06:25:08,492 WARNING: GET / -> 404
2026-07-24 06:25:08,501 INFO: << 404 /
2026-07-24 06:56:24,400 INFO: wsgi.py loading...
2026-07-24 06:56:24,400 INFO: Importing app.main...
2026-07-24 06:56:26,595 INFO: app.main imported successfully.
2026-07-24 06:56:26,595 INFO: Running DB init...
2026-07-24 06:56:26,672 INFO: All tables OK.
2026-07-24 06:56:26,864 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 06:56:26,875 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,880 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,888 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,905 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,909 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,960 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 06:56:26,969 INFO: Dip chart data seeded.
2026-07-24 06:56:26,969 INFO: DB init complete.
2026-07-24 06:56:26,969 INFO: wsgi.py ready.
2026-07-24 06:56:26,972 INFO: >> GET /
2026-07-24 06:56:26,974 DEBUG: Using selector: EpollSelector
2026-07-24 06:56:26,986 INFO: GET /
2026-07-24 06:56:26,988 WARNING: GET / -> 404
2026-07-24 06:56:26,999 INFO: << 404 /
2026-07-24 07:32:53,189 INFO: wsgi.py loading...
2026-07-24 07:32:53,190 INFO: Importing app.main...
2026-07-24 07:32:55,408 INFO: app.main imported successfully.
2026-07-24 07:32:55,408 INFO: Running DB init...
2026-07-24 07:32:55,604 INFO: All tables OK.
2026-07-24 07:32:55,803 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 07:32:55,812 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,820 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,823 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,827 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,841 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,853 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 07:32:55,864 INFO: Dip chart data seeded.
2026-07-24 07:32:55,864 INFO: DB init complete.
2026-07-24 07:32:55,864 INFO: wsgi.py ready.
2026-07-24 07:32:55,868 INFO: >> GET /config
2026-07-24 07:32:55,870 DEBUG: Using selector: EpollSelector
2026-07-24 07:32:55,882 INFO: GET /config
2026-07-24 07:32:55,885 WARNING: GET /config -> 404
2026-07-24 07:32:55,896 INFO: << 404 /config
2026-07-24 07:33:21,381 INFO: >> GET /.env.production
2026-07-24 07:33:21,382 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:21,394 INFO: GET /.env.production
2026-07-24 07:33:21,397 WARNING: GET /.env.production -> 404
2026-07-24 07:33:21,408 INFO: << 404 /.env.production
2026-07-24 07:33:22,965 INFO: >> GET /.env.development
2026-07-24 07:33:22,966 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:22,978 INFO: GET /.env.development
2026-07-24 07:33:22,981 WARNING: GET /.env.development -> 404
2026-07-24 07:33:22,993 INFO: << 404 /.env.development
2026-07-24 07:33:23,406 INFO: >> GET /.env.dev
2026-07-24 07:33:23,406 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:23,406 INFO: GET /.env.dev
2026-07-24 07:33:23,408 WARNING: GET /.env.dev -> 404
2026-07-24 07:33:23,411 INFO: << 404 /.env.dev
2026-07-24 07:33:23,796 INFO: >> GET /.env.prod
2026-07-24 07:33:23,796 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:23,797 INFO: GET /.env.prod
2026-07-24 07:33:23,799 WARNING: GET /.env.prod -> 404
2026-07-24 07:33:23,802 INFO: << 404 /.env.prod
2026-07-24 07:33:24,156 INFO: >> GET /.env.test
2026-07-24 07:33:24,156 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:24,156 INFO: GET /.env.test
2026-07-24 07:33:24,158 WARNING: GET /.env.test -> 404
2026-07-24 07:33:24,161 INFO: << 404 /.env.test
2026-07-24 07:33:24,548 INFO: >> GET /.env.staging
2026-07-24 07:33:24,549 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:24,549 INFO: GET /.env.staging
2026-07-24 07:33:24,550 WARNING: GET /.env.staging -> 404
2026-07-24 07:33:24,554 INFO: << 404 /.env.staging
2026-07-24 07:33:24,926 INFO: >> GET /.env.backup
2026-07-24 07:33:24,926 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:24,927 INFO: GET /.env.backup
2026-07-24 07:33:24,928 WARNING: GET /.env.backup -> 404
2026-07-24 07:33:24,931 INFO: << 404 /.env.backup
2026-07-24 07:33:25,318 INFO: >> GET /.env.save
2026-07-24 07:33:25,318 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:25,318 INFO: GET /.env.save
2026-07-24 07:33:25,319 WARNING: GET /.env.save -> 404
2026-07-24 07:33:25,323 INFO: << 404 /.env.save
2026-07-24 07:33:25,684 INFO: >> GET /.env.old
2026-07-24 07:33:25,684 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:25,684 INFO: GET /.env.old
2026-07-24 07:33:25,686 WARNING: GET /.env.old -> 404
2026-07-24 07:33:25,689 INFO: << 404 /.env.old
2026-07-24 07:33:26,378 INFO: >> GET /.env.bak
2026-07-24 07:33:26,378 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:26,378 INFO: GET /.env.bak
2026-07-24 07:33:26,379 WARNING: GET /.env.bak -> 404
2026-07-24 07:33:26,382 INFO: << 404 /.env.bak
2026-07-24 07:33:26,736 INFO: >> GET /.env.tmp
2026-07-24 07:33:26,736 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:26,737 INFO: GET /.env.tmp
2026-07-24 07:33:26,738 WARNING: GET /.env.tmp -> 404
2026-07-24 07:33:26,741 INFO: << 404 /.env.tmp
2026-07-24 07:33:27,116 INFO: >> GET /.env.swp
2026-07-24 07:33:27,116 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:27,116 INFO: GET /.env.swp
2026-07-24 07:33:27,118 WARNING: GET /.env.swp -> 404
2026-07-24 07:33:27,121 INFO: << 404 /.env.swp
2026-07-24 07:33:27,491 INFO: >> GET /.env~
2026-07-24 07:33:27,491 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:27,491 INFO: GET /.env~
2026-07-24 07:33:27,493 WARNING: GET /.env~ -> 404
2026-07-24 07:33:27,496 INFO: << 404 /.env~
2026-07-24 07:33:27,858 INFO: >> GET /.env.example
2026-07-24 07:33:27,858 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:27,858 INFO: GET /.env.example
2026-07-24 07:33:27,860 WARNING: GET /.env.example -> 404
2026-07-24 07:33:27,863 INFO: << 404 /.env.example
2026-07-24 07:33:28,234 INFO: >> GET /.env.sample
2026-07-24 07:33:28,234 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:28,235 INFO: GET /.env.sample
2026-07-24 07:33:28,236 WARNING: GET /.env.sample -> 404
2026-07-24 07:33:28,239 INFO: << 404 /.env.sample
2026-07-24 07:33:28,640 INFO: >> GET /.env.dist
2026-07-24 07:33:28,640 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:28,641 INFO: GET /.env.dist
2026-07-24 07:33:28,642 WARNING: GET /.env.dist -> 404
2026-07-24 07:33:28,645 INFO: << 404 /.env.dist
2026-07-24 07:33:29,018 INFO: >> GET /.env.template
2026-07-24 07:33:29,018 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:29,019 INFO: GET /.env.template
2026-07-24 07:33:29,020 WARNING: GET /.env.template -> 404
2026-07-24 07:33:29,023 INFO: << 404 /.env.template
2026-07-24 07:33:29,723 INFO: >> GET /.env.production.local
2026-07-24 07:33:29,723 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:29,723 INFO: GET /.env.production.local
2026-07-24 07:33:29,725 WARNING: GET /.env.production.local -> 404
2026-07-24 07:33:29,728 INFO: << 404 /.env.production.local
2026-07-24 07:33:30,143 INFO: >> GET /.env.development.local
2026-07-24 07:33:30,143 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:30,143 INFO: GET /.env.development.local
2026-07-24 07:33:30,145 WARNING: GET /.env.development.local -> 404
2026-07-24 07:33:30,148 INFO: << 404 /.env.development.local
2026-07-24 07:33:30,507 INFO: >> GET /.env.test.local
2026-07-24 07:33:30,507 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:30,507 INFO: GET /.env.test.local
2026-07-24 07:33:30,509 WARNING: GET /.env.test.local -> 404
2026-07-24 07:33:30,512 INFO: << 404 /.env.test.local
2026-07-24 07:33:30,902 INFO: >> GET /.envrc
2026-07-24 07:33:30,902 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:30,902 INFO: GET /.envrc
2026-07-24 07:33:30,904 WARNING: GET /.envrc -> 404
2026-07-24 07:33:30,907 INFO: << 404 /.envrc
2026-07-24 07:33:31,280 INFO: >> GET /.flaskenv
2026-07-24 07:33:31,280 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:31,280 INFO: GET /.flaskenv
2026-07-24 07:33:31,281 WARNING: GET /.flaskenv -> 404
2026-07-24 07:33:31,284 INFO: << 404 /.flaskenv
2026-07-24 07:33:31,653 INFO: >> GET /env
2026-07-24 07:33:31,653 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:31,653 INFO: GET /env
2026-07-24 07:33:31,655 WARNING: GET /env -> 404
2026-07-24 07:33:31,658 INFO: << 404 /env
2026-07-24 07:33:32,033 INFO: >> GET /env.js
2026-07-24 07:33:32,034 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:32,034 INFO: GET /env.js
2026-07-24 07:33:32,035 WARNING: GET /env.js -> 404
2026-07-24 07:33:32,038 INFO: << 404 /env.js
2026-07-24 07:33:32,407 INFO: >> GET /env.json
2026-07-24 07:33:32,407 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:32,407 INFO: GET /env.json
2026-07-24 07:33:32,409 WARNING: GET /env.json -> 404
2026-07-24 07:33:32,411 INFO: << 404 /env.json
2026-07-24 07:33:32,791 INFO: >> GET /app/.env
2026-07-24 07:33:32,791 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:32,791 INFO: GET /app/.env
2026-07-24 07:33:32,793 WARNING: GET /app/.env -> 404
2026-07-24 07:33:32,796 INFO: << 404 /app/.env
2026-07-24 07:33:33,177 INFO: >> GET /src/.env
2026-07-24 07:33:33,177 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:33,177 INFO: GET /src/.env
2026-07-24 07:33:33,179 WARNING: GET /src/.env -> 404
2026-07-24 07:33:33,181 INFO: << 404 /src/.env
2026-07-24 07:33:33,567 INFO: >> GET /config/.env
2026-07-24 07:33:33,567 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:33,568 INFO: GET /config/.env
2026-07-24 07:33:33,569 WARNING: GET /config/.env -> 404
2026-07-24 07:33:33,572 INFO: << 404 /config/.env
2026-07-24 07:33:33,932 INFO: >> GET /backend/.env
2026-07-24 07:33:33,933 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:33,933 INFO: GET /backend/.env
2026-07-24 07:33:33,934 WARNING: GET /backend/.env -> 404
2026-07-24 07:33:33,938 INFO: << 404 /backend/.env
2026-07-24 07:33:34,302 INFO: >> GET /frontend/.env
2026-07-24 07:33:34,302 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:34,303 INFO: GET /frontend/.env
2026-07-24 07:33:34,304 WARNING: GET /frontend/.env -> 404
2026-07-24 07:33:34,309 INFO: << 404 /frontend/.env
2026-07-24 07:33:35,010 INFO: >> GET /api/.env
2026-07-24 07:33:35,010 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:35,010 INFO: GET /api/.env
2026-07-24 07:33:35,011 WARNING: GET /api/.env -> 404
2026-07-24 07:33:35,014 INFO: << 404 /api/.env
2026-07-24 07:33:35,375 INFO: >> GET /server/.env
2026-07-24 07:33:35,375 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:35,375 INFO: GET /server/.env
2026-07-24 07:33:35,377 WARNING: GET /server/.env -> 404
2026-07-24 07:33:35,380 INFO: << 404 /server/.env
2026-07-24 07:33:35,757 INFO: >> GET /client/.env
2026-07-24 07:33:35,757 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:35,757 INFO: GET /client/.env
2026-07-24 07:33:35,759 WARNING: GET /client/.env -> 404
2026-07-24 07:33:35,762 INFO: << 404 /client/.env
2026-07-24 07:33:36,145 INFO: >> GET /web/.env
2026-07-24 07:33:36,145 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:36,145 INFO: GET /web/.env
2026-07-24 07:33:36,147 WARNING: GET /web/.env -> 404
2026-07-24 07:33:36,150 INFO: << 404 /web/.env
2026-07-24 07:33:36,518 INFO: >> GET /public/.env
2026-07-24 07:33:36,519 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:36,519 INFO: GET /public/.env
2026-07-24 07:33:36,520 WARNING: GET /public/.env -> 404
2026-07-24 07:33:36,523 INFO: << 404 /public/.env
2026-07-24 07:33:36,893 INFO: >> GET /private/.env
2026-07-24 07:33:36,893 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:36,893 INFO: GET /private/.env
2026-07-24 07:33:36,895 WARNING: GET /private/.env -> 404
2026-07-24 07:33:36,898 INFO: << 404 /private/.env
2026-07-24 07:33:37,266 INFO: >> GET /var/.env
2026-07-24 07:33:37,266 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:37,266 INFO: GET /var/.env
2026-07-24 07:33:37,268 WARNING: GET /var/.env -> 404
2026-07-24 07:33:37,271 INFO: << 404 /var/.env
2026-07-24 07:33:37,644 INFO: >> GET /docker-compose.yml
2026-07-24 07:33:37,644 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:37,644 INFO: GET /docker-compose.yml
2026-07-24 07:33:37,645 WARNING: GET /docker-compose.yml -> 404
2026-07-24 07:33:37,649 INFO: << 404 /docker-compose.yml
2026-07-24 07:33:38,044 INFO: >> GET /docker-compose.yaml
2026-07-24 07:33:38,044 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:38,044 INFO: GET /docker-compose.yaml
2026-07-24 07:33:38,046 WARNING: GET /docker-compose.yaml -> 404
2026-07-24 07:33:38,052 INFO: << 404 /docker-compose.yaml
2026-07-24 07:33:38,702 INFO: >> GET /docker-compose.override.yml
2026-07-24 07:33:38,702 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:38,703 INFO: GET /docker-compose.override.yml
2026-07-24 07:33:38,704 WARNING: GET /docker-compose.override.yml -> 404
2026-07-24 07:33:38,707 INFO: << 404 /docker-compose.override.yml
2026-07-24 07:33:39,053 INFO: >> GET /docker-compose.dev.yml
2026-07-24 07:33:39,054 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:39,054 INFO: GET /docker-compose.dev.yml
2026-07-24 07:33:39,055 WARNING: GET /docker-compose.dev.yml -> 404
2026-07-24 07:33:39,058 INFO: << 404 /docker-compose.dev.yml
2026-07-24 07:33:39,418 INFO: >> GET /docker-compose.prod.yml
2026-07-24 07:33:39,418 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:39,419 INFO: GET /docker-compose.prod.yml
2026-07-24 07:33:39,420 WARNING: GET /docker-compose.prod.yml -> 404
2026-07-24 07:33:39,423 INFO: << 404 /docker-compose.prod.yml
2026-07-24 07:33:39,792 INFO: >> GET /config.js
2026-07-24 07:33:39,792 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:39,792 INFO: GET /config.js
2026-07-24 07:33:39,794 WARNING: GET /config.js -> 404
2026-07-24 07:33:39,796 INFO: << 404 /config.js
2026-07-24 07:33:40,172 INFO: >> GET /config.json
2026-07-24 07:33:40,172 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:40,172 INFO: GET /config.json
2026-07-24 07:33:40,174 WARNING: GET /config.json -> 404
2026-07-24 07:33:40,178 INFO: << 404 /config.json
2026-07-24 07:33:40,533 INFO: >> GET /settings.js
2026-07-24 07:33:40,533 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:40,533 INFO: GET /settings.js
2026-07-24 07:33:40,535 WARNING: GET /settings.js -> 404
2026-07-24 07:33:40,538 INFO: << 404 /settings.js
2026-07-24 07:33:40,924 INFO: >> GET /settings.json
2026-07-24 07:33:40,924 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:40,924 INFO: GET /settings.json
2026-07-24 07:33:40,925 WARNING: GET /settings.json -> 404
2026-07-24 07:33:40,929 INFO: << 404 /settings.json
2026-07-24 07:33:41,327 INFO: >> GET /secrets.json
2026-07-24 07:33:41,327 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:41,327 INFO: GET /secrets.json
2026-07-24 07:33:41,329 WARNING: GET /secrets.json -> 404
2026-07-24 07:33:41,332 INFO: << 404 /secrets.json
2026-07-24 07:33:42,021 INFO: >> GET /credentials.json
2026-07-24 07:33:42,022 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:42,022 INFO: GET /credentials.json
2026-07-24 07:33:42,023 WARNING: GET /credentials.json -> 404
2026-07-24 07:33:42,027 INFO: << 404 /credentials.json
2026-07-24 07:33:42,448 INFO: >> GET /cdp_api_key.json
2026-07-24 07:33:42,448 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:42,448 INFO: GET /cdp_api_key.json
2026-07-24 07:33:42,450 WARNING: GET /cdp_api_key.json -> 404
2026-07-24 07:33:42,453 INFO: << 404 /cdp_api_key.json
2026-07-24 07:33:42,827 INFO: >> GET /app.js
2026-07-24 07:33:42,827 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:42,827 INFO: GET /app.js
2026-07-24 07:33:42,829 WARNING: GET /app.js -> 404
2026-07-24 07:33:42,843 INFO: << 404 /app.js
2026-07-24 07:33:43,228 INFO: >> GET /main.js
2026-07-24 07:33:43,228 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:43,228 INFO: GET /main.js
2026-07-24 07:33:43,230 WARNING: GET /main.js -> 404
2026-07-24 07:33:43,233 INFO: << 404 /main.js
2026-07-24 07:33:43,584 INFO: >> GET /index.js
2026-07-24 07:33:43,584 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:43,584 INFO: GET /index.js
2026-07-24 07:33:43,586 WARNING: GET /index.js -> 404
2026-07-24 07:33:43,589 INFO: << 404 /index.js
2026-07-24 07:33:43,983 INFO: >> GET /server.js
2026-07-24 07:33:43,983 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:43,983 INFO: GET /server.js
2026-07-24 07:33:43,985 WARNING: GET /server.js -> 404
2026-07-24 07:33:44,002 INFO: << 404 /server.js
2026-07-24 07:33:44,368 INFO: >> GET /bundle.js
2026-07-24 07:33:44,369 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:44,369 INFO: GET /bundle.js
2026-07-24 07:33:44,370 WARNING: GET /bundle.js -> 404
2026-07-24 07:33:44,373 INFO: << 404 /bundle.js
2026-07-24 07:33:44,757 INFO: >> GET /app.bundle.js
2026-07-24 07:33:44,757 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:44,757 INFO: GET /app.bundle.js
2026-07-24 07:33:44,758 WARNING: GET /app.bundle.js -> 404
2026-07-24 07:33:44,761 INFO: << 404 /app.bundle.js
2026-07-24 07:33:45,154 INFO: >> GET /main.bundle.js
2026-07-24 07:33:45,154 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:45,154 INFO: GET /main.bundle.js
2026-07-24 07:33:45,156 WARNING: GET /main.bundle.js -> 404
2026-07-24 07:33:45,159 INFO: << 404 /main.bundle.js
2026-07-24 07:33:45,545 INFO: >> GET /vendor.js
2026-07-24 07:33:45,545 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:45,546 INFO: GET /vendor.js
2026-07-24 07:33:45,548 WARNING: GET /vendor.js -> 404
2026-07-24 07:33:45,551 INFO: << 404 /vendor.js
2026-07-24 07:33:45,956 INFO: >> GET /chunk.js
2026-07-24 07:33:45,956 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:45,956 INFO: GET /chunk.js
2026-07-24 07:33:45,958 WARNING: GET /chunk.js -> 404
2026-07-24 07:33:45,961 INFO: << 404 /chunk.js
2026-07-24 07:33:46,349 INFO: >> GET /static/js/main.js
2026-07-24 07:33:46,349 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:46,349 INFO: GET /static/js/main.js
2026-07-24 07:33:46,351 WARNING: GET /static/js/main.js -> 404
2026-07-24 07:33:46,354 INFO: << 404 /static/js/main.js
2026-07-24 07:33:46,736 INFO: >> GET /static/js/app.js
2026-07-24 07:33:46,736 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:46,736 INFO: GET /static/js/app.js
2026-07-24 07:33:46,737 WARNING: GET /static/js/app.js -> 404
2026-07-24 07:33:46,740 INFO: << 404 /static/js/app.js
2026-07-24 07:33:47,127 INFO: >> GET /static/js/bundle.js
2026-07-24 07:33:47,127 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:47,127 INFO: GET /static/js/bundle.js
2026-07-24 07:33:47,129 WARNING: GET /static/js/bundle.js -> 404
2026-07-24 07:33:47,131 INFO: << 404 /static/js/bundle.js
2026-07-24 07:33:47,539 INFO: >> GET /dist/main.js
2026-07-24 07:33:47,540 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:47,540 INFO: GET /dist/main.js
2026-07-24 07:33:47,541 WARNING: GET /dist/main.js -> 404
2026-07-24 07:33:47,545 INFO: << 404 /dist/main.js
2026-07-24 07:33:47,903 INFO: >> GET /dist/app.js
2026-07-24 07:33:47,903 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:47,904 INFO: GET /dist/app.js
2026-07-24 07:33:47,905 WARNING: GET /dist/app.js -> 404
2026-07-24 07:33:47,908 INFO: << 404 /dist/app.js
2026-07-24 07:33:48,282 INFO: >> GET /dist/bundle.js
2026-07-24 07:33:48,282 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:48,282 INFO: GET /dist/bundle.js
2026-07-24 07:33:48,284 WARNING: GET /dist/bundle.js -> 404
2026-07-24 07:33:48,287 INFO: << 404 /dist/bundle.js
2026-07-24 07:33:48,649 INFO: >> GET /build/static/js/main.js
2026-07-24 07:33:48,649 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:48,649 INFO: GET /build/static/js/main.js
2026-07-24 07:33:48,651 WARNING: GET /build/static/js/main.js -> 404
2026-07-24 07:33:48,654 INFO: << 404 /build/static/js/main.js
2026-07-24 07:33:49,002 INFO: >> GET /assets/index.js
2026-07-24 07:33:49,002 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:49,002 INFO: GET /assets/index.js
2026-07-24 07:33:49,004 WARNING: GET /assets/index.js -> 404
2026-07-24 07:33:49,007 INFO: << 404 /assets/index.js
2026-07-24 07:33:49,355 INFO: >> GET /assets/app.js
2026-07-24 07:33:49,355 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:49,355 INFO: GET /assets/app.js
2026-07-24 07:33:49,357 WARNING: GET /assets/app.js -> 404
2026-07-24 07:33:49,360 INFO: << 404 /assets/app.js
2026-07-24 07:33:49,710 INFO: >> GET /js/app.js
2026-07-24 07:33:49,710 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:49,710 INFO: GET /js/app.js
2026-07-24 07:33:49,712 WARNING: GET /js/app.js -> 404
2026-07-24 07:33:49,715 INFO: << 404 /js/app.js
2026-07-24 07:33:50,081 INFO: >> GET /js/main.js
2026-07-24 07:33:50,081 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:50,081 INFO: GET /js/main.js
2026-07-24 07:33:50,083 WARNING: GET /js/main.js -> 404
2026-07-24 07:33:50,086 INFO: << 404 /js/main.js
2026-07-24 07:33:50,468 INFO: >> GET /settings.py
2026-07-24 07:33:50,468 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:50,468 INFO: GET /settings.py
2026-07-24 07:33:50,470 WARNING: GET /settings.py -> 404
2026-07-24 07:33:50,473 INFO: << 404 /settings.py
2026-07-24 07:33:50,839 INFO: >> GET /config.py
2026-07-24 07:33:50,839 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:50,840 INFO: GET /config.py
2026-07-24 07:33:50,841 WARNING: GET /config.py -> 404
2026-07-24 07:33:50,844 INFO: << 404 /config.py
2026-07-24 07:33:51,195 INFO: >> GET /secrets.py
2026-07-24 07:33:51,195 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:51,195 INFO: GET /secrets.py
2026-07-24 07:33:51,197 WARNING: GET /secrets.py -> 404
2026-07-24 07:33:51,199 INFO: << 404 /secrets.py
2026-07-24 07:33:51,551 INFO: >> GET /config/secrets.yml
2026-07-24 07:33:51,551 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:51,552 INFO: GET /config/secrets.yml
2026-07-24 07:33:51,553 WARNING: GET /config/secrets.yml -> 404
2026-07-24 07:33:51,556 INFO: << 404 /config/secrets.yml
2026-07-24 07:33:51,919 INFO: >> GET /config/master.key
2026-07-24 07:33:51,919 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:51,919 INFO: GET /config/master.key
2026-07-24 07:33:51,920 WARNING: GET /config/master.key -> 404
2026-07-24 07:33:51,932 INFO: << 404 /config/master.key
2026-07-24 07:33:52,288 INFO: >> GET /wp-config.php.bak
2026-07-24 07:33:52,288 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:52,288 INFO: GET /wp-config.php.bak
2026-07-24 07:33:52,290 WARNING: GET /wp-config.php.bak -> 404
2026-07-24 07:33:52,293 INFO: << 404 /wp-config.php.bak
2026-07-24 07:33:52,670 INFO: >> GET /wp-config.php.old
2026-07-24 07:33:52,670 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:52,670 INFO: GET /wp-config.php.old
2026-07-24 07:33:52,671 WARNING: GET /wp-config.php.old -> 404
2026-07-24 07:33:52,674 INFO: << 404 /wp-config.php.old
2026-07-24 07:33:53,025 INFO: >> GET /wp-config.php.save
2026-07-24 07:33:53,025 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:53,025 INFO: GET /wp-config.php.save
2026-07-24 07:33:53,027 WARNING: GET /wp-config.php.save -> 404
2026-07-24 07:33:53,030 INFO: << 404 /wp-config.php.save
2026-07-24 07:33:53,381 INFO: >> GET /wp-config.php.txt
2026-07-24 07:33:53,381 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:53,382 INFO: GET /wp-config.php.txt
2026-07-24 07:33:53,383 WARNING: GET /wp-config.php.txt -> 404
2026-07-24 07:33:53,386 INFO: << 404 /wp-config.php.txt
2026-07-24 07:33:53,774 INFO: >> GET /wp-config.php~
2026-07-24 07:33:53,774 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:53,774 INFO: GET /wp-config.php~
2026-07-24 07:33:53,776 WARNING: GET /wp-config.php~ -> 404
2026-07-24 07:33:53,779 INFO: << 404 /wp-config.php~
2026-07-24 07:33:54,146 INFO: >> GET /config/app.php
2026-07-24 07:33:54,147 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:54,147 INFO: GET /config/app.php
2026-07-24 07:33:54,148 WARNING: GET /config/app.php -> 404
2026-07-24 07:33:54,151 INFO: << 404 /config/app.php
2026-07-24 07:33:54,505 INFO: >> GET /application.properties
2026-07-24 07:33:54,505 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:54,506 INFO: GET /application.properties
2026-07-24 07:33:54,507 WARNING: GET /application.properties -> 404
2026-07-24 07:33:54,510 INFO: << 404 /application.properties
2026-07-24 07:33:54,902 INFO: >> GET /application.yml
2026-07-24 07:33:54,902 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:54,902 INFO: GET /application.yml
2026-07-24 07:33:54,903 WARNING: GET /application.yml -> 404
2026-07-24 07:33:54,906 INFO: << 404 /application.yml
2026-07-24 07:33:55,298 INFO: >> GET /application.yaml
2026-07-24 07:33:55,298 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:55,299 INFO: GET /application.yaml
2026-07-24 07:33:55,300 WARNING: GET /application.yaml -> 404
2026-07-24 07:33:55,303 INFO: << 404 /application.yaml
2026-07-24 07:33:55,688 INFO: >> GET /application-dev.properties
2026-07-24 07:33:55,688 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:55,689 INFO: GET /application-dev.properties
2026-07-24 07:33:55,690 WARNING: GET /application-dev.properties -> 404
2026-07-24 07:33:55,693 INFO: << 404 /application-dev.properties
2026-07-24 07:33:56,056 INFO: >> GET /application-prod.properties
2026-07-24 07:33:56,056 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:56,056 INFO: GET /application-prod.properties
2026-07-24 07:33:56,058 WARNING: GET /application-prod.properties -> 404
2026-07-24 07:33:56,062 INFO: << 404 /application-prod.properties
2026-07-24 07:33:56,431 INFO: >> GET /appsettings.json
2026-07-24 07:33:56,431 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:56,431 INFO: GET /appsettings.json
2026-07-24 07:33:56,433 WARNING: GET /appsettings.json -> 404
2026-07-24 07:33:56,436 INFO: << 404 /appsettings.json
2026-07-24 07:33:56,819 INFO: >> GET /appsettings.Development.json
2026-07-24 07:33:56,819 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:56,819 INFO: GET /appsettings.Development.json
2026-07-24 07:33:56,820 WARNING: GET /appsettings.Development.json -> 404
2026-07-24 07:33:56,823 INFO: << 404 /appsettings.Development.json
2026-07-24 07:33:57,195 INFO: >> GET /appsettings.Production.json
2026-07-24 07:33:57,195 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:57,196 INFO: GET /appsettings.Production.json
2026-07-24 07:33:57,197 WARNING: GET /appsettings.Production.json -> 404
2026-07-24 07:33:57,199 INFO: << 404 /appsettings.Production.json
2026-07-24 07:33:57,575 INFO: >> GET /config.yaml
2026-07-24 07:33:57,575 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:57,575 INFO: GET /config.yaml
2026-07-24 07:33:57,577 WARNING: GET /config.yaml -> 404
2026-07-24 07:33:57,580 INFO: << 404 /config.yaml
2026-07-24 07:33:57,940 INFO: >> GET /config.yml
2026-07-24 07:33:57,941 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:57,941 INFO: GET /config.yml
2026-07-24 07:33:57,942 WARNING: GET /config.yml -> 404
2026-07-24 07:33:57,945 INFO: << 404 /config.yml
2026-07-24 07:33:58,302 INFO: >> GET /config.toml
2026-07-24 07:33:58,302 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:58,302 INFO: GET /config.toml
2026-07-24 07:33:58,304 WARNING: GET /config.toml -> 404
2026-07-24 07:33:58,307 INFO: << 404 /config.toml
2026-07-24 07:33:58,678 INFO: >> GET /serverless.yml
2026-07-24 07:33:58,678 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:58,678 INFO: GET /serverless.yml
2026-07-24 07:33:58,680 WARNING: GET /serverless.yml -> 404
2026-07-24 07:33:58,683 INFO: << 404 /serverless.yml
2026-07-24 07:33:59,080 INFO: >> GET /serverless.yaml
2026-07-24 07:33:59,080 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:59,080 INFO: GET /serverless.yaml
2026-07-24 07:33:59,082 WARNING: GET /serverless.yaml -> 404
2026-07-24 07:33:59,086 INFO: << 404 /serverless.yaml
2026-07-24 07:33:59,439 INFO: >> GET /config/production.json
2026-07-24 07:33:59,439 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:59,439 INFO: GET /config/production.json
2026-07-24 07:33:59,440 WARNING: GET /config/production.json -> 404
2026-07-24 07:33:59,445 INFO: << 404 /config/production.json
2026-07-24 07:33:59,802 INFO: >> GET /config/development.json
2026-07-24 07:33:59,802 DEBUG: Using selector: EpollSelector
2026-07-24 07:33:59,803 INFO: GET /config/development.json
2026-07-24 07:33:59,804 WARNING: GET /config/development.json -> 404
2026-07-24 07:33:59,807 INFO: << 404 /config/development.json
2026-07-24 07:34:00,180 INFO: >> GET /config/default.json
2026-07-24 07:34:00,180 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:00,180 INFO: GET /config/default.json
2026-07-24 07:34:00,182 WARNING: GET /config/default.json -> 404
2026-07-24 07:34:00,185 INFO: << 404 /config/default.json
2026-07-24 07:34:00,543 INFO: >> GET /config/local.json
2026-07-24 07:34:00,543 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:00,544 INFO: GET /config/local.json
2026-07-24 07:34:00,545 WARNING: GET /config/local.json -> 404
2026-07-24 07:34:00,549 INFO: << 404 /config/local.json
2026-07-24 07:34:00,915 INFO: >> GET /conf/settings.json
2026-07-24 07:34:00,915 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:00,916 INFO: GET /conf/settings.json
2026-07-24 07:34:00,917 WARNING: GET /conf/settings.json -> 404
2026-07-24 07:34:00,920 INFO: << 404 /conf/settings.json
2026-07-24 07:34:01,307 INFO: >> GET /data/config.json
2026-07-24 07:34:01,307 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:01,307 INFO: GET /data/config.json
2026-07-24 07:34:01,308 WARNING: GET /data/config.json -> 404
2026-07-24 07:34:01,312 INFO: << 404 /data/config.json
2026-07-24 07:34:01,668 INFO: >> GET /actuator/env
2026-07-24 07:34:01,668 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:01,669 INFO: GET /actuator/env
2026-07-24 07:34:01,670 WARNING: GET /actuator/env -> 404
2026-07-24 07:34:01,674 INFO: << 404 /actuator/env
2026-07-24 07:34:02,052 INFO: >> GET /actuator/configprops
2026-07-24 07:34:02,052 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:02,052 INFO: GET /actuator/configprops
2026-07-24 07:34:02,054 WARNING: GET /actuator/configprops -> 404
2026-07-24 07:34:02,057 INFO: << 404 /actuator/configprops
2026-07-24 07:34:02,433 INFO: >> GET /api/config
2026-07-24 07:34:02,433 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:02,433 INFO: GET /api/config
2026-07-24 07:34:02,435 WARNING: GET /api/config -> 404
2026-07-24 07:34:02,443 INFO: << 404 /api/config
2026-07-24 07:34:02,793 INFO: >> GET /api/settings
2026-07-24 07:34:02,793 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:02,794 INFO: GET /api/settings
2026-07-24 07:34:02,824 WARNING: GET /api/settings -> 401
2026-07-24 07:34:02,838 INFO: << 401 /api/settings
2026-07-24 07:34:03,235 INFO: >> GET /api/env
2026-07-24 07:34:03,235 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:03,235 INFO: GET /api/env
2026-07-24 07:34:03,237 WARNING: GET /api/env -> 404
2026-07-24 07:34:03,246 INFO: << 404 /api/env
2026-07-24 07:34:03,600 INFO: >> GET /backup/.env
2026-07-24 07:34:03,600 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:03,600 INFO: GET /backup/.env
2026-07-24 07:34:03,602 WARNING: GET /backup/.env -> 404
2026-07-24 07:34:03,605 INFO: << 404 /backup/.env
2026-07-24 07:34:03,979 INFO: >> GET /backups/.env
2026-07-24 07:34:03,980 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:03,980 INFO: GET /backups/.env
2026-07-24 07:34:03,981 WARNING: GET /backups/.env -> 404
2026-07-24 07:34:03,984 INFO: << 404 /backups/.env
2026-07-24 07:34:04,690 INFO: >> GET /old/.env
2026-07-24 07:34:04,690 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:04,691 INFO: GET /old/.env
2026-07-24 07:34:04,692 WARNING: GET /old/.env -> 404
2026-07-24 07:34:04,696 INFO: << 404 /old/.env
2026-07-24 07:34:05,063 INFO: >> GET /temp/.env
2026-07-24 07:34:05,063 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:05,063 INFO: GET /temp/.env
2026-07-24 07:34:05,065 WARNING: GET /temp/.env -> 404
2026-07-24 07:34:05,068 INFO: << 404 /temp/.env
2026-07-24 07:34:05,436 INFO: >> GET /tmp/.env
2026-07-24 07:34:05,436 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:05,437 INFO: GET /tmp/.env
2026-07-24 07:34:05,438 WARNING: GET /tmp/.env -> 404
2026-07-24 07:34:05,442 INFO: << 404 /tmp/.env
2026-07-24 07:34:05,837 INFO: >> GET /.streamlit/secrets.toml
2026-07-24 07:34:05,837 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:05,838 INFO: GET /.streamlit/secrets.toml
2026-07-24 07:34:05,839 WARNING: GET /.streamlit/secrets.toml -> 404
2026-07-24 07:34:05,854 INFO: << 404 /.streamlit/secrets.toml
2026-07-24 07:34:06,252 INFO: >> GET /root/.streamlit/secrets.toml
2026-07-24 07:34:06,252 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:06,253 INFO: GET /root/.streamlit/secrets.toml
2026-07-24 07:34:06,254 WARNING: GET /root/.streamlit/secrets.toml -> 404
2026-07-24 07:34:06,257 INFO: << 404 /root/.streamlit/secrets.toml
2026-07-24 07:34:06,627 INFO: >> GET /root/.aws/credentials
2026-07-24 07:34:06,627 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:06,627 INFO: GET /root/.aws/credentials
2026-07-24 07:34:06,628 WARNING: GET /root/.aws/credentials -> 404
2026-07-24 07:34:06,631 INFO: << 404 /root/.aws/credentials
2026-07-24 07:34:06,990 INFO: >> GET /home/ubuntu/.aws/credentials
2026-07-24 07:34:06,990 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:06,990 INFO: GET /home/ubuntu/.aws/credentials
2026-07-24 07:34:06,992 WARNING: GET /home/ubuntu/.aws/credentials -> 404
2026-07-24 07:34:06,995 INFO: << 404 /home/ubuntu/.aws/credentials
2026-07-24 07:34:07,352 INFO: >> GET /home/ec2-user/.aws/credentials
2026-07-24 07:34:07,352 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:07,352 INFO: GET /home/ec2-user/.aws/credentials
2026-07-24 07:34:07,354 WARNING: GET /home/ec2-user/.aws/credentials -> 404
2026-07-24 07:34:07,356 INFO: << 404 /home/ec2-user/.aws/credentials
2026-07-24 07:34:07,717 INFO: >> GET /home/node/.aws/credentials
2026-07-24 07:34:07,717 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:07,717 INFO: GET /home/node/.aws/credentials
2026-07-24 07:34:07,719 WARNING: GET /home/node/.aws/credentials -> 404
2026-07-24 07:34:07,722 INFO: << 404 /home/node/.aws/credentials
2026-07-24 07:34:08,084 INFO: >> GET /terraform.tfvars
2026-07-24 07:34:08,085 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:08,085 INFO: GET /terraform.tfvars
2026-07-24 07:34:08,086 WARNING: GET /terraform.tfvars -> 404
2026-07-24 07:34:08,089 INFO: << 404 /terraform.tfvars
2026-07-24 07:34:08,454 INFO: >> GET /terraform.tfstate
2026-07-24 07:34:08,454 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:08,455 INFO: GET /terraform.tfstate
2026-07-24 07:34:08,456 WARNING: GET /terraform.tfstate -> 404
2026-07-24 07:34:08,459 INFO: << 404 /terraform.tfstate
2026-07-24 07:34:08,839 INFO: >> GET /ecosystem.config.js
2026-07-24 07:34:08,839 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:08,839 INFO: GET /ecosystem.config.js
2026-07-24 07:34:08,840 WARNING: GET /ecosystem.config.js -> 404
2026-07-24 07:34:08,843 INFO: << 404 /ecosystem.config.js
2026-07-24 07:34:09,194 INFO: >> GET /secrets.yaml
2026-07-24 07:34:09,194 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:09,195 INFO: GET /secrets.yaml
2026-07-24 07:34:09,196 WARNING: GET /secrets.yaml -> 404
2026-07-24 07:34:09,199 INFO: << 404 /secrets.yaml
2026-07-24 07:34:09,549 INFO: >> GET /secrets.yml
2026-07-24 07:34:09,549 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:09,549 INFO: GET /secrets.yml
2026-07-24 07:34:09,551 WARNING: GET /secrets.yml -> 404
2026-07-24 07:34:09,554 INFO: << 404 /secrets.yml
2026-07-24 07:34:09,922 INFO: >> GET /.secrets
2026-07-24 07:34:09,922 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:09,922 INFO: GET /.secrets
2026-07-24 07:34:09,923 WARNING: GET /.secrets -> 404
2026-07-24 07:34:09,926 INFO: << 404 /.secrets
2026-07-24 07:34:10,300 INFO: >> GET /.env.vault
2026-07-24 07:34:10,300 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:10,300 INFO: GET /.env.vault
2026-07-24 07:34:10,302 WARNING: GET /.env.vault -> 404
2026-07-24 07:34:10,305 INFO: << 404 /.env.vault
2026-07-24 07:34:10,652 INFO: >> GET /.aws/credentials
2026-07-24 07:34:10,652 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:10,652 INFO: GET /.aws/credentials
2026-07-24 07:34:10,654 WARNING: GET /.aws/credentials -> 404
2026-07-24 07:34:10,657 INFO: << 404 /.aws/credentials
2026-07-24 07:34:11,018 INFO: >> GET /.aws/config
2026-07-24 07:34:11,018 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:11,018 INFO: GET /.aws/config
2026-07-24 07:34:11,019 WARNING: GET /.aws/config -> 404
2026-07-24 07:34:11,022 INFO: << 404 /.aws/config
2026-07-24 07:34:11,397 INFO: >> GET /.docker/config.json
2026-07-24 07:34:11,397 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:11,397 INFO: GET /.docker/config.json
2026-07-24 07:34:11,399 WARNING: GET /.docker/config.json -> 404
2026-07-24 07:34:11,402 INFO: << 404 /.docker/config.json
2026-07-24 07:34:11,748 INFO: >> GET /storage/framework/.env
2026-07-24 07:34:11,748 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:11,748 INFO: GET /storage/framework/.env
2026-07-24 07:34:11,750 WARNING: GET /storage/framework/.env -> 404
2026-07-24 07:34:11,752 INFO: << 404 /storage/framework/.env
2026-07-24 07:34:12,111 INFO: >> GET /laravel/.env
2026-07-24 07:34:12,112 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:12,112 INFO: GET /laravel/.env
2026-07-24 07:34:12,113 WARNING: GET /laravel/.env -> 404
2026-07-24 07:34:12,116 INFO: << 404 /laravel/.env
2026-07-24 07:34:12,770 INFO: >> GET /debug/vars
2026-07-24 07:34:12,770 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:12,770 INFO: GET /debug/vars
2026-07-24 07:34:12,772 WARNING: GET /debug/vars -> 404
2026-07-24 07:34:12,775 INFO: << 404 /debug/vars
2026-07-24 07:34:13,155 INFO: >> GET /.gcp/credentials.json
2026-07-24 07:34:13,155 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:13,156 INFO: GET /.gcp/credentials.json
2026-07-24 07:34:13,157 WARNING: GET /.gcp/credentials.json -> 404
2026-07-24 07:34:13,160 INFO: << 404 /.gcp/credentials.json
2026-07-24 07:34:13,542 INFO: >> GET /.gcp/service-account.json
2026-07-24 07:34:13,543 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:13,543 INFO: GET /.gcp/service-account.json
2026-07-24 07:34:13,544 WARNING: GET /.gcp/service-account.json -> 404
2026-07-24 07:34:13,547 INFO: << 404 /.gcp/service-account.json
2026-07-24 07:34:13,910 INFO: >> GET /gcp-credentials.json
2026-07-24 07:34:13,910 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:13,910 INFO: GET /gcp-credentials.json
2026-07-24 07:34:13,911 WARNING: GET /gcp-credentials.json -> 404
2026-07-24 07:34:13,918 INFO: << 404 /gcp-credentials.json
2026-07-24 07:34:14,303 INFO: >> GET /gcp-service-account.json
2026-07-24 07:34:14,303 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:14,304 INFO: GET /gcp-service-account.json
2026-07-24 07:34:14,305 WARNING: GET /gcp-service-account.json -> 404
2026-07-24 07:34:14,308 INFO: << 404 /gcp-service-account.json
2026-07-24 07:34:14,680 INFO: >> GET /service-account.json
2026-07-24 07:34:14,680 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:14,680 INFO: GET /service-account.json
2026-07-24 07:34:14,681 WARNING: GET /service-account.json -> 404
2026-07-24 07:34:14,684 INFO: << 404 /service-account.json
2026-07-24 07:34:15,036 INFO: >> GET /google-credentials.json
2026-07-24 07:34:15,036 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:15,036 INFO: GET /google-credentials.json
2026-07-24 07:34:15,038 WARNING: GET /google-credentials.json -> 404
2026-07-24 07:34:15,041 INFO: << 404 /google-credentials.json
2026-07-24 07:34:15,410 INFO: >> GET /google-cloud-key.json
2026-07-24 07:34:15,410 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:15,411 INFO: GET /google-cloud-key.json
2026-07-24 07:34:15,412 WARNING: GET /google-cloud-key.json -> 404
2026-07-24 07:34:15,417 INFO: << 404 /google-cloud-key.json
2026-07-24 07:34:15,767 INFO: >> GET /firebase-adminsdk.json
2026-07-24 07:34:15,768 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:15,768 INFO: GET /firebase-adminsdk.json
2026-07-24 07:34:15,769 WARNING: GET /firebase-adminsdk.json -> 404
2026-07-24 07:34:15,772 INFO: << 404 /firebase-adminsdk.json
2026-07-24 07:34:16,128 INFO: >> GET /firebase-credentials.json
2026-07-24 07:34:16,128 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:16,128 INFO: GET /firebase-credentials.json
2026-07-24 07:34:16,130 WARNING: GET /firebase-credentials.json -> 404
2026-07-24 07:34:16,135 INFO: << 404 /firebase-credentials.json
2026-07-24 07:34:16,512 INFO: >> GET /root/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:16,512 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:16,513 INFO: GET /root/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:16,514 WARNING: GET /root/.config/gcloud/application_default_credentials.json -> 404
2026-07-24 07:34:16,517 INFO: << 404 /root/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:16,871 INFO: >> GET /root/.config/gcloud/credentials.db
2026-07-24 07:34:16,871 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:16,872 INFO: GET /root/.config/gcloud/credentials.db
2026-07-24 07:34:16,873 WARNING: GET /root/.config/gcloud/credentials.db -> 404
2026-07-24 07:34:16,876 INFO: << 404 /root/.config/gcloud/credentials.db
2026-07-24 07:34:17,242 INFO: >> GET /home/ubuntu/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,242 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:17,243 INFO: GET /home/ubuntu/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,245 WARNING: GET /home/ubuntu/.config/gcloud/application_default_credentials.json -> 404
2026-07-24 07:34:17,248 INFO: << 404 /home/ubuntu/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,598 INFO: >> GET /home/node/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,598 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:17,599 INFO: GET /home/node/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,600 WARNING: GET /home/node/.config/gcloud/application_default_credentials.json -> 404
2026-07-24 07:34:17,602 INFO: << 404 /home/node/.config/gcloud/application_default_credentials.json
2026-07-24 07:34:17,949 INFO: >> GET /app/credentials.json
2026-07-24 07:34:17,949 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:17,950 INFO: GET /app/credentials.json
2026-07-24 07:34:17,951 WARNING: GET /app/credentials.json -> 404
2026-07-24 07:34:17,954 INFO: << 404 /app/credentials.json
2026-07-24 07:34:18,313 INFO: >> GET /app/service-account.json
2026-07-24 07:34:18,313 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:18,314 INFO: GET /app/service-account.json
2026-07-24 07:34:18,315 WARNING: GET /app/service-account.json -> 404
2026-07-24 07:34:18,318 INFO: << 404 /app/service-account.json
2026-07-24 07:34:18,680 INFO: >> GET /config/gcp.json
2026-07-24 07:34:18,680 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:18,681 INFO: GET /config/gcp.json
2026-07-24 07:34:18,682 WARNING: GET /config/gcp.json -> 404
2026-07-24 07:34:18,684 INFO: << 404 /config/gcp.json
2026-07-24 07:34:19,042 INFO: >> GET /root/.config/hcloud/cli.toml
2026-07-24 07:34:19,042 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:19,043 INFO: GET /root/.config/hcloud/cli.toml
2026-07-24 07:34:19,044 WARNING: GET /root/.config/hcloud/cli.toml -> 404
2026-07-24 07:34:19,047 INFO: << 404 /root/.config/hcloud/cli.toml
2026-07-24 07:34:19,395 INFO: >> GET /home/ubuntu/.config/hcloud/cli.toml
2026-07-24 07:34:19,395 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:19,396 INFO: GET /home/ubuntu/.config/hcloud/cli.toml
2026-07-24 07:34:19,397 WARNING: GET /home/ubuntu/.config/hcloud/cli.toml -> 404
2026-07-24 07:34:19,400 INFO: << 404 /home/ubuntu/.config/hcloud/cli.toml
2026-07-24 07:34:19,786 INFO: >> GET /.hcloud.toml
2026-07-24 07:34:19,786 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:19,787 INFO: GET /.hcloud.toml
2026-07-24 07:34:19,788 WARNING: GET /.hcloud.toml -> 404
2026-07-24 07:34:19,791 INFO: << 404 /.hcloud.toml
2026-07-24 07:34:20,143 INFO: >> GET /hcloud.yml
2026-07-24 07:34:20,143 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:20,143 INFO: GET /hcloud.yml
2026-07-24 07:34:20,145 WARNING: GET /hcloud.yml -> 404
2026-07-24 07:34:20,149 INFO: << 404 /hcloud.yml
2026-07-24 07:34:20,530 INFO: >> GET /root/.config/linode-cli
2026-07-24 07:34:20,531 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:20,531 INFO: GET /root/.config/linode-cli
2026-07-24 07:34:20,532 WARNING: GET /root/.config/linode-cli -> 404
2026-07-24 07:34:20,535 INFO: << 404 /root/.config/linode-cli
2026-07-24 07:34:20,887 INFO: >> GET /home/ubuntu/.config/linode-cli
2026-07-24 07:34:20,888 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:20,888 INFO: GET /home/ubuntu/.config/linode-cli
2026-07-24 07:34:20,890 WARNING: GET /home/ubuntu/.config/linode-cli -> 404
2026-07-24 07:34:20,893 INFO: << 404 /home/ubuntu/.config/linode-cli
2026-07-24 07:34:21,247 INFO: >> GET /.linode-cli
2026-07-24 07:34:21,248 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:21,248 INFO: GET /.linode-cli
2026-07-24 07:34:21,250 WARNING: GET /.linode-cli -> 404
2026-07-24 07:34:21,253 INFO: << 404 /.linode-cli
2026-07-24 07:34:21,604 INFO: >> GET /root/.vultr-cli.yaml
2026-07-24 07:34:21,604 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:21,605 INFO: GET /root/.vultr-cli.yaml
2026-07-24 07:34:21,606 WARNING: GET /root/.vultr-cli.yaml -> 404
2026-07-24 07:34:21,609 INFO: << 404 /root/.vultr-cli.yaml
2026-07-24 07:34:21,955 INFO: >> GET /home/ubuntu/.vultr-cli.yaml
2026-07-24 07:34:21,955 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:21,956 INFO: GET /home/ubuntu/.vultr-cli.yaml
2026-07-24 07:34:21,957 WARNING: GET /home/ubuntu/.vultr-cli.yaml -> 404
2026-07-24 07:34:21,960 INFO: << 404 /home/ubuntu/.vultr-cli.yaml
2026-07-24 07:34:22,319 INFO: >> GET /.vultr-cli.yaml
2026-07-24 07:34:22,319 DEBUG: Using selector: EpollSelector
2026-07-24 07:34:22,320 INFO: GET /.vultr-cli.yaml
2026-07-24 07:34:22,321 WARNING: GET /.vultr-cli.yaml -> 404
2026-07-24 07:34:22,324 INFO: << 404 /.vultr-cli.yaml
2026-07-24 12:23:46,285 INFO: wsgi.py loading...
2026-07-24 12:23:46,286 INFO: Importing app.main...
2026-07-24 12:23:50,248 INFO: app.main imported successfully.
2026-07-24 12:23:50,248 INFO: Running DB init...
2026-07-24 12:23:50,337 INFO: All tables OK.
2026-07-24 12:23:50,485 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 12:23:50,490 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,493 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,496 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,499 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,502 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,505 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 12:23:50,524 INFO: Dip chart data seeded.
2026-07-24 12:23:50,524 INFO: DB init complete.
2026-07-24 12:23:50,524 INFO: wsgi.py ready.
2026-07-24 12:23:50,528 INFO: >> GET /
2026-07-24 12:23:50,529 DEBUG: Using selector: EpollSelector
2026-07-24 12:23:50,540 INFO: GET /
2026-07-24 12:23:50,542 WARNING: GET / -> 404
2026-07-24 12:23:50,551 INFO: << 404 /
2026-07-24 16:47:35,961 INFO: wsgi.py loading...
2026-07-24 16:47:35,961 INFO: Importing app.main...
2026-07-24 16:47:40,026 INFO: app.main imported successfully.
2026-07-24 16:47:40,026 INFO: Running DB init...
2026-07-24 16:47:40,108 INFO: All tables OK.
2026-07-24 16:47:40,297 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 16:47:40,322 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,340 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,365 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,372 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,384 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,397 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 16:47:40,407 INFO: Dip chart data seeded.
2026-07-24 16:47:40,407 INFO: DB init complete.
2026-07-24 16:47:40,407 INFO: wsgi.py ready.
2026-07-24 16:47:40,411 INFO: >> GET /license.txt
2026-07-24 16:47:40,412 DEBUG: Using selector: EpollSelector
2026-07-24 16:47:40,425 INFO: GET /license.txt
2026-07-24 16:47:40,428 WARNING: GET /license.txt -> 404
2026-07-24 16:47:40,440 INFO: << 404 /license.txt
2026-07-24 21:52:49,849 INFO: wsgi.py loading...
2026-07-24 21:52:49,850 INFO: Importing app.main...
2026-07-24 21:52:52,042 INFO: app.main imported successfully.
2026-07-24 21:52:52,043 INFO: Running DB init...
2026-07-24 21:52:52,106 INFO: All tables OK.
2026-07-24 21:52:52,241 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 21:52:52,244 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,246 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,249 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,252 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,254 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,257 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 21:52:52,265 INFO: Dip chart data seeded.
2026-07-24 21:52:52,265 INFO: DB init complete.
2026-07-24 21:52:52,265 INFO: wsgi.py ready.
2026-07-24 21:52:52,269 INFO: >> GET /
2026-07-24 21:52:52,270 DEBUG: Using selector: EpollSelector
2026-07-24 21:52:52,280 INFO: GET /
2026-07-24 21:52:52,282 WARNING: GET / -> 404
2026-07-24 21:52:52,291 INFO: << 404 /
2026-07-24 21:58:44,052 INFO: >> GET /
2026-07-24 21:58:44,054 DEBUG: Using selector: EpollSelector
2026-07-24 21:58:44,064 INFO: GET /
2026-07-24 21:58:44,067 WARNING: GET / -> 404
2026-07-24 21:58:44,096 INFO: << 404 /
2026-07-24 23:36:21,854 INFO: wsgi.py loading...
2026-07-24 23:36:21,854 INFO: Importing app.main...
2026-07-24 23:36:23,693 INFO: app.main imported successfully.
2026-07-24 23:36:23,693 INFO: Running DB init...
2026-07-24 23:36:23,764 INFO: All tables OK.
2026-07-24 23:36:23,907 INFO: Migration OK: allowances ENUM+DAILY
2026-07-24 23:36:23,909 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,912 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,915 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,917 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,920 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,923 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-24 23:36:23,931 INFO: Dip chart data seeded.
2026-07-24 23:36:23,931 INFO: DB init complete.
2026-07-24 23:36:23,931 INFO: wsgi.py ready.
2026-07-24 23:36:23,935 INFO: >> GET /
2026-07-24 23:36:23,936 DEBUG: Using selector: EpollSelector
2026-07-24 23:36:23,948 INFO: GET /
2026-07-24 23:36:23,951 WARNING: GET / -> 404
2026-07-24 23:36:23,962 INFO: << 404 /
2026-07-24 23:36:25,309 INFO: >> GET /favicon.ico
2026-07-24 23:36:25,310 DEBUG: Using selector: EpollSelector
2026-07-24 23:36:25,321 INFO: GET /favicon.ico
2026-07-24 23:36:25,324 WARNING: GET /favicon.ico -> 404
2026-07-24 23:36:25,333 INFO: << 404 /favicon.ico
2026-07-25 02:23:01,981 INFO: wsgi.py loading...
2026-07-25 02:23:01,981 INFO: Importing app.main...
2026-07-25 02:23:05,036 INFO: app.main imported successfully.
2026-07-25 02:23:05,036 INFO: Running DB init...
2026-07-25 02:23:05,132 INFO: All tables OK.
2026-07-25 02:23:05,273 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 02:23:05,276 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,279 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,281 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,290 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,293 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,296 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 02:23:05,303 INFO: Dip chart data seeded.
2026-07-25 02:23:05,303 INFO: DB init complete.
2026-07-25 02:23:05,303 INFO: wsgi.py ready.
2026-07-25 02:23:05,306 INFO: >> GET /
2026-07-25 02:23:05,307 DEBUG: Using selector: EpollSelector
2026-07-25 02:23:05,318 INFO: GET /
2026-07-25 02:23:05,320 WARNING: GET / -> 404
2026-07-25 02:23:05,329 INFO: << 404 /
2026-07-25 05:51:27,893 INFO: wsgi.py loading...
2026-07-25 05:51:27,894 INFO: Importing app.main...
2026-07-25 05:51:29,809 INFO: app.main imported successfully.
2026-07-25 05:51:29,810 INFO: Running DB init...
2026-07-25 05:51:29,878 INFO: All tables OK.
2026-07-25 05:51:30,029 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 05:51:30,038 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,042 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,046 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,051 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,054 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,063 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 05:51:30,071 INFO: Dip chart data seeded.
2026-07-25 05:51:30,071 INFO: DB init complete.
2026-07-25 05:51:30,072 INFO: wsgi.py ready.
2026-07-25 05:51:30,075 INFO: >> GET /v1/metadata
2026-07-25 05:51:30,077 DEBUG: Using selector: EpollSelector
2026-07-25 05:51:30,089 INFO: GET /v1/metadata
2026-07-25 05:51:30,092 WARNING: GET /v1/metadata -> 404
2026-07-25 05:51:30,104 INFO: << 404 /v1/metadata
2026-07-25 05:51:53,594 INFO: >> GET /v1/metadata
2026-07-25 05:51:53,595 DEBUG: Using selector: EpollSelector
2026-07-25 05:51:53,607 INFO: GET /v1/metadata
2026-07-25 05:51:53,610 WARNING: GET /v1/metadata -> 404
2026-07-25 05:51:53,621 INFO: << 404 /v1/metadata
2026-07-25 07:15:57,220 INFO: wsgi.py loading...
2026-07-25 07:15:57,220 INFO: Importing app.main...
2026-07-25 07:16:00,145 INFO: app.main imported successfully.
2026-07-25 07:16:00,145 INFO: Running DB init...
2026-07-25 07:16:00,231 INFO: All tables OK.
2026-07-25 07:16:00,366 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 07:16:00,369 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,372 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,377 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,380 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,383 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,386 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:16:00,395 INFO: Dip chart data seeded.
2026-07-25 07:16:00,395 INFO: DB init complete.
2026-07-25 07:16:00,395 INFO: wsgi.py ready.
2026-07-25 07:16:00,398 INFO: >> GET /license.txt
2026-07-25 07:16:00,400 DEBUG: Using selector: EpollSelector
2026-07-25 07:16:00,412 INFO: GET /license.txt
2026-07-25 07:16:00,415 WARNING: GET /license.txt -> 404
2026-07-25 07:16:00,425 INFO: << 404 /license.txt
2026-07-25 07:47:43,660 INFO: wsgi.py loading...
2026-07-25 07:47:43,660 INFO: Importing app.main...
2026-07-25 07:47:45,530 INFO: app.main imported successfully.
2026-07-25 07:47:45,530 INFO: Running DB init...
2026-07-25 07:47:45,595 INFO: All tables OK.
2026-07-25 07:47:45,732 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 07:47:45,735 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,738 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,740 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,742 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,745 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,748 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 07:47:45,768 INFO: Dip chart data seeded.
2026-07-25 07:47:45,769 INFO: DB init complete.
2026-07-25 07:47:45,769 INFO: wsgi.py ready.
2026-07-25 07:47:45,773 INFO: >> POST /
2026-07-25 07:47:45,774 DEBUG: Using selector: EpollSelector
2026-07-25 07:47:45,786 INFO: POST /
2026-07-25 07:47:45,789 WARNING: POST / -> 404
2026-07-25 07:47:45,800 INFO: << 404 /
2026-07-25 07:47:49,420 INFO: >> GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 07:47:49,421 DEBUG: Using selector: EpollSelector
2026-07-25 07:47:49,432 INFO: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 07:47:49,434 WARNING: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php -> 404
2026-07-25 07:47:49,444 INFO: << 404 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 11:45:10,409 INFO: wsgi.py loading...
2026-07-25 11:45:10,409 INFO: Importing app.main...
2026-07-25 11:45:12,332 INFO: app.main imported successfully.
2026-07-25 11:45:12,332 INFO: Running DB init...
2026-07-25 11:45:12,397 INFO: All tables OK.
2026-07-25 11:45:12,554 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 11:45:12,557 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,560 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,562 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,565 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,568 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,570 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 11:45:12,579 INFO: Dip chart data seeded.
2026-07-25 11:45:12,579 INFO: DB init complete.
2026-07-25 11:45:12,579 INFO: wsgi.py ready.
2026-07-25 11:45:12,583 INFO: >> GET /
2026-07-25 11:45:12,584 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:12,595 INFO: GET /
2026-07-25 11:45:12,598 WARNING: GET / -> 404
2026-07-25 11:45:12,608 INFO: << 404 /
2026-07-25 11:45:12,898 INFO: >> POST /
2026-07-25 11:45:12,898 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:12,899 INFO: POST /
2026-07-25 11:45:12,900 WARNING: POST / -> 404
2026-07-25 11:45:12,903 INFO: << 404 /
2026-07-25 11:45:13,750 INFO: >> POST /
2026-07-25 11:45:13,752 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:13,763 INFO: POST /
2026-07-25 11:45:13,765 WARNING: POST / -> 404
2026-07-25 11:45:13,776 INFO: << 404 /
2026-07-25 11:45:14,052 INFO: >> POST /
2026-07-25 11:45:14,052 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:14,053 INFO: POST /
2026-07-25 11:45:14,054 WARNING: POST / -> 404
2026-07-25 11:45:14,057 INFO: << 404 /
2026-07-25 11:45:14,609 INFO: >> POST /
2026-07-25 11:45:14,609 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:14,610 INFO: POST /
2026-07-25 11:45:14,611 WARNING: POST / -> 404
2026-07-25 11:45:14,614 INFO: << 404 /
2026-07-25 11:45:15,168 INFO: >> GET /.env.local
2026-07-25 11:45:15,168 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:15,168 INFO: GET /.env.local
2026-07-25 11:45:15,169 WARNING: GET /.env.local -> 404
2026-07-25 11:45:15,173 INFO: << 404 /.env.local
2026-07-25 11:45:15,450 INFO: >> GET /.env.production
2026-07-25 11:45:15,450 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:15,450 INFO: GET /.env.production
2026-07-25 11:45:15,451 WARNING: GET /.env.production -> 404
2026-07-25 11:45:15,454 INFO: << 404 /.env.production
2026-07-25 11:45:15,730 INFO: >> GET /.env.staging
2026-07-25 11:45:15,731 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:15,731 INFO: GET /.env.staging
2026-07-25 11:45:15,732 WARNING: GET /.env.staging -> 404
2026-07-25 11:45:15,735 INFO: << 404 /.env.staging
2026-07-25 11:45:16,012 INFO: >> GET /.env.development
2026-07-25 11:45:16,012 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:16,013 INFO: GET /.env.development
2026-07-25 11:45:16,014 WARNING: GET /.env.development -> 404
2026-07-25 11:45:16,017 INFO: << 404 /.env.development
2026-07-25 11:45:16,293 INFO: >> GET /.env.test
2026-07-25 11:45:16,294 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:16,294 INFO: GET /.env.test
2026-07-25 11:45:16,295 WARNING: GET /.env.test -> 404
2026-07-25 11:45:16,299 INFO: << 404 /.env.test
2026-07-25 11:45:16,576 INFO: >> GET /.env.remote
2026-07-25 11:45:16,576 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:16,577 INFO: GET /.env.remote
2026-07-25 11:45:16,578 WARNING: GET /.env.remote -> 404
2026-07-25 11:45:16,581 INFO: << 404 /.env.remote
2026-07-25 11:45:16,858 INFO: >> GET /.env.bak
2026-07-25 11:45:16,858 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:16,859 INFO: GET /.env.bak
2026-07-25 11:45:16,860 WARNING: GET /.env.bak -> 404
2026-07-25 11:45:16,862 INFO: << 404 /.env.bak
2026-07-25 11:45:17,139 INFO: >> GET /.env.backup
2026-07-25 11:45:17,139 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:17,139 INFO: GET /.env.backup
2026-07-25 11:45:17,141 WARNING: GET /.env.backup -> 404
2026-07-25 11:45:17,143 INFO: << 404 /.env.backup
2026-07-25 11:45:17,420 INFO: >> GET /.env.save
2026-07-25 11:45:17,420 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:17,420 INFO: GET /.env.save
2026-07-25 11:45:17,421 WARNING: GET /.env.save -> 404
2026-07-25 11:45:17,424 INFO: << 404 /.env.save
2026-07-25 11:45:17,701 INFO: >> GET /.env.old
2026-07-25 11:45:17,701 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:17,701 INFO: GET /.env.old
2026-07-25 11:45:17,702 WARNING: GET /.env.old -> 404
2026-07-25 11:45:17,704 INFO: << 404 /.env.old
2026-07-25 11:45:17,981 INFO: >> GET /.env.sample
2026-07-25 11:45:17,981 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:17,981 INFO: GET /.env.sample
2026-07-25 11:45:17,982 WARNING: GET /.env.sample -> 404
2026-07-25 11:45:17,985 INFO: << 404 /.env.sample
2026-07-25 11:45:18,261 INFO: >> GET /.env.example
2026-07-25 11:45:18,261 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:18,262 INFO: GET /.env.example
2026-07-25 11:45:18,263 WARNING: GET /.env.example -> 404
2026-07-25 11:45:18,265 INFO: << 404 /.env.example
2026-07-25 11:45:18,542 INFO: >> GET /.env.dev
2026-07-25 11:45:18,542 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:18,542 INFO: GET /.env.dev
2026-07-25 11:45:18,543 WARNING: GET /.env.dev -> 404
2026-07-25 11:45:18,546 INFO: << 404 /.env.dev
2026-07-25 11:45:18,823 INFO: >> GET /.env.prod
2026-07-25 11:45:18,823 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:18,823 INFO: GET /.env.prod
2026-07-25 11:45:18,824 WARNING: GET /.env.prod -> 404
2026-07-25 11:45:18,827 INFO: << 404 /.env.prod
2026-07-25 11:45:19,103 INFO: >> GET /.env.stage
2026-07-25 11:45:19,103 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:19,104 INFO: GET /.env.stage
2026-07-25 11:45:19,105 WARNING: GET /.env.stage -> 404
2026-07-25 11:45:19,108 INFO: << 404 /.env.stage
2026-07-25 11:45:19,386 INFO: >> GET /.env.ci
2026-07-25 11:45:19,386 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:19,386 INFO: GET /.env.ci
2026-07-25 11:45:19,388 WARNING: GET /.env.ci -> 404
2026-07-25 11:45:19,390 INFO: << 404 /.env.ci
2026-07-25 11:45:19,667 INFO: >> GET /.env.docker
2026-07-25 11:45:19,667 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:19,667 INFO: GET /.env.docker
2026-07-25 11:45:19,669 WARNING: GET /.env.docker -> 404
2026-07-25 11:45:19,671 INFO: << 404 /.env.docker
2026-07-25 11:45:19,949 INFO: >> GET /.env.live
2026-07-25 11:45:19,949 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:19,949 INFO: GET /.env.live
2026-07-25 11:45:19,950 WARNING: GET /.env.live -> 404
2026-07-25 11:45:19,953 INFO: << 404 /.env.live
2026-07-25 11:45:20,229 INFO: >> GET /.env.preprod
2026-07-25 11:45:20,229 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:20,230 INFO: GET /.env.preprod
2026-07-25 11:45:20,231 WARNING: GET /.env.preprod -> 404
2026-07-25 11:45:20,234 INFO: << 404 /.env.preprod
2026-07-25 11:45:20,510 INFO: >> GET /.env.uat
2026-07-25 11:45:20,510 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:20,510 INFO: GET /.env.uat
2026-07-25 11:45:20,512 WARNING: GET /.env.uat -> 404
2026-07-25 11:45:20,514 INFO: << 404 /.env.uat
2026-07-25 11:45:20,792 INFO: >> GET /.env.dist
2026-07-25 11:45:20,793 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:20,793 INFO: GET /.env.dist
2026-07-25 11:45:20,794 WARNING: GET /.env.dist -> 404
2026-07-25 11:45:20,797 INFO: << 404 /.env.dist
2026-07-25 11:45:21,073 INFO: >> GET /.env.swp
2026-07-25 11:45:21,073 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:21,074 INFO: GET /.env.swp
2026-07-25 11:45:21,075 WARNING: GET /.env.swp -> 404
2026-07-25 11:45:21,078 INFO: << 404 /.env.swp
2026-07-25 11:45:21,354 INFO: >> GET /.env~
2026-07-25 11:45:21,355 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:21,355 INFO: GET /.env~
2026-07-25 11:45:21,356 WARNING: GET /.env~ -> 404
2026-07-25 11:45:21,359 INFO: << 404 /.env~
2026-07-25 11:45:21,635 INFO: >> GET /.env1
2026-07-25 11:45:21,636 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:21,636 INFO: GET /.env1
2026-07-25 11:45:21,637 WARNING: GET /.env1 -> 404
2026-07-25 11:45:21,639 INFO: << 404 /.env1
2026-07-25 11:45:21,917 INFO: >> GET /.env2
2026-07-25 11:45:21,917 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:21,917 INFO: GET /.env2
2026-07-25 11:45:21,918 WARNING: GET /.env2 -> 404
2026-07-25 11:45:21,921 INFO: << 404 /.env2
2026-07-25 11:45:22,198 INFO: >> GET /.env_copy
2026-07-25 11:45:22,198 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:22,199 INFO: GET /.env_copy
2026-07-25 11:45:22,200 WARNING: GET /.env_copy -> 404
2026-07-25 11:45:22,202 INFO: << 404 /.env_copy
2026-07-25 11:45:22,479 INFO: >> GET /.env.txt
2026-07-25 11:45:22,480 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:22,480 INFO: GET /.env.txt
2026-07-25 11:45:22,481 WARNING: GET /.env.txt -> 404
2026-07-25 11:45:22,484 INFO: << 404 /.env.txt
2026-07-25 11:45:22,761 INFO: >> GET /.env.json
2026-07-25 11:45:22,761 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:22,761 INFO: GET /.env.json
2026-07-25 11:45:22,763 WARNING: GET /.env.json -> 404
2026-07-25 11:45:22,765 INFO: << 404 /.env.json
2026-07-25 11:45:23,042 INFO: >> GET /.env.yaml
2026-07-25 11:45:23,042 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:23,043 INFO: GET /.env.yaml
2026-07-25 11:45:23,044 WARNING: GET /.env.yaml -> 404
2026-07-25 11:45:23,047 INFO: << 404 /.env.yaml
2026-07-25 11:45:23,323 INFO: >> GET /.env.yml
2026-07-25 11:45:23,323 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:23,324 INFO: GET /.env.yml
2026-07-25 11:45:23,325 WARNING: GET /.env.yml -> 404
2026-07-25 11:45:23,328 INFO: << 404 /.env.yml
2026-07-25 11:45:23,604 INFO: >> GET /app/.env
2026-07-25 11:45:23,604 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:23,605 INFO: GET /app/.env
2026-07-25 11:45:23,606 WARNING: GET /app/.env -> 404
2026-07-25 11:45:23,608 INFO: << 404 /app/.env
2026-07-25 11:45:23,885 INFO: >> GET /apps/.env
2026-07-25 11:45:23,885 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:23,885 INFO: GET /apps/.env
2026-07-25 11:45:23,886 WARNING: GET /apps/.env -> 404
2026-07-25 11:45:23,889 INFO: << 404 /apps/.env
2026-07-25 11:45:24,166 INFO: >> GET /api/.env
2026-07-25 11:45:24,166 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:24,166 INFO: GET /api/.env
2026-07-25 11:45:24,168 WARNING: GET /api/.env -> 404
2026-07-25 11:45:24,170 INFO: << 404 /api/.env
2026-07-25 11:45:24,447 INFO: >> GET /web/.env
2026-07-25 11:45:24,447 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:24,447 INFO: GET /web/.env
2026-07-25 11:45:24,448 WARNING: GET /web/.env -> 404
2026-07-25 11:45:24,451 INFO: << 404 /web/.env
2026-07-25 11:45:24,727 INFO: >> GET /site/.env
2026-07-25 11:45:24,727 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:24,728 INFO: GET /site/.env
2026-07-25 11:45:24,729 WARNING: GET /site/.env -> 404
2026-07-25 11:45:24,732 INFO: << 404 /site/.env
2026-07-25 11:45:25,008 INFO: >> GET /public/.env
2026-07-25 11:45:25,008 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:25,008 INFO: GET /public/.env
2026-07-25 11:45:25,010 WARNING: GET /public/.env -> 404
2026-07-25 11:45:25,012 INFO: << 404 /public/.env
2026-07-25 11:45:25,292 INFO: >> GET /admin/.env
2026-07-25 11:45:25,292 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:25,293 INFO: GET /admin/.env
2026-07-25 11:45:25,294 WARNING: GET /admin/.env -> 404
2026-07-25 11:45:25,312 INFO: << 404 /admin/.env
2026-07-25 11:45:25,590 INFO: >> GET /backend/.env
2026-07-25 11:45:25,591 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:25,591 INFO: GET /backend/.env
2026-07-25 11:45:25,592 WARNING: GET /backend/.env -> 404
2026-07-25 11:45:25,595 INFO: << 404 /backend/.env
2026-07-25 11:45:25,871 INFO: >> GET /server/.env
2026-07-25 11:45:25,871 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:25,872 INFO: GET /server/.env
2026-07-25 11:45:25,873 WARNING: GET /server/.env -> 404
2026-07-25 11:45:25,875 INFO: << 404 /server/.env
2026-07-25 11:45:26,152 INFO: >> GET /frontend/.env
2026-07-25 11:45:26,152 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:26,152 INFO: GET /frontend/.env
2026-07-25 11:45:26,154 WARNING: GET /frontend/.env -> 404
2026-07-25 11:45:26,157 INFO: << 404 /frontend/.env
2026-07-25 11:45:26,434 INFO: >> GET /src/.env
2026-07-25 11:45:26,435 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:26,435 INFO: GET /src/.env
2026-07-25 11:45:26,436 WARNING: GET /src/.env -> 404
2026-07-25 11:45:26,439 INFO: << 404 /src/.env
2026-07-25 11:45:26,715 INFO: >> GET /core/.env
2026-07-25 11:45:26,715 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:26,716 INFO: GET /core/.env
2026-07-25 11:45:26,717 WARNING: GET /core/.env -> 404
2026-07-25 11:45:26,719 INFO: << 404 /core/.env
2026-07-25 11:45:27,005 INFO: >> GET /core/app/.env
2026-07-25 11:45:27,005 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:27,006 INFO: GET /core/app/.env
2026-07-25 11:45:27,007 WARNING: GET /core/app/.env -> 404
2026-07-25 11:45:27,009 INFO: << 404 /core/app/.env
2026-07-25 11:45:27,286 INFO: >> GET /config/.env
2026-07-25 11:45:27,286 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:27,287 INFO: GET /config/.env
2026-07-25 11:45:27,288 WARNING: GET /config/.env -> 404
2026-07-25 11:45:27,290 INFO: << 404 /config/.env
2026-07-25 11:45:27,567 INFO: >> GET /private/.env
2026-07-25 11:45:27,567 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:27,568 INFO: GET /private/.env
2026-07-25 11:45:27,569 WARNING: GET /private/.env -> 404
2026-07-25 11:45:27,572 INFO: << 404 /private/.env
2026-07-25 11:45:27,848 INFO: >> GET /application/.env
2026-07-25 11:45:27,849 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:27,849 INFO: GET /application/.env
2026-07-25 11:45:27,850 WARNING: GET /application/.env -> 404
2026-07-25 11:45:27,853 INFO: << 404 /application/.env
2026-07-25 11:45:28,131 INFO: >> GET /bootstrap/.env
2026-07-25 11:45:28,131 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:28,132 INFO: GET /bootstrap/.env
2026-07-25 11:45:28,133 WARNING: GET /bootstrap/.env -> 404
2026-07-25 11:45:28,136 INFO: << 404 /bootstrap/.env
2026-07-25 11:45:28,416 INFO: >> GET /database/.env
2026-07-25 11:45:28,416 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:28,416 INFO: GET /database/.env
2026-07-25 11:45:28,418 WARNING: GET /database/.env -> 404
2026-07-25 11:45:28,420 INFO: << 404 /database/.env
2026-07-25 11:45:28,696 INFO: >> GET /storage/.env
2026-07-25 11:45:28,697 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:28,697 INFO: GET /storage/.env
2026-07-25 11:45:28,698 WARNING: GET /storage/.env -> 404
2026-07-25 11:45:28,701 INFO: << 404 /storage/.env
2026-07-25 11:45:28,977 INFO: >> GET /var/www/.env
2026-07-25 11:45:28,977 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:28,978 INFO: GET /var/www/.env
2026-07-25 11:45:28,979 WARNING: GET /var/www/.env -> 404
2026-07-25 11:45:28,981 INFO: << 404 /var/www/.env
2026-07-25 11:45:29,257 INFO: >> GET /var/www/html/.env
2026-07-25 11:45:29,258 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:29,258 INFO: GET /var/www/html/.env
2026-07-25 11:45:29,259 WARNING: GET /var/www/html/.env -> 404
2026-07-25 11:45:29,262 INFO: << 404 /var/www/html/.env
2026-07-25 11:45:29,538 INFO: >> GET /current/.env
2026-07-25 11:45:29,538 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:29,539 INFO: GET /current/.env
2026-07-25 11:45:29,540 WARNING: GET /current/.env -> 404
2026-07-25 11:45:29,543 INFO: << 404 /current/.env
2026-07-25 11:45:29,820 INFO: >> GET /release/.env
2026-07-25 11:45:29,820 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:29,820 INFO: GET /release/.env
2026-07-25 11:45:29,822 WARNING: GET /release/.env -> 404
2026-07-25 11:45:29,824 INFO: << 404 /release/.env
2026-07-25 11:45:30,101 INFO: >> GET /releases/.env
2026-07-25 11:45:30,101 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:30,101 INFO: GET /releases/.env
2026-07-25 11:45:30,102 WARNING: GET /releases/.env -> 404
2026-07-25 11:45:30,105 INFO: << 404 /releases/.env
2026-07-25 11:45:30,382 INFO: >> GET /shared/.env
2026-07-25 11:45:30,382 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:30,382 INFO: GET /shared/.env
2026-07-25 11:45:30,383 WARNING: GET /shared/.env -> 404
2026-07-25 11:45:30,386 INFO: << 404 /shared/.env
2026-07-25 11:45:30,663 INFO: >> GET /deploy/.env
2026-07-25 11:45:30,663 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:30,663 INFO: GET /deploy/.env
2026-07-25 11:45:30,664 WARNING: GET /deploy/.env -> 404
2026-07-25 11:45:30,667 INFO: << 404 /deploy/.env
2026-07-25 11:45:30,944 INFO: >> GET /build/.env
2026-07-25 11:45:30,944 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:30,944 INFO: GET /build/.env
2026-07-25 11:45:30,946 WARNING: GET /build/.env -> 404
2026-07-25 11:45:30,948 INFO: << 404 /build/.env
2026-07-25 11:45:31,225 INFO: >> GET /dist/.env
2026-07-25 11:45:31,226 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:31,226 INFO: GET /dist/.env
2026-07-25 11:45:31,227 WARNING: GET /dist/.env -> 404
2026-07-25 11:45:31,229 INFO: << 404 /dist/.env
2026-07-25 11:45:31,506 INFO: >> GET /public_html/.env
2026-07-25 11:45:31,506 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:31,506 INFO: GET /public_html/.env
2026-07-25 11:45:31,508 WARNING: GET /public_html/.env -> 404
2026-07-25 11:45:31,510 INFO: << 404 /public_html/.env
2026-07-25 11:45:31,787 INFO: >> GET /htdocs/.env
2026-07-25 11:45:31,787 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:31,788 INFO: GET /htdocs/.env
2026-07-25 11:45:31,789 WARNING: GET /htdocs/.env -> 404
2026-07-25 11:45:31,792 INFO: << 404 /htdocs/.env
2026-07-25 11:45:32,069 INFO: >> GET /www/.env
2026-07-25 11:45:32,069 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:32,069 INFO: GET /www/.env
2026-07-25 11:45:32,071 WARNING: GET /www/.env -> 404
2026-07-25 11:45:32,074 INFO: << 404 /www/.env
2026-07-25 11:45:32,351 INFO: >> GET /html/.env
2026-07-25 11:45:32,351 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:32,352 INFO: GET /html/.env
2026-07-25 11:45:32,353 WARNING: GET /html/.env -> 404
2026-07-25 11:45:32,356 INFO: << 404 /html/.env
2026-07-25 11:45:32,636 INFO: >> GET /live/.env
2026-07-25 11:45:32,636 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:32,637 INFO: GET /live/.env
2026-07-25 11:45:32,638 WARNING: GET /live/.env -> 404
2026-07-25 11:45:32,641 INFO: << 404 /live/.env
2026-07-25 11:45:32,921 INFO: >> GET /prod/.env
2026-07-25 11:45:32,921 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:32,921 INFO: GET /prod/.env
2026-07-25 11:45:32,923 WARNING: GET /prod/.env -> 404
2026-07-25 11:45:32,925 INFO: << 404 /prod/.env
2026-07-25 11:45:33,202 INFO: >> GET /dev/.env
2026-07-25 11:45:33,202 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:33,203 INFO: GET /dev/.env
2026-07-25 11:45:33,204 WARNING: GET /dev/.env -> 404
2026-07-25 11:45:33,206 INFO: << 404 /dev/.env
2026-07-25 11:45:33,482 INFO: >> GET /staging/.env
2026-07-25 11:45:33,483 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:33,483 INFO: GET /staging/.env
2026-07-25 11:45:33,484 WARNING: GET /staging/.env -> 404
2026-07-25 11:45:33,487 INFO: << 404 /staging/.env
2026-07-25 11:45:33,763 INFO: >> GET /opt/.env
2026-07-25 11:45:33,764 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:33,764 INFO: GET /opt/.env
2026-07-25 11:45:33,765 WARNING: GET /opt/.env -> 404
2026-07-25 11:45:33,767 INFO: << 404 /opt/.env
2026-07-25 11:45:34,044 INFO: >> GET /laravel/.env
2026-07-25 11:45:34,044 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:34,045 INFO: GET /laravel/.env
2026-07-25 11:45:34,046 WARNING: GET /laravel/.env -> 404
2026-07-25 11:45:34,048 INFO: << 404 /laravel/.env
2026-07-25 11:45:34,325 INFO: >> GET /symfony/.env
2026-07-25 11:45:34,326 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:34,326 INFO: GET /symfony/.env
2026-07-25 11:45:34,327 WARNING: GET /symfony/.env -> 404
2026-07-25 11:45:34,330 INFO: << 404 /symfony/.env
2026-07-25 11:45:34,606 INFO: >> GET /wordpress/.env
2026-07-25 11:45:34,606 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:34,607 INFO: GET /wordpress/.env
2026-07-25 11:45:34,608 WARNING: GET /wordpress/.env -> 404
2026-07-25 11:45:34,611 INFO: << 404 /wordpress/.env
2026-07-25 11:45:34,887 INFO: >> GET /wp/.env
2026-07-25 11:45:34,887 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:34,887 INFO: GET /wp/.env
2026-07-25 11:45:34,889 WARNING: GET /wp/.env -> 404
2026-07-25 11:45:34,891 INFO: << 404 /wp/.env
2026-07-25 11:45:35,170 INFO: >> GET /cms/.env
2026-07-25 11:45:35,170 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:35,171 INFO: GET /cms/.env
2026-07-25 11:45:35,172 WARNING: GET /cms/.env -> 404
2026-07-25 11:45:35,175 INFO: << 404 /cms/.env
2026-07-25 11:45:35,452 INFO: >> GET /drupal/.env
2026-07-25 11:45:35,452 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:35,453 INFO: GET /drupal/.env
2026-07-25 11:45:35,454 WARNING: GET /drupal/.env -> 404
2026-07-25 11:45:35,457 INFO: << 404 /drupal/.env
2026-07-25 11:45:35,743 INFO: >> GET /joomla/.env
2026-07-25 11:45:35,743 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:35,744 INFO: GET /joomla/.env
2026-07-25 11:45:35,745 WARNING: GET /joomla/.env -> 404
2026-07-25 11:45:35,750 INFO: << 404 /joomla/.env
2026-07-25 11:45:36,026 INFO: >> GET /magento/.env
2026-07-25 11:45:36,026 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:36,026 INFO: GET /magento/.env
2026-07-25 11:45:36,028 WARNING: GET /magento/.env -> 404
2026-07-25 11:45:36,030 INFO: << 404 /magento/.env
2026-07-25 11:45:36,309 INFO: >> GET /shopify/.env
2026-07-25 11:45:36,310 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:36,310 INFO: GET /shopify/.env
2026-07-25 11:45:36,311 WARNING: GET /shopify/.env -> 404
2026-07-25 11:45:36,314 INFO: << 404 /shopify/.env
2026-07-25 11:45:36,599 INFO: >> GET /prestashop/.env
2026-07-25 11:45:36,599 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:36,600 INFO: GET /prestashop/.env
2026-07-25 11:45:36,601 WARNING: GET /prestashop/.env -> 404
2026-07-25 11:45:36,604 INFO: << 404 /prestashop/.env
2026-07-25 11:45:36,880 INFO: >> GET /codeigniter/.env
2026-07-25 11:45:36,880 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:36,881 INFO: GET /codeigniter/.env
2026-07-25 11:45:36,882 WARNING: GET /codeigniter/.env -> 404
2026-07-25 11:45:36,885 INFO: << 404 /codeigniter/.env
2026-07-25 11:45:37,161 INFO: >> GET /cakephp/.env
2026-07-25 11:45:37,161 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:37,162 INFO: GET /cakephp/.env
2026-07-25 11:45:37,163 WARNING: GET /cakephp/.env -> 404
2026-07-25 11:45:37,165 INFO: << 404 /cakephp/.env
2026-07-25 11:45:37,444 INFO: >> GET /zend/.env
2026-07-25 11:45:37,444 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:37,444 INFO: GET /zend/.env
2026-07-25 11:45:37,446 WARNING: GET /zend/.env -> 404
2026-07-25 11:45:37,449 INFO: << 404 /zend/.env
2026-07-25 11:45:37,725 INFO: >> GET /yii/.env
2026-07-25 11:45:37,725 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:37,726 INFO: GET /yii/.env
2026-07-25 11:45:37,727 WARNING: GET /yii/.env -> 404
2026-07-25 11:45:37,729 INFO: << 404 /yii/.env
2026-07-25 11:45:38,006 INFO: >> GET /laravel5/.env
2026-07-25 11:45:38,006 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:38,007 INFO: GET /laravel5/.env
2026-07-25 11:45:38,008 WARNING: GET /laravel5/.env -> 404
2026-07-25 11:45:38,010 INFO: << 404 /laravel5/.env
2026-07-25 11:45:38,295 INFO: >> GET /v1/.env
2026-07-25 11:45:38,295 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:38,295 INFO: GET /v1/.env
2026-07-25 11:45:38,297 WARNING: GET /v1/.env -> 404
2026-07-25 11:45:38,300 INFO: << 404 /v1/.env
2026-07-25 11:45:38,576 INFO: >> GET /v2/.env
2026-07-25 11:45:38,576 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:38,576 INFO: GET /v2/.env
2026-07-25 11:45:38,578 WARNING: GET /v2/.env -> 404
2026-07-25 11:45:38,580 INFO: << 404 /v2/.env
2026-07-25 11:45:38,857 INFO: >> GET /v3/.env
2026-07-25 11:45:38,857 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:38,857 INFO: GET /v3/.env
2026-07-25 11:45:38,858 WARNING: GET /v3/.env -> 404
2026-07-25 11:45:38,861 INFO: << 404 /v3/.env
2026-07-25 11:45:39,137 INFO: >> GET /api/v1/.env
2026-07-25 11:45:39,137 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:39,137 INFO: GET /api/v1/.env
2026-07-25 11:45:39,139 WARNING: GET /api/v1/.env -> 404
2026-07-25 11:45:39,141 INFO: << 404 /api/v1/.env
2026-07-25 11:45:39,420 INFO: >> GET /api/v2/.env
2026-07-25 11:45:39,420 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:39,421 INFO: GET /api/v2/.env
2026-07-25 11:45:39,422 WARNING: GET /api/v2/.env -> 404
2026-07-25 11:45:39,425 INFO: << 404 /api/v2/.env
2026-07-25 11:45:39,701 INFO: >> GET /rest/.env
2026-07-25 11:45:39,701 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:39,701 INFO: GET /rest/.env
2026-07-25 11:45:39,702 WARNING: GET /rest/.env -> 404
2026-07-25 11:45:39,705 INFO: << 404 /rest/.env
2026-07-25 11:45:39,981 INFO: >> GET /graphql/.env
2026-07-25 11:45:39,981 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:39,982 INFO: GET /graphql/.env
2026-07-25 11:45:39,983 WARNING: GET /graphql/.env -> 404
2026-07-25 11:45:39,985 INFO: << 404 /graphql/.env
2026-07-25 11:45:40,262 INFO: >> GET /gateway/.env
2026-07-25 11:45:40,262 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:40,263 INFO: GET /gateway/.env
2026-07-25 11:45:40,264 WARNING: GET /gateway/.env -> 404
2026-07-25 11:45:40,266 INFO: << 404 /gateway/.env
2026-07-25 11:45:40,544 INFO: >> GET /microservice/.env
2026-07-25 11:45:40,545 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:40,545 INFO: GET /microservice/.env
2026-07-25 11:45:40,561 WARNING: GET /microservice/.env -> 404
2026-07-25 11:45:40,563 INFO: << 404 /microservice/.env
2026-07-25 11:45:40,840 INFO: >> GET /service/.env
2026-07-25 11:45:40,841 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:40,841 INFO: GET /service/.env
2026-07-25 11:45:40,842 WARNING: GET /service/.env -> 404
2026-07-25 11:45:40,845 INFO: << 404 /service/.env
2026-07-25 11:45:41,121 INFO: >> GET /api/v3/.env
2026-07-25 11:45:41,121 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:41,121 INFO: GET /api/v3/.env
2026-07-25 11:45:41,123 WARNING: GET /api/v3/.env -> 404
2026-07-25 11:45:41,125 INFO: << 404 /api/v3/.env
2026-07-25 11:45:41,401 INFO: >> GET /api/dev/.env
2026-07-25 11:45:41,402 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:41,402 INFO: GET /api/dev/.env
2026-07-25 11:45:41,403 WARNING: GET /api/dev/.env -> 404
2026-07-25 11:45:41,406 INFO: << 404 /api/dev/.env
2026-07-25 11:45:41,683 INFO: >> GET /api/staging/.env
2026-07-25 11:45:41,683 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:41,683 INFO: GET /api/staging/.env
2026-07-25 11:45:41,685 WARNING: GET /api/staging/.env -> 404
2026-07-25 11:45:41,688 INFO: << 404 /api/staging/.env
2026-07-25 11:45:41,965 INFO: >> GET /vendor/.env
2026-07-25 11:45:41,965 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:41,966 INFO: GET /vendor/.env
2026-07-25 11:45:41,967 WARNING: GET /vendor/.env -> 404
2026-07-25 11:45:41,970 INFO: << 404 /vendor/.env
2026-07-25 11:45:42,246 INFO: >> GET /lib/.env
2026-07-25 11:45:42,246 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:42,246 INFO: GET /lib/.env
2026-07-25 11:45:42,248 WARNING: GET /lib/.env -> 404
2026-07-25 11:45:42,250 INFO: << 404 /lib/.env
2026-07-25 11:45:42,526 INFO: >> GET /resources/.env
2026-07-25 11:45:42,526 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:42,527 INFO: GET /resources/.env
2026-07-25 11:45:42,528 WARNING: GET /resources/.env -> 404
2026-07-25 11:45:42,531 INFO: << 404 /resources/.env
2026-07-25 11:45:42,807 INFO: >> GET /assets/.env
2026-07-25 11:45:42,807 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:42,807 INFO: GET /assets/.env
2026-07-25 11:45:42,809 WARNING: GET /assets/.env -> 404
2026-07-25 11:45:42,811 INFO: << 404 /assets/.env
2026-07-25 11:45:43,088 INFO: >> GET /uploads/.env
2026-07-25 11:45:43,088 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:43,089 INFO: GET /uploads/.env
2026-07-25 11:45:43,090 WARNING: GET /uploads/.env -> 404
2026-07-25 11:45:43,093 INFO: << 404 /uploads/.env
2026-07-25 11:45:43,370 INFO: >> GET /internal/.env
2026-07-25 11:45:43,370 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:43,370 INFO: GET /internal/.env
2026-07-25 11:45:43,371 WARNING: GET /internal/.env -> 404
2026-07-25 11:45:43,374 INFO: << 404 /internal/.env
2026-07-25 11:45:43,650 INFO: >> GET /tools/.env
2026-07-25 11:45:43,651 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:43,651 INFO: GET /tools/.env
2026-07-25 11:45:43,652 WARNING: GET /tools/.env -> 404
2026-07-25 11:45:43,655 INFO: << 404 /tools/.env
2026-07-25 11:45:43,933 INFO: >> GET /scripts/.env
2026-07-25 11:45:43,933 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:43,933 INFO: GET /scripts/.env
2026-07-25 11:45:43,934 WARNING: GET /scripts/.env -> 404
2026-07-25 11:45:43,937 INFO: << 404 /scripts/.env
2026-07-25 11:45:44,216 INFO: >> GET /bin/.env
2026-07-25 11:45:44,216 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:44,216 INFO: GET /bin/.env
2026-07-25 11:45:44,217 WARNING: GET /bin/.env -> 404
2026-07-25 11:45:44,220 INFO: << 404 /bin/.env
2026-07-25 11:45:44,496 INFO: >> GET /sbin/.env
2026-07-25 11:45:44,496 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:44,497 INFO: GET /sbin/.env
2026-07-25 11:45:44,498 WARNING: GET /sbin/.env -> 404
2026-07-25 11:45:44,501 INFO: << 404 /sbin/.env
2026-07-25 11:45:44,777 INFO: >> GET /local/.env
2026-07-25 11:45:44,777 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:44,778 INFO: GET /local/.env
2026-07-25 11:45:44,779 WARNING: GET /local/.env -> 404
2026-07-25 11:45:44,781 INFO: << 404 /local/.env
2026-07-25 11:45:45,057 INFO: >> GET /portal/.env
2026-07-25 11:45:45,058 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:45,058 INFO: GET /portal/.env
2026-07-25 11:45:45,059 WARNING: GET /portal/.env -> 404
2026-07-25 11:45:45,062 INFO: << 404 /portal/.env
2026-07-25 11:45:45,339 INFO: >> GET /dashboard/.env
2026-07-25 11:45:45,339 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:45,340 INFO: GET /dashboard/.env
2026-07-25 11:45:45,341 WARNING: GET /dashboard/.env -> 404
2026-07-25 11:45:45,343 INFO: << 404 /dashboard/.env
2026-07-25 11:45:45,620 INFO: >> GET /panel/.env
2026-07-25 11:45:45,620 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:45,620 INFO: GET /panel/.env
2026-07-25 11:45:45,622 WARNING: GET /panel/.env -> 404
2026-07-25 11:45:45,624 INFO: << 404 /panel/.env
2026-07-25 11:45:45,902 INFO: >> GET /crm/.env
2026-07-25 11:45:45,902 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:45,902 INFO: GET /crm/.env
2026-07-25 11:45:45,904 WARNING: GET /crm/.env -> 404
2026-07-25 11:45:45,906 INFO: << 404 /crm/.env
2026-07-25 11:45:46,183 INFO: >> GET /erp/.env
2026-07-25 11:45:46,183 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:46,183 INFO: GET /erp/.env
2026-07-25 11:45:46,184 WARNING: GET /erp/.env -> 404
2026-07-25 11:45:46,187 INFO: << 404 /erp/.env
2026-07-25 11:45:46,463 INFO: >> GET /shop/.env
2026-07-25 11:45:46,463 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:46,464 INFO: GET /shop/.env
2026-07-25 11:45:46,465 WARNING: GET /shop/.env -> 404
2026-07-25 11:45:46,467 INFO: << 404 /shop/.env
2026-07-25 11:45:46,744 INFO: >> GET /store/.env
2026-07-25 11:45:46,744 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:46,745 INFO: GET /store/.env
2026-07-25 11:45:46,746 WARNING: GET /store/.env -> 404
2026-07-25 11:45:46,749 INFO: << 404 /store/.env
2026-07-25 11:45:47,025 INFO: >> GET /saas/.env
2026-07-25 11:45:47,025 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:47,026 INFO: GET /saas/.env
2026-07-25 11:45:47,027 WARNING: GET /saas/.env -> 404
2026-07-25 11:45:47,029 INFO: << 404 /saas/.env
2026-07-25 11:45:47,308 INFO: >> GET /client/.env
2026-07-25 11:45:47,308 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:47,308 INFO: GET /client/.env
2026-07-25 11:45:47,309 WARNING: GET /client/.env -> 404
2026-07-25 11:45:47,312 INFO: << 404 /client/.env
2026-07-25 11:45:47,590 INFO: >> GET /project/.env
2026-07-25 11:45:47,590 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:47,591 INFO: GET /project/.env
2026-07-25 11:45:47,592 WARNING: GET /project/.env -> 404
2026-07-25 11:45:47,594 INFO: << 404 /project/.env
2026-07-25 11:45:47,871 INFO: >> GET /admin-panel/.env
2026-07-25 11:45:47,871 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:47,872 INFO: GET /admin-panel/.env
2026-07-25 11:45:47,873 WARNING: GET /admin-panel/.env -> 404
2026-07-25 11:45:47,875 INFO: << 404 /admin-panel/.env
2026-07-25 11:45:48,153 INFO: >> GET /control-panel/.env
2026-07-25 11:45:48,153 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:48,153 INFO: GET /control-panel/.env
2026-07-25 11:45:48,154 WARNING: GET /control-panel/.env -> 404
2026-07-25 11:45:48,157 INFO: << 404 /control-panel/.env
2026-07-25 11:45:48,433 INFO: >> GET /user-panel/.env
2026-07-25 11:45:48,433 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:48,434 INFO: GET /user-panel/.env
2026-07-25 11:45:48,435 WARNING: GET /user-panel/.env -> 404
2026-07-25 11:45:48,438 INFO: << 404 /user-panel/.env
2026-07-25 11:45:48,714 INFO: >> GET /node/.env
2026-07-25 11:45:48,714 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:48,714 INFO: GET /node/.env
2026-07-25 11:45:48,716 WARNING: GET /node/.env -> 404
2026-07-25 11:45:48,718 INFO: << 404 /node/.env
2026-07-25 11:45:48,994 INFO: >> GET /express/.env
2026-07-25 11:45:48,995 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:48,995 INFO: GET /express/.env
2026-07-25 11:45:48,996 WARNING: GET /express/.env -> 404
2026-07-25 11:45:48,999 INFO: << 404 /express/.env
2026-07-25 11:45:49,275 INFO: >> GET /next/.env
2026-07-25 11:45:49,275 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:49,276 INFO: GET /next/.env
2026-07-25 11:45:49,277 WARNING: GET /next/.env -> 404
2026-07-25 11:45:49,280 INFO: << 404 /next/.env
2026-07-25 11:45:49,556 INFO: >> GET /nuxt/.env
2026-07-25 11:45:49,557 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:49,557 INFO: GET /nuxt/.env
2026-07-25 11:45:49,559 WARNING: GET /nuxt/.env -> 404
2026-07-25 11:45:49,561 INFO: << 404 /nuxt/.env
2026-07-25 11:45:49,838 INFO: >> GET /nest/.env
2026-07-25 11:45:49,838 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:49,838 INFO: GET /nest/.env
2026-07-25 11:45:49,839 WARNING: GET /nest/.env -> 404
2026-07-25 11:45:49,842 INFO: << 404 /nest/.env
2026-07-25 11:45:50,119 INFO: >> GET /react/.env
2026-07-25 11:45:50,119 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:50,120 INFO: GET /react/.env
2026-07-25 11:45:50,121 WARNING: GET /react/.env -> 404
2026-07-25 11:45:50,124 INFO: << 404 /react/.env
2026-07-25 11:45:50,400 INFO: >> GET /vue/.env
2026-07-25 11:45:50,401 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:50,401 INFO: GET /vue/.env
2026-07-25 11:45:50,402 WARNING: GET /vue/.env -> 404
2026-07-25 11:45:50,406 INFO: << 404 /vue/.env
2026-07-25 11:45:50,688 INFO: >> GET /angular/.env
2026-07-25 11:45:50,688 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:50,689 INFO: GET /angular/.env
2026-07-25 11:45:50,690 WARNING: GET /angular/.env -> 404
2026-07-25 11:45:50,693 INFO: << 404 /angular/.env
2026-07-25 11:45:50,969 INFO: >> GET /svelte/.env
2026-07-25 11:45:50,970 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:50,970 INFO: GET /svelte/.env
2026-07-25 11:45:50,971 WARNING: GET /svelte/.env -> 404
2026-07-25 11:45:50,974 INFO: << 404 /svelte/.env
2026-07-25 11:45:51,251 INFO: >> GET /vite/.env
2026-07-25 11:45:51,251 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:51,252 INFO: GET /vite/.env
2026-07-25 11:45:51,253 WARNING: GET /vite/.env -> 404
2026-07-25 11:45:51,255 INFO: << 404 /vite/.env
2026-07-25 11:45:51,532 INFO: >> GET /backup/.env
2026-07-25 11:45:51,532 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:51,532 INFO: GET /backup/.env
2026-07-25 11:45:51,534 WARNING: GET /backup/.env -> 404
2026-07-25 11:45:51,536 INFO: << 404 /backup/.env
2026-07-25 11:45:51,815 INFO: >> GET /backups/.env
2026-07-25 11:45:51,815 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:51,815 INFO: GET /backups/.env
2026-07-25 11:45:51,816 WARNING: GET /backups/.env -> 404
2026-07-25 11:45:51,820 INFO: << 404 /backups/.env
2026-07-25 11:45:52,096 INFO: >> GET /old/.env
2026-07-25 11:45:52,096 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:52,097 INFO: GET /old/.env
2026-07-25 11:45:52,098 WARNING: GET /old/.env -> 404
2026-07-25 11:45:52,101 INFO: << 404 /old/.env
2026-07-25 11:45:52,378 INFO: >> GET /tmp/.env
2026-07-25 11:45:52,378 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:52,378 INFO: GET /tmp/.env
2026-07-25 11:45:52,380 WARNING: GET /tmp/.env -> 404
2026-07-25 11:45:52,382 INFO: << 404 /tmp/.env
2026-07-25 11:45:52,659 INFO: >> GET /temp/.env
2026-07-25 11:45:52,659 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:52,659 INFO: GET /temp/.env
2026-07-25 11:45:52,660 WARNING: GET /temp/.env -> 404
2026-07-25 11:45:52,663 INFO: << 404 /temp/.env
2026-07-25 11:45:52,939 INFO: >> GET /lab/.env
2026-07-25 11:45:52,939 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:52,940 INFO: GET /lab/.env
2026-07-25 11:45:52,941 WARNING: GET /lab/.env -> 404
2026-07-25 11:45:52,943 INFO: << 404 /lab/.env
2026-07-25 11:45:53,220 INFO: >> GET /cronlab/.env
2026-07-25 11:45:53,220 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:53,220 INFO: GET /cronlab/.env
2026-07-25 11:45:53,221 WARNING: GET /cronlab/.env -> 404
2026-07-25 11:45:53,224 INFO: << 404 /cronlab/.env
2026-07-25 11:45:53,500 INFO: >> GET /cron/.env
2026-07-25 11:45:53,500 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:53,501 INFO: GET /cron/.env
2026-07-25 11:45:53,502 WARNING: GET /cron/.env -> 404
2026-07-25 11:45:53,504 INFO: << 404 /cron/.env
2026-07-25 11:45:53,781 INFO: >> GET /en/.env
2026-07-25 11:45:53,781 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:53,782 INFO: GET /en/.env
2026-07-25 11:45:53,783 WARNING: GET /en/.env -> 404
2026-07-25 11:45:53,785 INFO: << 404 /en/.env
2026-07-25 11:45:54,062 INFO: >> GET /administrator/.env
2026-07-25 11:45:54,062 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:54,062 INFO: GET /administrator/.env
2026-07-25 11:45:54,064 WARNING: GET /administrator/.env -> 404
2026-07-25 11:45:54,066 INFO: << 404 /administrator/.env
2026-07-25 11:45:54,342 INFO: >> GET /psnlink/.env
2026-07-25 11:45:54,343 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:54,343 INFO: GET /psnlink/.env
2026-07-25 11:45:54,344 WARNING: GET /psnlink/.env -> 404
2026-07-25 11:45:54,347 INFO: << 404 /psnlink/.env
2026-07-25 11:45:54,623 INFO: >> GET /exapi/.env
2026-07-25 11:45:54,623 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:54,624 INFO: GET /exapi/.env
2026-07-25 11:45:54,625 WARNING: GET /exapi/.env -> 404
2026-07-25 11:45:54,627 INFO: << 404 /exapi/.env
2026-07-25 11:45:54,904 INFO: >> GET /sitemaps/.env
2026-07-25 11:45:54,904 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:54,904 INFO: GET /sitemaps/.env
2026-07-25 11:45:54,906 WARNING: GET /sitemaps/.env -> 404
2026-07-25 11:45:54,908 INFO: << 404 /sitemaps/.env
2026-07-25 11:45:55,185 INFO: >> GET /.env.backup1
2026-07-25 11:45:55,185 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:55,185 INFO: GET /.env.backup1
2026-07-25 11:45:55,186 WARNING: GET /.env.backup1 -> 404
2026-07-25 11:45:55,189 INFO: << 404 /.env.backup1
2026-07-25 11:45:55,465 INFO: >> GET /.env.backup2
2026-07-25 11:45:55,465 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:55,466 INFO: GET /.env.backup2
2026-07-25 11:45:55,467 WARNING: GET /.env.backup2 -> 404
2026-07-25 11:45:55,469 INFO: << 404 /.env.backup2
2026-07-25 11:45:55,747 INFO: >> GET /logs/.env
2026-07-25 11:45:55,747 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:55,748 INFO: GET /logs/.env
2026-07-25 11:45:55,749 WARNING: GET /logs/.env -> 404
2026-07-25 11:45:55,751 INFO: << 404 /logs/.env
2026-07-25 11:45:56,028 INFO: >> GET /cache/.env
2026-07-25 11:45:56,028 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:56,029 INFO: GET /cache/.env
2026-07-25 11:45:56,030 WARNING: GET /cache/.env -> 404
2026-07-25 11:45:56,033 INFO: << 404 /cache/.env
2026-07-25 11:45:56,310 INFO: >> GET /mailer/.env
2026-07-25 11:45:56,310 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:56,310 INFO: GET /mailer/.env
2026-07-25 11:45:56,312 WARNING: GET /mailer/.env -> 404
2026-07-25 11:45:56,314 INFO: << 404 /mailer/.env
2026-07-25 11:45:56,593 INFO: >> GET /mail/.env
2026-07-25 11:45:56,593 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:56,593 INFO: GET /mail/.env
2026-07-25 11:45:56,595 WARNING: GET /mail/.env -> 404
2026-07-25 11:45:56,598 INFO: << 404 /mail/.env
2026-07-25 11:45:56,874 INFO: >> GET /email/.env
2026-07-25 11:45:56,874 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:56,875 INFO: GET /email/.env
2026-07-25 11:45:56,877 WARNING: GET /email/.env -> 404
2026-07-25 11:45:56,880 INFO: << 404 /email/.env
2026-07-25 11:45:57,158 INFO: >> GET /smtp/.env
2026-07-25 11:45:57,158 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:57,159 INFO: GET /smtp/.env
2026-07-25 11:45:57,160 WARNING: GET /smtp/.env -> 404
2026-07-25 11:45:57,163 INFO: << 404 /smtp/.env
2026-07-25 11:45:57,439 INFO: >> GET /mailing/.env
2026-07-25 11:45:57,439 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:57,440 INFO: GET /mailing/.env
2026-07-25 11:45:57,441 WARNING: GET /mailing/.env -> 404
2026-07-25 11:45:57,443 INFO: << 404 /mailing/.env
2026-07-25 11:45:57,720 INFO: >> GET /notifications/.env
2026-07-25 11:45:57,720 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:57,720 INFO: GET /notifications/.env
2026-07-25 11:45:57,722 WARNING: GET /notifications/.env -> 404
2026-07-25 11:45:57,724 INFO: << 404 /notifications/.env
2026-07-25 11:45:58,002 INFO: >> GET /notify/.env
2026-07-25 11:45:58,002 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:58,003 INFO: GET /notify/.env
2026-07-25 11:45:58,004 WARNING: GET /notify/.env -> 404
2026-07-25 11:45:58,007 INFO: << 404 /notify/.env
2026-07-25 11:45:58,284 INFO: >> GET /sender/.env
2026-07-25 11:45:58,284 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:58,285 INFO: GET /sender/.env
2026-07-25 11:45:58,286 WARNING: GET /sender/.env -> 404
2026-07-25 11:45:58,291 INFO: << 404 /sender/.env
2026-07-25 11:45:58,568 INFO: >> GET /campaign/.env
2026-07-25 11:45:58,568 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:58,569 INFO: GET /campaign/.env
2026-07-25 11:45:58,570 WARNING: GET /campaign/.env -> 404
2026-07-25 11:45:58,573 INFO: << 404 /campaign/.env
2026-07-25 11:45:58,850 INFO: >> GET /newsletter/.env
2026-07-25 11:45:58,850 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:58,851 INFO: GET /newsletter/.env
2026-07-25 11:45:58,852 WARNING: GET /newsletter/.env -> 404
2026-07-25 11:45:58,855 INFO: << 404 /newsletter/.env
2026-07-25 11:45:59,131 INFO: >> GET /ses/.env
2026-07-25 11:45:59,131 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:59,131 INFO: GET /ses/.env
2026-07-25 11:45:59,133 WARNING: GET /ses/.env -> 404
2026-07-25 11:45:59,135 INFO: << 404 /ses/.env
2026-07-25 11:45:59,412 INFO: >> GET /sendgrid/.env
2026-07-25 11:45:59,412 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:59,413 INFO: GET /sendgrid/.env
2026-07-25 11:45:59,414 WARNING: GET /sendgrid/.env -> 404
2026-07-25 11:45:59,416 INFO: << 404 /sendgrid/.env
2026-07-25 11:45:59,698 INFO: >> GET /sparkpost/.env
2026-07-25 11:45:59,698 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:59,698 INFO: GET /sparkpost/.env
2026-07-25 11:45:59,699 WARNING: GET /sparkpost/.env -> 404
2026-07-25 11:45:59,702 INFO: << 404 /sparkpost/.env
2026-07-25 11:45:59,983 INFO: >> GET /postmark/.env
2026-07-25 11:45:59,983 DEBUG: Using selector: EpollSelector
2026-07-25 11:45:59,983 INFO: GET /postmark/.env
2026-07-25 11:45:59,985 WARNING: GET /postmark/.env -> 404
2026-07-25 11:45:59,988 INFO: << 404 /postmark/.env
2026-07-25 11:46:00,266 INFO: >> GET /mailgun/.env
2026-07-25 11:46:00,267 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:00,267 INFO: GET /mailgun/.env
2026-07-25 11:46:00,268 WARNING: GET /mailgun/.env -> 404
2026-07-25 11:46:00,271 INFO: << 404 /mailgun/.env
2026-07-25 11:46:00,558 INFO: >> GET /mandrill/.env
2026-07-25 11:46:00,559 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:00,559 INFO: GET /mandrill/.env
2026-07-25 11:46:00,560 WARNING: GET /mandrill/.env -> 404
2026-07-25 11:46:00,563 INFO: << 404 /mandrill/.env
2026-07-25 11:46:00,840 INFO: >> GET /mailjet/.env
2026-07-25 11:46:00,840 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:00,840 INFO: GET /mailjet/.env
2026-07-25 11:46:00,842 WARNING: GET /mailjet/.env -> 404
2026-07-25 11:46:00,845 INFO: << 404 /mailjet/.env
2026-07-25 11:46:01,122 INFO: >> GET /brevo/.env
2026-07-25 11:46:01,122 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:01,123 INFO: GET /brevo/.env
2026-07-25 11:46:01,124 WARNING: GET /brevo/.env -> 404
2026-07-25 11:46:01,127 INFO: << 404 /brevo/.env
2026-07-25 11:46:01,404 INFO: >> GET /transactional/.env
2026-07-25 11:46:01,404 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:01,404 INFO: GET /transactional/.env
2026-07-25 11:46:01,406 WARNING: GET /transactional/.env -> 404
2026-07-25 11:46:01,425 INFO: << 404 /transactional/.env
2026-07-25 11:46:01,715 INFO: >> GET /bulk/.env
2026-07-25 11:46:01,716 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:01,716 INFO: GET /bulk/.env
2026-07-25 11:46:01,717 WARNING: GET /bulk/.env -> 404
2026-07-25 11:46:01,731 INFO: << 404 /bulk/.env
2026-07-25 11:46:02,020 INFO: >> GET /aws/.env
2026-07-25 11:46:02,021 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:02,021 INFO: GET /aws/.env
2026-07-25 11:46:02,022 WARNING: GET /aws/.env -> 404
2026-07-25 11:46:02,025 INFO: << 404 /aws/.env
2026-07-25 11:46:02,304 INFO: >> GET /azure/.env
2026-07-25 11:46:02,304 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:02,304 INFO: GET /azure/.env
2026-07-25 11:46:02,306 WARNING: GET /azure/.env -> 404
2026-07-25 11:46:02,311 INFO: << 404 /azure/.env
2026-07-25 11:46:02,592 INFO: >> GET /gcp/.env
2026-07-25 11:46:02,592 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:02,593 INFO: GET /gcp/.env
2026-07-25 11:46:02,594 WARNING: GET /gcp/.env -> 404
2026-07-25 11:46:02,598 INFO: << 404 /gcp/.env
2026-07-25 11:46:02,878 INFO: >> GET /cloud/.env
2026-07-25 11:46:02,878 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:02,878 INFO: GET /cloud/.env
2026-07-25 11:46:02,880 WARNING: GET /cloud/.env -> 404
2026-07-25 11:46:02,882 INFO: << 404 /cloud/.env
2026-07-25 11:46:03,159 INFO: >> GET /infrastructure/.env
2026-07-25 11:46:03,159 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:03,159 INFO: GET /infrastructure/.env
2026-07-25 11:46:03,161 WARNING: GET /infrastructure/.env -> 404
2026-07-25 11:46:03,163 INFO: << 404 /infrastructure/.env
2026-07-25 11:46:03,440 INFO: >> GET /docker/.env
2026-07-25 11:46:03,440 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:03,440 INFO: GET /docker/.env
2026-07-25 11:46:03,442 WARNING: GET /docker/.env -> 404
2026-07-25 11:46:03,444 INFO: << 404 /docker/.env
2026-07-25 11:46:03,721 INFO: >> GET /k8s/.env
2026-07-25 11:46:03,721 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:03,721 INFO: GET /k8s/.env
2026-07-25 11:46:03,722 WARNING: GET /k8s/.env -> 404
2026-07-25 11:46:03,725 INFO: << 404 /k8s/.env
2026-07-25 11:46:04,002 INFO: >> GET /kubernetes/.env
2026-07-25 11:46:04,002 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:04,003 INFO: GET /kubernetes/.env
2026-07-25 11:46:04,004 WARNING: GET /kubernetes/.env -> 404
2026-07-25 11:46:04,007 INFO: << 404 /kubernetes/.env
2026-07-25 11:46:04,283 INFO: >> GET /terraform/.env
2026-07-25 11:46:04,283 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:04,284 INFO: GET /terraform/.env
2026-07-25 11:46:04,285 WARNING: GET /terraform/.env -> 404
2026-07-25 11:46:04,289 INFO: << 404 /terraform/.env
2026-07-25 11:46:04,565 INFO: >> GET /ansible/.env
2026-07-25 11:46:04,565 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:04,566 INFO: GET /ansible/.env
2026-07-25 11:46:04,567 WARNING: GET /ansible/.env -> 404
2026-07-25 11:46:04,570 INFO: << 404 /ansible/.env
2026-07-25 11:46:05,125 INFO: >> GET /ci/.env
2026-07-25 11:46:05,125 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:05,125 INFO: GET /ci/.env
2026-07-25 11:46:05,126 WARNING: GET /ci/.env -> 404
2026-07-25 11:46:05,129 INFO: << 404 /ci/.env
2026-07-25 11:46:05,407 INFO: >> GET /cd/.env
2026-07-25 11:46:05,407 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:05,408 INFO: GET /cd/.env
2026-07-25 11:46:05,409 WARNING: GET /cd/.env -> 404
2026-07-25 11:46:05,412 INFO: << 404 /cd/.env
2026-07-25 11:46:05,689 INFO: >> GET /jenkins/.env
2026-07-25 11:46:05,689 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:05,689 INFO: GET /jenkins/.env
2026-07-25 11:46:05,690 WARNING: GET /jenkins/.env -> 404
2026-07-25 11:46:05,693 INFO: << 404 /jenkins/.env
2026-07-25 11:46:05,970 INFO: >> GET /gitlab/.env
2026-07-25 11:46:05,970 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:05,970 INFO: GET /gitlab/.env
2026-07-25 11:46:05,971 WARNING: GET /gitlab/.env -> 404
2026-07-25 11:46:05,984 INFO: << 404 /gitlab/.env
2026-07-25 11:46:06,261 INFO: >> GET /github/.env
2026-07-25 11:46:06,261 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:06,262 INFO: GET /github/.env
2026-07-25 11:46:06,263 WARNING: GET /github/.env -> 404
2026-07-25 11:46:06,266 INFO: << 404 /github/.env
2026-07-25 11:46:06,546 INFO: >> GET /actions/.env
2026-07-25 11:46:06,546 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:06,546 INFO: GET /actions/.env
2026-07-25 11:46:06,548 WARNING: GET /actions/.env -> 404
2026-07-25 11:46:06,551 INFO: << 404 /actions/.env
2026-07-25 11:46:06,828 INFO: >> GET /circleci/.env
2026-07-25 11:46:06,828 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:06,828 INFO: GET /circleci/.env
2026-07-25 11:46:06,830 WARNING: GET /circleci/.env -> 404
2026-07-25 11:46:06,833 INFO: << 404 /circleci/.env
2026-07-25 11:46:07,111 INFO: >> GET /travis/.env
2026-07-25 11:46:07,111 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:07,111 INFO: GET /travis/.env
2026-07-25 11:46:07,113 WARNING: GET /travis/.env -> 404
2026-07-25 11:46:07,117 INFO: << 404 /travis/.env
2026-07-25 11:46:07,400 INFO: >> GET /buildkite/.env
2026-07-25 11:46:07,400 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:07,400 INFO: GET /buildkite/.env
2026-07-25 11:46:07,402 WARNING: GET /buildkite/.env -> 404
2026-07-25 11:46:07,405 INFO: << 404 /buildkite/.env
2026-07-25 11:46:07,683 INFO: >> GET /mysql/.env
2026-07-25 11:46:07,684 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:07,684 INFO: GET /mysql/.env
2026-07-25 11:46:07,685 WARNING: GET /mysql/.env -> 404
2026-07-25 11:46:07,688 INFO: << 404 /mysql/.env
2026-07-25 11:46:07,964 INFO: >> GET /postgres/.env
2026-07-25 11:46:07,965 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:07,965 INFO: GET /postgres/.env
2026-07-25 11:46:07,966 WARNING: GET /postgres/.env -> 404
2026-07-25 11:46:07,969 INFO: << 404 /postgres/.env
2026-07-25 11:46:08,246 INFO: >> GET /mongodb/.env
2026-07-25 11:46:08,247 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:08,247 INFO: GET /mongodb/.env
2026-07-25 11:46:08,248 WARNING: GET /mongodb/.env -> 404
2026-07-25 11:46:08,250 INFO: << 404 /mongodb/.env
2026-07-25 11:46:08,527 INFO: >> GET /redis/.env
2026-07-25 11:46:08,527 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:08,527 INFO: GET /redis/.env
2026-07-25 11:46:08,529 WARNING: GET /redis/.env -> 404
2026-07-25 11:46:08,532 INFO: << 404 /redis/.env
2026-07-25 11:46:08,808 INFO: >> GET /elasticsearch/.env
2026-07-25 11:46:08,808 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:08,808 INFO: GET /elasticsearch/.env
2026-07-25 11:46:08,810 WARNING: GET /elasticsearch/.env -> 404
2026-07-25 11:46:08,812 INFO: << 404 /elasticsearch/.env
2026-07-25 11:46:09,090 INFO: >> GET /rabbitmq/.env
2026-07-25 11:46:09,090 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:09,091 INFO: GET /rabbitmq/.env
2026-07-25 11:46:09,092 WARNING: GET /rabbitmq/.env -> 404
2026-07-25 11:46:09,094 INFO: << 404 /rabbitmq/.env
2026-07-25 11:46:09,373 INFO: >> GET /kafka/.env
2026-07-25 11:46:09,373 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:09,373 INFO: GET /kafka/.env
2026-07-25 11:46:09,374 WARNING: GET /kafka/.env -> 404
2026-07-25 11:46:09,377 INFO: << 404 /kafka/.env
2026-07-25 11:46:09,654 INFO: >> GET /queue/.env
2026-07-25 11:46:09,654 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:09,654 INFO: GET /queue/.env
2026-07-25 11:46:09,656 WARNING: GET /queue/.env -> 404
2026-07-25 11:46:09,658 INFO: << 404 /queue/.env
2026-07-25 11:46:09,935 INFO: >> GET /worker/.env
2026-07-25 11:46:09,935 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:09,936 INFO: GET /worker/.env
2026-07-25 11:46:09,937 WARNING: GET /worker/.env -> 404
2026-07-25 11:46:09,940 INFO: << 404 /worker/.env
2026-07-25 11:46:10,216 INFO: >> GET /job/.env
2026-07-25 11:46:10,216 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:10,216 INFO: GET /job/.env
2026-07-25 11:46:10,218 WARNING: GET /job/.env -> 404
2026-07-25 11:46:10,220 INFO: << 404 /job/.env
2026-07-25 11:46:10,498 INFO: >> GET /test/.env
2026-07-25 11:46:10,498 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:10,498 INFO: GET /test/.env
2026-07-25 11:46:10,499 WARNING: GET /test/.env -> 404
2026-07-25 11:46:10,502 INFO: << 404 /test/.env
2026-07-25 11:46:10,778 INFO: >> GET /qa/.env
2026-07-25 11:46:10,779 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:10,779 INFO: GET /qa/.env
2026-07-25 11:46:10,780 WARNING: GET /qa/.env -> 404
2026-07-25 11:46:10,784 INFO: << 404 /qa/.env
2026-07-25 11:46:11,060 INFO: >> GET /preview/.env
2026-07-25 11:46:11,060 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:11,061 INFO: GET /preview/.env
2026-07-25 11:46:11,062 WARNING: GET /preview/.env -> 404
2026-07-25 11:46:11,065 INFO: << 404 /preview/.env
2026-07-25 11:46:11,341 INFO: >> GET /beta/.env
2026-07-25 11:46:11,341 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:11,342 INFO: GET /beta/.env
2026-07-25 11:46:11,343 WARNING: GET /beta/.env -> 404
2026-07-25 11:46:11,346 INFO: << 404 /beta/.env
2026-07-25 11:46:11,622 INFO: >> GET /uat/.env
2026-07-25 11:46:11,623 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:11,623 INFO: GET /uat/.env
2026-07-25 11:46:11,624 WARNING: GET /uat/.env -> 404
2026-07-25 11:46:11,627 INFO: << 404 /uat/.env
2026-07-25 11:46:11,903 INFO: >> GET /stage/.env
2026-07-25 11:46:11,904 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:11,904 INFO: GET /stage/.env
2026-07-25 11:46:11,905 WARNING: GET /stage/.env -> 404
2026-07-25 11:46:11,908 INFO: << 404 /stage/.env
2026-07-25 11:46:12,188 INFO: >> GET /development/.env
2026-07-25 11:46:12,188 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:12,189 INFO: GET /development/.env
2026-07-25 11:46:12,190 WARNING: GET /development/.env -> 404
2026-07-25 11:46:12,196 INFO: << 404 /development/.env
2026-07-25 11:46:12,474 INFO: >> GET /production/.env
2026-07-25 11:46:12,474 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:12,475 INFO: GET /production/.env
2026-07-25 11:46:12,476 WARNING: GET /production/.env -> 404
2026-07-25 11:46:12,479 INFO: << 404 /production/.env
2026-07-25 11:46:12,756 INFO: >> GET /config/app/.env
2026-07-25 11:46:12,757 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:12,757 INFO: GET /config/app/.env
2026-07-25 11:46:12,758 WARNING: GET /config/app/.env -> 404
2026-07-25 11:46:12,761 INFO: << 404 /config/app/.env
2026-07-25 11:46:13,037 INFO: >> GET /phpinfo.php
2026-07-25 11:46:13,038 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:13,038 INFO: GET /phpinfo.php
2026-07-25 11:46:13,039 WARNING: GET /phpinfo.php -> 404
2026-07-25 11:46:13,042 INFO: << 404 /phpinfo.php
2026-07-25 11:46:13,318 INFO: >> GET /info.php
2026-07-25 11:46:13,319 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:13,319 INFO: GET /info.php
2026-07-25 11:46:13,320 WARNING: GET /info.php -> 404
2026-07-25 11:46:13,322 INFO: << 404 /info.php
2026-07-25 11:46:13,599 INFO: >> GET /php.php
2026-07-25 11:46:13,599 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:13,599 INFO: GET /php.php
2026-07-25 11:46:13,600 WARNING: GET /php.php -> 404
2026-07-25 11:46:13,603 INFO: << 404 /php.php
2026-07-25 11:46:13,881 INFO: >> GET /i.php
2026-07-25 11:46:13,881 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:13,881 INFO: GET /i.php
2026-07-25 11:46:13,883 WARNING: GET /i.php -> 404
2026-07-25 11:46:13,886 INFO: << 404 /i.php
2026-07-25 11:46:14,164 INFO: >> GET /pi.php
2026-07-25 11:46:14,164 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:14,164 INFO: GET /pi.php
2026-07-25 11:46:14,166 WARNING: GET /pi.php -> 404
2026-07-25 11:46:14,169 INFO: << 404 /pi.php
2026-07-25 11:46:14,445 INFO: >> GET /pinfo.php
2026-07-25 11:46:14,446 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:14,446 INFO: GET /pinfo.php
2026-07-25 11:46:14,447 WARNING: GET /pinfo.php -> 404
2026-07-25 11:46:14,450 INFO: << 404 /pinfo.php
2026-07-25 11:46:14,726 INFO: >> GET /test.php
2026-07-25 11:46:14,726 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:14,727 INFO: GET /test.php
2026-07-25 11:46:14,728 WARNING: GET /test.php -> 404
2026-07-25 11:46:14,731 INFO: << 404 /test.php
2026-07-25 11:46:15,007 INFO: >> GET /phpinfo
2026-07-25 11:46:15,007 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:15,008 INFO: GET /phpinfo
2026-07-25 11:46:15,009 WARNING: GET /phpinfo -> 404
2026-07-25 11:46:15,012 INFO: << 404 /phpinfo
2026-07-25 11:46:15,299 INFO: >> GET /p.php
2026-07-25 11:46:15,299 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:15,300 INFO: GET /p.php
2026-07-25 11:46:15,301 WARNING: GET /p.php -> 404
2026-07-25 11:46:15,304 INFO: << 404 /p.php
2026-07-25 11:46:15,581 INFO: >> GET /debug.php
2026-07-25 11:46:15,582 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:15,582 INFO: GET /debug.php
2026-07-25 11:46:15,584 WARNING: GET /debug.php -> 404
2026-07-25 11:46:15,587 INFO: << 404 /debug.php
2026-07-25 11:46:15,863 INFO: >> GET /admin/phpinfo.php
2026-07-25 11:46:15,864 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:15,864 INFO: GET /admin/phpinfo.php
2026-07-25 11:46:15,865 WARNING: GET /admin/phpinfo.php -> 404
2026-07-25 11:46:15,868 INFO: << 404 /admin/phpinfo.php
2026-07-25 11:46:16,145 INFO: >> GET /test/phpinfo.php
2026-07-25 11:46:16,145 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:16,146 INFO: GET /test/phpinfo.php
2026-07-25 11:46:16,147 WARNING: GET /test/phpinfo.php -> 404
2026-07-25 11:46:16,149 INFO: << 404 /test/phpinfo.php
2026-07-25 11:46:16,426 INFO: >> GET /dev/phpinfo.php
2026-07-25 11:46:16,426 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:16,426 INFO: GET /dev/phpinfo.php
2026-07-25 11:46:16,428 WARNING: GET /dev/phpinfo.php -> 404
2026-07-25 11:46:16,430 INFO: << 404 /dev/phpinfo.php
2026-07-25 11:46:16,707 INFO: >> GET /old/phpinfo.php
2026-07-25 11:46:16,707 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:16,708 INFO: GET /old/phpinfo.php
2026-07-25 11:46:16,709 WARNING: GET /old/phpinfo.php -> 404
2026-07-25 11:46:16,711 INFO: << 404 /old/phpinfo.php
2026-07-25 11:46:16,988 INFO: >> GET /tmp/phpinfo.php
2026-07-25 11:46:16,988 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:16,989 INFO: GET /tmp/phpinfo.php
2026-07-25 11:46:16,990 WARNING: GET /tmp/phpinfo.php -> 404
2026-07-25 11:46:16,992 INFO: << 404 /tmp/phpinfo.php
2026-07-25 11:46:17,274 INFO: >> GET /public/phpinfo.php
2026-07-25 11:46:17,274 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:17,274 INFO: GET /public/phpinfo.php
2026-07-25 11:46:17,275 WARNING: GET /public/phpinfo.php -> 404
2026-07-25 11:46:17,280 INFO: << 404 /public/phpinfo.php
2026-07-25 11:46:17,556 INFO: >> GET /info
2026-07-25 11:46:17,556 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:17,557 INFO: GET /info
2026-07-25 11:46:17,558 WARNING: GET /info -> 404
2026-07-25 11:46:17,561 INFO: << 404 /info
2026-07-25 11:46:17,838 INFO: >> GET /php-info.php
2026-07-25 11:46:17,838 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:17,838 INFO: GET /php-info.php
2026-07-25 11:46:17,840 WARNING: GET /php-info.php -> 404
2026-07-25 11:46:17,842 INFO: << 404 /php-info.php
2026-07-25 11:46:18,119 INFO: >> GET /phpversion.php
2026-07-25 11:46:18,119 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:18,119 INFO: GET /phpversion.php
2026-07-25 11:46:18,120 WARNING: GET /phpversion.php -> 404
2026-07-25 11:46:18,123 INFO: << 404 /phpversion.php
2026-07-25 11:46:18,400 INFO: >> GET /_phpinfo.php
2026-07-25 11:46:18,400 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:18,400 INFO: GET /_phpinfo.php
2026-07-25 11:46:18,401 WARNING: GET /_phpinfo.php -> 404
2026-07-25 11:46:18,404 INFO: << 404 /_phpinfo.php
2026-07-25 11:46:18,681 INFO: >> GET /old_phpinfo.php
2026-07-25 11:46:18,681 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:18,681 INFO: GET /old_phpinfo.php
2026-07-25 11:46:18,683 WARNING: GET /old_phpinfo.php -> 404
2026-07-25 11:46:18,687 INFO: << 404 /old_phpinfo.php
2026-07-25 11:46:18,964 INFO: >> GET /server-info.php
2026-07-25 11:46:18,964 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:18,965 INFO: GET /server-info.php
2026-07-25 11:46:18,966 WARNING: GET /server-info.php -> 404
2026-07-25 11:46:18,969 INFO: << 404 /server-info.php
2026-07-25 11:46:19,254 INFO: >> GET /server-status.php
2026-07-25 11:46:19,254 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:19,255 INFO: GET /server-status.php
2026-07-25 11:46:19,256 WARNING: GET /server-status.php -> 404
2026-07-25 11:46:19,259 INFO: << 404 /server-status.php
2026-07-25 11:46:19,539 INFO: >> GET /_profiler/phpinfo
2026-07-25 11:46:19,539 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:19,539 INFO: GET /_profiler/phpinfo
2026-07-25 11:46:19,541 WARNING: GET /_profiler/phpinfo -> 404
2026-07-25 11:46:19,544 INFO: << 404 /_profiler/phpinfo
2026-07-25 11:46:19,822 INFO: >> GET /_environment
2026-07-25 11:46:19,822 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:19,823 INFO: GET /_environment
2026-07-25 11:46:19,824 WARNING: GET /_environment -> 404
2026-07-25 11:46:19,827 INFO: << 404 /_environment
2026-07-25 11:46:20,104 INFO: >> GET /webroot/index.php/_environment
2026-07-25 11:46:20,104 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:20,105 INFO: GET /webroot/index.php/_environment
2026-07-25 11:46:20,106 WARNING: GET /webroot/index.php/_environment -> 404
2026-07-25 11:46:20,110 INFO: << 404 /webroot/index.php/_environment
2026-07-25 11:46:20,400 INFO: >> GET /mail/phpinfo.php
2026-07-25 11:46:20,400 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:20,401 INFO: GET /mail/phpinfo.php
2026-07-25 11:46:20,402 WARNING: GET /mail/phpinfo.php -> 404
2026-07-25 11:46:20,405 INFO: << 404 /mail/phpinfo.php
2026-07-25 11:46:20,683 INFO: >> GET /cpanel/phpinfo.php
2026-07-25 11:46:20,683 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:20,683 INFO: GET /cpanel/phpinfo.php
2026-07-25 11:46:20,685 WARNING: GET /cpanel/phpinfo.php -> 404
2026-07-25 11:46:20,688 INFO: << 404 /cpanel/phpinfo.php
2026-07-25 11:46:20,966 INFO: >> GET /hosting/phpinfo.php
2026-07-25 11:46:20,966 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:20,966 INFO: GET /hosting/phpinfo.php
2026-07-25 11:46:20,967 WARNING: GET /hosting/phpinfo.php -> 404
2026-07-25 11:46:20,974 INFO: << 404 /hosting/phpinfo.php
2026-07-25 11:46:22,096 INFO: >> GET /smtp/phpinfo.php
2026-07-25 11:46:22,096 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:22,097 INFO: GET /smtp/phpinfo.php
2026-07-25 11:46:22,098 WARNING: GET /smtp/phpinfo.php -> 404
2026-07-25 11:46:22,102 INFO: << 404 /smtp/phpinfo.php
2026-07-25 11:46:22,379 INFO: >> GET /phpinfo.php.bak
2026-07-25 11:46:22,379 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:22,380 INFO: GET /phpinfo.php.bak
2026-07-25 11:46:22,381 WARNING: GET /phpinfo.php.bak -> 404
2026-07-25 11:46:22,384 INFO: << 404 /phpinfo.php.bak
2026-07-25 11:46:22,661 INFO: >> GET /phpinfo.php.old
2026-07-25 11:46:22,661 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:22,661 INFO: GET /phpinfo.php.old
2026-07-25 11:46:22,663 WARNING: GET /phpinfo.php.old -> 404
2026-07-25 11:46:22,666 INFO: << 404 /phpinfo.php.old
2026-07-25 11:46:22,944 INFO: >> GET /phpinfo.php~
2026-07-25 11:46:22,944 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:22,944 INFO: GET /phpinfo.php~
2026-07-25 11:46:22,946 WARNING: GET /phpinfo.php~ -> 404
2026-07-25 11:46:22,949 INFO: << 404 /phpinfo.php~
2026-07-25 11:46:23,225 INFO: >> GET /info.php.bak
2026-07-25 11:46:23,225 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:23,225 INFO: GET /info.php.bak
2026-07-25 11:46:23,227 WARNING: GET /info.php.bak -> 404
2026-07-25 11:46:23,229 INFO: << 404 /info.php.bak
2026-07-25 11:46:23,506 INFO: >> GET /phpinfo.php.save
2026-07-25 11:46:23,506 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:23,507 INFO: GET /phpinfo.php.save
2026-07-25 11:46:23,508 WARNING: GET /phpinfo.php.save -> 404
2026-07-25 11:46:23,511 INFO: << 404 /phpinfo.php.save
2026-07-25 11:46:23,793 INFO: >> GET /staging/phpinfo.php
2026-07-25 11:46:23,793 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:23,793 INFO: GET /staging/phpinfo.php
2026-07-25 11:46:23,795 WARNING: GET /staging/phpinfo.php -> 404
2026-07-25 11:46:23,803 INFO: << 404 /staging/phpinfo.php
2026-07-25 11:46:24,084 INFO: >> GET /beta/phpinfo.php
2026-07-25 11:46:24,084 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:24,084 INFO: GET /beta/phpinfo.php
2026-07-25 11:46:24,086 WARNING: GET /beta/phpinfo.php -> 404
2026-07-25 11:46:24,089 INFO: << 404 /beta/phpinfo.php
2026-07-25 11:46:24,366 INFO: >> GET /uat/phpinfo.php
2026-07-25 11:46:24,366 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:24,366 INFO: GET /uat/phpinfo.php
2026-07-25 11:46:24,368 WARNING: GET /uat/phpinfo.php -> 404
2026-07-25 11:46:24,371 INFO: << 404 /uat/phpinfo.php
2026-07-25 11:46:24,648 INFO: >> GET /qa/phpinfo.php
2026-07-25 11:46:24,648 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:24,648 INFO: GET /qa/phpinfo.php
2026-07-25 11:46:24,650 WARNING: GET /qa/phpinfo.php -> 404
2026-07-25 11:46:24,652 INFO: << 404 /qa/phpinfo.php
2026-07-25 11:46:24,928 INFO: >> GET /preview/phpinfo.php
2026-07-25 11:46:24,929 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:24,929 INFO: GET /preview/phpinfo.php
2026-07-25 11:46:24,930 WARNING: GET /preview/phpinfo.php -> 404
2026-07-25 11:46:24,932 INFO: << 404 /preview/phpinfo.php
2026-07-25 11:46:25,209 INFO: >> GET /www/phpinfo.php
2026-07-25 11:46:25,209 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:25,209 INFO: GET /www/phpinfo.php
2026-07-25 11:46:25,211 WARNING: GET /www/phpinfo.php -> 404
2026-07-25 11:46:25,213 INFO: << 404 /www/phpinfo.php
2026-07-25 11:46:25,490 INFO: >> GET /htdocs/phpinfo.php
2026-07-25 11:46:25,490 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:25,490 INFO: GET /htdocs/phpinfo.php
2026-07-25 11:46:25,492 WARNING: GET /htdocs/phpinfo.php -> 404
2026-07-25 11:46:25,494 INFO: << 404 /htdocs/phpinfo.php
2026-07-25 11:46:25,770 INFO: >> GET /public_html/phpinfo.php
2026-07-25 11:46:25,770 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:25,771 INFO: GET /public_html/phpinfo.php
2026-07-25 11:46:25,772 WARNING: GET /public_html/phpinfo.php -> 404
2026-07-25 11:46:25,774 INFO: << 404 /public_html/phpinfo.php
2026-07-25 11:46:26,051 INFO: >> GET /site/phpinfo.php
2026-07-25 11:46:26,051 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:26,051 INFO: GET /site/phpinfo.php
2026-07-25 11:46:26,052 WARNING: GET /site/phpinfo.php -> 404
2026-07-25 11:46:26,055 INFO: << 404 /site/phpinfo.php
2026-07-25 11:46:26,331 INFO: >> GET /docs/phpinfo.php
2026-07-25 11:46:26,332 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:26,332 INFO: GET /docs/phpinfo.php
2026-07-25 11:46:26,333 WARNING: GET /docs/phpinfo.php -> 404
2026-07-25 11:46:26,336 INFO: << 404 /docs/phpinfo.php
2026-07-25 11:46:26,612 INFO: >> GET /wp-admin/phpinfo.php
2026-07-25 11:46:26,613 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:26,613 INFO: GET /wp-admin/phpinfo.php
2026-07-25 11:46:26,614 WARNING: GET /wp-admin/phpinfo.php -> 404
2026-07-25 11:46:26,617 INFO: << 404 /wp-admin/phpinfo.php
2026-07-25 11:46:26,894 INFO: >> GET /administrator/phpinfo.php
2026-07-25 11:46:26,894 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:26,894 INFO: GET /administrator/phpinfo.php
2026-07-25 11:46:26,896 WARNING: GET /administrator/phpinfo.php -> 404
2026-07-25 11:46:26,900 INFO: << 404 /administrator/phpinfo.php
2026-07-25 11:46:27,176 INFO: >> GET /core/phpinfo.php
2026-07-25 11:46:27,176 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:27,177 INFO: GET /core/phpinfo.php
2026-07-25 11:46:27,178 WARNING: GET /core/phpinfo.php -> 404
2026-07-25 11:46:27,181 INFO: << 404 /core/phpinfo.php
2026-07-25 11:46:27,457 INFO: >> GET /includes/phpinfo.php
2026-07-25 11:46:27,457 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:27,458 INFO: GET /includes/phpinfo.php
2026-07-25 11:46:27,459 WARNING: GET /includes/phpinfo.php -> 404
2026-07-25 11:46:27,462 INFO: << 404 /includes/phpinfo.php
2026-07-25 11:46:27,738 INFO: >> GET /service-account.json
2026-07-25 11:46:27,738 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:27,739 INFO: GET /service-account.json
2026-07-25 11:46:27,740 WARNING: GET /service-account.json -> 404
2026-07-25 11:46:27,743 INFO: << 404 /service-account.json
2026-07-25 11:46:28,023 INFO: >> GET /sa.json
2026-07-25 11:46:28,023 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:28,024 INFO: GET /sa.json
2026-07-25 11:46:28,025 WARNING: GET /sa.json -> 404
2026-07-25 11:46:28,028 INFO: << 404 /sa.json
2026-07-25 11:46:28,306 INFO: >> GET /gcp-key.json
2026-07-25 11:46:28,306 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:28,307 INFO: GET /gcp-key.json
2026-07-25 11:46:28,308 WARNING: GET /gcp-key.json -> 404
2026-07-25 11:46:28,311 INFO: << 404 /gcp-key.json
2026-07-25 11:46:28,589 INFO: >> GET /gcp-credentials.json
2026-07-25 11:46:28,589 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:28,589 INFO: GET /gcp-credentials.json
2026-07-25 11:46:28,591 WARNING: GET /gcp-credentials.json -> 404
2026-07-25 11:46:28,593 INFO: << 404 /gcp-credentials.json
2026-07-25 11:46:28,869 INFO: >> GET /gcp-sa.json
2026-07-25 11:46:28,870 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:28,870 INFO: GET /gcp-sa.json
2026-07-25 11:46:28,871 WARNING: GET /gcp-sa.json -> 404
2026-07-25 11:46:28,874 INFO: << 404 /gcp-sa.json
2026-07-25 11:46:29,150 INFO: >> GET /credentials.json
2026-07-25 11:46:29,150 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:29,151 INFO: GET /credentials.json
2026-07-25 11:46:29,152 WARNING: GET /credentials.json -> 404
2026-07-25 11:46:29,155 INFO: << 404 /credentials.json
2026-07-25 11:46:29,431 INFO: >> GET /google-credentials.json
2026-07-25 11:46:29,431 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:29,432 INFO: GET /google-credentials.json
2026-07-25 11:46:29,433 WARNING: GET /google-credentials.json -> 404
2026-07-25 11:46:29,436 INFO: << 404 /google-credentials.json
2026-07-25 11:46:29,712 INFO: >> GET /google-key.json
2026-07-25 11:46:29,712 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:29,712 INFO: GET /google-key.json
2026-07-25 11:46:29,714 WARNING: GET /google-key.json -> 404
2026-07-25 11:46:29,717 INFO: << 404 /google-key.json
2026-07-25 11:46:29,996 INFO: >> GET /.config/gcloud/application_default_credentials.json
2026-07-25 11:46:29,996 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:29,996 INFO: GET /.config/gcloud/application_default_credentials.json
2026-07-25 11:46:29,997 WARNING: GET /.config/gcloud/application_default_credentials.json -> 404
2026-07-25 11:46:30,000 INFO: << 404 /.config/gcloud/application_default_credentials.json
2026-07-25 11:46:30,276 INFO: >> GET /application_default_credentials.json
2026-07-25 11:46:30,276 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:30,276 INFO: GET /application_default_credentials.json
2026-07-25 11:46:30,277 WARNING: GET /application_default_credentials.json -> 404
2026-07-25 11:46:30,280 INFO: << 404 /application_default_credentials.json
2026-07-25 11:46:30,556 INFO: >> GET /key.json
2026-07-25 11:46:30,556 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:30,557 INFO: GET /key.json
2026-07-25 11:46:30,558 WARNING: GET /key.json -> 404
2026-07-25 11:46:30,561 INFO: << 404 /key.json
2026-07-25 11:46:30,837 INFO: >> GET /keyfile.json
2026-07-25 11:46:30,838 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:30,838 INFO: GET /keyfile.json
2026-07-25 11:46:30,839 WARNING: GET /keyfile.json -> 404
2026-07-25 11:46:30,842 INFO: << 404 /keyfile.json
2026-07-25 11:46:31,118 INFO: >> GET /firebase-adminsdk.json
2026-07-25 11:46:31,119 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:31,119 INFO: GET /firebase-adminsdk.json
2026-07-25 11:46:31,120 WARNING: GET /firebase-adminsdk.json -> 404
2026-07-25 11:46:31,123 INFO: << 404 /firebase-adminsdk.json
2026-07-25 11:46:31,399 INFO: >> GET /firebase-key.json
2026-07-25 11:46:31,399 DEBUG: Using selector: EpollSelector
2026-07-25 11:46:31,400 INFO: GET /firebase-key.json
2026-07-25 11:46:31,401 WARNING: GET /firebase-key.json -> 404
2026-07-25 11:46:31,404 INFO: << 404 /firebase-key.json
2026-07-25 11:49:21,538 INFO: >> GET /
2026-07-25 11:49:21,539 DEBUG: Using selector: EpollSelector
2026-07-25 11:49:21,550 INFO: GET /
2026-07-25 11:49:21,552 WARNING: GET / -> 404
2026-07-25 11:49:21,582 INFO: << 404 /
2026-07-25 11:49:27,140 INFO: >> GET /favicon.ico
2026-07-25 11:49:27,141 DEBUG: Using selector: EpollSelector
2026-07-25 11:49:27,151 INFO: GET /favicon.ico
2026-07-25 11:49:27,154 WARNING: GET /favicon.ico -> 404
2026-07-25 11:49:27,189 INFO: << 404 /favicon.ico
2026-07-25 12:16:29,643 INFO: wsgi.py loading...
2026-07-25 12:16:29,643 INFO: Importing app.main...
2026-07-25 12:16:31,460 INFO: app.main imported successfully.
2026-07-25 12:16:31,460 INFO: Running DB init...
2026-07-25 12:16:31,527 INFO: All tables OK.
2026-07-25 12:16:31,678 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 12:16:31,681 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,684 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,686 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,689 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,692 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,695 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 12:16:31,703 INFO: Dip chart data seeded.
2026-07-25 12:16:31,703 INFO: DB init complete.
2026-07-25 12:16:31,703 INFO: wsgi.py ready.
2026-07-25 12:16:31,707 INFO: >> GET /
2026-07-25 12:16:31,708 DEBUG: Using selector: EpollSelector
2026-07-25 12:16:31,718 INFO: GET /
2026-07-25 12:16:31,721 WARNING: GET / -> 404
2026-07-25 12:16:31,730 INFO: << 404 /
2026-07-25 13:54:28,702 INFO: wsgi.py loading...
2026-07-25 13:54:28,703 INFO: Importing app.main...
2026-07-25 13:54:31,616 INFO: app.main imported successfully.
2026-07-25 13:54:31,616 INFO: Running DB init...
2026-07-25 13:54:31,679 INFO: All tables OK.
2026-07-25 13:54:31,822 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 13:54:31,825 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,828 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,831 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,833 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,836 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,839 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 13:54:31,848 INFO: Dip chart data seeded.
2026-07-25 13:54:31,848 INFO: DB init complete.
2026-07-25 13:54:31,848 INFO: wsgi.py ready.
2026-07-25 13:54:31,852 INFO: >> GET /
2026-07-25 13:54:31,853 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:31,863 INFO: GET /
2026-07-25 13:54:31,866 WARNING: GET / -> 404
2026-07-25 13:54:31,875 INFO: << 404 /
2026-07-25 13:54:32,040 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,040 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,041 INFO: GET //wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,042 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:32,045 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,208 INFO: >> GET //xmlrpc.php
2026-07-25 13:54:32,208 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,209 INFO: GET //xmlrpc.php
2026-07-25 13:54:32,210 WARNING: GET //xmlrpc.php -> 404
2026-07-25 13:54:32,213 INFO: << 404 //xmlrpc.php
2026-07-25 13:54:32,375 INFO: >> GET /
2026-07-25 13:54:32,376 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,376 INFO: GET /
2026-07-25 13:54:32,377 WARNING: GET / -> 404
2026-07-25 13:54:32,380 INFO: << 404 /
2026-07-25 13:54:32,542 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,542 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,543 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,544 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:32,547 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,709 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,709 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,710 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,711 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:32,714 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,878 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,878 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:32,878 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-25 13:54:32,880 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:32,883 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,045 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,045 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,046 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,047 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,050 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,212 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,213 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,213 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,214 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,217 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,382 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,382 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,382 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,383 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,387 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,549 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,550 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,550 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,551 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,554 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,717 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,717 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,717 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,718 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,721 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,885 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,885 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:33,886 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-07-25 13:54:33,887 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:33,890 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,052 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,053 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,053 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,054 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,056 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,240 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,240 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,241 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,242 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,244 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,407 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,407 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,407 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,409 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,411 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,574 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,574 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,574 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,575 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,579 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,742 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,742 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,742 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,743 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,746 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,910 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,910 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:34,910 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-07-25 13:54:34,911 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:34,915 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-07-25 13:54:35,078 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-07-25 13:54:35,078 DEBUG: Using selector: EpollSelector
2026-07-25 13:54:35,078 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-07-25 13:54:35,080 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-07-25 13:54:35,082 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-07-25 14:45:05,628 INFO: wsgi.py loading...
2026-07-25 14:45:05,629 INFO: Importing app.main...
2026-07-25 14:45:07,454 INFO: app.main imported successfully.
2026-07-25 14:45:07,455 INFO: Running DB init...
2026-07-25 14:45:07,540 INFO: All tables OK.
2026-07-25 14:45:07,716 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 14:45:07,721 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,725 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,727 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,734 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,737 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,740 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 14:45:07,748 INFO: Dip chart data seeded.
2026-07-25 14:45:07,749 INFO: DB init complete.
2026-07-25 14:45:07,749 INFO: wsgi.py ready.
2026-07-25 14:45:07,752 INFO: >> POST /
2026-07-25 14:45:07,753 DEBUG: Using selector: EpollSelector
2026-07-25 14:45:07,754 INFO: >> POST /
2026-07-25 14:45:07,756 DEBUG: Using selector: EpollSelector
2026-07-25 14:45:07,764 INFO: POST /
2026-07-25 14:45:07,767 WARNING: POST / -> 404
2026-07-25 14:45:07,767 INFO: POST /
2026-07-25 14:45:07,770 WARNING: POST / -> 404
2026-07-25 14:45:07,777 INFO: << 404 /
2026-07-25 14:45:07,781 INFO: << 404 /
2026-07-25 14:50:06,405 INFO: >> GET /
2026-07-25 14:50:06,407 DEBUG: Using selector: EpollSelector
2026-07-25 14:50:06,418 INFO: GET /
2026-07-25 14:50:06,421 WARNING: GET / -> 404
2026-07-25 14:50:06,449 INFO: << 404 /
2026-07-25 15:26:14,496 INFO: wsgi.py loading...
2026-07-25 15:26:14,497 INFO: Importing app.main...
2026-07-25 15:26:16,398 INFO: app.main imported successfully.
2026-07-25 15:26:16,399 INFO: Running DB init...
2026-07-25 15:26:16,464 INFO: All tables OK.
2026-07-25 15:26:16,603 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 15:26:16,605 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,608 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,610 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,613 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,616 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,618 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 15:26:16,626 INFO: Dip chart data seeded.
2026-07-25 15:26:16,627 INFO: DB init complete.
2026-07-25 15:26:16,627 INFO: wsgi.py ready.
2026-07-25 15:26:16,630 INFO: >> GET /wp-login.php
2026-07-25 15:26:16,631 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:16,632 INFO: >> GET /wp-login.php
2026-07-25 15:26:16,633 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:16,642 INFO: GET /wp-login.php
2026-07-25 15:26:16,643 INFO: GET /wp-login.php
2026-07-25 15:26:16,645 WARNING: GET /wp-login.php -> 404
2026-07-25 15:26:16,646 WARNING: GET /wp-login.php -> 404
2026-07-25 15:26:16,654 INFO: << 404 /wp-login.php
2026-07-25 15:26:16,655 INFO: << 404 /wp-login.php
2026-07-25 15:26:16,987 INFO: >> GET /administrator/index.php
2026-07-25 15:26:16,987 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:16,987 INFO: GET /administrator/index.php
2026-07-25 15:26:16,989 WARNING: GET /administrator/index.php -> 404
2026-07-25 15:26:16,993 INFO: << 404 /administrator/index.php
2026-07-25 15:26:17,052 INFO: >> GET /
2026-07-25 15:26:17,052 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:17,052 INFO: >> GET /administrator/index.php
2026-07-25 15:26:17,052 INFO: GET /
2026-07-25 15:26:17,053 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:17,053 INFO: GET /administrator/index.php
2026-07-25 15:26:17,054 WARNING: GET / -> 404
2026-07-25 15:26:17,055 WARNING: GET /administrator/index.php -> 404
2026-07-25 15:26:17,058 INFO: << 404 /
2026-07-25 15:26:17,091 INFO: << 404 /administrator/index.php
2026-07-25 15:26:17,270 INFO: >> GET /
2026-07-25 15:26:17,270 DEBUG: Using selector: EpollSelector
2026-07-25 15:26:17,271 INFO: GET /
2026-07-25 15:26:17,272 WARNING: GET / -> 404
2026-07-25 15:26:17,275 INFO: << 404 /
2026-07-25 15:28:25,429 INFO: >> GET /
2026-07-25 15:28:25,429 DEBUG: Using selector: EpollSelector
2026-07-25 15:28:25,430 INFO: GET /
2026-07-25 15:28:25,433 WARNING: GET / -> 404
2026-07-25 15:28:25,437 INFO: >> GET /
2026-07-25 15:28:25,438 DEBUG: Using selector: EpollSelector
2026-07-25 15:28:25,438 INFO: GET /
2026-07-25 15:28:25,439 WARNING: GET / -> 404
2026-07-25 15:28:25,453 INFO: << 404 /
2026-07-25 15:28:25,460 INFO: << 404 /
2026-07-25 15:29:28,292 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-25 15:29:28,293 DEBUG: Using selector: EpollSelector
2026-07-25 15:29:28,293 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-25 15:29:28,294 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-07-25 15:29:28,314 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-25 17:17:17,232 INFO: wsgi.py loading...
2026-07-25 17:17:17,233 INFO: Importing app.main...
2026-07-25 17:17:19,335 INFO: app.main imported successfully.
2026-07-25 17:17:19,336 INFO: Running DB init...
2026-07-25 17:17:19,407 INFO: All tables OK.
2026-07-25 17:17:19,558 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 17:17:19,561 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,564 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,591 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,594 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,597 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,600 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 17:17:19,609 INFO: Dip chart data seeded.
2026-07-25 17:17:19,610 INFO: DB init complete.
2026-07-25 17:17:19,610 INFO: wsgi.py ready.
2026-07-25 17:17:19,613 INFO: >> POST /
2026-07-25 17:17:19,614 DEBUG: Using selector: EpollSelector
2026-07-25 17:17:19,624 INFO: POST /
2026-07-25 17:17:19,627 WARNING: POST / -> 404
2026-07-25 17:17:19,636 INFO: << 404 /
2026-07-25 17:17:23,330 INFO: >> GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 17:17:23,332 DEBUG: Using selector: EpollSelector
2026-07-25 17:17:23,343 INFO: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 17:17:23,346 WARNING: GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php -> 404
2026-07-25 17:17:23,356 INFO: << 404 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
2026-07-25 18:54:06,920 INFO: wsgi.py loading...
2026-07-25 18:54:06,920 INFO: Importing app.main...
2026-07-25 18:54:08,715 INFO: app.main imported successfully.
2026-07-25 18:54:08,715 INFO: Running DB init...
2026-07-25 18:54:08,781 INFO: All tables OK.
2026-07-25 18:54:08,975 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 18:54:08,978 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:08,981 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:08,998 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:09,017 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:09,026 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:09,075 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 18:54:09,084 INFO: Dip chart data seeded.
2026-07-25 18:54:09,084 INFO: DB init complete.
2026-07-25 18:54:09,084 INFO: wsgi.py ready.
2026-07-25 18:54:09,088 INFO: >> GET /
2026-07-25 18:54:09,105 DEBUG: Using selector: EpollSelector
2026-07-25 18:54:09,117 INFO: GET /
2026-07-25 18:54:09,119 WARNING: GET / -> 404
2026-07-25 18:54:09,130 INFO: << 404 /
2026-07-25 19:56:01,732 INFO: wsgi.py loading...
2026-07-25 19:56:01,733 INFO: Importing app.main...
2026-07-25 19:56:03,559 INFO: app.main imported successfully.
2026-07-25 19:56:03,559 INFO: Running DB init...
2026-07-25 19:56:03,626 INFO: All tables OK.
2026-07-25 19:56:03,768 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 19:56:03,771 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,774 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,777 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,780 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,783 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,786 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 19:56:03,794 INFO: Dip chart data seeded.
2026-07-25 19:56:03,794 INFO: DB init complete.
2026-07-25 19:56:03,794 INFO: wsgi.py ready.
2026-07-25 19:56:03,797 INFO: >> GET /
2026-07-25 19:56:03,799 DEBUG: Using selector: EpollSelector
2026-07-25 19:56:03,800 INFO: >> GET /
2026-07-25 19:56:03,801 DEBUG: Using selector: EpollSelector
2026-07-25 19:56:03,809 INFO: GET /
2026-07-25 19:56:03,811 INFO: GET /
2026-07-25 19:56:03,812 WARNING: GET / -> 404
2026-07-25 19:56:03,814 WARNING: GET / -> 404
2026-07-25 19:56:03,822 INFO: << 404 /
2026-07-25 19:56:03,821 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 474, in _read_ok_packet
    raise err.OperationalError(
pymysql.err.OperationalError: (2014, 'Command Out of Sync')
2026-07-25 19:56:03,828 INFO: << 404 /
2026-07-25 19:56:34,442 INFO: >> GET /
2026-07-25 19:56:34,442 DEBUG: Using selector: EpollSelector
2026-07-25 19:56:34,443 INFO: GET /
2026-07-25 19:56:34,444 WARNING: GET / -> 404
2026-07-25 19:56:34,463 INFO: << 404 /
2026-07-25 20:01:04,803 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 826, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
2026-07-25 22:20:47,203 INFO: wsgi.py loading...
2026-07-25 22:20:47,204 INFO: Importing app.main...
2026-07-25 22:20:49,116 INFO: app.main imported successfully.
2026-07-25 22:20:49,116 INFO: Running DB init...
2026-07-25 22:20:49,180 INFO: All tables OK.
2026-07-25 22:20:49,322 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 22:20:49,325 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,327 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,330 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,333 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,336 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,338 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 22:20:49,347 INFO: Dip chart data seeded.
2026-07-25 22:20:49,347 INFO: DB init complete.
2026-07-25 22:20:49,347 INFO: wsgi.py ready.
2026-07-25 22:20:49,351 INFO: >> GET /
2026-07-25 22:20:49,352 DEBUG: Using selector: EpollSelector
2026-07-25 22:20:49,363 INFO: GET /
2026-07-25 22:20:49,365 WARNING: GET / -> 404
2026-07-25 22:20:49,374 INFO: << 404 /
2026-07-25 22:28:33,403 INFO: >> GET /
2026-07-25 22:28:33,405 DEBUG: Using selector: EpollSelector
2026-07-25 22:28:33,415 INFO: GET /
2026-07-25 22:28:33,418 WARNING: GET / -> 404
2026-07-25 22:28:33,444 INFO: << 404 /
2026-07-25 22:28:33,550 INFO: >> GET /
2026-07-25 22:28:33,552 DEBUG: Using selector: EpollSelector
2026-07-25 22:28:33,562 INFO: GET /
2026-07-25 22:28:33,564 WARNING: GET / -> 404
2026-07-25 22:28:33,593 INFO: << 404 /
2026-07-25 22:28:45,245 INFO: >> GET /
2026-07-25 22:28:45,246 DEBUG: Using selector: EpollSelector
2026-07-25 22:28:45,256 INFO: GET /
2026-07-25 22:28:45,259 WARNING: GET / -> 404
2026-07-25 22:28:45,288 INFO: << 404 /
2026-07-25 22:28:52,898 INFO: >> GET /
2026-07-25 22:28:52,898 DEBUG: Using selector: EpollSelector
2026-07-25 22:28:52,898 INFO: GET /
2026-07-25 22:28:52,899 WARNING: GET / -> 404
2026-07-25 22:28:52,902 INFO: << 404 /
2026-07-25 22:28:53,361 INFO: >> GET /
2026-07-25 22:28:53,362 DEBUG: Using selector: EpollSelector
2026-07-25 22:28:53,372 INFO: GET /
2026-07-25 22:28:53,374 WARNING: GET / -> 404
2026-07-25 22:28:53,404 INFO: << 404 /
2026-07-25 22:29:01,553 INFO: >> GET /
2026-07-25 22:29:01,554 DEBUG: Using selector: EpollSelector
2026-07-25 22:29:01,566 INFO: GET /
2026-07-25 22:29:01,568 WARNING: GET / -> 404
2026-07-25 22:29:01,600 INFO: << 404 /
2026-07-25 22:29:01,662 INFO: >> GET /
2026-07-25 22:29:01,662 DEBUG: Using selector: EpollSelector
2026-07-25 22:29:01,662 INFO: GET /
2026-07-25 22:29:01,663 WARNING: GET / -> 404
2026-07-25 22:29:01,671 INFO: << 404 /
2026-07-25 23:05:47,115 INFO: wsgi.py loading...
2026-07-25 23:05:47,116 INFO: Importing app.main...
2026-07-25 23:05:48,895 INFO: app.main imported successfully.
2026-07-25 23:05:48,895 INFO: Running DB init...
2026-07-25 23:05:48,958 INFO: All tables OK.
2026-07-25 23:05:49,098 INFO: Migration OK: allowances ENUM+DAILY
2026-07-25 23:05:49,101 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,119 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,122 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,125 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,128 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,130 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-25 23:05:49,139 INFO: Dip chart data seeded.
2026-07-25 23:05:49,139 INFO: DB init complete.
2026-07-25 23:05:49,139 INFO: wsgi.py ready.
2026-07-25 23:05:49,142 INFO: >> GET /
2026-07-25 23:05:49,144 DEBUG: Using selector: EpollSelector
2026-07-25 23:05:49,154 INFO: GET /
2026-07-25 23:05:49,156 WARNING: GET / -> 404
2026-07-25 23:05:49,166 INFO: << 404 /
2026-07-26 00:26:32,212 INFO: wsgi.py loading...
2026-07-26 00:26:32,213 INFO: Importing app.main...
2026-07-26 00:26:33,984 INFO: app.main imported successfully.
2026-07-26 00:26:33,984 INFO: Running DB init...
2026-07-26 00:26:34,049 INFO: All tables OK.
2026-07-26 00:26:34,184 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 00:26:34,187 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,190 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,192 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,195 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,197 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,200 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 00:26:34,208 INFO: Dip chart data seeded.
2026-07-26 00:26:34,209 INFO: DB init complete.
2026-07-26 00:26:34,209 INFO: wsgi.py ready.
2026-07-26 00:26:34,212 INFO: >> GET /
2026-07-26 00:26:34,213 DEBUG: Using selector: EpollSelector
2026-07-26 00:26:34,214 INFO: >> GET /
2026-07-26 00:26:34,215 DEBUG: Using selector: EpollSelector
2026-07-26 00:26:34,224 INFO: GET /
2026-07-26 00:26:34,225 INFO: GET /
2026-07-26 00:26:34,226 WARNING: GET / -> 404
2026-07-26 00:26:34,228 WARNING: GET / -> 404
2026-07-26 00:26:34,236 INFO: << 404 /
2026-07-26 00:26:34,237 INFO: << 404 /
2026-07-26 04:44:12,566 INFO: wsgi.py loading...
2026-07-26 04:44:12,567 INFO: Importing app.main...
2026-07-26 04:44:14,354 INFO: app.main imported successfully.
2026-07-26 04:44:14,354 INFO: Running DB init...
2026-07-26 04:44:14,429 INFO: All tables OK.
2026-07-26 04:44:14,589 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 04:44:14,592 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,595 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,598 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,601 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,604 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,606 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 04:44:14,614 INFO: Dip chart data seeded.
2026-07-26 04:44:14,614 INFO: DB init complete.
2026-07-26 04:44:14,614 INFO: wsgi.py ready.
2026-07-26 04:44:14,617 INFO: >> GET /
2026-07-26 04:44:14,619 DEBUG: Using selector: EpollSelector
2026-07-26 04:44:14,629 INFO: GET /
2026-07-26 04:44:14,631 WARNING: GET / -> 404
2026-07-26 04:44:14,640 INFO: << 404 /
2026-07-26 07:35:32,493 INFO: wsgi.py loading...
2026-07-26 07:35:32,494 INFO: Importing app.main...
2026-07-26 07:35:35,086 INFO: app.main imported successfully.
2026-07-26 07:35:35,086 INFO: Running DB init...
2026-07-26 07:35:35,152 INFO: All tables OK.
2026-07-26 07:35:35,290 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 07:35:35,293 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,295 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,298 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,301 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,304 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,306 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 07:35:35,314 INFO: Dip chart data seeded.
2026-07-26 07:35:35,315 INFO: DB init complete.
2026-07-26 07:35:35,315 INFO: wsgi.py ready.
2026-07-26 07:35:35,319 INFO: >> GET /
2026-07-26 07:35:35,320 DEBUG: Using selector: EpollSelector
2026-07-26 07:35:35,330 INFO: GET /
2026-07-26 07:35:35,333 WARNING: GET / -> 404
2026-07-26 07:35:35,342 INFO: << 404 /
2026-07-26 10:13:04,534 INFO: wsgi.py loading...
2026-07-26 10:13:04,534 INFO: Importing app.main...
2026-07-26 10:13:06,299 INFO: app.main imported successfully.
2026-07-26 10:13:06,299 INFO: Running DB init...
2026-07-26 10:13:06,361 INFO: All tables OK.
2026-07-26 10:13:06,494 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 10:13:06,496 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,499 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,502 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,504 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,507 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,509 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 10:13:06,517 INFO: Dip chart data seeded.
2026-07-26 10:13:06,518 INFO: DB init complete.
2026-07-26 10:13:06,518 INFO: wsgi.py ready.
2026-07-26 10:13:06,521 INFO: >> GET /license.txt
2026-07-26 10:13:06,522 DEBUG: Using selector: EpollSelector
2026-07-26 10:13:06,532 INFO: GET /license.txt
2026-07-26 10:13:06,535 WARNING: GET /license.txt -> 404
2026-07-26 10:13:06,544 INFO: << 404 /license.txt
2026-07-26 12:38:28,927 INFO: wsgi.py loading...
2026-07-26 12:38:28,928 INFO: Importing app.main...
2026-07-26 12:38:30,855 INFO: app.main imported successfully.
2026-07-26 12:38:30,856 INFO: Running DB init...
2026-07-26 12:38:30,920 INFO: All tables OK.
2026-07-26 12:38:31,068 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 12:38:31,071 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,082 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,085 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,087 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,090 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,093 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 12:38:31,101 INFO: Dip chart data seeded.
2026-07-26 12:38:31,101 INFO: DB init complete.
2026-07-26 12:38:31,101 INFO: wsgi.py ready.
2026-07-26 12:38:31,104 INFO: >> GET /robots.txt
2026-07-26 12:38:31,106 DEBUG: Using selector: EpollSelector
2026-07-26 12:38:31,116 INFO: GET /robots.txt
2026-07-26 12:38:31,120 WARNING: GET /robots.txt -> 404
2026-07-26 12:38:31,130 INFO: << 404 /robots.txt
2026-07-26 12:38:31,442 INFO: >> GET /
2026-07-26 12:38:31,442 DEBUG: Using selector: EpollSelector
2026-07-26 12:38:31,442 INFO: GET /
2026-07-26 12:38:31,443 WARNING: GET / -> 404
2026-07-26 12:38:31,447 INFO: << 404 /
2026-07-26 12:41:34,143 INFO: >> GET /robots.txt
2026-07-26 12:41:34,144 DEBUG: Using selector: EpollSelector
2026-07-26 12:41:34,154 INFO: GET /robots.txt
2026-07-26 12:41:34,157 WARNING: GET /robots.txt -> 404
2026-07-26 12:41:34,186 INFO: << 404 /robots.txt
2026-07-26 12:41:34,494 INFO: >> GET /
2026-07-26 12:41:34,494 DEBUG: Using selector: EpollSelector
2026-07-26 12:41:34,494 INFO: GET /
2026-07-26 12:41:34,495 WARNING: GET / -> 404
2026-07-26 12:41:34,498 INFO: << 404 /
2026-07-26 13:53:06,651 INFO: wsgi.py loading...
2026-07-26 13:53:06,652 INFO: Importing app.main...
2026-07-26 13:53:08,423 INFO: app.main imported successfully.
2026-07-26 13:53:08,423 INFO: Running DB init...
2026-07-26 13:53:08,487 INFO: All tables OK.
2026-07-26 13:53:08,626 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 13:53:08,629 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,631 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,634 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,636 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,639 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,642 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 13:53:08,650 INFO: Dip chart data seeded.
2026-07-26 13:53:08,650 INFO: DB init complete.
2026-07-26 13:53:08,650 INFO: wsgi.py ready.
2026-07-26 13:53:08,654 INFO: >> POST /
2026-07-26 13:53:08,655 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:08,665 INFO: POST /
2026-07-26 13:53:08,667 WARNING: POST / -> 404
2026-07-26 13:53:08,676 INFO: << 404 /
2026-07-26 13:53:10,085 INFO: >> POST /wp-json/batch/v1
2026-07-26 13:53:10,087 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:10,096 INFO: POST /wp-json/batch/v1
2026-07-26 13:53:10,100 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-26 13:53:10,109 INFO: << 404 /wp-json/batch/v1
2026-07-26 13:53:11,559 INFO: >> POST /wp/
2026-07-26 13:53:11,560 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:11,560 INFO: POST /wp/
2026-07-26 13:53:11,562 WARNING: POST /wp/ -> 404
2026-07-26 13:53:11,565 INFO: << 404 /wp/
2026-07-26 13:53:12,498 INFO: >> POST /wp/wp-json/batch/v1
2026-07-26 13:53:12,499 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:12,509 INFO: POST /wp/wp-json/batch/v1
2026-07-26 13:53:12,512 WARNING: POST /wp/wp-json/batch/v1 -> 404
2026-07-26 13:53:12,522 INFO: << 404 /wp/wp-json/batch/v1
2026-07-26 13:53:13,209 INFO: >> POST /wordpress/
2026-07-26 13:53:13,210 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:13,221 INFO: POST /wordpress/
2026-07-26 13:53:13,225 WARNING: POST /wordpress/ -> 404
2026-07-26 13:53:13,236 INFO: << 404 /wordpress/
2026-07-26 13:53:14,171 INFO: >> POST /wordpress/wp-json/batch/v1
2026-07-26 13:53:14,173 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:14,182 INFO: POST /wordpress/wp-json/batch/v1
2026-07-26 13:53:14,185 WARNING: POST /wordpress/wp-json/batch/v1 -> 404
2026-07-26 13:53:14,194 INFO: << 404 /wordpress/wp-json/batch/v1
2026-07-26 13:53:15,237 INFO: >> POST /blog/
2026-07-26 13:53:15,237 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:15,238 INFO: POST /blog/
2026-07-26 13:53:15,239 WARNING: POST /blog/ -> 404
2026-07-26 13:53:15,242 INFO: << 404 /blog/
2026-07-26 13:53:16,626 INFO: >> POST /blog/wp-json/batch/v1
2026-07-26 13:53:16,627 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:16,638 INFO: POST /blog/wp-json/batch/v1
2026-07-26 13:53:16,641 WARNING: POST /blog/wp-json/batch/v1 -> 404
2026-07-26 13:53:16,651 INFO: << 404 /blog/wp-json/batch/v1
2026-07-26 13:53:17,826 INFO: >> POST /old/
2026-07-26 13:53:17,827 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:17,827 INFO: POST /old/
2026-07-26 13:53:17,829 WARNING: POST /old/ -> 404
2026-07-26 13:53:17,831 INFO: << 404 /old/
2026-07-26 13:53:18,638 INFO: >> POST /old/wp-json/batch/v1
2026-07-26 13:53:18,638 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:18,639 INFO: POST /old/wp-json/batch/v1
2026-07-26 13:53:18,640 WARNING: POST /old/wp-json/batch/v1 -> 404
2026-07-26 13:53:18,643 INFO: << 404 /old/wp-json/batch/v1
2026-07-26 13:53:19,715 INFO: >> POST /test/
2026-07-26 13:53:19,716 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:19,727 INFO: POST /test/
2026-07-26 13:53:19,730 WARNING: POST /test/ -> 404
2026-07-26 13:53:19,739 INFO: << 404 /test/
2026-07-26 13:53:20,646 INFO: >> POST /test/wp-json/batch/v1
2026-07-26 13:53:20,647 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:20,658 INFO: POST /test/wp-json/batch/v1
2026-07-26 13:53:20,661 WARNING: POST /test/wp-json/batch/v1 -> 404
2026-07-26 13:53:20,671 INFO: << 404 /test/wp-json/batch/v1
2026-07-26 13:53:22,058 INFO: >> POST /dev/
2026-07-26 13:53:22,059 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:22,069 INFO: POST /dev/
2026-07-26 13:53:22,072 WARNING: POST /dev/ -> 404
2026-07-26 13:53:22,082 INFO: << 404 /dev/
2026-07-26 13:53:22,866 INFO: >> POST /dev/wp-json/batch/v1
2026-07-26 13:53:22,867 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:22,878 INFO: POST /dev/wp-json/batch/v1
2026-07-26 13:53:22,881 WARNING: POST /dev/wp-json/batch/v1 -> 404
2026-07-26 13:53:22,890 INFO: << 404 /dev/wp-json/batch/v1
2026-07-26 13:53:23,654 INFO: >> POST /backup/
2026-07-26 13:53:23,655 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:23,665 INFO: POST /backup/
2026-07-26 13:53:23,668 WARNING: POST /backup/ -> 404
2026-07-26 13:53:23,677 INFO: << 404 /backup/
2026-07-26 13:53:24,447 INFO: >> POST /backup/wp-json/batch/v1
2026-07-26 13:53:24,447 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:24,448 INFO: POST /backup/wp-json/batch/v1
2026-07-26 13:53:24,449 WARNING: POST /backup/wp-json/batch/v1 -> 404
2026-07-26 13:53:24,452 INFO: << 404 /backup/wp-json/batch/v1
2026-07-26 13:53:25,515 INFO: >> POST /staging/
2026-07-26 13:53:25,515 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:25,516 INFO: POST /staging/
2026-07-26 13:53:25,517 WARNING: POST /staging/ -> 404
2026-07-26 13:53:25,520 INFO: << 404 /staging/
2026-07-26 13:53:26,130 INFO: >> POST /staging/wp-json/batch/v1
2026-07-26 13:53:26,132 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:26,142 INFO: POST /staging/wp-json/batch/v1
2026-07-26 13:53:26,145 WARNING: POST /staging/wp-json/batch/v1 -> 404
2026-07-26 13:53:26,155 INFO: << 404 /staging/wp-json/batch/v1
2026-07-26 13:53:26,836 INFO: >> POST /
2026-07-26 13:53:26,838 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:26,850 INFO: POST /
2026-07-26 13:53:26,853 WARNING: POST / -> 404
2026-07-26 13:53:26,863 INFO: << 404 /
2026-07-26 13:53:27,766 INFO: >> POST /wp-json/batch/v1
2026-07-26 13:53:27,766 DEBUG: Using selector: EpollSelector
2026-07-26 13:53:27,766 INFO: POST /wp-json/batch/v1
2026-07-26 13:53:27,768 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-26 13:53:27,770 INFO: << 404 /wp-json/batch/v1
2026-07-26 20:25:08,725 INFO: wsgi.py loading...
2026-07-26 20:25:08,725 INFO: Importing app.main...
2026-07-26 20:25:11,531 INFO: app.main imported successfully.
2026-07-26 20:25:11,531 INFO: Running DB init...
2026-07-26 20:25:11,595 INFO: All tables OK.
2026-07-26 20:25:11,744 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 20:25:11,747 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,749 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,752 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,754 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,757 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,759 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 20:25:11,768 INFO: Dip chart data seeded.
2026-07-26 20:25:11,768 INFO: DB init complete.
2026-07-26 20:25:11,768 INFO: wsgi.py ready.
2026-07-26 20:25:11,772 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-26 20:25:11,773 DEBUG: Using selector: EpollSelector
2026-07-26 20:25:11,783 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-26 20:25:11,786 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-07-26 20:25:11,796 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-26 21:50:23,017 INFO: wsgi.py loading...
2026-07-26 21:50:23,017 INFO: Importing app.main...
2026-07-26 21:50:24,806 INFO: app.main imported successfully.
2026-07-26 21:50:24,806 INFO: Running DB init...
2026-07-26 21:50:24,869 INFO: All tables OK.
2026-07-26 21:50:25,003 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 21:50:25,005 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,008 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,010 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,013 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,015 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,018 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 21:50:25,026 INFO: Dip chart data seeded.
2026-07-26 21:50:25,026 INFO: DB init complete.
2026-07-26 21:50:25,027 INFO: wsgi.py ready.
2026-07-26 21:50:25,030 INFO: >> GET /robots.txt
2026-07-26 21:50:25,031 DEBUG: Using selector: EpollSelector
2026-07-26 21:50:25,041 INFO: GET /robots.txt
2026-07-26 21:50:25,045 WARNING: GET /robots.txt -> 404
2026-07-26 21:50:25,054 INFO: << 404 /robots.txt
2026-07-26 21:50:25,922 INFO: >> GET /
2026-07-26 21:50:25,923 DEBUG: Using selector: EpollSelector
2026-07-26 21:50:25,933 INFO: GET /
2026-07-26 21:50:25,936 WARNING: GET / -> 404
2026-07-26 21:50:25,945 INFO: << 404 /
2026-07-26 22:23:07,694 INFO: wsgi.py loading...
2026-07-26 22:23:07,694 INFO: Importing app.main...
2026-07-26 22:23:09,773 INFO: app.main imported successfully.
2026-07-26 22:23:09,773 INFO: Running DB init...
2026-07-26 22:23:09,850 INFO: All tables OK.
2026-07-26 22:23:09,991 INFO: Migration OK: allowances ENUM+DAILY
2026-07-26 22:23:09,994 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:09,997 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:09,999 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:10,025 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:10,028 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:10,030 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-26 22:23:10,039 INFO: Dip chart data seeded.
2026-07-26 22:23:10,039 INFO: DB init complete.
2026-07-26 22:23:10,039 INFO: wsgi.py ready.
2026-07-26 22:23:10,042 INFO: >> GET /
2026-07-26 22:23:10,043 DEBUG: Using selector: EpollSelector
2026-07-26 22:23:10,053 INFO: GET /
2026-07-26 22:23:10,056 WARNING: GET / -> 404
2026-07-26 22:23:10,064 INFO: << 404 /
2026-07-27 00:13:36,361 INFO: wsgi.py loading...
2026-07-27 00:13:36,362 INFO: Importing app.main...
2026-07-27 00:13:38,513 INFO: app.main imported successfully.
2026-07-27 00:13:38,513 INFO: Running DB init...
2026-07-27 00:13:38,591 INFO: All tables OK.
2026-07-27 00:13:38,755 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 00:13:38,758 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,761 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,765 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,768 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,770 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,773 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 00:13:38,782 INFO: Dip chart data seeded.
2026-07-27 00:13:38,782 INFO: DB init complete.
2026-07-27 00:13:38,782 INFO: wsgi.py ready.
2026-07-27 00:13:38,785 INFO: >> GET /
2026-07-27 00:13:38,787 DEBUG: Using selector: EpollSelector
2026-07-27 00:13:38,797 INFO: GET /
2026-07-27 00:13:38,799 WARNING: GET / -> 404
2026-07-27 00:13:38,821 INFO: << 404 /
2026-07-27 00:13:39,859 INFO: >> GET /
2026-07-27 00:13:39,860 DEBUG: Using selector: EpollSelector
2026-07-27 00:13:39,870 INFO: GET /
2026-07-27 00:13:39,872 WARNING: GET / -> 404
2026-07-27 00:13:39,881 INFO: << 404 /
2026-07-27 04:20:47,776 INFO: wsgi.py loading...
2026-07-27 04:20:47,776 INFO: Importing app.main...
2026-07-27 04:20:50,079 INFO: app.main imported successfully.
2026-07-27 04:20:50,079 INFO: Running DB init...
2026-07-27 04:20:50,142 INFO: All tables OK.
2026-07-27 04:20:50,279 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 04:20:50,282 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,284 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,286 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,289 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,292 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,294 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:20:50,303 INFO: Dip chart data seeded.
2026-07-27 04:20:50,303 INFO: DB init complete.
2026-07-27 04:20:50,303 INFO: wsgi.py ready.
2026-07-27 04:20:50,306 INFO: >> GET /
2026-07-27 04:20:50,307 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:50,318 INFO: GET /
2026-07-27 04:20:50,320 WARNING: GET / -> 404
2026-07-27 04:20:50,330 INFO: << 404 /
2026-07-27 04:20:50,500 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-07-27 04:20:50,500 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:50,500 INFO: GET //wp-includes/wlwmanifest.xml
2026-07-27 04:20:50,502 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:50,504 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-07-27 04:20:50,674 INFO: >> GET //xmlrpc.php
2026-07-27 04:20:50,674 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:50,674 INFO: GET //xmlrpc.php
2026-07-27 04:20:50,676 WARNING: GET //xmlrpc.php -> 404
2026-07-27 04:20:50,678 INFO: << 404 //xmlrpc.php
2026-07-27 04:20:50,848 INFO: >> GET /
2026-07-27 04:20:50,848 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:50,849 INFO: GET /
2026-07-27 04:20:50,850 WARNING: GET / -> 404
2026-07-27 04:20:50,852 INFO: << 404 /
2026-07-27 04:20:51,022 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,023 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,023 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,025 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,027 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,197 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,197 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,197 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,199 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,201 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,371 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,372 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,372 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,373 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,376 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,546 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,546 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,546 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,548 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,550 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,720 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,720 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,721 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,722 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,724 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,894 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,895 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:51,895 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-07-27 04:20:51,896 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:51,899 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,068 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,069 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,069 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,070 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,073 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,242 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,243 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,243 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,244 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,247 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,424 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,424 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,425 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,426 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,428 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,598 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,599 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,599 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,600 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,603 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,777 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,777 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,778 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,779 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,781 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,951 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,952 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:52,952 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-07-27 04:20:52,953 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:52,956 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,126 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,126 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:53,127 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,128 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:53,130 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,300 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,300 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:53,301 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,302 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:53,304 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,474 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,474 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:53,474 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,475 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:53,478 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,648 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,648 DEBUG: Using selector: EpollSelector
2026-07-27 04:20:53,648 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-07-27 04:20:53,650 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-07-27 04:20:53,652 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-07-27 04:55:11,825 INFO: wsgi.py loading...
2026-07-27 04:55:11,826 INFO: Importing app.main...
2026-07-27 04:55:13,649 INFO: app.main imported successfully.
2026-07-27 04:55:13,649 INFO: Running DB init...
2026-07-27 04:55:13,715 INFO: All tables OK.
2026-07-27 04:55:13,859 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 04:55:13,862 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,865 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,874 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,876 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,879 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,882 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 04:55:13,890 INFO: Dip chart data seeded.
2026-07-27 04:55:13,890 INFO: DB init complete.
2026-07-27 04:55:13,890 INFO: wsgi.py ready.
2026-07-27 04:55:13,894 INFO: >> GET /
2026-07-27 04:55:13,895 DEBUG: Using selector: EpollSelector
2026-07-27 04:55:13,895 INFO: >> GET /
2026-07-27 04:55:13,897 DEBUG: Using selector: EpollSelector
2026-07-27 04:55:13,905 INFO: GET /
2026-07-27 04:55:13,907 INFO: GET /
2026-07-27 04:55:13,908 WARNING: GET / -> 404
2026-07-27 04:55:13,910 WARNING: GET / -> 404
2026-07-27 04:55:13,919 INFO: << 404 /
2026-07-27 04:55:13,919 INFO: << 404 /
2026-07-27 07:50:54,533 INFO: wsgi.py loading...
2026-07-27 07:50:54,534 INFO: Importing app.main...
2026-07-27 07:50:56,363 INFO: app.main imported successfully.
2026-07-27 07:50:56,363 INFO: Running DB init...
2026-07-27 07:50:56,426 INFO: All tables OK.
2026-07-27 07:50:56,566 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 07:50:56,568 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,571 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,574 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,576 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,579 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,582 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 07:50:56,589 INFO: Dip chart data seeded.
2026-07-27 07:50:56,590 INFO: DB init complete.
2026-07-27 07:50:56,590 INFO: wsgi.py ready.
2026-07-27 07:50:56,593 INFO: >> GET /_next/static/chunks/main.js
2026-07-27 07:50:56,595 DEBUG: Using selector: EpollSelector
2026-07-27 07:50:56,605 INFO: GET /_next/static/chunks/main.js
2026-07-27 07:50:56,608 WARNING: GET /_next/static/chunks/main.js -> 404
2026-07-27 07:50:56,617 INFO: << 404 /_next/static/chunks/main.js
2026-07-27 07:51:00,554 INFO: >> GET /static/js/main.js
2026-07-27 07:51:00,554 DEBUG: Using selector: EpollSelector
2026-07-27 07:51:00,555 INFO: GET /static/js/main.js
2026-07-27 07:51:00,556 WARNING: GET /static/js/main.js -> 404
2026-07-27 07:51:00,559 INFO: << 404 /static/js/main.js
2026-07-27 07:51:01,037 INFO: >> GET /assets/js/app.js
2026-07-27 07:51:01,037 DEBUG: Using selector: EpollSelector
2026-07-27 07:51:01,037 INFO: GET /assets/js/app.js
2026-07-27 07:51:01,039 WARNING: GET /assets/js/app.js -> 404
2026-07-27 07:51:01,041 INFO: << 404 /assets/js/app.js
2026-07-27 09:21:56,969 INFO: wsgi.py loading...
2026-07-27 09:21:56,969 INFO: Importing app.main...
2026-07-27 09:21:58,903 INFO: app.main imported successfully.
2026-07-27 09:21:58,904 INFO: Running DB init...
2026-07-27 09:21:58,968 INFO: All tables OK.
2026-07-27 09:21:59,107 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 09:21:59,110 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,112 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,115 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,117 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,120 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,123 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 09:21:59,131 INFO: Dip chart data seeded.
2026-07-27 09:21:59,131 INFO: DB init complete.
2026-07-27 09:21:59,131 INFO: wsgi.py ready.
2026-07-27 09:21:59,135 INFO: >> GET /_ignition/health-check
2026-07-27 09:21:59,136 DEBUG: Using selector: EpollSelector
2026-07-27 09:21:59,147 INFO: GET /_ignition/health-check
2026-07-27 09:21:59,150 WARNING: GET /_ignition/health-check -> 404
2026-07-27 09:21:59,159 INFO: << 404 /_ignition/health-check
2026-07-27 09:21:59,866 INFO: >> GET /ghost/api/v3/admin/settings/
2026-07-27 09:21:59,866 DEBUG: Using selector: EpollSelector
2026-07-27 09:21:59,867 INFO: GET /ghost/api/v3/admin/settings/
2026-07-27 09:21:59,868 WARNING: GET /ghost/api/v3/admin/settings/ -> 404
2026-07-27 09:21:59,871 INFO: << 404 /ghost/api/v3/admin/settings/
2026-07-27 09:22:00,421 INFO: >> GET /rails/info/properties
2026-07-27 09:22:00,422 DEBUG: Using selector: EpollSelector
2026-07-27 09:22:00,422 INFO: GET /rails/info/properties
2026-07-27 09:22:00,423 WARNING: GET /rails/info/properties -> 404
2026-07-27 09:22:00,426 INFO: << 404 /rails/info/properties
2026-07-27 10:47:01,868 INFO: wsgi.py loading...
2026-07-27 10:47:01,869 INFO: Importing app.main...
2026-07-27 10:47:03,739 INFO: app.main imported successfully.
2026-07-27 10:47:03,739 INFO: Running DB init...
2026-07-27 10:47:03,804 INFO: All tables OK.
2026-07-27 10:47:03,943 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 10:47:03,946 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,948 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,951 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,954 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,956 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,959 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 10:47:03,968 INFO: Dip chart data seeded.
2026-07-27 10:47:03,968 INFO: DB init complete.
2026-07-27 10:47:03,968 INFO: wsgi.py ready.
2026-07-27 10:47:03,971 INFO: >> GET /wp-login.php
2026-07-27 10:47:03,973 DEBUG: Using selector: EpollSelector
2026-07-27 10:47:03,983 INFO: GET /wp-login.php
2026-07-27 10:47:03,987 WARNING: GET /wp-login.php -> 404
2026-07-27 10:47:03,996 INFO: << 404 /wp-login.php
2026-07-27 14:49:09,538 INFO: wsgi.py loading...
2026-07-27 14:49:09,538 INFO: Importing app.main...
2026-07-27 14:49:11,447 INFO: app.main imported successfully.
2026-07-27 14:49:11,447 INFO: Running DB init...
2026-07-27 14:49:11,511 INFO: All tables OK.
2026-07-27 14:49:11,648 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 14:49:11,651 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,653 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,656 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,659 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,661 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,664 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 14:49:11,672 INFO: Dip chart data seeded.
2026-07-27 14:49:11,672 INFO: DB init complete.
2026-07-27 14:49:11,672 INFO: wsgi.py ready.
2026-07-27 14:49:11,676 INFO: >> GET /wp-json/easy-wp-smtp/v1/settings
2026-07-27 14:49:11,677 DEBUG: Using selector: EpollSelector
2026-07-27 14:49:11,687 INFO: GET /wp-json/easy-wp-smtp/v1/settings
2026-07-27 14:49:11,690 WARNING: GET /wp-json/easy-wp-smtp/v1/settings -> 404
2026-07-27 14:49:11,698 INFO: << 404 /wp-json/easy-wp-smtp/v1/settings
2026-07-27 14:49:12,684 INFO: >> GET /wp-json/mailpoet/v1/settings
2026-07-27 14:49:12,684 DEBUG: Using selector: EpollSelector
2026-07-27 14:49:12,684 INFO: GET /wp-json/mailpoet/v1/settings
2026-07-27 14:49:12,686 WARNING: GET /wp-json/mailpoet/v1/settings -> 404
2026-07-27 14:49:12,689 INFO: << 404 /wp-json/mailpoet/v1/settings
2026-07-27 14:49:13,079 INFO: >> GET /wp-json/wp-mail-smtp/v1/debug
2026-07-27 14:49:13,079 DEBUG: Using selector: EpollSelector
2026-07-27 14:49:13,080 INFO: GET /wp-json/wp-mail-smtp/v1/debug
2026-07-27 14:49:13,081 WARNING: GET /wp-json/wp-mail-smtp/v1/debug -> 404
2026-07-27 14:49:13,084 INFO: << 404 /wp-json/wp-mail-smtp/v1/debug
2026-07-27 14:49:13,373 INFO: >> GET /wp-content/plugins/breeze/breeze-config/breeze-config.php
2026-07-27 14:49:13,373 DEBUG: Using selector: EpollSelector
2026-07-27 14:49:13,374 INFO: GET /wp-content/plugins/breeze/breeze-config/breeze-config.php
2026-07-27 14:49:13,375 WARNING: GET /wp-content/plugins/breeze/breeze-config/breeze-config.php -> 404
2026-07-27 14:49:13,378 INFO: << 404 /wp-content/plugins/breeze/breeze-config/breeze-config.php
2026-07-27 19:06:39,863 INFO: wsgi.py loading...
2026-07-27 19:06:39,863 INFO: Importing app.main...
2026-07-27 19:06:43,533 INFO: app.main imported successfully.
2026-07-27 19:06:43,534 INFO: Running DB init...
2026-07-27 19:06:43,600 INFO: All tables OK.
2026-07-27 19:06:43,740 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 19:06:43,743 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,746 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,754 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,757 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,760 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,763 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:06:43,770 INFO: Dip chart data seeded.
2026-07-27 19:06:43,770 INFO: DB init complete.
2026-07-27 19:06:43,770 INFO: wsgi.py ready.
2026-07-27 19:06:43,773 INFO: >> GET /
2026-07-27 19:06:43,775 DEBUG: Using selector: EpollSelector
2026-07-27 19:06:43,785 INFO: GET /
2026-07-27 19:06:43,788 WARNING: GET / -> 404
2026-07-27 19:06:43,796 INFO: << 404 /
2026-07-27 19:11:33,900 INFO: >> GET /
2026-07-27 19:11:33,902 DEBUG: Using selector: EpollSelector
2026-07-27 19:11:33,912 INFO: GET /
2026-07-27 19:11:33,914 WARNING: GET / -> 404
2026-07-27 19:11:33,943 INFO: << 404 /
2026-07-27 19:42:40,180 INFO: wsgi.py loading...
2026-07-27 19:42:40,181 INFO: Importing app.main...
2026-07-27 19:42:42,155 INFO: app.main imported successfully.
2026-07-27 19:42:42,155 INFO: Running DB init...
2026-07-27 19:42:42,217 INFO: All tables OK.
2026-07-27 19:42:42,353 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 19:42:42,356 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,358 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,361 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,363 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,366 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,369 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 19:42:42,377 INFO: Dip chart data seeded.
2026-07-27 19:42:42,377 INFO: DB init complete.
2026-07-27 19:42:42,377 INFO: wsgi.py ready.
2026-07-27 19:42:42,380 INFO: >> GET /
2026-07-27 19:42:42,381 DEBUG: Using selector: EpollSelector
2026-07-27 19:42:42,391 INFO: GET /
2026-07-27 19:42:42,393 WARNING: GET / -> 404
2026-07-27 19:42:42,402 INFO: << 404 /
2026-07-27 20:06:34,250 INFO: wsgi.py loading...
2026-07-27 20:06:34,250 INFO: Importing app.main...
2026-07-27 20:06:35,985 INFO: app.main imported successfully.
2026-07-27 20:06:35,985 INFO: Running DB init...
2026-07-27 20:06:36,048 INFO: All tables OK.
2026-07-27 20:06:36,182 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 20:06:36,185 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,188 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,190 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,193 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,195 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,198 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 20:06:36,206 INFO: Dip chart data seeded.
2026-07-27 20:06:36,206 INFO: DB init complete.
2026-07-27 20:06:36,206 INFO: wsgi.py ready.
2026-07-27 20:06:36,210 INFO: >> GET /
2026-07-27 20:06:36,211 DEBUG: Using selector: EpollSelector
2026-07-27 20:06:36,221 INFO: GET /
2026-07-27 20:06:36,223 WARNING: GET / -> 404
2026-07-27 20:06:36,232 INFO: << 404 /
2026-07-27 21:12:30,652 INFO: wsgi.py loading...
2026-07-27 21:12:30,652 INFO: Importing app.main...
2026-07-27 21:12:32,614 INFO: app.main imported successfully.
2026-07-27 21:12:32,614 INFO: Running DB init...
2026-07-27 21:12:32,691 INFO: All tables OK.
2026-07-27 21:12:32,871 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 21:12:32,875 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,879 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,883 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,887 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,893 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,897 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:12:32,905 INFO: Dip chart data seeded.
2026-07-27 21:12:32,905 INFO: DB init complete.
2026-07-27 21:12:32,905 INFO: wsgi.py ready.
2026-07-27 21:12:32,909 INFO: >> GET /
2026-07-27 21:12:32,910 DEBUG: Using selector: EpollSelector
2026-07-27 21:12:32,921 INFO: GET /
2026-07-27 21:12:32,930 WARNING: GET / -> 404
2026-07-27 21:12:32,942 INFO: << 404 /
2026-07-27 21:12:35,352 INFO: >> GET /favicon.ico
2026-07-27 21:12:35,354 DEBUG: Using selector: EpollSelector
2026-07-27 21:12:35,364 INFO: GET /favicon.ico
2026-07-27 21:12:35,367 WARNING: GET /favicon.ico -> 404
2026-07-27 21:12:35,376 INFO: << 404 /favicon.ico
2026-07-27 21:52:25,107 INFO: wsgi.py loading...
2026-07-27 21:52:25,107 INFO: Importing app.main...
2026-07-27 21:52:27,554 INFO: app.main imported successfully.
2026-07-27 21:52:27,554 INFO: Running DB init...
2026-07-27 21:52:27,636 INFO: All tables OK.
2026-07-27 21:52:27,790 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 21:52:27,793 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,796 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,799 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,803 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,806 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,809 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 21:52:27,818 INFO: Dip chart data seeded.
2026-07-27 21:52:27,818 INFO: DB init complete.
2026-07-27 21:52:27,818 INFO: wsgi.py ready.
2026-07-27 21:52:27,832 INFO: >> GET /
2026-07-27 21:52:27,834 DEBUG: Using selector: EpollSelector
2026-07-27 21:52:27,847 INFO: GET /
2026-07-27 21:52:27,850 WARNING: GET / -> 404
2026-07-27 21:52:27,861 INFO: << 404 /
2026-07-27 22:24:51,227 INFO: wsgi.py loading...
2026-07-27 22:24:51,228 INFO: Importing app.main...
2026-07-27 22:24:53,015 INFO: app.main imported successfully.
2026-07-27 22:24:53,016 INFO: Running DB init...
2026-07-27 22:24:53,080 INFO: All tables OK.
2026-07-27 22:24:53,218 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 22:24:53,220 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,223 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,226 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,228 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,231 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,234 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:24:53,242 INFO: Dip chart data seeded.
2026-07-27 22:24:53,242 INFO: DB init complete.
2026-07-27 22:24:53,242 INFO: wsgi.py ready.
2026-07-27 22:24:53,246 INFO: >> GET /config/application.yml
2026-07-27 22:24:53,247 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:53,257 INFO: GET /config/application.yml
2026-07-27 22:24:53,260 WARNING: GET /config/application.yml -> 404
2026-07-27 22:24:53,270 INFO: << 404 /config/application.yml
2026-07-27 22:24:53,643 INFO: >> GET /config/secrets.yml
2026-07-27 22:24:53,643 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:53,644 INFO: GET /config/secrets.yml
2026-07-27 22:24:53,645 WARNING: GET /config/secrets.yml -> 404
2026-07-27 22:24:53,648 INFO: << 404 /config/secrets.yml
2026-07-27 22:24:54,223 INFO: >> GET /config/database.yml
2026-07-27 22:24:54,223 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:54,223 INFO: GET /config/database.yml
2026-07-27 22:24:54,225 WARNING: GET /config/database.yml -> 404
2026-07-27 22:24:54,228 INFO: << 404 /config/database.yml
2026-07-27 22:24:54,824 INFO: >> GET /config/credentials.yml
2026-07-27 22:24:54,824 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:54,825 INFO: GET /config/credentials.yml
2026-07-27 22:24:54,826 WARNING: GET /config/credentials.yml -> 404
2026-07-27 22:24:54,829 INFO: << 404 /config/credentials.yml
2026-07-27 22:24:55,352 INFO: >> GET /config/master.key
2026-07-27 22:24:55,352 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:55,352 INFO: GET /config/master.key
2026-07-27 22:24:55,354 WARNING: GET /config/master.key -> 404
2026-07-27 22:24:55,356 INFO: << 404 /config/master.key
2026-07-27 22:24:55,868 INFO: >> GET /config/environment.yml
2026-07-27 22:24:55,869 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:55,869 INFO: GET /config/environment.yml
2026-07-27 22:24:55,870 WARNING: GET /config/environment.yml -> 404
2026-07-27 22:24:55,873 INFO: << 404 /config/environment.yml
2026-07-27 22:24:56,449 INFO: >> GET /config/environments/production.rb
2026-07-27 22:24:56,449 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:56,449 INFO: GET /config/environments/production.rb
2026-07-27 22:24:56,451 WARNING: GET /config/environments/production.rb -> 404
2026-07-27 22:24:56,453 INFO: << 404 /config/environments/production.rb
2026-07-27 22:24:57,121 INFO: >> GET /config/initializers/devise.rb
2026-07-27 22:24:57,122 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:57,122 INFO: GET /config/initializers/devise.rb
2026-07-27 22:24:57,125 WARNING: GET /config/initializers/devise.rb -> 404
2026-07-27 22:24:57,128 INFO: << 404 /config/initializers/devise.rb
2026-07-27 22:24:57,898 INFO: >> GET /local_settings.py
2026-07-27 22:24:57,898 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:57,898 INFO: GET /local_settings.py
2026-07-27 22:24:57,900 WARNING: GET /local_settings.py -> 404
2026-07-27 22:24:57,902 INFO: << 404 /local_settings.py
2026-07-27 22:24:58,294 INFO: >> GET /settings/local.py
2026-07-27 22:24:58,294 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:58,294 INFO: GET /settings/local.py
2026-07-27 22:24:58,296 WARNING: GET /settings/local.py -> 404
2026-07-27 22:24:58,298 INFO: << 404 /settings/local.py
2026-07-27 22:24:58,693 INFO: >> GET /settings/production.py
2026-07-27 22:24:58,694 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:58,694 INFO: GET /settings/production.py
2026-07-27 22:24:58,695 WARNING: GET /settings/production.py -> 404
2026-07-27 22:24:58,698 INFO: << 404 /settings/production.py
2026-07-27 22:24:59,059 INFO: >> GET /config/settings/local.py
2026-07-27 22:24:59,059 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:59,060 INFO: GET /config/settings/local.py
2026-07-27 22:24:59,061 WARNING: GET /config/settings/local.py -> 404
2026-07-27 22:24:59,064 INFO: << 404 /config/settings/local.py
2026-07-27 22:24:59,409 INFO: >> GET /config/settings/production.py
2026-07-27 22:24:59,410 DEBUG: Using selector: EpollSelector
2026-07-27 22:24:59,410 INFO: GET /config/settings/production.py
2026-07-27 22:24:59,411 WARNING: GET /config/settings/production.py -> 404
2026-07-27 22:24:59,414 INFO: << 404 /config/settings/production.py
2026-07-27 22:25:01,253 INFO: >> GET /app/settings.py
2026-07-27 22:25:01,253 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:01,254 INFO: GET /app/settings.py
2026-07-27 22:25:01,255 WARNING: GET /app/settings.py -> 404
2026-07-27 22:25:01,257 INFO: << 404 /app/settings.py
2026-07-27 22:25:02,324 INFO: >> GET /instance/config.py
2026-07-27 22:25:02,324 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:02,325 INFO: GET /instance/config.py
2026-07-27 22:25:02,326 WARNING: GET /instance/config.py -> 404
2026-07-27 22:25:02,329 INFO: << 404 /instance/config.py
2026-07-27 22:25:03,115 INFO: >> GET /src/config.py
2026-07-27 22:25:03,115 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:03,116 INFO: GET /src/config.py
2026-07-27 22:25:03,117 WARNING: GET /src/config.py -> 404
2026-07-27 22:25:03,132 INFO: << 404 /src/config.py
2026-07-27 22:25:03,996 INFO: >> GET /src/settings.py
2026-07-27 22:25:03,996 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:03,997 INFO: GET /src/settings.py
2026-07-27 22:25:03,998 WARNING: GET /src/settings.py -> 404
2026-07-27 22:25:04,001 INFO: << 404 /src/settings.py
2026-07-27 22:25:04,284 INFO: >> GET /core/settings.py
2026-07-27 22:25:04,284 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:04,284 INFO: GET /core/settings.py
2026-07-27 22:25:04,286 WARNING: GET /core/settings.py -> 404
2026-07-27 22:25:04,289 INFO: << 404 /core/settings.py
2026-07-27 22:25:05,258 INFO: >> GET /myapp/settings.py
2026-07-27 22:25:05,259 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:05,259 INFO: GET /myapp/settings.py
2026-07-27 22:25:05,260 WARNING: GET /myapp/settings.py -> 404
2026-07-27 22:25:05,263 INFO: << 404 /myapp/settings.py
2026-07-27 22:25:05,736 INFO: >> GET /project/settings.py
2026-07-27 22:25:05,736 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:05,737 INFO: GET /project/settings.py
2026-07-27 22:25:05,738 WARNING: GET /project/settings.py -> 404
2026-07-27 22:25:05,741 INFO: << 404 /project/settings.py
2026-07-27 22:25:06,119 INFO: >> GET /config.py
2026-07-27 22:25:06,119 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:06,120 INFO: GET /config.py
2026-07-27 22:25:06,121 WARNING: GET /config.py -> 404
2026-07-27 22:25:06,123 INFO: << 404 /config.py
2026-07-27 22:25:06,563 INFO: >> GET /settings.py
2026-07-27 22:25:06,563 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:06,563 INFO: GET /settings.py
2026-07-27 22:25:06,565 WARNING: GET /settings.py -> 404
2026-07-27 22:25:06,568 INFO: << 404 /settings.py
2026-07-27 22:25:12,098 INFO: >> GET /Gemfile
2026-07-27 22:25:12,098 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:12,099 INFO: GET /Gemfile
2026-07-27 22:25:12,100 WARNING: GET /Gemfile -> 404
2026-07-27 22:25:12,103 INFO: << 404 /Gemfile
2026-07-27 22:25:12,372 INFO: >> GET /Pipfile
2026-07-27 22:25:12,372 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:12,372 INFO: GET /Pipfile
2026-07-27 22:25:12,374 WARNING: GET /Pipfile -> 404
2026-07-27 22:25:12,376 INFO: << 404 /Pipfile
2026-07-27 22:25:12,678 INFO: >> GET /pyproject.toml
2026-07-27 22:25:12,679 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:12,679 INFO: GET /pyproject.toml
2026-07-27 22:25:12,680 WARNING: GET /pyproject.toml -> 404
2026-07-27 22:25:12,683 INFO: << 404 /pyproject.toml
2026-07-27 22:25:13,075 INFO: >> GET /.ruby-version
2026-07-27 22:25:13,075 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:13,076 INFO: GET /.ruby-version
2026-07-27 22:25:13,077 WARNING: GET /.ruby-version -> 404
2026-07-27 22:25:13,079 INFO: << 404 /.ruby-version
2026-07-27 22:25:15,115 INFO: >> GET /.python-version
2026-07-27 22:25:15,115 DEBUG: Using selector: EpollSelector
2026-07-27 22:25:15,115 INFO: GET /.python-version
2026-07-27 22:25:15,117 WARNING: GET /.python-version -> 404
2026-07-27 22:25:15,119 INFO: << 404 /.python-version
2026-07-27 22:51:35,701 INFO: wsgi.py loading...
2026-07-27 22:51:35,701 INFO: Importing app.main...
2026-07-27 22:51:37,487 INFO: app.main imported successfully.
2026-07-27 22:51:37,487 INFO: Running DB init...
2026-07-27 22:51:37,553 INFO: All tables OK.
2026-07-27 22:51:37,693 INFO: Migration OK: allowances ENUM+DAILY
2026-07-27 22:51:37,696 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,699 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,701 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,704 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,707 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,710 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-27 22:51:37,718 INFO: Dip chart data seeded.
2026-07-27 22:51:37,718 INFO: DB init complete.
2026-07-27 22:51:37,718 INFO: wsgi.py ready.
2026-07-27 22:51:37,722 INFO: >> GET /infrastructure/terraform.tfstate
2026-07-27 22:51:37,723 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:37,733 INFO: GET /infrastructure/terraform.tfstate
2026-07-27 22:51:37,736 WARNING: GET /infrastructure/terraform.tfstate -> 404
2026-07-27 22:51:37,745 INFO: << 404 /infrastructure/terraform.tfstate
2026-07-27 22:51:38,151 INFO: >> GET /infra/terraform.tfstate
2026-07-27 22:51:38,151 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:38,152 INFO: GET /infra/terraform.tfstate
2026-07-27 22:51:38,153 WARNING: GET /infra/terraform.tfstate -> 404
2026-07-27 22:51:38,156 INFO: << 404 /infra/terraform.tfstate
2026-07-27 22:51:38,559 INFO: >> GET /deploy/terraform.tfstate
2026-07-27 22:51:38,559 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:38,559 INFO: GET /deploy/terraform.tfstate
2026-07-27 22:51:38,561 WARNING: GET /deploy/terraform.tfstate -> 404
2026-07-27 22:51:38,564 INFO: << 404 /deploy/terraform.tfstate
2026-07-27 22:51:39,028 INFO: >> GET /terraform/terraform.tfstate
2026-07-27 22:51:39,029 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:39,029 INFO: GET /terraform/terraform.tfstate
2026-07-27 22:51:39,030 WARNING: GET /terraform/terraform.tfstate -> 404
2026-07-27 22:51:39,033 INFO: << 404 /terraform/terraform.tfstate
2026-07-27 22:51:39,473 INFO: >> GET /helm/values.yaml
2026-07-27 22:51:39,473 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:39,474 INFO: GET /helm/values.yaml
2026-07-27 22:51:39,475 WARNING: GET /helm/values.yaml -> 404
2026-07-27 22:51:39,478 INFO: << 404 /helm/values.yaml
2026-07-27 22:51:40,773 INFO: >> GET /helm/values.production.yaml
2026-07-27 22:51:40,773 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:40,773 INFO: GET /helm/values.production.yaml
2026-07-27 22:51:40,775 WARNING: GET /helm/values.production.yaml -> 404
2026-07-27 22:51:40,777 INFO: << 404 /helm/values.production.yaml
2026-07-27 22:51:41,131 INFO: >> GET /helm/values.prod.yaml
2026-07-27 22:51:41,131 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:41,131 INFO: GET /helm/values.prod.yaml
2026-07-27 22:51:41,133 WARNING: GET /helm/values.prod.yaml -> 404
2026-07-27 22:51:41,135 INFO: << 404 /helm/values.prod.yaml
2026-07-27 22:51:41,509 INFO: >> GET /k8s/secrets.yaml
2026-07-27 22:51:41,509 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:41,510 INFO: GET /k8s/secrets.yaml
2026-07-27 22:51:41,511 WARNING: GET /k8s/secrets.yaml -> 404
2026-07-27 22:51:41,514 INFO: << 404 /k8s/secrets.yaml
2026-07-27 22:51:42,012 INFO: >> GET /kubernetes/secrets.yaml
2026-07-27 22:51:42,012 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:42,013 INFO: GET /kubernetes/secrets.yaml
2026-07-27 22:51:42,014 WARNING: GET /kubernetes/secrets.yaml -> 404
2026-07-27 22:51:42,017 INFO: << 404 /kubernetes/secrets.yaml
2026-07-27 22:51:42,465 INFO: >> GET /kube/config
2026-07-27 22:51:42,465 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:42,465 INFO: GET /kube/config
2026-07-27 22:51:42,467 WARNING: GET /kube/config -> 404
2026-07-27 22:51:42,469 INFO: << 404 /kube/config
2026-07-27 22:51:42,819 INFO: >> GET /.kube/config
2026-07-27 22:51:42,819 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:42,820 INFO: GET /.kube/config
2026-07-27 22:51:42,821 WARNING: GET /.kube/config -> 404
2026-07-27 22:51:42,824 INFO: << 404 /.kube/config
2026-07-27 22:51:43,270 INFO: >> GET /k8s/configmap.yaml
2026-07-27 22:51:43,270 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:43,271 INFO: GET /k8s/configmap.yaml
2026-07-27 22:51:43,272 WARNING: GET /k8s/configmap.yaml -> 404
2026-07-27 22:51:43,274 INFO: << 404 /k8s/configmap.yaml
2026-07-27 22:51:43,826 INFO: >> GET /kubernetes/configmap.yaml
2026-07-27 22:51:43,826 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:43,826 INFO: GET /kubernetes/configmap.yaml
2026-07-27 22:51:43,827 WARNING: GET /kubernetes/configmap.yaml -> 404
2026-07-27 22:51:43,830 INFO: << 404 /kubernetes/configmap.yaml
2026-07-27 22:51:44,430 INFO: >> GET /charts/values.yaml
2026-07-27 22:51:44,430 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:44,431 INFO: GET /charts/values.yaml
2026-07-27 22:51:44,432 WARNING: GET /charts/values.yaml -> 404
2026-07-27 22:51:44,434 INFO: << 404 /charts/values.yaml
2026-07-27 22:51:47,450 INFO: >> GET /charts/values.production.yaml
2026-07-27 22:51:47,450 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:47,451 INFO: GET /charts/values.production.yaml
2026-07-27 22:51:47,452 WARNING: GET /charts/values.production.yaml -> 404
2026-07-27 22:51:47,454 INFO: << 404 /charts/values.production.yaml
2026-07-27 22:51:48,219 INFO: >> GET /deployment/values.yaml
2026-07-27 22:51:48,219 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:48,220 INFO: GET /deployment/values.yaml
2026-07-27 22:51:48,221 WARNING: GET /deployment/values.yaml -> 404
2026-07-27 22:51:48,224 INFO: << 404 /deployment/values.yaml
2026-07-27 22:51:48,880 INFO: >> GET /ops/values.yaml
2026-07-27 22:51:48,881 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:48,881 INFO: GET /ops/values.yaml
2026-07-27 22:51:48,883 WARNING: GET /ops/values.yaml -> 404
2026-07-27 22:51:48,885 INFO: << 404 /ops/values.yaml
2026-07-27 22:51:50,000 INFO: >> GET /.vault-token
2026-07-27 22:51:50,000 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:50,001 INFO: GET /.vault-token
2026-07-27 22:51:50,002 WARNING: GET /.vault-token -> 404
2026-07-27 22:51:50,004 INFO: << 404 /.vault-token
2026-07-27 22:51:52,334 INFO: >> GET /vault/config.json
2026-07-27 22:51:52,335 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:52,335 INFO: GET /vault/config.json
2026-07-27 22:51:52,336 WARNING: GET /vault/config.json -> 404
2026-07-27 22:51:52,339 INFO: << 404 /vault/config.json
2026-07-27 22:51:52,835 INFO: >> GET /secrets/config.json
2026-07-27 22:51:52,835 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:52,836 INFO: GET /secrets/config.json
2026-07-27 22:51:52,837 WARNING: GET /secrets/config.json -> 404
2026-07-27 22:51:52,839 INFO: << 404 /secrets/config.json
2026-07-27 22:51:53,443 INFO: >> GET /config/secrets.json
2026-07-27 22:51:53,443 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:53,443 INFO: GET /config/secrets.json
2026-07-27 22:51:53,445 WARNING: GET /config/secrets.json -> 404
2026-07-27 22:51:53,447 INFO: << 404 /config/secrets.json
2026-07-27 22:51:53,813 INFO: >> GET /ecs/task-definition.json
2026-07-27 22:51:53,814 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:53,814 INFO: GET /ecs/task-definition.json
2026-07-27 22:51:53,815 WARNING: GET /ecs/task-definition.json -> 404
2026-07-27 22:51:53,818 INFO: << 404 /ecs/task-definition.json
2026-07-27 22:51:54,146 INFO: >> GET /task-definition.json
2026-07-27 22:51:54,146 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:54,146 INFO: GET /task-definition.json
2026-07-27 22:51:54,148 WARNING: GET /task-definition.json -> 404
2026-07-27 22:51:54,150 INFO: << 404 /task-definition.json
2026-07-27 22:51:54,983 INFO: >> GET /deploy/config.json
2026-07-27 22:51:54,983 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:54,984 INFO: GET /deploy/config.json
2026-07-27 22:51:54,985 WARNING: GET /deploy/config.json -> 404
2026-07-27 22:51:54,987 INFO: << 404 /deploy/config.json
2026-07-27 22:51:55,826 INFO: >> GET /.aws/config
2026-07-27 22:51:55,826 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:55,827 INFO: GET /.aws/config
2026-07-27 22:51:55,828 WARNING: GET /.aws/config -> 404
2026-07-27 22:51:55,830 INFO: << 404 /.aws/config
2026-07-27 22:51:56,326 INFO: >> GET /cloud-init/user-data
2026-07-27 22:51:56,327 DEBUG: Using selector: EpollSelector
2026-07-27 22:51:56,327 INFO: GET /cloud-init/user-data
2026-07-27 22:51:56,328 WARNING: GET /cloud-init/user-data -> 404
2026-07-27 22:51:56,331 INFO: << 404 /cloud-init/user-data
2026-07-27 22:58:14,503 INFO: >> GET /.travis.yml
2026-07-27 22:58:14,505 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:14,514 INFO: GET /.travis.yml
2026-07-27 22:58:14,517 WARNING: GET /.travis.yml -> 404
2026-07-27 22:58:14,545 INFO: << 404 /.travis.yml
2026-07-27 22:58:15,146 INFO: >> GET /.travis.yaml
2026-07-27 22:58:15,146 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:15,146 INFO: GET /.travis.yaml
2026-07-27 22:58:15,148 WARNING: GET /.travis.yaml -> 404
2026-07-27 22:58:15,151 INFO: << 404 /.travis.yaml
2026-07-27 22:58:16,673 INFO: >> GET /.circleci/config.yml
2026-07-27 22:58:16,673 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:16,673 INFO: GET /.circleci/config.yml
2026-07-27 22:58:16,675 WARNING: GET /.circleci/config.yml -> 404
2026-07-27 22:58:16,677 INFO: << 404 /.circleci/config.yml
2026-07-27 22:58:17,227 INFO: >> GET /.circleci/config.yaml
2026-07-27 22:58:17,227 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:17,227 INFO: GET /.circleci/config.yaml
2026-07-27 22:58:17,228 WARNING: GET /.circleci/config.yaml -> 404
2026-07-27 22:58:17,231 INFO: << 404 /.circleci/config.yaml
2026-07-27 22:58:17,736 INFO: >> GET /.gitlab-ci.yml
2026-07-27 22:58:17,736 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:17,737 INFO: GET /.gitlab-ci.yml
2026-07-27 22:58:17,738 WARNING: GET /.gitlab-ci.yml -> 404
2026-07-27 22:58:17,741 INFO: << 404 /.gitlab-ci.yml
2026-07-27 22:58:18,254 INFO: >> GET /.gitlab-ci.yaml
2026-07-27 22:58:18,255 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:18,255 INFO: GET /.gitlab-ci.yaml
2026-07-27 22:58:18,256 WARNING: GET /.gitlab-ci.yaml -> 404
2026-07-27 22:58:18,259 INFO: << 404 /.gitlab-ci.yaml
2026-07-27 22:58:18,746 INFO: >> GET /Jenkinsfile
2026-07-27 22:58:18,746 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:18,747 INFO: GET /Jenkinsfile
2026-07-27 22:58:18,748 WARNING: GET /Jenkinsfile -> 404
2026-07-27 22:58:18,751 INFO: << 404 /Jenkinsfile
2026-07-27 22:58:19,109 INFO: >> GET /jenkinsfile
2026-07-27 22:58:19,109 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:19,109 INFO: GET /jenkinsfile
2026-07-27 22:58:19,111 WARNING: GET /jenkinsfile -> 404
2026-07-27 22:58:19,113 INFO: << 404 /jenkinsfile
2026-07-27 22:58:19,813 INFO: >> GET /.drone.yml
2026-07-27 22:58:19,813 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:19,813 INFO: GET /.drone.yml
2026-07-27 22:58:19,815 WARNING: GET /.drone.yml -> 404
2026-07-27 22:58:19,817 INFO: << 404 /.drone.yml
2026-07-27 22:58:21,338 INFO: >> GET /.drone.yaml
2026-07-27 22:58:21,339 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:21,339 INFO: GET /.drone.yaml
2026-07-27 22:58:21,340 WARNING: GET /.drone.yaml -> 404
2026-07-27 22:58:21,343 INFO: << 404 /.drone.yaml
2026-07-27 22:58:22,642 INFO: >> GET /bitbucket-pipelines.yml
2026-07-27 22:58:22,643 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:22,643 INFO: GET /bitbucket-pipelines.yml
2026-07-27 22:58:22,644 WARNING: GET /bitbucket-pipelines.yml -> 404
2026-07-27 22:58:22,647 INFO: << 404 /bitbucket-pipelines.yml
2026-07-27 22:58:23,096 INFO: >> GET /bitbucket-pipelines.yaml
2026-07-27 22:58:23,096 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:23,096 INFO: GET /bitbucket-pipelines.yaml
2026-07-27 22:58:23,097 WARNING: GET /bitbucket-pipelines.yaml -> 404
2026-07-27 22:58:23,100 INFO: << 404 /bitbucket-pipelines.yaml
2026-07-27 22:58:23,488 INFO: >> GET /.github/workflows/deploy.yml
2026-07-27 22:58:23,488 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:23,488 INFO: GET /.github/workflows/deploy.yml
2026-07-27 22:58:23,489 WARNING: GET /.github/workflows/deploy.yml -> 404
2026-07-27 22:58:23,492 INFO: << 404 /.github/workflows/deploy.yml
2026-07-27 22:58:24,738 INFO: >> GET /.github/workflows/ci.yml
2026-07-27 22:58:24,738 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:24,738 INFO: GET /.github/workflows/ci.yml
2026-07-27 22:58:24,740 WARNING: GET /.github/workflows/ci.yml -> 404
2026-07-27 22:58:24,743 INFO: << 404 /.github/workflows/ci.yml
2026-07-27 22:58:25,214 INFO: >> GET /.github/workflows/release.yml
2026-07-27 22:58:25,214 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:25,214 INFO: GET /.github/workflows/release.yml
2026-07-27 22:58:25,216 WARNING: GET /.github/workflows/release.yml -> 404
2026-07-27 22:58:25,218 INFO: << 404 /.github/workflows/release.yml
2026-07-27 22:58:25,660 INFO: >> GET /.github/workflows/main.yml
2026-07-27 22:58:25,660 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:25,660 INFO: GET /.github/workflows/main.yml
2026-07-27 22:58:25,662 WARNING: GET /.github/workflows/main.yml -> 404
2026-07-27 22:58:25,665 INFO: << 404 /.github/workflows/main.yml
2026-07-27 22:58:26,038 INFO: >> GET /docker-compose.yml
2026-07-27 22:58:26,038 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:26,039 INFO: GET /docker-compose.yml
2026-07-27 22:58:26,040 WARNING: GET /docker-compose.yml -> 404
2026-07-27 22:58:26,042 INFO: << 404 /docker-compose.yml
2026-07-27 22:58:26,545 INFO: >> GET /docker-compose.yaml
2026-07-27 22:58:26,545 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:26,545 INFO: GET /docker-compose.yaml
2026-07-27 22:58:26,547 WARNING: GET /docker-compose.yaml -> 404
2026-07-27 22:58:26,549 INFO: << 404 /docker-compose.yaml
2026-07-27 22:58:27,954 INFO: >> GET /docker-compose.prod.yml
2026-07-27 22:58:27,954 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:27,954 INFO: GET /docker-compose.prod.yml
2026-07-27 22:58:27,956 WARNING: GET /docker-compose.prod.yml -> 404
2026-07-27 22:58:27,958 INFO: << 404 /docker-compose.prod.yml
2026-07-27 22:58:28,288 INFO: >> GET /docker-compose.production.yml
2026-07-27 22:58:28,288 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:28,289 INFO: GET /docker-compose.production.yml
2026-07-27 22:58:28,290 WARNING: GET /docker-compose.production.yml -> 404
2026-07-27 22:58:28,292 INFO: << 404 /docker-compose.production.yml
2026-07-27 22:58:28,652 INFO: >> GET /docker-compose.override.yml
2026-07-27 22:58:28,652 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:28,652 INFO: GET /docker-compose.override.yml
2026-07-27 22:58:28,654 WARNING: GET /docker-compose.override.yml -> 404
2026-07-27 22:58:28,656 INFO: << 404 /docker-compose.override.yml
2026-07-27 22:58:29,225 INFO: >> GET /Dockerfile
2026-07-27 22:58:29,225 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:29,225 INFO: GET /Dockerfile
2026-07-27 22:58:29,226 WARNING: GET /Dockerfile -> 404
2026-07-27 22:58:29,229 INFO: << 404 /Dockerfile
2026-07-27 22:58:29,734 INFO: >> GET /.buildkite/pipeline.yml
2026-07-27 22:58:29,735 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:29,735 INFO: GET /.buildkite/pipeline.yml
2026-07-27 22:58:29,736 WARNING: GET /.buildkite/pipeline.yml -> 404
2026-07-27 22:58:29,739 INFO: << 404 /.buildkite/pipeline.yml
2026-07-27 22:58:30,473 INFO: >> GET /.buildkite/pipeline.yaml
2026-07-27 22:58:30,474 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:30,474 INFO: GET /.buildkite/pipeline.yaml
2026-07-27 22:58:30,475 WARNING: GET /.buildkite/pipeline.yaml -> 404
2026-07-27 22:58:30,478 INFO: << 404 /.buildkite/pipeline.yaml
2026-07-27 22:58:31,034 INFO: >> GET /Makefile
2026-07-27 22:58:31,034 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:31,035 INFO: GET /Makefile
2026-07-27 22:58:31,036 WARNING: GET /Makefile -> 404
2026-07-27 22:58:31,038 INFO: << 404 /Makefile
2026-07-27 22:58:31,633 INFO: >> GET /Procfile
2026-07-27 22:58:31,633 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:31,634 INFO: GET /Procfile
2026-07-27 22:58:31,635 WARNING: GET /Procfile -> 404
2026-07-27 22:58:31,637 INFO: << 404 /Procfile
2026-07-27 22:58:32,415 INFO: >> GET /app.yaml
2026-07-27 22:58:32,415 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:32,416 INFO: GET /app.yaml
2026-07-27 22:58:32,417 WARNING: GET /app.yaml -> 404
2026-07-27 22:58:32,419 INFO: << 404 /app.yaml
2026-07-27 22:58:33,119 INFO: >> GET /.azure-pipelines.yml
2026-07-27 22:58:33,119 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:33,119 INFO: GET /.azure-pipelines.yml
2026-07-27 22:58:33,121 WARNING: GET /.azure-pipelines.yml -> 404
2026-07-27 22:58:33,123 INFO: << 404 /.azure-pipelines.yml
2026-07-27 22:58:33,524 INFO: >> GET /azure-pipelines.yml
2026-07-27 22:58:33,524 DEBUG: Using selector: EpollSelector
2026-07-27 22:58:33,524 INFO: GET /azure-pipelines.yml
2026-07-27 22:58:33,526 WARNING: GET /azure-pipelines.yml -> 404
2026-07-27 22:58:33,528 INFO: << 404 /azure-pipelines.yml
2026-07-28 01:35:24,640 INFO: wsgi.py loading...
2026-07-28 01:35:24,640 INFO: Importing app.main...
2026-07-28 01:35:26,398 INFO: app.main imported successfully.
2026-07-28 01:35:26,398 INFO: Running DB init...
2026-07-28 01:35:26,461 INFO: All tables OK.
2026-07-28 01:35:26,598 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 01:35:26,601 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,604 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,606 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,608 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,611 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,614 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 01:35:26,622 INFO: Dip chart data seeded.
2026-07-28 01:35:26,622 INFO: DB init complete.
2026-07-28 01:35:26,622 INFO: wsgi.py ready.
2026-07-28 01:35:26,626 INFO: >> GET /app/etc/local.xml
2026-07-28 01:35:26,627 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:26,637 INFO: GET /app/etc/local.xml
2026-07-28 01:35:26,640 WARNING: GET /app/etc/local.xml -> 404
2026-07-28 01:35:26,649 INFO: << 404 /app/etc/local.xml
2026-07-28 01:35:27,560 INFO: >> GET /app/etc/config.php
2026-07-28 01:35:27,561 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:27,561 INFO: GET /app/etc/config.php
2026-07-28 01:35:27,563 WARNING: GET /app/etc/config.php -> 404
2026-07-28 01:35:27,565 INFO: << 404 /app/etc/config.php
2026-07-28 01:35:27,928 INFO: >> GET /var/log/exception.log
2026-07-28 01:35:27,928 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:27,929 INFO: GET /var/log/exception.log
2026-07-28 01:35:27,930 WARNING: GET /var/log/exception.log -> 404
2026-07-28 01:35:27,933 INFO: << 404 /var/log/exception.log
2026-07-28 01:35:28,415 INFO: >> GET /var/log/system.log
2026-07-28 01:35:28,415 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:28,415 INFO: GET /var/log/system.log
2026-07-28 01:35:28,417 WARNING: GET /var/log/system.log -> 404
2026-07-28 01:35:28,419 INFO: << 404 /var/log/system.log
2026-07-28 01:35:29,062 INFO: >> GET /admin/config.php
2026-07-28 01:35:29,062 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:29,063 INFO: GET /admin/config.php
2026-07-28 01:35:29,064 WARNING: GET /admin/config.php -> 404
2026-07-28 01:35:29,066 INFO: << 404 /admin/config.php
2026-07-28 01:35:29,554 INFO: >> GET /system/config.php
2026-07-28 01:35:29,555 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:29,555 INFO: GET /system/config.php
2026-07-28 01:35:29,556 WARNING: GET /system/config.php -> 404
2026-07-28 01:35:29,559 INFO: << 404 /system/config.php
2026-07-28 01:35:30,239 INFO: >> GET /config.php
2026-07-28 01:35:30,239 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:30,239 INFO: GET /config.php
2026-07-28 01:35:30,241 WARNING: GET /config.php -> 404
2026-07-28 01:35:30,243 INFO: << 404 /config.php
2026-07-28 01:35:30,673 INFO: >> GET /configuration.php
2026-07-28 01:35:30,674 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:30,674 INFO: GET /configuration.php
2026-07-28 01:35:30,675 WARNING: GET /configuration.php -> 404
2026-07-28 01:35:30,678 INFO: << 404 /configuration.php
2026-07-28 01:35:31,377 INFO: >> GET /app/config/parameters.php
2026-07-28 01:35:31,378 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:31,378 INFO: GET /app/config/parameters.php
2026-07-28 01:35:31,380 WARNING: GET /app/config/parameters.php -> 404
2026-07-28 01:35:31,382 INFO: << 404 /app/config/parameters.php
2026-07-28 01:35:32,427 INFO: >> GET /app/config/parameters.yml
2026-07-28 01:35:32,427 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:32,428 INFO: GET /app/config/parameters.yml
2026-07-28 01:35:32,429 WARNING: GET /app/config/parameters.yml -> 404
2026-07-28 01:35:32,432 INFO: << 404 /app/config/parameters.yml
2026-07-28 01:35:33,209 INFO: >> GET /config/settings.inc.php
2026-07-28 01:35:33,209 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:33,209 INFO: GET /config/settings.inc.php
2026-07-28 01:35:33,211 WARNING: GET /config/settings.inc.php -> 404
2026-07-28 01:35:33,213 INFO: << 404 /config/settings.inc.php
2026-07-28 01:35:35,576 INFO: >> GET /includes/configure.php
2026-07-28 01:35:35,576 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:35,577 INFO: GET /includes/configure.php
2026-07-28 01:35:35,578 WARNING: GET /includes/configure.php -> 404
2026-07-28 01:35:35,580 INFO: << 404 /includes/configure.php
2026-07-28 01:35:36,560 INFO: >> GET /includes/application_top.php
2026-07-28 01:35:36,560 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:36,561 INFO: GET /includes/application_top.php
2026-07-28 01:35:36,562 WARNING: GET /includes/application_top.php -> 404
2026-07-28 01:35:36,565 INFO: << 404 /includes/application_top.php
2026-07-28 01:35:36,995 INFO: >> GET /catalog/config.php
2026-07-28 01:35:36,995 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:36,996 INFO: GET /catalog/config.php
2026-07-28 01:35:36,997 WARNING: GET /catalog/config.php -> 404
2026-07-28 01:35:36,999 INFO: << 404 /catalog/config.php
2026-07-28 01:35:37,355 INFO: >> GET /upload/config.php
2026-07-28 01:35:37,355 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:37,355 INFO: GET /upload/config.php
2026-07-28 01:35:37,357 WARNING: GET /upload/config.php -> 404
2026-07-28 01:35:37,359 INFO: << 404 /upload/config.php
2026-07-28 01:35:38,257 INFO: >> GET /shop/config.php
2026-07-28 01:35:38,257 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:38,257 INFO: GET /shop/config.php
2026-07-28 01:35:38,259 WARNING: GET /shop/config.php -> 404
2026-07-28 01:35:38,261 INFO: << 404 /shop/config.php
2026-07-28 01:35:39,343 INFO: >> GET /store/config.php
2026-07-28 01:35:39,344 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:39,344 INFO: GET /store/config.php
2026-07-28 01:35:39,345 WARNING: GET /store/config.php -> 404
2026-07-28 01:35:39,348 INFO: << 404 /store/config.php
2026-07-28 01:35:39,928 INFO: >> GET /wp-content/db.php
2026-07-28 01:35:39,929 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:39,929 INFO: GET /wp-content/db.php
2026-07-28 01:35:39,930 WARNING: GET /wp-content/db.php -> 404
2026-07-28 01:35:39,933 INFO: << 404 /wp-content/db.php
2026-07-28 01:35:42,400 INFO: >> GET /wp-json/wc/v3/settings/email
2026-07-28 01:35:42,401 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:42,401 INFO: GET /wp-json/wc/v3/settings/email
2026-07-28 01:35:42,402 WARNING: GET /wp-json/wc/v3/settings/email -> 404
2026-07-28 01:35:42,405 INFO: << 404 /wp-json/wc/v3/settings/email
2026-07-28 01:35:44,179 INFO: >> GET /wp-json/wc/v3/settings/general
2026-07-28 01:35:44,180 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:44,180 INFO: GET /wp-json/wc/v3/settings/general
2026-07-28 01:35:44,181 WARNING: GET /wp-json/wc/v3/settings/general -> 404
2026-07-28 01:35:44,183 INFO: << 404 /wp-json/wc/v3/settings/general
2026-07-28 01:35:44,534 INFO: >> GET /wp-json/wc/v3/orders
2026-07-28 01:35:44,534 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:44,535 INFO: GET /wp-json/wc/v3/orders
2026-07-28 01:35:44,536 WARNING: GET /wp-json/wc/v3/orders -> 404
2026-07-28 01:35:44,538 INFO: << 404 /wp-json/wc/v3/orders
2026-07-28 01:35:45,430 INFO: >> GET /opencart/config.php
2026-07-28 01:35:45,430 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:45,430 INFO: GET /opencart/config.php
2026-07-28 01:35:45,432 WARNING: GET /opencart/config.php -> 404
2026-07-28 01:35:45,434 INFO: << 404 /opencart/config.php
2026-07-28 01:35:45,899 INFO: >> GET /administrator/index.php
2026-07-28 01:35:45,899 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:45,899 INFO: GET /administrator/index.php
2026-07-28 01:35:45,901 WARNING: GET /administrator/index.php -> 404
2026-07-28 01:35:45,903 INFO: << 404 /administrator/index.php
2026-07-28 01:35:46,288 INFO: >> GET /plugins/woocommerce/woocommerce.php
2026-07-28 01:35:46,288 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:46,288 INFO: GET /plugins/woocommerce/woocommerce.php
2026-07-28 01:35:46,290 WARNING: GET /plugins/woocommerce/woocommerce.php -> 404
2026-07-28 01:35:46,292 INFO: << 404 /plugins/woocommerce/woocommerce.php
2026-07-28 01:35:46,884 INFO: >> GET /magento/app/etc/local.xml
2026-07-28 01:35:46,885 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:46,885 INFO: GET /magento/app/etc/local.xml
2026-07-28 01:35:46,886 WARNING: GET /magento/app/etc/local.xml -> 404
2026-07-28 01:35:46,888 INFO: << 404 /magento/app/etc/local.xml
2026-07-28 01:35:47,975 INFO: >> GET /presta/config/settings.inc.php
2026-07-28 01:35:47,975 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:47,976 INFO: GET /presta/config/settings.inc.php
2026-07-28 01:35:47,977 WARNING: GET /presta/config/settings.inc.php -> 404
2026-07-28 01:35:47,979 INFO: << 404 /presta/config/settings.inc.php
2026-07-28 01:35:48,371 INFO: >> GET /oc-admin/config.php
2026-07-28 01:35:48,371 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:48,371 INFO: GET /oc-admin/config.php
2026-07-28 01:35:48,372 WARNING: GET /oc-admin/config.php -> 404
2026-07-28 01:35:48,375 INFO: << 404 /oc-admin/config.php
2026-07-28 01:35:49,551 INFO: >> GET /xcart/config.php
2026-07-28 01:35:49,551 DEBUG: Using selector: EpollSelector
2026-07-28 01:35:49,552 INFO: GET /xcart/config.php
2026-07-28 01:35:49,553 WARNING: GET /xcart/config.php -> 404
2026-07-28 01:35:49,556 INFO: << 404 /xcart/config.php
2026-07-28 08:38:05,314 INFO: wsgi.py loading...
2026-07-28 08:38:05,315 INFO: Importing app.main...
2026-07-28 08:38:08,098 INFO: app.main imported successfully.
2026-07-28 08:38:08,098 INFO: Running DB init...
2026-07-28 08:38:08,163 INFO: All tables OK.
2026-07-28 08:38:08,301 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 08:38:08,303 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,306 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,309 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,311 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,314 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,316 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 08:38:08,325 INFO: Dip chart data seeded.
2026-07-28 08:38:08,325 INFO: DB init complete.
2026-07-28 08:38:08,325 INFO: wsgi.py ready.
2026-07-28 08:38:08,328 INFO: >> POST /
2026-07-28 08:38:08,330 DEBUG: Using selector: EpollSelector
2026-07-28 08:38:08,341 INFO: POST /
2026-07-28 08:38:08,343 WARNING: POST / -> 404
2026-07-28 08:38:08,353 INFO: << 404 /
2026-07-28 08:38:09,382 INFO: >> POST /wp-json/batch/v1
2026-07-28 08:38:09,382 DEBUG: Using selector: EpollSelector
2026-07-28 08:38:09,383 INFO: POST /wp-json/batch/v1
2026-07-28 08:38:09,384 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-28 08:38:09,387 INFO: << 404 /wp-json/batch/v1
2026-07-28 08:39:19,504 INFO: >> POST /wp/
2026-07-28 08:39:19,505 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:19,515 INFO: POST /wp/
2026-07-28 08:39:19,518 WARNING: POST /wp/ -> 404
2026-07-28 08:39:19,546 INFO: << 404 /wp/
2026-07-28 08:39:20,186 INFO: >> POST /wp/wp-json/batch/v1
2026-07-28 08:39:20,187 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:20,187 INFO: POST /wp/wp-json/batch/v1
2026-07-28 08:39:20,188 WARNING: POST /wp/wp-json/batch/v1 -> 404
2026-07-28 08:39:20,191 INFO: << 404 /wp/wp-json/batch/v1
2026-07-28 08:39:21,063 INFO: >> POST /wordpress/
2026-07-28 08:39:21,063 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:21,063 INFO: POST /wordpress/
2026-07-28 08:39:21,065 WARNING: POST /wordpress/ -> 404
2026-07-28 08:39:21,067 INFO: << 404 /wordpress/
2026-07-28 08:39:22,043 INFO: >> POST /wordpress/wp-json/batch/v1
2026-07-28 08:39:22,045 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:22,055 INFO: POST /wordpress/wp-json/batch/v1
2026-07-28 08:39:22,058 WARNING: POST /wordpress/wp-json/batch/v1 -> 404
2026-07-28 08:39:22,086 INFO: << 404 /wordpress/wp-json/batch/v1
2026-07-28 08:39:23,162 INFO: >> POST /blog/
2026-07-28 08:39:23,164 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:23,174 INFO: POST /blog/
2026-07-28 08:39:23,176 WARNING: POST /blog/ -> 404
2026-07-28 08:39:23,205 INFO: << 404 /blog/
2026-07-28 08:39:24,078 INFO: >> POST /blog/wp-json/batch/v1
2026-07-28 08:39:24,080 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:24,090 INFO: POST /blog/wp-json/batch/v1
2026-07-28 08:39:24,093 WARNING: POST /blog/wp-json/batch/v1 -> 404
2026-07-28 08:39:24,124 INFO: << 404 /blog/wp-json/batch/v1
2026-07-28 08:39:25,064 INFO: >> POST /old/
2026-07-28 08:39:25,064 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:25,065 INFO: POST /old/
2026-07-28 08:39:25,066 WARNING: POST /old/ -> 404
2026-07-28 08:39:25,069 INFO: << 404 /old/
2026-07-28 08:39:25,655 INFO: >> POST /old/wp-json/batch/v1
2026-07-28 08:39:25,655 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:25,656 INFO: POST /old/wp-json/batch/v1
2026-07-28 08:39:25,657 WARNING: POST /old/wp-json/batch/v1 -> 404
2026-07-28 08:39:25,660 INFO: << 404 /old/wp-json/batch/v1
2026-07-28 08:39:26,153 INFO: >> POST /test/
2026-07-28 08:39:26,154 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:26,163 INFO: POST /test/
2026-07-28 08:39:26,166 WARNING: POST /test/ -> 404
2026-07-28 08:39:26,194 INFO: << 404 /test/
2026-07-28 08:39:26,686 INFO: >> POST /test/wp-json/batch/v1
2026-07-28 08:39:26,687 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:26,698 INFO: POST /test/wp-json/batch/v1
2026-07-28 08:39:26,701 WARNING: POST /test/wp-json/batch/v1 -> 404
2026-07-28 08:39:26,730 INFO: << 404 /test/wp-json/batch/v1
2026-07-28 08:39:27,235 INFO: >> POST /dev/
2026-07-28 08:39:27,235 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:27,235 INFO: POST /dev/
2026-07-28 08:39:27,237 WARNING: POST /dev/ -> 404
2026-07-28 08:39:27,239 INFO: << 404 /dev/
2026-07-28 08:39:28,034 INFO: >> POST /dev/wp-json/batch/v1
2026-07-28 08:39:28,035 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:28,035 INFO: POST /dev/wp-json/batch/v1
2026-07-28 08:39:28,036 WARNING: POST /dev/wp-json/batch/v1 -> 404
2026-07-28 08:39:28,038 INFO: << 404 /dev/wp-json/batch/v1
2026-07-28 08:39:28,707 INFO: >> POST /backup/
2026-07-28 08:39:28,708 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:28,718 INFO: POST /backup/
2026-07-28 08:39:28,720 WARNING: POST /backup/ -> 404
2026-07-28 08:39:28,749 INFO: << 404 /backup/
2026-07-28 08:39:29,349 INFO: >> POST /backup/wp-json/batch/v1
2026-07-28 08:39:29,349 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:29,349 INFO: POST /backup/wp-json/batch/v1
2026-07-28 08:39:29,351 WARNING: POST /backup/wp-json/batch/v1 -> 404
2026-07-28 08:39:29,353 INFO: << 404 /backup/wp-json/batch/v1
2026-07-28 08:39:29,846 INFO: >> POST /staging/
2026-07-28 08:39:29,847 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:29,847 INFO: POST /staging/
2026-07-28 08:39:29,849 WARNING: POST /staging/ -> 404
2026-07-28 08:39:29,851 INFO: << 404 /staging/
2026-07-28 08:39:30,514 INFO: >> POST /staging/wp-json/batch/v1
2026-07-28 08:39:30,515 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:30,525 INFO: POST /staging/wp-json/batch/v1
2026-07-28 08:39:30,528 WARNING: POST /staging/wp-json/batch/v1 -> 404
2026-07-28 08:39:30,557 INFO: << 404 /staging/wp-json/batch/v1
2026-07-28 08:39:31,294 INFO: >> POST /
2026-07-28 08:39:31,294 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:31,294 INFO: POST /
2026-07-28 08:39:31,295 WARNING: POST / -> 404
2026-07-28 08:39:31,298 INFO: << 404 /
2026-07-28 08:39:32,066 INFO: >> POST /wp-json/batch/v1
2026-07-28 08:39:32,068 DEBUG: Using selector: EpollSelector
2026-07-28 08:39:32,078 INFO: POST /wp-json/batch/v1
2026-07-28 08:39:32,081 WARNING: POST /wp-json/batch/v1 -> 404
2026-07-28 08:39:32,109 INFO: << 404 /wp-json/batch/v1
2026-07-28 11:46:15,744 INFO: wsgi.py loading...
2026-07-28 11:46:15,744 INFO: Importing app.main...
2026-07-28 11:46:17,732 INFO: app.main imported successfully.
2026-07-28 11:46:17,732 INFO: Running DB init...
2026-07-28 11:46:17,796 INFO: All tables OK.
2026-07-28 11:46:17,929 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 11:46:17,931 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,934 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,936 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,939 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,941 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,944 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 11:46:17,952 INFO: Dip chart data seeded.
2026-07-28 11:46:17,952 INFO: DB init complete.
2026-07-28 11:46:17,952 INFO: wsgi.py ready.
2026-07-28 11:46:17,956 INFO: >> GET /
2026-07-28 11:46:17,957 DEBUG: Using selector: EpollSelector
2026-07-28 11:46:17,967 INFO: GET /
2026-07-28 11:46:17,970 WARNING: GET / -> 404
2026-07-28 11:46:17,979 INFO: << 404 /
2026-07-28 11:46:30,790 INFO: >> GET /
2026-07-28 11:46:30,792 DEBUG: Using selector: EpollSelector
2026-07-28 11:46:30,803 INFO: GET /
2026-07-28 11:46:30,805 WARNING: GET / -> 404
2026-07-28 11:46:30,815 INFO: << 404 /
2026-07-28 12:42:43,233 INFO: wsgi.py loading...
2026-07-28 12:42:43,234 INFO: Importing app.main...
2026-07-28 12:42:45,130 INFO: app.main imported successfully.
2026-07-28 12:42:45,130 INFO: Running DB init...
2026-07-28 12:42:45,206 INFO: All tables OK.
2026-07-28 12:42:45,376 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 12:42:45,380 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,383 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,386 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,390 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,393 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,397 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 12:42:45,406 INFO: Dip chart data seeded.
2026-07-28 12:42:45,406 INFO: DB init complete.
2026-07-28 12:42:45,406 INFO: wsgi.py ready.
2026-07-28 12:42:45,410 INFO: >> GET /
2026-07-28 12:42:45,412 DEBUG: Using selector: EpollSelector
2026-07-28 12:42:45,413 INFO: >> GET /
2026-07-28 12:42:45,415 DEBUG: Using selector: EpollSelector
2026-07-28 12:42:45,425 INFO: GET /
2026-07-28 12:42:45,428 WARNING: GET / -> 404
2026-07-28 12:42:45,430 INFO: GET /
2026-07-28 12:42:45,433 WARNING: GET / -> 404
2026-07-28 12:42:45,440 INFO: << 404 /
2026-07-28 12:42:45,443 INFO: << 404 /
2026-07-28 12:42:45,933 INFO: >> GET /favicon.ico
2026-07-28 12:42:45,933 DEBUG: Using selector: EpollSelector
2026-07-28 12:42:45,934 INFO: GET /favicon.ico
2026-07-28 12:42:45,935 WARNING: GET /favicon.ico -> 404
2026-07-28 12:42:45,938 INFO: << 404 /favicon.ico
2026-07-28 13:19:05,042 INFO: wsgi.py loading...
2026-07-28 13:19:05,042 INFO: Importing app.main...
2026-07-28 13:19:06,755 INFO: app.main imported successfully.
2026-07-28 13:19:06,755 INFO: Running DB init...
2026-07-28 13:19:06,815 INFO: All tables OK.
2026-07-28 13:19:06,948 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 13:19:06,951 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,954 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,956 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,958 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,961 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,963 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 13:19:06,970 INFO: Dip chart data seeded.
2026-07-28 13:19:06,970 INFO: DB init complete.
2026-07-28 13:19:06,970 INFO: wsgi.py ready.
2026-07-28 13:19:06,974 INFO: >> GET /
2026-07-28 13:19:06,975 DEBUG: Using selector: EpollSelector
2026-07-28 13:19:06,985 INFO: GET /
2026-07-28 13:19:06,987 WARNING: GET / -> 404
2026-07-28 13:19:06,996 INFO: << 404 /
2026-07-28 19:29:38,489 INFO: wsgi.py loading...
2026-07-28 19:29:38,489 INFO: Importing app.main...
2026-07-28 19:29:42,241 INFO: app.main imported successfully.
2026-07-28 19:29:42,241 INFO: Running DB init...
2026-07-28 19:29:42,307 INFO: All tables OK.
2026-07-28 19:29:42,447 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 19:29:42,450 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,452 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,454 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,457 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,459 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,462 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:29:42,470 INFO: Dip chart data seeded.
2026-07-28 19:29:42,470 INFO: DB init complete.
2026-07-28 19:29:42,471 INFO: wsgi.py ready.
2026-07-28 19:29:42,474 INFO: >> GET /
2026-07-28 19:29:42,475 DEBUG: Using selector: EpollSelector
2026-07-28 19:29:42,485 INFO: GET /
2026-07-28 19:29:42,488 WARNING: GET / -> 404
2026-07-28 19:29:42,497 INFO: << 404 /
2026-07-28 19:57:03,828 INFO: wsgi.py loading...
2026-07-28 19:57:03,828 INFO: Importing app.main...
2026-07-28 19:57:05,557 INFO: app.main imported successfully.
2026-07-28 19:57:05,558 INFO: Running DB init...
2026-07-28 19:57:05,620 INFO: All tables OK.
2026-07-28 19:57:05,752 INFO: Migration OK: allowances ENUM+DAILY
2026-07-28 19:57:05,755 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,757 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,760 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,762 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,764 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,767 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-28 19:57:05,775 INFO: Dip chart data seeded.
2026-07-28 19:57:05,775 INFO: DB init complete.
2026-07-28 19:57:05,775 INFO: wsgi.py ready.
2026-07-28 19:57:05,779 INFO: >> GET /
2026-07-28 19:57:05,780 DEBUG: Using selector: EpollSelector
2026-07-28 19:57:05,790 INFO: GET /
2026-07-28 19:57:05,792 WARNING: GET / -> 404
2026-07-28 19:57:05,801 INFO: << 404 /
2026-07-29 05:57:22,832 INFO: wsgi.py loading...
2026-07-29 05:57:22,833 INFO: Importing app.main...
2026-07-29 05:57:26,549 INFO: app.main imported successfully.
2026-07-29 05:57:26,550 INFO: Running DB init...
2026-07-29 05:57:26,615 INFO: All tables OK.
2026-07-29 05:57:26,752 INFO: Migration OK: allowances ENUM+DAILY
2026-07-29 05:57:26,755 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,758 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,761 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,763 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,766 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,769 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 05:57:26,779 INFO: Dip chart data seeded.
2026-07-29 05:57:26,779 INFO: DB init complete.
2026-07-29 05:57:26,779 INFO: wsgi.py ready.
2026-07-29 05:57:26,782 INFO: >> GET /
2026-07-29 05:57:26,784 DEBUG: Using selector: EpollSelector
2026-07-29 05:57:26,794 INFO: GET /
2026-07-29 05:57:26,797 WARNING: GET / -> 404
2026-07-29 05:57:26,807 INFO: << 404 /
2026-07-29 05:57:31,671 INFO: >> GET /
2026-07-29 05:57:31,672 DEBUG: Using selector: EpollSelector
2026-07-29 05:57:31,682 INFO: GET /
2026-07-29 05:57:31,685 WARNING: GET / -> 404
2026-07-29 05:57:31,694 INFO: << 404 /
2026-07-29 05:57:46,010 INFO: >> GET /favicon.ico
2026-07-29 05:57:46,010 DEBUG: Using selector: EpollSelector
2026-07-29 05:57:46,010 INFO: GET /favicon.ico
2026-07-29 05:57:46,011 WARNING: GET /favicon.ico -> 404
2026-07-29 05:57:46,014 INFO: << 404 /favicon.ico
2026-07-29 13:25:23,109 INFO: wsgi.py loading...
2026-07-29 13:25:23,109 INFO: Importing app.main...
2026-07-29 13:25:25,015 INFO: app.main imported successfully.
2026-07-29 13:25:25,015 INFO: Running DB init...
2026-07-29 13:25:25,080 INFO: All tables OK.
2026-07-29 13:25:25,221 INFO: Migration OK: allowances ENUM+DAILY
2026-07-29 13:25:25,224 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,226 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,229 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,232 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,235 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,237 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 13:25:25,246 INFO: Dip chart data seeded.
2026-07-29 13:25:25,246 INFO: DB init complete.
2026-07-29 13:25:25,246 INFO: wsgi.py ready.
2026-07-29 13:25:25,250 INFO: >> GET /
2026-07-29 13:25:25,252 DEBUG: Using selector: EpollSelector
2026-07-29 13:25:25,263 INFO: GET /
2026-07-29 13:25:25,266 WARNING: GET / -> 404
2026-07-29 13:25:25,276 INFO: << 404 /
2026-07-29 15:06:56,889 INFO: wsgi.py loading...
2026-07-29 15:06:56,889 INFO: Importing app.main...
2026-07-29 15:06:58,630 INFO: app.main imported successfully.
2026-07-29 15:06:58,630 INFO: Running DB init...
2026-07-29 15:06:58,693 INFO: All tables OK.
2026-07-29 15:06:58,823 INFO: Migration OK: allowances ENUM+DAILY
2026-07-29 15:06:58,826 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,828 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,830 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,833 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,835 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,837 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 15:06:58,846 INFO: Dip chart data seeded.
2026-07-29 15:06:58,846 INFO: DB init complete.
2026-07-29 15:06:58,846 INFO: wsgi.py ready.
2026-07-29 15:06:58,849 INFO: >> GET /
2026-07-29 15:06:58,851 DEBUG: Using selector: EpollSelector
2026-07-29 15:06:58,861 INFO: GET /
2026-07-29 15:06:58,864 WARNING: GET / -> 404
2026-07-29 15:06:58,874 INFO: << 404 /
2026-07-29 15:06:59,123 INFO: >> GET /wp-json/
2026-07-29 15:06:59,124 DEBUG: Using selector: EpollSelector
2026-07-29 15:06:59,124 INFO: GET /wp-json/
2026-07-29 15:06:59,126 WARNING: GET /wp-json/ -> 404
2026-07-29 15:06:59,128 INFO: << 404 /wp-json/
2026-07-29 15:06:59,378 INFO: >> GET /
2026-07-29 15:06:59,378 DEBUG: Using selector: EpollSelector
2026-07-29 15:06:59,378 INFO: GET /
2026-07-29 15:06:59,379 WARNING: GET / -> 404
2026-07-29 15:06:59,382 INFO: << 404 /
2026-07-29 20:41:41,172 INFO: wsgi.py loading...
2026-07-29 20:41:41,173 INFO: Importing app.main...
2026-07-29 20:41:44,848 INFO: app.main imported successfully.
2026-07-29 20:41:44,849 INFO: Running DB init...
2026-07-29 20:41:44,912 INFO: All tables OK.
2026-07-29 20:41:45,052 INFO: Migration OK: allowances ENUM+DAILY
2026-07-29 20:41:45,054 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,057 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,060 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,062 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,066 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,068 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-29 20:41:45,077 INFO: Dip chart data seeded.
2026-07-29 20:41:45,077 INFO: DB init complete.
2026-07-29 20:41:45,077 INFO: wsgi.py ready.
2026-07-29 20:41:45,081 INFO: >> GET /
2026-07-29 20:41:45,082 DEBUG: Using selector: EpollSelector
2026-07-29 20:41:45,093 INFO: GET /
2026-07-29 20:41:45,096 WARNING: GET / -> 404
2026-07-29 20:41:45,105 INFO: << 404 /
2026-07-30 02:26:04,614 INFO: wsgi.py loading...
2026-07-30 02:26:04,614 INFO: Importing app.main...
2026-07-30 02:26:08,332 INFO: app.main imported successfully.
2026-07-30 02:26:08,333 INFO: Running DB init...
2026-07-30 02:26:08,392 INFO: All tables OK.
2026-07-30 02:26:08,530 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 02:26:08,532 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,535 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,538 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,540 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,543 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,546 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:26:08,554 INFO: Dip chart data seeded.
2026-07-30 02:26:08,554 INFO: DB init complete.
2026-07-30 02:26:08,555 INFO: wsgi.py ready.
2026-07-30 02:26:08,558 INFO: >> GET /
2026-07-30 02:26:08,559 DEBUG: Using selector: EpollSelector
2026-07-30 02:26:08,570 INFO: GET /
2026-07-30 02:26:08,573 WARNING: GET / -> 404
2026-07-30 02:26:08,582 INFO: << 404 /
2026-07-30 02:42:26,490 INFO: wsgi.py loading...
2026-07-30 02:42:26,490 INFO: Importing app.main...
2026-07-30 02:42:28,280 INFO: app.main imported successfully.
2026-07-30 02:42:28,281 INFO: Running DB init...
2026-07-30 02:42:28,344 INFO: All tables OK.
2026-07-30 02:42:28,485 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 02:42:28,488 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,491 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,493 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,496 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,499 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,502 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 02:42:28,510 INFO: Dip chart data seeded.
2026-07-30 02:42:28,510 INFO: DB init complete.
2026-07-30 02:42:28,510 INFO: wsgi.py ready.
2026-07-30 02:42:28,513 INFO: >> GET /
2026-07-30 02:42:28,515 DEBUG: Using selector: EpollSelector
2026-07-30 02:42:28,525 INFO: GET /
2026-07-30 02:42:28,527 WARNING: GET / -> 404
2026-07-30 02:42:28,536 INFO: << 404 /
2026-07-30 02:42:32,915 INFO: >> GET /_profiler/phpinfo
2026-07-30 02:42:32,917 DEBUG: Using selector: EpollSelector
2026-07-30 02:42:32,927 INFO: GET /_profiler/phpinfo
2026-07-30 02:42:32,930 WARNING: GET /_profiler/phpinfo -> 404
2026-07-30 02:42:32,940 INFO: << 404 /_profiler/phpinfo
2026-07-30 02:42:34,387 INFO: >> GET /_profiler/open
2026-07-30 02:42:34,388 DEBUG: Using selector: EpollSelector
2026-07-30 02:42:34,388 INFO: GET /_profiler/open
2026-07-30 02:42:34,390 WARNING: GET /_profiler/open -> 404
2026-07-30 02:42:34,393 INFO: << 404 /_profiler/open
2026-07-30 02:42:36,341 INFO: >> GET /_profiler/open
2026-07-30 02:42:36,343 DEBUG: Using selector: EpollSelector
2026-07-30 02:42:36,352 INFO: GET /_profiler/open
2026-07-30 02:42:36,355 WARNING: GET /_profiler/open -> 404
2026-07-30 02:42:36,364 INFO: << 404 /_profiler/open
2026-07-30 02:42:38,182 INFO: >> GET /_profiler/open
2026-07-30 02:42:38,184 DEBUG: Using selector: EpollSelector
2026-07-30 02:42:38,194 INFO: GET /_profiler/open
2026-07-30 02:42:38,197 WARNING: GET /_profiler/open -> 404
2026-07-30 02:42:38,206 INFO: << 404 /_profiler/open
2026-07-30 05:46:37,631 INFO: wsgi.py loading...
2026-07-30 05:46:37,631 INFO: Importing app.main...
2026-07-30 05:46:39,503 INFO: app.main imported successfully.
2026-07-30 05:46:39,503 INFO: Running DB init...
2026-07-30 05:46:39,569 INFO: All tables OK.
2026-07-30 05:46:39,710 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 05:46:39,713 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,716 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,718 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,721 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,723 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,726 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:46:39,734 INFO: Dip chart data seeded.
2026-07-30 05:46:39,734 INFO: DB init complete.
2026-07-30 05:46:39,734 INFO: wsgi.py ready.
2026-07-30 05:46:39,738 INFO: >> GET /v1/metadata
2026-07-30 05:46:39,739 DEBUG: Using selector: EpollSelector
2026-07-30 05:46:39,749 INFO: GET /v1/metadata
2026-07-30 05:46:39,752 WARNING: GET /v1/metadata -> 404
2026-07-30 05:46:39,761 INFO: << 404 /v1/metadata
2026-07-30 05:59:07,731 INFO: wsgi.py loading...
2026-07-30 05:59:07,732 INFO: Importing app.main...
2026-07-30 05:59:09,494 INFO: app.main imported successfully.
2026-07-30 05:59:09,495 INFO: Running DB init...
2026-07-30 05:59:09,559 INFO: All tables OK.
2026-07-30 05:59:09,696 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 05:59:09,699 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,702 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,705 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,707 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,710 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,713 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 05:59:09,721 INFO: Dip chart data seeded.
2026-07-30 05:59:09,721 INFO: DB init complete.
2026-07-30 05:59:09,721 INFO: wsgi.py ready.
2026-07-30 05:59:09,724 INFO: >> GET /v1/metadata
2026-07-30 05:59:09,726 DEBUG: Using selector: EpollSelector
2026-07-30 05:59:09,736 INFO: GET /v1/metadata
2026-07-30 05:59:09,738 WARNING: GET /v1/metadata -> 404
2026-07-30 05:59:09,747 INFO: << 404 /v1/metadata
2026-07-30 10:28:08,385 INFO: wsgi.py loading...
2026-07-30 10:28:08,385 INFO: Importing app.main...
2026-07-30 10:28:10,336 INFO: app.main imported successfully.
2026-07-30 10:28:10,336 INFO: Running DB init...
2026-07-30 10:28:10,407 INFO: All tables OK.
2026-07-30 10:28:10,565 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 10:28:10,568 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,572 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,575 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,578 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,581 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,584 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 10:28:10,591 INFO: Dip chart data seeded.
2026-07-30 10:28:10,591 INFO: DB init complete.
2026-07-30 10:28:10,591 INFO: wsgi.py ready.
2026-07-30 10:28:10,595 INFO: >> GET /
2026-07-30 10:28:10,596 DEBUG: Using selector: EpollSelector
2026-07-30 10:28:10,609 INFO: GET /
2026-07-30 10:28:10,611 WARNING: GET / -> 404
2026-07-30 10:28:10,622 INFO: << 404 /
2026-07-30 17:16:35,440 INFO: wsgi.py loading...
2026-07-30 17:16:35,441 INFO: Importing app.main...
2026-07-30 17:16:39,139 INFO: app.main imported successfully.
2026-07-30 17:16:39,139 INFO: Running DB init...
2026-07-30 17:16:39,202 INFO: All tables OK.
2026-07-30 17:16:39,340 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 17:16:39,343 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,345 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,348 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,350 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,353 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,355 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:16:39,363 INFO: Dip chart data seeded.
2026-07-30 17:16:39,363 INFO: DB init complete.
2026-07-30 17:16:39,363 INFO: wsgi.py ready.
2026-07-30 17:16:39,366 INFO: >> GET /
2026-07-30 17:16:39,368 DEBUG: Using selector: EpollSelector
2026-07-30 17:16:39,378 INFO: GET /
2026-07-30 17:16:39,380 WARNING: GET / -> 404
2026-07-30 17:16:39,389 INFO: << 404 /
2026-07-30 17:40:45,006 INFO: wsgi.py loading...
2026-07-30 17:40:45,006 INFO: Importing app.main...
2026-07-30 17:40:46,800 INFO: app.main imported successfully.
2026-07-30 17:40:46,800 INFO: Running DB init...
2026-07-30 17:40:46,864 INFO: All tables OK.
2026-07-30 17:40:47,013 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 17:40:47,017 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,021 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,024 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,028 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,032 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,035 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:40:47,045 INFO: Dip chart data seeded.
2026-07-30 17:40:47,045 INFO: DB init complete.
2026-07-30 17:40:47,045 INFO: wsgi.py ready.
2026-07-30 17:40:47,048 INFO: >> GET /license.txt
2026-07-30 17:40:47,050 DEBUG: Using selector: EpollSelector
2026-07-30 17:40:47,061 INFO: GET /license.txt
2026-07-30 17:40:47,064 WARNING: GET /license.txt -> 404
2026-07-30 17:40:47,075 INFO: << 404 /license.txt
2026-07-30 17:40:55,025 INFO: >> GET /license.txt
2026-07-30 17:40:55,026 DEBUG: Using selector: EpollSelector
2026-07-30 17:40:55,039 INFO: GET /license.txt
2026-07-30 17:40:55,042 WARNING: GET /license.txt -> 404
2026-07-30 17:40:55,053 INFO: << 404 /license.txt
2026-07-30 17:50:50,994 INFO: wsgi.py loading...
2026-07-30 17:50:50,995 INFO: Importing app.main...
2026-07-30 17:50:52,784 INFO: app.main imported successfully.
2026-07-30 17:50:52,784 INFO: Running DB init...
2026-07-30 17:50:52,848 INFO: All tables OK.
2026-07-30 17:50:52,989 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 17:50:52,992 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:52,995 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:52,997 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:53,000 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:53,003 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:53,006 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 17:50:53,012 INFO: Dip chart data seeded.
2026-07-30 17:50:53,013 INFO: DB init complete.
2026-07-30 17:50:53,013 INFO: wsgi.py ready.
2026-07-30 17:50:53,016 INFO: >> GET /
2026-07-30 17:50:53,018 DEBUG: Using selector: EpollSelector
2026-07-30 17:50:53,028 INFO: GET /
2026-07-30 17:50:53,031 WARNING: GET / -> 404
2026-07-30 17:50:53,040 INFO: << 404 /
2026-07-30 20:17:18,601 INFO: wsgi.py loading...
2026-07-30 20:17:18,601 INFO: Importing app.main...
2026-07-30 20:17:20,454 INFO: app.main imported successfully.
2026-07-30 20:17:20,454 INFO: Running DB init...
2026-07-30 20:17:20,519 INFO: All tables OK.
2026-07-30 20:17:20,659 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 20:17:20,661 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,664 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,666 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,669 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,672 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,674 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:17:20,683 INFO: Dip chart data seeded.
2026-07-30 20:17:20,683 INFO: DB init complete.
2026-07-30 20:17:20,683 INFO: wsgi.py ready.
2026-07-30 20:17:20,687 INFO: >> GET /
2026-07-30 20:17:20,688 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:20,700 INFO: GET /
2026-07-30 20:17:20,702 WARNING: GET / -> 404
2026-07-30 20:17:20,712 INFO: << 404 /
2026-07-30 20:17:22,589 INFO: >> GET /phpinfo.php
2026-07-30 20:17:22,589 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:22,589 INFO: GET /phpinfo.php
2026-07-30 20:17:22,591 WARNING: GET /phpinfo.php -> 404
2026-07-30 20:17:22,593 INFO: << 404 /phpinfo.php
2026-07-30 20:17:24,489 INFO: >> GET /test.php
2026-07-30 20:17:24,491 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:24,502 INFO: GET /test.php
2026-07-30 20:17:24,505 WARNING: GET /test.php -> 404
2026-07-30 20:17:24,515 INFO: << 404 /test.php
2026-07-30 20:17:26,387 INFO: >> GET /_profiler/phpinfo
2026-07-30 20:17:26,388 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:26,388 INFO: GET /_profiler/phpinfo
2026-07-30 20:17:26,389 WARNING: GET /_profiler/phpinfo -> 404
2026-07-30 20:17:26,392 INFO: << 404 /_profiler/phpinfo
2026-07-30 20:17:30,154 INFO: >> GET /db.sql
2026-07-30 20:17:30,155 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:30,165 INFO: GET /db.sql
2026-07-30 20:17:30,168 WARNING: GET /db.sql -> 404
2026-07-30 20:17:30,177 INFO: << 404 /db.sql
2026-07-30 20:17:32,054 INFO: >> GET /dump.sql
2026-07-30 20:17:32,054 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:32,054 INFO: GET /dump.sql
2026-07-30 20:17:32,056 WARNING: GET /dump.sql -> 404
2026-07-30 20:17:32,059 INFO: << 404 /dump.sql
2026-07-30 20:17:33,922 INFO: >> GET /database.sql
2026-07-30 20:17:33,922 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:33,922 INFO: GET /database.sql
2026-07-30 20:17:33,924 WARNING: GET /database.sql -> 404
2026-07-30 20:17:33,927 INFO: << 404 /database.sql
2026-07-30 20:17:35,807 INFO: >> GET /backup.sql
2026-07-30 20:17:35,807 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:35,808 INFO: GET /backup.sql
2026-07-30 20:17:35,809 WARNING: GET /backup.sql -> 404
2026-07-30 20:17:35,812 INFO: << 404 /backup.sql
2026-07-30 20:17:37,670 INFO: >> GET /config/db.sql
2026-07-30 20:17:37,670 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:37,670 INFO: GET /config/db.sql
2026-07-30 20:17:37,672 WARNING: GET /config/db.sql -> 404
2026-07-30 20:17:37,674 INFO: << 404 /config/db.sql
2026-07-30 20:17:39,550 INFO: >> GET /sql/db.sql
2026-07-30 20:17:39,551 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:39,561 INFO: GET /sql/db.sql
2026-07-30 20:17:39,565 WARNING: GET /sql/db.sql -> 404
2026-07-30 20:17:39,575 INFO: << 404 /sql/db.sql
2026-07-30 20:17:41,455 INFO: >> GET /data/dump.sql
2026-07-30 20:17:41,455 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:41,456 INFO: GET /data/dump.sql
2026-07-30 20:17:41,457 WARNING: GET /data/dump.sql -> 404
2026-07-30 20:17:41,460 INFO: << 404 /data/dump.sql
2026-07-30 20:17:43,332 INFO: >> GET /backups/database.sql
2026-07-30 20:17:43,332 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:43,332 INFO: GET /backups/database.sql
2026-07-30 20:17:43,333 WARNING: GET /backups/database.sql -> 404
2026-07-30 20:17:43,336 INFO: << 404 /backups/database.sql
2026-07-30 20:17:45,175 INFO: >> GET /mysql.sql
2026-07-30 20:17:45,175 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:45,176 INFO: GET /mysql.sql
2026-07-30 20:17:45,177 WARNING: GET /mysql.sql -> 404
2026-07-30 20:17:45,180 INFO: << 404 /mysql.sql
2026-07-30 20:17:47,034 INFO: >> GET /db_backup.sql
2026-07-30 20:17:47,034 DEBUG: Using selector: EpollSelector
2026-07-30 20:17:47,035 INFO: GET /db_backup.sql
2026-07-30 20:17:47,036 WARNING: GET /db_backup.sql -> 404
2026-07-30 20:17:47,039 INFO: << 404 /db_backup.sql
2026-07-30 20:23:23,535 INFO: wsgi.py loading...
2026-07-30 20:23:23,535 INFO: Importing app.main...
2026-07-30 20:23:25,337 INFO: app.main imported successfully.
2026-07-30 20:23:25,337 INFO: Running DB init...
2026-07-30 20:23:25,402 INFO: All tables OK.
2026-07-30 20:23:25,570 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 20:23:25,573 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,576 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,578 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,581 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,584 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,586 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:23:25,594 INFO: Dip chart data seeded.
2026-07-30 20:23:25,594 INFO: DB init complete.
2026-07-30 20:23:25,595 INFO: wsgi.py ready.
2026-07-30 20:23:25,598 INFO: >> GET /
2026-07-30 20:23:25,599 DEBUG: Using selector: EpollSelector
2026-07-30 20:23:25,609 INFO: GET /
2026-07-30 20:23:25,611 WARNING: GET / -> 404
2026-07-30 20:23:25,620 INFO: << 404 /
2026-07-30 20:49:06,193 INFO: wsgi.py loading...
2026-07-30 20:49:06,193 INFO: Importing app.main...
2026-07-30 20:49:07,983 INFO: app.main imported successfully.
2026-07-30 20:49:07,984 INFO: Running DB init...
2026-07-30 20:49:08,046 INFO: All tables OK.
2026-07-30 20:49:08,182 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 20:49:08,185 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,188 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,191 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,193 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,196 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,199 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 20:49:08,207 INFO: Dip chart data seeded.
2026-07-30 20:49:08,207 INFO: DB init complete.
2026-07-30 20:49:08,207 INFO: wsgi.py ready.
2026-07-30 20:49:08,211 INFO: >> GET /
2026-07-30 20:49:08,212 DEBUG: Using selector: EpollSelector
2026-07-30 20:49:08,222 INFO: GET /
2026-07-30 20:49:08,225 WARNING: GET / -> 404
2026-07-30 20:49:08,233 INFO: << 404 /
2026-07-30 20:49:12,470 INFO: >> GET /favicon.ico
2026-07-30 20:49:12,472 DEBUG: Using selector: EpollSelector
2026-07-30 20:49:12,483 INFO: GET /favicon.ico
2026-07-30 20:49:12,486 WARNING: GET /favicon.ico -> 404
2026-07-30 20:49:12,495 INFO: << 404 /favicon.ico
2026-07-30 21:31:52,083 INFO: wsgi.py loading...
2026-07-30 21:31:52,083 INFO: Importing app.main...
2026-07-30 21:31:54,210 INFO: app.main imported successfully.
2026-07-30 21:31:54,210 INFO: Running DB init...
2026-07-30 21:31:54,306 INFO: All tables OK.
2026-07-30 21:31:54,471 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 21:31:54,475 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,477 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,480 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,483 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,486 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,489 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 21:31:54,498 INFO: Dip chart data seeded.
2026-07-30 21:31:54,498 INFO: DB init complete.
2026-07-30 21:31:54,498 INFO: wsgi.py ready.
2026-07-30 21:31:54,502 INFO: >> GET /
2026-07-30 21:31:54,503 DEBUG: Using selector: EpollSelector
2026-07-30 21:31:54,514 INFO: GET /
2026-07-30 21:31:54,516 WARNING: GET / -> 404
2026-07-30 21:31:54,525 INFO: << 404 /
2026-07-30 22:51:58,613 INFO: wsgi.py loading...
2026-07-30 22:51:58,614 INFO: Importing app.main...
2026-07-30 22:52:01,464 INFO: app.main imported successfully.
2026-07-30 22:52:01,464 INFO: Running DB init...
2026-07-30 22:52:01,528 INFO: All tables OK.
2026-07-30 22:52:01,667 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 22:52:01,669 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,672 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,674 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,677 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,680 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,682 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 22:52:01,690 INFO: Dip chart data seeded.
2026-07-30 22:52:01,690 INFO: DB init complete.
2026-07-30 22:52:01,690 INFO: wsgi.py ready.
2026-07-30 22:52:01,694 INFO: >> GET /
2026-07-30 22:52:01,695 DEBUG: Using selector: EpollSelector
2026-07-30 22:52:01,696 INFO: >> GET /robots.txt
2026-07-30 22:52:01,698 DEBUG: Using selector: EpollSelector
2026-07-30 22:52:01,706 INFO: GET /
2026-07-30 22:52:01,708 INFO: GET /robots.txt
2026-07-30 22:52:01,708 WARNING: GET / -> 404
2026-07-30 22:52:01,711 WARNING: GET /robots.txt -> 404
2026-07-30 22:52:01,718 INFO: << 404 /
2026-07-30 22:52:01,720 INFO: << 404 /robots.txt
2026-07-30 23:13:44,228 INFO: wsgi.py loading...
2026-07-30 23:13:44,229 INFO: Importing app.main...
2026-07-30 23:13:45,946 INFO: app.main imported successfully.
2026-07-30 23:13:45,946 INFO: Running DB init...
2026-07-30 23:13:46,008 INFO: All tables OK.
2026-07-30 23:13:46,136 INFO: Migration OK: allowances ENUM+DAILY
2026-07-30 23:13:46,139 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,141 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,143 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,146 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,148 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,150 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-30 23:13:46,158 INFO: Dip chart data seeded.
2026-07-30 23:13:46,158 INFO: DB init complete.
2026-07-30 23:13:46,158 INFO: wsgi.py ready.
2026-07-30 23:13:46,162 INFO: >> GET /
2026-07-30 23:13:46,163 DEBUG: Using selector: EpollSelector
2026-07-30 23:13:46,172 INFO: GET /
2026-07-30 23:13:46,175 WARNING: GET / -> 404
2026-07-30 23:13:46,183 INFO: << 404 /
2026-07-31 02:17:46,301 INFO: wsgi.py loading...
2026-07-31 02:17:46,302 INFO: Importing app.main...
2026-07-31 02:17:48,151 INFO: app.main imported successfully.
2026-07-31 02:17:48,151 INFO: Running DB init...
2026-07-31 02:17:48,213 INFO: All tables OK.
2026-07-31 02:17:48,360 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 02:17:48,363 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,366 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,369 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,372 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,375 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,377 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 02:17:48,386 INFO: Dip chart data seeded.
2026-07-31 02:17:48,386 INFO: DB init complete.
2026-07-31 02:17:48,386 INFO: wsgi.py ready.
2026-07-31 02:17:48,390 INFO: >> GET /robots.txt
2026-07-31 02:17:48,391 DEBUG: Using selector: EpollSelector
2026-07-31 02:17:48,401 INFO: GET /robots.txt
2026-07-31 02:17:48,404 WARNING: GET /robots.txt -> 404
2026-07-31 02:17:48,413 INFO: << 404 /robots.txt
2026-07-31 02:17:49,255 INFO: >> GET /
2026-07-31 02:17:49,257 DEBUG: Using selector: EpollSelector
2026-07-31 02:17:49,268 INFO: GET /
2026-07-31 02:17:49,270 WARNING: GET / -> 404
2026-07-31 02:17:49,280 INFO: << 404 /
2026-07-31 12:01:37,736 INFO: wsgi.py loading...
2026-07-31 12:01:37,736 INFO: Importing app.main...
2026-07-31 12:01:41,436 INFO: app.main imported successfully.
2026-07-31 12:01:41,436 INFO: Running DB init...
2026-07-31 12:01:41,507 INFO: All tables OK.
2026-07-31 12:01:41,662 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 12:01:41,665 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,667 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,670 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,672 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,675 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,677 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 12:01:41,686 INFO: Dip chart data seeded.
2026-07-31 12:01:41,686 INFO: DB init complete.
2026-07-31 12:01:41,686 INFO: wsgi.py ready.
2026-07-31 12:01:41,690 INFO: >> GET /license.txt
2026-07-31 12:01:41,691 DEBUG: Using selector: EpollSelector
2026-07-31 12:01:41,702 INFO: GET /license.txt
2026-07-31 12:01:41,705 WARNING: GET /license.txt -> 404
2026-07-31 12:01:41,715 INFO: << 404 /license.txt
2026-07-31 12:02:29,211 INFO: >> GET /license.txt
2026-07-31 12:02:29,213 DEBUG: Using selector: EpollSelector
2026-07-31 12:02:29,223 INFO: GET /license.txt
2026-07-31 12:02:29,226 WARNING: GET /license.txt -> 404
2026-07-31 12:02:29,255 INFO: << 404 /license.txt
2026-07-31 13:52:25,093 INFO: wsgi.py loading...
2026-07-31 13:52:25,094 INFO: Importing app.main...
2026-07-31 13:52:26,939 INFO: app.main imported successfully.
2026-07-31 13:52:26,939 INFO: Running DB init...
2026-07-31 13:52:27,009 INFO: All tables OK.
2026-07-31 13:52:27,148 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 13:52:27,151 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,153 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,156 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,158 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,161 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,164 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 13:52:27,171 INFO: Dip chart data seeded.
2026-07-31 13:52:27,171 INFO: DB init complete.
2026-07-31 13:52:27,171 INFO: wsgi.py ready.
2026-07-31 13:52:27,175 INFO: >> GET /
2026-07-31 13:52:27,176 DEBUG: Using selector: EpollSelector
2026-07-31 13:52:27,186 INFO: GET /
2026-07-31 13:52:27,189 WARNING: GET / -> 404
2026-07-31 13:52:27,198 INFO: << 404 /
2026-07-31 15:09:46,916 INFO: wsgi.py loading...
2026-07-31 15:09:46,917 INFO: Importing app.main...
2026-07-31 15:09:48,764 INFO: app.main imported successfully.
2026-07-31 15:09:48,764 INFO: Running DB init...
2026-07-31 15:09:48,829 INFO: All tables OK.
2026-07-31 15:09:48,964 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 15:09:48,968 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,971 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,973 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,976 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,979 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,982 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 15:09:48,990 INFO: Dip chart data seeded.
2026-07-31 15:09:48,990 INFO: DB init complete.
2026-07-31 15:09:48,990 INFO: wsgi.py ready.
2026-07-31 15:09:48,994 INFO: >> GET /wp-login.php
2026-07-31 15:09:48,995 DEBUG: Using selector: EpollSelector
2026-07-31 15:09:49,005 INFO: GET /wp-login.php
2026-07-31 15:09:49,008 WARNING: GET /wp-login.php -> 404
2026-07-31 15:09:49,017 INFO: << 404 /wp-login.php
2026-07-31 17:04:42,552 INFO: wsgi.py loading...
2026-07-31 17:04:42,552 INFO: Importing app.main...
2026-07-31 17:04:44,399 INFO: app.main imported successfully.
2026-07-31 17:04:44,399 INFO: Running DB init...
2026-07-31 17:04:44,462 INFO: All tables OK.
2026-07-31 17:04:44,596 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 17:04:44,598 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,601 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,603 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,605 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,608 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,610 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 17:04:44,618 INFO: Dip chart data seeded.
2026-07-31 17:04:44,618 INFO: DB init complete.
2026-07-31 17:04:44,618 INFO: wsgi.py ready.
2026-07-31 17:04:44,622 INFO: >> GET /
2026-07-31 17:04:44,623 DEBUG: Using selector: EpollSelector
2026-07-31 17:04:44,633 INFO: GET /
2026-07-31 17:04:44,636 WARNING: GET / -> 404
2026-07-31 17:04:44,644 INFO: << 404 /
2026-07-31 20:04:19,105 INFO: wsgi.py loading...
2026-07-31 20:04:19,106 INFO: Importing app.main...
2026-07-31 20:04:21,196 INFO: app.main imported successfully.
2026-07-31 20:04:21,196 INFO: Running DB init...
2026-07-31 20:04:21,261 INFO: All tables OK.
2026-07-31 20:04:21,413 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 20:04:21,416 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,419 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,422 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,425 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,428 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,430 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:04:21,439 INFO: Dip chart data seeded.
2026-07-31 20:04:21,439 INFO: DB init complete.
2026-07-31 20:04:21,439 INFO: wsgi.py ready.
2026-07-31 20:04:21,443 INFO: >> GET /
2026-07-31 20:04:21,444 DEBUG: Using selector: EpollSelector
2026-07-31 20:04:21,455 INFO: GET /
2026-07-31 20:04:21,458 WARNING: GET / -> 404
2026-07-31 20:04:21,467 INFO: << 404 /
2026-07-31 20:18:37,980 INFO: wsgi.py loading...
2026-07-31 20:18:37,980 INFO: Importing app.main...
2026-07-31 20:18:39,760 INFO: app.main imported successfully.
2026-07-31 20:18:39,760 INFO: Running DB init...
2026-07-31 20:18:39,824 INFO: All tables OK.
2026-07-31 20:18:39,979 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 20:18:39,982 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:39,984 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:39,986 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:39,989 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:39,991 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:39,994 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 20:18:40,002 INFO: Dip chart data seeded.
2026-07-31 20:18:40,002 INFO: DB init complete.
2026-07-31 20:18:40,002 INFO: wsgi.py ready.
2026-07-31 20:18:40,005 INFO: >> GET /wp-login.php
2026-07-31 20:18:40,006 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:40,016 INFO: GET /wp-login.php
2026-07-31 20:18:40,019 WARNING: GET /wp-login.php -> 404
2026-07-31 20:18:40,028 INFO: << 404 /wp-login.php
2026-07-31 20:18:41,451 INFO: >> GET /wp-json/
2026-07-31 20:18:41,453 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:41,463 INFO: GET /wp-json/
2026-07-31 20:18:41,466 WARNING: GET /wp-json/ -> 404
2026-07-31 20:18:41,479 INFO: << 404 /wp-json/
2026-07-31 20:18:42,705 INFO: >> GET /
2026-07-31 20:18:42,707 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:42,717 INFO: GET /
2026-07-31 20:18:42,720 WARNING: GET / -> 404
2026-07-31 20:18:42,729 INFO: << 404 /
2026-07-31 20:18:44,069 INFO: >> GET /blog/wp-login.php
2026-07-31 20:18:44,071 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:44,080 INFO: GET /blog/wp-login.php
2026-07-31 20:18:44,084 WARNING: GET /blog/wp-login.php -> 404
2026-07-31 20:18:44,092 INFO: << 404 /blog/wp-login.php
2026-07-31 20:18:45,322 INFO: >> GET /blog/wp-json/
2026-07-31 20:18:45,322 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:45,323 INFO: GET /blog/wp-json/
2026-07-31 20:18:45,324 WARNING: GET /blog/wp-json/ -> 404
2026-07-31 20:18:45,327 INFO: << 404 /blog/wp-json/
2026-07-31 20:18:46,030 INFO: >> GET /blog/
2026-07-31 20:18:46,031 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:46,042 INFO: GET /blog/
2026-07-31 20:18:46,045 WARNING: GET /blog/ -> 404
2026-07-31 20:18:46,055 INFO: << 404 /blog/
2026-07-31 20:18:46,868 INFO: >> GET /wordpress/wp-login.php
2026-07-31 20:18:46,870 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:46,880 INFO: GET /wordpress/wp-login.php
2026-07-31 20:18:46,883 WARNING: GET /wordpress/wp-login.php -> 404
2026-07-31 20:18:46,892 INFO: << 404 /wordpress/wp-login.php
2026-07-31 20:18:47,668 INFO: >> GET /wordpress/wp-json/
2026-07-31 20:18:47,669 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:47,679 INFO: GET /wordpress/wp-json/
2026-07-31 20:18:47,682 WARNING: GET /wordpress/wp-json/ -> 404
2026-07-31 20:18:47,691 INFO: << 404 /wordpress/wp-json/
2026-07-31 20:18:48,755 INFO: >> GET /wordpress/
2026-07-31 20:18:48,756 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:48,766 INFO: GET /wordpress/
2026-07-31 20:18:48,769 WARNING: GET /wordpress/ -> 404
2026-07-31 20:18:48,779 INFO: << 404 /wordpress/
2026-07-31 20:18:49,458 INFO: >> GET /wp/wp-login.php
2026-07-31 20:18:49,459 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:49,469 INFO: GET /wp/wp-login.php
2026-07-31 20:18:49,472 WARNING: GET /wp/wp-login.php -> 404
2026-07-31 20:18:49,481 INFO: << 404 /wp/wp-login.php
2026-07-31 20:18:50,273 INFO: >> GET /wp/wp-json/
2026-07-31 20:18:50,274 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:50,274 INFO: GET /wp/wp-json/
2026-07-31 20:18:50,276 WARNING: GET /wp/wp-json/ -> 404
2026-07-31 20:18:50,279 INFO: << 404 /wp/wp-json/
2026-07-31 20:18:50,916 INFO: >> GET /wp/
2026-07-31 20:18:50,916 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:50,917 INFO: GET /wp/
2026-07-31 20:18:50,918 WARNING: GET /wp/ -> 404
2026-07-31 20:18:50,921 INFO: << 404 /wp/
2026-07-31 20:18:51,644 INFO: >> GET /cms/wp-login.php
2026-07-31 20:18:51,644 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:51,644 INFO: GET /cms/wp-login.php
2026-07-31 20:18:51,646 WARNING: GET /cms/wp-login.php -> 404
2026-07-31 20:18:51,649 INFO: << 404 /cms/wp-login.php
2026-07-31 20:18:53,604 INFO: >> GET /cms/wp-json/
2026-07-31 20:18:53,606 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:53,616 INFO: GET /cms/wp-json/
2026-07-31 20:18:53,619 WARNING: GET /cms/wp-json/ -> 404
2026-07-31 20:18:53,629 INFO: << 404 /cms/wp-json/
2026-07-31 20:18:54,322 INFO: >> GET /cms/
2026-07-31 20:18:54,322 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:54,323 INFO: GET /cms/
2026-07-31 20:18:54,324 WARNING: GET /cms/ -> 404
2026-07-31 20:18:54,327 INFO: << 404 /cms/
2026-07-31 20:18:55,094 INFO: >> GET /site/wp-login.php
2026-07-31 20:18:55,095 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:55,095 INFO: GET /site/wp-login.php
2026-07-31 20:18:55,097 WARNING: GET /site/wp-login.php -> 404
2026-07-31 20:18:55,100 INFO: << 404 /site/wp-login.php
2026-07-31 20:18:55,849 INFO: >> GET /site/wp-json/
2026-07-31 20:18:55,850 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:55,860 INFO: GET /site/wp-json/
2026-07-31 20:18:55,863 WARNING: GET /site/wp-json/ -> 404
2026-07-31 20:18:55,872 INFO: << 404 /site/wp-json/
2026-07-31 20:18:56,958 INFO: >> GET /site/
2026-07-31 20:18:56,960 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:56,970 INFO: GET /site/
2026-07-31 20:18:56,973 WARNING: GET /site/ -> 404
2026-07-31 20:18:56,982 INFO: << 404 /site/
2026-07-31 20:18:57,610 INFO: >> GET /main/wp-login.php
2026-07-31 20:18:57,610 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:57,610 INFO: GET /main/wp-login.php
2026-07-31 20:18:57,612 WARNING: GET /main/wp-login.php -> 404
2026-07-31 20:18:57,614 INFO: << 404 /main/wp-login.php
2026-07-31 20:18:58,295 INFO: >> GET /main/wp-json/
2026-07-31 20:18:58,296 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:58,306 INFO: GET /main/wp-json/
2026-07-31 20:18:58,309 WARNING: GET /main/wp-json/ -> 404
2026-07-31 20:18:58,318 INFO: << 404 /main/wp-json/
2026-07-31 20:18:59,667 INFO: >> GET /main/
2026-07-31 20:18:59,668 DEBUG: Using selector: EpollSelector
2026-07-31 20:18:59,678 INFO: GET /main/
2026-07-31 20:18:59,681 WARNING: GET /main/ -> 404
2026-07-31 20:18:59,690 INFO: << 404 /main/
2026-07-31 20:19:01,664 INFO: >> GET /new/wp-login.php
2026-07-31 20:19:01,665 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:01,676 INFO: GET /new/wp-login.php
2026-07-31 20:19:01,679 WARNING: GET /new/wp-login.php -> 404
2026-07-31 20:19:01,689 INFO: << 404 /new/wp-login.php
2026-07-31 20:19:02,437 INFO: >> GET /new/wp-json/
2026-07-31 20:19:02,438 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:02,438 INFO: GET /new/wp-json/
2026-07-31 20:19:02,440 WARNING: GET /new/wp-json/ -> 404
2026-07-31 20:19:02,443 INFO: << 404 /new/wp-json/
2026-07-31 20:19:03,057 INFO: >> GET /new/
2026-07-31 20:19:03,057 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:03,057 INFO: GET /new/
2026-07-31 20:19:03,059 WARNING: GET /new/ -> 404
2026-07-31 20:19:03,062 INFO: << 404 /new/
2026-07-31 20:19:05,150 INFO: >> GET /wp-login.php
2026-07-31 20:19:05,150 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:05,150 INFO: GET /wp-login.php
2026-07-31 20:19:05,152 WARNING: GET /wp-login.php -> 404
2026-07-31 20:19:05,155 INFO: << 404 /wp-login.php
2026-07-31 20:19:06,460 INFO: >> GET /wp-json/
2026-07-31 20:19:06,461 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:06,471 INFO: GET /wp-json/
2026-07-31 20:19:06,474 WARNING: GET /wp-json/ -> 404
2026-07-31 20:19:06,483 INFO: << 404 /wp-json/
2026-07-31 20:19:07,784 INFO: >> GET /
2026-07-31 20:19:07,785 DEBUG: Using selector: EpollSelector
2026-07-31 20:19:07,796 INFO: GET /
2026-07-31 20:19:07,798 WARNING: GET / -> 404
2026-07-31 20:19:07,807 INFO: << 404 /
2026-07-31 21:14:38,238 INFO: wsgi.py loading...
2026-07-31 21:14:38,238 INFO: Importing app.main...
2026-07-31 21:14:39,947 INFO: app.main imported successfully.
2026-07-31 21:14:39,947 INFO: Running DB init...
2026-07-31 21:14:40,008 INFO: All tables OK.
2026-07-31 21:14:40,139 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 21:14:40,141 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,144 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,146 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,148 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,151 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,153 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:14:40,161 INFO: Dip chart data seeded.
2026-07-31 21:14:40,161 INFO: DB init complete.
2026-07-31 21:14:40,161 INFO: wsgi.py ready.
2026-07-31 21:14:40,164 INFO: >> GET /wp-config.php
2026-07-31 21:14:40,166 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,166 INFO: >> GET /server.js
2026-07-31 21:14:40,167 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,167 INFO: >> GET /phpinfo.php
2026-07-31 21:14:40,168 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,168 INFO: >> GET /config.php
2026-07-31 21:14:40,169 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,169 INFO: >> GET /info.php
2026-07-31 21:14:40,171 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,171 INFO: >> GET /appsettings.json
2026-07-31 21:14:40,173 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,174 INFO: >> GET /app.js
2026-07-31 21:14:40,176 DEBUG: Using selector: EpollSelector
2026-07-31 21:14:40,177 INFO: GET /wp-config.php
2026-07-31 21:14:40,178 INFO: GET /server.js
2026-07-31 21:14:40,178 INFO: GET /phpinfo.php
2026-07-31 21:14:40,179 INFO: GET /config.php
2026-07-31 21:14:40,180 WARNING: GET /wp-config.php -> 404
2026-07-31 21:14:40,181 INFO: GET /info.php
2026-07-31 21:14:40,181 WARNING: GET /phpinfo.php -> 404
2026-07-31 21:14:40,181 WARNING: GET /server.js -> 404
2026-07-31 21:14:40,182 WARNING: GET /config.php -> 404
2026-07-31 21:14:40,184 WARNING: GET /info.php -> 404
2026-07-31 21:14:40,185 INFO: GET /appsettings.json
2026-07-31 21:14:40,187 INFO: GET /app.js
2026-07-31 21:14:40,188 WARNING: GET /appsettings.json -> 404
2026-07-31 21:14:40,190 INFO: << 404 /wp-config.php
2026-07-31 21:14:40,190 WARNING: GET /app.js -> 404
2026-07-31 21:14:40,191 INFO: << 404 /config.php
2026-07-31 21:14:40,191 INFO: << 404 /server.js
2026-07-31 21:14:40,192 INFO: << 404 /info.php
2026-07-31 21:14:40,190 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 834, in _write_bytes
    self._sock.sendall(data)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 511, in rollback
    self._execute_command(COMMAND.COM_QUERY, "ROLLBACK")
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 886, in _execute_command
    self._write_bytes(packet)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 837, in _write_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))")
2026-07-31 21:14:40,227 INFO: << 404 /phpinfo.php
2026-07-31 21:14:40,247 INFO: << 404 /appsettings.json
2026-07-31 21:14:40,247 INFO: << 404 /app.js
2026-07-31 21:18:00,002 INFO: >> GET /.env.bak
2026-07-31 21:18:00,004 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,007 INFO: >> GET /settings.php
2026-07-31 21:18:00,009 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,010 INFO: >> GET /database.php
2026-07-31 21:18:00,011 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,012 INFO: >> GET /.gitconfig
2026-07-31 21:18:00,014 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,015 INFO: GET /.env.bak
2026-07-31 21:18:00,018 WARNING: GET /.env.bak -> 404
2026-07-31 21:18:00,020 INFO: GET /settings.php
2026-07-31 21:18:00,021 INFO: GET /database.php
2026-07-31 21:18:00,023 WARNING: GET /settings.php -> 404
2026-07-31 21:18:00,024 WARNING: GET /database.php -> 404
2026-07-31 21:18:00,025 INFO: GET /.gitconfig
2026-07-31 21:18:00,029 WARNING: GET /.gitconfig -> 404
2026-07-31 21:18:00,047 INFO: << 404 /.env.bak
2026-07-31 21:18:00,053 INFO: << 404 /settings.php
2026-07-31 21:18:00,053 INFO: << 404 /database.php
2026-07-31 21:18:00,057 INFO: << 404 /.gitconfig
2026-07-31 21:18:00,257 INFO: >> GET /config.js
2026-07-31 21:18:00,259 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,269 INFO: GET /config.js
2026-07-31 21:18:00,272 WARNING: GET /config.js -> 404
2026-07-31 21:18:00,301 INFO: << 404 /config.js
2026-07-31 21:18:00,307 INFO: >> GET /docker-compose.yml
2026-07-31 21:18:00,309 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,310 INFO: >> GET /db.php
2026-07-31 21:18:00,310 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,310 INFO: >> GET /application.yml
2026-07-31 21:18:00,310 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,310 INFO: GET /db.php
2026-07-31 21:18:00,311 INFO: GET /application.yml
2026-07-31 21:18:00,311 INFO: >> GET /web.config
2026-07-31 21:18:00,312 WARNING: GET /db.php -> 404
2026-07-31 21:18:00,312 WARNING: GET /application.yml -> 404
2026-07-31 21:18:00,313 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,314 INFO: >> GET /composer.json
2026-07-31 21:18:00,315 INFO: << 404 /db.php
2026-07-31 21:18:00,315 INFO: << 404 /application.yml
2026-07-31 21:18:00,316 DEBUG: Using selector: EpollSelector
2026-07-31 21:18:00,319 INFO: GET /docker-compose.yml
2026-07-31 21:18:00,322 WARNING: GET /docker-compose.yml -> 404
2026-07-31 21:18:00,325 INFO: GET /web.config
2026-07-31 21:18:00,327 INFO: GET /composer.json
2026-07-31 21:18:00,328 WARNING: GET /web.config -> 404
2026-07-31 21:18:00,330 WARNING: GET /composer.json -> 404
2026-07-31 21:18:00,352 INFO: << 404 /docker-compose.yml
2026-07-31 21:18:00,357 INFO: << 404 /composer.json
2026-07-31 21:18:00,357 INFO: << 404 /web.config
2026-07-31 21:20:03,793 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-31 21:20:03,794 DEBUG: Using selector: EpollSelector
2026-07-31 21:20:03,806 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-31 21:20:03,809 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-07-31 21:20:03,842 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-07-31 21:21:51,209 INFO: >> GET /app/config/parameters.yml
2026-07-31 21:21:51,211 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,211 INFO: >> GET /php_info.php
2026-07-31 21:21:51,213 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,214 INFO: >> GET /config/parameters.yml
2026-07-31 21:21:51,215 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,216 INFO: >> GET /settings.py
2026-07-31 21:21:51,218 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,219 INFO: >> GET /config/application.yml
2026-07-31 21:21:51,221 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,222 INFO: GET /app/config/parameters.yml
2026-07-31 21:21:51,222 INFO: >> GET /phpinfo/info.php
2026-07-31 21:21:51,223 INFO: GET /php_info.php
2026-07-31 21:21:51,224 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,225 WARNING: GET /app/config/parameters.yml -> 404
2026-07-31 21:21:51,225 INFO: >> GET /index.php
2026-07-31 21:21:51,226 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,227 INFO: GET /config/parameters.yml
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-31 21:21:51,227 WARNING: GET /php_info.php -> 404
2026-07-31 21:21:51,228 INFO: >> GET /pinfo.php
2026-07-31 21:21:51,229 INFO: GET /settings.py
2026-07-31 21:21:51,229 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:51,230 WARNING: GET /config/parameters.yml -> 404
2026-07-31 21:21:51,232 WARNING: GET /settings.py -> 404
2026-07-31 21:21:51,233 INFO: GET /config/application.yml
2026-07-31 21:21:51,235 INFO: GET /phpinfo/info.php
2026-07-31 21:21:51,236 WARNING: GET /config/application.yml -> 404
2026-07-31 21:21:51,238 WARNING: GET /phpinfo/info.php -> 404
2026-07-31 21:21:51,238 INFO: GET /index.php
2026-07-31 21:21:51,241 INFO: GET /pinfo.php
2026-07-31 21:21:51,241 WARNING: GET /index.php -> 404
2026-07-31 21:21:51,244 WARNING: GET /pinfo.php -> 404
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-31 21:21:51,330 INFO: << 404 /php_info.php
2026-07-31 21:21:51,330 INFO: << 404 /settings.py
2026-07-31 21:21:51,330 INFO: << 404 /app/config/parameters.yml
2026-07-31 21:21:51,335 INFO: << 404 /config/parameters.yml
2026-07-31 21:21:51,337 INFO: << 404 /config/application.yml
2026-07-31 21:21:51,341 INFO: << 404 /phpinfo/info.php
2026-07-31 21:21:51,346 INFO: << 404 /pinfo.php
2026-07-31 21:21:51,347 INFO: << 404 /index.php
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,151 INFO: >> GET /server_info.php
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,228 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,229 INFO: >> GET /.env.js
2026-07-31 21:21:55,231 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,232 INFO: >> GET /configuration.php
2026-07-31 21:21:55,234 DEBUG: Using selector: EpollSelector
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,235 INFO: >> GET /.aws/credentials
2026-07-31 21:21:55,236 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,241 INFO: GET /server_info.php
2026-07-31 21:21:55,241 INFO: >> GET /portal/phpinfo.php
2026-07-31 21:21:55,242 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,243 INFO: GET /.env.js
2026-07-31 21:21:55,243 INFO: >> GET /.env-config.js
2026-07-31 21:21:55,244 WARNING: GET /server_info.php -> 404
2026-07-31 21:21:55,245 DEBUG: Using selector: EpollSelector
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,246 INFO: GET /configuration.php
2026-07-31 21:21:55,246 WARNING: GET /.env.js -> 404
2026-07-31 21:21:55,246 INFO: >> GET /test.php
2026-07-31 21:21:55,248 INFO: GET /.aws/credentials
2026-07-31 21:21:55,248 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,249 WARNING: GET /configuration.php -> 404
2026-07-31 21:21:55,251 WARNING: GET /.aws/credentials -> 404
2026-07-31 21:21:55,329 INFO: GET /portal/phpinfo.php
2026-07-31 21:21:55,331 INFO: GET /.env-config.js
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 7, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,332 WARNING: GET /portal/phpinfo.php -> 404
2026-07-31 21:21:55,333 INFO: >> GET /functions.php
2026-07-31 21:21:55,333 INFO: GET /test.php
2026-07-31 21:21:55,334 WARNING: GET /.env-config.js -> 404
2026-07-31 21:21:55,334 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:55,336 WARNING: GET /test.php -> 404
2026-07-31 21:21:55,345 INFO: GET /functions.php
2026-07-31 21:21:55,349 WARNING: GET /functions.php -> 404
2026-07-31 21:21:55,350 INFO: << 404 /.env.js
2026-07-31 21:21:55,350 INFO: << 404 /server_info.php
2026-07-31 21:21:55,429 INFO: << 404 /configuration.php
2026-07-31 21:21:55,429 INFO: << 404 /.aws/credentials
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-31 21:21:55,436 INFO: << 404 /portal/phpinfo.php
2026-07-31 21:21:55,436 INFO: << 404 /.env-config.js
2026-07-31 21:21:55,443 INFO: << 404 /test.php
2026-07-31 21:21:55,453 INFO: << 404 /functions.php
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
[UID:1034][1089813] Reached max children process limit: 6, extra: 2, current: 8, busy: 8, please increase LSAPI_CHILDREN.
2026-07-31 21:21:58,941 INFO: >> GET /config.json
2026-07-31 21:21:58,943 DEBUG: Using selector: EpollSelector
2026-07-31 21:21:59,028 INFO: GET /config.json
2026-07-31 21:21:59,031 WARNING: GET /config.json -> 404
2026-07-31 21:21:59,138 INFO: << 404 /config.json
2026-07-31 21:46:55,344 INFO: wsgi.py loading...
2026-07-31 21:46:55,344 INFO: Importing app.main...
2026-07-31 21:46:57,133 INFO: app.main imported successfully.
2026-07-31 21:46:57,133 INFO: Running DB init...
2026-07-31 21:46:57,196 INFO: All tables OK.
2026-07-31 21:46:57,337 INFO: Migration OK: allowances ENUM+DAILY
2026-07-31 21:46:57,339 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,342 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,345 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,347 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,350 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,353 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-07-31 21:46:57,361 INFO: Dip chart data seeded.
2026-07-31 21:46:57,361 INFO: DB init complete.
2026-07-31 21:46:57,361 INFO: wsgi.py ready.
2026-07-31 21:46:57,365 INFO: >> GET /
2026-07-31 21:46:57,366 DEBUG: Using selector: EpollSelector
2026-07-31 21:46:57,376 INFO: GET /
2026-07-31 21:46:57,379 WARNING: GET / -> 404
2026-07-31 21:46:57,388 INFO: << 404 /
2026-08-01 00:13:44,065 INFO: wsgi.py loading...
2026-08-01 00:13:44,066 INFO: Importing app.main...
2026-08-01 00:13:45,918 INFO: app.main imported successfully.
2026-08-01 00:13:45,918 INFO: Running DB init...
2026-08-01 00:13:45,981 INFO: All tables OK.
2026-08-01 00:13:46,115 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 00:13:46,118 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,120 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,122 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,125 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,128 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,130 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 00:13:46,138 INFO: Dip chart data seeded.
2026-08-01 00:13:46,139 INFO: DB init complete.
2026-08-01 00:13:46,139 INFO: wsgi.py ready.
2026-08-01 00:13:46,142 INFO: >> GET /
2026-08-01 00:13:46,143 DEBUG: Using selector: EpollSelector
2026-08-01 00:13:46,153 INFO: GET /
2026-08-01 00:13:46,156 WARNING: GET / -> 404
2026-08-01 00:13:46,165 INFO: << 404 /
2026-08-01 01:13:21,494 INFO: wsgi.py loading...
2026-08-01 01:13:21,494 INFO: Importing app.main...
2026-08-01 01:13:23,256 INFO: app.main imported successfully.
2026-08-01 01:13:23,256 INFO: Running DB init...
2026-08-01 01:13:23,317 INFO: All tables OK.
2026-08-01 01:13:23,455 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 01:13:23,457 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,460 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,462 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,465 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,467 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,470 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 01:13:23,479 INFO: Dip chart data seeded.
2026-08-01 01:13:23,479 INFO: DB init complete.
2026-08-01 01:13:23,479 INFO: wsgi.py ready.
2026-08-01 01:13:23,482 INFO: >> GET /favicon.ico
2026-08-01 01:13:23,483 DEBUG: Using selector: EpollSelector
2026-08-01 01:13:23,494 INFO: GET /favicon.ico
2026-08-01 01:13:23,497 WARNING: GET /favicon.ico -> 404
2026-08-01 01:13:23,506 INFO: << 404 /favicon.ico
2026-08-01 01:13:31,577 INFO: >> GET /robots.txt
2026-08-01 01:13:31,578 DEBUG: Using selector: EpollSelector
2026-08-01 01:13:31,588 INFO: GET /robots.txt
2026-08-01 01:13:31,591 WARNING: GET /robots.txt -> 404
2026-08-01 01:13:31,601 INFO: << 404 /robots.txt
2026-08-01 01:13:36,668 INFO: >> GET /sitemap.xml
2026-08-01 01:13:36,669 DEBUG: Using selector: EpollSelector
2026-08-01 01:13:36,679 INFO: GET /sitemap.xml
2026-08-01 01:13:36,682 WARNING: GET /sitemap.xml -> 404
2026-08-01 01:13:36,691 INFO: << 404 /sitemap.xml
2026-08-01 03:26:31,362 INFO: wsgi.py loading...
2026-08-01 03:26:31,363 INFO: Importing app.main...
2026-08-01 03:26:34,823 INFO: app.main imported successfully.
2026-08-01 03:26:34,824 INFO: Running DB init...
2026-08-01 03:26:34,888 INFO: All tables OK.
2026-08-01 03:26:35,028 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 03:26:35,031 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,034 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,036 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,039 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,042 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,044 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 03:26:35,053 INFO: Dip chart data seeded.
2026-08-01 03:26:35,053 INFO: DB init complete.
2026-08-01 03:26:35,053 INFO: wsgi.py ready.
2026-08-01 03:26:35,056 INFO: >> POST /
2026-08-01 03:26:35,058 DEBUG: Using selector: EpollSelector
2026-08-01 03:26:35,068 INFO: POST /
2026-08-01 03:26:35,070 WARNING: POST / -> 404
2026-08-01 03:26:35,079 INFO: << 404 /
2026-08-01 03:26:35,342 INFO: >> POST /wp-json/batch/v1
2026-08-01 03:26:35,344 DEBUG: Using selector: EpollSelector
2026-08-01 03:26:35,354 INFO: POST /wp-json/batch/v1
2026-08-01 03:26:35,357 WARNING: POST /wp-json/batch/v1 -> 404
2026-08-01 03:26:35,366 INFO: << 404 /wp-json/batch/v1
2026-08-01 07:07:57,638 INFO: wsgi.py loading...
2026-08-01 07:07:57,639 INFO: Importing app.main...
2026-08-01 07:08:01,306 INFO: app.main imported successfully.
2026-08-01 07:08:01,306 INFO: Running DB init...
2026-08-01 07:08:01,376 INFO: All tables OK.
2026-08-01 07:08:01,546 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 07:08:01,549 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,552 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,555 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,559 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,572 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,614 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 07:08:01,627 INFO: Dip chart data seeded.
2026-08-01 07:08:01,627 INFO: DB init complete.
2026-08-01 07:08:01,627 INFO: wsgi.py ready.
2026-08-01 07:08:01,631 INFO: >> GET /
2026-08-01 07:08:01,632 DEBUG: Using selector: EpollSelector
2026-08-01 07:08:01,643 INFO: GET /
2026-08-01 07:08:01,645 WARNING: GET / -> 404
2026-08-01 07:08:01,656 INFO: << 404 /
2026-08-01 10:26:33,789 INFO: wsgi.py loading...
2026-08-01 10:26:33,790 INFO: Importing app.main...
2026-08-01 10:26:37,504 INFO: app.main imported successfully.
2026-08-01 10:26:37,504 INFO: Running DB init...
2026-08-01 10:26:37,570 INFO: All tables OK.
2026-08-01 10:26:37,707 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 10:26:37,710 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,712 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,714 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,717 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,720 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,722 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 10:26:37,731 INFO: Dip chart data seeded.
2026-08-01 10:26:37,731 INFO: DB init complete.
2026-08-01 10:26:37,732 INFO: wsgi.py ready.
2026-08-01 10:26:37,735 INFO: >> GET /
2026-08-01 10:26:37,736 DEBUG: Using selector: EpollSelector
2026-08-01 10:26:37,747 INFO: GET /
2026-08-01 10:26:37,749 WARNING: GET / -> 404
2026-08-01 10:26:37,759 INFO: << 404 /
2026-08-01 10:26:40,620 INFO: >> GET /favicon.ico
2026-08-01 10:26:40,621 DEBUG: Using selector: EpollSelector
2026-08-01 10:26:40,632 INFO: GET /favicon.ico
2026-08-01 10:26:40,635 WARNING: GET /favicon.ico -> 404
2026-08-01 10:26:40,644 INFO: << 404 /favicon.ico
2026-08-01 14:16:04,299 INFO: wsgi.py loading...
2026-08-01 14:16:04,300 INFO: Importing app.main...
2026-08-01 14:16:06,229 INFO: app.main imported successfully.
2026-08-01 14:16:06,229 INFO: Running DB init...
2026-08-01 14:16:06,297 INFO: All tables OK.
2026-08-01 14:16:06,439 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 14:16:06,442 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,444 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,447 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,449 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,452 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,455 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 14:16:06,463 INFO: Dip chart data seeded.
2026-08-01 14:16:06,463 INFO: DB init complete.
2026-08-01 14:16:06,463 INFO: wsgi.py ready.
2026-08-01 14:16:06,467 INFO: >> GET /
2026-08-01 14:16:06,468 DEBUG: Using selector: EpollSelector
2026-08-01 14:16:06,478 INFO: GET /
2026-08-01 14:16:06,481 WARNING: GET / -> 404
2026-08-01 14:16:06,491 INFO: << 404 /
2026-08-01 15:39:45,177 INFO: wsgi.py loading...
2026-08-01 15:39:45,181 INFO: Importing app.main...
2026-08-01 15:39:49,284 INFO: app.main imported successfully.
2026-08-01 15:39:49,284 INFO: Running DB init...
2026-08-01 15:39:49,364 INFO: All tables OK.
2026-08-01 15:39:49,553 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 15:39:49,555 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,558 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,560 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,563 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,565 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,568 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 15:39:49,596 INFO: Dip chart data seeded.
2026-08-01 15:39:49,596 INFO: DB init complete.
2026-08-01 15:39:49,596 INFO: wsgi.py ready.
2026-08-01 15:39:49,600 INFO: >> GET /
2026-08-01 15:39:49,602 DEBUG: Using selector: EpollSelector
2026-08-01 15:39:49,626 INFO: GET /
2026-08-01 15:39:49,628 WARNING: GET / -> 404
2026-08-01 15:39:49,638 INFO: << 404 /
2026-08-01 18:16:03,964 INFO: wsgi.py loading...
2026-08-01 18:16:03,965 INFO: Importing app.main...
2026-08-01 18:16:07,598 INFO: app.main imported successfully.
2026-08-01 18:16:07,598 INFO: Running DB init...
2026-08-01 18:16:07,662 INFO: All tables OK.
2026-08-01 18:16:07,821 INFO: Migration OK: allowances ENUM+DAILY
2026-08-01 18:16:07,824 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,827 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,830 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,833 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,836 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,839 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-01 18:16:07,848 INFO: Dip chart data seeded.
2026-08-01 18:16:07,848 INFO: DB init complete.
2026-08-01 18:16:07,848 INFO: wsgi.py ready.
2026-08-01 18:16:07,851 INFO: >> GET /
2026-08-01 18:16:07,853 DEBUG: Using selector: EpollSelector
2026-08-01 18:16:07,863 INFO: GET /
2026-08-01 18:16:07,866 WARNING: GET / -> 404
2026-08-01 18:16:07,878 INFO: << 404 /
2026-08-02 00:20:46,932 INFO: wsgi.py loading...
2026-08-02 00:20:46,933 INFO: Importing app.main...
2026-08-02 00:20:50,221 INFO: app.main imported successfully.
2026-08-02 00:20:50,221 INFO: Running DB init...
2026-08-02 00:20:50,288 INFO: All tables OK.
2026-08-02 00:20:50,444 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 00:20:50,447 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,449 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,452 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,455 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,458 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,461 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 00:20:50,468 INFO: Dip chart data seeded.
2026-08-02 00:20:50,468 INFO: DB init complete.
2026-08-02 00:20:50,469 INFO: wsgi.py ready.
2026-08-02 00:20:50,472 INFO: >> GET /
2026-08-02 00:20:50,474 DEBUG: Using selector: EpollSelector
2026-08-02 00:20:50,475 INFO: >> GET /robots.txt
2026-08-02 00:20:50,477 DEBUG: Using selector: EpollSelector
2026-08-02 00:20:50,486 INFO: GET /
2026-08-02 00:20:50,488 WARNING: GET / -> 404
2026-08-02 00:20:50,489 INFO: GET /robots.txt
2026-08-02 00:20:50,492 WARNING: GET /robots.txt -> 404
2026-08-02 00:20:50,499 INFO: << 404 /
2026-08-02 00:20:50,502 INFO: << 404 /robots.txt
2026-08-02 00:22:20,095 INFO: >> GET /robots.txt
2026-08-02 00:22:20,095 DEBUG: Using selector: EpollSelector
2026-08-02 00:22:20,095 INFO: GET /robots.txt
2026-08-02 00:22:20,097 WARNING: GET /robots.txt -> 404
2026-08-02 00:22:20,120 INFO: << 404 /robots.txt
2026-08-02 04:40:16,030 INFO: wsgi.py loading...
2026-08-02 04:40:16,030 INFO: Importing app.main...
2026-08-02 04:40:17,880 INFO: app.main imported successfully.
2026-08-02 04:40:17,880 INFO: Running DB init...
2026-08-02 04:40:17,945 INFO: All tables OK.
2026-08-02 04:40:18,083 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 04:40:18,086 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,088 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,090 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,093 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,096 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,098 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 04:40:18,107 INFO: Dip chart data seeded.
2026-08-02 04:40:18,107 INFO: DB init complete.
2026-08-02 04:40:18,107 INFO: wsgi.py ready.
2026-08-02 04:40:18,110 INFO: >> GET /wp-login.php
2026-08-02 04:40:18,111 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:18,121 INFO: GET /wp-login.php
2026-08-02 04:40:18,124 WARNING: GET /wp-login.php -> 404
2026-08-02 04:40:18,133 INFO: << 404 /wp-login.php
2026-08-02 04:40:19,553 INFO: >> GET /wp-json/
2026-08-02 04:40:19,554 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:19,564 INFO: GET /wp-json/
2026-08-02 04:40:19,567 WARNING: GET /wp-json/ -> 404
2026-08-02 04:40:19,576 INFO: << 404 /wp-json/
2026-08-02 04:40:20,783 INFO: >> GET /
2026-08-02 04:40:20,783 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:20,784 INFO: GET /
2026-08-02 04:40:20,785 WARNING: GET / -> 404
2026-08-02 04:40:20,787 INFO: << 404 /
2026-08-02 04:40:21,484 INFO: >> GET /blog/wp-login.php
2026-08-02 04:40:21,485 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:21,495 INFO: GET /blog/wp-login.php
2026-08-02 04:40:21,498 WARNING: GET /blog/wp-login.php -> 404
2026-08-02 04:40:21,507 INFO: << 404 /blog/wp-login.php
2026-08-02 04:40:22,645 INFO: >> GET /blog/wp-json/
2026-08-02 04:40:22,646 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:22,656 INFO: GET /blog/wp-json/
2026-08-02 04:40:22,659 WARNING: GET /blog/wp-json/ -> 404
2026-08-02 04:40:22,667 INFO: << 404 /blog/wp-json/
2026-08-02 04:40:23,477 INFO: >> GET /blog/
2026-08-02 04:40:23,478 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:23,489 INFO: GET /blog/
2026-08-02 04:40:23,492 WARNING: GET /blog/ -> 404
2026-08-02 04:40:23,501 INFO: << 404 /blog/
2026-08-02 04:40:24,427 INFO: >> GET /wordpress/wp-login.php
2026-08-02 04:40:24,427 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:24,428 INFO: GET /wordpress/wp-login.php
2026-08-02 04:40:24,429 WARNING: GET /wordpress/wp-login.php -> 404
2026-08-02 04:40:24,432 INFO: << 404 /wordpress/wp-login.php
2026-08-02 04:40:25,276 INFO: >> GET /wordpress/wp-json/
2026-08-02 04:40:25,276 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:25,277 INFO: GET /wordpress/wp-json/
2026-08-02 04:40:25,278 WARNING: GET /wordpress/wp-json/ -> 404
2026-08-02 04:40:25,281 INFO: << 404 /wordpress/wp-json/
2026-08-02 04:40:26,611 INFO: >> GET /wordpress/
2026-08-02 04:40:26,611 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:26,612 INFO: GET /wordpress/
2026-08-02 04:40:26,613 WARNING: GET /wordpress/ -> 404
2026-08-02 04:40:26,616 INFO: << 404 /wordpress/
2026-08-02 04:40:27,711 INFO: >> GET /wp/wp-login.php
2026-08-02 04:40:27,711 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:27,711 INFO: GET /wp/wp-login.php
2026-08-02 04:40:27,713 WARNING: GET /wp/wp-login.php -> 404
2026-08-02 04:40:27,716 INFO: << 404 /wp/wp-login.php
2026-08-02 04:40:28,326 INFO: >> GET /wp/wp-json/
2026-08-02 04:40:28,326 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:28,327 INFO: GET /wp/wp-json/
2026-08-02 04:40:28,328 WARNING: GET /wp/wp-json/ -> 404
2026-08-02 04:40:28,331 INFO: << 404 /wp/wp-json/
2026-08-02 04:40:29,078 INFO: >> GET /wp/
2026-08-02 04:40:29,079 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:29,090 INFO: GET /wp/
2026-08-02 04:40:29,093 WARNING: GET /wp/ -> 404
2026-08-02 04:40:29,103 INFO: << 404 /wp/
2026-08-02 04:40:29,941 INFO: >> GET /cms/wp-login.php
2026-08-02 04:40:29,941 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:29,942 INFO: GET /cms/wp-login.php
2026-08-02 04:40:29,943 WARNING: GET /cms/wp-login.php -> 404
2026-08-02 04:40:29,946 INFO: << 404 /cms/wp-login.php
2026-08-02 04:40:30,746 INFO: >> GET /cms/wp-json/
2026-08-02 04:40:30,747 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:30,757 INFO: GET /cms/wp-json/
2026-08-02 04:40:30,760 WARNING: GET /cms/wp-json/ -> 404
2026-08-02 04:40:30,769 INFO: << 404 /cms/wp-json/
2026-08-02 04:40:31,852 INFO: >> GET /cms/
2026-08-02 04:40:31,853 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:31,853 INFO: GET /cms/
2026-08-02 04:40:31,854 WARNING: GET /cms/ -> 404
2026-08-02 04:40:31,857 INFO: << 404 /cms/
2026-08-02 04:40:32,632 INFO: >> GET /site/wp-login.php
2026-08-02 04:40:32,633 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:32,658 INFO: GET /site/wp-login.php
2026-08-02 04:40:32,661 WARNING: GET /site/wp-login.php -> 404
2026-08-02 04:40:32,671 INFO: << 404 /site/wp-login.php
2026-08-02 04:40:33,465 INFO: >> GET /site/wp-json/
2026-08-02 04:40:33,465 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:33,466 INFO: GET /site/wp-json/
2026-08-02 04:40:33,467 WARNING: GET /site/wp-json/ -> 404
2026-08-02 04:40:33,470 INFO: << 404 /site/wp-json/
2026-08-02 04:40:34,268 INFO: >> GET /site/
2026-08-02 04:40:34,269 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:34,281 INFO: GET /site/
2026-08-02 04:40:34,284 WARNING: GET /site/ -> 404
2026-08-02 04:40:34,294 INFO: << 404 /site/
2026-08-02 04:40:35,075 INFO: >> GET /main/wp-login.php
2026-08-02 04:40:35,075 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:35,075 INFO: GET /main/wp-login.php
2026-08-02 04:40:35,077 WARNING: GET /main/wp-login.php -> 404
2026-08-02 04:40:35,080 INFO: << 404 /main/wp-login.php
2026-08-02 04:40:35,712 INFO: >> GET /main/wp-json/
2026-08-02 04:40:35,712 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:35,713 INFO: GET /main/wp-json/
2026-08-02 04:40:35,714 WARNING: GET /main/wp-json/ -> 404
2026-08-02 04:40:35,716 INFO: << 404 /main/wp-json/
2026-08-02 04:40:36,433 INFO: >> GET /main/
2026-08-02 04:40:36,435 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:36,445 INFO: GET /main/
2026-08-02 04:40:36,448 WARNING: GET /main/ -> 404
2026-08-02 04:40:36,457 INFO: << 404 /main/
2026-08-02 04:40:37,220 INFO: >> GET /new/wp-login.php
2026-08-02 04:40:37,220 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:37,221 INFO: GET /new/wp-login.php
2026-08-02 04:40:37,222 WARNING: GET /new/wp-login.php -> 404
2026-08-02 04:40:37,225 INFO: << 404 /new/wp-login.php
2026-08-02 04:40:38,158 INFO: >> GET /new/wp-json/
2026-08-02 04:40:38,160 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:38,169 INFO: GET /new/wp-json/
2026-08-02 04:40:38,172 WARNING: GET /new/wp-json/ -> 404
2026-08-02 04:40:38,181 INFO: << 404 /new/wp-json/
2026-08-02 04:40:38,883 INFO: >> GET /new/
2026-08-02 04:40:38,883 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:38,883 INFO: GET /new/
2026-08-02 04:40:38,885 WARNING: GET /new/ -> 404
2026-08-02 04:40:38,887 INFO: << 404 /new/
2026-08-02 04:40:40,461 INFO: >> GET /wp-login.php
2026-08-02 04:40:40,463 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:40,472 INFO: GET /wp-login.php
2026-08-02 04:40:40,476 WARNING: GET /wp-login.php -> 404
2026-08-02 04:40:40,485 INFO: << 404 /wp-login.php
2026-08-02 04:40:41,735 INFO: >> GET /wp-json/
2026-08-02 04:40:41,736 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:41,736 INFO: GET /wp-json/
2026-08-02 04:40:41,737 WARNING: GET /wp-json/ -> 404
2026-08-02 04:40:41,740 INFO: << 404 /wp-json/
2026-08-02 04:40:42,712 INFO: >> GET /
2026-08-02 04:40:42,713 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:42,723 INFO: GET /
2026-08-02 04:40:42,725 WARNING: GET / -> 404
2026-08-02 04:40:42,734 INFO: << 404 /
2026-08-02 04:40:43,966 INFO: >> GET /blog/wp-login.php
2026-08-02 04:40:43,966 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:43,966 INFO: GET /blog/wp-login.php
2026-08-02 04:40:43,968 WARNING: GET /blog/wp-login.php -> 404
2026-08-02 04:40:43,971 INFO: << 404 /blog/wp-login.php
2026-08-02 04:40:45,090 INFO: >> GET /blog/wp-json/
2026-08-02 04:40:45,090 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:45,091 INFO: GET /blog/wp-json/
2026-08-02 04:40:45,092 WARNING: GET /blog/wp-json/ -> 404
2026-08-02 04:40:45,095 INFO: << 404 /blog/wp-json/
2026-08-02 04:40:46,360 INFO: >> GET /blog/
2026-08-02 04:40:46,361 DEBUG: Using selector: EpollSelector
2026-08-02 04:40:46,371 INFO: GET /blog/
2026-08-02 04:40:46,374 WARNING: GET /blog/ -> 404
2026-08-02 04:40:46,382 INFO: << 404 /blog/
2026-08-02 05:22:12,050 INFO: wsgi.py loading...
2026-08-02 05:22:12,050 INFO: Importing app.main...
2026-08-02 05:22:13,768 INFO: app.main imported successfully.
2026-08-02 05:22:13,768 INFO: Running DB init...
2026-08-02 05:22:13,830 INFO: All tables OK.
2026-08-02 05:22:13,968 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 05:22:13,971 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,973 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,976 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,978 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,980 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,983 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 05:22:13,991 INFO: Dip chart data seeded.
2026-08-02 05:22:13,991 INFO: DB init complete.
2026-08-02 05:22:13,991 INFO: wsgi.py ready.
2026-08-02 05:22:13,994 INFO: >> GET /
2026-08-02 05:22:13,995 DEBUG: Using selector: EpollSelector
2026-08-02 05:22:14,005 INFO: GET /
2026-08-02 05:22:14,008 WARNING: GET / -> 404
2026-08-02 05:22:14,016 INFO: << 404 /
2026-08-02 07:43:21,187 INFO: wsgi.py loading...
2026-08-02 07:43:21,187 INFO: Importing app.main...
2026-08-02 07:43:24,519 INFO: app.main imported successfully.
2026-08-02 07:43:24,519 INFO: Running DB init...
2026-08-02 07:43:24,611 INFO: All tables OK.
2026-08-02 07:43:24,779 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 07:43:24,783 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,793 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,808 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,812 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,816 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,821 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 07:43:24,829 INFO: Dip chart data seeded.
2026-08-02 07:43:24,829 INFO: DB init complete.
2026-08-02 07:43:24,829 INFO: wsgi.py ready.
2026-08-02 07:43:24,833 INFO: >> GET /
2026-08-02 07:43:24,835 DEBUG: Using selector: EpollSelector
2026-08-02 07:43:24,846 INFO: GET /
2026-08-02 07:43:24,849 WARNING: GET / -> 404
2026-08-02 07:43:24,860 INFO: << 404 /
2026-08-02 10:25:56,416 INFO: wsgi.py loading...
2026-08-02 10:25:56,416 INFO: Importing app.main...
2026-08-02 10:26:00,114 INFO: app.main imported successfully.
2026-08-02 10:26:00,114 INFO: Running DB init...
2026-08-02 10:26:00,177 INFO: All tables OK.
2026-08-02 10:26:00,313 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 10:26:00,316 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,318 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,321 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,323 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,326 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,329 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 10:26:00,337 INFO: Dip chart data seeded.
2026-08-02 10:26:00,337 INFO: DB init complete.
2026-08-02 10:26:00,337 INFO: wsgi.py ready.
2026-08-02 10:26:00,341 INFO: >> GET /
2026-08-02 10:26:00,342 DEBUG: Using selector: EpollSelector
2026-08-02 10:26:00,353 INFO: GET /
2026-08-02 10:26:00,355 WARNING: GET / -> 404
2026-08-02 10:26:00,364 INFO: << 404 /
2026-08-02 12:16:11,503 INFO: wsgi.py loading...
2026-08-02 12:16:11,503 INFO: Importing app.main...
2026-08-02 12:16:13,409 INFO: app.main imported successfully.
2026-08-02 12:16:13,409 INFO: Running DB init...
2026-08-02 12:16:13,472 INFO: All tables OK.
2026-08-02 12:16:13,611 INFO: Migration OK: allowances ENUM+DAILY
2026-08-02 12:16:13,614 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,616 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,618 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,621 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,624 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,626 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-02 12:16:13,634 INFO: Dip chart data seeded.
2026-08-02 12:16:13,634 INFO: DB init complete.
2026-08-02 12:16:13,634 INFO: wsgi.py ready.
2026-08-02 12:16:13,638 INFO: >> GET /
2026-08-02 12:16:13,639 DEBUG: Using selector: EpollSelector
2026-08-02 12:16:13,649 INFO: GET /
2026-08-02 12:16:13,652 WARNING: GET / -> 404
2026-08-02 12:16:13,661 INFO: << 404 /
2026-08-03 01:46:52,163 INFO: wsgi.py loading...
2026-08-03 01:46:52,164 INFO: Importing app.main...
2026-08-03 01:46:55,971 INFO: app.main imported successfully.
2026-08-03 01:46:55,971 INFO: Running DB init...
2026-08-03 01:46:56,037 INFO: All tables OK.
2026-08-03 01:46:56,175 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 01:46:56,177 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,180 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,182 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,185 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,187 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,190 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 01:46:56,199 INFO: Dip chart data seeded.
2026-08-03 01:46:56,200 INFO: DB init complete.
2026-08-03 01:46:56,200 INFO: wsgi.py ready.
2026-08-03 01:46:56,203 INFO: >> GET /wp-login.php
2026-08-03 01:46:56,204 DEBUG: Using selector: EpollSelector
2026-08-03 01:46:56,215 INFO: GET /wp-login.php
2026-08-03 01:46:56,218 WARNING: GET /wp-login.php -> 404
2026-08-03 01:46:56,228 INFO: << 404 /wp-login.php
2026-08-03 01:46:56,242 INFO: >> GET /wp-login.php
2026-08-03 01:46:56,242 DEBUG: Using selector: EpollSelector
2026-08-03 01:46:56,243 INFO: GET /wp-login.php
2026-08-03 01:46:56,244 WARNING: GET /wp-login.php -> 404
2026-08-03 01:46:56,247 INFO: << 404 /wp-login.php
2026-08-03 01:46:56,258 INFO: >> GET /wp-admin/
2026-08-03 01:46:56,258 DEBUG: Using selector: EpollSelector
2026-08-03 01:46:56,258 INFO: GET /wp-admin/
2026-08-03 01:46:56,260 WARNING: GET /wp-admin/ -> 404
2026-08-03 01:46:56,263 INFO: << 404 /wp-admin/
2026-08-03 02:30:18,718 INFO: wsgi.py loading...
2026-08-03 02:30:18,719 INFO: Importing app.main...
2026-08-03 02:30:20,517 INFO: app.main imported successfully.
2026-08-03 02:30:20,517 INFO: Running DB init...
2026-08-03 02:30:20,584 INFO: All tables OK.
2026-08-03 02:30:20,724 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 02:30:20,727 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,730 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,733 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,735 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,738 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,741 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 02:30:20,749 INFO: Dip chart data seeded.
2026-08-03 02:30:20,749 INFO: DB init complete.
2026-08-03 02:30:20,749 INFO: wsgi.py ready.
2026-08-03 02:30:20,753 INFO: >> GET /
2026-08-03 02:30:20,754 DEBUG: Using selector: EpollSelector
2026-08-03 02:30:20,764 INFO: GET /
2026-08-03 02:30:20,766 WARNING: GET / -> 404
2026-08-03 02:30:20,775 INFO: << 404 /
2026-08-03 04:04:27,738 INFO: wsgi.py loading...
2026-08-03 04:04:27,738 INFO: Importing app.main...
2026-08-03 04:04:29,580 INFO: app.main imported successfully.
2026-08-03 04:04:29,580 INFO: Running DB init...
2026-08-03 04:04:29,645 INFO: All tables OK.
2026-08-03 04:04:29,790 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 04:04:29,793 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,796 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,799 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,801 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,804 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,807 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 04:04:29,814 INFO: Dip chart data seeded.
2026-08-03 04:04:29,814 INFO: DB init complete.
2026-08-03 04:04:29,814 INFO: wsgi.py ready.
2026-08-03 04:04:29,817 INFO: >> GET /
2026-08-03 04:04:29,819 DEBUG: Using selector: EpollSelector
2026-08-03 04:04:29,830 INFO: GET /
2026-08-03 04:04:29,833 WARNING: GET / -> 404
2026-08-03 04:04:29,842 INFO: << 404 /
2026-08-03 05:52:46,843 INFO: wsgi.py loading...
2026-08-03 05:52:46,844 INFO: Importing app.main...
2026-08-03 05:52:49,172 INFO: app.main imported successfully.
2026-08-03 05:52:49,172 INFO: Running DB init...
2026-08-03 05:52:49,237 INFO: All tables OK.
2026-08-03 05:52:49,377 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 05:52:49,380 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,389 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,391 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,394 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,397 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,399 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 05:52:49,408 INFO: Dip chart data seeded.
2026-08-03 05:52:49,408 INFO: DB init complete.
2026-08-03 05:52:49,408 INFO: wsgi.py ready.
2026-08-03 05:52:49,411 INFO: >> GET /v1/metadata
2026-08-03 05:52:49,413 DEBUG: Using selector: EpollSelector
2026-08-03 05:52:49,424 INFO: GET /v1/metadata
2026-08-03 05:52:49,427 WARNING: GET /v1/metadata -> 404
2026-08-03 05:52:49,436 INFO: << 404 /v1/metadata
2026-08-03 10:28:50,299 INFO: wsgi.py loading...
2026-08-03 10:28:50,299 INFO: Importing app.main...
2026-08-03 10:28:54,202 INFO: app.main imported successfully.
2026-08-03 10:28:54,202 INFO: Running DB init...
2026-08-03 10:28:54,268 INFO: All tables OK.
2026-08-03 10:28:54,422 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 10:28:54,425 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,427 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,430 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,439 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,442 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,445 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 10:28:54,453 INFO: Dip chart data seeded.
2026-08-03 10:28:54,453 INFO: DB init complete.
2026-08-03 10:28:54,453 INFO: wsgi.py ready.
2026-08-03 10:28:54,457 INFO: >> GET /
2026-08-03 10:28:54,458 DEBUG: Using selector: EpollSelector
2026-08-03 10:28:54,460 INFO: >> GET /
2026-08-03 10:28:54,461 DEBUG: Using selector: EpollSelector
2026-08-03 10:28:54,469 INFO: GET /
2026-08-03 10:28:54,471 INFO: GET /
2026-08-03 10:28:54,472 WARNING: GET / -> 404
2026-08-03 10:28:54,474 WARNING: GET / -> 404
2026-08-03 10:28:54,481 INFO: << 404 /
2026-08-03 10:28:54,483 INFO: << 404 /
2026-08-03 15:27:16,380 INFO: wsgi.py loading...
2026-08-03 15:27:16,380 INFO: Importing app.main...
2026-08-03 15:27:19,755 INFO: app.main imported successfully.
2026-08-03 15:27:19,755 INFO: Running DB init...
2026-08-03 15:27:19,819 INFO: All tables OK.
2026-08-03 15:27:19,955 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 15:27:19,958 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,961 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,964 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,967 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,969 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,972 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 15:27:19,981 INFO: Dip chart data seeded.
2026-08-03 15:27:19,981 INFO: DB init complete.
2026-08-03 15:27:19,981 INFO: wsgi.py ready.
2026-08-03 15:27:19,984 INFO: >> GET /
2026-08-03 15:27:19,985 DEBUG: Using selector: EpollSelector
2026-08-03 15:27:19,995 INFO: GET /
2026-08-03 15:27:19,998 WARNING: GET / -> 404
2026-08-03 15:27:20,007 INFO: << 404 /
2026-08-03 16:46:45,608 INFO: wsgi.py loading...
2026-08-03 16:46:45,608 INFO: Importing app.main...
2026-08-03 16:46:47,395 INFO: app.main imported successfully.
2026-08-03 16:46:47,396 INFO: Running DB init...
2026-08-03 16:46:47,461 INFO: All tables OK.
2026-08-03 16:46:47,602 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 16:46:47,605 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,607 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,610 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,613 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,615 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,618 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 16:46:47,626 INFO: Dip chart data seeded.
2026-08-03 16:46:47,626 INFO: DB init complete.
2026-08-03 16:46:47,626 INFO: wsgi.py ready.
2026-08-03 16:46:47,630 INFO: >> GET /
2026-08-03 16:46:47,631 DEBUG: Using selector: EpollSelector
2026-08-03 16:46:47,641 INFO: GET /
2026-08-03 16:46:47,644 WARNING: GET / -> 404
2026-08-03 16:46:47,653 INFO: << 404 /
2026-08-03 20:03:32,830 INFO: wsgi.py loading...
2026-08-03 20:03:32,831 INFO: Importing app.main...
2026-08-03 20:03:34,605 INFO: app.main imported successfully.
2026-08-03 20:03:34,605 INFO: Running DB init...
2026-08-03 20:03:34,667 INFO: All tables OK.
2026-08-03 20:03:34,797 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 20:03:34,800 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,802 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,805 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,807 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,810 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,813 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 20:03:34,821 INFO: Dip chart data seeded.
2026-08-03 20:03:34,822 INFO: DB init complete.
2026-08-03 20:03:34,822 INFO: wsgi.py ready.
2026-08-03 20:03:34,825 INFO: >> GET /
2026-08-03 20:03:34,826 DEBUG: Using selector: EpollSelector
2026-08-03 20:03:34,836 INFO: GET /
2026-08-03 20:03:34,839 WARNING: GET / -> 404
2026-08-03 20:03:34,847 INFO: << 404 /
2026-08-03 21:25:25,086 INFO: wsgi.py loading...
2026-08-03 21:25:25,086 INFO: Importing app.main...
2026-08-03 21:25:27,682 INFO: app.main imported successfully.
2026-08-03 21:25:27,683 INFO: Running DB init...
2026-08-03 21:25:27,749 INFO: All tables OK.
2026-08-03 21:25:27,901 INFO: Migration OK: allowances ENUM+DAILY
2026-08-03 21:25:27,904 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,907 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,910 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,913 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,916 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,919 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-03 21:25:27,926 INFO: Dip chart data seeded.
2026-08-03 21:25:27,927 INFO: DB init complete.
2026-08-03 21:25:27,927 INFO: wsgi.py ready.
2026-08-03 21:25:27,930 INFO: >> GET /
2026-08-03 21:25:27,932 DEBUG: Using selector: EpollSelector
2026-08-03 21:25:27,943 INFO: GET /
2026-08-03 21:25:27,946 WARNING: GET / -> 404
2026-08-03 21:25:27,956 INFO: << 404 /
2026-08-04 03:45:22,528 INFO: wsgi.py loading...
2026-08-04 03:45:22,528 INFO: Importing app.main...
2026-08-04 03:45:24,622 INFO: app.main imported successfully.
2026-08-04 03:45:24,622 INFO: Running DB init...
2026-08-04 03:45:24,686 INFO: All tables OK.
2026-08-04 03:45:24,826 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 03:45:24,828 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,831 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,834 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,837 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,839 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,842 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 03:45:24,850 INFO: Dip chart data seeded.
2026-08-04 03:45:24,850 INFO: DB init complete.
2026-08-04 03:45:24,850 INFO: wsgi.py ready.
2026-08-04 03:45:24,853 INFO: >> GET /
2026-08-04 03:45:24,855 DEBUG: Using selector: EpollSelector
2026-08-04 03:45:24,866 INFO: GET /
2026-08-04 03:45:24,868 WARNING: GET / -> 404
2026-08-04 03:45:24,879 INFO: << 404 /
2026-08-04 04:14:43,741 INFO: wsgi.py loading...
2026-08-04 04:14:43,741 INFO: Importing app.main...
2026-08-04 04:14:45,488 INFO: app.main imported successfully.
2026-08-04 04:14:45,488 INFO: Running DB init...
2026-08-04 04:14:45,552 INFO: All tables OK.
2026-08-04 04:14:45,690 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 04:14:45,694 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,697 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,699 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,702 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,705 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,707 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 04:14:45,715 INFO: Dip chart data seeded.
2026-08-04 04:14:45,716 INFO: DB init complete.
2026-08-04 04:14:45,716 INFO: wsgi.py ready.
2026-08-04 04:14:45,718 INFO: >> GET /
2026-08-04 04:14:45,720 DEBUG: Using selector: EpollSelector
2026-08-04 04:14:45,729 INFO: GET /
2026-08-04 04:14:45,732 WARNING: GET / -> 404
2026-08-04 04:14:45,741 INFO: << 404 /
2026-08-04 09:11:34,858 INFO: wsgi.py loading...
2026-08-04 09:11:34,859 INFO: Importing app.main...
2026-08-04 09:11:38,441 INFO: app.main imported successfully.
2026-08-04 09:11:38,441 INFO: Running DB init...
2026-08-04 09:11:38,503 INFO: All tables OK.
2026-08-04 09:11:38,640 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 09:11:38,642 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,645 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,647 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,650 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,652 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,655 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 09:11:38,664 INFO: Dip chart data seeded.
2026-08-04 09:11:38,664 INFO: DB init complete.
2026-08-04 09:11:38,664 INFO: wsgi.py ready.
2026-08-04 09:11:38,667 INFO: >> GET //wp-includes/ID3/license.txt
2026-08-04 09:11:38,669 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:38,679 INFO: GET //wp-includes/ID3/license.txt
2026-08-04 09:11:38,682 WARNING: GET //wp-includes/ID3/license.txt -> 404
2026-08-04 09:11:38,691 INFO: << 404 //wp-includes/ID3/license.txt
2026-08-04 09:11:38,942 INFO: >> GET //feed/
2026-08-04 09:11:38,942 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:38,942 INFO: GET //feed/
2026-08-04 09:11:38,944 WARNING: GET //feed/ -> 404
2026-08-04 09:11:38,947 INFO: << 404 //feed/
2026-08-04 09:11:39,172 INFO: >> GET //xmlrpc.php
2026-08-04 09:11:39,172 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:39,173 INFO: GET //xmlrpc.php
2026-08-04 09:11:39,174 WARNING: GET //xmlrpc.php -> 404
2026-08-04 09:11:39,177 INFO: << 404 //xmlrpc.php
2026-08-04 09:11:39,507 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 09:11:39,507 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:39,507 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 09:11:39,509 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:39,511 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-04 09:11:39,829 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-04 09:11:39,829 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:39,829 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-04 09:11:39,831 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:39,833 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,047 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,047 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:40,047 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,049 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:40,051 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,383 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,384 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:40,384 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,385 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:40,387 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,601 INFO: >> GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,601 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:40,601 INFO: GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,603 WARNING: GET //2020/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:40,605 INFO: << 404 //2020/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,819 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,819 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:40,820 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 09:11:40,821 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:40,824 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,054 INFO: >> GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,054 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:41,054 INFO: GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,056 WARNING: GET //2021/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:41,058 INFO: << 404 //2021/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,333 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,333 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:41,333 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,334 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:41,336 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,582 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,582 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:41,583 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,584 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:41,587 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,833 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,834 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:41,834 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-04 09:11:41,835 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:41,838 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,051 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,051 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:42,052 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,053 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:42,056 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,340 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,340 DEBUG: Using selector: EpollSelector
2026-08-04 09:11:42,341 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 09:11:42,342 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-04 09:11:42,344 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-04 15:38:40,682 INFO: wsgi.py loading...
2026-08-04 15:38:40,683 INFO: Importing app.main...
2026-08-04 15:38:44,524 INFO: app.main imported successfully.
2026-08-04 15:38:44,524 INFO: Running DB init...
2026-08-04 15:38:44,592 INFO: All tables OK.
2026-08-04 15:38:44,736 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 15:38:44,739 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,742 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,744 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,747 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,750 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,752 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 15:38:44,761 INFO: Dip chart data seeded.
2026-08-04 15:38:44,761 INFO: DB init complete.
2026-08-04 15:38:44,762 INFO: wsgi.py ready.
2026-08-04 15:38:44,765 INFO: >> GET /
2026-08-04 15:38:44,766 DEBUG: Using selector: EpollSelector
2026-08-04 15:38:44,767 INFO: >> GET /
2026-08-04 15:38:44,769 DEBUG: Using selector: EpollSelector
2026-08-04 15:38:44,777 INFO: GET /
2026-08-04 15:38:44,779 WARNING: GET / -> 404
2026-08-04 15:38:44,780 INFO: GET /
2026-08-04 15:38:44,783 WARNING: GET / -> 404
2026-08-04 15:38:44,789 INFO: << 404 /
2026-08-04 15:38:44,792 INFO: << 404 /
2026-08-04 16:21:05,080 INFO: wsgi.py loading...
2026-08-04 16:21:05,080 INFO: Importing app.main...
2026-08-04 16:21:06,840 INFO: app.main imported successfully.
2026-08-04 16:21:06,840 INFO: Running DB init...
2026-08-04 16:21:06,908 INFO: All tables OK.
2026-08-04 16:21:07,048 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 16:21:07,051 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,054 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,056 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,059 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,062 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,064 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:21:07,073 INFO: Dip chart data seeded.
2026-08-04 16:21:07,073 INFO: DB init complete.
2026-08-04 16:21:07,073 INFO: wsgi.py ready.
2026-08-04 16:21:07,077 INFO: >> GET //wp-includes/ID3/license.txt
2026-08-04 16:21:07,078 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:07,089 INFO: GET //wp-includes/ID3/license.txt
2026-08-04 16:21:07,092 WARNING: GET //wp-includes/ID3/license.txt -> 404
2026-08-04 16:21:07,102 INFO: << 404 //wp-includes/ID3/license.txt
2026-08-04 16:21:07,337 INFO: >> GET //feed/
2026-08-04 16:21:07,337 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:07,338 INFO: GET //feed/
2026-08-04 16:21:07,339 WARNING: GET //feed/ -> 404
2026-08-04 16:21:07,342 INFO: << 404 //feed/
2026-08-04 16:21:07,578 INFO: >> GET //xmlrpc.php
2026-08-04 16:21:07,578 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:07,578 INFO: GET //xmlrpc.php
2026-08-04 16:21:07,580 WARNING: GET //xmlrpc.php -> 404
2026-08-04 16:21:07,582 INFO: << 404 //xmlrpc.php
2026-08-04 16:21:07,817 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:21:07,818 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:07,818 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:21:07,820 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:07,822 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,057 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,057 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:08,058 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,059 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:08,062 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,335 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,335 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:08,335 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,337 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:08,339 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,615 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,615 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:08,615 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,617 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:08,620 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,941 INFO: >> GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,941 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:08,941 INFO: GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 16:21:08,943 WARNING: GET //2020/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:08,946 INFO: << 404 //2020/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,321 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,321 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:09,321 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,322 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:09,325 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,633 INFO: >> GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,633 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:09,634 INFO: GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 16:21:09,635 WARNING: GET //2021/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:09,637 INFO: << 404 //2021/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,559 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,559 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:10,559 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,561 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:10,563 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,899 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,899 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:10,900 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:21:10,901 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:10,905 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,408 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,408 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:11,409 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,410 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:11,413 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,686 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,686 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:11,687 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,688 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:11,691 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,988 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,988 DEBUG: Using selector: EpollSelector
2026-08-04 16:21:11,989 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:21:11,990 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:21:11,992 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:42:25,938 INFO: wsgi.py loading...
2026-08-04 16:42:25,938 INFO: Importing app.main...
2026-08-04 16:42:27,735 INFO: app.main imported successfully.
2026-08-04 16:42:27,735 INFO: Running DB init...
2026-08-04 16:42:27,808 INFO: All tables OK.
2026-08-04 16:42:27,958 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 16:42:27,961 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,964 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,967 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,970 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,973 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,976 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 16:42:27,984 INFO: Dip chart data seeded.
2026-08-04 16:42:27,984 INFO: DB init complete.
2026-08-04 16:42:27,984 INFO: wsgi.py ready.
2026-08-04 16:42:27,988 INFO: >> GET /
2026-08-04 16:42:27,990 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,000 INFO: GET /
2026-08-04 16:42:28,002 WARNING: GET / -> 404
2026-08-04 16:42:28,012 INFO: << 404 /
2026-08-04 16:42:28,189 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,189 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,189 INFO: GET //wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,191 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:28,195 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,371 INFO: >> GET //xmlrpc.php
2026-08-04 16:42:28,371 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,372 INFO: GET //xmlrpc.php
2026-08-04 16:42:28,373 WARNING: GET //xmlrpc.php -> 404
2026-08-04 16:42:28,377 INFO: << 404 //xmlrpc.php
2026-08-04 16:42:28,554 INFO: >> GET /
2026-08-04 16:42:28,554 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,554 INFO: GET /
2026-08-04 16:42:28,555 WARNING: GET / -> 404
2026-08-04 16:42:28,558 INFO: << 404 /
2026-08-04 16:42:28,735 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,735 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,736 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,737 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:28,739 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,916 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,916 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:28,916 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-04 16:42:28,918 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:28,920 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,097 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,097 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:29,097 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,099 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:29,102 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,279 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,279 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:29,279 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,281 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:29,283 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,459 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,460 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:29,460 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,461 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:29,464 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,663 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,663 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:29,663 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,664 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:29,667 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,843 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,843 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:29,844 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-08-04 16:42:29,845 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:29,847 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,024 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,024 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,024 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,026 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,028 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,204 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,205 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,205 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,206 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,209 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,385 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,385 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,386 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,387 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,389 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,565 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,566 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,566 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,567 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,570 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,746 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,746 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,747 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,748 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,751 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,927 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,927 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:30,928 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-08-04 16:42:30,929 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:30,931 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,107 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,107 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:31,108 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,109 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:31,112 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,288 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,288 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:31,288 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,290 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:31,292 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,469 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,469 DEBUG: Using selector: EpollSelector
2026-08-04 16:42:31,469 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-08-04 16:42:31,471 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-08-04 16:42:31,473 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-08-04 18:19:10,281 INFO: wsgi.py loading...
2026-08-04 18:19:10,282 INFO: Importing app.main...
2026-08-04 18:19:12,136 INFO: app.main imported successfully.
2026-08-04 18:19:12,136 INFO: Running DB init...
2026-08-04 18:19:12,200 INFO: All tables OK.
2026-08-04 18:19:12,337 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 18:19:12,339 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,342 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,344 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,347 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,349 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,352 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 18:19:12,360 INFO: Dip chart data seeded.
2026-08-04 18:19:12,360 INFO: DB init complete.
2026-08-04 18:19:12,360 INFO: wsgi.py ready.
2026-08-04 18:19:12,364 INFO: >> GET /phpinfo
2026-08-04 18:19:12,365 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:12,375 INFO: GET /phpinfo
2026-08-04 18:19:12,378 WARNING: GET /phpinfo -> 404
2026-08-04 18:19:12,387 INFO: << 404 /phpinfo
2026-08-04 18:19:13,693 INFO: >> GET /phpinfo.php
2026-08-04 18:19:13,693 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:13,693 INFO: GET /phpinfo.php
2026-08-04 18:19:13,695 WARNING: GET /phpinfo.php -> 404
2026-08-04 18:19:13,698 INFO: << 404 /phpinfo.php
2026-08-04 18:19:14,963 INFO: >> GET /test.php
2026-08-04 18:19:14,964 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:14,964 INFO: GET /test.php
2026-08-04 18:19:14,965 WARNING: GET /test.php -> 404
2026-08-04 18:19:14,968 INFO: << 404 /test.php
2026-08-04 18:19:15,671 INFO: >> GET /_profiler/phpinfo
2026-08-04 18:19:15,672 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:15,673 INFO: GET /_profiler/phpinfo
2026-08-04 18:19:15,675 WARNING: GET /_profiler/phpinfo -> 404
2026-08-04 18:19:15,678 INFO: << 404 /_profiler/phpinfo
2026-08-04 18:19:16,321 INFO: >> GET /info.php
2026-08-04 18:19:16,321 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:16,321 INFO: GET /info.php
2026-08-04 18:19:16,323 WARNING: GET /info.php -> 404
2026-08-04 18:19:16,326 INFO: << 404 /info.php
2026-08-04 18:19:17,440 INFO: >> GET /php.php
2026-08-04 18:19:17,440 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:17,441 INFO: GET /php.php
2026-08-04 18:19:17,442 WARNING: GET /php.php -> 404
2026-08-04 18:19:17,444 INFO: << 404 /php.php
2026-08-04 18:19:18,800 INFO: >> GET /php_info.php
2026-08-04 18:19:18,800 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:18,800 INFO: GET /php_info.php
2026-08-04 18:19:18,801 WARNING: GET /php_info.php -> 404
2026-08-04 18:19:18,804 INFO: << 404 /php_info.php
2026-08-04 18:19:19,975 INFO: >> GET /i.php
2026-08-04 18:19:19,976 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:19,976 INFO: GET /i.php
2026-08-04 18:19:19,978 WARNING: GET /i.php -> 404
2026-08-04 18:19:19,980 INFO: << 404 /i.php
2026-08-04 18:19:21,037 INFO: >> GET /pi.php
2026-08-04 18:19:21,037 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:21,038 INFO: GET /pi.php
2026-08-04 18:19:21,039 WARNING: GET /pi.php -> 404
2026-08-04 18:19:21,042 INFO: << 404 /pi.php
2026-08-04 18:19:21,985 INFO: >> GET /
2026-08-04 18:19:21,985 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:21,986 INFO: GET /
2026-08-04 18:19:21,987 WARNING: GET / -> 404
2026-08-04 18:19:21,989 INFO: << 404 /
2026-08-04 18:19:22,797 INFO: >> GET /admin/phpinfo.php
2026-08-04 18:19:22,797 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:22,798 INFO: GET /admin/phpinfo.php
2026-08-04 18:19:22,799 WARNING: GET /admin/phpinfo.php -> 404
2026-08-04 18:19:22,801 INFO: << 404 /admin/phpinfo.php
2026-08-04 18:19:23,634 INFO: >> GET /pinfo.php
2026-08-04 18:19:23,634 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:23,634 INFO: GET /pinfo.php
2026-08-04 18:19:23,636 WARNING: GET /pinfo.php -> 404
2026-08-04 18:19:23,638 INFO: << 404 /pinfo.php
2026-08-04 18:19:24,498 INFO: >> GET /php_version.php
2026-08-04 18:19:24,498 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:24,499 INFO: GET /php_version.php
2026-08-04 18:19:24,500 WARNING: GET /php_version.php -> 404
2026-08-04 18:19:24,503 INFO: << 404 /php_version.php
2026-08-04 18:19:25,563 INFO: >> GET /.aws/credentials
2026-08-04 18:19:25,563 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:25,563 INFO: GET /.aws/credentials
2026-08-04 18:19:25,565 WARNING: GET /.aws/credentials -> 404
2026-08-04 18:19:25,568 INFO: << 404 /.aws/credentials
2026-08-04 18:19:27,265 INFO: >> GET /.env.example
2026-08-04 18:19:27,265 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:27,266 INFO: GET /.env.example
2026-08-04 18:19:27,267 WARNING: GET /.env.example -> 404
2026-08-04 18:19:27,269 INFO: << 404 /.env.example
2026-08-04 18:19:28,102 INFO: >> GET /.env.local
2026-08-04 18:19:28,102 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:28,103 INFO: GET /.env.local
2026-08-04 18:19:28,104 WARNING: GET /.env.local -> 404
2026-08-04 18:19:28,106 INFO: << 404 /.env.local
2026-08-04 18:19:28,885 INFO: >> GET /.env.backup
2026-08-04 18:19:28,885 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:28,886 INFO: GET /.env.backup
2026-08-04 18:19:28,887 WARNING: GET /.env.backup -> 404
2026-08-04 18:19:28,889 INFO: << 404 /.env.backup
2026-08-04 18:19:29,717 INFO: >> GET /config/.env
2026-08-04 18:19:29,717 DEBUG: Using selector: EpollSelector
2026-08-04 18:19:29,718 INFO: GET /config/.env
2026-08-04 18:19:29,719 WARNING: GET /config/.env -> 404
2026-08-04 18:19:29,721 INFO: << 404 /config/.env
2026-08-04 19:16:47,390 INFO: wsgi.py loading...
2026-08-04 19:16:47,390 INFO: Importing app.main...
2026-08-04 19:16:50,267 INFO: app.main imported successfully.
2026-08-04 19:16:50,267 INFO: Running DB init...
2026-08-04 19:16:50,411 INFO: All tables OK.
2026-08-04 19:16:50,644 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 19:16:50,669 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:50,725 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:50,807 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:50,894 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:51,058 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:51,156 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:16:51,168 INFO: Dip chart data seeded.
2026-08-04 19:16:51,168 INFO: DB init complete.
2026-08-04 19:16:51,168 INFO: wsgi.py ready.
2026-08-04 19:16:51,180 INFO: >> GET /
2026-08-04 19:16:51,182 DEBUG: Using selector: EpollSelector
2026-08-04 19:16:51,204 INFO: GET /
2026-08-04 19:16:51,207 WARNING: GET / -> 404
2026-08-04 19:16:51,245 INFO: << 404 /
2026-08-04 19:36:58,786 INFO: wsgi.py loading...
2026-08-04 19:36:58,786 INFO: Importing app.main...
2026-08-04 19:37:00,629 INFO: app.main imported successfully.
2026-08-04 19:37:00,629 INFO: Running DB init...
2026-08-04 19:37:00,692 INFO: All tables OK.
2026-08-04 19:37:00,829 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 19:37:00,831 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,834 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,836 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,839 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,841 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,844 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:37:00,852 INFO: Dip chart data seeded.
2026-08-04 19:37:00,852 INFO: DB init complete.
2026-08-04 19:37:00,852 INFO: wsgi.py ready.
2026-08-04 19:37:00,856 INFO: >> GET /
2026-08-04 19:37:00,857 DEBUG: Using selector: EpollSelector
2026-08-04 19:37:00,867 INFO: GET /
2026-08-04 19:37:00,869 WARNING: GET / -> 404
2026-08-04 19:37:00,878 INFO: << 404 /
2026-08-04 19:54:44,027 INFO: wsgi.py loading...
2026-08-04 19:54:44,027 INFO: Importing app.main...
2026-08-04 19:54:45,814 INFO: app.main imported successfully.
2026-08-04 19:54:45,814 INFO: Running DB init...
2026-08-04 19:54:45,875 INFO: All tables OK.
2026-08-04 19:54:46,010 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 19:54:46,013 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,015 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,018 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,020 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,023 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,026 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 19:54:46,034 INFO: Dip chart data seeded.
2026-08-04 19:54:46,034 INFO: DB init complete.
2026-08-04 19:54:46,034 INFO: wsgi.py ready.
2026-08-04 19:54:46,038 INFO: >> GET /
2026-08-04 19:54:46,040 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,050 INFO: GET /
2026-08-04 19:54:46,052 WARNING: GET / -> 404
2026-08-04 19:54:46,062 INFO: << 404 /
2026-08-04 19:54:46,240 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,241 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,241 INFO: GET //wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,242 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:46,245 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,423 INFO: >> GET //xmlrpc.php
2026-08-04 19:54:46,423 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,424 INFO: GET //xmlrpc.php
2026-08-04 19:54:46,425 WARNING: GET //xmlrpc.php -> 404
2026-08-04 19:54:46,428 INFO: << 404 //xmlrpc.php
2026-08-04 19:54:46,606 INFO: >> GET /
2026-08-04 19:54:46,606 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,606 INFO: GET /
2026-08-04 19:54:46,607 WARNING: GET / -> 404
2026-08-04 19:54:46,610 INFO: << 404 /
2026-08-04 19:54:46,787 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,787 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,788 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,789 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:46,791 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,969 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,969 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:46,970 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-04 19:54:46,971 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:46,973 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,151 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,151 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:47,151 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,153 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:47,156 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,333 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,333 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:47,334 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,335 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:47,338 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,515 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,515 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:47,516 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,517 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:47,520 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,698 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,698 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:47,698 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,700 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:47,702 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,881 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,881 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:47,882 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-08-04 19:54:47,883 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:47,885 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,063 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,063 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,064 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,065 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,067 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,245 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,245 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,246 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,247 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,250 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,427 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,427 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,428 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,429 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,432 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,610 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,610 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,610 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,611 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,613 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,792 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,792 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,793 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,794 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,797 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,974 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,975 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:48,975 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-08-04 19:54:48,976 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:48,979 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,157 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,157 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:49,157 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,159 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:49,161 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,339 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,340 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:49,340 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,341 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:49,344 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,522 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,522 DEBUG: Using selector: EpollSelector
2026-08-04 19:54:49,522 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-08-04 19:54:49,524 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-08-04 19:54:49,526 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-08-04 23:05:33,689 INFO: wsgi.py loading...
2026-08-04 23:05:33,690 INFO: Importing app.main...
2026-08-04 23:05:37,312 INFO: app.main imported successfully.
2026-08-04 23:05:37,313 INFO: Running DB init...
2026-08-04 23:05:37,377 INFO: All tables OK.
2026-08-04 23:05:37,518 INFO: Migration OK: allowances ENUM+DAILY
2026-08-04 23:05:37,521 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,523 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,526 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,528 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,531 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,534 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-04 23:05:37,542 INFO: Dip chart data seeded.
2026-08-04 23:05:37,542 INFO: DB init complete.
2026-08-04 23:05:37,542 INFO: wsgi.py ready.
2026-08-04 23:05:37,545 INFO: >> GET //wp-includes/ID3/license.txt
2026-08-04 23:05:37,547 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:37,557 INFO: GET //wp-includes/ID3/license.txt
2026-08-04 23:05:37,560 WARNING: GET //wp-includes/ID3/license.txt -> 404
2026-08-04 23:05:37,569 INFO: << 404 //wp-includes/ID3/license.txt
2026-08-04 23:05:37,730 INFO: >> GET //feed/
2026-08-04 23:05:37,731 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:37,731 INFO: GET //feed/
2026-08-04 23:05:37,732 WARNING: GET //feed/ -> 404
2026-08-04 23:05:37,735 INFO: << 404 //feed/
2026-08-04 23:05:37,895 INFO: >> GET //xmlrpc.php
2026-08-04 23:05:37,896 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:37,896 INFO: GET //xmlrpc.php
2026-08-04 23:05:37,897 WARNING: GET //xmlrpc.php -> 404
2026-08-04 23:05:37,900 INFO: << 404 //xmlrpc.php
2026-08-04 23:05:38,062 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,062 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,063 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,064 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,067 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,228 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,228 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,228 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,230 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,232 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,423 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,423 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,424 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,425 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,428 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,621 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,621 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,621 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,623 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,625 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,786 INFO: >> GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,786 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,787 INFO: GET //2020/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,788 WARNING: GET //2020/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,791 INFO: << 404 //2020/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,967 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,967 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:38,967 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-04 23:05:38,969 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:38,971 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,161 INFO: >> GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,161 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:39,161 INFO: GET //2021/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,163 WARNING: GET //2021/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:39,166 INFO: << 404 //2021/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,326 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,327 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:39,327 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,328 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:39,331 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,520 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,520 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:39,521 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,522 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:39,524 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,692 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,692 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:39,692 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,693 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:39,695 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,856 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,856 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:39,857 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-04 23:05:39,858 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:39,860 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-04 23:05:40,021 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 23:05:40,021 DEBUG: Using selector: EpollSelector
2026-08-04 23:05:40,021 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-04 23:05:40,023 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-04 23:05:40,025 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-05 00:06:54,565 INFO: wsgi.py loading...
2026-08-05 00:06:54,565 INFO: Importing app.main...
2026-08-05 00:06:56,372 INFO: app.main imported successfully.
2026-08-05 00:06:56,372 INFO: Running DB init...
2026-08-05 00:06:56,438 INFO: All tables OK.
2026-08-05 00:06:56,576 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 00:06:56,579 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,581 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,583 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,586 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,589 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,591 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:06:56,599 INFO: Dip chart data seeded.
2026-08-05 00:06:56,600 INFO: DB init complete.
2026-08-05 00:06:56,600 INFO: wsgi.py ready.
2026-08-05 00:06:56,603 INFO: >> GET /
2026-08-05 00:06:56,604 DEBUG: Using selector: EpollSelector
2026-08-05 00:06:56,614 INFO: GET /
2026-08-05 00:06:56,617 WARNING: GET / -> 404
2026-08-05 00:06:56,626 INFO: << 404 /
2026-08-05 00:46:38,354 INFO: wsgi.py loading...
2026-08-05 00:46:38,354 INFO: Importing app.main...
2026-08-05 00:46:40,148 INFO: app.main imported successfully.
2026-08-05 00:46:40,148 INFO: Running DB init...
2026-08-05 00:46:40,213 INFO: All tables OK.
2026-08-05 00:46:40,350 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 00:46:40,353 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,356 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,358 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,361 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,363 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,366 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 00:46:40,374 INFO: Dip chart data seeded.
2026-08-05 00:46:40,374 INFO: DB init complete.
2026-08-05 00:46:40,374 INFO: wsgi.py ready.
2026-08-05 00:46:40,378 INFO: >> GET /
2026-08-05 00:46:40,379 DEBUG: Using selector: EpollSelector
2026-08-05 00:46:40,389 INFO: GET /
2026-08-05 00:46:40,391 WARNING: GET / -> 404
2026-08-05 00:46:40,400 INFO: << 404 /
2026-08-05 03:18:12,844 INFO: wsgi.py loading...
2026-08-05 03:18:12,845 INFO: Importing app.main...
2026-08-05 03:18:14,628 INFO: app.main imported successfully.
2026-08-05 03:18:14,628 INFO: Running DB init...
2026-08-05 03:18:14,691 INFO: All tables OK.
2026-08-05 03:18:14,827 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 03:18:14,830 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,832 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,841 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,843 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,846 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,849 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 03:18:14,857 INFO: Dip chart data seeded.
2026-08-05 03:18:14,857 INFO: DB init complete.
2026-08-05 03:18:14,857 INFO: wsgi.py ready.
2026-08-05 03:18:14,861 INFO: >> GET /
2026-08-05 03:18:14,862 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:14,872 INFO: GET /
2026-08-05 03:18:14,875 WARNING: GET / -> 404
2026-08-05 03:18:14,884 INFO: << 404 /
2026-08-05 03:18:16,075 INFO: >> GET /console/
2026-08-05 03:18:16,076 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:16,087 INFO: GET /console/
2026-08-05 03:18:16,090 WARNING: GET /console/ -> 404
2026-08-05 03:18:16,099 INFO: << 404 /console/
2026-08-05 03:18:16,987 INFO: >> GET /
2026-08-05 03:18:16,987 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:16,988 INFO: GET /
2026-08-05 03:18:16,989 WARNING: GET / -> 404
2026-08-05 03:18:16,992 INFO: << 404 /
2026-08-05 03:18:17,182 INFO: >> GET /server
2026-08-05 03:18:17,182 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:17,183 INFO: GET /server
2026-08-05 03:18:17,184 WARNING: GET /server -> 404
2026-08-05 03:18:17,187 INFO: << 404 /server
2026-08-05 03:18:18,224 INFO: >> GET /console/
2026-08-05 03:18:18,225 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:18,235 INFO: GET /console/
2026-08-05 03:18:18,238 WARNING: GET /console/ -> 404
2026-08-05 03:18:18,246 INFO: << 404 /console/
2026-08-05 03:18:18,364 INFO: >> GET /server-status
2026-08-05 03:18:18,365 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:18,365 INFO: GET /server-status
2026-08-05 03:18:18,366 WARNING: GET /server-status -> 404
2026-08-05 03:18:18,369 INFO: << 404 /server-status
2026-08-05 03:18:19,116 INFO: >> GET /server
2026-08-05 03:18:19,118 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:19,128 INFO: GET /server
2026-08-05 03:18:19,131 WARNING: GET /server -> 404
2026-08-05 03:18:19,141 INFO: << 404 /server
2026-08-05 03:18:19,870 INFO: >> GET /server-status
2026-08-05 03:18:19,871 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:19,881 INFO: GET /server-status
2026-08-05 03:18:19,884 WARNING: GET /server-status -> 404
2026-08-05 03:18:19,893 INFO: << 404 /server-status
2026-08-05 03:18:20,305 INFO: >> GET /about
2026-08-05 03:18:20,305 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:20,306 INFO: GET /about
2026-08-05 03:18:20,307 WARNING: GET /about -> 404
2026-08-05 03:18:20,310 INFO: << 404 /about
2026-08-05 03:18:21,496 INFO: >> GET /login.action
2026-08-05 03:18:21,496 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:21,496 INFO: GET /login.action
2026-08-05 03:18:21,498 WARNING: GET /login.action -> 404
2026-08-05 03:18:21,500 INFO: << 404 /login.action
2026-08-05 03:18:22,011 INFO: >> GET /about
2026-08-05 03:18:22,011 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:22,011 INFO: GET /about
2026-08-05 03:18:22,013 WARNING: GET /about -> 404
2026-08-05 03:18:22,015 INFO: << 404 /about
2026-08-05 03:18:22,862 INFO: >> GET /
2026-08-05 03:18:22,863 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:22,873 INFO: GET /
2026-08-05 03:18:22,875 WARNING: GET / -> 404
2026-08-05 03:18:22,884 INFO: << 404 /
2026-08-05 03:18:23,242 INFO: >> GET /login.action
2026-08-05 03:18:23,243 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:23,254 INFO: GET /login.action
2026-08-05 03:18:23,257 WARNING: GET /login.action -> 404
2026-08-05 03:18:23,266 INFO: << 404 /login.action
2026-08-05 03:18:23,981 INFO: >> GET /___proxy_subdomain_whm/login
2026-08-05 03:18:23,982 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:23,992 INFO: GET /___proxy_subdomain_whm/login
2026-08-05 03:18:23,995 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-08-05 03:18:24,005 INFO: << 404 /___proxy_subdomain_whm/login
2026-08-05 03:18:24,096 INFO: >> GET /
2026-08-05 03:18:24,097 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:24,107 INFO: GET /
2026-08-05 03:18:24,110 WARNING: GET / -> 404
2026-08-05 03:18:24,119 INFO: << 404 /
2026-08-05 03:18:25,030 INFO: >> GET /___proxy_subdomain_cpanel
2026-08-05 03:18:25,031 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:25,031 INFO: GET /___proxy_subdomain_cpanel
2026-08-05 03:18:25,032 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-08-05 03:18:25,036 INFO: << 404 /___proxy_subdomain_cpanel
2026-08-05 03:18:25,515 INFO: >> GET /___proxy_subdomain_whm/login
2026-08-05 03:18:25,516 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:25,527 INFO: GET /___proxy_subdomain_whm/login
2026-08-05 03:18:25,530 WARNING: GET /___proxy_subdomain_whm/login -> 404
2026-08-05 03:18:25,539 INFO: << 404 /___proxy_subdomain_whm/login
2026-08-05 03:18:25,892 INFO: >> GET /v2/_catalog
2026-08-05 03:18:25,893 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:25,903 INFO: GET /v2/_catalog
2026-08-05 03:18:25,906 WARNING: GET /v2/_catalog -> 404
2026-08-05 03:18:25,915 INFO: << 404 /v2/_catalog
2026-08-05 03:18:26,557 INFO: >> GET /___proxy_subdomain_cpanel
2026-08-05 03:18:26,558 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:26,558 INFO: GET /___proxy_subdomain_cpanel
2026-08-05 03:18:26,560 WARNING: GET /___proxy_subdomain_cpanel -> 404
2026-08-05 03:18:26,562 INFO: << 404 /___proxy_subdomain_cpanel
2026-08-05 03:18:26,755 INFO: >> GET /.DS_Store
2026-08-05 03:18:26,756 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:26,756 INFO: GET /.DS_Store
2026-08-05 03:18:26,758 WARNING: GET /.DS_Store -> 404
2026-08-05 03:18:26,760 INFO: << 404 /.DS_Store
2026-08-05 03:18:27,165 INFO: >> GET /v2/_catalog
2026-08-05 03:18:27,165 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:27,166 INFO: GET /v2/_catalog
2026-08-05 03:18:27,167 WARNING: GET /v2/_catalog -> 404
2026-08-05 03:18:27,170 INFO: << 404 /v2/_catalog
2026-08-05 03:18:28,228 INFO: >> GET /.DS_Store
2026-08-05 03:18:28,229 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:28,229 INFO: GET /.DS_Store
2026-08-05 03:18:28,230 WARNING: GET /.DS_Store -> 404
2026-08-05 03:18:28,233 INFO: << 404 /.DS_Store
2026-08-05 03:18:30,212 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:30,213 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:30,223 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:30,226 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-08-05 03:18:30,235 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:31,202 INFO: >> GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:31,202 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:31,202 INFO: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:31,204 WARNING: GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application -> 404
2026-08-05 03:18:31,207 INFO: << 404 /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application
2026-08-05 03:18:33,479 INFO: >> POST /graphql
2026-08-05 03:18:33,480 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:33,492 INFO: POST /graphql
2026-08-05 03:18:33,495 WARNING: POST /graphql -> 404
2026-08-05 03:18:33,505 INFO: << 404 /graphql
2026-08-05 03:18:34,135 INFO: >> POST /graphql
2026-08-05 03:18:34,136 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:34,146 INFO: POST /graphql
2026-08-05 03:18:34,149 WARNING: POST /graphql -> 404
2026-08-05 03:18:34,159 INFO: << 404 /graphql
2026-08-05 03:18:34,669 INFO: >> POST /api
2026-08-05 03:18:34,670 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:34,670 INFO: POST /api
2026-08-05 03:18:34,671 WARNING: POST /api -> 404
2026-08-05 03:18:34,674 INFO: << 404 /api
2026-08-05 03:18:34,977 INFO: >> POST /api
2026-08-05 03:18:34,977 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:34,977 INFO: POST /api
2026-08-05 03:18:34,979 WARNING: POST /api -> 404
2026-08-05 03:18:34,981 INFO: << 404 /api
2026-08-05 03:18:35,450 INFO: >> POST /api/graphql
2026-08-05 03:18:35,452 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:35,461 INFO: POST /api/graphql
2026-08-05 03:18:35,464 WARNING: POST /api/graphql -> 404
2026-08-05 03:18:35,473 INFO: << 404 /api/graphql
2026-08-05 03:18:36,062 INFO: >> POST /graphql/api
2026-08-05 03:18:36,062 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:36,062 INFO: POST /graphql/api
2026-08-05 03:18:36,064 WARNING: POST /graphql/api -> 404
2026-08-05 03:18:36,066 INFO: << 404 /graphql/api
2026-08-05 03:18:36,498 INFO: >> POST /api/graphql
2026-08-05 03:18:36,500 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:36,510 INFO: POST /api/graphql
2026-08-05 03:18:36,513 WARNING: POST /api/graphql -> 404
2026-08-05 03:18:36,523 INFO: << 404 /api/graphql
2026-08-05 03:18:36,778 INFO: >> POST /api/gql
2026-08-05 03:18:36,780 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:36,789 INFO: POST /api/gql
2026-08-05 03:18:36,792 WARNING: POST /api/gql -> 404
2026-08-05 03:18:36,801 INFO: << 404 /api/gql
2026-08-05 03:18:37,383 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:37,383 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:37,384 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:37,385 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-08-05 03:18:37,388 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:38,027 INFO: >> POST /graphql/api
2026-08-05 03:18:38,028 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:38,038 INFO: POST /graphql/api
2026-08-05 03:18:38,041 WARNING: POST /graphql/api -> 404
2026-08-05 03:18:38,051 INFO: << 404 /graphql/api
2026-08-05 03:18:38,747 INFO: >> GET /config.json
2026-08-05 03:18:38,748 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:38,748 INFO: GET /config.json
2026-08-05 03:18:38,750 WARNING: GET /config.json -> 404
2026-08-05 03:18:38,753 INFO: << 404 /config.json
2026-08-05 03:18:39,435 INFO: >> POST /api/gql
2026-08-05 03:18:39,435 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:39,435 INFO: POST /api/gql
2026-08-05 03:18:39,437 WARNING: POST /api/gql -> 404
2026-08-05 03:18:39,439 INFO: << 404 /api/gql
2026-08-05 03:18:40,332 INFO: >> GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:40,333 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:40,344 INFO: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:40,347 WARNING: GET /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties -> 404
2026-08-05 03:18:40,357 INFO: << 404 /s/931313e2932323e29373e21353/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties
2026-08-05 03:18:40,679 INFO: >> GET /telescope/requests
2026-08-05 03:18:40,680 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:40,680 INFO: GET /telescope/requests
2026-08-05 03:18:40,681 WARNING: GET /telescope/requests -> 404
2026-08-05 03:18:40,684 INFO: << 404 /telescope/requests
2026-08-05 03:18:41,306 INFO: >> GET /config.json
2026-08-05 03:18:41,307 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:41,317 INFO: GET /config.json
2026-08-05 03:18:41,320 WARNING: GET /config.json -> 404
2026-08-05 03:18:41,330 INFO: << 404 /config.json
2026-08-05 03:18:41,382 INFO: >> GET /version
2026-08-05 03:18:41,383 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:41,393 INFO: GET /version
2026-08-05 03:18:41,397 WARNING: GET /version -> 404
2026-08-05 03:18:41,406 INFO: << 404 /version
2026-08-05 03:18:42,548 INFO: >> GET /info.php
2026-08-05 03:18:42,548 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:42,548 INFO: GET /info.php
2026-08-05 03:18:42,549 WARNING: GET /info.php -> 404
2026-08-05 03:18:42,552 INFO: << 404 /info.php
2026-08-05 03:18:43,285 INFO: >> GET /telescope/requests
2026-08-05 03:18:43,286 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:43,296 INFO: GET /telescope/requests
2026-08-05 03:18:43,299 WARNING: GET /telescope/requests -> 404
2026-08-05 03:18:43,308 INFO: << 404 /telescope/requests
2026-08-05 03:18:43,431 INFO: >> GET /actuator/env
2026-08-05 03:18:43,432 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:43,432 INFO: GET /actuator/env
2026-08-05 03:18:43,433 WARNING: GET /actuator/env -> 404
2026-08-05 03:18:43,436 INFO: << 404 /actuator/env
2026-08-05 03:18:44,302 INFO: >> GET /version
2026-08-05 03:18:44,302 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:44,303 INFO: GET /version
2026-08-05 03:18:44,304 WARNING: GET /version -> 404
2026-08-05 03:18:44,308 INFO: << 404 /version
2026-08-05 03:18:45,166 INFO: >> GET /info.php
2026-08-05 03:18:45,166 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:45,166 INFO: GET /info.php
2026-08-05 03:18:45,168 WARNING: GET /info.php -> 404
2026-08-05 03:18:45,171 INFO: << 404 /info.php
2026-08-05 03:18:46,119 INFO: >> GET /trace.axd
2026-08-05 03:18:46,119 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:46,119 INFO: GET /trace.axd
2026-08-05 03:18:46,121 WARNING: GET /trace.axd -> 404
2026-08-05 03:18:46,124 INFO: << 404 /trace.axd
2026-08-05 03:18:46,264 INFO: >> GET /actuator/env
2026-08-05 03:18:46,264 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:46,265 INFO: GET /actuator/env
2026-08-05 03:18:46,266 WARNING: GET /actuator/env -> 404
2026-08-05 03:18:46,269 INFO: << 404 /actuator/env
2026-08-05 03:18:47,198 INFO: >> GET /@vite/env
2026-08-05 03:18:47,198 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:47,198 INFO: GET /@vite/env
2026-08-05 03:18:47,200 WARNING: GET /@vite/env -> 404
2026-08-05 03:18:47,203 INFO: << 404 /@vite/env
2026-08-05 03:18:48,191 INFO: >> GET /trace.axd
2026-08-05 03:18:48,191 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:48,192 INFO: GET /trace.axd
2026-08-05 03:18:48,193 WARNING: GET /trace.axd -> 404
2026-08-05 03:18:48,196 INFO: << 404 /trace.axd
2026-08-05 03:18:48,549 INFO: >> GET /.vscode/sftp.json
2026-08-05 03:18:48,549 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:48,550 INFO: GET /.vscode/sftp.json
2026-08-05 03:18:48,551 WARNING: GET /.vscode/sftp.json -> 404
2026-08-05 03:18:48,554 INFO: << 404 /.vscode/sftp.json
2026-08-05 03:18:49,066 INFO: >> GET /@vite/env
2026-08-05 03:18:49,067 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:49,067 INFO: GET /@vite/env
2026-08-05 03:18:49,068 WARNING: GET /@vite/env -> 404
2026-08-05 03:18:49,071 INFO: << 404 /@vite/env
2026-08-05 03:18:49,840 INFO: >> OPTIONS /
2026-08-05 03:18:49,842 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:49,852 INFO: OPTIONS /
2026-08-05 03:18:49,855 WARNING: OPTIONS / -> 404
2026-08-05 03:18:49,855 INFO: << 404 /
2026-08-05 03:18:49,890 INFO: >> GET /.vscode/sftp.json
2026-08-05 03:18:49,890 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:49,891 INFO: GET /.vscode/sftp.json
2026-08-05 03:18:49,892 WARNING: GET /.vscode/sftp.json -> 404
2026-08-05 03:18:49,895 INFO: << 404 /.vscode/sftp.json
2026-08-05 03:18:50,911 INFO: >> GET /
2026-08-05 03:18:50,912 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:50,922 INFO: GET /
2026-08-05 03:18:50,925 WARNING: GET / -> 404
2026-08-05 03:18:50,934 INFO: << 404 /
2026-08-05 03:18:50,960 INFO: >> OPTIONS /
2026-08-05 03:18:50,961 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:50,961 INFO: OPTIONS /
2026-08-05 03:18:50,962 WARNING: OPTIONS / -> 404
2026-08-05 03:18:50,962 INFO: << 404 /
2026-08-05 03:18:52,126 INFO: >> GET /
2026-08-05 03:18:52,127 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:52,127 INFO: GET /
2026-08-05 03:18:52,128 WARNING: GET / -> 404
2026-08-05 03:18:52,131 INFO: << 404 /
2026-08-05 03:18:52,347 INFO: >> GET /debug/default/view
2026-08-05 03:18:52,349 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:52,359 INFO: GET /debug/default/view
2026-08-05 03:18:52,362 WARNING: GET /debug/default/view -> 404
2026-08-05 03:18:52,371 INFO: << 404 /debug/default/view
2026-08-05 03:18:53,722 INFO: >> GET /debug/default/view
2026-08-05 03:18:53,723 DEBUG: Using selector: EpollSelector
2026-08-05 03:18:53,733 INFO: GET /debug/default/view
2026-08-05 03:18:53,736 WARNING: GET /debug/default/view -> 404
2026-08-05 03:18:53,780 INFO: << 404 /debug/default/view
2026-08-05 05:46:53,103 INFO: wsgi.py loading...
2026-08-05 05:46:53,103 INFO: Importing app.main...
2026-08-05 05:46:56,965 INFO: app.main imported successfully.
2026-08-05 05:46:56,965 INFO: Running DB init...
2026-08-05 05:46:57,039 INFO: All tables OK.
2026-08-05 05:46:57,189 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 05:46:57,192 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,195 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,199 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,202 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,206 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,209 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 05:46:57,217 INFO: Dip chart data seeded.
2026-08-05 05:46:57,217 INFO: DB init complete.
2026-08-05 05:46:57,218 INFO: wsgi.py ready.
2026-08-05 05:46:57,221 INFO: >> GET /
2026-08-05 05:46:57,223 DEBUG: Using selector: EpollSelector
2026-08-05 05:46:57,224 INFO: >> GET /robots.txt
2026-08-05 05:46:57,225 DEBUG: Using selector: EpollSelector
2026-08-05 05:46:57,234 INFO: GET /
2026-08-05 05:46:57,236 INFO: GET /robots.txt
2026-08-05 05:46:57,236 WARNING: GET / -> 404
2026-08-05 05:46:57,238 WARNING: GET /robots.txt -> 404
2026-08-05 05:46:57,246 INFO: << 404 /
2026-08-05 05:46:57,248 INFO: << 404 /robots.txt
2026-08-05 13:21:26,321 INFO: wsgi.py loading...
2026-08-05 13:21:26,321 INFO: Importing app.main...
2026-08-05 13:21:30,096 INFO: app.main imported successfully.
2026-08-05 13:21:30,096 INFO: Running DB init...
2026-08-05 13:21:30,165 INFO: All tables OK.
2026-08-05 13:21:30,310 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 13:21:30,313 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,316 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,319 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,322 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,325 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,328 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 13:21:30,336 INFO: Dip chart data seeded.
2026-08-05 13:21:30,336 INFO: DB init complete.
2026-08-05 13:21:30,336 INFO: wsgi.py ready.
2026-08-05 13:21:30,339 INFO: >> GET /
2026-08-05 13:21:30,341 DEBUG: Using selector: EpollSelector
2026-08-05 13:21:30,353 INFO: GET /
2026-08-05 13:21:30,356 WARNING: GET / -> 404
2026-08-05 13:21:30,367 INFO: << 404 /
2026-08-05 16:10:43,466 INFO: wsgi.py loading...
2026-08-05 16:10:43,466 INFO: Importing app.main...
2026-08-05 16:10:45,352 INFO: app.main imported successfully.
2026-08-05 16:10:45,352 INFO: Running DB init...
2026-08-05 16:10:45,418 INFO: All tables OK.
2026-08-05 16:10:45,562 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 16:10:45,565 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,568 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,570 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,573 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,576 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,578 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 16:10:45,587 INFO: Dip chart data seeded.
2026-08-05 16:10:45,587 INFO: DB init complete.
2026-08-05 16:10:45,587 INFO: wsgi.py ready.
2026-08-05 16:10:45,591 INFO: >> GET /
2026-08-05 16:10:45,592 DEBUG: Using selector: EpollSelector
2026-08-05 16:10:45,603 INFO: GET /
2026-08-05 16:10:45,605 WARNING: GET / -> 404
2026-08-05 16:10:45,614 INFO: << 404 /
2026-08-05 16:10:46,986 INFO: >> GET /
2026-08-05 16:10:46,988 DEBUG: Using selector: EpollSelector
2026-08-05 16:10:46,998 INFO: GET /
2026-08-05 16:10:47,000 WARNING: GET / -> 404
2026-08-05 16:10:47,010 INFO: << 404 /
2026-08-05 17:24:02,996 INFO: wsgi.py loading...
2026-08-05 17:24:02,997 INFO: Importing app.main...
2026-08-05 17:24:06,012 INFO: app.main imported successfully.
2026-08-05 17:24:06,012 INFO: Running DB init...
2026-08-05 17:24:06,081 INFO: All tables OK.
2026-08-05 17:24:06,245 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 17:24:06,248 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,251 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,253 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,256 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,259 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,261 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 17:24:06,269 INFO: Dip chart data seeded.
2026-08-05 17:24:06,269 INFO: DB init complete.
2026-08-05 17:24:06,269 INFO: wsgi.py ready.
2026-08-05 17:24:06,273 INFO: >> GET /
2026-08-05 17:24:06,274 DEBUG: Using selector: EpollSelector
2026-08-05 17:24:06,286 INFO: GET /
2026-08-05 17:24:06,288 WARNING: GET / -> 404
2026-08-05 17:24:06,298 INFO: << 404 /
2026-08-05 18:18:37,674 INFO: wsgi.py loading...
2026-08-05 18:18:37,674 INFO: Importing app.main...
2026-08-05 18:18:39,467 INFO: app.main imported successfully.
2026-08-05 18:18:39,467 INFO: Running DB init...
2026-08-05 18:18:39,529 INFO: All tables OK.
2026-08-05 18:18:39,658 INFO: Migration OK: allowances ENUM+DAILY
2026-08-05 18:18:39,660 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,663 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,665 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,667 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,670 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,672 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-05 18:18:39,680 INFO: Dip chart data seeded.
2026-08-05 18:18:39,680 INFO: DB init complete.
2026-08-05 18:18:39,681 INFO: wsgi.py ready.
2026-08-05 18:18:39,684 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-05 18:18:39,685 DEBUG: Using selector: EpollSelector
2026-08-05 18:18:39,695 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-05 18:18:39,698 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-05 18:18:39,706 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-05 18:18:40,456 INFO: >> GET /
2026-08-05 18:18:40,456 DEBUG: Using selector: EpollSelector
2026-08-05 18:18:40,457 INFO: GET /
2026-08-05 18:18:40,458 WARNING: GET / -> 404
2026-08-05 18:18:40,460 INFO: << 404 /
2026-08-05 18:18:41,208 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-05 18:18:41,210 DEBUG: Using selector: EpollSelector
2026-08-05 18:18:41,220 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-05 18:18:41,222 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-05 18:18:41,231 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 16:08:24,170 INFO: wsgi.py loading...
2026-08-06 16:08:24,170 INFO: Importing app.main...
2026-08-06 16:08:28,009 INFO: app.main imported successfully.
2026-08-06 16:08:28,009 INFO: Running DB init...
2026-08-06 16:08:28,083 INFO: All tables OK.
2026-08-06 16:08:28,237 INFO: Migration OK: allowances ENUM+DAILY
2026-08-06 16:08:28,241 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,248 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,252 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,254 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,258 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,270 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 16:08:28,280 INFO: Dip chart data seeded.
2026-08-06 16:08:28,281 INFO: DB init complete.
2026-08-06 16:08:28,281 INFO: wsgi.py ready.
2026-08-06 16:08:28,284 INFO: >> GET /
2026-08-06 16:08:28,286 DEBUG: Using selector: EpollSelector
2026-08-06 16:08:28,299 INFO: GET /
2026-08-06 16:08:28,302 WARNING: GET / -> 404
2026-08-06 16:08:28,313 INFO: << 404 /
2026-08-06 16:08:30,065 INFO: >> GET /
2026-08-06 16:08:30,067 DEBUG: Using selector: EpollSelector
2026-08-06 16:08:30,077 INFO: GET /
2026-08-06 16:08:30,080 WARNING: GET / -> 404
2026-08-06 16:08:30,090 INFO: << 404 /
2026-08-06 16:12:15,043 INFO: >> GET /
2026-08-06 16:12:15,045 DEBUG: Using selector: EpollSelector
2026-08-06 16:12:15,056 INFO: GET /
2026-08-06 16:12:15,059 WARNING: GET / -> 404
2026-08-06 16:12:15,089 INFO: << 404 /
2026-08-06 18:20:28,128 INFO: wsgi.py loading...
2026-08-06 18:20:28,128 INFO: Importing app.main...
2026-08-06 18:20:30,041 INFO: app.main imported successfully.
2026-08-06 18:20:30,041 INFO: Running DB init...
2026-08-06 18:20:30,109 INFO: All tables OK.
2026-08-06 18:20:30,262 INFO: Migration OK: allowances ENUM+DAILY
2026-08-06 18:20:30,265 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,267 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,270 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,273 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,276 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,278 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 18:20:30,287 INFO: Dip chart data seeded.
2026-08-06 18:20:30,287 INFO: DB init complete.
2026-08-06 18:20:30,287 INFO: wsgi.py ready.
2026-08-06 18:20:30,291 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 18:20:30,292 DEBUG: Using selector: EpollSelector
2026-08-06 18:20:30,303 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 18:20:30,306 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-06 18:20:30,316 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 18:20:31,084 INFO: >> GET /
2026-08-06 18:20:31,084 DEBUG: Using selector: EpollSelector
2026-08-06 18:20:31,085 INFO: GET /
2026-08-06 18:20:31,086 WARNING: GET / -> 404
2026-08-06 18:20:31,089 INFO: << 404 /
2026-08-06 18:20:31,853 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 18:20:31,854 DEBUG: Using selector: EpollSelector
2026-08-06 18:20:31,865 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 18:20:31,868 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-06 18:20:31,877 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-06 21:40:28,272 INFO: wsgi.py loading...
2026-08-06 21:40:28,272 INFO: Importing app.main...
2026-08-06 21:40:30,257 INFO: app.main imported successfully.
2026-08-06 21:40:30,257 INFO: Running DB init...
2026-08-06 21:40:30,322 INFO: All tables OK.
2026-08-06 21:40:30,456 INFO: Migration OK: allowances ENUM+DAILY
2026-08-06 21:40:30,458 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,461 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,463 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,466 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,468 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,471 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-06 21:40:30,480 INFO: Dip chart data seeded.
2026-08-06 21:40:30,480 INFO: DB init complete.
2026-08-06 21:40:30,480 INFO: wsgi.py ready.
2026-08-06 21:40:30,483 INFO: >> GET /
2026-08-06 21:40:30,485 DEBUG: Using selector: EpollSelector
2026-08-06 21:40:30,496 INFO: GET /
2026-08-06 21:40:30,498 WARNING: GET / -> 404
2026-08-06 21:40:30,508 INFO: << 404 /
2026-08-07 05:36:13,573 INFO: wsgi.py loading...
2026-08-07 05:36:13,574 INFO: Importing app.main...
2026-08-07 05:36:17,150 INFO: app.main imported successfully.
2026-08-07 05:36:17,150 INFO: Running DB init...
2026-08-07 05:36:17,214 INFO: All tables OK.
2026-08-07 05:36:17,359 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 05:36:17,363 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,365 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,368 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,371 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,374 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,376 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:36:17,384 INFO: Dip chart data seeded.
2026-08-07 05:36:17,384 INFO: DB init complete.
2026-08-07 05:36:17,384 INFO: wsgi.py ready.
2026-08-07 05:36:17,387 INFO: >> GET /
2026-08-07 05:36:17,389 DEBUG: Using selector: EpollSelector
2026-08-07 05:36:17,401 INFO: GET /
2026-08-07 05:36:17,404 WARNING: GET / -> 404
2026-08-07 05:36:17,415 INFO: << 404 /
2026-08-07 05:51:44,881 INFO: wsgi.py loading...
2026-08-07 05:51:44,882 INFO: Importing app.main...
2026-08-07 05:51:46,766 INFO: app.main imported successfully.
2026-08-07 05:51:46,767 INFO: Running DB init...
2026-08-07 05:51:46,835 INFO: All tables OK.
2026-08-07 05:51:47,104 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 05:51:47,114 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,117 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,121 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,126 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,129 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,132 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 05:51:47,140 INFO: Dip chart data seeded.
2026-08-07 05:51:47,140 INFO: DB init complete.
2026-08-07 05:51:47,140 INFO: wsgi.py ready.
2026-08-07 05:51:47,144 INFO: >> GET /
2026-08-07 05:51:47,145 DEBUG: Using selector: EpollSelector
2026-08-07 05:51:47,156 INFO: GET /
2026-08-07 05:51:47,159 WARNING: GET / -> 404
2026-08-07 05:51:47,168 INFO: << 404 /
2026-08-07 05:51:51,089 INFO: >> GET /favicon.ico
2026-08-07 05:51:51,091 DEBUG: Using selector: EpollSelector
2026-08-07 05:51:51,102 INFO: GET /favicon.ico
2026-08-07 05:51:51,105 WARNING: GET /favicon.ico -> 404
2026-08-07 05:51:51,114 INFO: << 404 /favicon.ico
2026-08-07 06:08:55,311 INFO: wsgi.py loading...
2026-08-07 06:08:55,312 INFO: Importing app.main...
2026-08-07 06:08:57,194 INFO: app.main imported successfully.
2026-08-07 06:08:57,194 INFO: Running DB init...
2026-08-07 06:08:57,253 INFO: All tables OK.
2026-08-07 06:08:57,395 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 06:08:57,404 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,407 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,409 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,412 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,415 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,418 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 06:08:57,426 INFO: Dip chart data seeded.
2026-08-07 06:08:57,426 INFO: DB init complete.
2026-08-07 06:08:57,426 INFO: wsgi.py ready.
2026-08-07 06:08:57,429 INFO: >> GET /index.php
2026-08-07 06:08:57,431 DEBUG: Using selector: EpollSelector
2026-08-07 06:08:57,441 INFO: GET /index.php
2026-08-07 06:08:57,444 WARNING: GET /index.php -> 404
2026-08-07 06:08:57,453 INFO: << 404 /index.php
2026-08-07 07:10:11,535 INFO: wsgi.py loading...
2026-08-07 07:10:11,535 INFO: Importing app.main...
2026-08-07 07:10:13,461 INFO: app.main imported successfully.
2026-08-07 07:10:13,461 INFO: Running DB init...
2026-08-07 07:10:13,541 INFO: All tables OK.
2026-08-07 07:10:13,696 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 07:10:13,698 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,701 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,704 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,706 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,710 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,712 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 07:10:13,721 INFO: Dip chart data seeded.
2026-08-07 07:10:13,721 INFO: DB init complete.
2026-08-07 07:10:13,721 INFO: wsgi.py ready.
2026-08-07 07:10:13,725 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 07:10:13,726 DEBUG: Using selector: EpollSelector
2026-08-07 07:10:13,737 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 07:10:13,740 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-07 07:10:13,749 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 07:10:14,493 INFO: >> GET /
2026-08-07 07:10:14,494 DEBUG: Using selector: EpollSelector
2026-08-07 07:10:14,505 INFO: GET /
2026-08-07 07:10:14,507 WARNING: GET / -> 404
2026-08-07 07:10:14,516 INFO: << 404 /
2026-08-07 07:10:15,111 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 07:10:15,111 DEBUG: Using selector: EpollSelector
2026-08-07 07:10:15,112 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 07:10:15,113 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-07 07:10:15,116 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-07 09:48:30,402 INFO: wsgi.py loading...
2026-08-07 09:48:30,402 INFO: Importing app.main...
2026-08-07 09:48:32,303 INFO: app.main imported successfully.
2026-08-07 09:48:32,303 INFO: Running DB init...
2026-08-07 09:48:32,362 INFO: All tables OK.
2026-08-07 09:48:32,502 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 09:48:32,505 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,507 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,509 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,511 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,520 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,523 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 09:48:32,531 INFO: Dip chart data seeded.
2026-08-07 09:48:32,531 INFO: DB init complete.
2026-08-07 09:48:32,531 INFO: wsgi.py ready.
2026-08-07 09:48:32,534 INFO: >> GET /wp-login.php
2026-08-07 09:48:32,536 DEBUG: Using selector: EpollSelector
2026-08-07 09:48:32,546 INFO: GET /wp-login.php
2026-08-07 09:48:32,550 WARNING: GET /wp-login.php -> 404
2026-08-07 09:48:32,559 INFO: << 404 /wp-login.php
2026-08-07 09:48:32,574 INFO: >> GET /wp-login.php
2026-08-07 09:48:32,574 DEBUG: Using selector: EpollSelector
2026-08-07 09:48:32,574 INFO: GET /wp-login.php
2026-08-07 09:48:32,576 WARNING: GET /wp-login.php -> 404
2026-08-07 09:48:32,578 INFO: << 404 /wp-login.php
2026-08-07 09:48:32,581 INFO: >> GET /wp-admin/
2026-08-07 09:48:32,581 DEBUG: Using selector: EpollSelector
2026-08-07 09:48:32,582 INFO: GET /wp-admin/
2026-08-07 09:48:32,583 WARNING: GET /wp-admin/ -> 404
2026-08-07 09:48:32,586 INFO: << 404 /wp-admin/
2026-08-07 20:22:53,344 INFO: wsgi.py loading...
2026-08-07 20:22:53,345 INFO: Importing app.main...
2026-08-07 20:22:57,112 INFO: app.main imported successfully.
2026-08-07 20:22:57,112 INFO: Running DB init...
2026-08-07 20:22:57,183 INFO: All tables OK.
2026-08-07 20:22:57,316 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 20:22:57,318 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,320 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,323 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,325 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,328 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,330 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 20:22:57,338 INFO: Dip chart data seeded.
2026-08-07 20:22:57,338 INFO: DB init complete.
2026-08-07 20:22:57,339 INFO: wsgi.py ready.
2026-08-07 20:22:57,342 INFO: >> GET /
2026-08-07 20:22:57,343 DEBUG: Using selector: EpollSelector
2026-08-07 20:22:57,354 INFO: GET /
2026-08-07 20:22:57,356 WARNING: GET / -> 404
2026-08-07 20:22:57,366 INFO: << 404 /
2026-08-07 22:21:58,328 INFO: wsgi.py loading...
2026-08-07 22:21:58,328 INFO: Importing app.main...
2026-08-07 22:22:00,172 INFO: app.main imported successfully.
2026-08-07 22:22:00,172 INFO: Running DB init...
2026-08-07 22:22:00,238 INFO: All tables OK.
2026-08-07 22:22:00,374 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 22:22:00,377 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,379 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,382 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,384 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,387 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,390 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 22:22:00,398 INFO: Dip chart data seeded.
2026-08-07 22:22:00,398 INFO: DB init complete.
2026-08-07 22:22:00,398 INFO: wsgi.py ready.
2026-08-07 22:22:00,402 INFO: >> GET /
2026-08-07 22:22:00,403 DEBUG: Using selector: EpollSelector
2026-08-07 22:22:00,415 INFO: GET /
2026-08-07 22:22:00,418 WARNING: GET / -> 404
2026-08-07 22:22:00,427 INFO: << 404 /
2026-08-07 23:58:50,372 INFO: wsgi.py loading...
2026-08-07 23:58:50,372 INFO: Importing app.main...
2026-08-07 23:58:52,155 INFO: app.main imported successfully.
2026-08-07 23:58:52,156 INFO: Running DB init...
2026-08-07 23:58:52,216 INFO: All tables OK.
2026-08-07 23:58:52,348 INFO: Migration OK: allowances ENUM+DAILY
2026-08-07 23:58:52,351 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,353 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,355 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,358 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,360 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,362 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-07 23:58:52,370 INFO: Dip chart data seeded.
2026-08-07 23:58:52,370 INFO: DB init complete.
2026-08-07 23:58:52,370 INFO: wsgi.py ready.
2026-08-07 23:58:52,374 INFO: >> GET /
2026-08-07 23:58:52,375 DEBUG: Using selector: EpollSelector
2026-08-07 23:58:52,385 INFO: GET /
2026-08-07 23:58:52,387 WARNING: GET / -> 404
2026-08-07 23:58:52,396 INFO: << 404 /
2026-08-08 02:13:08,862 INFO: wsgi.py loading...
2026-08-08 02:13:08,862 INFO: Importing app.main...
2026-08-08 02:13:12,141 INFO: app.main imported successfully.
2026-08-08 02:13:12,142 INFO: Running DB init...
2026-08-08 02:13:12,204 INFO: All tables OK.
2026-08-08 02:13:12,339 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 02:13:12,341 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,344 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,346 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,349 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,351 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,354 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 02:13:12,362 INFO: Dip chart data seeded.
2026-08-08 02:13:12,362 INFO: DB init complete.
2026-08-08 02:13:12,362 INFO: wsgi.py ready.
2026-08-08 02:13:12,365 INFO: >> GET /
2026-08-08 02:13:12,367 DEBUG: Using selector: EpollSelector
2026-08-08 02:13:12,377 INFO: GET /
2026-08-08 02:13:12,380 WARNING: GET / -> 404
2026-08-08 02:13:12,389 INFO: << 404 /
2026-08-08 07:17:30,317 INFO: wsgi.py loading...
2026-08-08 07:17:30,317 INFO: Importing app.main...
2026-08-08 07:17:34,141 INFO: app.main imported successfully.
2026-08-08 07:17:34,142 INFO: Running DB init...
2026-08-08 07:17:34,224 INFO: All tables OK.
2026-08-08 07:17:34,359 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 07:17:34,362 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,365 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,368 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,370 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,373 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,376 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 07:17:34,384 INFO: Dip chart data seeded.
2026-08-08 07:17:34,384 INFO: DB init complete.
2026-08-08 07:17:34,384 INFO: wsgi.py ready.
2026-08-08 07:17:34,389 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 07:17:34,391 DEBUG: Using selector: EpollSelector
2026-08-08 07:17:34,403 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 07:17:34,406 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-08 07:17:34,416 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 07:17:35,150 INFO: >> GET /
2026-08-08 07:17:35,151 DEBUG: Using selector: EpollSelector
2026-08-08 07:17:35,162 INFO: GET /
2026-08-08 07:17:35,165 WARNING: GET / -> 404
2026-08-08 07:17:35,174 INFO: << 404 /
2026-08-08 07:17:35,914 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 07:17:35,915 DEBUG: Using selector: EpollSelector
2026-08-08 07:17:35,925 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 07:17:35,928 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-08 07:17:35,937 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-08 08:37:00,606 INFO: wsgi.py loading...
2026-08-08 08:37:00,607 INFO: Importing app.main...
2026-08-08 08:37:02,727 INFO: app.main imported successfully.
2026-08-08 08:37:02,727 INFO: Running DB init...
2026-08-08 08:37:02,792 INFO: All tables OK.
2026-08-08 08:37:02,940 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 08:37:02,943 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,945 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,948 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,950 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,953 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,955 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 08:37:02,963 INFO: Dip chart data seeded.
2026-08-08 08:37:02,964 INFO: DB init complete.
2026-08-08 08:37:02,964 INFO: wsgi.py ready.
2026-08-08 08:37:02,967 INFO: >> GET /
2026-08-08 08:37:02,968 DEBUG: Using selector: EpollSelector
2026-08-08 08:37:02,993 INFO: GET /
2026-08-08 08:37:02,995 WARNING: GET / -> 404
2026-08-08 08:37:03,006 INFO: << 404 /
2026-08-08 13:24:08,217 INFO: wsgi.py loading...
2026-08-08 13:24:08,218 INFO: Importing app.main...
2026-08-08 13:24:11,512 INFO: app.main imported successfully.
2026-08-08 13:24:11,512 INFO: Running DB init...
2026-08-08 13:24:11,576 INFO: All tables OK.
2026-08-08 13:24:11,718 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 13:24:11,721 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,723 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,725 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,728 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,731 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,733 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 13:24:11,742 INFO: Dip chart data seeded.
2026-08-08 13:24:11,742 INFO: DB init complete.
2026-08-08 13:24:11,742 INFO: wsgi.py ready.
2026-08-08 13:24:11,745 INFO: >> GET /
2026-08-08 13:24:11,747 DEBUG: Using selector: EpollSelector
2026-08-08 13:24:11,758 INFO: GET /
2026-08-08 13:24:11,760 WARNING: GET / -> 404
2026-08-08 13:24:11,769 INFO: << 404 /
2026-08-08 18:58:50,079 INFO: wsgi.py loading...
2026-08-08 18:58:50,080 INFO: Importing app.main...
2026-08-08 18:58:52,021 INFO: app.main imported successfully.
2026-08-08 18:58:52,021 INFO: Running DB init...
2026-08-08 18:58:52,097 INFO: All tables OK.
2026-08-08 18:58:52,236 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 18:58:52,239 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,242 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,244 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,247 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,249 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,252 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 18:58:52,259 INFO: Dip chart data seeded.
2026-08-08 18:58:52,260 INFO: DB init complete.
2026-08-08 18:58:52,260 INFO: wsgi.py ready.
2026-08-08 18:58:52,263 INFO: >> GET /
2026-08-08 18:58:52,264 DEBUG: Using selector: EpollSelector
2026-08-08 18:58:52,275 INFO: GET /
2026-08-08 18:58:52,277 WARNING: GET / -> 404
2026-08-08 18:58:52,286 INFO: << 404 /
2026-08-08 22:36:11,625 INFO: wsgi.py loading...
2026-08-08 22:36:11,625 INFO: Importing app.main...
2026-08-08 22:36:13,577 INFO: app.main imported successfully.
2026-08-08 22:36:13,577 INFO: Running DB init...
2026-08-08 22:36:13,638 INFO: All tables OK.
2026-08-08 22:36:13,779 INFO: Migration OK: allowances ENUM+DAILY
2026-08-08 22:36:13,782 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,785 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,787 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,790 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,793 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,795 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-08 22:36:13,804 INFO: Dip chart data seeded.
2026-08-08 22:36:13,804 INFO: DB init complete.
2026-08-08 22:36:13,804 INFO: wsgi.py ready.
2026-08-08 22:36:13,808 INFO: >> GET /
2026-08-08 22:36:13,810 DEBUG: Using selector: EpollSelector
2026-08-08 22:36:13,823 INFO: GET /
2026-08-08 22:36:13,826 WARNING: GET / -> 404
2026-08-08 22:36:13,836 INFO: << 404 /
2026-08-09 10:03:34,434 INFO: wsgi.py loading...
2026-08-09 10:03:34,434 INFO: Importing app.main...
2026-08-09 10:03:38,347 INFO: app.main imported successfully.
2026-08-09 10:03:38,347 INFO: Running DB init...
2026-08-09 10:03:38,434 INFO: All tables OK.
2026-08-09 10:03:38,608 INFO: Migration OK: allowances ENUM+DAILY
2026-08-09 10:03:38,615 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,618 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,620 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,623 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,626 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,629 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 10:03:38,636 INFO: Dip chart data seeded.
2026-08-09 10:03:38,637 INFO: DB init complete.
2026-08-09 10:03:38,637 INFO: wsgi.py ready.
2026-08-09 10:03:38,640 INFO: >> GET /
2026-08-09 10:03:38,642 DEBUG: Using selector: EpollSelector
2026-08-09 10:03:38,643 INFO: >> GET /
2026-08-09 10:03:38,644 DEBUG: Using selector: EpollSelector
2026-08-09 10:03:38,653 INFO: GET /
2026-08-09 10:03:38,655 INFO: GET /
2026-08-09 10:03:38,656 WARNING: GET / -> 404
2026-08-09 10:03:38,657 WARNING: GET / -> 404
2026-08-09 10:03:38,666 INFO: << 404 /
2026-08-09 10:03:38,666 INFO: << 404 /
2026-08-09 17:23:49,379 INFO: wsgi.py loading...
2026-08-09 17:23:49,379 INFO: Importing app.main...
2026-08-09 17:23:53,199 INFO: app.main imported successfully.
2026-08-09 17:23:53,199 INFO: Running DB init...
2026-08-09 17:23:53,260 INFO: All tables OK.
2026-08-09 17:23:53,394 INFO: Migration OK: allowances ENUM+DAILY
2026-08-09 17:23:53,397 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,400 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,402 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,405 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,407 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,410 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 17:23:53,419 INFO: Dip chart data seeded.
2026-08-09 17:23:53,419 INFO: DB init complete.
2026-08-09 17:23:53,419 INFO: wsgi.py ready.
2026-08-09 17:23:53,422 INFO: >> GET /
2026-08-09 17:23:53,424 DEBUG: Using selector: EpollSelector
2026-08-09 17:23:53,434 INFO: GET /
2026-08-09 17:23:53,437 WARNING: GET / -> 404
2026-08-09 17:23:53,445 INFO: << 404 /
2026-08-09 23:25:29,433 INFO: wsgi.py loading...
2026-08-09 23:25:29,433 INFO: Importing app.main...
2026-08-09 23:25:33,753 INFO: app.main imported successfully.
2026-08-09 23:25:33,753 INFO: Running DB init...
2026-08-09 23:25:33,984 INFO: All tables OK.
2026-08-09 23:25:34,250 INFO: Migration OK: allowances ENUM+DAILY
2026-08-09 23:25:34,253 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,259 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,261 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,266 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,269 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,271 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-09 23:25:34,281 INFO: Dip chart data seeded.
2026-08-09 23:25:34,281 INFO: DB init complete.
2026-08-09 23:25:34,281 INFO: wsgi.py ready.
2026-08-09 23:25:34,284 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-09 23:25:34,286 DEBUG: Using selector: EpollSelector
2026-08-09 23:25:34,339 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-09 23:25:34,342 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-09 23:25:34,352 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-10 03:32:34,968 INFO: wsgi.py loading...
2026-08-10 03:32:34,968 INFO: Importing app.main...
2026-08-10 03:32:36,830 INFO: app.main imported successfully.
2026-08-10 03:32:36,830 INFO: Running DB init...
2026-08-10 03:32:36,895 INFO: All tables OK.
2026-08-10 03:32:37,035 INFO: Migration OK: allowances ENUM+DAILY
2026-08-10 03:32:37,038 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,040 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,043 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,045 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,048 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,051 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 03:32:37,059 INFO: Dip chart data seeded.
2026-08-10 03:32:37,059 INFO: DB init complete.
2026-08-10 03:32:37,059 INFO: wsgi.py ready.
2026-08-10 03:32:37,063 INFO: >> GET /
2026-08-10 03:32:37,064 DEBUG: Using selector: EpollSelector
2026-08-10 03:32:37,075 INFO: GET /
2026-08-10 03:32:37,078 WARNING: GET / -> 404
2026-08-10 03:32:37,087 INFO: << 404 /
2026-08-10 03:32:39,372 INFO: >> GET /
2026-08-10 03:32:39,372 DEBUG: Using selector: EpollSelector
2026-08-10 03:32:39,373 INFO: GET /
2026-08-10 03:32:39,374 WARNING: GET / -> 404
2026-08-10 03:32:39,376 INFO: << 404 /
2026-08-10 03:32:41,233 INFO: >> GET /
2026-08-10 03:32:41,235 DEBUG: Using selector: EpollSelector
2026-08-10 03:32:41,245 INFO: GET /
2026-08-10 03:32:41,247 WARNING: GET / -> 404
2026-08-10 03:32:41,255 INFO: << 404 /
2026-08-10 03:32:42,484 INFO: >> GET /
2026-08-10 03:32:42,485 DEBUG: Using selector: EpollSelector
2026-08-10 03:32:42,495 INFO: GET /
2026-08-10 03:32:42,497 WARNING: GET / -> 404
2026-08-10 03:32:42,506 INFO: << 404 /
[UID:1034][1517013] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1517013] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1517013] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
2026-08-10 10:47:03,218 INFO: wsgi.py loading...
2026-08-10 10:47:03,218 INFO: Importing app.main...
2026-08-10 10:47:06,989 INFO: app.main imported successfully.
2026-08-10 10:47:06,989 INFO: Running DB init...
2026-08-10 10:47:07,050 INFO: All tables OK.
2026-08-10 10:47:07,183 INFO: Migration OK: allowances ENUM+DAILY
2026-08-10 10:47:07,186 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,188 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,191 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,194 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,198 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,205 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-10 10:47:07,213 INFO: Dip chart data seeded.
2026-08-10 10:47:07,213 INFO: DB init complete.
2026-08-10 10:47:07,213 INFO: wsgi.py ready.
2026-08-10 10:47:07,217 INFO: >> GET /
2026-08-10 10:47:07,218 DEBUG: Using selector: EpollSelector
2026-08-10 10:47:07,229 INFO: GET /
2026-08-10 10:47:07,232 WARNING: GET / -> 404
2026-08-10 10:47:07,241 INFO: << 404 /
2026-08-11 03:14:54,410 INFO: wsgi.py loading...
2026-08-11 03:14:54,410 INFO: Importing app.main...
2026-08-11 03:14:58,079 INFO: app.main imported successfully.
2026-08-11 03:14:58,079 INFO: Running DB init...
2026-08-11 03:14:58,139 INFO: All tables OK.
2026-08-11 03:14:58,274 INFO: Migration OK: allowances ENUM+DAILY
2026-08-11 03:14:58,277 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,279 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,282 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,284 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,287 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,290 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-11 03:14:58,298 INFO: Dip chart data seeded.
2026-08-11 03:14:58,298 INFO: DB init complete.
2026-08-11 03:14:58,298 INFO: wsgi.py ready.
2026-08-11 03:14:58,302 INFO: >> GET /
2026-08-11 03:14:58,303 DEBUG: Using selector: EpollSelector
2026-08-11 03:14:58,314 INFO: GET /
2026-08-11 03:14:58,317 WARNING: GET / -> 404
2026-08-11 03:14:58,327 INFO: << 404 /
2026-08-11 03:14:58,745 INFO: >> GET /
2026-08-11 03:14:58,746 DEBUG: Using selector: EpollSelector
2026-08-11 03:14:58,756 INFO: GET /
2026-08-11 03:14:58,759 WARNING: GET / -> 404
2026-08-11 03:14:58,768 INFO: << 404 /
2026-08-11 03:14:59,518 INFO: >> GET /wp-login.php
2026-08-11 03:14:59,518 DEBUG: Using selector: EpollSelector
2026-08-11 03:14:59,519 INFO: GET /wp-login.php
2026-08-11 03:14:59,520 WARNING: GET /wp-login.php -> 404
2026-08-11 03:14:59,523 INFO: << 404 /wp-login.php
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][1576598] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
2026-08-12 01:12:21,261 INFO: wsgi.py loading...
2026-08-12 01:12:21,262 INFO: Importing app.main...
2026-08-12 01:12:24,972 INFO: app.main imported successfully.
2026-08-12 01:12:24,972 INFO: Running DB init...
2026-08-12 01:12:25,033 INFO: All tables OK.
2026-08-12 01:12:25,166 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 01:12:25,169 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,171 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,173 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,175 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,178 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,180 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:12:25,189 INFO: Dip chart data seeded.
2026-08-12 01:12:25,189 INFO: DB init complete.
2026-08-12 01:12:25,189 INFO: wsgi.py ready.
2026-08-12 01:12:25,192 INFO: >> GET /
2026-08-12 01:12:25,193 DEBUG: Using selector: EpollSelector
2026-08-12 01:12:25,204 INFO: GET /
2026-08-12 01:12:25,206 WARNING: GET / -> 404
2026-08-12 01:12:25,215 INFO: << 404 /
2026-08-12 01:32:50,659 INFO: wsgi.py loading...
2026-08-12 01:32:50,659 INFO: Importing app.main...
2026-08-12 01:32:52,396 INFO: app.main imported successfully.
2026-08-12 01:32:52,396 INFO: Running DB init...
2026-08-12 01:32:52,456 INFO: All tables OK.
2026-08-12 01:32:52,591 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 01:32:52,593 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,596 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,604 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,606 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,609 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,611 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 01:32:52,619 INFO: Dip chart data seeded.
2026-08-12 01:32:52,619 INFO: DB init complete.
2026-08-12 01:32:52,619 INFO: wsgi.py ready.
2026-08-12 01:32:52,622 INFO: >> GET /robots.txt
2026-08-12 01:32:52,624 DEBUG: Using selector: EpollSelector
2026-08-12 01:32:52,633 INFO: GET /robots.txt
2026-08-12 01:32:52,636 WARNING: GET /robots.txt -> 404
2026-08-12 01:32:52,645 INFO: << 404 /robots.txt
2026-08-12 01:32:53,463 INFO: >> GET /
2026-08-12 01:32:53,465 DEBUG: Using selector: EpollSelector
2026-08-12 01:32:53,474 INFO: GET /
2026-08-12 01:32:53,477 WARNING: GET / -> 404
2026-08-12 01:32:53,485 INFO: << 404 /
2026-08-12 05:31:06,916 INFO: wsgi.py loading...
2026-08-12 05:31:06,917 INFO: Importing app.main...
2026-08-12 05:31:08,807 INFO: app.main imported successfully.
2026-08-12 05:31:08,808 INFO: Running DB init...
2026-08-12 05:31:08,869 INFO: All tables OK.
2026-08-12 05:31:09,011 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 05:31:09,014 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,017 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,022 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,024 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,027 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,030 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 05:31:09,037 INFO: Dip chart data seeded.
2026-08-12 05:31:09,037 INFO: DB init complete.
2026-08-12 05:31:09,037 INFO: wsgi.py ready.
2026-08-12 05:31:09,041 INFO: >> GET /
2026-08-12 05:31:09,042 DEBUG: Using selector: EpollSelector
2026-08-12 05:31:09,054 INFO: GET /
2026-08-12 05:31:09,056 WARNING: GET / -> 404
2026-08-12 05:31:09,066 INFO: << 404 /
2026-08-12 12:32:54,064 INFO: wsgi.py loading...
2026-08-12 12:32:54,065 INFO: Importing app.main...
2026-08-12 12:32:57,923 INFO: app.main imported successfully.
2026-08-12 12:32:57,924 INFO: Running DB init...
2026-08-12 12:32:57,994 INFO: All tables OK.
2026-08-12 12:32:58,155 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 12:32:58,162 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,167 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,194 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,198 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,207 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,214 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 12:32:58,223 INFO: Dip chart data seeded.
2026-08-12 12:32:58,223 INFO: DB init complete.
2026-08-12 12:32:58,223 INFO: wsgi.py ready.
2026-08-12 12:32:58,227 INFO: >> GET /robots.txt
2026-08-12 12:32:58,229 DEBUG: Using selector: EpollSelector
2026-08-12 12:32:58,240 INFO: GET /robots.txt
2026-08-12 12:32:58,244 WARNING: GET /robots.txt -> 404
2026-08-12 12:32:58,255 INFO: << 404 /robots.txt
2026-08-12 18:30:22,230 INFO: wsgi.py loading...
2026-08-12 18:30:22,231 INFO: Importing app.main...
2026-08-12 18:30:25,555 INFO: app.main imported successfully.
2026-08-12 18:30:25,555 INFO: Running DB init...
2026-08-12 18:30:25,628 INFO: All tables OK.
2026-08-12 18:30:25,773 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 18:30:25,776 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,778 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,781 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,783 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,785 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,788 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 18:30:25,795 INFO: Dip chart data seeded.
2026-08-12 18:30:25,795 INFO: DB init complete.
2026-08-12 18:30:25,795 INFO: wsgi.py ready.
2026-08-12 18:30:25,800 INFO: >> GET /robots.txt
2026-08-12 18:30:25,801 DEBUG: Using selector: EpollSelector
2026-08-12 18:30:25,812 INFO: GET /robots.txt
2026-08-12 18:30:25,814 WARNING: GET /robots.txt -> 404
2026-08-12 18:30:25,824 INFO: << 404 /robots.txt
2026-08-12 18:30:26,635 INFO: >> GET /
2026-08-12 18:30:26,637 DEBUG: Using selector: EpollSelector
2026-08-12 18:30:26,647 INFO: GET /
2026-08-12 18:30:26,649 WARNING: GET / -> 404
2026-08-12 18:30:26,659 INFO: << 404 /
2026-08-12 21:18:28,989 INFO: wsgi.py loading...
2026-08-12 21:18:28,990 INFO: Importing app.main...
2026-08-12 21:18:30,932 INFO: app.main imported successfully.
2026-08-12 21:18:30,933 INFO: Running DB init...
2026-08-12 21:18:30,999 INFO: All tables OK.
2026-08-12 21:18:31,143 INFO: Migration OK: allowances ENUM+DAILY
2026-08-12 21:18:31,145 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,148 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,151 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,153 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,156 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,159 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-12 21:18:31,167 INFO: Dip chart data seeded.
2026-08-12 21:18:31,168 INFO: DB init complete.
2026-08-12 21:18:31,168 INFO: wsgi.py ready.
2026-08-12 21:18:31,171 INFO: >> GET /phpinfo
2026-08-12 21:18:31,173 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:31,183 INFO: GET /phpinfo
2026-08-12 21:18:31,186 WARNING: GET /phpinfo -> 404
2026-08-12 21:18:31,196 INFO: << 404 /phpinfo
2026-08-12 21:18:31,528 INFO: >> GET /phpinfo.php
2026-08-12 21:18:31,528 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:31,529 INFO: GET /phpinfo.php
2026-08-12 21:18:31,530 WARNING: GET /phpinfo.php -> 404
2026-08-12 21:18:31,533 INFO: << 404 /phpinfo.php
2026-08-12 21:18:31,880 INFO: >> GET /test.php
2026-08-12 21:18:31,880 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:31,881 INFO: GET /test.php
2026-08-12 21:18:31,882 WARNING: GET /test.php -> 404
2026-08-12 21:18:31,885 INFO: << 404 /test.php
2026-08-12 21:18:32,217 INFO: >> GET /_profiler/phpinfo
2026-08-12 21:18:32,217 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:32,218 INFO: GET /_profiler/phpinfo
2026-08-12 21:18:32,219 WARNING: GET /_profiler/phpinfo -> 404
2026-08-12 21:18:32,222 INFO: << 404 /_profiler/phpinfo
2026-08-12 21:18:32,554 INFO: >> GET /info.php
2026-08-12 21:18:32,554 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:32,554 INFO: GET /info.php
2026-08-12 21:18:32,556 WARNING: GET /info.php -> 404
2026-08-12 21:18:32,558 INFO: << 404 /info.php
2026-08-12 21:18:32,890 INFO: >> GET /php.php
2026-08-12 21:18:32,890 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:32,890 INFO: GET /php.php
2026-08-12 21:18:32,892 WARNING: GET /php.php -> 404
2026-08-12 21:18:32,894 INFO: << 404 /php.php
2026-08-12 21:18:33,226 INFO: >> GET /php_info.php
2026-08-12 21:18:33,226 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:33,227 INFO: GET /php_info.php
2026-08-12 21:18:33,228 WARNING: GET /php_info.php -> 404
2026-08-12 21:18:33,230 INFO: << 404 /php_info.php
2026-08-12 21:18:33,562 INFO: >> GET /i.php
2026-08-12 21:18:33,563 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:33,563 INFO: GET /i.php
2026-08-12 21:18:33,565 WARNING: GET /i.php -> 404
2026-08-12 21:18:33,567 INFO: << 404 /i.php
2026-08-12 21:18:33,899 INFO: >> GET /pi.php
2026-08-12 21:18:33,899 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:33,900 INFO: GET /pi.php
2026-08-12 21:18:33,901 WARNING: GET /pi.php -> 404
2026-08-12 21:18:33,903 INFO: << 404 /pi.php
2026-08-12 21:18:34,235 INFO: >> GET /
2026-08-12 21:18:34,235 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:34,236 INFO: GET /
2026-08-12 21:18:34,237 WARNING: GET / -> 404
2026-08-12 21:18:34,239 INFO: << 404 /
2026-08-12 21:18:34,571 INFO: >> GET /admin/phpinfo.php
2026-08-12 21:18:34,571 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:34,572 INFO: GET /admin/phpinfo.php
2026-08-12 21:18:34,573 WARNING: GET /admin/phpinfo.php -> 404
2026-08-12 21:18:34,575 INFO: << 404 /admin/phpinfo.php
2026-08-12 21:18:34,908 INFO: >> GET /pinfo.php
2026-08-12 21:18:34,908 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:34,908 INFO: GET /pinfo.php
2026-08-12 21:18:34,909 WARNING: GET /pinfo.php -> 404
2026-08-12 21:18:34,912 INFO: << 404 /pinfo.php
2026-08-12 21:18:35,244 INFO: >> GET /php_version.php
2026-08-12 21:18:35,244 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:35,244 INFO: GET /php_version.php
2026-08-12 21:18:35,246 WARNING: GET /php_version.php -> 404
2026-08-12 21:18:35,248 INFO: << 404 /php_version.php
2026-08-12 21:18:35,580 INFO: >> GET /.aws/credentials
2026-08-12 21:18:35,580 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:35,580 INFO: GET /.aws/credentials
2026-08-12 21:18:35,582 WARNING: GET /.aws/credentials -> 404
2026-08-12 21:18:35,584 INFO: << 404 /.aws/credentials
2026-08-12 21:18:36,248 INFO: >> GET /.env.example
2026-08-12 21:18:36,248 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:36,248 INFO: GET /.env.example
2026-08-12 21:18:36,250 WARNING: GET /.env.example -> 404
2026-08-12 21:18:36,252 INFO: << 404 /.env.example
2026-08-12 21:18:36,584 INFO: >> GET /.env.local
2026-08-12 21:18:36,584 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:36,584 INFO: GET /.env.local
2026-08-12 21:18:36,586 WARNING: GET /.env.local -> 404
2026-08-12 21:18:36,589 INFO: << 404 /.env.local
2026-08-12 21:18:36,920 INFO: >> GET /.env.backup
2026-08-12 21:18:36,921 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:36,921 INFO: GET /.env.backup
2026-08-12 21:18:36,922 WARNING: GET /.env.backup -> 404
2026-08-12 21:18:36,925 INFO: << 404 /.env.backup
2026-08-12 21:18:37,256 INFO: >> GET /config/.env
2026-08-12 21:18:37,257 DEBUG: Using selector: EpollSelector
2026-08-12 21:18:37,257 INFO: GET /config/.env
2026-08-12 21:18:37,258 WARNING: GET /config/.env -> 404
2026-08-12 21:18:37,260 INFO: << 404 /config/.env
2026-08-13 05:21:04,546 INFO: wsgi.py loading...
2026-08-13 05:21:04,546 INFO: Importing app.main...
2026-08-13 05:21:08,188 INFO: app.main imported successfully.
2026-08-13 05:21:08,188 INFO: Running DB init...
2026-08-13 05:21:08,250 INFO: All tables OK.
2026-08-13 05:21:08,388 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 05:21:08,391 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,393 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,396 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,398 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,401 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,404 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 05:21:08,427 INFO: Dip chart data seeded.
2026-08-13 05:21:08,427 INFO: DB init complete.
2026-08-13 05:21:08,427 INFO: wsgi.py ready.
2026-08-13 05:21:08,430 INFO: >> GET /
2026-08-13 05:21:08,432 DEBUG: Using selector: EpollSelector
2026-08-13 05:21:08,433 INFO: >> GET /
2026-08-13 05:21:08,434 DEBUG: Using selector: EpollSelector
2026-08-13 05:21:08,443 INFO: GET /
2026-08-13 05:21:08,444 INFO: GET /
2026-08-13 05:21:08,445 WARNING: GET / -> 404
2026-08-13 05:21:08,446 WARNING: GET / -> 404
2026-08-13 05:21:08,455 INFO: << 404 /
2026-08-13 05:21:08,455 INFO: << 404 /
2026-08-13 06:16:42,790 INFO: wsgi.py loading...
2026-08-13 06:16:42,791 INFO: Importing app.main...
2026-08-13 06:16:44,536 INFO: app.main imported successfully.
2026-08-13 06:16:44,536 INFO: Running DB init...
2026-08-13 06:16:44,592 INFO: All tables OK.
2026-08-13 06:16:44,730 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 06:16:44,740 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,742 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,745 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,748 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,750 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,753 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 06:16:44,759 INFO: Dip chart data seeded.
2026-08-13 06:16:44,759 INFO: DB init complete.
2026-08-13 06:16:44,759 INFO: wsgi.py ready.
2026-08-13 06:16:44,763 INFO: >> GET /robots.txt
2026-08-13 06:16:44,764 DEBUG: Using selector: EpollSelector
2026-08-13 06:16:44,774 INFO: GET /robots.txt
2026-08-13 06:16:44,777 WARNING: GET /robots.txt -> 404
2026-08-13 06:16:44,787 INFO: << 404 /robots.txt
2026-08-13 06:16:44,993 INFO: >> GET /
2026-08-13 06:16:44,993 DEBUG: Using selector: EpollSelector
2026-08-13 06:16:44,993 INFO: GET /
2026-08-13 06:16:44,994 WARNING: GET / -> 404
2026-08-13 06:16:44,997 INFO: << 404 /
2026-08-13 09:04:31,642 INFO: wsgi.py loading...
2026-08-13 09:04:31,643 INFO: Importing app.main...
2026-08-13 09:04:34,516 INFO: app.main imported successfully.
2026-08-13 09:04:34,516 INFO: Running DB init...
2026-08-13 09:04:34,585 INFO: All tables OK.
2026-08-13 09:04:34,731 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 09:04:34,734 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,737 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,739 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,743 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,746 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,749 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 09:04:34,756 INFO: Dip chart data seeded.
2026-08-13 09:04:34,756 INFO: DB init complete.
2026-08-13 09:04:34,756 INFO: wsgi.py ready.
2026-08-13 09:04:34,760 INFO: >> GET /
2026-08-13 09:04:34,762 DEBUG: Using selector: EpollSelector
2026-08-13 09:04:34,762 INFO: >> GET /
2026-08-13 09:04:34,764 DEBUG: Using selector: EpollSelector
2026-08-13 09:04:34,775 INFO: GET /
2026-08-13 09:04:34,776 INFO: GET /
2026-08-13 09:04:34,777 WARNING: GET / -> 404
2026-08-13 09:04:34,778 WARNING: GET / -> 404
2026-08-13 09:04:34,789 INFO: << 404 /
2026-08-13 09:04:34,789 INFO: << 404 /
2026-08-13 10:45:15,489 INFO: wsgi.py loading...
2026-08-13 10:45:15,489 INFO: Importing app.main...
2026-08-13 10:45:17,390 INFO: app.main imported successfully.
2026-08-13 10:45:17,390 INFO: Running DB init...
2026-08-13 10:45:17,453 INFO: All tables OK.
2026-08-13 10:45:17,587 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 10:45:17,590 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,592 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,594 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,596 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,599 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,601 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 10:45:17,609 INFO: Dip chart data seeded.
2026-08-13 10:45:17,609 INFO: DB init complete.
2026-08-13 10:45:17,609 INFO: wsgi.py ready.
2026-08-13 10:45:17,612 INFO: >> GET /robots.txt
2026-08-13 10:45:17,614 DEBUG: Using selector: EpollSelector
2026-08-13 10:45:17,624 INFO: GET /robots.txt
2026-08-13 10:45:17,627 WARNING: GET /robots.txt -> 404
2026-08-13 10:45:17,636 INFO: << 404 /robots.txt
2026-08-13 16:18:52,738 INFO: wsgi.py loading...
2026-08-13 16:18:52,739 INFO: Importing app.main...
2026-08-13 16:18:56,562 INFO: app.main imported successfully.
2026-08-13 16:18:56,563 INFO: Running DB init...
2026-08-13 16:18:56,635 INFO: All tables OK.
2026-08-13 16:18:56,785 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 16:18:56,787 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,789 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,792 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,794 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,797 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,799 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 16:18:56,807 INFO: Dip chart data seeded.
2026-08-13 16:18:56,807 INFO: DB init complete.
2026-08-13 16:18:56,807 INFO: wsgi.py ready.
2026-08-13 16:18:56,811 INFO: >> HEAD /
2026-08-13 16:18:56,812 DEBUG: Using selector: EpollSelector
2026-08-13 16:18:56,823 INFO: HEAD /
2026-08-13 16:18:56,825 WARNING: HEAD / -> 404
2026-08-13 16:18:56,826 INFO: << 404 /
2026-08-13 18:20:43,978 INFO: wsgi.py loading...
2026-08-13 18:20:43,979 INFO: Importing app.main...
2026-08-13 18:20:45,841 INFO: app.main imported successfully.
2026-08-13 18:20:45,841 INFO: Running DB init...
2026-08-13 18:20:45,900 INFO: All tables OK.
2026-08-13 18:20:46,033 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 18:20:46,035 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,038 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,041 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,043 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,046 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,048 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:20:46,057 INFO: Dip chart data seeded.
2026-08-13 18:20:46,057 INFO: DB init complete.
2026-08-13 18:20:46,057 INFO: wsgi.py ready.
2026-08-13 18:20:46,061 INFO: >> GET /
2026-08-13 18:20:46,062 DEBUG: Using selector: EpollSelector
2026-08-13 18:20:46,072 INFO: GET /
2026-08-13 18:20:46,075 WARNING: GET / -> 404
2026-08-13 18:20:46,084 INFO: << 404 /
2026-08-13 18:59:48,776 INFO: wsgi.py loading...
2026-08-13 18:59:48,776 INFO: Importing app.main...
2026-08-13 18:59:50,644 INFO: app.main imported successfully.
2026-08-13 18:59:50,644 INFO: Running DB init...
2026-08-13 18:59:50,707 INFO: All tables OK.
2026-08-13 18:59:50,841 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 18:59:50,844 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,847 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,849 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,852 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,854 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,857 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 18:59:50,865 INFO: Dip chart data seeded.
2026-08-13 18:59:50,865 INFO: DB init complete.
2026-08-13 18:59:50,865 INFO: wsgi.py ready.
2026-08-13 18:59:50,868 INFO: >> GET /
2026-08-13 18:59:50,869 DEBUG: Using selector: EpollSelector
2026-08-13 18:59:50,880 INFO: GET /
2026-08-13 18:59:50,882 WARNING: GET / -> 404
2026-08-13 18:59:50,891 INFO: << 404 /
2026-08-13 19:00:38,868 INFO: >> GET /
2026-08-13 19:00:38,869 DEBUG: Using selector: EpollSelector
2026-08-13 19:00:38,880 INFO: GET /
2026-08-13 19:00:38,882 WARNING: GET / -> 404
2026-08-13 19:00:38,912 INFO: << 404 /
2026-08-13 19:33:41,131 INFO: wsgi.py loading...
2026-08-13 19:33:41,131 INFO: Importing app.main...
2026-08-13 19:33:42,953 INFO: app.main imported successfully.
2026-08-13 19:33:42,953 INFO: Running DB init...
2026-08-13 19:33:43,015 INFO: All tables OK.
2026-08-13 19:33:43,153 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 19:33:43,156 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,158 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,161 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,163 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,166 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,169 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 19:33:43,176 INFO: Dip chart data seeded.
2026-08-13 19:33:43,177 INFO: DB init complete.
2026-08-13 19:33:43,177 INFO: wsgi.py ready.
2026-08-13 19:33:43,180 INFO: >> GET /robots.txt
2026-08-13 19:33:43,181 DEBUG: Using selector: EpollSelector
2026-08-13 19:33:43,191 INFO: GET /robots.txt
2026-08-13 19:33:43,194 WARNING: GET /robots.txt -> 404
2026-08-13 19:33:43,203 INFO: << 404 /robots.txt
2026-08-13 20:40:15,839 INFO: wsgi.py loading...
2026-08-13 20:40:15,839 INFO: Importing app.main...
2026-08-13 20:40:17,742 INFO: app.main imported successfully.
2026-08-13 20:40:17,742 INFO: Running DB init...
2026-08-13 20:40:17,808 INFO: All tables OK.
2026-08-13 20:40:17,960 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 20:40:17,963 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,965 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,969 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,972 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,975 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,977 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 20:40:17,986 INFO: Dip chart data seeded.
2026-08-13 20:40:17,986 INFO: DB init complete.
2026-08-13 20:40:17,986 INFO: wsgi.py ready.
2026-08-13 20:40:17,989 INFO: >> GET /
2026-08-13 20:40:17,991 DEBUG: Using selector: EpollSelector
2026-08-13 20:40:18,001 INFO: GET /
2026-08-13 20:40:18,004 WARNING: GET / -> 404
2026-08-13 20:40:18,013 INFO: << 404 /
2026-08-13 22:10:13,005 INFO: wsgi.py loading...
2026-08-13 22:10:13,007 INFO: Importing app.main...
2026-08-13 22:10:16,683 INFO: app.main imported successfully.
2026-08-13 22:10:16,683 INFO: Running DB init...
2026-08-13 22:10:16,750 INFO: All tables OK.
2026-08-13 22:10:16,896 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 22:10:16,899 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,904 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,907 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,912 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,915 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,920 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:10:16,927 INFO: Dip chart data seeded.
2026-08-13 22:10:16,927 INFO: DB init complete.
2026-08-13 22:10:16,928 INFO: wsgi.py ready.
2026-08-13 22:10:16,931 INFO: >> GET /
2026-08-13 22:10:16,933 DEBUG: Using selector: EpollSelector
2026-08-13 22:10:16,944 INFO: GET /
2026-08-13 22:10:16,946 WARNING: GET / -> 404
2026-08-13 22:10:16,957 INFO: << 404 /
2026-08-13 22:35:57,973 INFO: wsgi.py loading...
2026-08-13 22:35:57,973 INFO: Importing app.main...
2026-08-13 22:35:59,759 INFO: app.main imported successfully.
2026-08-13 22:35:59,759 INFO: Running DB init...
2026-08-13 22:35:59,823 INFO: All tables OK.
2026-08-13 22:35:59,960 INFO: Migration OK: allowances ENUM+DAILY
2026-08-13 22:35:59,963 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,965 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,968 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,971 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,974 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,976 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-13 22:35:59,982 INFO: Dip chart data seeded.
2026-08-13 22:35:59,982 INFO: DB init complete.
2026-08-13 22:35:59,982 INFO: wsgi.py ready.
2026-08-13 22:35:59,986 INFO: >> GET /
2026-08-13 22:35:59,987 DEBUG: Using selector: EpollSelector
2026-08-13 22:35:59,998 INFO: GET /
2026-08-13 22:36:00,000 WARNING: GET / -> 404
2026-08-13 22:36:00,010 INFO: << 404 /
2026-08-14 02:17:08,107 INFO: wsgi.py loading...
2026-08-14 02:17:08,107 INFO: Importing app.main...
2026-08-14 02:17:09,982 INFO: app.main imported successfully.
2026-08-14 02:17:09,983 INFO: Running DB init...
2026-08-14 02:17:10,042 INFO: All tables OK.
2026-08-14 02:17:10,173 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 02:17:10,176 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,178 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,180 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,182 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,185 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,187 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:17:10,195 INFO: Dip chart data seeded.
2026-08-14 02:17:10,195 INFO: DB init complete.
2026-08-14 02:17:10,195 INFO: wsgi.py ready.
2026-08-14 02:17:10,199 INFO: >> GET /
2026-08-14 02:17:10,200 DEBUG: Using selector: EpollSelector
2026-08-14 02:17:10,211 INFO: GET /
2026-08-14 02:17:10,213 WARNING: GET / -> 404
2026-08-14 02:17:10,222 INFO: << 404 /
2026-08-14 02:48:00,997 INFO: wsgi.py loading...
2026-08-14 02:48:00,997 INFO: Importing app.main...
2026-08-14 02:48:02,805 INFO: app.main imported successfully.
2026-08-14 02:48:02,805 INFO: Running DB init...
2026-08-14 02:48:02,864 INFO: All tables OK.
2026-08-14 02:48:03,005 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 02:48:03,008 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,011 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,013 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,017 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,020 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,023 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 02:48:03,030 INFO: Dip chart data seeded.
2026-08-14 02:48:03,030 INFO: DB init complete.
2026-08-14 02:48:03,031 INFO: wsgi.py ready.
2026-08-14 02:48:03,034 INFO: >> GET /
2026-08-14 02:48:03,036 DEBUG: Using selector: EpollSelector
2026-08-14 02:48:03,047 INFO: GET /
2026-08-14 02:48:03,049 WARNING: GET / -> 404
2026-08-14 02:48:03,059 INFO: << 404 /
2026-08-14 09:29:25,504 INFO: wsgi.py loading...
2026-08-14 09:29:25,505 INFO: Importing app.main...
2026-08-14 09:29:29,473 INFO: app.main imported successfully.
2026-08-14 09:29:29,474 INFO: Running DB init...
2026-08-14 09:29:29,543 INFO: All tables OK.
2026-08-14 09:29:29,695 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 09:29:29,698 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,702 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,705 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,708 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,712 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,714 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 09:29:29,723 INFO: Dip chart data seeded.
2026-08-14 09:29:29,723 INFO: DB init complete.
2026-08-14 09:29:29,723 INFO: wsgi.py ready.
2026-08-14 09:29:29,727 INFO: >> GET /
2026-08-14 09:29:29,729 DEBUG: Using selector: EpollSelector
2026-08-14 09:29:29,747 INFO: GET /
2026-08-14 09:29:29,750 WARNING: GET / -> 404
2026-08-14 09:29:29,761 INFO: << 404 /
2026-08-14 10:39:36,954 INFO: wsgi.py loading...
2026-08-14 10:39:36,954 INFO: Importing app.main...
2026-08-14 10:39:38,773 INFO: app.main imported successfully.
2026-08-14 10:39:38,773 INFO: Running DB init...
2026-08-14 10:39:38,831 INFO: All tables OK.
2026-08-14 10:39:38,969 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 10:39:38,971 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,974 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,976 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,979 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,981 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,984 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 10:39:38,992 INFO: Dip chart data seeded.
2026-08-14 10:39:38,992 INFO: DB init complete.
2026-08-14 10:39:38,992 INFO: wsgi.py ready.
2026-08-14 10:39:38,995 INFO: >> GET /
2026-08-14 10:39:38,996 DEBUG: Using selector: EpollSelector
2026-08-14 10:39:38,997 INFO: >> GET /
2026-08-14 10:39:38,998 DEBUG: Using selector: EpollSelector
2026-08-14 10:39:39,007 INFO: GET /
2026-08-14 10:39:39,008 INFO: GET /
2026-08-14 10:39:39,010 WARNING: GET / -> 404
2026-08-14 10:39:39,011 WARNING: GET / -> 404
2026-08-14 10:39:39,020 INFO: << 404 /
2026-08-14 10:39:39,020 INFO: << 404 /
2026-08-14 13:29:27,105 INFO: wsgi.py loading...
2026-08-14 13:29:27,107 INFO: Importing app.main...
2026-08-14 13:29:29,158 INFO: app.main imported successfully.
2026-08-14 13:29:29,158 INFO: Running DB init...
2026-08-14 13:29:29,224 INFO: All tables OK.
2026-08-14 13:29:29,380 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 13:29:29,389 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,392 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,395 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,397 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,407 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,410 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 13:29:29,418 INFO: Dip chart data seeded.
2026-08-14 13:29:29,418 INFO: DB init complete.
2026-08-14 13:29:29,418 INFO: wsgi.py ready.
2026-08-14 13:29:29,422 INFO: >> GET /robots.txt
2026-08-14 13:29:29,423 DEBUG: Using selector: EpollSelector
2026-08-14 13:29:29,434 INFO: GET /robots.txt
2026-08-14 13:29:29,438 WARNING: GET /robots.txt -> 404
2026-08-14 13:29:29,450 INFO: << 404 /robots.txt
2026-08-14 13:29:29,669 INFO: >> GET /
2026-08-14 13:29:29,669 DEBUG: Using selector: EpollSelector
2026-08-14 13:29:29,670 INFO: GET /
2026-08-14 13:29:29,671 WARNING: GET / -> 404
2026-08-14 13:29:29,674 INFO: << 404 /
2026-08-14 18:13:12,573 INFO: wsgi.py loading...
2026-08-14 18:13:12,573 INFO: Importing app.main...
2026-08-14 18:13:16,209 INFO: app.main imported successfully.
2026-08-14 18:13:16,209 INFO: Running DB init...
2026-08-14 18:13:16,270 INFO: All tables OK.
2026-08-14 18:13:16,397 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 18:13:16,399 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,402 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,404 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,406 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,408 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,411 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:13:16,419 INFO: Dip chart data seeded.
2026-08-14 18:13:16,419 INFO: DB init complete.
2026-08-14 18:13:16,419 INFO: wsgi.py ready.
2026-08-14 18:13:16,422 INFO: >> GET /
2026-08-14 18:13:16,424 DEBUG: Using selector: EpollSelector
2026-08-14 18:13:16,434 INFO: GET /
2026-08-14 18:13:16,436 WARNING: GET / -> 404
2026-08-14 18:13:16,445 INFO: << 404 /
2026-08-14 18:28:08,596 INFO: wsgi.py loading...
2026-08-14 18:28:08,596 INFO: Importing app.main...
2026-08-14 18:28:10,417 INFO: app.main imported successfully.
2026-08-14 18:28:10,417 INFO: Running DB init...
2026-08-14 18:28:10,479 INFO: All tables OK.
2026-08-14 18:28:10,632 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 18:28:10,635 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,638 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,641 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,644 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,647 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,651 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 18:28:10,658 INFO: Dip chart data seeded.
2026-08-14 18:28:10,659 INFO: DB init complete.
2026-08-14 18:28:10,659 INFO: wsgi.py ready.
2026-08-14 18:28:10,663 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-14 18:28:10,664 DEBUG: Using selector: EpollSelector
2026-08-14 18:28:10,676 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-14 18:28:10,680 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-14 18:28:10,690 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-14 21:45:58,145 INFO: wsgi.py loading...
2026-08-14 21:45:58,145 INFO: Importing app.main...
2026-08-14 21:46:00,751 INFO: app.main imported successfully.
2026-08-14 21:46:00,751 INFO: Running DB init...
2026-08-14 21:46:00,813 INFO: All tables OK.
2026-08-14 21:46:00,950 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 21:46:00,953 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,955 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,958 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,960 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,963 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,966 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 21:46:00,973 INFO: Dip chart data seeded.
2026-08-14 21:46:00,973 INFO: DB init complete.
2026-08-14 21:46:00,973 INFO: wsgi.py ready.
2026-08-14 21:46:00,977 INFO: >> GET /
2026-08-14 21:46:00,978 DEBUG: Using selector: EpollSelector
2026-08-14 21:46:00,989 INFO: GET /
2026-08-14 21:46:00,992 WARNING: GET / -> 404
2026-08-14 21:46:01,001 INFO: << 404 /
2026-08-14 23:23:57,841 INFO: wsgi.py loading...
2026-08-14 23:23:57,841 INFO: Importing app.main...
2026-08-14 23:23:59,624 INFO: app.main imported successfully.
2026-08-14 23:23:59,624 INFO: Running DB init...
2026-08-14 23:23:59,686 INFO: All tables OK.
2026-08-14 23:23:59,821 INFO: Migration OK: allowances ENUM+DAILY
2026-08-14 23:23:59,823 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,826 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,828 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,830 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,833 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,835 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-14 23:23:59,843 INFO: Dip chart data seeded.
2026-08-14 23:23:59,844 INFO: DB init complete.
2026-08-14 23:23:59,844 INFO: wsgi.py ready.
2026-08-14 23:23:59,847 INFO: >> GET /wp-json/
2026-08-14 23:23:59,848 DEBUG: Using selector: EpollSelector
2026-08-14 23:23:59,858 INFO: GET /wp-json/
2026-08-14 23:23:59,861 WARNING: GET /wp-json/ -> 404
2026-08-14 23:23:59,870 INFO: << 404 /wp-json/
2026-08-15 00:52:50,120 INFO: wsgi.py loading...
2026-08-15 00:52:50,120 INFO: Importing app.main...
2026-08-15 00:52:52,020 INFO: app.main imported successfully.
2026-08-15 00:52:52,020 INFO: Running DB init...
2026-08-15 00:52:52,084 INFO: All tables OK.
2026-08-15 00:52:52,220 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 00:52:52,223 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,225 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,228 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,230 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,233 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,236 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 00:52:52,243 INFO: Dip chart data seeded.
2026-08-15 00:52:52,244 INFO: DB init complete.
2026-08-15 00:52:52,244 INFO: wsgi.py ready.
2026-08-15 00:52:52,247 INFO: >> GET /
2026-08-15 00:52:52,248 DEBUG: Using selector: EpollSelector
2026-08-15 00:52:52,260 INFO: GET /
2026-08-15 00:52:52,262 WARNING: GET / -> 404
2026-08-15 00:52:52,272 INFO: << 404 /
2026-08-15 05:10:05,533 INFO: wsgi.py loading...
2026-08-15 05:10:05,533 INFO: Importing app.main...
2026-08-15 05:10:09,079 INFO: app.main imported successfully.
2026-08-15 05:10:09,079 INFO: Running DB init...
2026-08-15 05:10:09,140 INFO: All tables OK.
2026-08-15 05:10:09,270 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 05:10:09,272 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,274 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,276 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,279 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,281 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,283 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 05:10:09,291 INFO: Dip chart data seeded.
2026-08-15 05:10:09,292 INFO: DB init complete.
2026-08-15 05:10:09,292 INFO: wsgi.py ready.
2026-08-15 05:10:09,295 INFO: >> GET /
2026-08-15 05:10:09,296 DEBUG: Using selector: EpollSelector
2026-08-15 05:10:09,296 INFO: >> GET /robots.txt
2026-08-15 05:10:09,298 DEBUG: Using selector: EpollSelector
2026-08-15 05:10:09,306 INFO: GET /
2026-08-15 05:10:09,307 INFO: GET /robots.txt
2026-08-15 05:10:09,309 WARNING: GET / -> 404
2026-08-15 05:10:09,310 WARNING: GET /robots.txt -> 404
2026-08-15 05:10:09,318 INFO: << 404 /robots.txt
2026-08-15 05:10:09,318 INFO: << 404 /
2026-08-15 09:00:02,413 INFO: wsgi.py loading...
2026-08-15 09:00:02,414 INFO: Importing app.main...
2026-08-15 09:00:05,972 INFO: app.main imported successfully.
2026-08-15 09:00:05,972 INFO: Running DB init...
2026-08-15 09:00:06,032 INFO: All tables OK.
2026-08-15 09:00:06,167 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 09:00:06,169 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,171 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,174 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,176 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,179 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,182 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:00:06,191 INFO: Dip chart data seeded.
2026-08-15 09:00:06,191 INFO: DB init complete.
2026-08-15 09:00:06,191 INFO: wsgi.py ready.
2026-08-15 09:00:06,194 INFO: >> GET /
2026-08-15 09:00:06,195 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,206 INFO: GET /
2026-08-15 09:00:06,208 WARNING: GET / -> 404
2026-08-15 09:00:06,217 INFO: << 404 /
2026-08-15 09:00:06,220 INFO: >> GET //wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,220 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,220 INFO: GET //wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,222 WARNING: GET //wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,224 INFO: << 404 //wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,230 INFO: >> GET //xmlrpc.php
2026-08-15 09:00:06,230 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,230 INFO: GET //xmlrpc.php
2026-08-15 09:00:06,232 WARNING: GET //xmlrpc.php -> 404
2026-08-15 09:00:06,234 INFO: << 404 //xmlrpc.php
2026-08-15 09:00:06,242 INFO: >> GET /
2026-08-15 09:00:06,242 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,242 INFO: GET /
2026-08-15 09:00:06,243 WARNING: GET / -> 404
2026-08-15 09:00:06,246 INFO: << 404 /
2026-08-15 09:00:06,254 INFO: >> GET //blog/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,254 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,254 INFO: GET //blog/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,256 WARNING: GET //blog/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,258 INFO: << 404 //blog/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,262 INFO: >> GET //web/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,262 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,262 INFO: GET //web/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,264 WARNING: GET //web/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,266 INFO: << 404 //web/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,269 INFO: >> GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,269 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,269 INFO: GET //wordpress/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,271 WARNING: GET //wordpress/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,273 INFO: << 404 //wordpress/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,294 INFO: >> GET //website/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,294 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,294 INFO: GET //website/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,296 WARNING: GET //website/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,298 INFO: << 404 //website/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,302 INFO: >> GET //wp/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,302 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,303 INFO: GET //wp/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,304 WARNING: GET //wp/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,306 INFO: << 404 //wp/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,309 INFO: >> GET //news/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,309 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,309 INFO: GET //news/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,311 WARNING: GET //news/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,313 INFO: << 404 //news/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,318 INFO: >> GET //2018/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,318 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,319 INFO: GET //2018/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,320 WARNING: GET //2018/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,322 INFO: << 404 //2018/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,328 INFO: >> GET //2019/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,328 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,329 INFO: GET //2019/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,330 WARNING: GET //2019/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,332 INFO: << 404 //2019/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,335 INFO: >> GET //shop/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,335 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,336 INFO: GET //shop/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,337 WARNING: GET //shop/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,339 INFO: << 404 //shop/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,346 INFO: >> GET //wp1/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,346 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,347 INFO: GET //wp1/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,348 WARNING: GET //wp1/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,350 INFO: << 404 //wp1/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,355 INFO: >> GET //test/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,355 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,356 INFO: GET //test/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,357 WARNING: GET //test/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,359 INFO: << 404 //test/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,363 INFO: >> GET //media/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,364 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,364 INFO: GET //media/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,365 WARNING: GET //media/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,367 INFO: << 404 //media/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,373 INFO: >> GET //wp2/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,374 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,374 INFO: GET //wp2/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,375 WARNING: GET //wp2/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,377 INFO: << 404 //wp2/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,384 INFO: >> GET //site/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,384 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,384 INFO: GET //site/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,386 WARNING: GET //site/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,388 INFO: << 404 //site/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,395 INFO: >> GET //cms/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,395 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,395 INFO: GET //cms/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,397 WARNING: GET //cms/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,399 INFO: << 404 //cms/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,405 INFO: >> GET //sito/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,405 DEBUG: Using selector: EpollSelector
2026-08-15 09:00:06,405 INFO: GET //sito/wp-includes/wlwmanifest.xml
2026-08-15 09:00:06,407 WARNING: GET //sito/wp-includes/wlwmanifest.xml -> 404
2026-08-15 09:00:06,409 INFO: << 404 //sito/wp-includes/wlwmanifest.xml
2026-08-15 09:57:00,932 INFO: wsgi.py loading...
2026-08-15 09:57:00,932 INFO: Importing app.main...
2026-08-15 09:57:02,833 INFO: app.main imported successfully.
2026-08-15 09:57:02,833 INFO: Running DB init...
2026-08-15 09:57:02,893 INFO: All tables OK.
2026-08-15 09:57:03,028 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 09:57:03,031 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,033 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,035 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,038 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,040 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,042 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 09:57:03,051 INFO: Dip chart data seeded.
2026-08-15 09:57:03,051 INFO: DB init complete.
2026-08-15 09:57:03,051 INFO: wsgi.py ready.
2026-08-15 09:57:03,055 INFO: >> POST /wp-json/batch/v1
2026-08-15 09:57:03,056 DEBUG: Using selector: EpollSelector
2026-08-15 09:57:03,067 INFO: POST /wp-json/batch/v1
2026-08-15 09:57:03,070 WARNING: POST /wp-json/batch/v1 -> 404
2026-08-15 09:57:03,081 INFO: << 404 /wp-json/batch/v1
2026-08-15 09:57:03,327 INFO: >> POST /
2026-08-15 09:57:03,327 DEBUG: Using selector: EpollSelector
2026-08-15 09:57:03,327 INFO: POST /
2026-08-15 09:57:03,328 WARNING: POST / -> 404
2026-08-15 09:57:03,331 INFO: << 404 /
2026-08-15 10:18:26,348 INFO: wsgi.py loading...
2026-08-15 10:18:26,348 INFO: Importing app.main...
2026-08-15 10:18:28,203 INFO: app.main imported successfully.
2026-08-15 10:18:28,203 INFO: Running DB init...
2026-08-15 10:18:28,266 INFO: All tables OK.
2026-08-15 10:18:28,400 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 10:18:28,403 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,405 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,408 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,410 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,412 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,414 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 10:18:28,422 INFO: Dip chart data seeded.
2026-08-15 10:18:28,422 INFO: DB init complete.
2026-08-15 10:18:28,422 INFO: wsgi.py ready.
2026-08-15 10:18:28,426 INFO: >> GET /
2026-08-15 10:18:28,427 DEBUG: Using selector: EpollSelector
2026-08-15 10:18:28,428 INFO: >> GET /robots.txt
2026-08-15 10:18:28,429 DEBUG: Using selector: EpollSelector
2026-08-15 10:18:28,438 INFO: GET /
2026-08-15 10:18:28,439 INFO: GET /robots.txt
2026-08-15 10:18:28,440 WARNING: GET / -> 404
2026-08-15 10:18:28,442 WARNING: GET /robots.txt -> 404
2026-08-15 10:18:28,450 INFO: << 404 /
2026-08-15 10:18:28,450 INFO: << 404 /robots.txt
2026-08-15 10:23:35,442 ERROR: Exception during reset or similar
Traceback (most recent call last):
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 986, in _finalize_fairy
    fairy._reset(
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/pool/base.py", line 1441, in _reset
    pool._dialect.do_rollback(self)
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib64/python3.11/site-packages/sqlalchemy/engine/default.py", line 712, in do_rollback
    dbapi_connection.rollback()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 512, in rollback
    self._read_ok_packet()
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 472, in _read_ok_packet
    pkt = self._read_packet()
          ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 772, in _read_packet
    packet_header = self._read_bytes(4)
                    ^^^^^^^^^^^^^^^^^^^
  File "/home/docuralk/virtualenv/api.fuelops.docura.lk/3.11/lib/python3.11/site-packages/pymysql/connections.py", line 826, in _read_bytes
    raise err.OperationalError(
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
2026-08-15 17:33:33,650 INFO: wsgi.py loading...
2026-08-15 17:33:33,650 INFO: Importing app.main...
2026-08-15 17:33:37,370 INFO: app.main imported successfully.
2026-08-15 17:33:37,370 INFO: Running DB init...
2026-08-15 17:33:37,431 INFO: All tables OK.
2026-08-15 17:33:37,569 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 17:33:37,572 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,576 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,578 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,581 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,584 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,587 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 17:33:37,596 INFO: Dip chart data seeded.
2026-08-15 17:33:37,596 INFO: DB init complete.
2026-08-15 17:33:37,596 INFO: wsgi.py ready.
2026-08-15 17:33:37,600 INFO: >> GET /
2026-08-15 17:33:37,602 DEBUG: Using selector: EpollSelector
2026-08-15 17:33:37,614 INFO: GET /
2026-08-15 17:33:37,616 WARNING: GET / -> 404
2026-08-15 17:33:37,626 INFO: << 404 /
2026-08-15 22:41:48,609 INFO: wsgi.py loading...
2026-08-15 22:41:48,610 INFO: Importing app.main...
2026-08-15 22:41:51,277 INFO: app.main imported successfully.
2026-08-15 22:41:51,277 INFO: Running DB init...
2026-08-15 22:41:51,340 INFO: All tables OK.
2026-08-15 22:41:51,480 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 22:41:51,483 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,485 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,488 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,490 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,493 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,496 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 22:41:51,503 INFO: Dip chart data seeded.
2026-08-15 22:41:51,503 INFO: DB init complete.
2026-08-15 22:41:51,504 INFO: wsgi.py ready.
2026-08-15 22:41:51,507 INFO: >> GET /
2026-08-15 22:41:51,508 DEBUG: Using selector: EpollSelector
2026-08-15 22:41:51,519 INFO: GET /
2026-08-15 22:41:51,522 WARNING: GET / -> 404
2026-08-15 22:41:51,532 INFO: << 404 /
2026-08-15 23:00:53,907 INFO: wsgi.py loading...
2026-08-15 23:00:53,907 INFO: Importing app.main...
2026-08-15 23:00:55,718 INFO: app.main imported successfully.
2026-08-15 23:00:55,718 INFO: Running DB init...
2026-08-15 23:00:55,778 INFO: All tables OK.
2026-08-15 23:00:55,926 INFO: Migration OK: allowances ENUM+DAILY
2026-08-15 23:00:55,929 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,937 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,940 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,942 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,945 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,953 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-15 23:00:55,961 INFO: Dip chart data seeded.
2026-08-15 23:00:55,961 INFO: DB init complete.
2026-08-15 23:00:55,961 INFO: wsgi.py ready.
2026-08-15 23:00:55,965 INFO: >> GET /
2026-08-15 23:00:55,966 DEBUG: Using selector: EpollSelector
2026-08-15 23:00:55,976 INFO: GET /
2026-08-15 23:00:55,979 WARNING: GET / -> 404
2026-08-15 23:00:55,988 INFO: << 404 /
2026-08-15 23:01:00,214 INFO: >> GET /favicon.ico
2026-08-15 23:01:00,214 DEBUG: Using selector: EpollSelector
2026-08-15 23:01:00,215 INFO: GET /favicon.ico
2026-08-15 23:01:00,216 WARNING: GET /favicon.ico -> 404
2026-08-15 23:01:00,219 INFO: << 404 /favicon.ico
2026-08-16 07:01:40,526 INFO: wsgi.py loading...
2026-08-16 07:01:40,527 INFO: Importing app.main...
2026-08-16 07:01:44,368 INFO: app.main imported successfully.
2026-08-16 07:01:44,368 INFO: Running DB init...
2026-08-16 07:01:44,435 INFO: All tables OK.
2026-08-16 07:01:44,587 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 07:01:44,596 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,599 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,602 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,605 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,614 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,617 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 07:01:44,624 INFO: Dip chart data seeded.
2026-08-16 07:01:44,625 INFO: DB init complete.
2026-08-16 07:01:44,625 INFO: wsgi.py ready.
2026-08-16 07:01:44,628 INFO: >> GET /robots.txt
2026-08-16 07:01:44,630 DEBUG: Using selector: EpollSelector
2026-08-16 07:01:44,640 INFO: GET /robots.txt
2026-08-16 07:01:44,643 WARNING: GET /robots.txt -> 404
2026-08-16 07:01:44,652 INFO: << 404 /robots.txt
2026-08-16 09:36:31,768 INFO: wsgi.py loading...
2026-08-16 09:36:31,769 INFO: Importing app.main...
2026-08-16 09:36:33,686 INFO: app.main imported successfully.
2026-08-16 09:36:33,686 INFO: Running DB init...
2026-08-16 09:36:33,747 INFO: All tables OK.
2026-08-16 09:36:33,882 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 09:36:33,884 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,887 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,889 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,891 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,894 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,896 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:36:33,905 INFO: Dip chart data seeded.
2026-08-16 09:36:33,905 INFO: DB init complete.
2026-08-16 09:36:33,905 INFO: wsgi.py ready.
2026-08-16 09:36:33,908 INFO: >> GET /robots.txt
2026-08-16 09:36:33,910 DEBUG: Using selector: EpollSelector
2026-08-16 09:36:33,920 INFO: GET /robots.txt
2026-08-16 09:36:33,923 WARNING: GET /robots.txt -> 404
2026-08-16 09:36:33,932 INFO: << 404 /robots.txt
2026-08-16 09:51:56,618 INFO: wsgi.py loading...
2026-08-16 09:51:56,618 INFO: Importing app.main...
2026-08-16 09:51:58,462 INFO: app.main imported successfully.
2026-08-16 09:51:58,462 INFO: Running DB init...
2026-08-16 09:51:58,525 INFO: All tables OK.
2026-08-16 09:51:58,672 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 09:51:58,675 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,678 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,681 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,684 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,687 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,690 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 09:51:58,697 INFO: Dip chart data seeded.
2026-08-16 09:51:58,697 INFO: DB init complete.
2026-08-16 09:51:58,698 INFO: wsgi.py ready.
2026-08-16 09:51:58,701 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-16 09:51:58,703 DEBUG: Using selector: EpollSelector
2026-08-16 09:51:58,715 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-16 09:51:58,718 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-16 09:51:58,728 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-16 13:44:29,550 INFO: wsgi.py loading...
2026-08-16 13:44:29,551 INFO: Importing app.main...
2026-08-16 13:44:33,259 INFO: app.main imported successfully.
2026-08-16 13:44:33,259 INFO: Running DB init...
2026-08-16 13:44:33,319 INFO: All tables OK.
2026-08-16 13:44:33,464 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 13:44:33,467 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,469 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,472 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,474 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,477 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,480 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 13:44:33,488 INFO: Dip chart data seeded.
2026-08-16 13:44:33,489 INFO: DB init complete.
2026-08-16 13:44:33,489 INFO: wsgi.py ready.
2026-08-16 13:44:33,492 INFO: >> GET /
2026-08-16 13:44:33,494 DEBUG: Using selector: EpollSelector
2026-08-16 13:44:33,504 INFO: GET /
2026-08-16 13:44:33,507 WARNING: GET / -> 404
2026-08-16 13:44:33,516 INFO: << 404 /
2026-08-16 16:19:11,451 INFO: wsgi.py loading...
2026-08-16 16:19:11,451 INFO: Importing app.main...
2026-08-16 16:19:13,395 INFO: app.main imported successfully.
2026-08-16 16:19:13,395 INFO: Running DB init...
2026-08-16 16:19:13,458 INFO: All tables OK.
2026-08-16 16:19:13,592 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 16:19:13,595 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,597 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,600 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,603 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,607 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,609 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 16:19:13,618 INFO: Dip chart data seeded.
2026-08-16 16:19:13,618 INFO: DB init complete.
2026-08-16 16:19:13,618 INFO: wsgi.py ready.
2026-08-16 16:19:13,621 INFO: >> GET /
2026-08-16 16:19:13,623 DEBUG: Using selector: EpollSelector
2026-08-16 16:19:13,633 INFO: GET /
2026-08-16 16:19:13,635 WARNING: GET / -> 404
2026-08-16 16:19:13,644 INFO: << 404 /
2026-08-16 21:02:17,942 INFO: wsgi.py loading...
2026-08-16 21:02:17,943 INFO: Importing app.main...
2026-08-16 21:02:21,702 INFO: app.main imported successfully.
2026-08-16 21:02:21,702 INFO: Running DB init...
2026-08-16 21:02:21,761 INFO: All tables OK.
2026-08-16 21:02:21,899 INFO: Migration OK: allowances ENUM+DAILY
2026-08-16 21:02:21,901 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,904 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,913 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,916 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,918 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,921 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-16 21:02:21,928 INFO: Dip chart data seeded.
2026-08-16 21:02:21,928 INFO: DB init complete.
2026-08-16 21:02:21,929 INFO: wsgi.py ready.
2026-08-16 21:02:21,932 INFO: >> GET /robots.txt
2026-08-16 21:02:21,933 DEBUG: Using selector: EpollSelector
2026-08-16 21:02:21,943 INFO: GET /robots.txt
2026-08-16 21:02:21,946 WARNING: GET /robots.txt -> 404
2026-08-16 21:02:21,955 INFO: << 404 /robots.txt
2026-08-17 01:11:47,479 INFO: wsgi.py loading...
2026-08-17 01:11:47,479 INFO: Importing app.main...
2026-08-17 01:11:49,329 INFO: app.main imported successfully.
2026-08-17 01:11:49,330 INFO: Running DB init...
2026-08-17 01:11:49,392 INFO: All tables OK.
2026-08-17 01:11:49,525 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 01:11:49,527 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,530 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,532 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,534 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,536 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,539 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 01:11:49,547 INFO: Dip chart data seeded.
2026-08-17 01:11:49,547 INFO: DB init complete.
2026-08-17 01:11:49,547 INFO: wsgi.py ready.
2026-08-17 01:11:49,550 INFO: >> GET /robots.txt
2026-08-17 01:11:49,551 DEBUG: Using selector: EpollSelector
2026-08-17 01:11:49,561 INFO: GET /robots.txt
2026-08-17 01:11:49,564 WARNING: GET /robots.txt -> 404
2026-08-17 01:11:49,573 INFO: << 404 /robots.txt
2026-08-17 05:01:21,385 INFO: wsgi.py loading...
2026-08-17 05:01:21,386 INFO: Importing app.main...
2026-08-17 05:01:24,009 INFO: app.main imported successfully.
2026-08-17 05:01:24,009 INFO: Running DB init...
2026-08-17 05:01:24,069 INFO: All tables OK.
2026-08-17 05:01:24,203 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 05:01:24,205 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,207 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,210 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,212 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,214 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,216 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 05:01:24,224 INFO: Dip chart data seeded.
2026-08-17 05:01:24,225 INFO: DB init complete.
2026-08-17 05:01:24,225 INFO: wsgi.py ready.
2026-08-17 05:01:24,228 INFO: >> GET /
2026-08-17 05:01:24,229 DEBUG: Using selector: EpollSelector
2026-08-17 05:01:24,240 INFO: GET /
2026-08-17 05:01:24,243 WARNING: GET / -> 404
2026-08-17 05:01:24,251 INFO: << 404 /
2026-08-17 08:22:26,369 INFO: wsgi.py loading...
2026-08-17 08:22:26,370 INFO: Importing app.main...
2026-08-17 08:22:30,043 INFO: app.main imported successfully.
2026-08-17 08:22:30,043 INFO: Running DB init...
2026-08-17 08:22:30,131 INFO: All tables OK.
2026-08-17 08:22:30,295 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 08:22:30,297 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,307 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,310 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,313 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,315 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,318 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 08:22:30,326 INFO: Dip chart data seeded.
2026-08-17 08:22:30,326 INFO: DB init complete.
2026-08-17 08:22:30,326 INFO: wsgi.py ready.
2026-08-17 08:22:30,330 INFO: >> GET /
2026-08-17 08:22:30,331 DEBUG: Using selector: EpollSelector
2026-08-17 08:22:30,342 INFO: GET /
2026-08-17 08:22:30,345 WARNING: GET / -> 404
2026-08-17 08:22:30,362 INFO: << 404 /
2026-08-17 08:22:34,999 INFO: >> GET /
2026-08-17 08:22:35,000 DEBUG: Using selector: EpollSelector
2026-08-17 08:22:35,010 INFO: GET /
2026-08-17 08:22:35,013 WARNING: GET / -> 404
2026-08-17 08:22:35,022 INFO: << 404 /
2026-08-17 08:22:44,875 INFO: >> GET /favicon.ico
2026-08-17 08:22:44,876 DEBUG: Using selector: EpollSelector
2026-08-17 08:22:44,887 INFO: GET /favicon.ico
2026-08-17 08:22:44,890 WARNING: GET /favicon.ico -> 404
2026-08-17 08:22:44,899 INFO: << 404 /favicon.ico
2026-08-17 10:29:01,399 INFO: wsgi.py loading...
2026-08-17 10:29:01,400 INFO: Importing app.main...
2026-08-17 10:29:03,309 INFO: app.main imported successfully.
2026-08-17 10:29:03,310 INFO: Running DB init...
2026-08-17 10:29:03,376 INFO: All tables OK.
2026-08-17 10:29:03,507 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 10:29:03,510 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,512 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,515 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,518 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,521 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,524 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 10:29:03,533 INFO: Dip chart data seeded.
2026-08-17 10:29:03,533 INFO: DB init complete.
2026-08-17 10:29:03,533 INFO: wsgi.py ready.
2026-08-17 10:29:03,536 INFO: >> GET /
2026-08-17 10:29:03,538 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:03,548 INFO: GET /
2026-08-17 10:29:03,551 WARNING: GET / -> 404
2026-08-17 10:29:03,560 INFO: << 404 /
2026-08-17 10:29:06,169 INFO: >> GET /phpinfo.php
2026-08-17 10:29:06,169 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:06,169 INFO: GET /phpinfo.php
2026-08-17 10:29:06,171 WARNING: GET /phpinfo.php -> 404
2026-08-17 10:29:06,173 INFO: << 404 /phpinfo.php
2026-08-17 10:29:08,777 INFO: >> GET /test.php
2026-08-17 10:29:08,779 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:08,789 INFO: GET /test.php
2026-08-17 10:29:08,792 WARNING: GET /test.php -> 404
2026-08-17 10:29:08,801 INFO: << 404 /test.php
2026-08-17 10:29:11,445 INFO: >> GET /_profiler/phpinfo
2026-08-17 10:29:11,446 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:11,457 INFO: GET /_profiler/phpinfo
2026-08-17 10:29:11,474 WARNING: GET /_profiler/phpinfo -> 404
2026-08-17 10:29:11,483 INFO: << 404 /_profiler/phpinfo
2026-08-17 10:29:14,081 INFO: >> GET /.env/.env.bak
2026-08-17 10:29:14,081 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:14,081 INFO: GET /.env/.env.bak
2026-08-17 10:29:14,083 WARNING: GET /.env/.env.bak -> 404
2026-08-17 10:29:14,086 INFO: << 404 /.env/.env.bak
2026-08-17 10:29:16,756 INFO: >> GET /
2026-08-17 10:29:16,757 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:16,767 INFO: GET /
2026-08-17 10:29:16,770 WARNING: GET / -> 404
2026-08-17 10:29:16,779 INFO: << 404 /
2026-08-17 10:29:19,401 INFO: >> GET /index.php
2026-08-17 10:29:19,403 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:19,412 INFO: GET /index.php
2026-08-17 10:29:19,416 WARNING: GET /index.php -> 404
2026-08-17 10:29:19,424 INFO: << 404 /index.php
2026-08-17 10:29:22,033 INFO: >> GET /.aws/credentials
2026-08-17 10:29:22,035 DEBUG: Using selector: EpollSelector
2026-08-17 10:29:22,045 INFO: GET /.aws/credentials
2026-08-17 10:29:22,048 WARNING: GET /.aws/credentials -> 404
2026-08-17 10:29:22,057 INFO: << 404 /.aws/credentials
2026-08-17 10:32:33,786 INFO: >> GET /robots.txt
2026-08-17 10:32:33,787 DEBUG: Using selector: EpollSelector
2026-08-17 10:32:33,797 INFO: GET /robots.txt
2026-08-17 10:32:33,800 WARNING: GET /robots.txt -> 404
2026-08-17 10:32:33,828 INFO: << 404 /robots.txt
2026-08-17 14:10:33,618 INFO: wsgi.py loading...
2026-08-17 14:10:33,619 INFO: Importing app.main...
2026-08-17 14:10:37,083 INFO: app.main imported successfully.
2026-08-17 14:10:37,084 INFO: Running DB init...
2026-08-17 14:10:37,142 INFO: All tables OK.
2026-08-17 14:10:37,293 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 14:10:37,296 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,298 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,300 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,303 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,305 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,308 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 14:10:37,316 INFO: Dip chart data seeded.
2026-08-17 14:10:37,316 INFO: DB init complete.
2026-08-17 14:10:37,316 INFO: wsgi.py ready.
2026-08-17 14:10:37,319 INFO: >> GET /
2026-08-17 14:10:37,321 DEBUG: Using selector: EpollSelector
2026-08-17 14:10:37,332 INFO: GET /
2026-08-17 14:10:37,334 WARNING: GET / -> 404
2026-08-17 14:10:37,343 INFO: << 404 /
2026-08-17 16:15:21,820 INFO: wsgi.py loading...
2026-08-17 16:15:21,821 INFO: Importing app.main...
2026-08-17 16:15:23,771 INFO: app.main imported successfully.
2026-08-17 16:15:23,772 INFO: Running DB init...
2026-08-17 16:15:23,831 INFO: All tables OK.
2026-08-17 16:15:23,980 INFO: Migration OK: allowances ENUM+DAILY
2026-08-17 16:15:23,983 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:23,985 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:23,988 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:23,990 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:23,993 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:23,996 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-17 16:15:24,003 INFO: Dip chart data seeded.
2026-08-17 16:15:24,003 INFO: DB init complete.
2026-08-17 16:15:24,003 INFO: wsgi.py ready.
2026-08-17 16:15:24,007 INFO: >> GET /
2026-08-17 16:15:24,009 DEBUG: Using selector: EpollSelector
2026-08-17 16:15:24,009 INFO: >> GET /robots.txt
2026-08-17 16:15:24,011 DEBUG: Using selector: EpollSelector
2026-08-17 16:15:24,022 INFO: GET /
2026-08-17 16:15:24,022 INFO: GET /robots.txt
2026-08-17 16:15:24,025 WARNING: GET / -> 404
2026-08-17 16:15:24,025 WARNING: GET /robots.txt -> 404
2026-08-17 16:15:24,034 INFO: << 404 /
2026-08-17 16:15:24,034 INFO: << 404 /robots.txt
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
2026-08-19 22:53:35,350 INFO: wsgi.py loading...
2026-08-19 22:53:35,350 INFO: Importing app.main...
2026-08-19 22:53:39,202 INFO: app.main imported successfully.
2026-08-19 22:53:39,202 INFO: Running DB init...
2026-08-19 22:53:39,262 INFO: All tables OK.
2026-08-19 22:53:39,410 INFO: Migration OK: allowances ENUM+DAILY
2026-08-19 22:53:39,413 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,415 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,417 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,419 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,422 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,424 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-19 22:53:39,433 INFO: Dip chart data seeded.
2026-08-19 22:53:39,433 INFO: DB init complete.
2026-08-19 22:53:39,433 INFO: wsgi.py ready.
2026-08-19 22:53:39,437 INFO: >> GET /robots.txt
2026-08-19 22:53:39,438 DEBUG: Using selector: EpollSelector
2026-08-19 22:53:39,449 INFO: GET /robots.txt
2026-08-19 22:53:39,452 WARNING: GET /robots.txt -> 404
2026-08-19 22:53:39,461 INFO: << 404 /robots.txt
2026-08-19 22:53:40,282 INFO: >> GET /
2026-08-19 22:53:40,283 DEBUG: Using selector: EpollSelector
2026-08-19 22:53:40,293 INFO: GET /
2026-08-19 22:53:40,296 WARNING: GET / -> 404
2026-08-19 22:53:40,305 INFO: << 404 /
2026-08-20 04:37:32,438 INFO: wsgi.py loading...
2026-08-20 04:37:32,438 INFO: Importing app.main...
2026-08-20 04:37:36,120 INFO: app.main imported successfully.
2026-08-20 04:37:36,120 INFO: Running DB init...
2026-08-20 04:37:36,181 INFO: All tables OK.
2026-08-20 04:37:36,317 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 04:37:36,319 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,322 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,324 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,326 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,329 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,331 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 04:37:36,340 INFO: Dip chart data seeded.
2026-08-20 04:37:36,340 INFO: DB init complete.
2026-08-20 04:37:36,340 INFO: wsgi.py ready.
2026-08-20 04:37:36,343 INFO: >> GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-20 04:37:36,345 DEBUG: Using selector: EpollSelector
2026-08-20 04:37:36,355 INFO: GET /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-20 04:37:36,358 WARNING: GET /wp-json/gravitysmtp/v1/tests/mock-data -> 404
2026-08-20 04:37:36,367 INFO: << 404 /wp-json/gravitysmtp/v1/tests/mock-data
2026-08-20 05:45:13,458 INFO: wsgi.py loading...
2026-08-20 05:45:13,458 INFO: Importing app.main...
2026-08-20 05:45:17,360 INFO: app.main imported successfully.
2026-08-20 05:45:17,360 INFO: Running DB init...
2026-08-20 05:45:17,422 INFO: All tables OK.
2026-08-20 05:45:17,557 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 05:45:17,560 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,562 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,565 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,567 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,570 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,573 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 05:45:17,581 INFO: Dip chart data seeded.
2026-08-20 05:45:17,581 INFO: DB init complete.
2026-08-20 05:45:17,581 INFO: wsgi.py ready.
2026-08-20 05:45:17,585 INFO: >> GET /
2026-08-20 05:45:17,586 DEBUG: Using selector: EpollSelector
2026-08-20 05:45:17,608 INFO: GET /
2026-08-20 05:45:17,611 WARNING: GET / -> 404
2026-08-20 05:45:17,621 INFO: << 404 /
2026-08-20 11:10:28,839 INFO: wsgi.py loading...
2026-08-20 11:10:28,840 INFO: Importing app.main...
2026-08-20 11:10:32,544 INFO: app.main imported successfully.
2026-08-20 11:10:32,544 INFO: Running DB init...
2026-08-20 11:10:32,629 INFO: All tables OK.
2026-08-20 11:10:32,772 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 11:10:32,787 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,789 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,792 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,794 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,797 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,799 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 11:10:32,808 INFO: Dip chart data seeded.
2026-08-20 11:10:32,808 INFO: DB init complete.
2026-08-20 11:10:32,809 INFO: wsgi.py ready.
2026-08-20 11:10:32,812 INFO: >> GET /
2026-08-20 11:10:32,813 DEBUG: Using selector: EpollSelector
2026-08-20 11:10:32,824 INFO: GET /
2026-08-20 11:10:32,826 WARNING: GET / -> 404
2026-08-20 11:10:32,836 INFO: << 404 /
2026-08-20 14:49:41,484 INFO: wsgi.py loading...
2026-08-20 14:49:41,485 INFO: Importing app.main...
2026-08-20 14:49:45,198 INFO: app.main imported successfully.
2026-08-20 14:49:45,198 INFO: Running DB init...
2026-08-20 14:49:45,269 INFO: All tables OK.
2026-08-20 14:49:45,421 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 14:49:45,424 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,427 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,430 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,432 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,435 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,437 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 14:49:45,445 INFO: Dip chart data seeded.
2026-08-20 14:49:45,445 INFO: DB init complete.
2026-08-20 14:49:45,445 INFO: wsgi.py ready.
2026-08-20 14:49:45,449 INFO: >> GET /
2026-08-20 14:49:45,450 DEBUG: Using selector: EpollSelector
2026-08-20 14:49:45,460 INFO: GET /
2026-08-20 14:49:45,463 WARNING: GET / -> 404
2026-08-20 14:49:45,472 INFO: << 404 /
2026-08-20 15:41:15,479 INFO: wsgi.py loading...
2026-08-20 15:41:15,481 INFO: Importing app.main...
2026-08-20 15:41:17,541 INFO: app.main imported successfully.
2026-08-20 15:41:17,541 INFO: Running DB init...
2026-08-20 15:41:17,611 INFO: All tables OK.
2026-08-20 15:41:17,754 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 15:41:17,756 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,759 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,761 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,763 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,766 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,768 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 15:41:17,784 INFO: Dip chart data seeded.
2026-08-20 15:41:17,784 INFO: DB init complete.
2026-08-20 15:41:17,784 INFO: wsgi.py ready.
2026-08-20 15:41:17,788 INFO: >> GET /
2026-08-20 15:41:17,789 DEBUG: Using selector: EpollSelector
2026-08-20 15:41:17,800 INFO: GET /
2026-08-20 15:41:17,802 WARNING: GET / -> 404
2026-08-20 15:41:17,811 INFO: << 404 /
2026-08-20 18:33:41,365 INFO: wsgi.py loading...
2026-08-20 18:33:41,366 INFO: Importing app.main...
2026-08-20 18:33:44,846 INFO: app.main imported successfully.
2026-08-20 18:33:44,847 INFO: Running DB init...
2026-08-20 18:33:44,919 INFO: All tables OK.
2026-08-20 18:33:45,058 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 18:33:45,061 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,064 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,066 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,069 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,071 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,074 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:33:45,082 INFO: Dip chart data seeded.
2026-08-20 18:33:45,082 INFO: DB init complete.
2026-08-20 18:33:45,082 INFO: wsgi.py ready.
2026-08-20 18:33:45,086 INFO: >> GET /
2026-08-20 18:33:45,087 DEBUG: Using selector: EpollSelector
2026-08-20 18:33:45,099 INFO: GET /
2026-08-20 18:33:45,102 WARNING: GET / -> 404
2026-08-20 18:33:45,113 INFO: << 404 /
2026-08-20 18:42:41,034 INFO: wsgi.py loading...
2026-08-20 18:42:41,034 INFO: Importing app.main...
2026-08-20 18:42:42,819 INFO: app.main imported successfully.
2026-08-20 18:42:42,820 INFO: Running DB init...
2026-08-20 18:42:42,881 INFO: All tables OK.
2026-08-20 18:42:43,014 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 18:42:43,017 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,019 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,022 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,025 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,027 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,030 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 18:42:43,038 INFO: Dip chart data seeded.
2026-08-20 18:42:43,038 INFO: DB init complete.
2026-08-20 18:42:43,038 INFO: wsgi.py ready.
2026-08-20 18:42:43,042 INFO: >> GET /
2026-08-20 18:42:43,043 DEBUG: Using selector: EpollSelector
2026-08-20 18:42:43,053 INFO: GET /
2026-08-20 18:42:43,056 WARNING: GET / -> 404
2026-08-20 18:42:43,064 INFO: << 404 /
2026-08-20 18:45:50,799 INFO: >> GET /
2026-08-20 18:45:50,801 DEBUG: Using selector: EpollSelector
2026-08-20 18:45:50,811 INFO: GET /
2026-08-20 18:45:50,814 WARNING: GET / -> 404
2026-08-20 18:45:50,842 INFO: << 404 /
2026-08-20 19:27:08,464 INFO: wsgi.py loading...
2026-08-20 19:27:08,464 INFO: Importing app.main...
2026-08-20 19:27:10,463 INFO: app.main imported successfully.
2026-08-20 19:27:10,463 INFO: Running DB init...
2026-08-20 19:27:10,539 INFO: All tables OK.
2026-08-20 19:27:10,707 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 19:27:10,710 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,713 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,716 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,718 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,722 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,724 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 19:27:10,733 INFO: Dip chart data seeded.
2026-08-20 19:27:10,733 INFO: DB init complete.
2026-08-20 19:27:10,733 INFO: wsgi.py ready.
2026-08-20 19:27:10,737 INFO: >> GET /.env.dev
2026-08-20 19:27:10,738 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,739 INFO: >> GET /
2026-08-20 19:27:10,741 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,742 INFO: >> GET /.env.local
2026-08-20 19:27:10,744 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,744 INFO: >> GET /.env.production
2026-08-20 19:27:10,746 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,747 INFO: >> GET /.env.production.local
2026-08-20 19:27:10,749 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,750 INFO: GET /.env.dev
2026-08-20 19:27:10,751 INFO: >> GET /.env.prod
2026-08-20 19:27:10,752 INFO: GET /
2026-08-20 19:27:10,753 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,754 WARNING: GET /.env.dev -> 404
2026-08-20 19:27:10,756 WARNING: GET / -> 404
2026-08-20 19:27:10,756 INFO: GET /.env.local
2026-08-20 19:27:10,760 WARNING: GET /.env.local -> 404
2026-08-20 19:27:10,761 INFO: GET /.env.production.local
2026-08-20 19:27:10,764 WARNING: GET /.env.production.local -> 404
2026-08-20 19:27:10,765 INFO: GET /.env.prod
2026-08-20 19:27:10,766 INFO: GET /.env.production
2026-08-20 19:27:10,767 INFO: << 404 /.env.dev
2026-08-20 19:27:10,769 INFO: >> GET /.env.staging
2026-08-20 19:27:10,769 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,769 WARNING: GET /.env.prod -> 404
2026-08-20 19:27:10,769 INFO: GET /.env.staging
2026-08-20 19:27:10,770 WARNING: GET /.env.production -> 404
2026-08-20 19:27:10,771 WARNING: GET /.env.staging -> 404
2026-08-20 19:27:10,781 INFO: << 404 /
2026-08-20 19:27:10,802 INFO: << 404 /.env.local
2026-08-20 19:27:10,808 INFO: << 404 /.env.prod
2026-08-20 19:27:10,808 INFO: >> GET /.env.development
2026-08-20 19:27:10,809 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:10,809 INFO: GET /.env.development
2026-08-20 19:27:10,811 WARNING: GET /.env.development -> 404
2026-08-20 19:27:10,813 INFO: << 404 /.env.production.local
2026-08-20 19:27:10,813 INFO: << 404 /.env.production
2026-08-20 19:27:10,821 INFO: << 404 /.env.staging
2026-08-20 19:27:10,833 INFO: << 404 /.env.development
2026-08-20 19:27:11,606 INFO: >> GET /.env.bak
2026-08-20 19:27:11,606 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:11,607 INFO: GET /.env.bak
2026-08-20 19:27:11,608 WARNING: GET /.env.bak -> 404
2026-08-20 19:27:11,611 INFO: << 404 /.env.bak
2026-08-20 19:27:12,510 INFO: >> GET /app/.env
2026-08-20 19:27:12,511 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:12,511 INFO: GET /app/.env
2026-08-20 19:27:12,512 WARNING: GET /app/.env -> 404
2026-08-20 19:27:12,515 INFO: << 404 /app/.env
2026-08-20 19:27:13,345 INFO: >> GET /core/.env
2026-08-20 19:27:13,345 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:13,346 INFO: GET /core/.env
2026-08-20 19:27:13,347 WARNING: GET /core/.env -> 404
2026-08-20 19:27:13,349 INFO: << 404 /core/.env
2026-08-20 19:27:14,032 INFO: >> GET /server/.env
2026-08-20 19:27:14,032 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:14,032 INFO: GET /server/.env
2026-08-20 19:27:14,033 WARNING: GET /server/.env -> 404
2026-08-20 19:27:14,036 INFO: << 404 /server/.env
2026-08-20 19:27:15,104 INFO: >> GET /config.env
2026-08-20 19:27:15,105 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:15,105 INFO: GET /config.env
2026-08-20 19:27:15,106 WARNING: GET /config.env -> 404
2026-08-20 19:27:15,109 INFO: << 404 /config.env
2026-08-20 19:27:15,681 INFO: >> GET /.aws/credentials
2026-08-20 19:27:15,681 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:15,682 INFO: GET /.aws/credentials
2026-08-20 19:27:15,683 WARNING: GET /.aws/credentials -> 404
2026-08-20 19:27:15,686 INFO: << 404 /.aws/credentials
2026-08-20 19:27:16,640 INFO: >> GET /.aws/config
2026-08-20 19:27:16,640 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:16,641 INFO: GET /.aws/config
2026-08-20 19:27:16,642 WARNING: GET /.aws/config -> 404
2026-08-20 19:27:16,644 INFO: << 404 /.aws/config
2026-08-20 19:27:18,251 INFO: >> GET /.env.old
2026-08-20 19:27:18,251 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,251 INFO: GET /.env.old
2026-08-20 19:27:18,253 WARNING: GET /.env.old -> 404
2026-08-20 19:27:18,254 INFO: >> GET /.env.save
2026-08-20 19:27:18,254 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,254 INFO: GET /.env.save
2026-08-20 19:27:18,254 INFO: >> GET /config/.env
2026-08-20 19:27:18,255 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,255 INFO: GET /config/.env
2026-08-20 19:27:18,255 INFO: << 404 /.env.old
2026-08-20 19:27:18,256 WARNING: GET /.env.save -> 404
2026-08-20 19:27:18,257 WARNING: GET /config/.env -> 404
2026-08-20 19:27:18,257 INFO: >> GET /.env~
2026-08-20 19:27:18,259 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,259 INFO: << 404 /.env.save
2026-08-20 19:27:18,260 INFO: << 404 /config/.env
2026-08-20 19:27:18,260 INFO: >> GET /.env.example
2026-08-20 19:27:18,261 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,270 INFO: GET /.env~
2026-08-20 19:27:18,272 INFO: GET /.env.example
2026-08-20 19:27:18,273 WARNING: GET /.env~ -> 404
2026-08-20 19:27:18,282 WARNING: GET /.env.example -> 404
2026-08-20 19:27:18,300 INFO: >> GET /serviceAccount.json
2026-08-20 19:27:18,300 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,301 INFO: GET /serviceAccount.json
2026-08-20 19:27:18,302 WARNING: GET /serviceAccount.json -> 404
2026-08-20 19:27:18,305 INFO: << 404 /serviceAccount.json
2026-08-20 19:27:18,312 INFO: << 404 /.env~
2026-08-20 19:27:18,319 INFO: << 404 /.env.example
2026-08-20 19:27:18,596 INFO: >> GET /.env.backup
2026-08-20 19:27:18,597 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:18,607 INFO: GET /.env.backup
2026-08-20 19:27:18,610 WARNING: GET /.env.backup -> 404
2026-08-20 19:27:18,639 INFO: << 404 /.env.backup
2026-08-20 19:27:19,084 INFO: >> GET /service-account.json
2026-08-20 19:27:19,084 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,084 INFO: GET /service-account.json
2026-08-20 19:27:19,086 WARNING: GET /service-account.json -> 404
2026-08-20 19:27:19,089 INFO: << 404 /service-account.json
2026-08-20 19:27:19,596 INFO: >> GET /src/.env
2026-08-20 19:27:19,596 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,596 INFO: >> GET /laravel/.env
2026-08-20 19:27:19,596 INFO: >> GET /api/.env
2026-08-20 19:27:19,596 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,596 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,596 INFO: GET /src/.env
2026-08-20 19:27:19,596 INFO: GET /laravel/.env
2026-08-20 19:27:19,597 INFO: GET /api/.env
2026-08-20 19:27:19,598 WARNING: GET /laravel/.env -> 404
2026-08-20 19:27:19,598 WARNING: GET /src/.env -> 404
2026-08-20 19:27:19,598 WARNING: GET /api/.env -> 404
2026-08-20 19:27:19,599 INFO: >> GET /public/.env
2026-08-20 19:27:19,599 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,600 INFO: GET /public/.env
2026-08-20 19:27:19,601 INFO: << 404 /src/.env
2026-08-20 19:27:19,601 WARNING: GET /public/.env -> 404
2026-08-20 19:27:19,601 INFO: << 404 /laravel/.env
2026-08-20 19:27:19,603 INFO: << 404 /api/.env
2026-08-20 19:27:19,604 INFO: << 404 /public/.env
2026-08-20 19:27:19,941 INFO: >> GET /backend/.env
2026-08-20 19:27:19,943 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,953 INFO: GET /backend/.env
2026-08-20 19:27:19,956 WARNING: GET /backend/.env -> 404
2026-08-20 19:27:19,957 INFO: >> GET /admin/.env
2026-08-20 19:27:19,958 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:19,969 INFO: GET /admin/.env
2026-08-20 19:27:19,972 WARNING: GET /admin/.env -> 404
2026-08-20 19:27:19,996 INFO: << 404 /backend/.env
2026-08-20 19:27:20,002 INFO: << 404 /admin/.env
2026-08-20 19:27:20,328 INFO: >> GET /local.settings.json
2026-08-20 19:27:20,328 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:20,328 INFO: GET /local.settings.json
2026-08-20 19:27:20,330 WARNING: GET /local.settings.json -> 404
2026-08-20 19:27:20,336 INFO: << 404 /local.settings.json
2026-08-20 19:27:21,057 INFO: >> GET /.ssh/id_rsa
2026-08-20 19:27:21,057 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:21,057 INFO: GET /.ssh/id_rsa
2026-08-20 19:27:21,058 WARNING: GET /.ssh/id_rsa -> 404
2026-08-20 19:27:21,061 INFO: << 404 /.ssh/id_rsa
2026-08-20 19:27:22,132 INFO: >> GET /server.key
2026-08-20 19:27:22,133 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:22,133 INFO: GET /server.key
2026-08-20 19:27:22,134 WARNING: GET /server.key -> 404
2026-08-20 19:27:22,137 INFO: << 404 /server.key
2026-08-20 19:27:22,974 INFO: >> GET /aws/credentials
2026-08-20 19:27:22,974 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:22,974 INFO: GET /aws/credentials
2026-08-20 19:27:22,976 WARNING: GET /aws/credentials -> 404
2026-08-20 19:27:22,977 INFO: >> GET /.s3cfg
2026-08-20 19:27:22,978 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:22,979 INFO: << 404 /aws/credentials
2026-08-20 19:27:22,989 INFO: GET /.s3cfg
2026-08-20 19:27:22,992 WARNING: GET /.s3cfg -> 404
2026-08-20 19:27:23,023 INFO: << 404 /.s3cfg
2026-08-20 19:27:23,145 INFO: >> GET /private.key
2026-08-20 19:27:23,145 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:23,146 INFO: GET /private.key
2026-08-20 19:27:23,147 WARNING: GET /private.key -> 404
2026-08-20 19:27:23,149 INFO: << 404 /private.key
2026-08-20 19:27:25,371 INFO: >> GET /debug/default/view
2026-08-20 19:27:25,372 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:25,384 INFO: GET /debug/default/view
2026-08-20 19:27:25,387 WARNING: GET /debug/default/view -> 404
2026-08-20 19:27:25,415 INFO: << 404 /debug/default/view
2026-08-20 19:27:26,263 INFO: >> GET /gcloud-service-key.json
2026-08-20 19:27:26,263 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,263 INFO: >> GET /credentials.json
2026-08-20 19:27:26,263 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,263 INFO: GET /gcloud-service-key.json
2026-08-20 19:27:26,263 INFO: >> GET /secrets.json
2026-08-20 19:27:26,264 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,264 INFO: GET /credentials.json
2026-08-20 19:27:26,264 INFO: GET /secrets.json
2026-08-20 19:27:26,265 WARNING: GET /gcloud-service-key.json -> 404
2026-08-20 19:27:26,265 WARNING: GET /credentials.json -> 404
2026-08-20 19:27:26,265 WARNING: GET /secrets.json -> 404
2026-08-20 19:27:26,266 INFO: >> GET /firebase.json
2026-08-20 19:27:26,267 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,268 INFO: << 404 /credentials.json
2026-08-20 19:27:26,268 INFO: << 404 /gcloud-service-key.json
2026-08-20 19:27:26,268 INFO: << 404 /secrets.json
2026-08-20 19:27:26,268 INFO: >> GET /.azure/credentials
2026-08-20 19:27:26,269 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,278 INFO: GET /firebase.json
2026-08-20 19:27:26,280 INFO: GET /.azure/credentials
2026-08-20 19:27:26,287 WARNING: GET /firebase.json -> 404
2026-08-20 19:27:26,290 WARNING: GET /.azure/credentials -> 404
2026-08-20 19:27:26,316 INFO: << 404 /firebase.json
2026-08-20 19:27:26,320 INFO: << 404 /.azure/credentials
2026-08-20 19:27:26,649 INFO: >> GET /var/log/nginx/error.log
2026-08-20 19:27:26,649 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,650 INFO: GET /var/log/nginx/error.log
2026-08-20 19:27:26,651 WARNING: GET /var/log/nginx/error.log -> 404
2026-08-20 19:27:26,654 INFO: << 404 /var/log/nginx/error.log
2026-08-20 19:27:26,989 INFO: >> GET /debug.log
2026-08-20 19:27:26,989 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:26,989 INFO: GET /debug.log
2026-08-20 19:27:26,991 WARNING: GET /debug.log -> 404
2026-08-20 19:27:26,993 INFO: << 404 /debug.log
2026-08-20 19:27:27,351 INFO: >> GET /id_rsa
2026-08-20 19:27:27,351 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:27,352 INFO: GET /id_rsa
2026-08-20 19:27:27,353 WARNING: GET /id_rsa -> 404
2026-08-20 19:27:27,356 INFO: << 404 /id_rsa
2026-08-20 19:27:28,097 INFO: >> GET /id_rsa.pub
2026-08-20 19:27:28,097 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:28,097 INFO: GET /id_rsa.pub
2026-08-20 19:27:28,099 WARNING: GET /id_rsa.pub -> 404
2026-08-20 19:27:28,101 INFO: << 404 /id_rsa.pub
2026-08-20 19:27:32,645 INFO: >> GET /debug
2026-08-20 19:27:32,645 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,645 INFO: >> GET /_profiler/phpinfo
2026-08-20 19:27:32,645 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,645 INFO: >> GET /debug.php
2026-08-20 19:27:32,645 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,645 INFO: GET /debug
2026-08-20 19:27:32,646 INFO: GET /_profiler/phpinfo
2026-08-20 19:27:32,646 INFO: GET /debug.php
2026-08-20 19:27:32,647 WARNING: GET /_profiler/phpinfo -> 404
2026-08-20 19:27:32,647 WARNING: GET /debug -> 404
2026-08-20 19:27:32,647 WARNING: GET /debug.php -> 404
2026-08-20 19:27:32,647 INFO: >> GET /debug/default/view
2026-08-20 19:27:32,649 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,649 INFO: << 404 /_profiler/phpinfo
2026-08-20 19:27:32,649 INFO: << 404 /debug
2026-08-20 19:27:32,650 INFO: >> GET /phpinfo.php
2026-08-20 19:27:32,649 INFO: >> GET /debug/default
2026-08-20 19:27:32,650 INFO: << 404 /debug.php
2026-08-20 19:27:32,650 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,650 INFO: >> GET /info.php
2026-08-20 19:27:32,650 INFO: >> GET /phpinfo
2026-08-20 19:27:32,650 INFO: GET /phpinfo.php
2026-08-20 19:27:32,650 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,650 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,651 INFO: GET /info.php
2026-08-20 19:27:32,651 INFO: GET /phpinfo
2026-08-20 19:27:32,651 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,652 WARNING: GET /phpinfo.php -> 404
2026-08-20 19:27:32,652 WARNING: GET /info.php -> 404
2026-08-20 19:27:32,652 WARNING: GET /phpinfo -> 404
2026-08-20 19:27:32,652 INFO: >> GET /_debugbar
2026-08-20 19:27:32,653 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,654 INFO: << 404 /phpinfo.php
2026-08-20 19:27:32,654 INFO: << 404 /phpinfo
2026-08-20 19:27:32,654 INFO: << 404 /info.php
2026-08-20 19:27:32,655 INFO: >> GET /test.php
2026-08-20 19:27:32,655 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,655 INFO: GET /test.php
2026-08-20 19:27:32,657 WARNING: GET /test.php -> 404
2026-08-20 19:27:32,660 INFO: << 404 /test.php
2026-08-20 19:27:32,660 INFO: GET /debug/default/view
2026-08-20 19:27:32,661 INFO: GET /debug/default
2026-08-20 19:27:32,663 WARNING: GET /debug/default/view -> 404
2026-08-20 19:27:32,664 WARNING: GET /debug/default -> 404
2026-08-20 19:27:32,665 INFO: GET /_debugbar
2026-08-20 19:27:32,668 WARNING: GET /_debugbar -> 404
2026-08-20 19:27:32,699 INFO: << 404 /debug/default/view
2026-08-20 19:27:32,701 INFO: << 404 /debug/default
2026-08-20 19:27:32,703 INFO: << 404 /_debugbar
2026-08-20 19:27:32,799 INFO: >> GET /server_info.php
2026-08-20 19:27:32,799 INFO: >> GET /i.php
2026-08-20 19:27:32,799 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,799 INFO: >> GET /php.php
2026-08-20 19:27:32,799 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,799 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,799 INFO: GET /server_info.php
2026-08-20 19:27:32,799 INFO: >> GET /_profiler
2026-08-20 19:27:32,800 INFO: GET /i.php
2026-08-20 19:27:32,800 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,800 INFO: GET /php.php
2026-08-20 19:27:32,800 INFO: >> GET /storage/logs/laravel.log
2026-08-20 19:27:32,800 INFO: >> GET /storage/logs/error.log
2026-08-20 19:27:32,800 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,800 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,800 INFO: GET /_profiler
2026-08-20 19:27:32,800 INFO: GET /storage/logs/laravel.log
2026-08-20 19:27:32,800 INFO: GET /storage/logs/error.log
2026-08-20 19:27:32,801 WARNING: GET /i.php -> 404
2026-08-20 19:27:32,801 WARNING: GET /php.php -> 404
2026-08-20 19:27:32,801 WARNING: GET /server_info.php -> 404
2026-08-20 19:27:32,801 WARNING: GET /storage/logs/laravel.log -> 404
2026-08-20 19:27:32,801 WARNING: GET /_profiler -> 404
2026-08-20 19:27:32,802 WARNING: GET /storage/logs/error.log -> 404
2026-08-20 19:27:32,803 INFO: << 404 /storage/logs/laravel.log
2026-08-20 19:27:32,803 INFO: << 404 /server_info.php
2026-08-20 19:27:32,803 INFO: << 404 /i.php
2026-08-20 19:27:32,803 INFO: << 404 /php.php
2026-08-20 19:27:32,804 INFO: >> GET /wp-content/debug.log
2026-08-20 19:27:32,804 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,804 INFO: >> GET /app_dev.php/_profiler/phpinfo
2026-08-20 19:27:32,804 INFO: >> GET /var/log/apache2/error.log
2026-08-20 19:27:32,804 INFO: << 404 /storage/logs/error.log
2026-08-20 19:27:32,804 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,804 INFO: << 404 /_profiler
2026-08-20 19:27:32,804 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:32,804 INFO: GET /wp-content/debug.log
2026-08-20 19:27:32,804 INFO: GET /app_dev.php/_profiler/phpinfo
2026-08-20 19:27:32,804 INFO: GET /var/log/apache2/error.log
2026-08-20 19:27:32,805 WARNING: GET /var/log/apache2/error.log -> 404
2026-08-20 19:27:32,805 WARNING: GET /app_dev.php/_profiler/phpinfo -> 404
2026-08-20 19:27:32,806 WARNING: GET /wp-content/debug.log -> 404
2026-08-20 19:27:32,808 INFO: << 404 /wp-content/debug.log
2026-08-20 19:27:32,808 INFO: << 404 /app_dev.php/_profiler/phpinfo
2026-08-20 19:27:32,808 INFO: << 404 /var/log/apache2/error.log
2026-08-20 19:27:33,119 INFO: >> GET /logs/error.log
2026-08-20 19:27:33,119 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:33,119 INFO: >> GET /log/error.log
2026-08-20 19:27:33,119 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:33,119 INFO: >> GET /error.log
2026-08-20 19:27:33,119 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:33,120 INFO: GET /logs/error.log
2026-08-20 19:27:33,120 INFO: GET /log/error.log
2026-08-20 19:27:33,120 INFO: GET /error.log
2026-08-20 19:27:33,121 WARNING: GET /log/error.log -> 404
2026-08-20 19:27:33,121 WARNING: GET /logs/error.log -> 404
2026-08-20 19:27:33,121 WARNING: GET /error.log -> 404
2026-08-20 19:27:33,123 INFO: << 404 /error.log
2026-08-20 19:27:33,123 INFO: << 404 /log/error.log
2026-08-20 19:27:33,123 INFO: << 404 /logs/error.log
2026-08-20 19:27:44,349 INFO: >> GET /wp-config.bak
2026-08-20 19:27:44,351 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:44,360 INFO: GET /wp-config.bak
2026-08-20 19:27:44,363 WARNING: GET /wp-config.bak -> 404
2026-08-20 19:27:44,392 INFO: << 404 /wp-config.bak
2026-08-20 19:27:45,362 INFO: >> GET /backup.bak
2026-08-20 19:27:45,362 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:45,362 INFO: GET /backup.bak
2026-08-20 19:27:45,364 WARNING: GET /backup.bak -> 404
2026-08-20 19:27:45,366 INFO: << 404 /backup.bak
2026-08-20 19:27:46,233 INFO: >> GET /bootstrap.yml
2026-08-20 19:27:46,233 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:46,233 INFO: GET /bootstrap.yml
2026-08-20 19:27:46,235 WARNING: GET /bootstrap.yml -> 404
2026-08-20 19:27:46,237 INFO: << 404 /bootstrap.yml
2026-08-20 19:27:47,715 INFO: >> GET /package.json
2026-08-20 19:27:47,717 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:47,726 INFO: GET /package.json
2026-08-20 19:27:47,730 WARNING: GET /package.json -> 404
2026-08-20 19:27:47,758 INFO: << 404 /package.json
2026-08-20 19:27:48,450 INFO: >> GET /yarn.lock
2026-08-20 19:27:48,450 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:48,450 INFO: GET /yarn.lock
2026-08-20 19:27:48,452 WARNING: GET /yarn.lock -> 404
2026-08-20 19:27:48,454 INFO: << 404 /yarn.lock
2026-08-20 19:27:49,729 INFO: >> GET /wp-config.php.bak
2026-08-20 19:27:49,729 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,729 INFO: >> GET /wp-config.php~
2026-08-20 19:27:49,729 INFO: >> GET /wp-config.php.save
2026-08-20 19:27:49,729 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,729 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,729 INFO: GET /wp-config.php.bak
2026-08-20 19:27:49,729 INFO: GET /wp-config.php.save
2026-08-20 19:27:49,729 INFO: GET /wp-config.php~
2026-08-20 19:27:49,731 WARNING: GET /wp-config.php~ -> 404
2026-08-20 19:27:49,731 WARNING: GET /wp-config.php.save -> 404
2026-08-20 19:27:49,731 WARNING: GET /wp-config.php.bak -> 404
2026-08-20 19:27:49,731 INFO: >> GET /wp-config.php
2026-08-20 19:27:49,733 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,733 INFO: << 404 /wp-config.php~
2026-08-20 19:27:49,733 INFO: << 404 /wp-config.php.bak
2026-08-20 19:27:49,733 INFO: << 404 /wp-config.php.save
2026-08-20 19:27:49,734 INFO: >> GET /wp-config.php.txt
2026-08-20 19:27:49,733 INFO: >> GET /wp-config.php.old
2026-08-20 19:27:49,734 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,734 INFO: GET /wp-config.php.txt
2026-08-20 19:27:49,735 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:49,736 WARNING: GET /wp-config.php.txt -> 404
2026-08-20 19:27:49,738 INFO: << 404 /wp-config.php.txt
2026-08-20 19:27:49,743 INFO: GET /wp-config.php
2026-08-20 19:27:49,745 INFO: GET /wp-config.php.old
2026-08-20 19:27:49,746 WARNING: GET /wp-config.php -> 404
2026-08-20 19:27:49,748 WARNING: GET /wp-config.php.old -> 404
2026-08-20 19:27:49,775 INFO: << 404 /wp-config.php
2026-08-20 19:27:49,776 INFO: << 404 /wp-config.php.old
2026-08-20 19:27:50,048 INFO: >> GET /application.log
2026-08-20 19:27:50,050 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:50,059 INFO: GET /application.log
2026-08-20 19:27:50,062 WARNING: GET /application.log -> 404
2026-08-20 19:27:50,091 INFO: << 404 /application.log
2026-08-20 19:27:50,706 INFO: >> GET /.yarnrc
2026-08-20 19:27:50,706 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:50,706 INFO: GET /.yarnrc
2026-08-20 19:27:50,708 WARNING: GET /.yarnrc -> 404
2026-08-20 19:27:50,710 INFO: << 404 /.yarnrc
2026-08-20 19:27:51,168 INFO: >> GET /wp-config.old
2026-08-20 19:27:51,169 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,169 INFO: >> GET /blog/wp-config.php
2026-08-20 19:27:51,169 INFO: GET /wp-config.old
2026-08-20 19:27:51,169 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,169 INFO: GET /blog/wp-config.php
2026-08-20 19:27:51,170 INFO: >> GET /DS_Store
2026-08-20 19:27:51,170 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,170 INFO: GET /DS_Store
2026-08-20 19:27:51,170 WARNING: GET /wp-config.old -> 404
2026-08-20 19:27:51,171 INFO: >> GET /.bash_history
2026-08-20 19:27:51,171 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,171 WARNING: GET /blog/wp-config.php -> 404
2026-08-20 19:27:51,171 INFO: GET /.bash_history
2026-08-20 19:27:51,172 WARNING: GET /DS_Store -> 404
2026-08-20 19:27:51,172 WARNING: GET /.bash_history -> 404
2026-08-20 19:27:51,173 INFO: << 404 /blog/wp-config.php
2026-08-20 19:27:51,173 INFO: << 404 /wp-config.old
2026-08-20 19:27:51,173 INFO: >> GET /dump.rdb
2026-08-20 19:27:51,173 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,174 INFO: >> GET /backup.sql
2026-08-20 19:27:51,174 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,174 INFO: GET /dump.rdb
2026-08-20 19:27:51,174 INFO: << 404 /DS_Store
2026-08-20 19:27:51,174 INFO: GET /backup.sql
2026-08-20 19:27:51,174 INFO: << 404 /.bash_history
2026-08-20 19:27:51,175 WARNING: GET /dump.rdb -> 404
2026-08-20 19:27:51,176 WARNING: GET /backup.sql -> 404
2026-08-20 19:27:51,177 INFO: << 404 /dump.rdb
2026-08-20 19:27:51,178 INFO: << 404 /backup.sql
2026-08-20 19:27:51,323 INFO: >> GET /backup.zip
2026-08-20 19:27:51,323 INFO: >> GET /backup.tar.gz
2026-08-20 19:27:51,323 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,324 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,324 INFO: >> GET /.DS_Store
2026-08-20 19:27:51,324 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,324 INFO: GET /backup.zip
2026-08-20 19:27:51,324 INFO: GET /backup.tar.gz
2026-08-20 19:27:51,324 INFO: GET /.DS_Store
2026-08-20 19:27:51,325 WARNING: GET /backup.tar.gz -> 404
2026-08-20 19:27:51,325 WARNING: GET /backup.zip -> 404
2026-08-20 19:27:51,325 WARNING: GET /.DS_Store -> 404
2026-08-20 19:27:51,327 INFO: << 404 /backup.tar.gz
2026-08-20 19:27:51,328 INFO: << 404 /.DS_Store
2026-08-20 19:27:51,327 INFO: << 404 /backup.zip
2026-08-20 19:27:51,497 INFO: >> GET /wp-config.txt
2026-08-20 19:27:51,498 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,507 INFO: >> GET /wordpress/wp-config.php
2026-08-20 19:27:51,508 INFO: GET /wp-config.txt
2026-08-20 19:27:51,508 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,511 WARNING: GET /wp-config.txt -> 404
2026-08-20 19:27:51,518 INFO: GET /wordpress/wp-config.php
2026-08-20 19:27:51,521 WARNING: GET /wordpress/wp-config.php -> 404
2026-08-20 19:27:51,539 INFO: << 404 /wp-config.txt
2026-08-20 19:27:51,549 INFO: << 404 /wordpress/wp-config.php
2026-08-20 19:27:51,595 INFO: >> GET /config/default.json
2026-08-20 19:27:51,595 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,595 INFO: GET /config/default.json
2026-08-20 19:27:51,597 WARNING: GET /config/default.json -> 404
2026-08-20 19:27:51,600 INFO: << 404 /config/default.json
2026-08-20 19:27:51,876 INFO: >> GET /settings.json
2026-08-20 19:27:51,877 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:51,877 INFO: GET /settings.json
2026-08-20 19:27:51,878 WARNING: GET /settings.json -> 404
2026-08-20 19:27:51,881 INFO: << 404 /settings.json
2026-08-20 19:27:52,080 INFO: >> GET /db.sql
2026-08-20 19:27:52,080 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,080 INFO: >> GET /database.sql
2026-08-20 19:27:52,081 INFO: >> GET /dump.sql
2026-08-20 19:27:52,081 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,081 INFO: >> GET /site.sql
2026-08-20 19:27:52,081 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,081 INFO: GET /db.sql
2026-08-20 19:27:52,081 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,081 INFO: >> GET /site.zip
2026-08-20 19:27:52,081 INFO: GET /database.sql
2026-08-20 19:27:52,081 INFO: GET /dump.sql
2026-08-20 19:27:52,081 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,081 INFO: >> GET /www.zip
2026-08-20 19:27:52,081 INFO: GET /site.sql
2026-08-20 19:27:52,081 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,081 INFO: GET /site.zip
2026-08-20 19:27:52,082 INFO: GET /www.zip
2026-08-20 19:27:52,082 WARNING: GET /db.sql -> 404
2026-08-20 19:27:52,082 WARNING: GET /dump.sql -> 404
2026-08-20 19:27:52,082 WARNING: GET /site.sql -> 404
2026-08-20 19:27:52,082 WARNING: GET /site.zip -> 404
2026-08-20 19:27:52,082 WARNING: GET /database.sql -> 404
2026-08-20 19:27:52,083 WARNING: GET /www.zip -> 404
2026-08-20 19:27:52,084 INFO: << 404 /dump.sql
2026-08-20 19:27:52,084 INFO: << 404 /db.sql
2026-08-20 19:27:52,084 INFO: << 404 /site.sql
2026-08-20 19:27:52,084 INFO: << 404 /site.zip
2026-08-20 19:27:52,085 INFO: >> GET /public_html.zip
2026-08-20 19:27:52,085 INFO: << 404 /www.zip
2026-08-20 19:27:52,085 INFO: >> GET /backup/db.sql
2026-08-20 19:27:52,085 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,085 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,085 INFO: << 404 /database.sql
2026-08-20 19:27:52,085 INFO: >> GET /data.sql
2026-08-20 19:27:52,085 INFO: >> GET /sql/backup.sql
2026-08-20 19:27:52,085 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,085 INFO: GET /public_html.zip
2026-08-20 19:27:52,085 INFO: GET /backup/db.sql
2026-08-20 19:27:52,085 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,085 INFO: >> GET /.env.zip
2026-08-20 19:27:52,085 INFO: GET /data.sql
2026-08-20 19:27:52,085 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,085 INFO: GET /sql/backup.sql
2026-08-20 19:27:52,086 INFO: GET /.env.zip
2026-08-20 19:27:52,086 WARNING: GET /backup/db.sql -> 404
2026-08-20 19:27:52,086 WARNING: GET /public_html.zip -> 404
2026-08-20 19:27:52,086 WARNING: GET /sql/backup.sql -> 404
2026-08-20 19:27:52,086 WARNING: GET /data.sql -> 404
2026-08-20 19:27:52,087 WARNING: GET /.env.zip -> 404
2026-08-20 19:27:52,088 INFO: << 404 /sql/backup.sql
2026-08-20 19:27:52,088 INFO: << 404 /data.sql
2026-08-20 19:27:52,088 INFO: << 404 /public_html.zip
2026-08-20 19:27:52,088 INFO: << 404 /backup/db.sql
2026-08-20 19:27:52,089 INFO: << 404 /.env.zip
2026-08-20 19:27:52,089 INFO: >> GET /config.bak
2026-08-20 19:27:52,090 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,090 INFO: GET /config.bak
2026-08-20 19:27:52,091 WARNING: GET /config.bak -> 404
2026-08-20 19:27:52,093 INFO: << 404 /config.bak
2026-08-20 19:27:52,094 INFO: >> GET /config.php.bak
2026-08-20 19:27:52,094 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,094 INFO: >> GET /settings.php.bak
2026-08-20 19:27:52,094 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,094 INFO: GET /config.php.bak
2026-08-20 19:27:52,094 INFO: >> GET /web.config.bak
2026-08-20 19:27:52,094 INFO: >> GET /config/database.php
2026-08-20 19:27:52,094 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,094 INFO: GET /settings.php.bak
2026-08-20 19:27:52,095 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,095 INFO: >> GET /config/app.php
2026-08-20 19:27:52,095 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,095 INFO: >> GET /artisan
2026-08-20 19:27:52,095 INFO: GET /web.config.bak
2026-08-20 19:27:52,095 INFO: GET /config/database.php
2026-08-20 19:27:52,095 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,095 INFO: GET /config/app.php
2026-08-20 19:27:52,095 WARNING: GET /config.php.bak -> 404
2026-08-20 19:27:52,095 INFO: GET /artisan
2026-08-20 19:27:52,096 WARNING: GET /config/database.php -> 404
2026-08-20 19:27:52,096 WARNING: GET /web.config.bak -> 404
2026-08-20 19:27:52,096 WARNING: GET /settings.php.bak -> 404
2026-08-20 19:27:52,096 WARNING: GET /config/app.php -> 404
2026-08-20 19:27:52,097 WARNING: GET /artisan -> 404
2026-08-20 19:27:52,098 INFO: << 404 /config.php.bak
2026-08-20 19:27:52,098 INFO: << 404 /config/database.php
2026-08-20 19:27:52,098 INFO: << 404 /settings.php.bak
2026-08-20 19:27:52,098 INFO: >> GET /app/config/parameters.yml
2026-08-20 19:27:52,098 INFO: << 404 /web.config.bak
2026-08-20 19:27:52,098 INFO: << 404 /config/app.php
2026-08-20 19:27:52,098 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,098 INFO: >> GET /config.php
2026-08-20 19:27:52,098 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,098 INFO: >> GET /actuator
2026-08-20 19:27:52,099 INFO: GET /app/config/parameters.yml
2026-08-20 19:27:52,099 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,099 INFO: GET /config.php
2026-08-20 19:27:52,099 INFO: GET /actuator
2026-08-20 19:27:52,099 INFO: << 404 /artisan
2026-08-20 19:27:52,100 WARNING: GET /config.php -> 404
2026-08-20 19:27:52,100 WARNING: GET /app/config/parameters.yml -> 404
2026-08-20 19:27:52,100 WARNING: GET /actuator -> 404
2026-08-20 19:27:52,102 INFO: << 404 /app/config/parameters.yml
2026-08-20 19:27:52,102 INFO: << 404 /config.php
2026-08-20 19:27:52,102 INFO: << 404 /actuator
2026-08-20 19:27:52,235 INFO: >> GET /actuator/env
2026-08-20 19:27:52,235 INFO: >> GET /actuator/health
2026-08-20 19:27:52,235 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,235 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,235 INFO: >> GET /actuator/info
2026-08-20 19:27:52,236 INFO: >> GET /actuator/mappings
2026-08-20 19:27:52,236 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,236 INFO: GET /actuator/env
2026-08-20 19:27:52,236 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,236 INFO: >> GET /actuator/beans
2026-08-20 19:27:52,236 INFO: GET /actuator/health
2026-08-20 19:27:52,236 INFO: >> GET /actuator/configprops
2026-08-20 19:27:52,236 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,236 INFO: GET /actuator/info
2026-08-20 19:27:52,236 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,236 INFO: GET /actuator/mappings
2026-08-20 19:27:52,236 INFO: GET /actuator/beans
2026-08-20 19:27:52,236 INFO: GET /actuator/configprops
2026-08-20 19:27:52,237 WARNING: GET /actuator/env -> 404
2026-08-20 19:27:52,237 WARNING: GET /actuator/health -> 404
2026-08-20 19:27:52,237 WARNING: GET /actuator/info -> 404
2026-08-20 19:27:52,237 WARNING: GET /actuator/configprops -> 404
2026-08-20 19:27:52,237 WARNING: GET /actuator/beans -> 404
2026-08-20 19:27:52,238 WARNING: GET /actuator/mappings -> 404
2026-08-20 19:27:52,239 INFO: << 404 /actuator/info
2026-08-20 19:27:52,239 INFO: << 404 /actuator/health
2026-08-20 19:27:52,239 INFO: << 404 /actuator/env
2026-08-20 19:27:52,239 INFO: << 404 /actuator/configprops
2026-08-20 19:27:52,239 INFO: << 404 /actuator/beans
2026-08-20 19:27:52,240 INFO: >> GET /actuator/heapdump
2026-08-20 19:27:52,240 INFO: >> GET /actuator/gateway/routes
2026-08-20 19:27:52,240 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,240 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,240 INFO: << 404 /actuator/mappings
2026-08-20 19:27:52,240 INFO: >> GET /actuator/prometheus
2026-08-20 19:27:52,240 INFO: GET /actuator/heapdump
2026-08-20 19:27:52,240 INFO: >> GET /jolokia
2026-08-20 19:27:52,240 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,240 INFO: GET /actuator/gateway/routes
2026-08-20 19:27:52,240 INFO: >> GET /jolokia/list
2026-08-20 19:27:52,240 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,240 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,240 INFO: GET /actuator/prometheus
2026-08-20 19:27:52,240 INFO: >> GET /application.properties
2026-08-20 19:27:52,240 INFO: GET /jolokia/list
2026-08-20 19:27:52,240 INFO: GET /jolokia
2026-08-20 19:27:52,241 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,241 INFO: GET /application.properties
2026-08-20 19:27:52,241 WARNING: GET /actuator/gateway/routes -> 404
2026-08-20 19:27:52,241 WARNING: GET /actuator/heapdump -> 404
2026-08-20 19:27:52,241 WARNING: GET /jolokia/list -> 404
2026-08-20 19:27:52,242 WARNING: GET /actuator/prometheus -> 404
2026-08-20 19:27:52,242 WARNING: GET /jolokia -> 404
2026-08-20 19:27:52,242 WARNING: GET /application.properties -> 404
2026-08-20 19:27:52,243 INFO: << 404 /actuator/gateway/routes
2026-08-20 19:27:52,243 INFO: << 404 /jolokia/list
2026-08-20 19:27:52,243 INFO: << 404 /actuator/heapdump
2026-08-20 19:27:52,243 INFO: >> GET /application.yml
2026-08-20 19:27:52,244 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,244 INFO: >> GET /application.yaml
2026-08-20 19:27:52,244 INFO: << 404 /actuator/prometheus
2026-08-20 19:27:52,244 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,244 INFO: << 404 /jolokia
2026-08-20 19:27:52,244 INFO: >> GET /application-prod.yml
2026-08-20 19:27:52,244 INFO: GET /application.yml
2026-08-20 19:27:52,244 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,244 INFO: GET /application.yaml
2026-08-20 19:27:52,244 INFO: >> GET /application-dev.yml
2026-08-20 19:27:52,244 INFO: >> GET /html.zip
2026-08-20 19:27:52,244 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,244 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,244 INFO: GET /application-prod.yml
2026-08-20 19:27:52,244 INFO: << 404 /application.properties
2026-08-20 19:27:52,245 INFO: GET /application-dev.yml
2026-08-20 19:27:52,245 INFO: GET /html.zip
2026-08-20 19:27:52,245 WARNING: GET /application.yml -> 404
2026-08-20 19:27:52,245 WARNING: GET /application.yaml -> 404
2026-08-20 19:27:52,246 WARNING: GET /application-dev.yml -> 404
2026-08-20 19:27:52,246 WARNING: GET /application-prod.yml -> 404
2026-08-20 19:27:52,246 WARNING: GET /html.zip -> 404
2026-08-20 19:27:52,247 INFO: << 404 /application.yaml
2026-08-20 19:27:52,247 INFO: << 404 /application.yml
2026-08-20 19:27:52,247 INFO: << 404 /html.zip
2026-08-20 19:27:52,248 INFO: << 404 /application-dev.yml
2026-08-20 19:27:52,248 INFO: << 404 /application-prod.yml
2026-08-20 19:27:52,606 INFO: >> GET /vite.config.ts
2026-08-20 19:27:52,606 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:52,606 INFO: GET /vite.config.ts
2026-08-20 19:27:52,608 WARNING: GET /vite.config.ts -> 404
2026-08-20 19:27:52,610 INFO: << 404 /vite.config.ts
2026-08-20 19:27:53,571 INFO: >> GET /.next/routes-manifest.json
2026-08-20 19:27:53,571 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:53,571 INFO: GET /.next/routes-manifest.json
2026-08-20 19:27:53,573 WARNING: GET /.next/routes-manifest.json -> 404
2026-08-20 19:27:53,575 INFO: << 404 /.next/routes-manifest.json
2026-08-20 19:27:54,295 INFO: >> GET /package-lock.json
2026-08-20 19:27:54,295 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:54,295 INFO: GET /package-lock.json
2026-08-20 19:27:54,297 WARNING: GET /package-lock.json -> 404
2026-08-20 19:27:54,299 INFO: << 404 /package-lock.json
2026-08-20 19:27:54,729 INFO: >> GET /runtime-config.js
2026-08-20 19:27:54,730 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:54,730 INFO: GET /runtime-config.js
2026-08-20 19:27:54,731 WARNING: GET /runtime-config.js -> 404
2026-08-20 19:27:54,733 INFO: << 404 /runtime-config.js
2026-08-20 19:27:55,268 INFO: >> GET /.travis.yml
2026-08-20 19:27:55,268 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:55,269 INFO: GET /.travis.yml
2026-08-20 19:27:55,270 WARNING: GET /.travis.yml -> 404
2026-08-20 19:27:55,272 INFO: << 404 /.travis.yml
2026-08-20 19:27:56,742 INFO: >> GET /composer.lock
2026-08-20 19:27:56,742 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:56,742 INFO: GET /composer.lock
2026-08-20 19:27:56,744 WARNING: GET /composer.lock -> 404
2026-08-20 19:27:56,745 INFO: >> GET /.npmrc
2026-08-20 19:27:56,746 INFO: << 404 /composer.lock
2026-08-20 19:27:56,746 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:56,756 INFO: GET /.npmrc
2026-08-20 19:27:56,759 WARNING: GET /.npmrc -> 404
2026-08-20 19:27:56,783 INFO: >> GET /.circleci/config.yml
2026-08-20 19:27:56,783 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:56,783 INFO: GET /.circleci/config.yml
2026-08-20 19:27:56,785 WARNING: GET /.circleci/config.yml -> 404
2026-08-20 19:27:56,787 INFO: << 404 /.circleci/config.yml
2026-08-20 19:27:56,788 INFO: << 404 /.npmrc
2026-08-20 19:27:57,036 INFO: >> GET /composer.json
2026-08-20 19:27:57,037 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:57,047 INFO: GET /composer.json
2026-08-20 19:27:57,050 WARNING: GET /composer.json -> 404
2026-08-20 19:27:57,079 INFO: << 404 /composer.json
2026-08-20 19:27:57,824 INFO: >> GET /bitbucket-pipelines.yml
2026-08-20 19:27:57,824 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:57,824 INFO: GET /bitbucket-pipelines.yml
2026-08-20 19:27:57,826 WARNING: GET /bitbucket-pipelines.yml -> 404
2026-08-20 19:27:57,828 INFO: << 404 /bitbucket-pipelines.yml
2026-08-20 19:27:58,244 INFO: >> GET /Jenkinsfile
2026-08-20 19:27:58,245 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:58,245 INFO: GET /Jenkinsfile
2026-08-20 19:27:58,247 WARNING: GET /Jenkinsfile -> 404
2026-08-20 19:27:58,249 INFO: << 404 /Jenkinsfile
2026-08-20 19:27:59,329 INFO: >> GET /config/development.json
2026-08-20 19:27:59,329 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,329 INFO: >> GET /config.js
2026-08-20 19:27:59,329 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,329 INFO: >> GET /config.json
2026-08-20 19:27:59,329 INFO: GET /config/development.json
2026-08-20 19:27:59,329 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,330 INFO: GET /config.js
2026-08-20 19:27:59,330 INFO: GET /config.json
2026-08-20 19:27:59,331 WARNING: GET /config.json -> 404
2026-08-20 19:27:59,331 WARNING: GET /config.js -> 404
2026-08-20 19:27:59,331 WARNING: GET /config/development.json -> 404
2026-08-20 19:27:59,332 INFO: >> GET /config/production.json
2026-08-20 19:27:59,333 INFO: << 404 /config.js
2026-08-20 19:27:59,333 INFO: << 404 /config.json
2026-08-20 19:27:59,333 INFO: << 404 /config/development.json
2026-08-20 19:27:59,333 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,343 INFO: GET /config/production.json
2026-08-20 19:27:59,346 WARNING: GET /config/production.json -> 404
2026-08-20 19:27:59,375 INFO: << 404 /config/production.json
2026-08-20 19:27:59,454 INFO: >> GET /docker-compose.yml
2026-08-20 19:27:59,454 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,454 INFO: GET /docker-compose.yml
2026-08-20 19:27:59,456 WARNING: GET /docker-compose.yml -> 404
2026-08-20 19:27:59,458 INFO: << 404 /docker-compose.yml
2026-08-20 19:27:59,516 INFO: >> GET /server.js
2026-08-20 19:27:59,516 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,516 INFO: >> GET /app.js
2026-08-20 19:27:59,516 INFO: >> GET /ecosystem.config.js
2026-08-20 19:27:59,516 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,516 INFO: >> GET /next.config.js
2026-08-20 19:27:59,516 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,516 INFO: GET /server.js
2026-08-20 19:27:59,516 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,516 INFO: >> GET /nuxt.config.js
2026-08-20 19:27:59,517 INFO: GET /app.js
2026-08-20 19:27:59,517 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,517 INFO: GET /ecosystem.config.js
2026-08-20 19:27:59,517 INFO: GET /next.config.js
2026-08-20 19:27:59,517 INFO: GET /nuxt.config.js
2026-08-20 19:27:59,518 WARNING: GET /app.js -> 404
2026-08-20 19:27:59,518 WARNING: GET /next.config.js -> 404
2026-08-20 19:27:59,518 WARNING: GET /ecosystem.config.js -> 404
2026-08-20 19:27:59,518 WARNING: GET /server.js -> 404
2026-08-20 19:27:59,518 WARNING: GET /nuxt.config.js -> 404
2026-08-20 19:27:59,519 INFO: >> GET /vite.config.js
2026-08-20 19:27:59,520 INFO: << 404 /ecosystem.config.js
2026-08-20 19:27:59,520 INFO: << 404 /next.config.js
2026-08-20 19:27:59,520 INFO: << 404 /nuxt.config.js
2026-08-20 19:27:59,520 INFO: << 404 /app.js
2026-08-20 19:27:59,520 INFO: << 404 /server.js
2026-08-20 19:27:59,521 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,531 INFO: GET /vite.config.js
2026-08-20 19:27:59,534 WARNING: GET /vite.config.js -> 404
2026-08-20 19:27:59,562 INFO: << 404 /vite.config.js
2026-08-20 19:27:59,851 INFO: >> GET /netlify.toml
2026-08-20 19:27:59,851 INFO: >> GET /.vercel/project.json
2026-08-20 19:27:59,851 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,851 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,851 INFO: >> GET /.next/BUILD_ID
2026-08-20 19:27:59,852 DEBUG: Using selector: EpollSelector
2026-08-20 19:27:59,852 INFO: GET /netlify.toml
2026-08-20 19:27:59,852 INFO: GET /.vercel/project.json
2026-08-20 19:27:59,852 INFO: GET /.next/BUILD_ID
2026-08-20 19:27:59,853 WARNING: GET /.vercel/project.json -> 404
2026-08-20 19:27:59,853 WARNING: GET /netlify.toml -> 404
2026-08-20 19:27:59,853 WARNING: GET /.next/BUILD_ID -> 404
2026-08-20 19:27:59,855 INFO: << 404 /.next/BUILD_ID
2026-08-20 19:27:59,856 INFO: << 404 /.vercel/project.json
2026-08-20 19:27:59,856 INFO: << 404 /netlify.toml
2026-08-20 19:28:00,449 INFO: >> GET /.dockercfg
2026-08-20 19:28:00,449 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:00,450 INFO: GET /.dockercfg
2026-08-20 19:28:00,451 WARNING: GET /.dockercfg -> 404
2026-08-20 19:28:00,453 INFO: << 404 /.dockercfg
2026-08-20 19:28:00,905 INFO: >> GET /env.js
2026-08-20 19:28:00,905 INFO: >> GET /env.json
2026-08-20 19:28:00,905 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:00,905 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:00,906 INFO: GET /env.js
2026-08-20 19:28:00,906 INFO: GET /env.json
2026-08-20 19:28:00,907 WARNING: GET /env.js -> 404
2026-08-20 19:28:00,907 WARNING: GET /env.json -> 404
2026-08-20 19:28:00,909 INFO: << 404 /env.json
2026-08-20 19:28:00,909 INFO: << 404 /env.js
2026-08-20 19:28:01,514 INFO: >> GET /ansible/vault.yml
2026-08-20 19:28:01,515 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,515 INFO: GET /ansible/vault.yml
2026-08-20 19:28:01,516 WARNING: GET /ansible/vault.yml -> 404
2026-08-20 19:28:01,519 INFO: << 404 /ansible/vault.yml
2026-08-20 19:28:01,741 INFO: >> GET /app.config.js
2026-08-20 19:28:01,741 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,741 INFO: >> GET /assets/config.js
2026-08-20 19:28:01,741 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,742 INFO: GET /app.config.js
2026-08-20 19:28:01,742 INFO: GET /assets/config.js
2026-08-20 19:28:01,743 INFO: >> GET /appsettings.json
2026-08-20 19:28:01,743 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,743 WARNING: GET /assets/config.js -> 404
2026-08-20 19:28:01,743 WARNING: GET /app.config.js -> 404
2026-08-20 19:28:01,743 INFO: GET /appsettings.json
2026-08-20 19:28:01,745 WARNING: GET /appsettings.json -> 404
2026-08-20 19:28:01,746 INFO: >> GET /js/config.js
2026-08-20 19:28:01,746 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,746 INFO: << 404 /assets/config.js
2026-08-20 19:28:01,746 INFO: << 404 /app.config.js
2026-08-20 19:28:01,746 INFO: GET /js/config.js
2026-08-20 19:28:01,747 INFO: >> GET /appsettings.Development.json
2026-08-20 19:28:01,747 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,747 INFO: GET /appsettings.Development.json
2026-08-20 19:28:01,747 INFO: >> GET /appsettings.Staging.json
2026-08-20 19:28:01,747 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,748 INFO: >> GET /appsettings.Production.json
2026-08-20 19:28:01,748 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,748 INFO: GET /appsettings.Staging.json
2026-08-20 19:28:01,748 WARNING: GET /js/config.js -> 404
2026-08-20 19:28:01,748 INFO: GET /appsettings.Production.json
2026-08-20 19:28:01,748 WARNING: GET /appsettings.Development.json -> 404
2026-08-20 19:28:01,749 WARNING: GET /appsettings.Staging.json -> 404
2026-08-20 19:28:01,749 WARNING: GET /appsettings.Production.json -> 404
2026-08-20 19:28:01,751 INFO: << 404 /appsettings.Development.json
2026-08-20 19:28:01,752 INFO: << 404 /js/config.js
2026-08-20 19:28:01,752 INFO: << 404 /appsettings.json
2026-08-20 19:28:01,752 INFO: >> GET /web.config
2026-08-20 19:28:01,753 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,753 INFO: >> GET /elmah.axd
2026-08-20 19:28:01,753 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,753 INFO: GET /web.config
2026-08-20 19:28:01,753 INFO: GET /elmah.axd
2026-08-20 19:28:01,753 INFO: << 404 /appsettings.Staging.json
2026-08-20 19:28:01,754 INFO: << 404 /appsettings.Production.json
2026-08-20 19:28:01,754 WARNING: GET /web.config -> 404
2026-08-20 19:28:01,754 WARNING: GET /elmah.axd -> 404
2026-08-20 19:28:01,757 INFO: << 404 /web.config
2026-08-20 19:28:01,760 INFO: << 404 /elmah.axd
2026-08-20 19:28:01,905 INFO: >> GET /config/settings.py
2026-08-20 19:28:01,905 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,905 INFO: GET /config/settings.py
2026-08-20 19:28:01,906 INFO: >> GET /trace.axd
2026-08-20 19:28:01,907 WARNING: GET /config/settings.py -> 404
2026-08-20 19:28:01,907 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,907 INFO: GET /trace.axd
2026-08-20 19:28:01,907 INFO: >> GET /settings/development.py
2026-08-20 19:28:01,907 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,908 INFO: GET /settings/development.py
2026-08-20 19:28:01,908 WARNING: GET /trace.axd -> 404
2026-08-20 19:28:01,909 WARNING: GET /settings/development.py -> 404
2026-08-20 19:28:01,909 INFO: >> GET /local_settings.py
2026-08-20 19:28:01,910 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,910 INFO: GET /local_settings.py
2026-08-20 19:28:01,911 INFO: << 404 /trace.axd
2026-08-20 19:28:01,911 WARNING: GET /local_settings.py -> 404
2026-08-20 19:28:01,911 INFO: >> GET /settings/production.py
2026-08-20 19:28:01,911 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,912 INFO: GET /settings/production.py
2026-08-20 19:28:01,913 WARNING: GET /settings/production.py -> 404
2026-08-20 19:28:01,915 INFO: << 404 /settings/production.py
2026-08-20 19:28:01,916 INFO: << 404 /config/settings.py
2026-08-20 19:28:01,918 INFO: << 404 /settings/development.py
2026-08-20 19:28:01,918 INFO: >> GET /config/secrets.yml
2026-08-20 19:28:01,918 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,918 INFO: GET /config/secrets.yml
2026-08-20 19:28:01,920 WARNING: GET /config/secrets.yml -> 404
2026-08-20 19:28:01,922 INFO: << 404 /config/secrets.yml
2026-08-20 19:28:01,923 INFO: >> GET /config/master.key
2026-08-20 19:28:01,923 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,924 INFO: GET /config/master.key
2026-08-20 19:28:01,925 WARNING: GET /config/master.key -> 404
2026-08-20 19:28:01,926 INFO: >> GET /Pipfile
2026-08-20 19:28:01,926 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,927 INFO: GET /Pipfile
2026-08-20 19:28:01,928 WARNING: GET /Pipfile -> 404
2026-08-20 19:28:01,928 INFO: << 404 /config/master.key
2026-08-20 19:28:01,928 INFO: >> GET /manage.py
2026-08-20 19:28:01,929 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,929 INFO: GET /manage.py
2026-08-20 19:28:01,929 INFO: >> GET /config/credentials.yml.enc
2026-08-20 19:28:01,929 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,930 INFO: GET /config/credentials.yml.enc
2026-08-20 19:28:01,930 WARNING: GET /manage.py -> 404
2026-08-20 19:28:01,931 WARNING: GET /config/credentials.yml.enc -> 404
2026-08-20 19:28:01,931 INFO: >> GET /config/database.yml
2026-08-20 19:28:01,931 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,931 INFO: GET /config/database.yml
2026-08-20 19:28:01,933 WARNING: GET /config/database.yml -> 404
2026-08-20 19:28:01,933 INFO: << 404 /Pipfile
2026-08-20 19:28:01,933 INFO: << 404 /config/credentials.yml.enc
2026-08-20 19:28:01,934 INFO: >> GET /rails/info/properties
2026-08-20 19:28:01,934 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,934 INFO: GET /rails/info/properties
2026-08-20 19:28:01,934 INFO: << 404 /local_settings.py
2026-08-20 19:28:01,935 WARNING: GET /rails/info/properties -> 404
2026-08-20 19:28:01,936 INFO: << 404 /config/database.yml
2026-08-20 19:28:01,936 INFO: << 404 /manage.py
2026-08-20 19:28:01,936 INFO: >> GET /Gemfile
2026-08-20 19:28:01,936 INFO: >> GET /rails/info/routes
2026-08-20 19:28:01,936 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,936 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,937 INFO: GET /Gemfile
2026-08-20 19:28:01,937 INFO: GET /rails/info/routes
2026-08-20 19:28:01,938 WARNING: GET /Gemfile -> 404
2026-08-20 19:28:01,938 WARNING: GET /rails/info/routes -> 404
2026-08-20 19:28:01,939 INFO: >> GET /settings.py
2026-08-20 19:28:01,939 INFO: >> GET /Rakefile
2026-08-20 19:28:01,939 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,939 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:01,939 INFO: GET /settings.py
2026-08-20 19:28:01,939 INFO: GET /Rakefile
2026-08-20 19:28:01,939 INFO: << 404 /rails/info/properties
2026-08-20 19:28:01,940 WARNING: GET /settings.py -> 404
2026-08-20 19:28:01,940 WARNING: GET /Rakefile -> 404
2026-08-20 19:28:01,944 INFO: << 404 /settings.py
2026-08-20 19:28:01,944 INFO: << 404 /rails/info/routes
2026-08-20 19:28:01,945 INFO: << 404 /Gemfile
2026-08-20 19:28:01,945 INFO: << 404 /Rakefile
2026-08-20 19:28:02,096 INFO: >> GET /assets/env.js
2026-08-20 19:28:02,097 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:02,109 INFO: GET /assets/env.js
2026-08-20 19:28:02,112 WARNING: GET /assets/env.js -> 404
2026-08-20 19:28:02,141 INFO: << 404 /assets/env.js
2026-08-20 19:28:02,454 INFO: >> GET /.bzr/README
2026-08-20 19:28:02,454 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:02,454 INFO: GET /.bzr/README
2026-08-20 19:28:02,456 WARNING: GET /.bzr/README -> 404
2026-08-20 19:28:02,458 INFO: << 404 /.bzr/README
2026-08-20 19:28:03,094 INFO: >> GET /healthz
2026-08-20 19:28:03,094 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:03,095 INFO: GET /healthz
2026-08-20 19:28:03,096 WARNING: GET /healthz -> 404
2026-08-20 19:28:03,099 INFO: << 404 /healthz
2026-08-20 19:28:03,754 INFO: >> GET /ready
2026-08-20 19:28:03,754 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:03,755 INFO: GET /ready
2026-08-20 19:28:03,756 WARNING: GET /ready -> 404
2026-08-20 19:28:03,758 INFO: << 404 /ready
2026-08-20 19:28:04,285 INFO: >> GET /status
2026-08-20 19:28:04,286 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:04,286 INFO: GET /status
2026-08-20 19:28:04,287 WARNING: GET /status -> 404
2026-08-20 19:28:04,290 INFO: << 404 /status
2026-08-20 19:28:04,385 INFO: >> GET /azure-pipelines.yml
2026-08-20 19:28:04,385 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:04,386 INFO: GET /azure-pipelines.yml
2026-08-20 19:28:04,387 WARNING: GET /azure-pipelines.yml -> 404
2026-08-20 19:28:04,389 INFO: << 404 /azure-pipelines.yml
2026-08-20 19:28:05,078 INFO: >> GET /adminer.php
2026-08-20 19:28:05,079 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:05,079 INFO: GET /adminer.php
2026-08-20 19:28:05,080 WARNING: GET /adminer.php -> 404
2026-08-20 19:28:05,083 INFO: << 404 /adminer.php
2026-08-20 19:28:06,574 INFO: >> GET /sitemap.xml
2026-08-20 19:28:06,576 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:06,587 INFO: GET /sitemap.xml
2026-08-20 19:28:06,590 WARNING: GET /sitemap.xml -> 404
2026-08-20 19:28:06,618 INFO: << 404 /sitemap.xml
2026-08-20 19:28:07,908 INFO: >> GET /docker-compose.yaml
2026-08-20 19:28:07,908 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:07,909 INFO: >> GET /Dockerfile
2026-08-20 19:28:07,909 INFO: GET /docker-compose.yaml
2026-08-20 19:28:07,909 INFO: >> GET /.dockerignore
2026-08-20 19:28:07,909 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:07,909 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:07,909 INFO: GET /Dockerfile
2026-08-20 19:28:07,909 INFO: GET /.dockerignore
2026-08-20 19:28:07,910 WARNING: GET /docker-compose.yaml -> 404
2026-08-20 19:28:07,910 WARNING: GET /Dockerfile -> 404
2026-08-20 19:28:07,910 WARNING: GET /.dockerignore -> 404
2026-08-20 19:28:07,911 INFO: >> GET /docker-compose.prod.yml
2026-08-20 19:28:07,912 INFO: << 404 /Dockerfile
2026-08-20 19:28:07,912 INFO: << 404 /.dockerignore
2026-08-20 19:28:07,912 INFO: << 404 /docker-compose.yaml
2026-08-20 19:28:07,912 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:07,913 INFO: >> GET /docker-compose.override.yml
2026-08-20 19:28:07,914 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:07,922 INFO: GET /docker-compose.prod.yml
2026-08-20 19:28:07,924 INFO: GET /docker-compose.override.yml
2026-08-20 19:28:07,925 WARNING: GET /docker-compose.prod.yml -> 404
2026-08-20 19:28:07,927 WARNING: GET /docker-compose.override.yml -> 404
2026-08-20 19:28:07,954 INFO: << 404 /docker-compose.prod.yml
2026-08-20 19:28:07,955 INFO: << 404 /docker-compose.override.yml
2026-08-20 19:28:08,340 INFO: >> GET /robots.txt
2026-08-20 19:28:08,340 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,340 INFO: GET /robots.txt
2026-08-20 19:28:08,342 WARNING: GET /robots.txt -> 404
2026-08-20 19:28:08,345 INFO: << 404 /robots.txt
2026-08-20 19:28:08,483 INFO: >> GET /.docker/config.json
2026-08-20 19:28:08,484 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,484 INFO: GET /.docker/config.json
2026-08-20 19:28:08,484 INFO: >> GET /helm/values.yaml
2026-08-20 19:28:08,485 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,485 INFO: GET /helm/values.yaml
2026-08-20 19:28:08,485 INFO: >> GET /kubernetes/secrets.yaml
2026-08-20 19:28:08,485 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,485 WARNING: GET /.docker/config.json -> 404
2026-08-20 19:28:08,486 INFO: GET /kubernetes/secrets.yaml
2026-08-20 19:28:08,486 WARNING: GET /helm/values.yaml -> 404
2026-08-20 19:28:08,487 INFO: >> GET /terraform.tfstate
2026-08-20 19:28:08,487 WARNING: GET /kubernetes/secrets.yaml -> 404
2026-08-20 19:28:08,487 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,487 INFO: GET /terraform.tfstate
2026-08-20 19:28:08,488 INFO: << 404 /.docker/config.json
2026-08-20 19:28:08,489 WARNING: GET /terraform.tfstate -> 404
2026-08-20 19:28:08,490 INFO: >> GET /terraform.tfvars
2026-08-20 19:28:08,490 INFO: << 404 /kubernetes/secrets.yaml
2026-08-20 19:28:08,490 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,490 INFO: GET /terraform.tfvars
2026-08-20 19:28:08,492 WARNING: GET /terraform.tfvars -> 404
2026-08-20 19:28:08,492 INFO: >> GET /.terraform/terraform.tfstate
2026-08-20 19:28:08,493 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,493 INFO: << 404 /terraform.tfstate
2026-08-20 19:28:08,493 INFO: GET /.terraform/terraform.tfstate
2026-08-20 19:28:08,494 WARNING: GET /.terraform/terraform.tfstate -> 404
2026-08-20 19:28:08,497 INFO: << 404 /.terraform/terraform.tfstate
2026-08-20 19:28:08,497 INFO: << 404 /helm/values.yaml
2026-08-20 19:28:08,497 INFO: << 404 /terraform.tfvars
2026-08-20 19:28:08,752 INFO: >> GET /static/js/bundle.js.map
2026-08-20 19:28:08,753 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:08,753 INFO: GET /static/js/bundle.js.map
2026-08-20 19:28:08,754 WARNING: GET /static/js/bundle.js.map -> 404
2026-08-20 19:28:08,757 INFO: << 404 /static/js/bundle.js.map
2026-08-20 19:28:10,832 INFO: >> GET /swagger/v1/swagger.json
2026-08-20 19:28:10,832 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,833 INFO: >> GET /graphiql
2026-08-20 19:28:10,833 INFO: GET /swagger/v1/swagger.json
2026-08-20 19:28:10,833 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,833 INFO: GET /graphiql
2026-08-20 19:28:10,834 INFO: >> GET /openapi.json
2026-08-20 19:28:10,834 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,834 WARNING: GET /swagger/v1/swagger.json -> 404
2026-08-20 19:28:10,834 INFO: GET /openapi.json
2026-08-20 19:28:10,835 WARNING: GET /graphiql -> 404
2026-08-20 19:28:10,836 INFO: << 404 /swagger/v1/swagger.json
2026-08-20 19:28:10,837 INFO: >> GET /server-status
2026-08-20 19:28:10,838 INFO: << 404 /graphiql
2026-08-20 19:28:10,838 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,838 INFO: GET /server-status
2026-08-20 19:28:10,839 INFO: >> GET /server-info
2026-08-20 19:28:10,839 WARNING: GET /server-status -> 404
2026-08-20 19:28:10,839 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,840 INFO: GET /server-info
2026-08-20 19:28:10,841 WARNING: GET /server-info -> 404
2026-08-20 19:28:10,842 INFO: << 404 /server-status
2026-08-20 19:28:10,842 INFO: >> GET /nginx_status
2026-08-20 19:28:10,843 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,843 INFO: GET /nginx_status
2026-08-20 19:28:10,844 INFO: << 404 /server-info
2026-08-20 19:28:10,844 INFO: >> GET /health
2026-08-20 19:28:10,844 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,844 WARNING: GET /nginx_status -> 404
2026-08-20 19:28:10,845 INFO: GET /health
2026-08-20 19:28:10,841 INFO: >> GET /api-docs
2026-08-20 19:28:10,875 WARNING: GET /health -> 404
2026-08-20 19:28:10,876 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,876 INFO: << 404 /nginx_status
2026-08-20 19:28:10,888 INFO: << 404 /health
2026-08-20 19:28:10,894 INFO: >> GET /graphql
2026-08-20 19:28:10,894 INFO: GET /api-docs
2026-08-20 19:28:10,895 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,897 WARNING: GET /api-docs -> 404
2026-08-20 19:28:10,905 INFO: GET /graphql
2026-08-20 19:28:10,908 WARNING: GET /graphql -> 404
2026-08-20 19:28:10,927 INFO: << 404 /api-docs
2026-08-20 19:28:10,988 INFO: >> GET /metrics
2026-08-20 19:28:10,988 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:10,989 INFO: GET /metrics
2026-08-20 19:28:10,990 WARNING: GET /metrics -> 404
2026-08-20 19:28:10,993 INFO: << 404 /graphql
2026-08-20 19:28:10,993 INFO: << 404 /metrics
2026-08-20 19:28:11,210 INFO: >> GET /swagger.json
2026-08-20 19:28:11,212 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:11,223 INFO: GET /swagger.json
2026-08-20 19:28:11,226 WARNING: GET /swagger.json -> 404
2026-08-20 19:28:11,256 INFO: << 404 /swagger.json
2026-08-20 19:28:11,838 INFO: << 200 /openapi.json
2026-08-20 19:28:14,542 INFO: >> GET /wp-json/wp/v2/users
2026-08-20 19:28:14,543 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:14,543 INFO: GET /wp-json/wp/v2/users
2026-08-20 19:28:14,544 WARNING: GET /wp-json/wp/v2/users -> 404
2026-08-20 19:28:14,545 INFO: >> GET /xmlrpc.php
2026-08-20 19:28:14,546 INFO: << 404 /wp-json/wp/v2/users
2026-08-20 19:28:14,547 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:14,556 INFO: GET /xmlrpc.php
2026-08-20 19:28:14,559 WARNING: GET /xmlrpc.php -> 404
2026-08-20 19:28:14,589 INFO: << 404 /xmlrpc.php
2026-08-20 19:28:14,595 INFO: >> GET /phpmyadmin/
2026-08-20 19:28:14,596 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:14,596 INFO: GET /phpmyadmin/
2026-08-20 19:28:14,597 WARNING: GET /phpmyadmin/ -> 404
2026-08-20 19:28:14,600 INFO: << 404 /phpmyadmin/
2026-08-20 19:28:16,578 INFO: >> GET /crossdomain.xml
2026-08-20 19:28:16,578 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:16,578 INFO: GET /crossdomain.xml
2026-08-20 19:28:16,580 WARNING: GET /crossdomain.xml -> 404
2026-08-20 19:28:16,581 INFO: >> GET /static/js/main.js.map
2026-08-20 19:28:16,582 INFO: << 404 /crossdomain.xml
2026-08-20 19:28:16,583 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:16,594 INFO: GET /static/js/main.js.map
2026-08-20 19:28:16,597 WARNING: GET /static/js/main.js.map -> 404
2026-08-20 19:28:16,626 INFO: << 404 /static/js/main.js.map
2026-08-20 19:28:16,893 INFO: >> GET /.well-known/security.txt
2026-08-20 19:28:16,895 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:16,905 INFO: GET /.well-known/security.txt
2026-08-20 19:28:16,908 WARNING: GET /.well-known/security.txt -> 404
2026-08-20 19:28:16,940 INFO: << 404 /.well-known/security.txt
2026-08-20 19:28:17,377 INFO: >> GET /main.js.map
2026-08-20 19:28:17,377 INFO: >> GET /bundle.js.map
2026-08-20 19:28:17,377 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,378 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,378 INFO: >> GET /app.js.map
2026-08-20 19:28:17,378 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,378 INFO: GET /main.js.map
2026-08-20 19:28:17,378 INFO: GET /bundle.js.map
2026-08-20 19:28:17,378 INFO: GET /app.js.map
2026-08-20 19:28:17,378 INFO: >> GET /manifest.json
2026-08-20 19:28:17,379 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,379 INFO: GET /manifest.json
2026-08-20 19:28:17,379 WARNING: GET /main.js.map -> 404
2026-08-20 19:28:17,379 WARNING: GET /app.js.map -> 404
2026-08-20 19:28:17,379 WARNING: GET /bundle.js.map -> 404
2026-08-20 19:28:17,380 INFO: >> GET /static/js/main.js
2026-08-20 19:28:17,380 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,380 WARNING: GET /manifest.json -> 404
2026-08-20 19:28:17,381 INFO: GET /static/js/main.js
2026-08-20 19:28:17,381 INFO: >> GET /asset-manifest.json
2026-08-20 19:28:17,382 WARNING: GET /static/js/main.js -> 404
2026-08-20 19:28:17,382 INFO: << 404 /app.js.map
2026-08-20 19:28:17,382 INFO: << 404 /main.js.map
2026-08-20 19:28:17,383 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,383 INFO: << 404 /bundle.js.map
2026-08-20 19:28:17,384 INFO: >> GET /static/js/app.js
2026-08-20 19:28:17,384 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,384 INFO: >> GET /static/js/bundle.js
2026-08-20 19:28:17,384 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,384 INFO: GET /static/js/app.js
2026-08-20 19:28:17,384 INFO: << 404 /static/js/main.js
2026-08-20 19:28:17,384 INFO: << 404 /manifest.json
2026-08-20 19:28:17,385 INFO: GET /static/js/bundle.js
2026-08-20 19:28:17,385 WARNING: GET /static/js/app.js -> 404
2026-08-20 19:28:17,386 WARNING: GET /static/js/bundle.js -> 404
2026-08-20 19:28:17,388 INFO: << 404 /static/js/app.js
2026-08-20 19:28:17,388 INFO: << 404 /static/js/bundle.js
2026-08-20 19:28:17,393 INFO: GET /asset-manifest.json
2026-08-20 19:28:17,396 INFO: >> GET /static/js/app.js.map
2026-08-20 19:28:17,396 DEBUG: Using selector: EpollSelector
2026-08-20 19:28:17,396 INFO: GET /static/js/app.js.map
2026-08-20 19:28:17,396 WARNING: GET /asset-manifest.json -> 404
2026-08-20 19:28:17,398 WARNING: GET /static/js/app.js.map -> 404
2026-08-20 19:28:17,400 INFO: << 404 /static/js/app.js.map
2026-08-20 19:28:17,424 INFO: << 404 /asset-manifest.json
2026-08-20 21:00:18,733 INFO: wsgi.py loading...
2026-08-20 21:00:18,734 INFO: Importing app.main...
2026-08-20 21:00:20,668 INFO: app.main imported successfully.
2026-08-20 21:00:20,668 INFO: Running DB init...
2026-08-20 21:00:20,743 INFO: All tables OK.
2026-08-20 21:00:20,879 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 21:00:20,882 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,885 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,887 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,890 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,892 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,894 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:00:20,903 INFO: Dip chart data seeded.
2026-08-20 21:00:20,903 INFO: DB init complete.
2026-08-20 21:00:20,903 INFO: wsgi.py ready.
2026-08-20 21:00:20,906 INFO: >> GET /
2026-08-20 21:00:20,907 DEBUG: Using selector: EpollSelector
2026-08-20 21:00:20,917 INFO: GET /
2026-08-20 21:00:20,920 WARNING: GET / -> 404
2026-08-20 21:00:20,929 INFO: << 404 /
2026-08-20 21:09:27,939 INFO: wsgi.py loading...
2026-08-20 21:09:27,940 INFO: Importing app.main...
2026-08-20 21:09:29,819 INFO: app.main imported successfully.
2026-08-20 21:09:29,819 INFO: Running DB init...
2026-08-20 21:09:29,890 INFO: All tables OK.
2026-08-20 21:09:30,034 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 21:09:30,037 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,040 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,042 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,045 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,048 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,051 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:09:30,059 INFO: Dip chart data seeded.
2026-08-20 21:09:30,059 INFO: DB init complete.
2026-08-20 21:09:30,059 INFO: wsgi.py ready.
2026-08-20 21:09:30,063 INFO: >> GET /.env.local
2026-08-20 21:09:30,064 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:30,076 INFO: GET /.env.local
2026-08-20 21:09:30,080 WARNING: GET /.env.local -> 404
2026-08-20 21:09:30,091 INFO: << 404 /.env.local
2026-08-20 21:09:30,984 INFO: >> GET /.env.prod
2026-08-20 21:09:30,984 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:30,985 INFO: GET /.env.prod
2026-08-20 21:09:30,986 WARNING: GET /.env.prod -> 404
2026-08-20 21:09:30,989 INFO: << 404 /.env.prod
2026-08-20 21:09:31,921 INFO: >> GET /.env.staging
2026-08-20 21:09:31,921 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:31,922 INFO: GET /.env.staging
2026-08-20 21:09:31,923 WARNING: GET /.env.staging -> 404
2026-08-20 21:09:31,926 INFO: << 404 /.env.staging
2026-08-20 21:09:34,536 INFO: >> GET /
2026-08-20 21:09:34,536 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:34,536 INFO: GET /
2026-08-20 21:09:34,537 WARNING: GET / -> 404
2026-08-20 21:09:34,540 INFO: << 404 /
2026-08-20 21:09:35,164 INFO: >> GET /.env.old
2026-08-20 21:09:35,165 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:35,165 INFO: GET /.env.old
2026-08-20 21:09:35,167 WARNING: GET /.env.old -> 404
2026-08-20 21:09:35,169 INFO: << 404 /.env.old
2026-08-20 21:09:35,698 INFO: >> GET /.env.save
2026-08-20 21:09:35,698 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:35,698 INFO: GET /.env.save
2026-08-20 21:09:35,700 WARNING: GET /.env.save -> 404
2026-08-20 21:09:35,702 INFO: << 404 /.env.save
2026-08-20 21:09:36,707 INFO: >> GET /api/.env
2026-08-20 21:09:36,707 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:36,708 INFO: GET /api/.env
2026-08-20 21:09:36,709 WARNING: GET /api/.env -> 404
2026-08-20 21:09:36,712 INFO: << 404 /api/.env
2026-08-20 21:09:38,181 INFO: >> GET /admin/.env
2026-08-20 21:09:38,182 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:38,182 INFO: GET /admin/.env
2026-08-20 21:09:38,183 WARNING: GET /admin/.env -> 404
2026-08-20 21:09:38,186 INFO: << 404 /admin/.env
2026-08-20 21:09:39,059 INFO: >> GET /src/.env
2026-08-20 21:09:39,059 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:39,059 INFO: GET /src/.env
2026-08-20 21:09:39,061 WARNING: GET /src/.env -> 404
2026-08-20 21:09:39,063 INFO: << 404 /src/.env
2026-08-20 21:09:40,614 INFO: >> GET /server/.env
2026-08-20 21:09:40,614 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:40,614 INFO: GET /server/.env
2026-08-20 21:09:40,615 WARNING: GET /server/.env -> 404
2026-08-20 21:09:40,618 INFO: << 404 /server/.env
2026-08-20 21:09:41,496 INFO: >> GET /.aws/credentials
2026-08-20 21:09:41,496 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:41,496 INFO: GET /.aws/credentials
2026-08-20 21:09:41,497 WARNING: GET /.aws/credentials -> 404
2026-08-20 21:09:41,500 INFO: << 404 /.aws/credentials
2026-08-20 21:09:42,147 INFO: >> GET /.env.production
2026-08-20 21:09:42,147 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:42,147 INFO: GET /.env.production
2026-08-20 21:09:42,149 WARNING: GET /.env.production -> 404
2026-08-20 21:09:42,149 INFO: >> GET /.env.production.local
2026-08-20 21:09:42,151 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:42,151 INFO: << 404 /.env.production
2026-08-20 21:09:42,161 INFO: GET /.env.production.local
2026-08-20 21:09:42,164 WARNING: GET /.env.production.local -> 404
2026-08-20 21:09:42,174 INFO: << 404 /.env.production.local
2026-08-20 21:09:42,618 INFO: >> GET /.aws/config
2026-08-20 21:09:42,618 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:42,619 INFO: GET /.aws/config
2026-08-20 21:09:42,620 WARNING: GET /.aws/config -> 404
2026-08-20 21:09:42,623 INFO: << 404 /.aws/config
2026-08-20 21:09:44,242 INFO: >> GET /aws/credentials
2026-08-20 21:09:44,242 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:44,242 INFO: GET /aws/credentials
2026-08-20 21:09:44,244 WARNING: GET /aws/credentials -> 404
2026-08-20 21:09:44,246 INFO: << 404 /aws/credentials
2026-08-20 21:09:44,345 INFO: >> GET /.env.bak
2026-08-20 21:09:44,345 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:44,346 INFO: GET /.env.bak
2026-08-20 21:09:44,347 INFO: >> GET /.env.development
2026-08-20 21:09:44,347 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:44,347 WARNING: GET /.env.bak -> 404
2026-08-20 21:09:44,347 INFO: GET /.env.development
2026-08-20 21:09:44,349 WARNING: GET /.env.development -> 404
2026-08-20 21:09:44,349 INFO: << 404 /.env.bak
2026-08-20 21:09:44,350 INFO: >> GET /.env.development.local
2026-08-20 21:09:44,350 INFO: << 404 /.env.development
2026-08-20 21:09:44,351 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:44,351 INFO: >> GET /.env.dev
2026-08-20 21:09:44,353 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:44,361 INFO: GET /.env.development.local
2026-08-20 21:09:44,363 INFO: GET /.env.dev
2026-08-20 21:09:44,364 WARNING: GET /.env.development.local -> 404
2026-08-20 21:09:44,366 WARNING: GET /.env.dev -> 404
2026-08-20 21:09:44,373 INFO: << 404 /.env.development.local
2026-08-20 21:09:44,374 INFO: << 404 /.env.dev
2026-08-20 21:09:45,051 INFO: >> GET /.s3cfg
2026-08-20 21:09:45,051 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:45,052 INFO: GET /.s3cfg
2026-08-20 21:09:45,053 WARNING: GET /.s3cfg -> 404
2026-08-20 21:09:45,056 INFO: << 404 /.s3cfg
2026-08-20 21:09:46,704 INFO: >> GET /gcloud-service-key.json
2026-08-20 21:09:46,706 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:46,716 INFO: GET /gcloud-service-key.json
2026-08-20 21:09:46,719 WARNING: GET /gcloud-service-key.json -> 404
2026-08-20 21:09:46,728 INFO: << 404 /gcloud-service-key.json
2026-08-20 21:09:47,093 INFO: >> GET /.env.backup
2026-08-20 21:09:47,093 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:47,094 INFO: >> GET /.env.example
2026-08-20 21:09:47,094 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:47,094 INFO: GET /.env.backup
2026-08-20 21:09:47,094 INFO: GET /.env.example
2026-08-20 21:09:47,095 WARNING: GET /.env.backup -> 404
2026-08-20 21:09:47,096 WARNING: GET /.env.example -> 404
2026-08-20 21:09:47,096 INFO: >> GET /.env~
2026-08-20 21:09:47,096 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:47,097 INFO: GET /.env~
2026-08-20 21:09:47,097 INFO: >> GET /config/.env
2026-08-20 21:09:47,097 INFO: >> GET /app/.env
2026-08-20 21:09:47,097 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:47,098 INFO: GET /config/.env
2026-08-20 21:09:47,098 WARNING: GET /.env~ -> 404
2026-08-20 21:09:47,098 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:47,099 WARNING: GET /config/.env -> 404
2026-08-20 21:09:47,099 INFO: << 404 /.env.backup
2026-08-20 21:09:47,100 INFO: << 404 /.env~
2026-08-20 21:09:47,109 INFO: GET /app/.env
2026-08-20 21:09:47,113 WARNING: GET /app/.env -> 404
2026-08-20 21:09:47,121 INFO: << 404 /.env.example
2026-08-20 21:09:47,123 INFO: << 404 /config/.env
2026-08-20 21:09:47,142 INFO: << 404 /app/.env
2026-08-20 21:09:48,130 INFO: >> GET /backend/.env
2026-08-20 21:09:48,130 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:48,131 INFO: GET /backend/.env
2026-08-20 21:09:48,132 WARNING: GET /backend/.env -> 404
2026-08-20 21:09:48,135 INFO: << 404 /backend/.env
2026-08-20 21:09:48,188 INFO: >> GET /id_rsa
2026-08-20 21:09:48,188 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:48,188 INFO: GET /id_rsa
2026-08-20 21:09:48,189 WARNING: GET /id_rsa -> 404
2026-08-20 21:09:48,192 INFO: << 404 /id_rsa
2026-08-20 21:09:49,065 INFO: >> GET /server.key
2026-08-20 21:09:49,065 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:49,065 INFO: GET /server.key
2026-08-20 21:09:49,066 WARNING: GET /server.key -> 404
2026-08-20 21:09:49,068 INFO: << 404 /server.key
2026-08-20 21:09:50,092 INFO: >> GET /laravel/.env
2026-08-20 21:09:50,092 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:50,092 INFO: >> GET /public/.env
2026-08-20 21:09:50,092 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:50,092 INFO: >> GET /core/.env
2026-08-20 21:09:50,092 INFO: GET /laravel/.env
2026-08-20 21:09:50,092 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:50,092 INFO: GET /public/.env
2026-08-20 21:09:50,093 INFO: GET /core/.env
2026-08-20 21:09:50,093 WARNING: GET /core/.env -> 404
2026-08-20 21:09:50,094 WARNING: GET /laravel/.env -> 404
2026-08-20 21:09:50,094 WARNING: GET /public/.env -> 404
2026-08-20 21:09:50,096 INFO: << 404 /public/.env
2026-08-20 21:09:50,096 INFO: << 404 /laravel/.env
2026-08-20 21:09:50,096 INFO: << 404 /core/.env
2026-08-20 21:09:50,348 INFO: >> GET /private.key
2026-08-20 21:09:50,348 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:50,348 INFO: GET /private.key
2026-08-20 21:09:50,349 WARNING: GET /private.key -> 404
2026-08-20 21:09:50,352 INFO: << 404 /private.key
2026-08-20 21:09:51,319 INFO: >> GET /debug/default
2026-08-20 21:09:51,319 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:51,319 INFO: GET /debug/default
2026-08-20 21:09:51,321 WARNING: GET /debug/default -> 404
2026-08-20 21:09:51,323 INFO: << 404 /debug/default
2026-08-20 21:09:51,498 INFO: >> GET /config.env
2026-08-20 21:09:51,498 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:51,499 INFO: GET /config.env
2026-08-20 21:09:51,500 WARNING: GET /config.env -> 404
2026-08-20 21:09:51,502 INFO: << 404 /config.env
2026-08-20 21:09:52,360 INFO: >> GET /debug.php
2026-08-20 21:09:52,360 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:52,360 INFO: GET /debug.php
2026-08-20 21:09:52,362 WARNING: GET /debug.php -> 404
2026-08-20 21:09:52,364 INFO: << 404 /debug.php
2026-08-20 21:09:53,490 INFO: >> GET /_profiler
2026-08-20 21:09:53,490 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:53,491 INFO: GET /_profiler
2026-08-20 21:09:53,491 WARNING: GET /_profiler -> 404
2026-08-20 21:09:53,494 INFO: << 404 /_profiler
2026-08-20 21:09:54,530 INFO: >> GET /app_dev.php/_profiler/phpinfo
2026-08-20 21:09:54,531 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:54,531 INFO: GET /app_dev.php/_profiler/phpinfo
2026-08-20 21:09:54,532 WARNING: GET /app_dev.php/_profiler/phpinfo -> 404
2026-08-20 21:09:54,534 INFO: << 404 /app_dev.php/_profiler/phpinfo
2026-08-20 21:09:55,746 INFO: >> GET /phpinfo.php
2026-08-20 21:09:55,746 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:55,747 INFO: GET /phpinfo.php
2026-08-20 21:09:55,748 WARNING: GET /phpinfo.php -> 404
2026-08-20 21:09:55,750 INFO: << 404 /phpinfo.php
2026-08-20 21:09:56,247 INFO: >> GET /serviceAccount.json
2026-08-20 21:09:56,247 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:56,247 INFO: >> GET /service-account.json
2026-08-20 21:09:56,247 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:56,248 INFO: GET /serviceAccount.json
2026-08-20 21:09:56,248 INFO: GET /service-account.json
2026-08-20 21:09:56,249 WARNING: GET /serviceAccount.json -> 404
2026-08-20 21:09:56,249 WARNING: GET /service-account.json -> 404
2026-08-20 21:09:56,251 INFO: << 404 /serviceAccount.json
2026-08-20 21:09:56,251 INFO: << 404 /service-account.json
2026-08-20 21:09:56,765 INFO: >> GET /info.php
2026-08-20 21:09:56,765 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:56,766 INFO: GET /info.php
2026-08-20 21:09:56,767 WARNING: GET /info.php -> 404
2026-08-20 21:09:56,770 INFO: << 404 /info.php
2026-08-20 21:09:57,720 INFO: >> GET /firebase.json
2026-08-20 21:09:57,721 INFO: >> GET /.azure/credentials
2026-08-20 21:09:57,721 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,721 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,721 INFO: GET /.azure/credentials
2026-08-20 21:09:57,721 INFO: GET /firebase.json
2026-08-20 21:09:57,721 INFO: >> GET /local.settings.json
2026-08-20 21:09:57,721 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,722 INFO: GET /local.settings.json
2026-08-20 21:09:57,722 WARNING: GET /firebase.json -> 404
2026-08-20 21:09:57,722 WARNING: GET /.azure/credentials -> 404
2026-08-20 21:09:57,723 WARNING: GET /local.settings.json -> 404
2026-08-20 21:09:57,725 INFO: << 404 /.azure/credentials
2026-08-20 21:09:57,725 INFO: << 404 /firebase.json
2026-08-20 21:09:57,724 INFO: >> GET /credentials.json
2026-08-20 21:09:57,726 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,726 INFO: >> GET /secrets.json
2026-08-20 21:09:57,728 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,736 INFO: GET /credentials.json
2026-08-20 21:09:57,738 INFO: GET /secrets.json
2026-08-20 21:09:57,739 WARNING: GET /credentials.json -> 404
2026-08-20 21:09:57,741 WARNING: GET /secrets.json -> 404
2026-08-20 21:09:57,745 INFO: << 404 /local.settings.json
2026-08-20 21:09:57,767 INFO: << 404 /credentials.json
2026-08-20 21:09:57,769 INFO: << 404 /secrets.json
2026-08-20 21:09:57,990 INFO: >> GET /phpinfo
2026-08-20 21:09:57,991 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:57,991 INFO: GET /phpinfo
2026-08-20 21:09:57,993 WARNING: GET /phpinfo -> 404
2026-08-20 21:09:57,995 INFO: << 404 /phpinfo
2026-08-20 21:09:58,655 INFO: >> GET /test.php
2026-08-20 21:09:58,655 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:58,655 INFO: GET /test.php
2026-08-20 21:09:58,657 INFO: >> GET /.ssh/id_rsa
2026-08-20 21:09:58,657 INFO: >> GET /id_rsa.pub
2026-08-20 21:09:58,657 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:58,657 WARNING: GET /test.php -> 404
2026-08-20 21:09:58,657 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:58,657 INFO: GET /.ssh/id_rsa
2026-08-20 21:09:58,657 INFO: GET /id_rsa.pub
2026-08-20 21:09:58,659 WARNING: GET /.ssh/id_rsa -> 404
2026-08-20 21:09:58,659 WARNING: GET /id_rsa.pub -> 404
2026-08-20 21:09:58,659 INFO: << 404 /test.php
2026-08-20 21:09:58,661 INFO: << 404 /id_rsa.pub
2026-08-20 21:09:58,661 INFO: << 404 /.ssh/id_rsa
2026-08-20 21:09:59,602 INFO: >> GET /i.php
2026-08-20 21:09:59,602 DEBUG: Using selector: EpollSelector
2026-08-20 21:09:59,602 INFO: GET /i.php
2026-08-20 21:09:59,604 WARNING: GET /i.php -> 404
2026-08-20 21:09:59,606 INFO: << 404 /i.php
2026-08-20 21:10:02,799 INFO: >> GET /debug/default/view
2026-08-20 21:10:02,799 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:02,799 INFO: >> GET /debug/default/view
2026-08-20 21:10:02,800 INFO: GET /debug/default/view
2026-08-20 21:10:02,801 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:02,801 WARNING: GET /debug/default/view -> 404
2026-08-20 21:10:02,802 INFO: >> GET /php.php
2026-08-20 21:10:02,804 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:02,804 INFO: << 404 /debug/default/view
2026-08-20 21:10:02,812 INFO: GET /debug/default/view
2026-08-20 21:10:02,816 WARNING: GET /debug/default/view -> 404
2026-08-20 21:10:02,827 INFO: GET /php.php
2026-08-20 21:10:02,830 WARNING: GET /php.php -> 404
2026-08-20 21:10:02,862 INFO: << 404 /debug/default/view
2026-08-20 21:10:02,907 INFO: << 404 /php.php
2026-08-20 21:10:03,383 INFO: >> GET /storage/logs/laravel.log
2026-08-20 21:10:03,383 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:03,384 INFO: GET /storage/logs/laravel.log
2026-08-20 21:10:03,385 WARNING: GET /storage/logs/laravel.log -> 404
2026-08-20 21:10:03,390 INFO: << 404 /storage/logs/laravel.log
2026-08-20 21:10:03,720 INFO: >> GET /debug
2026-08-20 21:10:03,720 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:03,720 INFO: GET /debug
2026-08-20 21:10:03,722 WARNING: GET /debug -> 404
2026-08-20 21:10:03,725 INFO: << 404 /debug
2026-08-20 21:10:03,948 INFO: >> GET /_profiler/phpinfo
2026-08-20 21:10:03,948 INFO: >> GET /_debugbar
2026-08-20 21:10:03,948 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:03,948 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:03,948 INFO: GET /_debugbar
2026-08-20 21:10:03,948 INFO: GET /_profiler/phpinfo
2026-08-20 21:10:03,950 WARNING: GET /_debugbar -> 404
2026-08-20 21:10:03,950 WARNING: GET /_profiler/phpinfo -> 404
2026-08-20 21:10:03,953 INFO: << 404 /_debugbar
2026-08-20 21:10:03,953 INFO: << 404 /_profiler/phpinfo
2026-08-20 21:10:04,618 INFO: >> GET /storage/logs/error.log
2026-08-20 21:10:04,618 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:04,618 INFO: GET /storage/logs/error.log
2026-08-20 21:10:04,620 WARNING: GET /storage/logs/error.log -> 404
2026-08-20 21:10:04,623 INFO: << 404 /storage/logs/error.log
2026-08-20 21:10:05,802 INFO: >> GET /var/log/nginx/error.log
2026-08-20 21:10:05,802 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:05,802 INFO: GET /var/log/nginx/error.log
2026-08-20 21:10:05,804 WARNING: GET /var/log/nginx/error.log -> 404
2026-08-20 21:10:05,807 INFO: << 404 /var/log/nginx/error.log
2026-08-20 21:10:06,821 INFO: >> GET /logs/error.log
2026-08-20 21:10:06,821 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:06,821 INFO: GET /logs/error.log
2026-08-20 21:10:06,823 WARNING: GET /logs/error.log -> 404
2026-08-20 21:10:06,825 INFO: << 404 /logs/error.log
2026-08-20 21:10:07,882 INFO: >> GET /error.log
2026-08-20 21:10:07,882 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:07,882 INFO: GET /error.log
2026-08-20 21:10:07,883 WARNING: GET /error.log -> 404
2026-08-20 21:10:07,886 INFO: << 404 /error.log
2026-08-20 21:10:08,832 INFO: >> GET /server_info.php
2026-08-20 21:10:08,832 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:08,832 INFO: GET /server_info.php
2026-08-20 21:10:08,834 WARNING: GET /server_info.php -> 404
2026-08-20 21:10:08,836 INFO: << 404 /server_info.php
2026-08-20 21:10:08,958 INFO: >> GET /debug.log
2026-08-20 21:10:08,958 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:08,958 INFO: GET /debug.log
2026-08-20 21:10:08,960 WARNING: GET /debug.log -> 404
2026-08-20 21:10:08,962 INFO: << 404 /debug.log
2026-08-20 21:10:09,912 INFO: >> GET /wp-config.php.txt
2026-08-20 21:10:09,913 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:09,913 INFO: GET /wp-config.php.txt
2026-08-20 21:10:09,914 WARNING: GET /wp-config.php.txt -> 404
2026-08-20 21:10:09,916 INFO: << 404 /wp-config.php.txt
2026-08-20 21:10:11,013 INFO: >> GET /wp-config.bak
2026-08-20 21:10:11,013 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:11,013 INFO: GET /wp-config.bak
2026-08-20 21:10:11,015 WARNING: GET /wp-config.bak -> 404
2026-08-20 21:10:11,017 INFO: << 404 /wp-config.bak
2026-08-20 21:10:12,202 INFO: >> GET /wp-config.old
2026-08-20 21:10:12,202 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:12,203 INFO: GET /wp-config.old
2026-08-20 21:10:12,204 WARNING: GET /wp-config.old -> 404
2026-08-20 21:10:12,206 INFO: << 404 /wp-config.old
2026-08-20 21:10:13,488 INFO: >> GET /wp-content/debug.log
2026-08-20 21:10:13,490 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:13,497 INFO: >> GET /var/log/apache2/error.log
2026-08-20 21:10:13,498 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:13,498 INFO: GET /var/log/apache2/error.log
2026-08-20 21:10:13,499 WARNING: GET /var/log/apache2/error.log -> 404
2026-08-20 21:10:13,500 INFO: GET /wp-content/debug.log
2026-08-20 21:10:13,502 INFO: << 404 /var/log/apache2/error.log
2026-08-20 21:10:13,503 WARNING: GET /wp-content/debug.log -> 404
2026-08-20 21:10:13,533 INFO: << 404 /wp-content/debug.log
2026-08-20 21:10:13,725 INFO: >> GET /wp-config.txt
2026-08-20 21:10:13,726 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:13,736 INFO: GET /wp-config.txt
2026-08-20 21:10:13,739 WARNING: GET /wp-config.txt -> 404
2026-08-20 21:10:13,767 INFO: << 404 /wp-config.txt
2026-08-20 21:10:14,617 INFO: >> GET /backup.sql
2026-08-20 21:10:14,617 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:14,618 INFO: GET /backup.sql
2026-08-20 21:10:14,619 WARNING: GET /backup.sql -> 404
2026-08-20 21:10:14,623 INFO: << 404 /backup.sql
2026-08-20 21:10:16,453 INFO: >> GET /log/error.log
2026-08-20 21:10:16,455 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:16,465 INFO: GET /log/error.log
2026-08-20 21:10:16,468 WARNING: GET /log/error.log -> 404
2026-08-20 21:10:16,502 INFO: << 404 /log/error.log
2026-08-20 21:10:16,510 INFO: >> GET /backup.zip
2026-08-20 21:10:16,510 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:16,510 INFO: GET /backup.zip
2026-08-20 21:10:16,512 WARNING: GET /backup.zip -> 404
2026-08-20 21:10:16,514 INFO: << 404 /backup.zip
2026-08-20 21:10:17,708 INFO: >> GET /backup.tar.gz
2026-08-20 21:10:17,708 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:17,708 INFO: GET /backup.tar.gz
2026-08-20 21:10:17,710 WARNING: GET /backup.tar.gz -> 404
2026-08-20 21:10:17,712 INFO: << 404 /backup.tar.gz
2026-08-20 21:10:18,269 INFO: >> GET /application.log
2026-08-20 21:10:18,269 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,269 INFO: >> GET /wp-config.php.bak
2026-08-20 21:10:18,270 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,270 INFO: >> GET /wp-config.php~
2026-08-20 21:10:18,270 INFO: GET /application.log
2026-08-20 21:10:18,270 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,270 INFO: GET /wp-config.php.bak
2026-08-20 21:10:18,270 INFO: >> GET /wp-config.php.save
2026-08-20 21:10:18,270 INFO: GET /wp-config.php~
2026-08-20 21:10:18,270 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,271 INFO: GET /wp-config.php.save
2026-08-20 21:10:18,271 WARNING: GET /application.log -> 404
2026-08-20 21:10:18,271 WARNING: GET /wp-config.php~ -> 404
2026-08-20 21:10:18,272 WARNING: GET /wp-config.php.bak -> 404
2026-08-20 21:10:18,272 WARNING: GET /wp-config.php.save -> 404
2026-08-20 21:10:18,273 INFO: >> GET /wp-config.php
2026-08-20 21:10:18,274 INFO: << 404 /application.log
2026-08-20 21:10:18,274 INFO: << 404 /wp-config.php.bak
2026-08-20 21:10:18,274 INFO: << 404 /wp-config.php~
2026-08-20 21:10:18,275 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,279 INFO: >> GET /wp-config.php.old
2026-08-20 21:10:18,281 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,286 INFO: << 404 /wp-config.php.save
2026-08-20 21:10:18,287 INFO: GET /wp-config.php
2026-08-20 21:10:18,291 WARNING: GET /wp-config.php -> 404
2026-08-20 21:10:18,293 INFO: GET /wp-config.php.old
2026-08-20 21:10:18,296 WARNING: GET /wp-config.php.old -> 404
2026-08-20 21:10:18,320 INFO: << 404 /wp-config.php
2026-08-20 21:10:18,324 INFO: << 404 /wp-config.php.old
2026-08-20 21:10:18,668 INFO: >> GET /backup.bak
2026-08-20 21:10:18,668 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:18,669 INFO: GET /backup.bak
2026-08-20 21:10:18,670 WARNING: GET /backup.bak -> 404
2026-08-20 21:10:18,673 INFO: << 404 /backup.bak
2026-08-20 21:10:20,241 INFO: >> GET /db.sql
2026-08-20 21:10:20,241 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:20,241 INFO: GET /db.sql
2026-08-20 21:10:20,243 WARNING: GET /db.sql -> 404
2026-08-20 21:10:20,245 INFO: << 404 /db.sql
2026-08-20 21:10:22,577 INFO: >> GET /html.zip
2026-08-20 21:10:22,579 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:22,590 INFO: GET /html.zip
2026-08-20 21:10:22,593 WARNING: GET /html.zip -> 404
2026-08-20 21:10:22,622 INFO: << 404 /html.zip
2026-08-20 21:10:23,218 INFO: >> GET /wordpress/wp-config.php
2026-08-20 21:10:23,218 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,219 INFO: >> GET /.DS_Store
2026-08-20 21:10:23,219 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,219 INFO: >> GET /DS_Store
2026-08-20 21:10:23,219 INFO: GET /wordpress/wp-config.php
2026-08-20 21:10:23,219 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,219 INFO: GET /.DS_Store
2026-08-20 21:10:23,219 INFO: GET /DS_Store
2026-08-20 21:10:23,220 INFO: >> GET /.bash_history
2026-08-20 21:10:23,220 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,220 INFO: GET /.bash_history
2026-08-20 21:10:23,220 WARNING: GET /DS_Store -> 404
2026-08-20 21:10:23,220 WARNING: GET /wordpress/wp-config.php -> 404
2026-08-20 21:10:23,221 WARNING: GET /.DS_Store -> 404
2026-08-20 21:10:23,221 WARNING: GET /.bash_history -> 404
2026-08-20 21:10:23,221 INFO: >> GET /blog/wp-config.php
2026-08-20 21:10:23,223 INFO: << 404 /.DS_Store
2026-08-20 21:10:23,223 INFO: << 404 /DS_Store
2026-08-20 21:10:23,223 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,224 INFO: << 404 /wordpress/wp-config.php
2026-08-20 21:10:23,224 INFO: << 404 /.bash_history
2026-08-20 21:10:23,223 INFO: >> GET /dump.rdb
2026-08-20 21:10:23,225 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,233 INFO: GET /blog/wp-config.php
2026-08-20 21:10:23,235 INFO: GET /dump.rdb
2026-08-20 21:10:23,236 WARNING: GET /blog/wp-config.php -> 404
2026-08-20 21:10:23,238 WARNING: GET /dump.rdb -> 404
2026-08-20 21:10:23,264 INFO: << 404 /blog/wp-config.php
2026-08-20 21:10:23,266 INFO: << 404 /dump.rdb
2026-08-20 21:10:23,493 INFO: >> GET /data.sql
2026-08-20 21:10:23,494 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:23,494 INFO: GET /data.sql
2026-08-20 21:10:23,496 WARNING: GET /data.sql -> 404
2026-08-20 21:10:23,498 INFO: << 404 /data.sql
2026-08-20 21:10:24,122 INFO: >> GET /.env.zip
2026-08-20 21:10:24,122 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:24,123 INFO: GET /.env.zip
2026-08-20 21:10:24,124 WARNING: GET /.env.zip -> 404
2026-08-20 21:10:24,127 INFO: << 404 /.env.zip
2026-08-20 21:10:25,164 INFO: >> GET /config.php.bak
2026-08-20 21:10:25,164 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:25,164 INFO: GET /config.php.bak
2026-08-20 21:10:25,166 WARNING: GET /config.php.bak -> 404
2026-08-20 21:10:25,168 INFO: << 404 /config.php.bak
2026-08-20 21:10:26,541 INFO: >> GET /settings.php.bak
2026-08-20 21:10:26,541 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:26,541 INFO: GET /settings.php.bak
2026-08-20 21:10:26,543 WARNING: GET /settings.php.bak -> 404
2026-08-20 21:10:26,545 INFO: << 404 /settings.php.bak
2026-08-20 21:10:27,584 INFO: >> GET /web.config.bak
2026-08-20 21:10:27,584 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:27,584 INFO: GET /web.config.bak
2026-08-20 21:10:27,586 WARNING: GET /web.config.bak -> 404
2026-08-20 21:10:27,588 INFO: << 404 /web.config.bak
2026-08-20 21:10:29,028 INFO: >> GET /artisan
2026-08-20 21:10:29,029 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:29,040 INFO: GET /artisan
2026-08-20 21:10:29,043 WARNING: GET /artisan -> 404
2026-08-20 21:10:29,071 INFO: << 404 /artisan
2026-08-20 21:10:30,050 INFO: >> GET /config.php
2026-08-20 21:10:30,050 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:30,051 INFO: GET /config.php
2026-08-20 21:10:30,052 WARNING: GET /config.php -> 404
2026-08-20 21:10:30,055 INFO: << 404 /config.php
2026-08-20 21:10:31,220 INFO: >> GET /actuator/env
2026-08-20 21:10:31,220 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,221 INFO: GET /actuator/env
2026-08-20 21:10:31,222 WARNING: GET /actuator/env -> 404
2026-08-20 21:10:31,225 INFO: << 404 /actuator/env
2026-08-20 21:10:31,546 INFO: >> GET /database.sql
2026-08-20 21:10:31,546 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,547 INFO: >> GET /site.zip
2026-08-20 21:10:31,547 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,547 INFO: GET /database.sql
2026-08-20 21:10:31,547 INFO: >> GET /dump.sql
2026-08-20 21:10:31,547 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,547 INFO: GET /site.zip
2026-08-20 21:10:31,547 INFO: GET /dump.sql
2026-08-20 21:10:31,548 WARNING: GET /database.sql -> 404
2026-08-20 21:10:31,548 WARNING: GET /site.zip -> 404
2026-08-20 21:10:31,549 WARNING: GET /dump.sql -> 404
2026-08-20 21:10:31,549 INFO: >> GET /site.sql
2026-08-20 21:10:31,551 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,551 INFO: << 404 /database.sql
2026-08-20 21:10:31,551 INFO: << 404 /site.zip
2026-08-20 21:10:31,551 INFO: << 404 /dump.sql
2026-08-20 21:10:31,552 INFO: >> GET /www.zip
2026-08-20 21:10:31,553 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,561 INFO: GET /site.sql
2026-08-20 21:10:31,563 INFO: GET /www.zip
2026-08-20 21:10:31,564 WARNING: GET /site.sql -> 404
2026-08-20 21:10:31,566 WARNING: GET /www.zip -> 404
2026-08-20 21:10:31,600 INFO: << 404 /site.sql
2026-08-20 21:10:31,604 INFO: << 404 /www.zip
2026-08-20 21:10:31,686 INFO: >> GET /actuator/health
2026-08-20 21:10:31,686 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:31,687 INFO: GET /actuator/health
2026-08-20 21:10:31,688 WARNING: GET /actuator/health -> 404
2026-08-20 21:10:31,691 INFO: << 404 /actuator/health
2026-08-20 21:10:32,534 INFO: >> GET /actuator/beans
2026-08-20 21:10:32,534 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:32,535 INFO: GET /actuator/beans
2026-08-20 21:10:32,536 WARNING: GET /actuator/beans -> 404
2026-08-20 21:10:32,539 INFO: << 404 /actuator/beans
2026-08-20 21:10:32,962 INFO: >> GET /sql/backup.sql
2026-08-20 21:10:32,962 INFO: >> GET /public_html.zip
2026-08-20 21:10:32,962 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:32,962 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:32,963 INFO: GET /public_html.zip
2026-08-20 21:10:32,963 INFO: GET /sql/backup.sql
2026-08-20 21:10:32,964 INFO: >> GET /backup/db.sql
2026-08-20 21:10:32,964 WARNING: GET /sql/backup.sql -> 404
2026-08-20 21:10:32,964 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:32,964 WARNING: GET /public_html.zip -> 404
2026-08-20 21:10:32,964 INFO: GET /backup/db.sql
2026-08-20 21:10:32,966 WARNING: GET /backup/db.sql -> 404
2026-08-20 21:10:32,967 INFO: << 404 /sql/backup.sql
2026-08-20 21:10:32,967 INFO: << 404 /public_html.zip
2026-08-20 21:10:32,969 INFO: << 404 /backup/db.sql
2026-08-20 21:10:33,968 INFO: >> GET /actuator/gateway/routes
2026-08-20 21:10:33,968 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:33,969 INFO: GET /actuator/gateway/routes
2026-08-20 21:10:33,970 WARNING: GET /actuator/gateway/routes -> 404
2026-08-20 21:10:33,973 INFO: << 404 /actuator/gateway/routes
2026-08-20 21:10:34,583 INFO: >> GET /config.bak
2026-08-20 21:10:34,583 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:34,583 INFO: GET /config.bak
2026-08-20 21:10:34,585 WARNING: GET /config.bak -> 404
2026-08-20 21:10:34,587 INFO: << 404 /config.bak
2026-08-20 21:10:35,019 INFO: >> GET /actuator/prometheus
2026-08-20 21:10:35,019 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:35,020 INFO: GET /actuator/prometheus
2026-08-20 21:10:35,021 WARNING: GET /actuator/prometheus -> 404
2026-08-20 21:10:35,024 INFO: << 404 /actuator/prometheus
2026-08-20 21:10:35,587 INFO: >> GET /application.yaml
2026-08-20 21:10:35,587 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:35,587 INFO: GET /application.yaml
2026-08-20 21:10:35,588 WARNING: GET /application.yaml -> 404
2026-08-20 21:10:35,591 INFO: << 404 /application.yaml
2026-08-20 21:10:36,424 INFO: >> GET /application-dev.yml
2026-08-20 21:10:36,424 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:36,424 INFO: GET /application-dev.yml
2026-08-20 21:10:36,426 WARNING: GET /application-dev.yml -> 404
2026-08-20 21:10:36,429 INFO: << 404 /application-dev.yml
2026-08-20 21:10:37,259 INFO: >> GET /package.json
2026-08-20 21:10:37,259 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:37,260 INFO: GET /package.json
2026-08-20 21:10:37,261 WARNING: GET /package.json -> 404
2026-08-20 21:10:37,264 INFO: << 404 /package.json
2026-08-20 21:10:37,705 INFO: >> GET /config/app.php
2026-08-20 21:10:37,705 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:37,705 INFO: >> GET /app/config/parameters.yml
2026-08-20 21:10:37,705 INFO: GET /config/app.php
2026-08-20 21:10:37,705 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:37,706 INFO: GET /app/config/parameters.yml
2026-08-20 21:10:37,707 WARNING: GET /config/app.php -> 404
2026-08-20 21:10:37,707 WARNING: GET /app/config/parameters.yml -> 404
2026-08-20 21:10:37,708 INFO: >> GET /config/database.php
2026-08-20 21:10:37,709 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:37,709 INFO: << 404 /config/app.php
2026-08-20 21:10:37,709 INFO: << 404 /app/config/parameters.yml
2026-08-20 21:10:37,719 INFO: GET /config/database.php
2026-08-20 21:10:37,722 WARNING: GET /config/database.php -> 404
2026-08-20 21:10:37,752 INFO: << 404 /config/database.php
2026-08-20 21:10:38,390 INFO: >> GET /package-lock.json
2026-08-20 21:10:38,390 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:38,390 INFO: GET /package-lock.json
2026-08-20 21:10:38,392 WARNING: GET /package-lock.json -> 404
2026-08-20 21:10:38,394 INFO: << 404 /package-lock.json
2026-08-20 21:10:39,457 INFO: >> GET /actuator
2026-08-20 21:10:39,458 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:39,458 INFO: GET /actuator
2026-08-20 21:10:39,459 WARNING: GET /actuator -> 404
2026-08-20 21:10:39,462 INFO: << 404 /actuator
2026-08-20 21:10:39,547 INFO: >> GET /composer.lock
2026-08-20 21:10:39,547 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:39,547 INFO: GET /composer.lock
2026-08-20 21:10:39,549 WARNING: GET /composer.lock -> 404
2026-08-20 21:10:39,551 INFO: << 404 /composer.lock
2026-08-20 21:10:40,393 INFO: >> GET /config/production.json
2026-08-20 21:10:40,393 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:40,393 INFO: GET /config/production.json
2026-08-20 21:10:40,395 WARNING: GET /config/production.json -> 404
2026-08-20 21:10:40,397 INFO: << 404 /config/production.json
2026-08-20 21:10:40,804 INFO: >> GET /actuator/info
2026-08-20 21:10:40,804 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:40,804 INFO: >> GET /actuator/mappings
2026-08-20 21:10:40,805 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:40,805 INFO: GET /actuator/info
2026-08-20 21:10:40,805 INFO: GET /actuator/mappings
2026-08-20 21:10:40,806 WARNING: GET /actuator/info -> 404
2026-08-20 21:10:40,806 WARNING: GET /actuator/mappings -> 404
2026-08-20 21:10:40,809 INFO: << 404 /actuator/mappings
2026-08-20 21:10:40,809 INFO: << 404 /actuator/info
2026-08-20 21:10:42,647 INFO: >> GET /config/development.json
2026-08-20 21:10:42,649 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:42,658 INFO: GET /config/development.json
2026-08-20 21:10:42,662 WARNING: GET /config/development.json -> 404
2026-08-20 21:10:42,696 INFO: << 404 /config/development.json
2026-08-20 21:10:43,059 INFO: >> GET /actuator/configprops
2026-08-20 21:10:43,059 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:43,060 INFO: GET /actuator/configprops
2026-08-20 21:10:43,061 WARNING: GET /actuator/configprops -> 404
2026-08-20 21:10:43,064 INFO: << 404 /actuator/configprops
2026-08-20 21:10:43,082 INFO: >> GET /actuator/heapdump
2026-08-20 21:10:43,082 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:43,083 INFO: GET /actuator/heapdump
2026-08-20 21:10:43,084 WARNING: GET /actuator/heapdump -> 404
2026-08-20 21:10:43,088 INFO: << 404 /actuator/heapdump
2026-08-20 21:10:43,243 INFO: >> GET /config.js
2026-08-20 21:10:43,243 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:43,243 INFO: GET /config.js
2026-08-20 21:10:43,245 WARNING: GET /config.js -> 404
2026-08-20 21:10:43,247 INFO: << 404 /config.js
2026-08-20 21:10:44,496 INFO: >> GET /settings/development.py
2026-08-20 21:10:44,496 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:44,497 INFO: GET /settings/development.py
2026-08-20 21:10:44,498 WARNING: GET /settings/development.py -> 404
2026-08-20 21:10:44,501 INFO: << 404 /settings/development.py
2026-08-20 21:10:44,778 INFO: >> GET /jolokia
2026-08-20 21:10:44,778 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:44,779 INFO: GET /jolokia
2026-08-20 21:10:44,779 INFO: >> GET /jolokia/list
2026-08-20 21:10:44,779 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:44,780 INFO: GET /jolokia/list
2026-08-20 21:10:44,780 WARNING: GET /jolokia -> 404
2026-08-20 21:10:44,781 WARNING: GET /jolokia/list -> 404
2026-08-20 21:10:44,782 INFO: >> GET /application.properties
2026-08-20 21:10:44,784 INFO: >> GET /application.yml
2026-08-20 21:10:44,784 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:44,784 INFO: << 404 /jolokia/list
2026-08-20 21:10:44,784 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:44,784 INFO: GET /application.yml
2026-08-20 21:10:44,785 INFO: << 404 /jolokia
2026-08-20 21:10:44,786 WARNING: GET /application.yml -> 404
2026-08-20 21:10:44,788 INFO: << 404 /application.yml
2026-08-20 21:10:44,794 INFO: GET /application.properties
2026-08-20 21:10:44,797 WARNING: GET /application.properties -> 404
2026-08-20 21:10:44,826 INFO: << 404 /application.properties
2026-08-20 21:10:45,488 INFO: >> GET /config/settings.py
2026-08-20 21:10:45,488 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:45,489 INFO: GET /config/settings.py
2026-08-20 21:10:45,490 WARNING: GET /config/settings.py -> 404
2026-08-20 21:10:45,493 INFO: << 404 /config/settings.py
2026-08-20 21:10:45,679 INFO: >> GET /application-prod.yml
2026-08-20 21:10:45,680 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:45,680 INFO: GET /application-prod.yml
2026-08-20 21:10:45,681 WARNING: GET /application-prod.yml -> 404
2026-08-20 21:10:45,686 INFO: << 404 /application-prod.yml
2026-08-20 21:10:46,469 INFO: >> GET /bootstrap.yml
2026-08-20 21:10:46,470 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:46,470 INFO: GET /bootstrap.yml
2026-08-20 21:10:46,471 WARNING: GET /bootstrap.yml -> 404
2026-08-20 21:10:46,474 INFO: << 404 /bootstrap.yml
2026-08-20 21:10:48,047 INFO: >> GET /Pipfile
2026-08-20 21:10:48,047 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:48,048 INFO: GET /Pipfile
2026-08-20 21:10:48,049 WARNING: GET /Pipfile -> 404
2026-08-20 21:10:48,052 INFO: << 404 /Pipfile
2026-08-20 21:10:48,728 INFO: >> GET /manage.py
2026-08-20 21:10:48,729 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:48,729 INFO: GET /manage.py
2026-08-20 21:10:48,730 WARNING: GET /manage.py -> 404
2026-08-20 21:10:48,732 INFO: << 404 /manage.py
2026-08-20 21:10:49,060 INFO: >> GET /composer.json
2026-08-20 21:10:49,060 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,060 INFO: GET /composer.json
2026-08-20 21:10:49,060 INFO: >> GET /yarn.lock
2026-08-20 21:10:49,060 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,061 INFO: GET /yarn.lock
2026-08-20 21:10:49,061 WARNING: GET /composer.json -> 404
2026-08-20 21:10:49,062 WARNING: GET /yarn.lock -> 404
2026-08-20 21:10:49,064 INFO: << 404 /composer.json
2026-08-20 21:10:49,065 INFO: << 404 /yarn.lock
2026-08-20 21:10:49,420 INFO: >> GET /config/master.key
2026-08-20 21:10:49,420 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,421 INFO: GET /config/master.key
2026-08-20 21:10:49,422 WARNING: GET /config/master.key -> 404
2026-08-20 21:10:49,425 INFO: << 404 /config/master.key
2026-08-20 21:10:49,885 INFO: >> GET /.yarnrc
2026-08-20 21:10:49,885 INFO: >> GET /.npmrc
2026-08-20 21:10:49,885 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,885 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,886 INFO: GET /.yarnrc
2026-08-20 21:10:49,886 INFO: GET /.npmrc
2026-08-20 21:10:49,887 WARNING: GET /.yarnrc -> 404
2026-08-20 21:10:49,887 WARNING: GET /.npmrc -> 404
2026-08-20 21:10:49,888 INFO: >> GET /config/default.json
2026-08-20 21:10:49,889 INFO: << 404 /.yarnrc
2026-08-20 21:10:49,890 INFO: << 404 /.npmrc
2026-08-20 21:10:49,890 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,900 INFO: GET /config/default.json
2026-08-20 21:10:49,904 WARNING: GET /config/default.json -> 404
2026-08-20 21:10:49,932 INFO: << 404 /config/default.json
2026-08-20 21:10:49,960 INFO: >> GET /config/credentials.yml.enc
2026-08-20 21:10:49,960 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:49,960 INFO: GET /config/credentials.yml.enc
2026-08-20 21:10:49,962 WARNING: GET /config/credentials.yml.enc -> 404
2026-08-20 21:10:49,964 INFO: << 404 /config/credentials.yml.enc
2026-08-20 21:10:50,503 INFO: >> GET /.circleci/config.yml
2026-08-20 21:10:50,504 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:50,504 INFO: GET /.circleci/config.yml
2026-08-20 21:10:50,506 WARNING: GET /.circleci/config.yml -> 404
2026-08-20 21:10:50,508 INFO: << 404 /.circleci/config.yml
2026-08-20 21:10:51,696 INFO: >> GET /Jenkinsfile
2026-08-20 21:10:51,696 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:51,697 INFO: GET /Jenkinsfile
2026-08-20 21:10:51,698 WARNING: GET /Jenkinsfile -> 404
2026-08-20 21:10:51,701 INFO: << 404 /Jenkinsfile
2026-08-20 21:10:52,689 INFO: >> GET /config.json
2026-08-20 21:10:52,689 INFO: >> GET /settings.json
2026-08-20 21:10:52,689 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,689 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,690 INFO: GET /settings.json
2026-08-20 21:10:52,690 INFO: GET /config.json
2026-08-20 21:10:52,690 INFO: >> GET /next.config.js
2026-08-20 21:10:52,690 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,690 INFO: GET /next.config.js
2026-08-20 21:10:52,691 INFO: >> GET /app.js
2026-08-20 21:10:52,691 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,691 WARNING: GET /settings.json -> 404
2026-08-20 21:10:52,691 INFO: GET /app.js
2026-08-20 21:10:52,691 WARNING: GET /config.json -> 404
2026-08-20 21:10:52,691 WARNING: GET /next.config.js -> 404
2026-08-20 21:10:52,692 WARNING: GET /app.js -> 404
2026-08-20 21:10:52,692 INFO: >> GET /server.js
2026-08-20 21:10:52,694 INFO: << 404 /next.config.js
2026-08-20 21:10:52,694 INFO: << 404 /settings.json
2026-08-20 21:10:52,694 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,694 INFO: << 404 /config.json
2026-08-20 21:10:52,694 INFO: >> GET /nuxt.config.js
2026-08-20 21:10:52,694 INFO: >> GET /vite.config.js
2026-08-20 21:10:52,694 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,694 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,695 INFO: GET /nuxt.config.js
2026-08-20 21:10:52,695 INFO: >> GET /vite.config.ts
2026-08-20 21:10:52,695 INFO: GET /vite.config.js
2026-08-20 21:10:52,695 INFO: << 404 /app.js
2026-08-20 21:10:52,695 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,695 INFO: >> GET /ecosystem.config.js
2026-08-20 21:10:52,695 INFO: GET /vite.config.ts
2026-08-20 21:10:52,696 WARNING: GET /nuxt.config.js -> 404
2026-08-20 21:10:52,696 WARNING: GET /vite.config.js -> 404
2026-08-20 21:10:52,696 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,696 WARNING: GET /vite.config.ts -> 404
2026-08-20 21:10:52,696 INFO: >> GET /.vercel/project.json
2026-08-20 21:10:52,696 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,697 INFO: GET /.vercel/project.json
2026-08-20 21:10:52,698 WARNING: GET /.vercel/project.json -> 404
2026-08-20 21:10:52,699 INFO: << 404 /nuxt.config.js
2026-08-20 21:10:52,699 INFO: << 404 /vite.config.js
2026-08-20 21:10:52,699 INFO: << 404 /vite.config.ts
2026-08-20 21:10:52,699 INFO: >> GET /.next/BUILD_ID
2026-08-20 21:10:52,699 INFO: >> GET /netlify.toml
2026-08-20 21:10:52,699 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,699 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,700 INFO: GET /.next/BUILD_ID
2026-08-20 21:10:52,700 INFO: GET /netlify.toml
2026-08-20 21:10:52,701 INFO: << 404 /.vercel/project.json
2026-08-20 21:10:52,701 WARNING: GET /.next/BUILD_ID -> 404
2026-08-20 21:10:52,701 WARNING: GET /netlify.toml -> 404
2026-08-20 21:10:52,704 INFO: << 404 /.next/BUILD_ID
2026-08-20 21:10:52,704 INFO: << 404 /netlify.toml
2026-08-20 21:10:52,704 INFO: GET /server.js
2026-08-20 21:10:52,707 INFO: GET /ecosystem.config.js
2026-08-20 21:10:52,707 WARNING: GET /server.js -> 404
2026-08-20 21:10:52,710 WARNING: GET /ecosystem.config.js -> 404
2026-08-20 21:10:52,736 INFO: << 404 /server.js
2026-08-20 21:10:52,738 INFO: << 404 /ecosystem.config.js
2026-08-20 21:10:52,859 INFO: >> GET /.next/routes-manifest.json
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 INFO: >> GET /runtime-config.js
2026-08-20 21:10:52,860 INFO: >> GET /env.json
2026-08-20 21:10:52,860 INFO: >> GET /app.config.js
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 INFO: >> GET /assets/config.js
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 INFO: GET /.next/routes-manifest.json
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 INFO: >> GET /env.js
2026-08-20 21:10:52,860 INFO: GET /runtime-config.js
2026-08-20 21:10:52,860 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,860 INFO: GET /env.json
2026-08-20 21:10:52,860 INFO: GET /app.config.js
2026-08-20 21:10:52,861 INFO: GET /assets/config.js
2026-08-20 21:10:52,861 INFO: GET /env.js
2026-08-20 21:10:52,861 WARNING: GET /.next/routes-manifest.json -> 404
2026-08-20 21:10:52,861 WARNING: GET /env.json -> 404
2026-08-20 21:10:52,862 WARNING: GET /app.config.js -> 404
2026-08-20 21:10:52,862 WARNING: GET /runtime-config.js -> 404
2026-08-20 21:10:52,862 WARNING: GET /assets/config.js -> 404
2026-08-20 21:10:52,862 WARNING: GET /env.js -> 404
2026-08-20 21:10:52,864 INFO: << 404 /runtime-config.js
2026-08-20 21:10:52,864 INFO: << 404 /app.config.js
2026-08-20 21:10:52,864 INFO: << 404 /env.json
2026-08-20 21:10:52,864 INFO: << 404 /.next/routes-manifest.json
2026-08-20 21:10:52,864 INFO: >> GET /assets/env.js
2026-08-20 21:10:52,864 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,865 INFO: << 404 /assets/config.js
2026-08-20 21:10:52,865 INFO: >> GET /appsettings.json
2026-08-20 21:10:52,865 INFO: >> GET /appsettings.Production.json
2026-08-20 21:10:52,865 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,865 INFO: >> GET /appsettings.Development.json
2026-08-20 21:10:52,865 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,865 INFO: GET /assets/env.js
2026-08-20 21:10:52,865 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,865 INFO: GET /appsettings.json
2026-08-20 21:10:52,865 INFO: GET /appsettings.Production.json
2026-08-20 21:10:52,865 INFO: << 404 /env.js
2026-08-20 21:10:52,865 INFO: >> GET /appsettings.Staging.json
2026-08-20 21:10:52,865 INFO: GET /appsettings.Development.json
2026-08-20 21:10:52,865 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,865 INFO: >> GET /web.config
2026-08-20 21:10:52,866 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,866 INFO: GET /appsettings.Staging.json
2026-08-20 21:10:52,866 INFO: GET /web.config
2026-08-20 21:10:52,866 WARNING: GET /appsettings.json -> 404
2026-08-20 21:10:52,866 WARNING: GET /appsettings.Production.json -> 404
2026-08-20 21:10:52,866 WARNING: GET /assets/env.js -> 404
2026-08-20 21:10:52,866 WARNING: GET /appsettings.Development.json -> 404
2026-08-20 21:10:52,867 WARNING: GET /appsettings.Staging.json -> 404
2026-08-20 21:10:52,867 WARNING: GET /web.config -> 404
2026-08-20 21:10:52,869 INFO: << 404 /assets/env.js
2026-08-20 21:10:52,869 INFO: << 404 /appsettings.json
2026-08-20 21:10:52,869 INFO: << 404 /appsettings.Production.json
2026-08-20 21:10:52,869 INFO: >> GET /elmah.axd
2026-08-20 21:10:52,869 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,869 INFO: >> GET /trace.axd
2026-08-20 21:10:52,869 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,869 INFO: >> GET /settings.py
2026-08-20 21:10:52,870 INFO: GET /elmah.axd
2026-08-20 21:10:52,870 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,870 INFO: << 404 /appsettings.Development.json
2026-08-20 21:10:52,870 INFO: GET /trace.axd
2026-08-20 21:10:52,870 INFO: << 404 /appsettings.Staging.json
2026-08-20 21:10:52,870 INFO: GET /settings.py
2026-08-20 21:10:52,870 INFO: >> GET /local_settings.py
2026-08-20 21:10:52,870 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,870 INFO: << 404 /web.config
2026-08-20 21:10:52,870 INFO: >> GET /settings/production.py
2026-08-20 21:10:52,870 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,870 INFO: >> GET /docker-compose.yaml
2026-08-20 21:10:52,871 INFO: GET /local_settings.py
2026-08-20 21:10:52,871 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,871 INFO: GET /settings/production.py
2026-08-20 21:10:52,871 WARNING: GET /trace.axd -> 404
2026-08-20 21:10:52,871 WARNING: GET /elmah.axd -> 404
2026-08-20 21:10:52,871 INFO: GET /docker-compose.yaml
2026-08-20 21:10:52,871 WARNING: GET /settings.py -> 404
2026-08-20 21:10:52,872 WARNING: GET /settings/production.py -> 404
2026-08-20 21:10:52,872 WARNING: GET /local_settings.py -> 404
2026-08-20 21:10:52,872 WARNING: GET /docker-compose.yaml -> 404
2026-08-20 21:10:52,873 INFO: << 404 /elmah.axd
2026-08-20 21:10:52,873 INFO: << 404 /trace.axd
2026-08-20 21:10:52,873 INFO: << 404 /settings.py
2026-08-20 21:10:52,874 INFO: >> GET /js/config.js
2026-08-20 21:10:52,874 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:52,874 INFO: GET /js/config.js
2026-08-20 21:10:52,874 INFO: << 404 /settings/production.py
2026-08-20 21:10:52,874 INFO: << 404 /local_settings.py
2026-08-20 21:10:52,875 WARNING: GET /js/config.js -> 404
2026-08-20 21:10:52,879 INFO: << 404 /docker-compose.yaml
2026-08-20 21:10:52,880 INFO: << 404 /js/config.js
2026-08-20 21:10:54,287 INFO: >> GET /docker-compose.prod.yml
2026-08-20 21:10:54,287 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:54,287 INFO: GET /docker-compose.prod.yml
2026-08-20 21:10:54,288 WARNING: GET /docker-compose.prod.yml -> 404
2026-08-20 21:10:54,291 INFO: << 404 /docker-compose.prod.yml
2026-08-20 21:10:55,216 INFO: >> GET /helm/values.yaml
2026-08-20 21:10:55,216 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:55,217 INFO: GET /helm/values.yaml
2026-08-20 21:10:55,218 WARNING: GET /helm/values.yaml -> 404
2026-08-20 21:10:55,221 INFO: << 404 /helm/values.yaml
2026-08-20 21:10:57,415 INFO: >> GET /config/database.yml
2026-08-20 21:10:57,415 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:57,416 INFO: GET /config/database.yml
2026-08-20 21:10:57,417 WARNING: GET /config/database.yml -> 404
2026-08-20 21:10:57,418 INFO: >> GET /config/secrets.yml
2026-08-20 21:10:57,420 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:57,420 INFO: << 404 /config/database.yml
2026-08-20 21:10:57,430 INFO: GET /config/secrets.yml
2026-08-20 21:10:57,433 WARNING: GET /config/secrets.yml -> 404
2026-08-20 21:10:57,462 INFO: << 404 /config/secrets.yml
2026-08-20 21:10:57,513 INFO: >> GET /.bzr/README
2026-08-20 21:10:57,513 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:57,513 INFO: GET /.bzr/README
2026-08-20 21:10:57,515 WARNING: GET /.bzr/README -> 404
2026-08-20 21:10:57,518 INFO: << 404 /.bzr/README
2026-08-20 21:10:58,155 INFO: >> GET /rails/info/routes
2026-08-20 21:10:58,155 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,156 INFO: >> GET /.travis.yml
2026-08-20 21:10:58,156 INFO: GET /rails/info/routes
2026-08-20 21:10:58,156 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,156 INFO: GET /.travis.yml
2026-08-20 21:10:58,156 INFO: >> GET /rails/info/properties
2026-08-20 21:10:58,157 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,157 WARNING: GET /rails/info/routes -> 404
2026-08-20 21:10:58,157 INFO: GET /rails/info/properties
2026-08-20 21:10:58,158 WARNING: GET /.travis.yml -> 404
2026-08-20 21:10:58,158 WARNING: GET /rails/info/properties -> 404
2026-08-20 21:10:58,159 INFO: >> GET /Gemfile
2026-08-20 21:10:58,160 INFO: << 404 /rails/info/routes
2026-08-20 21:10:58,160 INFO: << 404 /.travis.yml
2026-08-20 21:10:58,160 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,161 INFO: << 404 /rails/info/properties
2026-08-20 21:10:58,161 INFO: >> GET /Rakefile
2026-08-20 21:10:58,163 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,171 INFO: GET /Gemfile
2026-08-20 21:10:58,174 INFO: GET /Rakefile
2026-08-20 21:10:58,174 WARNING: GET /Gemfile -> 404
2026-08-20 21:10:58,177 WARNING: GET /Rakefile -> 404
2026-08-20 21:10:58,209 INFO: << 404 /Gemfile
2026-08-20 21:10:58,213 INFO: << 404 /Rakefile
2026-08-20 21:10:58,412 INFO: >> GET /ready
2026-08-20 21:10:58,412 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,413 INFO: GET /ready
2026-08-20 21:10:58,414 WARNING: GET /ready -> 404
2026-08-20 21:10:58,417 INFO: << 404 /ready
2026-08-20 21:10:58,884 INFO: >> GET /bitbucket-pipelines.yml
2026-08-20 21:10:58,884 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,884 INFO: GET /bitbucket-pipelines.yml
2026-08-20 21:10:58,885 INFO: >> GET /azure-pipelines.yml
2026-08-20 21:10:58,885 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:58,885 WARNING: GET /bitbucket-pipelines.yml -> 404
2026-08-20 21:10:58,886 INFO: GET /azure-pipelines.yml
2026-08-20 21:10:58,887 WARNING: GET /azure-pipelines.yml -> 404
2026-08-20 21:10:58,889 INFO: << 404 /bitbucket-pipelines.yml
2026-08-20 21:10:58,890 INFO: << 404 /azure-pipelines.yml
2026-08-20 21:10:59,174 INFO: >> GET /wp-json/wp/v2/users
2026-08-20 21:10:59,174 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:59,174 INFO: GET /wp-json/wp/v2/users
2026-08-20 21:10:59,176 WARNING: GET /wp-json/wp/v2/users -> 404
2026-08-20 21:10:59,179 INFO: << 404 /wp-json/wp/v2/users
2026-08-20 21:10:59,829 INFO: >> GET /docker-compose.yml
2026-08-20 21:10:59,829 DEBUG: Using selector: EpollSelector
2026-08-20 21:10:59,830 INFO: GET /docker-compose.yml
2026-08-20 21:10:59,831 WARNING: GET /docker-compose.yml -> 404
2026-08-20 21:10:59,834 INFO: << 404 /docker-compose.yml
2026-08-20 21:11:00,217 INFO: >> GET /main.js.map
2026-08-20 21:11:00,218 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:00,218 INFO: GET /main.js.map
2026-08-20 21:11:00,220 WARNING: GET /main.js.map -> 404
2026-08-20 21:11:00,223 INFO: << 404 /main.js.map
2026-08-20 21:11:02,607 INFO: >> GET /bundle.js.map
2026-08-20 21:11:02,608 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,619 INFO: GET /bundle.js.map
2026-08-20 21:11:02,622 WARNING: GET /bundle.js.map -> 404
2026-08-20 21:11:02,653 INFO: << 404 /bundle.js.map
2026-08-20 21:11:02,914 INFO: >> GET /docker-compose.override.yml
2026-08-20 21:11:02,914 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,914 INFO: GET /docker-compose.override.yml
2026-08-20 21:11:02,914 INFO: >> GET /.docker/config.json
2026-08-20 21:11:02,915 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,915 INFO: >> GET /terraform.tfstate
2026-08-20 21:11:02,915 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,915 INFO: GET /.docker/config.json
2026-08-20 21:11:02,915 INFO: GET /terraform.tfstate
2026-08-20 21:11:02,915 INFO: >> GET /.dockercfg
2026-08-20 21:11:02,915 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,916 INFO: GET /.dockercfg
2026-08-20 21:11:02,916 WARNING: GET /docker-compose.override.yml -> 404
2026-08-20 21:11:02,916 WARNING: GET /.docker/config.json -> 404
2026-08-20 21:11:02,916 WARNING: GET /terraform.tfstate -> 404
2026-08-20 21:11:02,917 WARNING: GET /.dockercfg -> 404
2026-08-20 21:11:02,917 INFO: >> GET /Dockerfile
2026-08-20 21:11:02,918 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,919 INFO: << 404 /terraform.tfstate
2026-08-20 21:11:02,919 INFO: << 404 /.dockercfg
2026-08-20 21:11:02,920 INFO: << 404 /.docker/config.json
2026-08-20 21:11:02,920 INFO: << 404 /docker-compose.override.yml
2026-08-20 21:11:02,920 INFO: >> GET /.terraform/terraform.tfstate
2026-08-20 21:11:02,921 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,921 INFO: >> GET /kubernetes/secrets.yaml
2026-08-20 21:11:02,920 INFO: >> GET /.dockerignore
2026-08-20 21:11:02,921 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,921 INFO: GET /.terraform/terraform.tfstate
2026-08-20 21:11:02,921 INFO: GET /kubernetes/secrets.yaml
2026-08-20 21:11:02,921 INFO: >> GET /terraform.tfvars
2026-08-20 21:11:02,921 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,922 INFO: GET /terraform.tfvars
2026-08-20 21:11:02,922 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:02,922 WARNING: GET /.terraform/terraform.tfstate -> 404
2026-08-20 21:11:02,922 WARNING: GET /kubernetes/secrets.yaml -> 404
2026-08-20 21:11:02,923 WARNING: GET /terraform.tfvars -> 404
2026-08-20 21:11:02,925 INFO: << 404 /.terraform/terraform.tfstate
2026-08-20 21:11:02,925 INFO: << 404 /kubernetes/secrets.yaml
2026-08-20 21:11:02,926 INFO: << 404 /terraform.tfvars
2026-08-20 21:11:02,930 INFO: GET /Dockerfile
2026-08-20 21:11:02,933 WARNING: GET /Dockerfile -> 404
2026-08-20 21:11:02,933 INFO: GET /.dockerignore
2026-08-20 21:11:02,937 WARNING: GET /.dockerignore -> 404
2026-08-20 21:11:02,962 INFO: << 404 /Dockerfile
2026-08-20 21:11:02,965 INFO: << 404 /.dockerignore
2026-08-20 21:11:03,316 INFO: >> GET /asset-manifest.json
2026-08-20 21:11:03,317 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:03,317 INFO: GET /asset-manifest.json
2026-08-20 21:11:03,319 WARNING: GET /asset-manifest.json -> 404
2026-08-20 21:11:03,322 INFO: << 404 /asset-manifest.json
2026-08-20 21:11:03,932 INFO: >> GET /ansible/vault.yml
2026-08-20 21:11:03,932 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:03,933 INFO: GET /ansible/vault.yml
2026-08-20 21:11:03,934 WARNING: GET /ansible/vault.yml -> 404
2026-08-20 21:11:03,937 INFO: << 404 /ansible/vault.yml
2026-08-20 21:11:04,581 INFO: >> GET /static/js/main.js
2026-08-20 21:11:04,581 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:04,581 INFO: GET /static/js/main.js
2026-08-20 21:11:04,583 WARNING: GET /static/js/main.js -> 404
2026-08-20 21:11:04,586 INFO: << 404 /static/js/main.js
2026-08-20 21:11:04,889 INFO: >> GET /static/js/app.js
2026-08-20 21:11:04,889 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:04,889 INFO: GET /static/js/app.js
2026-08-20 21:11:04,891 WARNING: GET /static/js/app.js -> 404
2026-08-20 21:11:04,893 INFO: << 404 /static/js/app.js
2026-08-20 21:11:05,756 INFO: >> GET /swagger/v1/swagger.json
2026-08-20 21:11:05,757 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,757 INFO: GET /swagger/v1/swagger.json
2026-08-20 21:11:05,758 INFO: >> GET /swagger.json
2026-08-20 21:11:05,758 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,758 INFO: >> GET /graphql
2026-08-20 21:11:05,758 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,758 INFO: >> GET /api-docs
2026-08-20 21:11:05,758 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,759 INFO: GET /swagger.json
2026-08-20 21:11:05,759 INFO: GET /graphql
2026-08-20 21:11:05,759 INFO: GET /api-docs
2026-08-20 21:11:05,760 WARNING: GET /swagger/v1/swagger.json -> 404
2026-08-20 21:11:05,760 WARNING: GET /graphql -> 404
2026-08-20 21:11:05,760 WARNING: GET /swagger.json -> 404
2026-08-20 21:11:05,760 INFO: >> GET /openapi.json
2026-08-20 21:11:05,760 WARNING: GET /api-docs -> 404
2026-08-20 21:11:05,761 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,762 INFO: >> GET /graphiql
2026-08-20 21:11:05,764 INFO: << 404 /swagger.json
2026-08-20 21:11:05,764 INFO: << 404 /graphql
2026-08-20 21:11:05,764 INFO: << 404 /api-docs
2026-08-20 21:11:05,764 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,764 INFO: << 404 /swagger/v1/swagger.json
2026-08-20 21:11:05,764 INFO: >> GET /server-info
2026-08-20 21:11:05,764 INFO: >> GET /nginx_status
2026-08-20 21:11:05,764 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,764 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,767 INFO: >> GET /metrics
2026-08-20 21:11:05,767 INFO: GET /server-info
2026-08-20 21:11:05,770 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,777 INFO: >> GET /server-status
2026-08-20 21:11:05,780 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,780 INFO: GET /nginx_status
2026-08-20 21:11:05,780 INFO: GET /metrics
2026-08-20 21:11:05,780 INFO: GET /server-status
2026-08-20 21:11:05,781 WARNING: GET /server-status -> 404
2026-08-20 21:11:05,781 WARNING: GET /metrics -> 404
2026-08-20 21:11:05,782 WARNING: GET /server-info -> 404
2026-08-20 21:11:05,784 WARNING: GET /nginx_status -> 404
2026-08-20 21:11:05,786 INFO: << 404 /server-info
2026-08-20 21:11:05,787 INFO: << 404 /nginx_status
2026-08-20 21:11:05,793 INFO: GET /graphiql
2026-08-20 21:11:05,794 INFO: << 404 /metrics
2026-08-20 21:11:05,796 INFO: << 404 /server-status
2026-08-20 21:11:05,797 WARNING: GET /graphiql -> 404
2026-08-20 21:11:05,797 INFO: GET /openapi.json
2026-08-20 21:11:05,827 INFO: << 404 /graphiql
2026-08-20 21:11:05,927 INFO: >> GET /healthz
2026-08-20 21:11:05,927 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,927 INFO: >> GET /health
2026-08-20 21:11:05,927 INFO: GET /healthz
2026-08-20 21:11:05,927 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:05,928 INFO: GET /health
2026-08-20 21:11:05,929 WARNING: GET /healthz -> 404
2026-08-20 21:11:05,929 WARNING: GET /health -> 404
2026-08-20 21:11:05,932 INFO: << 404 /healthz
2026-08-20 21:11:05,932 INFO: << 404 /health
2026-08-20 21:11:06,743 INFO: << 200 /openapi.json
2026-08-20 21:11:06,759 INFO: >> GET /status
2026-08-20 21:11:06,759 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:06,759 INFO: >> GET /adminer.php
2026-08-20 21:11:06,759 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:06,759 INFO: GET /status
2026-08-20 21:11:06,760 INFO: GET /adminer.php
2026-08-20 21:11:06,760 INFO: >> GET /phpmyadmin/
2026-08-20 21:11:06,761 DEBUG: Using selector: EpollSelector
2026-08-20 21:11:06,761 WARNING: GET /adminer.php -> 404
2026-08-20 21:11:06,761 WARNING: GET /status -> 404
2026-08-20 21:11:06,761 INFO: GET /phpmyadmin/
2026-08-20 21:11:06,762 WARNING: GET /phpmyadmin/ -> 404
2026-08-20 21:11:06,763 INFO: << 404 /adminer.php
2026-08-20 21:11:06,763 INFO: << 404 /status
2026-08-20 21:11:06,765 INFO: << 404 /phpmyadmin/
2026-08-20 21:34:07,458 INFO: wsgi.py loading...
2026-08-20 21:34:07,458 INFO: Importing app.main...
2026-08-20 21:34:09,222 INFO: app.main imported successfully.
2026-08-20 21:34:09,222 INFO: Running DB init...
2026-08-20 21:34:09,281 INFO: All tables OK.
2026-08-20 21:34:09,419 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 21:34:09,421 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,424 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,426 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,428 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,431 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,433 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 21:34:09,441 INFO: Dip chart data seeded.
2026-08-20 21:34:09,441 INFO: DB init complete.
2026-08-20 21:34:09,442 INFO: wsgi.py ready.
2026-08-20 21:34:09,445 INFO: >> GET /
2026-08-20 21:34:09,446 DEBUG: Using selector: EpollSelector
2026-08-20 21:34:09,457 INFO: GET /
2026-08-20 21:34:09,459 WARNING: GET / -> 404
2026-08-20 21:34:09,469 INFO: << 404 /
2026-08-20 22:10:00,262 INFO: wsgi.py loading...
2026-08-20 22:10:00,263 INFO: Importing app.main...
2026-08-20 22:10:02,343 INFO: app.main imported successfully.
2026-08-20 22:10:02,344 INFO: Running DB init...
2026-08-20 22:10:02,431 INFO: All tables OK.
2026-08-20 22:10:02,583 INFO: Migration OK: allowances ENUM+DAILY
2026-08-20 22:10:02,587 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,590 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,602 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,607 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,610 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,614 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-20 22:10:02,623 INFO: Dip chart data seeded.
2026-08-20 22:10:02,623 INFO: DB init complete.
2026-08-20 22:10:02,623 INFO: wsgi.py ready.
2026-08-20 22:10:02,627 INFO: >> GET /
2026-08-20 22:10:02,629 DEBUG: Using selector: EpollSelector
2026-08-20 22:10:02,641 INFO: GET /
2026-08-20 22:10:02,643 WARNING: GET / -> 404
2026-08-20 22:10:02,654 INFO: << 404 /
2026-08-21 04:07:42,330 INFO: wsgi.py loading...
2026-08-21 04:07:42,331 INFO: Importing app.main...
2026-08-21 04:07:44,999 INFO: app.main imported successfully.
2026-08-21 04:07:44,999 INFO: Running DB init...
2026-08-21 04:07:45,059 INFO: All tables OK.
2026-08-21 04:07:45,193 INFO: Migration OK: allowances ENUM+DAILY
2026-08-21 04:07:45,196 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,198 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,201 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,203 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,206 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,208 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 04:07:45,216 INFO: Dip chart data seeded.
2026-08-21 04:07:45,216 INFO: DB init complete.
2026-08-21 04:07:45,216 INFO: wsgi.py ready.
2026-08-21 04:07:45,220 INFO: >> GET /
2026-08-21 04:07:45,221 DEBUG: Using selector: EpollSelector
2026-08-21 04:07:45,232 INFO: GET /
2026-08-21 04:07:45,234 WARNING: GET / -> 404
2026-08-21 04:07:45,243 INFO: << 404 /
2026-08-21 05:48:52,347 INFO: wsgi.py loading...
2026-08-21 05:48:52,348 INFO: Importing app.main...
2026-08-21 05:48:55,603 INFO: app.main imported successfully.
2026-08-21 05:48:55,603 INFO: Running DB init...
2026-08-21 05:48:55,672 INFO: All tables OK.
2026-08-21 05:48:55,823 INFO: Migration OK: allowances ENUM+DAILY
2026-08-21 05:48:55,826 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,835 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,845 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,847 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,857 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,859 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 05:48:55,868 INFO: Dip chart data seeded.
2026-08-21 05:48:55,868 INFO: DB init complete.
2026-08-21 05:48:55,868 INFO: wsgi.py ready.
2026-08-21 05:48:55,872 INFO: >> POST /wp-admin/admin-ajax.php
2026-08-21 05:48:55,873 DEBUG: Using selector: EpollSelector
2026-08-21 05:48:55,884 INFO: POST /wp-admin/admin-ajax.php
2026-08-21 05:48:55,888 WARNING: POST /wp-admin/admin-ajax.php -> 404
2026-08-21 05:48:55,897 INFO: << 404 /wp-admin/admin-ajax.php
2026-08-21 07:05:10,719 INFO: wsgi.py loading...
2026-08-21 07:05:10,720 INFO: Importing app.main...
2026-08-21 07:05:12,608 INFO: app.main imported successfully.
2026-08-21 07:05:12,608 INFO: Running DB init...
2026-08-21 07:05:12,668 INFO: All tables OK.
2026-08-21 07:05:13,323 INFO: Migration OK: allowances ENUM+DAILY
2026-08-21 07:05:13,332 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,335 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,337 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,347 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,349 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,351 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 07:05:13,359 INFO: Dip chart data seeded.
2026-08-21 07:05:13,359 INFO: DB init complete.
2026-08-21 07:05:13,359 INFO: wsgi.py ready.
2026-08-21 07:05:13,362 INFO: >> GET /
2026-08-21 07:05:13,364 DEBUG: Using selector: EpollSelector
2026-08-21 07:05:13,374 INFO: GET /
2026-08-21 07:05:13,376 WARNING: GET / -> 404
2026-08-21 07:05:13,385 INFO: << 404 /
2026-08-21 12:35:11,201 INFO: wsgi.py loading...
2026-08-21 12:35:11,202 INFO: Importing app.main...
2026-08-21 12:35:14,844 INFO: app.main imported successfully.
2026-08-21 12:35:14,844 INFO: Running DB init...
2026-08-21 12:35:14,903 INFO: All tables OK.
2026-08-21 12:35:15,036 INFO: Migration OK: allowances ENUM+DAILY
2026-08-21 12:35:15,039 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,041 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,043 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,046 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,048 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,050 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-21 12:35:15,059 INFO: Dip chart data seeded.
2026-08-21 12:35:15,059 INFO: DB init complete.
2026-08-21 12:35:15,059 INFO: wsgi.py ready.
2026-08-21 12:35:15,063 INFO: >> GET /
2026-08-21 12:35:15,064 DEBUG: Using selector: EpollSelector
2026-08-21 12:35:15,074 INFO: GET /
2026-08-21 12:35:15,076 WARNING: GET / -> 404
2026-08-21 12:35:15,085 INFO: << 404 /
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: retry: Resource temporarily unavailable
/usr/local/lsws/fcgi-bin/lswsgi_wrapper: fork: Resource temporarily unavailable
2026-08-22 00:21:49,245 INFO: wsgi.py loading...
2026-08-22 00:21:49,246 INFO: Importing app.main...
2026-08-22 00:21:52,995 INFO: app.main imported successfully.
2026-08-22 00:21:52,995 INFO: Running DB init...
2026-08-22 00:21:53,074 INFO: All tables OK.
2026-08-22 00:21:53,211 INFO: Migration OK: allowances ENUM+DAILY
2026-08-22 00:21:53,213 INFO: Migration skipped (audit_log.summary): (pymysql.err.OperationalError) (1060, "Duplicate column name 'summary'")
[SQL: ALTER TABLE audit_log ADD COLUMN summary VARCHAR(255) NULL AFTER record_id]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,216 INFO: Migration skipped (pumps.status): (pymysql.err.OperationalError) (1060, "Duplicate column name 'status'")
[SQL: ALTER TABLE pumps ADD COLUMN status ENUM('ACTIVE','MAINTENANCE','INACTIVE') NOT NULL DEFAULT 'ACTIVE']
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,218 INFO: Migration skipped (pumps.maintenance_reason): (pymysql.err.OperationalError) (1060, "Duplicate column name 'maintenance_reason'")
[SQL: ALTER TABLE pumps ADD COLUMN maintenance_reason VARCHAR(255) NULL]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,220 INFO: Migration skipped (pumps.sort_order): (pymysql.err.OperationalError) (1060, "Duplicate column name 'sort_order'")
[SQL: ALTER TABLE pumps ADD COLUMN sort_order INT NOT NULL DEFAULT 0]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,223 INFO: Migration skipped (pumps.uq_pump_number_fuel): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_number_fuel_type'")
[SQL: ALTER TABLE pumps ADD CONSTRAINT uq_pump_number_fuel_type UNIQUE (pump_number, fuel_type)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,226 INFO: Migration skipped (pump_shift_configs.uq_pump_shift): (pymysql.err.OperationalError) (1061, "Duplicate key name 'uq_pump_shift_config'")
[SQL: ALTER TABLE pump_shift_configs ADD CONSTRAINT uq_pump_shift_config UNIQUE (pump_id, shift_template_id)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-08-22 00:21:53,234 INFO: Dip chart data seeded.
2026-08-22 00:21:53,234 INFO: DB init complete.
2026-08-22 00:21:53,234 INFO: wsgi.py ready.
2026-08-22 00:21:53,238 INFO: >> GET /
2026-08-22 00:21:53,239 DEBUG: Using selector: EpollSelector
2026-08-22 00:21:53,250 INFO: GET /
2026-08-22 00:21:53,252 WARNING: GET / -> 404
2026-08-22 00:21:53,262 INFO: << 404 /
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
[UID:1034][3143987] fork() failed, please increase process limit, errno: 11 (Resource temporarily unavailable)
