POS Print Service

Print Dashboard

Refresh

API

Online

Workers

5

Active printers

7

Printer errors

0

Pending

0

Failed

0

Branch Printers

7 active

BranchTypeStateAddressLast checkedErrorStatus
MILdeliveryupmilahopf.atadragon.com:9141Jul 22, 2026, 4:24 PM-Printer is online but did not return ESC/POS status
MILdine-inupmilahopf.atadragon.com:9143Jul 22, 2026, 4:24 PM-Printer is online but did not return ESC/POS status
MTLdeliveryupdragonmtl.dyndns.org:5011Jul 22, 2026, 4:24 PM-ready
RAJdeliveryupdragonraj.dyndns.org:5201Jul 22, 2026, 4:24 PM-ready
RAJdine-inupdragonraj.dyndns.org:5202Jul 22, 2026, 4:24 PM-ready
WATdeliveryupdragonwat.dyndns.org:5301Jul 22, 2026, 4:24 PM-ready
WATdine-inupdragonwat.dyndns.org:5302Jul 22, 2026, 4:24 PM-ready

Settings

production

TimezoneAsia/Colombo
Worker typesdelivery, dine-in
Health check30 sec
Status requiredNo
Discord alertsOn

Failed Prints

0 rows

IDOrderBranchTypeStatusAttemptsCreatedRetry
No rows

24h Totals

0 jobs

failed0
pending0
printing0
printed0
cancelled0

Recent Jobs

0 rows

IDOrderBranchTypeStatusAttemptsCreated
No rows

Print Logs

/app/logs/pos-print-service.log

                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 825, in _read_query_result
    result.read()
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 1199, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 775, in _read_packet
    packet.raise_for_error()
  File "/usr/local/lib/python3.12/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python3.12/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1146, "Table 'RestaurantMaster.print_jobs' doesn't exist")

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

Traceback (most recent call last):
  File "/app/app/worker.py", line 402, in print_worker_loop
    ids = await asyncio.to_thread(
          ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/threads.py", line 25, in to_thread
    return await loop.run_in_executor(None, func_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/app/worker.py", line 52, in claim_jobs
    rows = db.execute(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2362, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2256, in _execute_internal
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
    return meth(
           ^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/local/lib/python3.12/site-packages/pymysql/cursors.py", line 153, in execute
    result = self._query(query)
             ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pymysql/cursors.py", line 322, in _query
    conn.query(q)
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 563, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 825, in _read_query_result
    result.read()
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 1199, in read
    first_packet = self.connection._read_packet()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pymysql/connections.py", line 775, in _read_packet
    packet.raise_for_error()
  File "/usr/local/lib/python3.12/site-packages/pymysql/protocol.py", line 219, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python3.12/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
    raise errorclass(errno, errval)
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'RestaurantMaster.print_jobs' doesn't exist")
[SQL: 
                SELECT id
                FROM print_jobs
                WHERE status = 'pending'
                  AND printer_type = %(printer_type)s
                  AND (next_retry_at IS NULL OR next_retry_at <= NOW())
                ORDER BY created_at ASC
                LIMIT %(limit)s
                FOR UPDATE SKIP LOCKED
                ]
[parameters: {'printer_type': 'delivery', 'limit': 10}]
(Background on this error at: https://sqlalche.me/e/20/f405)
2026-07-22 09:51:30,204 INFO [app.main] Stopped POS Print Service
2026-07-22 09:51:42,614 INFO [app.main] Starting POS Print Service
2026-07-22 09:51:42,615 INFO [app.worker] Started pos-print-service:delivery_worker
2026-07-22 09:51:42,621 INFO [app.worker] Started pos-print-service:dine-in_worker
2026-07-22 09:51:42,624 INFO [app.worker] Started pos-print-service:health_checker
2026-07-22 09:51:42,633 INFO [app.worker] Started pos-print-service:printer_health_checker
2026-07-22 09:51:42,636 INFO [app.worker] Started pos-print-service:failed_job_retry_worker
2026-07-22 09:55:04,502 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:55:33,322 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 29s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 09:55:53,903 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:56:18,942 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 24s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:56:48,930 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 54s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 09:57:09,454 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:57:39,421 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 30s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 09:58:00,384 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:58:25,125 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 25s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 09:58:40,652 INFO [app.main] Stopped POS Print Service
2026-07-22 09:58:51,563 INFO [app.main] Starting POS Print Service
2026-07-22 09:58:51,565 INFO [app.worker] Started pos-print-service:delivery_worker
2026-07-22 09:58:51,568 INFO [app.worker] Started pos-print-service:dine-in_worker
2026-07-22 09:58:51,570 INFO [app.worker] Started pos-print-service:health_checker
2026-07-22 09:58:51,573 INFO [app.worker] Started pos-print-service:printer_health_checker
2026-07-22 09:58:51,577 INFO [app.worker] Started pos-print-service:failed_job_retry_worker
2026-07-22 09:58:56,690 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 56s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 09:59:27,233 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 10:00:02,819 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 35s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 10:00:42,472 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 1m 15s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 10:01:13,006 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 10:01:52,984 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 39s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 10:02:23,564 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 10:03:01,820 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 37s | Status: Printer connection failed: [Errno 113] No route to host | 
2026-07-22 10:03:38,585 INFO [app.worker] ✅ POS printer recovered | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Previous error type: offline | Down duration: 1m 14s | Current status: Printer is online but did not return ESC/POS status | 
2026-07-22 10:04:09,370 WARNING [app.worker] 🟥 POS printer health error | Branch: MTL | Printer type: dine-in | Printer: dragonmtl.dyndns.org:5012 | Error type: offline | Down duration: 0s | Status: Printer connection failed: [Errno 113] No route to host | 

Access

Server-side API key

API URLhttp://api:8000
Browser API keyHidden
Dashboard port3002