sync #2996
No reviewers
Labels
No labels
1week
2weeks
Failed compliance check
IP cameras
NATS
Possible security concern
Review effort 1/5
Review effort 2/5
Review effort 3/5
Review effort 4/5
Review effort 5/5
UI
aardvark
accessibility
amd64
api
arm64
auth
back-end
bgp
blog
bug
build
checkers
ci-cd
cleanup
cnpg
codex
core
dependencies
device-management
documentation
duplicate
dusk
ebpf
enhancement
eta 1d
eta 1hr
eta 3d
eta 3hr
feature
fieldsurvey
github_actions
go
good first issue
help wanted
invalid
javascript
k8s
log-collector
mapper
mtr
needs-triage
netflow
network-sweep
observability
oracle
otel
plug-in
proton
python
question
reddit
redhat
research
rperf
rperf-checker
rust
sdk
security
serviceradar-agent
serviceradar-agent-gateway
serviceradar-web
serviceradar-web-ng
siem
snmp
sysmon
topology
ubiquiti
wasm
wontfix
zen-engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
carverauto/serviceradar!2996
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "refs/pull/2996/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Imported from GitHub pull request.
Original GitHub pull request: #2958
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/pull/2958
Original created: 2026-03-01T03:36:57Z
Original updated: 2026-03-01T03:41:32Z
Original head: carverauto/serviceradar:staging
Original base: 2371-analytics-stats-cards-should-abbreviate-numbers
Original merged: 2026-03-01T03:37:19Z by @mfreeman451
User description
IMPORTANT: Please sign the Developer Certificate of Origin
Thank you for your contribution to ServiceRadar. Please note, when contributing, the developer must include
a DCO sign-off statement indicating the DCO acceptance in one commit message. Here
is an example DCO Signed-off-by line in a commit message:
Describe your changes
Issue ticket number and link
Code checklist before requesting a review
PR Type
Enhancement, Tests
Description
Comprehensive implementation of "God View" network topology visualization system with interactive 3D rendering using deck.gl and D3
Core visualization engine with node/edge rendering, particle flow animation, and zoom-tier-based graph clustering (local → regional → global)
Graph layout algorithms including Mercator projection for geographic positioning and force-directed layout with D3 simulation
Binary stream decoding for Apache Arrow IPC format with telemetry data extraction and topology change detection
Interactive features: node/edge selection, tooltips, pan/drag/zoom controls, theme-aware styling (light/dark modes)
Netflow chart components (Sankey, stacked area, line series, grid, 100% stacked) with D3-based visualization and interactive legends
Custom deck.gl packet flow layer with GLSL shaders for animated particle effects and directional flow visualization
Comprehensive test suite covering graph algorithms, rendering logic, DOM interactions, and dependency injection contracts
Utility libraries for number formatting, D3 helpers, and WebAssembly runtime wrapper for graph algorithms
ESLint configuration enforcing state/dependency access patterns and preventing deprecated imports
Removal of legacy Dusk profile system and obsolete command-line tools (agent, CLI, profiler, trapd, flowgger, etc.)
Diagram Walkthrough
File Walkthrough
41 files
NetflowSankeyChart.js
D3 Sankey chart visualization for netflow dataelixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js
network flow data (source → middle → destination)
degradation to 2-column layout on circular dependency detection
(port, protocol, topology class)
rendering_graph_layer_transport_methods.js
Deck.gl transport layer rendering for god viewelixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.js
atmosphere, security layers)
directional flow rendering, and focus-based alpha multipliers
support
MapboxFlowMap.js
Mapbox GL map visualization with theme supportelixir/web-ng/assets/js/hooks/MapboxFlowMap.js
(light/dark modes)
source/destination coordinates
preferences
rendering_selection_methods.js
Node/edge selection and detail rendering methodselixir/web-ng/assets/js/lib/god_view/rendering_selection_methods.js
device reference links
with view state updates
node metadata display
util.js
Netflow chart utilities and D3 helperselixir/web-ng/assets/js/netflow_charts/util.js
overlay management
calculation, and time-series normalization
escaping
bisector-based data lookup
rendering_style_edge_particle_methods.js
Packet flow particle generation and stylingelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_particle_methods.js
visualization with directional flow support
utilization, capacity, and zoom level
visual clarity
packetFlowCacheStampto avoid redundantparticle generation
layout_cluster_methods.js
Graph clustering and zoom-tier layout methodselixir/web-ng/assets/js/lib/god_view/layout_cluster_methods.js
clustering)
aggregated metrics and topology class counts
across cluster boundaries
histograms
NetflowStackedAreaChart.js
D3 stacked area chart for netflow time serieselixir/web-ng/assets/js/hooks/charts/NetflowStackedAreaChart.js
interactive legend
stroke patterns
events
filtering
PacketFlowLayer.js
Custom deck.gl packet flow visualization layerelixir/web-ng/assets/js/lib/deckgl/PacketFlowLayer.js
with GLSL shaders
effects and glow
and color
NetflowStacked100Chart.js
Stacked 100% area chart with overlayselixir/web-ng/assets/js/hooks/charts/NetflowStacked100Chart.js
visualization
support
lifecycle_dom_setup_methods.js
God view DOM initialization and deck setupelixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.js
fallbacks
detail panels
renderer_deps.js
Dependency injection framework for god viewelixir/web-ng/assets/js/lib/god_view/renderer_deps.js
dependencies
lifecycle_dom_interaction_methods.js
DOM interaction and animation lifecycle methodselixir/web-ng/assets/js/lib/god_view/lifecycle_dom_interaction_methods.js
detection
JdmEditorHook.js
JDM editor hook with theme synchronizationelixir/web-ng/assets/js/hooks/JdmEditorHook.js
system preferences
callbacks
NetflowGridChart.js
Grid layout multi-series chart componentelixir/web-ng/assets/js/hooks/charts/NetflowGridChart.js
visualization
rendering_graph_layer_node_methods.js
Node layer rendering with animation effectselixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_node_methods.js
rings, and labels
phase
(local/regional/global)
lifecycle_stream_snapshot_methods.js
Snapshot stream parsing and graph lifecycleelixir/web-ng/assets/js/lib/god_view/lifecycle_stream_snapshot_methods.js
render times
NetflowLineSeriesChart.js
Multi-series line chart with composition overlayselixir/web-ng/assets/js/hooks/charts/NetflowLineSeriesChart.js
composition overlays
rendering_style_node_reason_methods.js
Node state reason and causal analysis methodselixir/web-ng/assets/js/lib/god_view/rendering_style_node_reason_methods.js
references
rendering_graph_data_methods.js
Graph data visibility and filtering methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_data_methods.js
interaction keys
god_view_exec_runtime.js
WebAssembly runtime wrapper for graph algorithmselixir/web-ng/assets/js/wasm/god_view_exec_runtime.js
SRQLTimeCookie.js
SRQL time token persistence hookelixir/web-ng/assets/js/hooks/SRQLTimeCookie.js
param
layout_topology_algorithm_methods.js
Graph layout algorithms for topology visualizationelixir/web-ng/assets/js/lib/god_view/layout_topology_algorithm_methods.js
latitude/longitude clamping
configurable forces (charge, link, collide, center)
nodes without geo coordinates
lifecycle_stream_decode_methods.js
Binary stream decoding for graph topology dataelixir/web-ng/assets/js/lib/god_view/lifecycle_stream_decode_methods.js
telemetry data
coordinates
edge metrics (flow, capacity, telemetry eligibility)
Uint32Array) for edge source/target indices forefficient graph traversal
rendering_graph_bitmap_methods.js
Graph bitmap and mask computation methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_bitmap_methods.js
affected, healthy, unknown)
acceleration fallback
neighborhoods
unavailable
rendering_style_edge_telemetry_methods.js
Edge telemetry styling and formattingelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_telemetry_methods.js
scaling (K/M/G)
vivid/muted variants
flow-based boost
"LINK"
TimeseriesCombinedChart.js
Multi-series timeseries chart with interactive tooltipselixir/web-ng/assets/js/hooks/charts/TimeseriesCombinedChart.js
charts on mousemove
second)
boundary clamping
rendering_tooltip_methods.js
Tooltip generation and hover state managementelixir/web-ng/assets/js/lib/god_view/rendering_tooltip_methods.js
information
and capacity
feedback
TimeseriesChart.js
Single-series timeseries chart with tooltipselixir/web-ng/assets/js/hooks/charts/TimeseriesChart.js
mousemove
count per second)
layout_topology_state_methods.js
Layout topology state managementelixir/web-ng/assets/js/lib/god_view/layout_topology_state_methods.js
coordinate coverage
node/edge structure
lifecycle_bootstrap_state_defaults_methods.js
Lifecycle state initialization with defaultselixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_state_defaults_methods.js
rendering, animation, and UI
color palette
SpatialSurveyMap.js
Spatial survey RF coverage visualizationelixir/web-ng/assets/js/hooks/SpatialSurveyMap.js
for RF coverage data
window_events.js
Global window event handlers and utilitieselixir/web-ng/assets/js/utils/window_events.js
fallback copy implementation
editor integration
editor
layout_animation_methods.js
Layout transition animation methodselixir/web-ng/assets/js/lib/god_view/layout_animation_methods.js
requestAnimationFrame
optional WASM acceleration
lifecycle_bootstrap_channel_event_methods.js
Channel event registration and reconnectionelixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_channel_event_methods.js
errors
updates
formatters.js
Number formatting utility functionselixir/web-ng/assets/js/utils/formatters.js
pps)
rendering_graph_view_methods.js
Graph view auto-fit and camera controlelixir/web-ng/assets/js/lib/god_view/rendering_graph_view_methods.js
app.js
Main application entry point initializationelixir/web-ng/assets/js/app.js
lifecycle_bootstrap_runtime_methods.js
Lifecycle runtime bootstrap and initializationelixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_runtime_methods.js
thisreferencerendering_style_node_visual_methods.js
Node visual styling and display methodselixir/web-ng/assets/js/lib/god_view/rendering_style_node_visual_methods.js
rate)
GodViewRenderer.js
Main GodViewRenderer orchestration classelixir/web-ng/assets/js/lib/GodViewRenderer.js
composition
controller
22 files
lifecycle_stream_decode_methods.test.js
Tests for Arrow graph stream decoding logicelixir/web-ng/assets/js/lib/god_view/lifecycle_stream_decode_methods.test.js
apache-arrowmodulepreservation, optional column handling, and null geo coordinate
handling
and telemetry eligibility flags
traffic
rendering_graph_data_methods.test.js
Tests for graph data rendering and filteringelixir/web-ng/assets/js/lib/god_view/rendering_graph_data_methods.test.js
and topology layer filtering
(flowPpsAb/Ba), and multi-edge handling for identical endpoints
propagation
layout_cluster_methods.test.js
Tests for graph clustering and layout methodselixir/web-ng/assets/js/lib/god_view/layout_cluster_methods.test.js
and edge consolidation
and topology class counting
rendering_tooltip_methods.test.js
Tests for tooltip rendering and hover handlingelixir/web-ng/assets/js/lib/god_view/rendering_tooltip_methods.test.js
state updates
rendering_style_edge_particle_methods.test.js
Packet flow particle rendering test suiteelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_particle_methods.test.js
particle density bounds
render conditionally
renderer_deps.test.js
Dependency injection builder unit testselixir/web-ng/assets/js/lib/god_view/renderer_deps.test.js
exports
chains
rendering_selection_methods.test.js
Node selection and detail rendering testselixir/web-ng/assets/js/lib/god_view/rendering_selection_methods.test.js
values
lifecycle_bootstrap_event_methods.test.js
Lifecycle event bootstrap integration testselixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_event_methods.test.js
reset
lifecycle_dom_interaction_methods.test.js
DOM interaction lifecycle unit testselixir/web-ng/assets/js/lib/god_view/lifecycle_dom_interaction_methods.test.js
handling
lifecycle_dom_setup_methods.test.js
DOM setup and event handling testselixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.test.js
through dependency bridge
focus actions
rendering_graph_bitmap_methods.test.js
Bitmap and mask computation unit testselixir/web-ng/assets/js/lib/god_view/rendering_graph_bitmap_methods.test.js
rendering_graph_layer_transport_methods.test.js
Transport layer rendering testselixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.test.js
configuration
particle effects
layout_topology_state_methods.test.js
Layout topology state management testselixir/web-ng/assets/js/lib/god_view/layout_topology_state_methods.test.js
updates
(25%)
layout_topology_algorithm_methods.test.js
Layout algorithm unit testselixir/web-ng/assets/js/lib/god_view/layout_topology_algorithm_methods.test.js
fallback positioning
large graphs
lifecycle_stream_snapshot_methods.test.js
Snapshot stream parsing unit testselixir/web-ng/assets/js/lib/god_view/lifecycle_stream_snapshot_methods.test.js
extraction
lifecycle_bootstrap_channel_event_methods.test.js
Channel event handling unit testselixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_channel_event_methods.test.js
GodViewRenderer.test.js
GodViewRenderer integration testselixir/web-ng/assets/js/lib/god_view/GodViewRenderer.test.js
engines
deps_injection_contract.test.js
Dependency injection contract validationelixir/web-ng/assets/js/lib/god_view/deps_injection_contract.test.js
this.depsusages in rendering/lifecycle methods aredeclared in dependency maps
configuration
rendering_style_edge_telemetry_methods.test.js
Edge telemetry styling unit testselixir/web-ng/assets/js/lib/god_view/rendering_style_edge_telemetry_methods.test.js
rendering_style_edge_topology_methods.test.js
Edge topology styling unit testselixir/web-ng/assets/js/lib/god_view/rendering_style_edge_topology_methods.test.js
rendering_style_node_reason_methods.test.js
Node state reason generation testselixir/web-ng/assets/js/lib/god_view/rendering_style_node_reason_methods.test.js
runtime_access_contract.test.js
Runtime access contract validationelixir/web-ng/assets/js/lib/god_view/runtime_access_contract.test.js
this.stateandthis.depsnamespacesthis.someMethodin method files1 files
eslint.config.js
ESLint configuration with state access enforcementelixir/web-ng/assets/eslint.config.js
this.stateandthis.depsaccess patterns via restrictedproperties
runtime_refsimports in god view method files101 files
Imported GitHub PR comment.
Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2958#issuecomment-3978994253
Original created: 2026-03-01T03:40:02Z
PR Compliance Guide 🔍
Below is a summary of compliance checks for this PR:
DOM XSS risk
Description: Tooltip content is assigned via
tooltip.innerHTML = htmlwherehtmlis built fromunescaped edge/node fields (e.g.,
src,dst,mid_value,label), enabling DOM XSS if any ofthose values can contain attacker-controlled HTML/JS (for example, a value like
<img src=xonerror=alert(1)>inmid_value).NetflowSankeyChart.js [72-88]
Referred Code
🎫 No ticket provided
Codebase context is not defined
Follow the guide to enable codebase context checks.
Generic: Meaningful Naming and Self-Documenting Code
Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting
Status: Passed
Generic: Robust Error Handling and Edge Case Management
Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation
Status:
Swallowed exceptions: Multiple new
try { ... } catch (_e) {}blocks silently ignore failures (e.g., mapresize/remove, theme observer disconnect, source/layer updates), which can hide runtime
errors and prevent actionable diagnostics.
Referred Code
Generic: Secure Error Handling
Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.
Status:
User-facing internals: Rendering failure details are displayed directly to the user via
renderMessage(...,String(e?.message || e ...)), which may expose internal implementation or library errorinformation.
Referred Code
Generic: Security-First Input Validation and Data Handling
Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities
Status:
XSS via tooltip: Tooltip HTML is built with unescaped values from
el.dataset.edges(e.g.,src,dst,mid_value) and assigned totooltip.innerHTML, enabling potential HTML/script injection ifupstream data contains malicious strings.
Referred Code
Compliance status legend
🟢 - Fully Compliant🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label
Imported GitHub PR comment.
Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2958#issuecomment-3978996287
Original created: 2026-03-01T03:41:32Z
PR Code Suggestions ✨
Explore these optional code suggestions:
Avoid committing large build artifacts
The PR adds a large, auto-generated JavaScript bundle (
server.js) to therepository. This file is a build artifact and should be excluded from version
control, for instance by adding it to
.gitignore.Examples:
elixir/web-ng/priv/react/server.js [1-424670]
Solution Walkthrough:
Before:
After:
Suggestion importance[1-10]: 10
__
Why: The suggestion correctly identifies a massive 400k+ line build artifact (
server.js) that should not be in version control, as it severely impacts repository health and reviewability.Prevent XSS by avoiding innerHTML
To prevent potential XSS vulnerabilities, replace the use of
tooltip.innerHTMLwith safe DOM manipulation methods like
document.createElementandtextContentfor setting the tooltip's content.
elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [72-88]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies a potential XSS vulnerability from using
innerHTMLwith data that could originate from user-controlled fields. While the proposedimproved_codeis not a drop-in replacement and changes the function's API, the core security advice is valid and critical for hardening the application.Ensure modulo operation yields positive results
Correct the modulo calculation for the
wavevariable to ensure it alwaysproduces a positive result, fixing a potential bug in the animation logic.
elixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.js [234]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies a subtle bug where the JavaScript modulo operator can return negative values, which would break the animation logic, and provides a correct fix.
Fix incorrect state update bug
Remove the incorrect update to
atmosphereSuppressUntilfrom the genericonErrorhandler to prevent unintended side effects.
elixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.js [150-155]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: This suggestion identifies and fixes a bug where a generic error handler was incorrectly modifying state specific to another error case, preventing unintended side effects.
Fix inconsistent theme handling bug
Refactor the duplicated React component logic into a single, shared component to
fix an inconsistent theme handling bug and improve maintainability.
elixir/web-ng/assets/js/hooks/JdmEditorHook.js [128-172]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies both a code duplication issue and a related bug where system theme changes were not handled in the update path, leading to inconsistent UI behavior.
Deep copy data to prevent mutation
Perform a deep copy of the
nodesandlinksdata before passing it to thed3Sankeylayout generator to prevent unintended mutations of the original datastructures.
elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [166-180]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 6
__
Why: The suggestion correctly notes that
d3-sankeymutates its input data and that the current shallow copy is insufficient for nested objects. Thelinksarray contains a nestededgeobject, which could be mutated. UsingJSON.parse(JSON.stringify(...))for a deep copy is a valid and effective solution to prevent such side effects.Use anchor tag for navigation links
Replace the
Refactor duplicated data normalization logic
Refactor the duplicated data normalization logic into a single, reusable
function to improve code maintainability and consistency.
elixir/web-ng/assets/js/hooks/charts/NetflowStacked100Chart.js [60-155]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 6
__
Why: The suggestion correctly identifies duplicated code and proposes a valid refactoring that improves maintainability by adhering to the DRY principle.
Use responsive padding for map bounds
Replace the fixed padding value in the
fitBoundscall with a dynamic one thatadapts to the map's container size to improve responsiveness.
elixir/web-ng/assets/js/hooks/MapboxFlowMap.js [290]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 5
__
Why: The suggestion correctly identifies that a fixed padding is not responsive and proposes a dynamic calculation, which improves the user experience on different screen sizes.