2371 analytics stats cards should abbreviate numbers #2997
Closed
mfreeman451 wants to merge 2 commits from
refs/pull/2997/head into staging
pull from: refs/pull/2997/head
merge into: carverauto:staging
carverauto:staging
carverauto:demo/prod-release
carverauto:add-dashboard-srql-service-views
carverauto:enhance-dashboard-creator-visual-builder
carverauto:fix-release-1-2-78-ci-failures
carverauto:refactor-agent-plugin-runtime
carverauto:add-dashboard-creator
carverauto:update/plugin-system
carverauto:add-service-monitoring-foundation
carverauto:fix/cli-auth-settings-navigation
carverauto:fix/device-unknown-facet
carverauto:fix-plugin-assignment-upgrades
carverauto:fix/sweep-profile-mode-status
carverauto:fix/armis-northbound-fixes
carverauto:fix-proxmox-console-react-client-render
carverauto:fix-openbao-signing-job-token-mount
carverauto:fix-services-plugin-status-read-model
carverauto:fix-stream-status-final-chunk
carverauto:codex/fix-prod-armis-sync-icmp
carverauto:fix-demo-cnpg-operator-networkpolicy
carverauto:update/docs-cleanup
carverauto:fix-armis-northbound-raw-token-auth
carverauto:fix-armis-northbound-stuck-running
carverauto:update-manual-device-hostname-readd
carverauto:fix/observability-severity-card-links
carverauto:renovate/debian_testing_slim-testing-slim
carverauto:docs/kubernetes-ingestion-gateway
carverauto:fix/flow-collector-external-network-policy
carverauto:fix/armis-availability-and-stream-config
carverauto:refactor-fast-fresh-db-bootstrap
carverauto:fix/cnpg-not-found
carverauto:fix/docker-update/cnpg
carverauto:renovate/debian_bookworm_slim-bookworm-slim
carverauto:add-socket-firewall-ci
carverauto:add-ipv6-sweep-scanners
carverauto:fix-armis-northbound
carverauto:add-streamed-agent-config
carverauto:fix/sweep-ip-family-routing
carverauto:codex/fix-core-migration-hook-upgrade
carverauto:renovate/arc_runner
carverauto:renovate/actions_runner
carverauto:codex/remote-access-desktop-rdp
carverauto:updates/missing-fixes
carverauto:fix/batched-sweep-targets
carverauto:fix/agent-sysmon-memory-growth
carverauto:fix/armis-northbound-single-run-and-timestamps
carverauto:release/1.2.67
carverauto:fix/wasm-plugin-service-status
carverauto:fix/armis-names-string
carverauto:codex/harden-remote-access-app-tcp-followup
carverauto:codex/harden-remote-access-app-tcp
carverauto:codex/harden-gateway-proxy-auth
carverauto:codex/harden-remote-access-destroy-rbac
carverauto:codex/harden-ssh-ca-remote-access
carverauto:codex/harden-remote-access-broker-registry
carverauto:codex/harden-remote-access-approval-policy
carverauto:codex/harden-remote-access-file-transfer
carverauto:codex/harden-remote-access-attach-ticket
carverauto:fix-release-plugin-list-cleanup
carverauto:codex/harden-grpc-logger-payloads
carverauto:propose-interface-action-target-context
carverauto:add-signed-northbound-action-callbacks
carverauto:fix/reap-stale-self-scheduled-oban-jobs
carverauto:fix/device-logs-tab-async
carverauto:fix/device-metadata-summary
carverauto:fix/northbound-launch-target-auth
carverauto:fix/northbound-provider-atomic-read
carverauto:proposal/add-sample-northbound-wasm-plugin
carverauto:proposal/northbound-action-integrations
carverauto:fix/ansible-run-job-device-launch
carverauto:codex/fix-audit-events-shell-theme
carverauto:codex/fix-sweep-tcp-availability
carverauto:codex/fix-armis-names-string
carverauto:fix/update-nats-2-14
carverauto:fix/elixir-quality-release-blockers
carverauto:fix/latest-release-device-ingest-ui-bugs
carverauto:fix/release-1.2.61-ci-failures
carverauto:fix/web-ng-precommit-format
carverauto:fix/wasm-tinygo-go125
carverauto:fix/agent-file-transfer-bazel-src
carverauto:fix/release-key-stamp-root
carverauto:fix/release-1.2.59-staging
carverauto:main
carverauto:fix/agent-accept-deprecated-remote-access-config
carverauto:fix/device-results-count-facets
carverauto:fix/bazelisk-installer-retries
carverauto:fix/tinygo-host-toolchain-fetch
carverauto:add-per-agent-availability
carverauto:fix/forgejo-release-multipart-assets
carverauto:fix/agent-config-stale-session
carverauto:fix/mtr-hop-dns-resolution
carverauto:fix/hostname-only-device-create
carverauto:fix/otlp-log-metadata-sanitization
carverauto:fix/sweep-icmp-legacy-mode-classification
carverauto:add-nats-object-store-retention
carverauto:fix/helm-serviceradar-state-pvc
carverauto:harden/forgejo-ci-nonroot
carverauto:codex/expand-remote-access-teleport-parity
carverauto:fix/sweep-port-history-consistency
carverauto:fix/remote-access-ssh-feature-flag
carverauto:fix/devices-refresh-artifacts
carverauto:fix/identity-ingestion-sweep-availability
carverauto:spec/identity-cache-ingestion-correctness
carverauto:fix/sweep-mapper-promotion-stale-cache
carverauto:fix/sweep-provisional-duplicate-ip
carverauto:fix/sweep-target-invalid-ip-order
carverauto:fix/armis-large-sync-streaming
carverauto:fix/docusaurus-blog-build-date
carverauto:fix/armis-sync-compat-deep-dive
carverauto:fix/awx-controller-credential-secret
carverauto:fix/demo-release-source-branch
carverauto:demo/release-v1.2.44-source-fix
carverauto:codex/teleport-agent-routed-remote-access
carverauto:feature/agent-config-dependency-catalog
carverauto:proposal/agent-config-dependency-catalog
carverauto:bugfix/armis-credentials-save-display
carverauto:bugfix/armis-integration-credentials
carverauto:fix/web-ng-precommit-formatting
carverauto:bugfix/armis-secret-config-push
carverauto:feature/close-controllers-to-pipelines
carverauto:carverauto/extract-palisade
carverauto:feature/migrate-dashboard-cli-to-plugs
carverauto:feature/audit-history-page
carverauto:feature/migrate-controllers-to-security-pipelines
carverauto:fix/security-events-test-and-retention-worker
carverauto:feature/add-platform-security-hardening
carverauto:demo-rollout-proxmox-bazel-fix
carverauto:bug/armis-sync-issues
carverauto:add-virtualization-srql-queries
carverauto:add-proxmox-ingestion-hardening-tests
carverauto:add-ssh-private-key-credential-rules
carverauto:redact-plugin-credential-material
carverauto:add-credential-rules-settings-entry
carverauto:add-credential-rules-settings-flows
carverauto:require-network-credential-broker-grants
carverauto:preview-credential-rule-target-scope
carverauto:add-proxmox-credential-secret-preset
carverauto:harden-credential-rules-live-tests
carverauto:clarify-proxmox-plugin-credential-modes
carverauto:docs-proxmox-credential-operations
carverauto:fingerprint-proxmox-candidates
carverauto:proxmox-resource-efficiency-dashboard
carverauto:proxmox-console-security-docs
carverauto:proxmox-focused-quality-validation
carverauto:proxmox-metric-baseline-alerts
carverauto:proxmox-device-scoped-logs
carverauto:proxmox-defer-vector-log-forwarding
carverauto:proxmox-console-session-tickets
carverauto:proxmox-console-xterm-shell
carverauto:proxmox-console-websocket-broker
carverauto:proxmox-console-control-frames
carverauto:proxmox-console-agent-session-manager
carverauto:proxmox-console-plugin-pty-bridge
carverauto:proxmox-console-assignment-materializer
carverauto:proxmox-console-ssh-connector
carverauto:proxmox-console-agent-local-broker
carverauto:proxmox-console-device-actions
carverauto:proxmox-console-stream-timeouts
carverauto:proxmox-console-guest-mode-gating
carverauto:proxmox-console-ci-race-fix
carverauto:fix/falco-alert-routing-datasvc-channel
carverauto:fix-agent-release-page-bugs
carverauto:add-proxmox-device-details-summary
carverauto:add-proxmox-virtualization-ingestor
carverauto:add-virtualization-inventory-schema
carverauto:add-proxmox-infrastructure-inventory
carverauto:add-proxmox-plugin-live-smoke
carverauto:add-proxmox-local-api-smoke
carverauto:add-proxmox-credential-test-dispatch
carverauto:add-proxmox-credential-test-plan
carverauto:add-network-credential-rule-preview
carverauto:add-proxmox-plugin-inventory-details
carverauto:add-proxmox-credential-reconcile-worker
carverauto:add-proxmox-credential-assignment-materializer
carverauto:add-plugin-input-template-secret-refs
carverauto:add-proxmox-plugin-policy-inputs
carverauto:add-proxmox-wasm-plugin-scaffold
carverauto:add-network-credential-rules-model
carverauto:add-proxmox-plugin-credential-rules
carverauto:fix/rperf-rustls-provider-demo
carverauto:fix/dashboard-template-sdk-014
carverauto:fix/tinygo-go126-release
carverauto:fix/reqsign-provider-bazel-deps
carverauto:fix/release-bazel-rust-crates
carverauto:fix/core-coordinator-connection-leak
carverauto:chore/security-updates
carverauto:update/readme-versions-update
carverauto:docs/readme-dashboard-sdk
carverauto:chore/cli-0.1.5
carverauto:fix/dashboard-cli-local-map-dev
carverauto:fix/dashboard-cli-hmr-map-libraries
carverauto:chore/bump-serviceradar-cli-0.1.2
carverauto:fix/dashboard-cli-hmr-harness
carverauto:fix/helm-contour-liveview-websocket
carverauto:fix/helm-cnpg-pooler-defaults
carverauto:updates/helm-fixes
carverauto:update/fix-light-mode-analytics
carverauto:ual/dashboard-sdk-dx
carverauto:security/postgres-update
carverauto:update-falco-alert-diagnostics
carverauto:ual/react-dashboard-sdk
carverauto:fix/cnpg-saturation-fk-and-bootstrap
carverauto:ual/wifi-site-map
carverauto:fix-coraza-log-db-writer
carverauto:fix-log-viewer-syslog-processed
carverauto:plan-fieldsurvey-spatial-selection
carverauto:plan-envoy-coraza-waf
carverauto:plan-alienvault-otx-integration
carverauto:plan-fieldsurvey-sidekick-daemon
carverauto:cleanup-openspec-archive-closed-proposals
carverauto:bug-core-elx-ip-enrichment-reap
carverauto:fix-release-libcap2-pin-v125
carverauto:fix-camera-stream-gateway-route
carverauto:add-core-elx-prometheus-metrics
carverauto:add-serviceradar-observability-dashboards
carverauto:add-pgbouncer-helm-cnpg
carverauto:renovate/ghcr.io-actions-actions-runner
carverauto:feat/cluster-agent-runtime-metadata-stability
carverauto:feat/observability-shell-standardization
carverauto:feat/observability-live-log-toggle
carverauto:fix/mtr-bulk-queue-and-srql-targets
carverauto:fix/mtr-profile-protocol-keyerror
carverauto:fix/mtr-diagnostics-keyerror
carverauto:add-demo-rollout-skills
carverauto:fix-web-ng-test-support-dialyzer
carverauto:fix-web-ng-dialyzer-findings
carverauto:add-bulk-queued-mtr-diagnostics
carverauto:fix-serviceradar-core-integration-failures
carverauto:harden-agent-updater-exec-arguments
carverauto:harden-agent-release-trust-boundaries
carverauto:fix-compose-hermetic-nats-datasvc-bootstrap
carverauto:fix/openbao-release-issues
carverauto:elixir/formatting-updates
carverauto:codex/demo-cnpg-signing-release-fixes
carverauto:chore/lint-fixes
carverauto:fix/bazel-alpine-bump-and-cosign-skip
carverauto:update-event-alert-dedup-and-suppression
carverauto:armis-northbound-events
carverauto:armis-northbound-availability-updates
carverauto:push-owvypksrmooo
carverauto:codex/topology-endpoint-evidence-investigation
carverauto:codex/topology-bootstrap-and-layout-simplification
carverauto:codex/remove-ingress-nginx-edge
carverauto:fix/forgejo-ci-snmp-cache-and-ubuntu24
carverauto:bug/cnpg-mtls-failure
carverauto:bug/log-collector
carverauto:fix/forgejo-runner-labels
carverauto:fix/cargo-lock-sync
carverauto:remove-arc-runner-from-push-all
carverauto:fix-push-all-cosign-preflight
carverauto:fix-go-ci
carverauto:add-versioned-openapi-publish
carverauto:chore/forgejo-hardening
carverauto:security/k8s-hardening
carverauto:update/cluster-page-agents
carverauto:updates/helm-security-updates
carverauto:2406-feat-agent-fleet-management-secure-self-update-system
carverauto:bug/k8s-helm-deployments
carverauto:chore/k8s-arc-update
carverauto:rust-fix
carverauto:2371-analytics-stats-cards-should-abbreviate-numbers
carverauto:chore/perl-cleanup
carverauto:2942-featweb-ng-add-logs-tab-to-device-details-page
carverauto:192-feat-tftp-server
carverauto:mikemiles-dev/feature/netflow_collection
carverauto:testing
carverauto:dependabot/cargo/hostname-0.4.1
carverauto:dependabot/cargo/redis-1.0.1
carverauto:dependabot/cargo/bb8-0.9.0
carverauto:dependabot/cargo/rcgen-0.14.6
carverauto:dependabot/cargo/hyper-1.8.1
carverauto:dependabot/cargo/hyper-util-0.1.19
carverauto:dependabot/cargo/clap-4.5.51
carverauto:dependabot/cargo/thiserror-2.0.17
carverauto:dependabot/cargo/time-tz-2.0.0
carverauto:dependabot/cargo/tonic-build-0.14.2
carverauto:backup/main-pre-staging-sync-2026-04-02
carverauto:dependabot/npm_and_yarn/docs/mdast-util-to-hast-13.2.1
carverauto:815-feat-support-win32-for-agentpoller
carverauto:gh-pages
No reviewers
Labels
Clear labels
1week
2weeks
Failed compliance check
IP cameras
NATS
NATS JetStream
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
Something isn't working
build
checkers
ci-cd
continuous integration-continuous deployments
cleanup
cnpg
cloud-native postgres
codex
core
core service
dependencies
Pull requests that update a dependency file
device-management
documentation
Improvements or additions to documentation
duplicate
This issue or pull request already exists
dusk
ebpf
enhancement
New feature or request
eta 1d
eta 1hr
eta 3d
eta 3hr
feature
fieldsurvey
github_actions
Pull requests that update GitHub Actions code
go
Pull requests that update Go code
good first issue
Good for newcomers
help wanted
Extra attention is needed
invalid
This doesn't seem right
javascript
Pull requests that update Javascript code
k8s
log-collector
mapper
mtr
multi traceroute
needs-triage
netflow
network-sweep
observability
oracle
Oracle Linux related issues
otel
opentelemetry logs, traces, metrics
plug-in
proton
timeplus proton streaming database
python
question
Further information is requested
reddit
redhat
research
rperf
rperf-checker
rust
Pull requests that update rust code
sdk
security
serviceradar-agent
serviceradar-agent-gateway
serviceradar-web
serviceradar-web-ng
siem
snmp
sysmon
topology
ubiquiti
wasm
wontfix
This will not be worked on
zen-engine
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
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
carverauto/serviceradar!2997
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "refs/pull/2997/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: #2959
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/pull/2959
Original created: 2026-03-01T03:46:12Z
Original updated: 2026-03-01T03:50:43Z
Original head: carverauto/serviceradar:2371-analytics-stats-cards-should-abbreviate-numbers
Original base: staging
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
Description
Comprehensive implementation of a god-view network topology visualization system with deck.gl and D3
New packet flow particle animation layer with custom WebGL shaders for animated network edge visualization
Multiple netflow chart components (stacked area, stacked 100%, grid, line series, Sankey diagram) with abbreviated number formatting
Graph layout algorithms including Mercator projection, force-directed layout, and clustering transformations
Node and edge rendering with interactive tooltips, selection, and state-based styling
Arrow binary format decoding for efficient graph data streaming with WASM acceleration
Comprehensive test coverage for all major rendering, layout, and lifecycle components
ESLint configuration enforcing god-view code patterns and dependency injection contracts
Theme-aware Mapbox GL integration and JDM editor hook with Phoenix LiveView synchronization
Utility functions for number formatting (bytes, bits, rates) with K/M/G/T abbreviations
Diagram Walkthrough
File Walkthrough
43 files
NetflowSankeyChart.js
D3 Sankey chart hook for netflow visualizationelixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js
3-column layout (source, middle, destination)
degradation for circular link detection
with
formatByteshelpergroups
rendering_graph_layer_transport_methods.js
Deck.gl transport layer rendering methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.js
atmosphere, security) with zoom-aware scaling
ScatterplotLayer for shader-disabled browsers
utilization and zoom level
MapboxFlowMap.js
Mapbox GL flow map visualization hookelixir/web-ng/assets/js/hooks/MapboxFlowMap.js
(light/dark modes)
source/destination pairs
attribute, and OS preference fallback
with error recovery
rendering_selection_methods.js
Node selection and detail rendering methodselixir/web-ng/assets/js/lib/god_view/rendering_selection_methods.js
causal relationships
strings and type IDs
navigation with optional local zoom
interactive graph selection
util.js
Netflow chart utilities and formatterselixir/web-ng/assets/js/netflow_charts/util.js
management, time series normalization
fmtNumberandfmtPctformatters for abbreviated numberdisplay (G/M/K suffixes)
interactive legend building
and HTML escaping
rendering_style_edge_particle_methods.js
Packet flow particle rendering and stylingelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_particle_methods.js
directional flow support
utilization and zoom level
bidirectional lane offset
recalculation
layout_cluster_methods.js
Graph clustering and layout transformation methodselixir/web-ng/assets/js/lib/god_view/layout_cluster_methods.js
local/regional/global views
clustering (by spatial cell)
topology class counting
NetflowStackedAreaChart.js
D3 stacked area chart for netflow time serieselixir/web-ng/assets/js/hooks/charts/NetflowStackedAreaChart.js
interactive legend and tooltips
stroke styles and labels
chart dimensions
nfFormatRateValuefor unit-aware value formatting in tooltipslifecycle_bootstrap_state_defaults_methods.js
God-view lifecycle state initialization defaultselixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_state_defaults_methods.js
properties
topology filters, and animation state
and visual color palette
PacketFlowLayer.js
Custom deck.gl layer for animated packet flow visualizationelixir/web-ng/assets/js/lib/deckgl/PacketFlowLayer.js
flow particles on network edges
time-based progression and fade effects
speed, size, color, jitter, lane offset)
NetflowStacked100Chart.js
Stacked 100% area chart with composition overlayselixir/web-ng/assets/js/hooks/charts/NetflowStacked100Chart.js
visualization
previous/reverse states
sizing
lifecycle_dom_setup_methods.js
DOM setup and deck.gl initialization for god viewelixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.js
HUD panels
containers
handling
interactions
renderer_deps.js
Dependency injection framework for god view architectureelixir/web-ng/assets/js/lib/god_view/renderer_deps.js
and lifecycle APIs
layout, and lifecycle contexts
keys
lifecycle_dom_interaction_methods.js
User interaction and animation loop managementelixir/web-ng/assets/js/lib/god_view/lifecycle_dom_interaction_methods.js
scaling
pointer capture
JdmEditorHook.js
JDM editor integration with theme synchronizationelixir/web-ng/assets/js/hooks/JdmEditorHook.js
changes
NetflowGridChart.js
Multi-panel grid chart for time-series visualizationelixir/web-ng/assets/js/hooks/charts/NetflowGridChart.js
simultaneously
responsive sizing
tooltip
rendering_graph_layer_node_methods.js
Node and label layer construction for god viewelixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_node_methods.js
rings, and labels
phase
(local/regional/global)
text
lifecycle_stream_snapshot_methods.js
Snapshot message parsing and graph update handlingelixir/web-ng/assets/js/lib/god_view/lifecycle_stream_snapshot_methods.js
NetflowLineSeriesChart.js
Multi-series line chart with overlay supportelixir/web-ng/assets/js/hooks/charts/NetflowLineSeriesChart.js
rendering_style_node_reason_methods.js
Node state reasoning and causal explanation generationelixir/web-ng/assets/js/lib/god_view/rendering_style_node_reason_methods.js
tracking
rendering_graph_data_methods.js
Graph data preparation and visibility filteringelixir/web-ng/assets/js/lib/god_view/rendering_graph_data_methods.js
interaction keys
god_view_exec_runtime.js
WebAssembly runtime engine for god view computationselixir/web-ng/assets/js/wasm/god_view_exec_runtime.js
traversal, interpolation)
SRQLTimeCookie.js
SRQL time token persistence and restorationelixir/web-ng/assets/js/hooks/SRQLTimeCookie.js
other parameters
layout_topology_algorithm_methods.js
Graph layout algorithms for topology visualizationelixir/web-ng/assets/js/lib/god_view/layout_topology_algorithm_methods.js
lifecycle_stream_decode_methods.js
Arrow format decoding for graph stream dataelixir/web-ng/assets/js/lib/god_view/lifecycle_stream_decode_methods.js
rendering_graph_bitmap_methods.js
Graph bitmap and mask computation methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_bitmap_methods.js
rendering_style_edge_telemetry_methods.js
Edge telemetry formatting and stylingelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_telemetry_methods.js
TimeseriesCombinedChart.js
Multi-series timeseries chart with tooltipselixir/web-ng/assets/js/hooks/charts/TimeseriesCombinedChart.js
rendering_tooltip_methods.js
Node and edge tooltip renderingelixir/web-ng/assets/js/lib/god_view/rendering_tooltip_methods.js
TimeseriesChart.js
Single-series timeseries chart with tooltipselixir/web-ng/assets/js/hooks/charts/TimeseriesChart.js
layout_topology_state_methods.js
Topology state and layout preparationelixir/web-ng/assets/js/lib/god_view/layout_topology_state_methods.js
SpatialSurveyMap.js
Spatial survey map visualizationelixir/web-ng/assets/js/hooks/SpatialSurveyMap.js
window_events.js
Global window event handlers and utilitieselixir/web-ng/assets/js/utils/window_events.js
layout_animation_methods.js
Layout animation and interpolationelixir/web-ng/assets/js/lib/god_view/layout_animation_methods.js
lifecycle_bootstrap_channel_event_methods.js
Channel event lifecycle managementelixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_channel_event_methods.js
formatters.js
Number formatting utilitieselixir/web-ng/assets/js/utils/formatters.js
nfFormatBytesfor byte value abbreviation (TB/GB/MB/KB)nfFormatBitsfor bit value abbreviationnfFormatCountPerSecfor rate formattingnfFormatRateValuefor unit-aware rate formattingrendering_graph_view_methods.js
Graph viewport auto-fit methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_view_methods.js
app.js
Application entry point and initializationelixir/web-ng/assets/js/app.js
lifecycle_bootstrap_runtime_methods.js
Lifecycle runtime bootstrap methodselixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_runtime_methods.js
thisreferencerendering_style_node_visual_methods.js
Node visual styling methodselixir/web-ng/assets/js/lib/god_view/rendering_style_node_visual_methods.js
GodViewRenderer.js
GodViewRenderer main orchestratorelixir/web-ng/assets/js/lib/GodViewRenderer.js
rendering_style_edge_topology_methods.js
Edge topology classification and filteringelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_topology_methods.js
index.js
Custom hooks module exportselixir/web-ng/assets/js/hooks/index.js
25 files
lifecycle_stream_decode_methods.test.js
Tests for Arrow graph stream decoding methodselixir/web-ng/assets/js/lib/god_view/lifecycle_stream_decode_methods.test.js
tableFromIPCoptional column handling, and null geo coordinates
directional links without reshaping
rendering_graph_data_methods.test.js
Tests for graph data rendering methodselixir/web-ng/assets/js/lib/god_view/rendering_graph_data_methods.test.js
and label normalization
telemetry eligibility preservation
directional flow field mapping
layout_cluster_methods.test.js
Tests for graph layout clustering methodselixir/web-ng/assets/js/lib/god_view/layout_cluster_methods.test.js
clustering transformations
histogram) and edge consolidation
orientation and topology class counting
mode
rendering_style_edge_particle_methods.test.js
Tests for packet flow particle generation and renderingelixir/web-ng/assets/js/lib/god_view/rendering_style_edge_particle_methods.test.js
visibility floor enforcement
eligibility filtering
ratios
renderer_deps.test.js
Tests for dependency injection builderselixir/web-ng/assets/js/lib/god_view/renderer_deps.test.js
between contexts
objects
wired
rendering_selection_methods.test.js
Tests for node selection and detail renderingelixir/web-ng/assets/js/lib/god_view/rendering_selection_methods.test.js
information
lifecycle_bootstrap_event_methods.test.js
Tests for lifecycle event bootstrap and registrationelixir/web-ng/assets/js/lib/god_view/lifecycle_bootstrap_event_methods.test.js
lifecycle_dom_interaction_methods.test.js
Tests for DOM interaction and animation loopelixir/web-ng/assets/js/lib/god_view/lifecycle_dom_interaction_methods.test.js
handling
interactions
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
rendering_graph_bitmap_methods.test.js
Bitmap and mask computation testselixir/web-ng/assets/js/lib/god_view/rendering_graph_bitmap_methods.test.js
rendering_graph_layer_transport_methods.test.js
Transport layer and effect rendering testselixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.test.js
layout_topology_state_methods.test.js
Topology state management testselixir/web-ng/assets/js/lib/god_view/layout_topology_state_methods.test.js
layout_topology_algorithm_methods.test.js
Layout algorithm testselixir/web-ng/assets/js/lib/god_view/layout_topology_algorithm_methods.test.js
rendering_tooltip_methods.test.js
Tooltip rendering testselixir/web-ng/assets/js/lib/god_view/rendering_tooltip_methods.test.js
lifecycle_stream_snapshot_methods.test.js
Snapshot stream parsing testselixir/web-ng/assets/js/lib/god_view/lifecycle_stream_snapshot_methods.test.js
lifecycle_bootstrap_channel_event_methods.test.js
Channel event lifecycle 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
deps_injection_contract.test.js
Dependency injection contract validationelixir/web-ng/assets/js/lib/god_view/deps_injection_contract.test.js
this.depsusages are declared in dependency mapsrendering_style_edge_telemetry_methods.test.js
Edge telemetry formatting 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 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 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.somePropertyGodViewRenderer_contracts.test.js
GodViewRenderer contract testselixir/web-ng/assets/js/lib/god_view/GodViewRenderer_contracts.test.js
rendering_graph_layer_node_methods.test.js
Node layer rendering testselixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_node_methods.test.js
GodViewLifecycleController_api_contract.test.js
Lifecycle controller API contract testselixir/web-ng/assets/js/lib/god_view/GodViewLifecycleController_api_contract.test.js
1 files
eslint.config.js
ESLint configuration with god view code patternselixir/web-ng/assets/eslint.config.js
this.stateandthis.depsusage patterns in god view methodsruntime_refsimports and direct property accessmessages
101 files
Imported GitHub PR review comment.
Original author: @github-advanced-security[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2959#discussion_r2868346521
Original created: 2026-03-01T03:47:23Z
Original path: elixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.js
Original line: 7
DOM text reinterpreted as HTML
DOM text is reinterpreted as HTML without escaping meta-characters.
Show more details
Imported GitHub PR comment.
Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2959#issuecomment-3979008741
Original created: 2026-03-01T03:49:10Z
PR Compliance Guide 🔍
Below is a summary of compliance checks for this PR:
DOM XSS risk
Description: Tooltip rendering assigns unescaped, data-derived strings into
tooltip.innerHTML(e.g.,src,dst,mid_value), enabling DOM XSS ifel.dataset.edgescontains attacker-controlledHTML/JS payloads. NetflowSankeyChart.js [72-283]
Referred Code
🎫 #2371
50k devicesinstead of50,000 devices).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
try { ... } catch (_e) {}blocks silently swallow errors (e.g., duringresize/remove/style updates), preventing actionable context and making production
debugging difficult.
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 error detail: The chart renders
String(e?.message || e || "unknown error")into the UI onfailure, which can expose internal implementation details to end users.
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 innerHTML: Tooltip content is built from
edgesfields and assigned viatooltip.innerHTMLwithoutescaping, allowing untrusted data to inject HTML/script into the page.
Referred Code
Generic: Comprehensive Audit Trails
Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.
Status:
Audit scope unclear: The visible diff is primarily client-side rendering code and does not show whether any
critical backend actions introduced in unprocessed files are logged with user/time/outcome
context.
Referred Code
Generic: Secure Logging Practices
Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.
Status:
Unstructured console logging: The code uses
console.warnfor map errors, and it is not clear from the diff whetherproduction logging is structured/scrubbed or if sensitive data could be logged elsewhere
in unprocessed changes.
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/2959#issuecomment-3979011871
Original created: 2026-03-01T03:50:42Z
PR Code Suggestions ✨
Explore these optional code suggestions:
Prevent XSS by avoiding innerHTML
To prevent a potential Cross-Site Scripting (XSS) vulnerability, replace the use
of
innerHTMLin theshowTooltipfunction. Instead, usereplaceChildrento safelyset the tooltip content with DOM nodes.
elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [72-81]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies a potential XSS vulnerability from using
innerHTMLand proposes a secure alternative (replaceChildren), which is a critical security improvement.Use correct method for metadata
Use
this._map.setMetadata()instead of modifying the object fromthis._map.getStyle()to correctly persist style metadata. The currentimplementation fails to save the metadata, breaking theme-switching logic.
elixir/web-ng/assets/js/hooks/MapboxFlowMap.js [168-173]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies that modifying the object returned by
getStyle()is ineffective, as it's a copy. This is a critical bug fix, as the logic for theme switching in_applyThemeStyledepends on this metadata being correctly set and retrieved. The proposed fix usingsetMetadata()is the correct approach according to the Mapbox GL JS API.Cleanup global DOM listeners
Add cleanup logic in the
destroyedlifecycle hook to remove global eventlisteners that were attached in
ensureDOM, preventing memory leaks.elixir/web-ng/assets/js/lib/god_view/lifecycle_dom_setup_methods.js [25-32]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 8
__
Why: The suggestion correctly identifies a memory leak due to unremoved event listeners and provides the correct fix, which is critical for the stability of a long-lived component.
Fix animation bug with modulo
Fix the
wavecalculation to handle negative results from the modulo operator,which can break the sweep animation. Ensure
waveis always positive by using((sweepTime - dist) % 400.0 + 400.0) % 400.0.elixir/web-ng/assets/js/lib/god_view/rendering_graph_layer_transport_methods.js [230-237]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 6
__
Why: The suggestion correctly identifies a subtle bug where the JavaScript modulo operator can return a negative value, which would break the intended "sweep wave" animation. The proposed fix is correct and ensures the animation works as intended.
Update component props instead of replacing
Refactor the
jdm_editor_updateevent handler to update the component via propsinstead of re-rendering a new component, improving efficiency and adhering to
React best practices.
elixir/web-ng/assets/js/hooks/JdmEditorHook.js [128-172]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 7
__
Why: The suggestion correctly identifies an inefficient and unconventional React pattern, proposing a refactor to a standard props-based data flow which improves performance and maintainability.
Enable browser caching for WASM assets
Change the cache policy for fetching the WebAssembly module from
no-storetodefaultto allow browser caching and improve load times on subsequent visits.elixir/web-ng/assets/js/wasm/god_view_exec_runtime.js [129-143]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 6
__
Why: The suggestion correctly points out that using
cache: "no-store"for a static WASM asset is inefficient and proposes changing it todefaultto leverage browser caching, which is a valid performance improvement.Reuse single tooltip instance
To improve performance, initialize the tooltip element once in the
mountedhookand store it as
this._tooltip. Reuse this instance in the_drawfunction insteadof calling
nfEnsureTooltipon every render.elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [69-70]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 5
__
Why: This suggestion improves performance and resource management by creating the tooltip element only once in
mountedand reusing it, which is more efficient than recreating it on every_drawcall.Strip trailing zeros in abbreviations
Improve number formatting in
fmtNumberby trimming unnecessary trailing zerosand decimal points from abbreviated outputs like "1.00G".
elixir/web-ng/assets/js/netflow_charts/util.js [165-172]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 5
__
Why: The suggestion improves the number formatting by removing unnecessary trailing zeros, which enhances readability (e.g., "1G" instead of "1.00G"). This is a good aesthetic and usability improvement.
Optimize redraw by clearing SVG conditionally
To improve rendering efficiency and reduce flickering, conditionally clear the
SVG content. Move the clearing logic to after the check for empty
edges, so theSVG is only cleared when there is new data to draw.
elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [109-114]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 4
__
Why: The suggestion offers a minor performance optimization by reordering operations to avoid clearing the SVG unnecessarily, which can help reduce flickering on redraws.
Use regex replace for compatibility
Replace
replaceAllwithreplaceusing a global regex flag in theescapeHtmlfunction to ensure broader browser compatibility.
elixir/web-ng/assets/js/lib/god_view/rendering_selection_methods.js [101-109]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 4
__
Why: The suggestion correctly points out that
replaceAllhas limited support in older browsers and proposes usingreplacewith a global flag for better compatibility. This is a valid improvement for ensuring the code runs reliably across more environments.Log JSON parse errors
To improve debugging, add a
console.warnstatement within thecatchblock forJSON.parse. This will log any errors that occur while parsing the Sankey edgesdata, making it easier to identify invalid data issues.
elixir/web-ng/assets/js/hooks/charts/NetflowSankeyChart.js [95-99]
[To ensure code accuracy, apply this suggestion manually]Suggestion importance[1-10]: 3
__
Why: The suggestion improves debuggability by logging an error when JSON parsing fails, which is helpful for diagnosing data-related issues, though it only offers a minor improvement to the code's robustness.
Pull request closed