Operator guideEN

Staff Activity

Operational audit page for failed CRM sign-ins and staff changes recorded by the admin audit log.

How to use this guide

Start with the main guide

Follow the explanation and examples first. Extra definitions and formulas are available below when you need them.

What this page shows

Staff Activity is a read-only operational audit page with four independent widgets. It helps an authorized operator investigate failed CRM sign-ins and review changes that other staff members caused in audited admin workflows.

This page is not a complete employee monitoring history. The three activity widgets read change-audit records created by instrumented write operations. Read-only page views, searches, clicks, and any write path that does not create a change-audit record are not represented.

Access

The navigation item and page require StaffActivity:R. The backend applies the same read permission to all four data endpoints and all four CSV export endpoints. Without that permission the page shows a no-permission state and the backend rejects direct requests.

The four widgets

Failed Login Attempts

Shows failed CRM authentication events from the last seven Riga calendar days, including the current Riga day.

Columns:

  • Occurred At (UTC): timestamp of the failed attempt, displayed in UTC
  • Account Identifier: normalized account value recorded by the failed-login logger
  • IP Address: source IP recorded with the event
  • Reason: safe failure description, not a password or credential

The default order is newest event first. Search performs a case-insensitive contains match across Reason, IP Address, and Account Identifier.

Daily Staff Activity

Groups audited changes by staff member and Riga calendar day for the same last seven Riga days.

Columns:

  • Riga Date
  • Staff
  • First Activity (UTC)
  • Last Activity (UTC)
  • Actions Count
  • Activity Span

One row represents one staff identity on one Riga day. The default order is the latest Riga Date first.

Staff Activity - Current Month

Groups audited changes by staff member from the start of the current Riga month through the current instant.

Columns:

  • Staff
  • First Activity (UTC)
  • Last Activity (UTC)
  • Actions Count
  • Active Riga Days
  • Activity Span

One row represents one staff identity for the whole current-month window. The default order is highest Actions Count first.

Today's Staff Activities

Shows individual, unaggregated audit records for the current Riga day.

Columns:

  • Occurred At (UTC)
  • Staff
  • Change Type
  • Entity Type
  • Entity ID
  • Description

The default order is newest event first. Empty Entity ID or Description values are shown with the table's blank placeholder.

Time and grouping rules

Calendar boundaries are calculated in Europe/Riga and then converted to UTC for database filtering:

  • Failed Login Attempts: seven complete Riga date buckets ending after today
  • Daily Staff Activity: the same seven Riga date buckets
  • Current Month: Riga month start through the current instant
  • Today's Staff Activities: Riga day start through the next Riga day start

The lower boundary is inclusive and the upper boundary is exclusive. Riga daylight-saving changes are handled when the boundaries are converted to UTC. Timestamp columns are still displayed in UTC, while Riga Date and Active Riga Days use Riga calendar dates.

Filters

Failed Login Attempts has one draft Search field. The other three widgets have independent draft fields:

  • Search
  • Change Type
  • Entity Type

For activity widgets, Search is a case-insensitive contains match across Staff, Change Type, Entity Type, Entity ID, and Description. Change Type and Entity Type are exact stored-value filters.

Editing a draft field does not reload data. Apply activates that widget's draft filters and returns it to page one. Reset clears that widget's drafts and active filters, then returns it to page one. Filters, pagination, sorting, loading, errors, and export state are isolated per widget.

Staff identity

Staff is resolved from the current staff record in this order:

  1. first and last name
  2. username
  3. email
  4. Admin plus the staff id

If the referenced staff record no longer exists, the value is Former/Unknown Staff plus the staff id. Because the audit query joins the current staff record, a later profile rename can change the name displayed for older audit rows; the historical staff id remains the grouping key.

Calculated values

  • Actions Count is the number of change-audit records in the row's group.
  • Activity Span is the whole number of minutes between the first and last record in the group, never below zero. A single-record group shows 0 min.
  • Active Riga Days is the number of distinct Riga calendar dates on which the staff member has at least one matching audited change in the current-month window.

Sorting and pagination

Selecting a different sortable column starts with descending order. Selecting the same column toggles between descending and ascending. Every sort change returns that widget to page one.

All Failed Login, Daily, and Current Month columns are sortable. In Today's Staff Activities, Entity ID and Description are not sortable.

The mounted page initially requests 200 rows per widget. The shared table offers 5, 10, 25, 50, 100, 500, 1,000, 5,000, and 10,000 as visible page-size choices, but the backend caps every page at 200 rows. Selecting a value above 200 can therefore make the browser's displayed page size and range disagree with the rows and offset returned by the backend. Use 200 or less for reliable pagination.

Refresh, retry, and export

Refresh re-runs only that widget with its currently active filters; it does not apply unsaved draft text. After an error, Retry performs the same widget-local revalidation.

Each Export CSV action sends that widget's active filters and sort and removes pagination from the backend query. It does not export unapplied draft values. Exports can therefore be much larger than one page and currently have no separate row cap. Avoid broad exports when the audit history is large.

Browser download names are:

  • staff-activity-failed-logins.csv
  • staff-activity-daily.csv
  • staff-activity-current-month.csv
  • staff-activity-today.csv

Only the export button for the running widget is disabled. Export requires the active admin access token. A failed export shows an error message and does not change audit data.

Empty, loading, and error states

Each widget loads independently. A widget can show loading rows, an error with Retry, or No results found while the other widgets remain usable. No-result state means that no source records matched that widget's fixed time window and active filters.

Known caveats

  • Staff Activity covers recorded failed CRM authentication and instrumented change-audit writes, not every staff interaction.
  • Historical rows display the currently resolved staff name when the staff record still exists.
  • Failed login Account Identifier may be absent when the authentication path could not safely record one.
  • Search is a broad contains match, while Change Type and Entity Type require exact stored values.
  • The shared page-size selector exposes values above the backend's 200-row cap.
  • CSV export bypasses pagination and has no explicit export row limit.
  • Refresh does not apply text still waiting in draft filters; use Apply first.
  • All endpoints are GET and do not mutate users, permissions, audit rows, or authentication records.
More details

Definitions and formulas

Open only the section you need. The relevant section opens automatically when you request help for a specific item on screen.

Calculations9 topicsOpen details

Failed CRM login event eligibility

The widget contains failed CRM authentication events only, not every failed website request or player login.

Transform
Keep user activity rows joined to activity code FAILED_ADMIN_AUTH where triggered_method is CRM_USER and created_at is inside the fixed time window.
Caveats
Account Identifier, IP Address, or Reason can be empty when the logger did not record a safe value.

Last 7 Riga days

Failed Login Attempts and Daily Staff Activity include the current Riga date plus the six preceding Riga dates.

Transform
Set end to the start of the next Europe/Riga day and start to end minus seven calendar days; convert both boundaries to UTC ISO timestamps.
Timezone Basis
Europe/Riga with inclusive UTC start and exclusive UTC end.

Current Riga month

Current Month is month-to-now, not a complete future month or rolling 30-day window.

Transform
Start at the first instant of the current Europe/Riga month and end at the current instant, then convert both values to UTC ISO timestamps.
Timezone Basis
Europe/Riga month boundary; current-instant exclusive upper comparison.

Riga today

Today's Staff Activities follows Riga calendar today even though timestamps are displayed in UTC.

Transform
Start at the first instant of the current Europe/Riga day and end at the first instant of the next Riga day; convert both to UTC ISO timestamps.
Timezone Basis
Europe/Riga with inclusive UTC start and exclusive UTC end.

Staff identity

Provides a readable current identity while preserving a fallback for deleted staff records.

Transform
Left join the current staff row by changed_by_id; use trimmed first plus last name, then username, then email, then Admin plus id; use Former/Unknown Staff plus id when the staff row is missing.
Caveats
A current profile rename can change the name shown for historical audit rows., changed_by_id remains the grouping key even when two people have the same display name.

Activity search and exact filters

Search is exploratory, while the two named type filters require the stored source value.

Transform
Apply Search as a case-insensitive contains expression over staff identity, change type, entity type, entity id, and description; apply Change Type and Entity Type with exact equality.

Staff Activity pagination

The backend never returns more than 200 rows per page even when the shared browser table offers a larger size.

Transform
Normalize invalid page numbers to 1; normalize a missing or invalid limit to 25; cap a positive requested limit at 200; compute offset as (pageNo - 1) times the normalized limit.
Caveats
The mounted page normally sends 200, so the backend's missing-limit fallback of 25 is not the initial visible page size., Browser selections above 200 can display a range based on the requested value while the backend offsets by 200.

Staff Activity sorting

Sorting is backend-driven and isolated per widget.

Transform
Accept only each widget's allowlisted sort key; use ASC only when explicitly requested and otherwise DESC; a new browser sort column starts DESC and the same column toggles.
Caveats
Today's Entity ID and Description are not in the sort allowlist.

CSV export scope

Export contains all matching rows rather than the visible page.

Transform
Reuse the widget's active filters, fixed time window, and sort; omit LIMIT and OFFSET when forExport is true.
Caveats
There is no explicit export row cap., Unapplied draft filter text is not sent.
Fields28 topicsOpen details

Search

Draft case-insensitive contains search across failed-login Reason, IP Address, and Account Identifier.

Widget
failed-login-attempts
Group
filters
Data Type
string
Editable
true
Caveats
It changes the request only after Apply.

Search

Draft case-insensitive contains search across Staff, Change Type, Entity Type, Entity ID, and Description for the selected activity widget.

Widget
daily-current-month-today
Group
filters
Data Type
string
Editable
true
Caveats
Each widget keeps its own draft and active value., It changes the request only after Apply.

Change Type

Draft exact filter on the stored change-audit type for one activity widget.

Widget
daily-current-month-today
Group
filters
Data Type
string
Editable
true
Caveats
This is exact matching, unlike the broad Search field., It changes the request only after Apply.

Entity Type

Draft exact filter on the stored entity category for one activity widget.

Widget
daily-current-month-today
Group
filters
Data Type
string
Editable
true
Caveats
This is exact matching, unlike the broad Search field., It changes the request only after Apply.

Page

One-based backend page number maintained independently for each widget.

Widget
all
Group
pagination
Data Type
integer
Editable
true
Default
1

Rows per page

Requested browser page size for one widget.

Widget
all
Group
pagination
Data Type
integer
Editable
true
Default
200
Allowed Values
5, 10, 25, 50, 100, 500, 1000, 5000, 10000
Caveats
The backend returns at most 200 rows even when the browser offers and sends a larger value., Values above 200 can make the displayed range disagree with the backend page offset.

Occurred At (UTC)

UTC display timestamp for the failed CRM authentication event.

Widget
failed-login-attempts
Group
table
Data Type
datetime
Editable
false
Sortable
true

Account Identifier

Safe normalized account value recorded by the failed CRM login logger.

Widget
failed-login-attempts
Group
table
Data Type
string
Editable
false
Sortable
true
Caveats
It can be empty when no identifier was safely available., It is not a password or credential.

IP Address

Source IP value recorded with the failed login event.

Widget
failed-login-attempts
Group
table
Data Type
string
Editable
false
Sortable
true
Caveats
It can be empty when the request path did not provide an IP.

Reason

Safe failure explanation recorded for the authentication attempt.

Widget
failed-login-attempts
Group
table
Data Type
string
Editable
false
Sortable
true

Riga Date

Riga calendar day used to group the staff member's audited changes.

Widget
daily-staff-activity
Group
table
Data Type
date
Editable
false
Sortable
true

Staff

Current resolved display identity for the staff id that produced the grouped audit rows.

Widget
daily-staff-activity
Group
table
Data Type
string
Editable
false
Sortable
true
Caveats
A later profile rename can change the identity displayed for historical rows., A missing staff record is shown as Former/Unknown Staff plus its id.

First Activity (UTC)

Earliest matching audited change for the staff member on that Riga date, displayed in UTC.

Widget
daily-staff-activity
Group
table
Data Type
datetime
Editable
false
Sortable
true

Last Activity (UTC)

Latest matching audited change for the staff member on that Riga date, displayed in UTC.

Widget
daily-staff-activity
Group
table
Data Type
datetime
Editable
false
Sortable
true

Actions Count

Number of matching change-audit records for that staff member and Riga date.

Widget
daily-staff-activity
Group
table
Data Type
integer
Editable
false
Sortable
true
Caveats
It counts audited change records, not all clicks or page views.

Activity Span

Whole minutes from the first to last matching audit record for that staff member and Riga date.

Widget
daily-staff-activity
Group
table
Data Type
duration
Editable
false
Sortable
true
Caveats
A single-record group shows 0 min.

Staff

Current resolved display identity for the staff id grouped across the current Riga month.

Widget
current-month
Group
table
Data Type
string
Editable
false
Sortable
true
Caveats
A later profile rename can change the identity displayed for historical rows.

First Activity (UTC)

Earliest matching audited change for the staff member since the current Riga month began, displayed in UTC.

Widget
current-month
Group
table
Data Type
datetime
Editable
false
Sortable
true

Last Activity (UTC)

Latest matching audited change for the staff member in the current-month window, displayed in UTC.

Widget
current-month
Group
table
Data Type
datetime
Editable
false
Sortable
true

Actions Count

Number of matching change-audit records for that staff member in the current-month window.

Widget
current-month
Group
table
Data Type
integer
Editable
false
Sortable
true
Caveats
It counts audited change records, not all clicks or page views.

Active Riga Days

Distinct Riga calendar dates with at least one matching audited change for the staff member.

Widget
current-month
Group
table
Data Type
integer
Editable
false
Sortable
true

Activity Span

Whole minutes between the staff member's first and last matching audit record in the current-month window.

Widget
current-month
Group
table
Data Type
duration
Editable
false
Sortable
true
Caveats
It is elapsed span, not summed working time., A single-record group shows 0 min.

Occurred At (UTC)

UTC display timestamp for the individual audited change.

Widget
today
Group
table
Data Type
datetime
Editable
false
Sortable
true

Staff

Current resolved display identity for the staff id that produced the audit record.

Widget
today
Group
table
Data Type
string
Editable
false
Sortable
true

Change Type

Stored category describing the kind of audited change.

Widget
today
Group
table
Data Type
string
Editable
false
Sortable
true

Entity Type

Stored category of the business entity affected by the audited change.

Widget
today
Group
table
Data Type
string
Editable
false
Sortable
true

Entity ID

Source entity identifier recorded with the audited change.

Widget
today
Group
table
Data Type
string
Editable
false
Sortable
false
Caveats
It can be empty when the originating audit event did not provide an entity id.

Description

Human-readable description recorded by the originating audited workflow.

Widget
today
Group
table
Data Type
string
Editable
false
Sortable
false
Caveats
Completeness and wording depend on the workflow that created the audit record., It can be empty.
Metrics6 topicsOpen details

Failed Login Attempts

Total matching failed CRM authentication events used by the Failed Login Attempts table pagination.

Aliases
failed admin login count, CRM authentication failures
Metric Kind
count
Formula
COUNT(*) over FAILED_ADMIN_AUTH user activity rows triggered by CRM_USER inside the last-seven-Riga-days window and active failed-login filters.
Timezone Basis
Europe/Riga calendar boundaries converted to inclusive UTC start and exclusive UTC end.

Actions Count

Number of matching change-audit records for one staff id on one Riga calendar date.

Aliases
daily audited actions, staff daily changes
Metric Kind
count
Formula
COUNT(*) grouped by changed_by_id, resolved staff identity, and Europe/Riga date.
Timezone Basis
change_timestamp is converted to Europe/Riga before deriving the group date.
Caveats
Counts instrumented change-audit rows, not all staff clicks, views, or read-only actions.

Actions Count

Number of matching change-audit records for one staff id from current Riga month start through the current instant.

Aliases
monthly audited actions, staff month changes
Metric Kind
count
Formula
COUNT(*) grouped by changed_by_id and resolved staff identity inside the current-month Riga window.
Timezone Basis
Europe/Riga month start converted to UTC; upper boundary is the current instant.
Caveats
Counts instrumented change-audit rows, not all staff clicks, views, or read-only actions.

Active Riga Days

Number of Riga calendar dates in the current-month window on which the staff id has at least one matching audited change.

Aliases
staff active days, monthly audit days
Metric Kind
distinct_count
Formula
COUNT(DISTINCT (change_timestamp AT TIME ZONE Europe/Riga)::date) grouped by staff id.
Timezone Basis
Europe/Riga calendar date.
Caveats
An active day means at least one matching audit row; it is not a working-hours or attendance measure.

Activity Span

Whole elapsed minutes between the first and last matching audited change for one staff id and Riga date.

Aliases
daily first to last action, daily elapsed audit minutes
Metric Kind
duration
Formula
GREATEST(FLOOR(EXTRACT(EPOCH FROM (MAX(change_timestamp) - MIN(change_timestamp))) / 60), 0).
Rounding
Floors elapsed seconds to a whole minute and formats the result with min.
Caveats
A single-record group returns 0 min., This is an elapsed span, not accumulated active working time.

Activity Span

Whole elapsed minutes between the first and last matching audited change for one staff id in the current-month window.

Aliases
monthly first to last action, monthly elapsed audit minutes
Metric Kind
duration
Formula
GREATEST(FLOOR(EXTRACT(EPOCH FROM (MAX(change_timestamp) - MIN(change_timestamp))) / 60), 0).
Rounding
Floors elapsed seconds to a whole minute and formats the result with min.
Caveats
A single-record group returns 0 min., The span includes gaps between audited actions and is not accumulated working time.
More help

Related pages

Activity Tag Rules / Applications

Read-only recent recorded application rows inside rule detail, including user ID, tag outcome, timestamp, and captured activity payload.

Affiliate Deals / Dashboard

Affiliate deal cohort report that period-bounds registrations, then combines the selected players with cumulative deposit and linked-event values.

Affiliates / Affiliate Deals

Operator guide for affiliate-deal records, their create/edit flow, and the performance dashboard that compares contract settings with delivered traffic and revenue metrics.

Backoffice / Staff

Operator documentation for backoffice administrator accounts, including list, create or edit, read-only inspection, and permission review.

MKT Groups

Operator guide to grouping raw marketing tracking tags into stable reporting groups by explicit membership and automatic text rules.

Reporting

Canonical entrypoint for standalone reporting pages outside the main Dashboard widgets.