iachat/lib/tasks
Shivam Mishra 9967101b48
feat(rollup): add models and write path [1/3] (#13796)
## PR#1: Reporting events rollup — model and write path

Reporting queries currently hit the `reporting_events` table directly.
This works, but the table grows linearly with event volume, and
aggregation queries (counts, averages over date ranges) get
progressively slower as accounts age.

This PR introduces a pre-aggregated `reporting_events_rollups` table
that stores daily per-metric, per-dimension (account/agent/inbox)
totals. The write path is intentionally decoupled from the read path —
rollup rows are written inline from the event listener via upsert, and a
backfill service exists to rebuild historical data from raw events.
Nothing reads from this table yet.

The write path activates when an account has a `reporting_timezone` set
(new account setting). The `reporting_events_rollup` feature flag
controls only the future read path, not writes — so rollup data
accumulates silently once timezone is configured. A `MetricRegistry`
maps raw event names to rollup column semantics in one place, keeping
the write and (future) read paths aligned.

### What changed

- Migration for `reporting_events_rollups` with a unique composite index
for upsert
- `ReportingEventsRollup` model
- `reporting_timezone` account setting with IANA timezone validation
- `MetricRegistry` — single source of truth for event-to-metric mappings
- `RollupService` — real-time upsert from event listener
- `BackfillService` — rebuilds rollups for a given account + date from
raw events
- Rake tasks for interactive backfill and timezone setup
- `reporting_events_rollup` feature flag (disabled by default)

### How to test

1. Set a `reporting_timezone` on an account
(`Account.first.update!(reporting_timezone: 'Asia/Kolkata')`)
2. Resolve a conversation or trigger a first response
3. Check `ReportingEventsRollup.where(account_id: ...)` — rows should
appear
4. Run backfill: `bundle exec rake reporting_events_rollup:backfill` and
verify historical data populates

---------

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
2026-03-19 13:12:36 +05:30
..
dev feat: Add development variant toggle rake task (#11696) 2025-06-10 09:47:59 -04:00
ops feat: add cron job to remove orphan conversations (#13335) 2026-01-28 19:25:20 +05:30
.keep Initial Commit 2019-08-14 15:18:44 +05:30
apply_sla.rake fix: Prevent SLA deletion timeouts by moving to async job (#12944) 2025-12-10 12:28:47 +05:30
asset_clean.rake chore: Upgrade Tailwind CSS to 3.3.2 (#7380) 2023-06-26 11:27:16 -07:00
assignment_v2_migration.rake chore(tds-1): rake task for assignment v2 migration (#13828) 2026-03-17 20:35:03 +05:30
auto_annotate_models.rake feat: Standardize rich editor across all channels (#12600) 2025-12-08 14:43:45 +05:30
build.rake feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
bulk_conversations.rake fix: Prevent SLA deletion timeouts by moving to async job (#12944) 2025-12-10 12:28:47 +05:30
captain_chat.rake feat(ee): Captain custom http tools (#12584) 2025-10-06 07:53:15 -07:00
db_enhancements.rake fix: use supported access method for schema_format in Rails 7 (#11576) 2025-05-27 15:34:59 -06:00
download_report.rake feat: add report download task (#13250) 2026-01-19 18:31:52 +05:30
generate_test_data.rake chore: Generate test data for bulk insertion (#11229) 2025-05-06 11:13:11 +05:30
instance_id.rake feat: Report cwctl events to hub (#8009) 2023-10-10 09:16:03 +05:30
ip_lookup.rake fix: ip-lookup database lazy loading for all environments (#8052) 2024-10-22 23:18:30 -07:00
mfa.rake fix: Session controller to not generate auth tokens before mfa verification (#12487) 2025-09-23 19:13:47 +05:30
reporting_events_rollup_timezone_setup.rake feat(rollup): add models and write path [1/3] (#13796) 2026-03-19 13:12:36 +05:30
reporting_events_rollup.rake feat(rollup): add models and write path [1/3] (#13796) 2026-03-19 13:12:36 +05:30
search_test_data.rake feat: Advanced Search Backend (#12917) 2026-01-07 15:30:49 +05:30
seed_reports_data.rake feat: label reports overview (#11194) 2025-06-11 14:35:46 +05:30
sidekiq_tasks.rake feat: Add rake task to clear ActionCable jobs (#9307) 2024-04-30 08:03:40 -07:00
swagger.rake feat: Update swagger to openapi 3.0.4, update request payloads with examples (#11533) 2025-05-22 17:57:12 +07:00