Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

fix(stats): overview polling overlaps ticks, reorders samples and hides errors; one shared polling controller

Ouverte
#1,570 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
42/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
dart, flutter, mongodb, mysql, postgresql, redis

Piste de recherche

Read the five polling implementations named in the issue, starting with lib/core/motion/ticker_gated_polling.dart and the PostgreSQL and MySQL stats views. Trace how each view starts and stops polling and handles tick results, then add tests with a fake clock for non-overlapping ticks, error backoff and recovery, and polling paused by TickerMode. Done when all five views use the shared controller and those behaviors are covered.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug frontend P2 stability

Problem

Five Overview/stats screens poll the server with the same copy-pasted code:

File Interval Tick
features/postgresql/postgres_stats_view.dart:185-200 5 s serverStats()
features/mysql/mysql_stats_view.dart:143-158 5 s serverStats()
features/redis/redis_view.dart:196-211 3 s INFO
features/mongodb/mongo_stats_view.dart:168-191 3 s default serverStatus
features/extensions/extension_stats_view.dart:104-116 5 s JSON-RPC getServerStats

Each one does Timer.periodic(interval, (_) => unawaited(_onPollTick())) (also in syncTickerGatedPeriodicTimer, lib/core/motion/ticker_gated_polling.dart:23):

  • Ticks overlap. A tick does not wait for the previous one. When the server is slow, requests pile up on it exactly when it is struggling. For extension drivers the RPC timeout defaults to 60 s (extension_driver_session.dart:189-192), so a hung driver collects up to 12 concurrent getServerStats calls.
  • Samples land out of order. Postgres and MySQL append each result to the sparkline history (_recordHistory) on completion, so overlapping ticks reorder points.
  • Errors are invisible. catch (_) {} in every tick: no "stale since" state, no backoff, the dashboard silently freezes on the last good sample.
  • The timer is started from build() via syncTickerGatedPeriodicTimer (a side effect in build), and each view also keeps its own _startTimer.

Fix

One small PollingController (or mixin) in core/motion / core/util:

  • self-rescheduling: await tick() then schedule the next one, so at most one request is in flight;
  • gated by TickerMode (keep the current behaviour) and shouldRun;
  • exponential backoff on errors, last error + last success time exposed as a ValueListenable for a "stale" hint;
  • started and stopped from didChangeDependencies / dispose, not build.

Replace the five copies. Tests with a fake clock: a slow tick never overlaps; errors back off and recover; TickerMode off stops polling.

Langage dominant
Dart
Étoiles
23
Forks
1
Merge moyen
31 min
PR mergées (30 j)
570

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de QueryaHub/Querya-Desktop

Toutes les issues de QueryaHub/Querya-Desktop

Issues similaires

Plus d'issues Dart

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.