Four clocks

A page reports four clocks. The page writes three of them. The server writes one.

   wall, perf, timestamp  -->  written by the page   -->  claims
   srv                    -->  written by the server -->  fact

The pipeline orders every record on srv. It treats the other clocks as claims, and checks them.

Every number on this page is the result of a query. The query sits above its result.

Every number on this page is the result of a query. The queries are hidden in this view. Switch to Engineering, top right, to read them.

1. Do the clocks agree?

srv minus wall, over every clean record, split by the origin that served the page.

SELECT origin_kind           AS origin,
       records::INTEGER      AS records,
       skew_min_ms::INTEGER  AS min_ms,
       skew_mean_ms          AS mean_ms,
       skew_max_ms::INTEGER  AS max_ms
FROM clock_skew
ORDER BY origin

A browser on the same machine as the recorder has almost nothing to disagree about. A browser reaching a server over the internet carries the trip in its skew. Reporting one number over both would describe neither, so the pipeline splits them and the page prints what it is given.

2. Gaps between arrivals

A beat arrives every second. The pipeline reports every gap longer than three seconds, measured on srv so the page cannot hide it.

SELECT session_id,
       page_load_seq::INTEGER      AS page_load,
       gap_s,
       prev_vis || ' -> ' || vis   AS visibility
FROM srv_gaps
ORDER BY gap_s

The pipeline explains each gap from vis alone.

SELECT * FROM gap_explained

A gap with the tab visible on both sides has no throttling explanation. The pipeline labels it and keeps it visible, rather than dropping it.

3. Time to detection

Every error and every alarm, in arrival order, with the seconds since the previous incident in the same session.

SELECT session_id,
       page_load_seq::INTEGER                                         AS page_load,
       strftime(occurred_at::TIMESTAMP, '%Y-%m-%d %H:%M:%S.%g')       AS occurred_at_utc,
       event,
       detail,
       s_since_previous
FROM incident_timeline
ORDER BY session_id, occurred_at

Read s_since_previous on an alarm row that follows an error row. That is the time the recorder took to notice a dead loop.