EventStats: compiled queries endpoint for server-side aggregations
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par résoudre la dépendance #115 et par examiner le flux existant des routes et des handlers de EventStats dans event_stats_lambda.py, en particulier ROUTE_HANDLERS, ainsi que PR #113. Confirmez avec les parties prenantes l’ensemble de requêtes pris en charge et les contrats des paramètres/de sortie avant de concevoir le registre. La finalisation nécessite des tests unitaires pour le routing, le registry-lookup et le result-shaping, un test d’intégration de testcontainer avec des données initiales, ainsi qu’une exécution réussie de ./ci_local.sh.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Feature Description
Extend the EventStats Lambda with a compiled queries endpoint — a curated list of predefined, server-executed queries (e.g. "failed jobs in the last 7 days", "job count aggregated by catalog") that consumers can invoke by name. Rather than pushing aggregation logic into the client or BI tool, the heavy lifting runs inside PostgreSQL and only the final result set is returned over the wire.
Problem / Opportunity
The current POST /stats/{topic_name} endpoint returns raw paginated rows. Consumers (dashboards, reports, downstream tools) re-derive the same aggregations repeatedly on the client side — wasting bandwidth, duplicating logic, and making results inconsistent across consumers. Predefined server-side queries centralise that logic, reduce payload sizes significantly, and allow PostgreSQL query planning to optimise repeated patterns.
Acceptance Criteria
- A new route (e.g.
POST /stats/{topic_name}/query/{query_name}) accepts a query identifier and an optional parameter bag (e.g. time window, tenant filter). - A
SUPPORTED_QUERIESregistry maps eachquery_nameto its SQL template and accepted parameters — unknown names return400. - Queries are executed server-side; only the aggregated result is returned (no raw row streaming).
- The endpoint is protected by the same JWT auth and per-topic ACL as the rest of EventStats.
- Unknown or unsupported
query_namevalues produce a clear400error, not a500. - Unit tests cover routing, registry lookup, and each query's result shaping.
- Integration tests validate at least one aggregation query end-to-end against a seeded testcontainer database.
- All quality gates pass (
./ci_local.sh).
Note for implementer: the concrete set of queries and their SQL definitions must be identified and agreed upon as part of this issue's implementation. The examples below are starting points only — validate with stakeholders which aggregations are actually needed before writing SQL.
Proposed Solution
Introduce a CompiledQueryRegistry (or extend ReaderPostgres) that maps query names to parameterised SQL templates (using psycopg2 %s / sql.SQL composition — never string interpolation). Each entry declares its accepted input parameters and output schema.
Example candidate queries to evaluate with stakeholders:
failed_jobs_last_7d— count and list of jobs with a failure status in the last N days, grouped by pipeline/tenant.aggregation_by_catalog— job count, success rate, and average elapsed time grouped by catalog/source.run_status_summary— distribution of run statuses (running, completed, failed) over a configurable time window.
Route dispatch follows the existing ROUTE_HANDLERS pattern in event_stats_lambda.py. A new HandlerCompiledQuery (or an extension of HandlerStats) handles validation and delegates to the registry.
Dependencies / Related
- Builds on the EventStats Lambda introduced in PR #113.
- Connection pooling (#115) should be resolved first to avoid per-query connection overhead under aggregation load.
- Langage dominant
- Python
- Étoiles
- 4
- Forks
- 0
- Merge moyen
- 20 h 22 min
- PR mergées (30 j)
- 8
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de AbsaOSS/EventGate
-
refactoring type:tech-debt
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
enhancement
-
infrastructure type:tech-debt
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
Toutes les issues de AbsaOSS/EventGate
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
gradio-app/gradio#13895 ·
-
build-error
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
spack/spack-packages#6713 ·
-
Use issue templates Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
ActivityWatch/activitywatch#1464 · 1 réaction ·
-
[Bug]: The ckg tool drops the return type of every decorated Python method in class search results Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
bytedance/trae-agent#483 ·