Skip to main content
RUM → Frustration tells what frustrates the people who use an application. It is of one application at a time, in one environment or in all of them, over the time range in view. It works for browser applications and for apps: a browser has rage clicks, dead clicks, and error clicks, and an app has rage taps and error taps.

The signs

The SDK reads a sign where the person is and puts it on the action as action.frustration.type, a list of words. MoleSignal does not judge an action again, so a sign is what the SDK saw. See the event format. An action can show more than one sign. The word of a sign begins with the name of its kind, so a count of a kind is a count of the actions whose list has a word that begins so.

What the page says first

One sentence says what share of the sessions showed a sign, and for each sign that occurred how many actions showed it and in how many sessions. The share counts the sessions whose session.frustration.count is above zero, over all the sessions of the application. A person who clicks ten times is one session, which is why the sessions are the figure the table is ordered by. A range in which no action showed a sign says so, and offers to expand the time range.

Elements, pages, versions, and browsers

The table lists groups of the actions that showed a sign, the group that touched the most sessions first. A group has one number of actions for each sign, with a dash where there were none, and the number of sessions it touched.
  • By chooses what a group is. Element (the default) is told by its text and its selector. An element that has no text, such as a banner that is clicked on, is (no name) and keeps its selector beside the words. The other choices are the page (the screen, in an app), the version, and the browser (the system, in an app).
  • Sign narrows the table to the actions that showed one sign. The columns of the other signs then count only the actions that showed this one as well.
  • The search narrows the table to the actions whose element or page has the words.
  • The table reads the 100 groups that touched the most sessions, and ordering a column orders those. Click a heading to order by it, and click it again to reverse the order.
The choices, the order, and the open group are in the address, so a view can be shared.

What a group is made of

Click a row to open a panel at its right.
  • The first line says how many sessions met a sign on the group. When most of them were on one page, it names the page.
  • Sessions touched is a chart of the sessions the signs touched in each stretch of the time range.
  • Signs divides the actions of the group among the signs.
  • Versions and Pages (Screens in an app) list where the signs happened, with the share of the sessions of the group. The list of the grouping the table is of is left out.
  • The newest sessions lists the three most recent sessions that met a sign on the group, each with the time, the person, the signs it showed, and whether one ended in an error. Replay opens the session at five seconds before its first sign. A session that recorded no replay has Session instead, which opens the session page without a moment.
The panel is narrowed in the same way as the table: by the sign and by the words.

The session page

Replay opens the session page with the replay held at the moment, until it is played. The moment is in the address (at, in microseconds since the epoch), so a link to it can be shared. The replay opens at the beginning when the address names no moment, and at its end when the moment lies after it.

How the numbers are counted

The sentence, the table, and the panel are counted over the matching rows of rum_actions by /api/v1/rum/aggregate: the actions with action.frustration.count above zero, narrowed by a word of action.frustration.type. The sessions are counted by session.id, once however many actions touched them. The share of sessions is counted over rum_sessions. A card whose counting takes longer than the time budget says so, and the others stay: narrow the time range and read it again. The newest sessions are read with the search of the explorer, newest first. The page needs the permission that reads the rest of RUM, streams.query. See RUM.
Last modified on October 26, 2026