> ## Documentation Index
> Fetch the complete documentation index at: https://docs.molesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RUM frustration

> See which elements people click again and again, click on nothing, or click into an error, in how many sessions, and replay the newest of those sessions from just before the click.

**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](https://docs.molesignal.com/en-US/rum/events.md).

| Sign | A browser | An app | What it is |
| - | - | - | - |
| **Rage clicks** | `rage_click` | `rage_tap` | Clicks, or taps, again and again on one place in a short time. |
| **Dead clicks** | `dead_click` | — | A click that changed nothing on the page. The Flutter SDK does not read it. |
| **Error clicks** | `error_click` | `error_tap` | A click, or a tap, that was followed by an error. |

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](https://docs.molesignal.com/en-US/rum/explorer.md#open-a-session) 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`](https://docs.molesignal.com/en-US/api/rum#measure-rows): 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](https://docs.molesignal.com/en-US/rum#permissions).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.