[P2] Data export (CSV/JSON) #107

Open
opened 2026-04-01 22:53:33 +02:00 by claude · 1 comment
Owner

Parent Epic

#100

Problem

No way to export exchange data, metrics, or audit logs. Enterprise buyers expect export for compliance reporting, offline analysis, and integration with external tools.

Proposed Solution

Add an export button to each data table and chart:

Recent Exchanges (50 of 2,096)    [↓ Export ▾]
                                   ├ CSV (current page)
                                   ├ CSV (all matching)
                                   ├ JSON (current page)
                                   └ JSON (all matching)

Pages that need export:

Page Data Format
Exchanges table Exchange list with all columns CSV, JSON
Dashboard metrics KPI values + timeseries data CSV, JSON
Processor metrics Per-processor stats table CSV
Audit log Audit events CSV, JSON
Runtime agents Agent list + status CSV
ClickHouse tables Table stats CSV

Implementation

  • "Current page" exports client-side from table data (instant)
  • "All matching" calls a backend endpoint with Accept: text/csv or application/json
  • Backend streams results to avoid memory issues for large exports
  • Filename: cameleer-exchanges-2026-04-01T22-31.csv
  • Respect current filters (time range, status, app scope)

Acceptance Criteria

  • Export button on exchanges, audit log, and dashboard tables
  • CSV and JSON format options
  • Current page (client) and all matching (server) options
  • Export respects active filters
  • Reasonable file naming with timestamp
## Parent Epic #100 ## Problem No way to export exchange data, metrics, or audit logs. Enterprise buyers expect export for compliance reporting, offline analysis, and integration with external tools. ## Proposed Solution Add an export button to each data table and chart: ``` Recent Exchanges (50 of 2,096) [↓ Export ▾] ├ CSV (current page) ├ CSV (all matching) ├ JSON (current page) └ JSON (all matching) ``` ### Pages that need export: | Page | Data | Format | |------|------|--------| | Exchanges table | Exchange list with all columns | CSV, JSON | | Dashboard metrics | KPI values + timeseries data | CSV, JSON | | Processor metrics | Per-processor stats table | CSV | | Audit log | Audit events | CSV, JSON | | Runtime agents | Agent list + status | CSV | | ClickHouse tables | Table stats | CSV | ### Implementation - "Current page" exports client-side from table data (instant) - "All matching" calls a backend endpoint with `Accept: text/csv` or `application/json` - Backend streams results to avoid memory issues for large exports - Filename: `cameleer-exchanges-2026-04-01T22-31.csv` - Respect current filters (time range, status, app scope) ## Acceptance Criteria - [ ] Export button on exchanges, audit log, and dashboard tables - [ ] CSV and JSON format options - [ ] Current page (client) and all matching (server) options - [ ] Export respects active filters - [ ] Reasonable file naming with timestamp
claude added the featureux labels 2026-04-01 22:53:33 +02:00
Author
Owner

Design Specification

Export button in table header, right-aligned: [↓ Export ▾] dropdown with CSV (page), CSV (all), JSON (page), JSON (all).

Client-side (current page): Convert table data to CSV/JSON blob, trigger download. CSV escaping per RFC 4180.

Server-side (all matching): New backend support via Accept: text/csv header or ?format=csv param. StreamingResponseBody for memory efficiency.

File naming: cameleer-{context}-{YYYY-MM-DD}.{ext}. Pages: Exchanges, Audit Log, Processor Metrics, Runtime Agents, ClickHouse Tables.

Shared ExportButton component with props: rows, columns, context, optional buildExportUrl.

## Design Specification Export button in table header, right-aligned: `[↓ Export ▾]` dropdown with CSV (page), CSV (all), JSON (page), JSON (all). **Client-side** (current page): Convert table data to CSV/JSON blob, trigger download. CSV escaping per RFC 4180. **Server-side** (all matching): New backend support via `Accept: text/csv` header or `?format=csv` param. `StreamingResponseBody` for memory efficiency. File naming: `cameleer-{context}-{YYYY-MM-DD}.{ext}`. Pages: Exchanges, Audit Log, Processor Metrics, Runtime Agents, ClickHouse Tables. Shared `ExportButton` component with props: `rows`, `columns`, `context`, optional `buildExportUrl`.
Sign in to join this conversation.