Eric Allam
1a0198cc5e
perf(webapp,clickhouse): move runs empty-state check to ClickHouse ( #4202 )
...
## Summary
The runs page's empty-state check (whether an environment has ever had a
run, which decides between the "getting started" and "no runs match your
filters" states) ran a `findFirst` against the Postgres `TaskRun` table.
This moves it to ClickHouse, the same store the runs list itself reads
from, so the check no longer queries `TaskRun`.
## Design
Only the runs list triggers the check now (via an `includeHasAnyRuns`
flag); the other presenters that reuse `NextRunListPresenter` (API,
schedule detail, waitpoint detail, error group) no longer issue it. When
the list is empty it runs `SELECT 1 FROM task_runs_v2 ... LIMIT 1`
filtered on the full `(organization_id, project_id, environment_id)`
sort-key prefix with a configurable `created_at` lower bound
(`RUN_LIST_HAS_RUNS_LOOKBACK_DAYS`, default 30), so it hits the primary
index and reads minimal granules.
Results are cached in a tiered memory + Redis SWR cache. Only positive
("has runs") results are cached, so an environment with no runs is
always re-checked and its first run shows up immediately.
2026-07-09 15:24:31 +01:00
..
2026-05-22 15:10:41 +01:00
2026-07-02 11:37:05 +01:00
2025-10-13 14:15:48 +02:00
2026-06-18 12:54:46 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-29 16:48:50 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-17 13:32:31 +00:00
2026-07-09 11:58:33 +00:00
2026-01-27 17:13:21 +00:00
2026-06-26 09:01:37 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-06-15 12:10:50 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-09 11:58:33 +00:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-09 11:58:33 +00:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 13:18:08 -04:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-17 13:32:31 +00:00
2026-07-09 15:24:31 +01:00
2026-07-08 15:11:40 +02:00
2026-01-16 15:20:30 +00:00
2026-06-15 12:10:50 +01:00
2026-06-30 16:51:15 +02:00
2026-06-15 12:10:50 +01:00
2026-07-02 11:37:05 +01:00
2026-05-14 13:12:36 +01:00
2026-06-16 15:28:37 +01:00
2026-07-08 15:11:40 +02:00
2026-06-26 13:02:53 +01:00
2026-06-30 16:51:15 +02:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-03 21:10:42 +01:00
2026-07-08 15:11:40 +02:00
2026-06-19 09:40:20 +01:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-06-26 17:12:53 +02:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-09 12:09:45 +01:00
2026-07-09 11:58:33 +00:00
2026-06-26 17:12:53 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-09 12:09:45 +01:00
2026-07-09 12:09:45 +01:00
2026-07-09 11:58:33 +00:00
2026-07-09 12:09:45 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-05-04 15:02:26 +01:00
2026-06-26 13:02:53 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-26 18:05:26 +00:00
2025-07-14 15:50:01 +01:00
2026-07-08 15:11:40 +02:00
2026-06-26 17:12:53 +02:00
2026-07-08 15:11:40 +02:00
2025-03-08 14:53:06 +00:00
2025-03-08 14:53:06 +00:00
2026-07-08 15:11:40 +02:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2025-03-08 14:53:06 +00:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-08 14:53:06 +00:00
2026-07-02 11:37:05 +01:00
2025-07-21 17:53:43 +01:00
2026-01-21 13:07:07 +00:00
2026-07-02 11:37:05 +01:00
2025-04-30 11:11:42 +01:00
2025-03-08 14:53:06 +00:00
2026-07-08 15:11:40 +02:00
2025-11-19 11:22:23 +00:00
2026-07-08 15:11:40 +02:00
2025-07-08 13:44:47 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2025-03-08 14:53:06 +00:00
2026-07-08 15:11:40 +02:00
2026-07-09 11:58:33 +00:00
2026-03-31 19:06:54 +01:00
2026-03-31 19:06:54 +01:00
2026-02-26 16:56:07 +00:00
2026-02-26 16:56:07 +00:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2026-05-12 17:16:20 +01:00
2026-07-03 18:02:22 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-03 18:02:22 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-04-16 13:46:53 +01:00
2026-04-16 13:46:53 +01:00
2026-04-16 13:46:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 17:12:53 +02:00
2026-06-26 17:12:53 +02:00
2026-06-26 17:12:53 +02:00
2026-07-03 18:02:22 +01:00
2026-04-16 13:46:53 +01:00
2026-07-03 18:02:22 +01:00
2026-07-03 18:02:22 +01:00
2026-05-04 15:02:26 +01:00
2026-07-02 11:37:05 +01:00
2026-05-08 16:25:53 +01:00
2026-07-02 11:37:05 +01:00
2026-04-16 13:46:53 +01:00
2026-04-16 13:46:53 +01:00
2026-07-03 20:01:56 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-04 15:02:05 +00:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2025-07-24 15:09:50 +01:00
2026-04-16 13:46:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-03 18:02:22 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-08 15:11:40 +02:00
2026-06-26 13:02:53 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-07-08 15:11:40 +02:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-05-19 09:32:35 +01:00
2026-05-19 09:32:35 +01:00
2026-05-19 09:32:35 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-07 15:43:30 +01:00
2026-07-07 15:43:30 +01:00
2026-07-07 15:43:30 +01:00
2026-07-02 11:37:05 +01:00
2026-05-19 09:32:35 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-05-19 09:32:35 +01:00
2026-05-19 09:32:35 +01:00
2026-07-02 11:37:05 +01:00
2026-05-14 13:12:36 +01:00
2026-07-02 11:37:05 +01:00
2026-05-12 17:16:20 +01:00
2026-06-21 09:29:13 +01:00
2026-06-21 09:29:13 +01:00
2026-06-21 09:29:13 +01:00
2026-06-21 09:29:13 +01:00
2026-06-21 09:29:13 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-05 10:28:08 +02:00
2026-06-26 13:02:53 +01:00
2026-03-26 14:19:17 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-18 12:54:46 +01:00
2026-07-02 11:37:05 +01:00
2026-07-09 11:58:33 +00:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-05-19 09:32:35 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2025-05-28 11:02:56 +01:00
2026-05-12 17:16:20 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-05-12 17:16:20 +01:00
2026-07-09 11:58:33 +00:00
2026-05-12 17:16:20 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-05-12 17:16:20 +01:00
2026-05-12 17:16:20 +01:00
2026-07-09 11:58:33 +00:00
2025-10-17 12:58:25 +01:00
2025-10-17 12:58:25 +01:00
2025-03-19 14:59:37 +00:00
2025-03-19 11:18:19 +00:00
2026-06-14 00:19:19 +02:00
2025-10-30 18:09:54 +01:00
2026-07-05 10:05:54 +01:00
2026-07-05 10:05:54 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-30 13:35:31 +02:00
2026-05-08 16:25:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-05 22:39:40 +00:00
2026-07-02 11:37:05 +01:00
2026-05-08 16:25:53 +01:00
2026-05-08 16:25:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-05-19 09:32:35 +01:00
2026-07-03 21:10:42 +01:00
2026-07-02 11:37:05 +01:00
2026-06-05 10:28:08 +02:00
2026-06-04 09:36:34 +00:00
2026-07-03 21:10:42 +01:00
2025-08-27 13:23:45 +02:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-06-19 09:40:20 +01:00
2025-12-09 09:51:42 +00:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-19 09:40:20 +01:00
2026-06-19 09:40:20 +01:00
2026-07-08 15:11:40 +02:00
2026-02-20 13:16:34 +00:00
2025-10-22 10:55:05 +01:00
2025-06-04 17:18:46 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2025-10-01 12:41:18 -07:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-05 10:05:54 +01:00
2026-07-03 21:10:42 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2025-10-01 12:41:18 -07:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-07 11:51:59 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-09 12:08:20 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2025-09-25 19:17:19 +02:00
2026-07-06 09:31:14 +02:00
2026-06-30 16:51:15 +02:00
2026-07-08 15:11:40 +02:00
2026-06-19 09:40:20 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 09:01:37 +01:00
2026-06-26 09:01:37 +01:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2026-06-26 09:01:37 +01:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 11:35:04 +01:00
2026-07-02 11:37:05 +01:00
2025-08-20 16:04:50 +01:00
2026-07-02 11:37:05 +01:00
2025-04-14 14:43:52 +01:00
2026-07-02 11:37:05 +01:00
2026-07-03 21:10:42 +01:00
2025-03-17 13:32:31 +00:00
2026-07-02 11:37:05 +01:00
2025-08-20 16:04:50 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-06-26 13:02:53 +01:00
2026-05-14 13:12:36 +01:00
2026-06-26 13:02:53 +01:00
2026-07-03 21:10:42 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-22 10:02:57 +01:00
2026-06-18 12:54:46 +01:00
2026-07-02 11:37:05 +01:00
2026-06-30 16:51:15 +02:00
2026-06-30 16:51:15 +02:00
2026-06-30 16:51:15 +02:00
2026-07-09 11:58:33 +00:00
2026-07-02 11:37:05 +01:00
2026-06-30 16:51:15 +02:00
2025-10-15 12:56:08 +01:00
2026-06-18 12:54:46 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-06-24 19:04:28 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-07-02 11:37:05 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 09:01:37 +01:00
2026-06-26 13:02:53 +01:00
2026-06-02 10:46:34 +01:00
2026-07-09 11:58:33 +00:00
2026-06-14 00:19:19 +02:00
2026-07-03 21:10:42 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-22 10:02:57 +01:00
2026-04-16 15:22:19 +01:00
2026-07-08 15:11:40 +02:00
2026-06-02 19:26:46 +02:00
2026-06-26 13:02:53 +01:00
2026-05-14 16:45:53 +01:00
2026-06-02 10:46:34 +01:00
2026-07-08 15:11:40 +02:00
2025-07-21 16:21:46 +01:00
2026-07-03 21:10:42 +01:00
2026-07-08 15:11:40 +02:00
2026-06-30 16:51:15 +02:00
2026-07-08 15:11:40 +02:00
2026-07-02 11:37:05 +01:00
2026-05-19 09:32:35 +01:00
2026-03-26 14:19:17 +01:00
2026-03-26 14:19:17 +01:00
2026-03-26 14:19:17 +01:00
2026-04-13 12:26:15 +02:00
2026-06-26 13:02:53 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-06-30 16:51:15 +02:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-02 15:04:09 +00:00
2026-07-03 21:10:42 +01:00
2026-07-03 21:10:42 +01:00
2026-07-02 11:37:05 +01:00
2026-07-02 11:37:05 +01:00
2026-07-08 15:11:40 +02:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-26 13:02:53 +01:00
2026-06-18 12:54:46 +01:00
2026-07-08 15:11:40 +02:00
2026-06-19 09:40:20 +01:00