Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta
#1,570 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
42/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
dart, flutter, mongodb, mysql, postgresql, redis

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Dart
Estrelas
23
Forks
1
Merge médio
31min
PRs com merge (30d)
570

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de QueryaHub/Querya-Desktop

Todas as issues de QueryaHub/Querya-Desktop

Issues semelhantes

Mais issues de Dart

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.