Repository navigation
Convert the pilot OOB dashboards to SmartViz - #180
Merged
Merged
Conversation
Default dashboards still use classic visualisations on most tiles, and there are a few hundred of them, so converting them by hand would be slow and uneven. The script replaces each classic `visualisation` with a `vizSpec` in place, so a conversion PR's diff shows only the tiles that changed. It works from the repository alone, because most plugins have no live environment to test against. Columns, types and headers come from the classic config, the tile's group and metadata, and the stream's declared metadata. Where converting would mean guessing (a table that shows every column of an undeclared stream, more than 12 table columns, a chart that plots some but not all numeric columns, an auto-picked scalar value) the tile is reported as blocked and left classic. Table columns follow the in-product SmartViz migration: `columnOrder` minus `hiddenColumns` is the shown set. Cells use the text renderer unless the shape is state, date or URL, because the number renderer reformats values and would drop units and decimal places. A dry run over every community plugin converts 809 tiles. Every spec passes the viz-spec schema from saas, and 43 tiles are left classic. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
The first wave of the SmartViz OOB upgrade, done with scripts/classic-to-smartviz. These three plugins need no credentials, so their dashboards can be checked against live data. - TransportForLondon 1.0.7: the arrivals table and the line status blocks (now a status grid, with the status description as each block's second line). - WorldCup2026 1.2.3: the four team tables. - OpenF1 1.1.1: nine tables and the lap times chart. Some tiles stay classic. The OpenF1 properties tables and the driver photo stay as they are, as on every SmartViz-first plugin. Weather plots air and track temperature, which are two of the stream's seven numeric columns, and SmartViz can plot only one y column or all of them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
The lap times chart split its lines by car number, so the legend read "1, 4, 11, 16…". The laps stream already carries the driver's name, which the session tables show, so the lines now use that instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Before/after screenshots of the pilot showed the World Cup "Last Match" result reading "Success" in SmartViz where classic showed "Win". The state shape maps Win/Loss/Draw to success/error/unknown, and the status renderer shows the mapped state. Classic got away with it because it appended the platform's "Result (raw)" column. A state column with a value map now converts to that raw column, `<name>[Expanded].rawState`, with a badge renderer coloured by the map, so the cell reads "Win" in green. The World Cup tile was converted before this rule existed, so it is updated by hand to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
The converter now improves a tile on top of the like-for-like conversion where the repository alone shows it is safe: relative times for "last seen" style dates, health colours for status words, progress bars for percent columns, a 0–100 axis and gauge range for percentages, and Yes / No for booleans. Each rule works from column shapes, names and the converted spec, so none depends on what the data holds. A rule runs only on tiles converted in that run, so hand-built SmartViz tiles are never touched. Rules are on by default and chosen with --rules (all, none, or a list), and the report shows every rule that fired on each tile. Across the community plugins not yet converted they fire on 45 tiles for status colours, 38 for recency dates, 27 for booleans, 22 for progress bars and 4 for the percent axis. Every rule-enhanced spec passes the viz-spec schema. A rule turning monitor thresholds into gauge bands was dropped. On the OOB tiles that have a monitor, the monitor tests a different column from the one the gauge draws, or counts rows across the whole table. So it would almost never fire. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Regenerating the pilot dashboards with the converter's enhancement rules on changes only these three session result columns, which now read Yes / No instead of true / false. The rest of the pilot output is unchanged, including the World Cup result badge, which the rules now produce. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
The enhancement-rules commit accidentally took classic copies of these dashboards with it: they had been staged while the pilot was being regenerated from main. This puts back the converted versions, which are unchanged from before that commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Before/after screenshots of ProxmoxVE, Healthchecks.io, CrowdStrike and
GoogleHealth dashboards, with demo data, turned up five problems:
- Mapped state badges were blank for computed columns. The platform
adds the `[Expanded].rawState` copy only for columns read from the
response, so a computed state column keeps the status renderer.
- A status-block sublabel naming `status[Expanded].rawState` rendered
nothing, because Handlebars reads the dots and brackets as a path.
Names that are not plain identifiers now use `{{lookup this "…"}}`.
- Chart axes and legends showed raw field names such as
`backupGroup_uniqueValues`, because SmartViz falls back to the field
name when a channel has no title. Channels now carry the column's
display name.
- Scalars with no label in classic showed their field name ("count")
under the number. They now set no label, as classic did.
- "Not monitored" and "Paused" join the status colours, as grey, so
a health donut no longer shows them in a palette colour.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Regenerated with the converter's fixes: the lap times channels now carry "Lap", "Lap Time" and "Driver" as titles rather than leaving SmartViz to fall back to the raw field names. The other pilot dashboards come out unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
When a plugin's default dashboards are installed, the platform runs the
whole dashboard through Handlebars to fill in stream and config ids.
That also resolves SmartViz templates, and with no `value` or
`servingVariation` in scope they render as empty strings:
- EcoStruxureIT-DCE: the Temperature and Humidity label formats on the
device and environmental dashboards.
- LaunchDarkly: the serving-variation second line on the flag state
and environment state status grids.
Each template is now wrapped in {{{{raw}}}} so it reaches SmartViz
intact, as Auvik's already are.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
A dry run over squaredup-plugin-repository blocked about 100 tiles for reasons on the converter's side rather than SmartViz's: - A packaged plugin's data_streams.json metadata is not the full column list, because its handler can return columns the metadata does not declare. Treating it as complete flagged real columns such as `count` and `label` as missing. It is now treated as partial. - A donut whose label column a later group replaced fell back, in classic, to the group's category column. It now does the same instead of being left classic. - Classic donut `palette` colours, keyed by label, now carry over as `mappedColors`. squaredup-plugin-repository now converts 1,049 tiles, up from 948, and what still blocks is down to SmartViz product gaps. The community repo is unchanged at 809 converted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
SmartViz now allows up to 50 table columns, and a scalar with scalarRowCount set no longer needs a value column (saas #10217). The converter maps classic row counts to scalarRowCount and raises its table cap to 50, so 108 more OOB tiles convert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
SmartViz now finds a channel left out of the spec in the data as classic does, plots a list of y columns, and labels donuts with name and percentage (saas #10225). The converter uses these: a column classic left on auto is left out of the spec, several y columns become a list, properties-stream tiles convert, "show values as percentage" maps to pieLabels nameAndPercent, and percent table columns use the bar renderer out of 100 instead of the always-green progress bar. Across both plugin repos, 2,441 of 2,470 classic OOB tiles now convert. Tables that hide or rename columns of a stream with no full column list still stay classic. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Classic stacks a bar chart's y columns unless grouping is on, but the converter only stacked bars split by a series column, so a chart of several y columns drew them side by side. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Re-running the converter on the pilot plugins' main dashboards now also converts OpenF1's Driver Details and Meeting Details tables and the Weather chart, which SmartViz could not show before. Every tile the pilot had already converted comes out unchanged; the Lap Times lines stay named after the driver. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
Contributor
|
Warning Review limit reached
This review includes 16 billable files and costs up to $4.00.
Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing. Or wait 14 minutes for your next included review. View limit details
|
This pull request now carries only the converted pilot dashboards and the template fixes. The script stays in this branch's history (579ce98) for later conversion phases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi
🧩 Plugin PR Summary📦 Modified Plugins
📋 Results
|
Member
Author
|
Tested and all are good migrations from classic -> smartviz. Merging this pilot PR. |
5 of 14 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📋 Summary
This PR converts the classic tiles in the out-of-the-box dashboards of three pilot plugins to SmartViz: TransportForLondon, WorldCup2026 and OpenF1. It's phase 0 of moving every OOB dashboard to SmartViz. OpenF1's Driver Photo tile stays classic, because SmartViz has no iframe equivalent.
It also fixes EcoStruxureIT-DCE and LaunchDarkly, whose SmartViz value labels and status grid lines were showing up blank. Install-time templating runs the whole dashboard through Handlebars and empties any expression it doesn't recognise, so I've wrapped their SmartViz templates in
{{{{raw}}}}(the same thing Auvik does).Note
This PR changes five plugins, so the single-plugin CI check will fail. That's deliberate: the conversion is going in grouped waves, and an admin will need to override the check.
🧩 Plugin details
🧪 Testing
I deployed the classic (
main) and converted versions of the pilot plugins to a DEV organization and compared every dashboard side by side: TfL and World Cup 2026 with live data, OpenF1 with demo data.squaredup validatepasses for all five plugins.A few things haven't been rendered yet: three OpenF1 tiles (Driver Details, Meeting Details and Weather) and the EcoStruxureIT-DCE and LaunchDarkly fixes.
Known differences from classic: status cells show the state name rather than the value, clicking a donut slice or bar doesn't open a filtered view, and OpenF1 Lap Times hides line markers to match classic (so a driver with a single lap draws nothing, as in classic).
Does this PR introduce any breaking changes?
📚 Documentation
✅ Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01DsSxB9yhNwiJp2KU2D8Upi