The Logs Hub consolidates all system audit trails, security events, error records, email delivery history, and failed transaction recovery into a single admin page.
Navigate to Settings > Logs in the admin sidebar to access this section.
Required permission: settings:view to view all tabs. settings:edit is additionally required for recovery actions (retrying DLQ items, retrying failed emails, dismissing DLQ items).
Overview
The Logs Hub is organised into six tabs:
| Tab | What It Shows |
|---|---|
| Admin Actions | Audit trail of every admin operation (create, update, delete, configure, etc.) |
| Email Logs | Delivery history for all system emails, with retry capability for failures |
| Security | Login attempt log (successful and failed) for all users |
| Errors | Server-side error log (5xx errors, uncaught exceptions) |
| Performance | Sampled runtime metrics from web and Telegram clients |
| Dead Letter Queue | Failed background operations (transactions, retries) with manual recovery tools |
Each tab loads data independently. Switching tabs fetches fresh data for that tab.
Admin Actions
The Admin Actions tab provides a complete audit trail of every action taken by administrators on the platform. Every significant admin operation is automatically recorded, including who performed it, what changed, and whether it succeeded.
Columns
| Column | Description |
|---|---|
| Timestamp | When the action occurred |
| Admin | Email address of the admin who performed the action |
| Category | Action category (see table below) |
| Action | Action type (create, update, delete, approve, reject, login, logout, configure, send, execute) |
| Resource | The resource type affected (e.g., table, user, transaction), with the resource name in parentheses if available |
| Status | Success or Failed badge |
Categories
| Category | What It Covers |
|---|---|
user | User account modifications (block, unblock, password reset, balance changes) |
table | Table creation, editing, pausing, deleting |
financial | Deposits, withdrawals, balance adjustments |
bot | Bot configuration and management |
game | Game settings and rules changes |
messaging | Announcements and notifications |
settings | System configuration changes |
auth | Admin login, logout, permission changes |
agent | Agent management operations |
group | Player group management |
other | Miscellaneous admin actions |
Expanding a Row
Click any row to expand it and view additional detail fields:
- Details — structured JSON showing context about the action
- Changes — JSON diff of what was modified (before/after values where applicable)
- Error — error message if the action failed
- Resource ID — unique identifier of the affected resource
- IP — IP address of the admin who performed the action
Filtering
Use the filter bar to narrow results by:
| Filter | Options |
|---|---|
| Category | All Categories, or any single category from the list above |
| Action | All Actions, or any single action type (create, update, delete, etc.) |
| Resource Type | Free-text search (e.g., table, user, transaction) |
| Admin Email | Free-text search by admin email address |
| From Date | Start of date range |
| To Date | End of date range |
| Status | All Statuses / Success / Failed |
Click Clear Filters to reset all filters at once.
Email Logs
The Email Logs tab shows the delivery history of all system-generated emails (welcome emails, password resets, notifications, etc.).
Stats Bar
Five summary cards appear at the top:
| Card | Description |
|---|---|
| Total Sent | All-time successfully sent emails |
| Total Failed | All-time failed email deliveries |
| Total Pending | Emails currently queued for delivery |
| Sent (24h) | Emails sent in the last 24 hours |
| Failed (24h) | Failed deliveries in the last 24 hours |
Columns
| Column | Description |
|---|---|
| Recipient | Email address the message was sent to |
| Subject | Email subject line |
| Template | Template name used to generate the email, or dash if none |
| Status | Sent, Failed, or Pending |
| Sent At | Timestamp of delivery (or creation time if not yet sent) |
| Error | Error message if delivery failed |
| Actions | Retry button (shown only for failed emails) |
Viewing Email Details
Click any row to open the detail panel, which shows the full recipient, subject, template name, status, and error message (if applicable).
Retrying Failed Emails
For emails with status Failed, click the Retry button (either in the table row or in the detail panel). The email is re-queued for delivery.
Filtering
| Filter | Options |
|---|---|
| Status | All Statuses / Sent / Failed / Pending |
| Recipient | Free-text search by email address |
| Start Date | Start of date range |
| End Date | End of date range |
Security
The Security tab logs every login attempt across the platform, including both successful and failed attempts.
Columns
| Column | Description |
|---|---|
| Timestamp | When the login attempt occurred |
| Identifier | Username or IP address used in the attempt |
| Type | username (login by credentials) or ip (rate-limit tracking by IP) |
| IP | IP address of the client |
| Status | Success or Failed badge |
| User Agent | Browser/client user-agent string (truncated in the table, full value on hover) |
Filtering
| Filter | Options |
|---|---|
| Identifier | Free-text search by username or IP |
| Type | All Types / Username / IP |
| Status | All Statuses / Success / Failed |
| From Date | Start of date range |
| To Date | End of date range |
Note: Use this tab to investigate brute-force login attempts. Filter by Status = Failed and sort by timestamp to identify patterns. Cross-reference IP addresses with the Identifier column to spot credential-stuffing attacks from a single source.
Errors
The Errors tab captures server-side errors — primarily 5xx HTTP responses and uncaught exceptions. Each error is persisted to the database automatically by the error-handling middleware.
Columns
| Column | Description |
|---|---|
| Timestamp | When the error occurred |
| Severity | critical, error, or warn |
| Code | Application error code (if set), e.g., INTERNAL_SERVER_ERROR |
| Message | Error message (truncated in the table) |
| URL | API endpoint that triggered the error |
| Method | HTTP method (GET, POST, etc.) |
| HTTP Status | Response status code (e.g., 500, 502) |
Expanding a Row
Click any row to expand it and view:
- Stack Trace — full exception stack trace
- Context — structured JSON with additional context about the error
- User ID — the authenticated user who triggered the error (if applicable)
- IP — client IP address
- User Agent — browser/client identifier
Filtering
| Filter | Options |
|---|---|
| Severity | All Severities / Critical / Error / Warning |
| HTTP Status Code | Numeric input (e.g., 500) |
| URL contains | Free-text search on the request URL |
| From Date | Start of date range |
| To Date | End of date range |
Performance
The Performance tab shows aggregated, sampled runtime metrics (web vitals) with the metric, source, and sample count. Use the Range and Source controls to narrow the view. How many browser sessions report is set by Web vitals sample rate in Settings.
Dead Letter Queue
The Dead Letter Queue (DLQ) tab is a recovery tool for background operations that failed after exhausting their automatic retry attempts. This primarily includes failed financial transactions (deposits, withdrawals, balance adjustments) and other asynchronous operations.
Summary Cards
Five stat cards appear at the top:
| Card | Description |
|---|---|
| Total | Total items across all statuses |
| Pending | Items awaiting their next retry attempt |
| Processing | Items currently being processed |
| Failed | Items that have exhausted all retries |
| Completed | Items that were successfully recovered |
Below the stat cards, a By Operation Type breakdown shows item counts grouped by operation (e.g., "Confirm Deposit", "Process Withdrawal").
Columns
| Column | Description |
|---|---|
| Date | When the item was created |
| Operation Type | The type of operation that failed (e.g., transaction.confirmDeposit) |
| Error Summary | Truncated error message |
| Status | PENDING, PROCESSING, COMPLETED, FAILED, or EXPIRED |
| Retries | Current retry count out of the maximum allowed |
| Actions | Retry and Dismiss buttons |
Item Statuses
| Status | Meaning |
|---|---|
| PENDING | Queued and waiting for the next automatic or manual retry |
| PROCESSING | Currently being retried |
| COMPLETED | Successfully recovered — the operation completed |
| FAILED | All automatic retries exhausted; requires manual intervention |
| EXPIRED | Item passed its expiration date without being processed |
Viewing Item Details
Click any row to open the detail modal, which shows:
- Basic Information — ID, status, operation type, retry count
- Timestamps — created, expires, last retry, next retry, processed
- Identifiers — user ID and correlation ID (for tracing related operations)
- Error Information — error code and full error message
- Operation Data — the full JSON payload of the operation that failed
- Metadata — any additional metadata attached to the item
Retrying Items
Click the Retry button on any item with status PENDING, FAILED, or EXPIRED. The item is reset to PENDING status and processed immediately. For transaction operations, the specialised transaction retry worker handles the retry; for other operations, the item is queued for the next worker run.
Note: Retrying a transaction operation processes it immediately. Verify the error cause is resolved before retrying to avoid repeated failures.
Dismissing Items
Click the Dismiss (trash) button to permanently delete a DLQ item. This action cannot be undone. Use this for items that are no longer relevant or have been resolved through other means.
Bulk Actions
Use the checkboxes to select multiple items, then use the bulk action bar:
- Retry Selected — retries all selected items that are in a retryable status (PENDING, FAILED, EXPIRED)
- Dismiss Selected — permanently deletes all selected items
Filtering
| Filter | Options |
|---|---|
| Operation Type | Dropdown of operation types present in the current results |
| Status | All Statuses / Pending / Processing / Completed / Failed / Expired |
| From Date | Start of date range |
| To Date | End of date range |
Pagination
All tabs use paginated results. The page size is 50 entries for Admin Actions, Security, and Errors tabs, and 20 entries for Email Logs and Dead Letter Queue. Navigation controls appear at the bottom of each tab when results span multiple pages.
Notes for Operators
- The Logs Hub does not auto-refresh. Click Refresh (where available) or switch away from and back to a tab to reload data.
- All timestamps are displayed in your browser’s local timezone.
- Audit records are stored in the database and grow over time. Old admin action records can be purged through maintenance scripts if storage becomes a concern.
- DLQ items have an expiration date. Expired items will not be automatically retried but can still be manually retried or dismissed.
- The Security tab records all login attempts, not just admin logins. Use it to monitor player account security as well.
Related
- Security Administration — fraud alerts, AML reviews, account security controls
- Settings — system configuration and feature toggles
- System Emails — configure email templates and SMTP settings
- Dashboard — platform overview and system health status