You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
cloud provider icon set — 18 bundled icons (#215, PR #219): AWS, Azure, and GCP brand logos (Simple Icons, CC0) plus provider-badged device composites (cloud/aws-router, cloud/azure-firewall, ...) in a new Cloud picker group. The official architecture icon packs are not bundled for licensing reasons — scripts/fetch-cloud-icons.sh installs them onto your own Grafana, usable via a node's Custom icon URL
vendor icon set — 49 bundled icons (PR #190): 19 brand logos from the Simple Icons project (CC0) — Juniper, F5, Fortinet, Palo Alto Networks, MikroTik, Ubiquiti, Netgear, TP-Link, Huawei, SonicWall, Nokia, Ericsson, OPNsense, pfSense, OpenWrt, Dell, HP, Lenovo, Supermicro — plus 30 composite device icons (e.g. vendors/juniper-router, vendors/f5-load-balancer) combining Networking shapes with vendor corner badges. New Vendors group in the node icon picker; Icon Reference regenerated (1046 icons, 11 sets)
Bug Fixes
panel crash resilience for malformed or partial weathermap options — missing/partial options.weathermap, links referencing deleted nodes, and overlapping nodes (zero-length arrow vectors) no longer crash the panel; options are normalized before any dereference, malformed links are skipped, and SVG geometry can no longer contain NaN (#198, PR #206)
render purity — the options-schema migration no longer mutates the incoming saved options object, and neither the panel nor the editor calls onOptionsChange/onChange during render; migrated options are persisted from guarded effects after commit (#199, PR #210)
numeric inputs never store NaN — blank or mid-edit numeric fields (positions, panel size, zoom, offsets, icon sizes, thresholds, bandwidth) keep the previous valid value instead of writing NaN into saved options; 0 remains valid; the color-scale editor no longer leaks NaN into options through shared local edit state (#200, PR #211)
timeline and state synchronization — the pan offset resyncs when saved options change externally (dashboard reload, another session); VIA-chain data resolution no longer mutates rendered link state (multi-VIA chains included); node status now replays the timeline scrub position with raw step-hold sampling, matching link values during incident replay (#201, PR #212)
self-link anchor accounting — removing a self-link now decrements its shared anchor by 2 (mirroring add) and clamps at 0, so link spacing no longer drifts on affected nodes (#202, PR #209)
SVG export hardening — relative, root-relative, and absolute icon URLs resolve correctly; data:/blob: hrefs (any scheme casing) are left untouched; a failed or CORS-blocked icon fetch keeps the original href instead of aborting the whole export (#203, PR #207)
current-version partial configs no longer crash — a hand-edited or provisioned map with version: 14 but missing nested settings (or missing renderer-required leaves like panel.backgroundColor, panel.zoomScale, stroke/label colors) now repairs through the defaults deep-merge in both the panel and the editor (#224, #232, PRs #228, #234)
all editor and interaction updates are immutable — pan/drag persistence, node selection state, VIA insert/remove, and every form handler (116 sites) now deliver new object references instead of mutating the saved options in place; the form test harnesses deep-freeze props.value so the class stays closed (#238, PR #239) (#225, #233, PRs #229, #235)
no more React NaN warnings from blanked threshold fields — non-finite drafts render as an empty input (#226, PR #230)
deterministic mapping for duplicate display names — when two series share a display name, link values now resolve from the first frame, consistently with the query dropdown and node status, instead of silently taking whichever duplicate arrived last (#204, PR #213)
Chores (not part of the plugin archive)
E2E now also runs on pull requests that touch the E2E surface (tests/**, Playwright config, the workflow) while staying weekly/manual for ordinary PRs (#227, PR #231)
E2E baseline tests (#38, PR #216): Playwright/@grafana/plugin-e2e coverage for the core editor workflow — panel renders, add node, add link between two nodes, threshold change updates the color-scale legend — verified in CI against Grafana 11.0.0 and latest; version-tolerant visualization-picker driving, GRAFANA_URL/PW_CHANNEL targeting, and npm run e2e:local for the anonymous-admin testing stack. Includes stable inputIds on the link editor side selects (#167 pattern)
multi-datasource demo & docs — the testing/ stack now runs the same simulated WAN metrics through Prometheus, InfluxDB, Elasticsearch, and a full Zabbix 7.0 server simultaneously (one bridge, identical series names), with per-source WAN Demo — Utilization dashboards rendering the byte-identical map; a new Data Sources docs page covers per-source queries, the display-name binding rule, every deviation discovered (Influx value <series> naming, the Elasticsearch 65536-bucket limit, Zabbix data alignment and API memory/trends), and a live screenshot per source; frame-shape unit tests lock value/name resolution for each source's real frames (#253, #256, PRs #254, #255, #257, #258, #259, #261)
dependency security — npm audit is clean: the dompurify override tracks the patched ^3.4.11 line, js-yaml DoS advisories resolved in both dependency paths, and the transitive @opentelemetry/core/protobufjs advisories fixed without bumping the @grafana/* packages (PRs #237, #242)
CI hardening — dedicated E2E workflow (weekly + manual) against Grafana 11 and latest, broader push path filters (including .config/**), consistent dependency installs between test and release, and a PR-time plugin archive layout check that reads the plugin id from dist/plugin.json (#205, PR #208)