Skip to content

Fix alert spam for high message frequency on ws - #962

Merged
ctw-joao-luis merged 6 commits into
developfrom
feature/fix-alert-spam-for-high-message-frequency-on-ws
Feb 27, 2026
Merged

ctw-joao-luis merged 6 commits into
developfrom
feature/fix-alert-spam-for-high-message-frequency-on-ws

Conversation

@ctw-joao-luis

@ctw-joao-luis ctw-joao-luis commented Feb 27, 2026 •

Copy link
Copy Markdown
Contributor

User-Facing Changes

Fixed an alert spam issue in the WebSocket player where high message frequency warnings were triggered repeatedly. The alert now fires only once per connection session.

This fixes #951

Description

The FoxgloveWebSocketPlayer was not tracking whether a high-frequency topic had already been detected, causing the alert to be re-evaluated and re-added on every incoming message. This PR fixes that and also refactors the shared high-frequency detection utility to be cleaner and usable by both players.

Changes:

  • Added ishighFrequencyMessage class field (reset on reconnection in the "open" handler) to ensure isTopicHighFrequency is only called until a high-frequency topic is detected. The alert is now added inline, removing the need for the checkForHighFrequencyTopics wrapper.

  • isTopicHighFrequency: removed unused alerts, connectionType, startTime, and endTime parameters. The function now takes only { topicStats, topic, duration }, making it usable directly from both FoxgloveWebSocketPlayer and IterablePlayer without extra coupling;

  • helpers.ts: Deleted checkForHighFrequencyTopics wrapper function;

  • types.ts: Deleted CheckForHighFrequencyTopics type and its orphaned imports;

  • IterablePlayer: Updated call site to the new isTopicHighFrequency signature;

  • Tests updated across isTopicHighFrequency.test.ts and helpers.test.ts.

How to test it

Created this repo that can be used to test it: https://github.com/ctw-joao-luis/lichtblick-high-frequency-ws

Checklist

  • The web version was tested and it is running ok
  • The desktop version was tested and it is running ok
  • This change is covered by unit tests
  • Files constants.ts, types.ts and *.style.ts have been checked and relevant code snippets have been relocated

…and Iterable players

Signed-off-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <198787532+luiz-bezerra-ctw-bmwgroup-com_QCOM@users.noreply.github.com>
@ctw-joao-luis ctw-joao-luis changed the title Feature/fix alert spam for high message frequency on ws Fix alert spam for high message frequency on ws Feb 27, 2026
@ctw-joao-luis
ctw-joao-luis marked this pull request as ready for review February 27, 2026 16:03
@sonarqubecloud

Copy link
Copy Markdown

@ctw-joao-luis
ctw-joao-luis merged commit 0c9ce4e into develop Feb 27, 2026
18 of 19 checks passed
@ctw-joao-luis
ctw-joao-luis deleted the feature/fix-alert-spam-for-high-message-frequency-on-ws branch February 27, 2026 16:51
@luluiz luluiz mentioned this pull request Apr 24, 2026
luluiz added a commit that referenced this pull request Apr 27, 2026
## Release v1.15.0

This release includes **142 commits** since v1.24.3 (based on
`develop`), spanning new features, bug fixes, performance improvements,
dependency updates, and infrastructure changes across **194 files**.

---

### ✨ Features

- **Message navigation** — Navigate between messages directly (#884)
- **3D Tooltip metadata** — Show metadata in 3D view tooltips (#933)
- **Screen space panning** — Add screen space panning option in 3D
(#847)
- **Plot subscribeMessageRange** — Plot panel now uses
`subscribeMessageRange` for improved data handling (#1004)
- **State Transitions subscribeMessageRange** — State Transitions panel
uses `useSubscribeMessageRange` (#1037)
- **Latest-per-render-tick sampling** — Add sampling strategy for render
ticks (#932)
- **Clear alerts on player change** — Alerts are cleared when switching
players (#1016)
- **Select organization layout as default** — Allow selecting org layout
as default (#860)
- **Re-order series** — Allow re-ordering series in Plot and State
Transitions panels (#907, #930)
- **Extensions catalog improvements** — Organize catalog data into a
table with size info (#931, #942)
- **Add changelog/readme to Extensions API body** (#1031)
- **Only track selected panel settings** (#991)
- **Deprecate blockLoader in 3D Panel** (#909)
- **Multiple MCAPs in file picker** — E2E test for multi-MCAP file
picker (#868)

### 🐛 Bug Fixes

- Fix layout revert not working in some cases (#997)
- Fix layout change calculation (#1018)
- Fix layout selection logic (#899)
- Fix extension catalog refresh (#980)
- Fix installing remote extension not updating list (#994)
- Fix extension version check before loading from cache (#975)
- Fix uninstalling extensions from different loaders (#953)
- Fix network problems loading multiple remote MCAP files (#961)
- Optimize multi-MCAP remote loading with lazy sequential iteration
(#963)
- Fix alert spam for high message frequency on WebSocket (#962)
- Fix data lines and label overlap on State Transitions panel (#981,
#985)
- Fix editable element detection in KeyListener (#990)
- Allow `sec.nanosec` format in URL (#939)
- Allow message converter alerts and handle converter exceptions safely
(#943)
- Force converter to be called when changing settings (#952)
- Fix documentation links (#995)

### 🔧 Refactoring & Code Quality

- Migrate ESLint to 9.x (#1038)
- Sonar issue fixes: Promises misuse (#989), sort compare function
(#988), general fixes
- Rename variables for clarity, remove unused imports
- Add alert handling for messages on unsubscribed topics
- Update field and node editor styles (#978)
- Improve Plot Panel tests (#1020)
- Add unit tests for CameraStateSettings (#937)

### 🏗️ Infrastructure & CI

- Update Node.js version to 24 on jobs and runners (#1054)
- Allow release triggering only from release and hotfix branches (#835)
- Allow manual triggering of SonarCloud workflow (#1009)
- Fix SonarCloud trigger after release (#1011)
- Bump GitHub Actions: upload-pages-artifact, configure-pages,
deploy-pages, download-artifact, upload-artifact, stale, and more
- New E2E tests (#1055, #1058)

### 📦 Dependency Updates

- Bump `@mcap/core` from 2.1.6 to 2.2.0
- Bump `lodash` from 4.17.23 to 4.18.1
- Bump `follow-redirects` from 1.15.11 to 1.16.0
- Bump `@xmldom/xmldom` from 0.8.12 to 0.9.9
- Bump `@mui/icons-material` from 5.15.5 to 7.3.8
- Bump `notistack` from 3.0.1 to 3.0.2
- Update `rosbag2-web`, `copy-webpack-plugin`, `serve-handler`,
`foxglove-schemas`
- Multiple security fixes: `tar`, `dompurify`, `svgo`, `bn.js`,
`picomatch`, `yaml`
- Various npm_and_yarn group bumps across multiple directories

---------

Signed-off-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <luiz.bezerra+QCOM@ctw.bmwgroup.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: ctw-joao-luis <Joao.Luis@ctw.bmwgroup.com>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Taeseung Sohn <paulsohnjp@gmail.com>
Signed-off-by: Gabriela Almeida <gabriela.almeida@criticaltechworks.com>
Signed-off-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <198787532+luiz-bezerra-ctw-bmwgroup-com_QCOM@users.noreply.github.com>
Signed-off-by: joao-oliveira-ctw <joao.alves.oliveira@criticaltechworks.com>
Signed-off-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <luiz.bezerra@ctw.bmwgroup.com>
Co-authored-by: ctw-joao-luis <Joao.Luis@ctw.bmwgroup.com>
Co-authored-by: Rodrigo CTW <rodrigo.PE.rodrigues@ctw.bmwgroup.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Gabriela Almeida <gabriela.almeida@criticaltechworks.com>
Co-authored-by: Alexandre Neuwald CTW <Alexandre.Neuwald@ctw.bmwgroup.com>
Co-authored-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <luiz.bezerra+QCOM@ctw.bmwgroup.com>
Co-authored-by: Alexandre Neuwald <alexandre.neuwald@criticaltechworks.com>
Co-authored-by: Bruno Abreu <bmachadorj@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Bezerra Luiz, (Luiz.Bezerra@ctw.bmwgroup.com) <198787532+luiz-bezerra-ctw-bmwgroup-com_QCOM@users.noreply.github.com>
Co-authored-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Co-authored-by: Taeseung Sohn <paulsohnjp@gmail.com>
Co-authored-by: Planck-Ho <wenloong.he@gmail.com>
Co-authored-by: lichtblick-bot <lichtblick@bmwgroup.com>
Co-authored-by: Joao Luis <joao.miguel.luis@criticaltechworks.com>
Co-authored-by: andremarques94 <90326088+andremarques94@users.noreply.github.com>
Co-authored-by: Taeseung Sohn <taeseung.sohn@tier4.jp>
Co-authored-by: joao-oliveira-ctw <joao.alves.oliveira@criticaltechworks.com>
Co-authored-by: cadkin <adkinscv@ornl.gov>
Co-authored-by: udovonbmw <udo.rietschel@bmw.de>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WebSocket player spams repeated alerts

3 participants