Commit Graph

64 Commits

Author SHA1 Message Date
Haris Rozajac f5aa39cc27 Dashboard Conversion: Add missing dev dashboards when comparing v1 to v2 conversion (#115967)
* descritpion and transformations

* add fieldMinMax to schema

* add nullValueMode to schema

* convert actions

* disabled prop in transformations

* update

* fix

* gauge

* remove index (deprecated) and decimals as strings

* gofmt

* codegen

* lint

* open api
2026-01-13 07:38:35 -07:00
Haris Rozajac 0d1ec94548 Dashboard Schema V2: Activate dashboard ds queries (#116085)
* support dashboard ds

* add test for getPanelDataSource
2026-01-12 08:15:10 -07:00
Haris Rozajac a79cda3328 Dashboard Conversion: Handle legacy string ds ref in panel queries datasources in V1-> V2 conversion (#116032) 2026-01-08 12:17:03 -07:00
Marc M. be734e970e CustomVariable: support values with multiple properties (json values format) (#113844)
* update Scenes libraries

---------

Co-authored-by: idastambuk <ida.stambuk@grafana.com>
2026-01-07 11:01:03 +01:00
Haris Rozajac ab4ccef319 Dashboard Conversion: Set panel level datasource when converting from v2 to v1 (#115777)
* set panel level ds when converting from v2 to v1

* remove comment

* lint

* always set ds in sqr

* improve

* Apply suggestions from code review

Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>

---------

Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
2026-01-05 07:37:57 -07:00
Kristina Demeshchik 967ba3acaf Dashboard: Fix dashboardUID in conversion logs to use actual dashboard UID (#115797)
udpate loggers
2026-01-02 13:12:04 -05:00
Haris Rozajac d291dfb35b Dashboard Conversion: Fix type assertion mismatch in data loss detection (#115749) 2025-12-30 08:51:46 -07:00
Oscar Kilhed 0b58cd3900 Dashboard: Remove BOMs from links during conversion (#115689)
* Dashboard: Add test case for BOM characters in link URLs

This test demonstrates the issue where BOM (Byte Order Mark) characters
in dashboard link URLs cause CUE validation errors during v1 to v2
conversion ('illegal byte order mark').

The test input contains BOMs in various URL locations:
- Dashboard links
- Panel data links
- Field config override links
- Options dataLinks
- Field config default links

* Dashboard: Strip BOM characters from URLs during v1 to v2 conversion

BOM (Byte Order Mark) characters in dashboard link URLs cause CUE
validation errors ('illegal byte order mark') when opening v2 dashboards.

This fix strips BOMs from all URL fields during conversion:
- Dashboard links
- Panel data links
- Field config override links
- Options dataLinks
- Field config default links

The stripBOM helper recursively processes nested structures to ensure
all string values have BOMs removed.

* Dashboard: Strip BOM characters in frontend v2 conversion

Add stripBOMs parameter to sortedDeepCloneWithoutNulls utility to remove
Byte Order Mark (U+FEFF) characters from all strings when serializing
dashboards to v2 format.

This prevents CUE validation errors ('illegal byte order mark') that occur
when BOMs are present in any string field. BOMs can be introduced through
copy/paste from certain editors or text sources.

Applied at the final serialization step so it catches BOMs from:
- Existing v1 dashboards being converted
- New data entered during dashboard editing
2025-12-29 09:53:45 +01:00
Haris Rozajac 15b5dcda80 Dashboard V1->V2 Conversion: Default multi to true in GroupBy when multi is not defined in v1 (#115656)
default multi to true when multi is not defined in v1
2025-12-22 11:00:37 +00:00
Paul Marbach 8cfac85b48 Gauge: Add guide dots for rounded bars to help with accuracy, update color logic for more consistent gradients (#115285)
* Gauge: Fit-and-finish tweaks to glows, text position, and sparkline size

* adjust text height and positions a little more

* cohesive no data handling

* more tweaks

* fix migration test

* Fix JSON formatting by adding missing newline

* remove new line

* Gauge: Add guide dots for rounded bars to help with accuracy

* 30% width

* remove spotlight, starting to make gradients a bit more predictable

* fix segmented

* update rotation of gauge color

* update i18n and migration tests

* fix spacing

* more fixture updates

* wip: using clip-path and CSS for drawing the gauge

* wip: overhaul color in gauge

* wip: progress on everything

* refactoring defs into utils

* its all working

* fixme comment

* fix backend migration tests

* remove any other mentions of spotlights

* one more tweak

* update gdev

* add lots of tests and reorganize the code a bit

* fix dev dashboard fixture

* more cleanup, optimization

* fix a couple of bugs

* fix bad import

* disable storybook test due to false positive

* a more sweeping disable of the color-contrast

* update backend tests

* update gradient for fixed color

* test all dark/light theme variants

* set opacity to 0.5 for dots

* move min degrees for start dot render to a const

* change endpoint marks to be configurable

* update gdev and fixtures

* i18n

* shore up testing a bit

* remove period for consistency

* hide glow at small angles

* more testing and cleanup

* addressing PR comments

* Update packages/grafana-ui/src/components/RadialGauge/colors.ts

Co-authored-by: Jesse David Peterson <jesdavpet@users.noreply.github.com>

* Update packages/grafana-ui/src/components/RadialGauge/colors.ts

Co-authored-by: Jesse David Peterson <jesdavpet@users.noreply.github.com>

* break out binary search stuff and write tests

* fix lint issues

---------

Co-authored-by: Jesse David Peterson <jesdavpet@users.noreply.github.com>
2025-12-19 20:41:57 +00:00
Haris Rozajac 37c1e3fb02 Dashboard Schema v1beta1 to v2alpha1: Preserve string template variable datasource references in query variables (#115516)
* Dashboard migration: preserve legacy string datasource references

Fix v1beta1 → v2alpha1 conversion to handle legacy string datasource
references in QueryVariable, AdhocVariable, and GroupByVariable.

Previously, string datasource references (both template variables like
"$datasource" and direct names/UIDs like "prometheus") were being
dropped during conversion, causing variable chaining to break.

The frontend's DatasourceSrv.getInstanceSettings() already handles
string references by trying uid → name → id lookup at runtime, so we
preserve the string in the uid field and let the frontend resolve it.

* trigger frontend ci tests when dashboard migration code changes

* v1: if string convert to DS ref

* Update migration testdata to fix template variable datasource references

* update
2025-12-18 15:11:09 -07:00
Kristina Demeshchik 7e5eb46bea Dashboards: Fix text panel content loss during v1 to v2 migration (#115496)
* move content and mode properties to options level

* move to angular section

* Update comments

* handle missing angular text panel

* re-generate test files

* angualr panels tests

* fixing test

* Update output files

* Update output for dev dashboard

* Spread options at the top panel level for migration

* linting issue

---------

Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
2025-12-18 09:59:58 -05:00
Oscar Kilhed a2a278a52e Schema V2: Always set unique refid for queries in conversion V1 -> V2 (#115534)
Always set unique refid in conversion
2025-12-18 09:12:31 +00:00
Sergej-Vlasov f3d4181cf2 V2 -> V1 conversion: include empty properties array when converting overrides (#115495)
* adjust conversion file to include empty properties array in overrides

* fix lint error

* add test case for empty properties and fix incorrect regex to v1 conversion
2025-12-17 18:07:06 +01:00
Ivan Ortega Alba dfd396b06c Dashboard: Support Angular panel migrations in v2 schema (#115368)
* V2: Support angular panel migrations

* Add autoMigrateFrom and update ensureV2

* Remove context files

* Simplify angular migration handler

* linter

* Only include angular options in angular panel data
2025-12-16 22:39:21 +01:00
Oscar Kilhed c7c1dd4ead V2 Schema: Fix panel Y position when converting from tabs to legacy rows in V2 -> v1 conversion. (#115373)
* fix row y conversion

* fix only for tabs

* add tests examples
2025-12-16 13:47:26 +01:00
Haris Rozajac 8979808e4a Dashboard V1 -> V2 conversion: Rows with hidden header should never be collapsed (#115290)
* rows with hidden header should never be collapsed

* fix test

* shouldn't need to normalize this

* fix frontend conversion

* fix lint

* Update public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts

Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>

---------

Co-authored-by: oscarkilhed <oscar.kilhed@grafana.com>
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
2025-12-15 18:08:35 +00:00
Ivan Ortega Alba ca0c09cb73 DashboardV2: Fix value mapping v1 to v2 (#115331)
* DashboardV2: Fix value mapping v1 to v2

* Update apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>

---------

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-12-15 12:50:10 +00:00
Ivan Ortega Alba 8aab6302c5 Fix conversion error shallowed and normalize conversion status (#115086)
* Fix the conversion shallowed error and normalize the conversion status

* Add unit tests to ensure all permutations data loss detection

* Fix counting issue
2025-12-11 08:01:31 +00:00
Stephanie Hingtgen 3697c8dafc Dashboards: Fix logging for conversions (#115126) 2025-12-10 23:52:35 -06:00
Paul Marbach 63bfc1596c Gauge: Updates to the design of the panel edit (#115097)
* Gauge: Updates to the design of the panel edit

* i18n

* remove unused const

* i18n

* fix gdev and migration tests

* reduce bar gauge glow factor
2025-12-10 21:03:44 +00:00
Rafael Bortolon Paulovic 8c6ccdd1ab feat(dashboard): Org-aware cache for schema migration (#115025)
* fix: use dsIndexProvider cache on migrations

* chore: use same comment as before

* feat: org-aware TTL cache for schemaversion migration and warmup for single tenant

* chore: use LRU cache

* chore: change DefaultCacheTTL to 1 minute

* chore: address copilot reviews

* chore: use expirable cache

* chore: remove unused import
2025-12-10 16:09:16 +01:00
Kristina Demeshchik 533ee1f078 Dashboard : Allow applying variable regex to display text (#114426)
* Ability to apply regex to display text

* Frontend tests

* scenes-react version

* lock file

* adjust tests input

* adjust inputs

* unused variable

* change data type

* unit tests

* bump scenes

* bump scenes

* Update docs

* V2->V1 conversion

* re-generate files

* update openai snapshots
2025-12-09 10:55:51 -05:00
Rafael Bortolon Paulovic 45e679eeba fix: use dsIndexProvider cache on schema migrations (#115018)
* fix: use dsIndexProvider cache on migrations

* chore: use same comment as before
2025-12-09 16:54:54 +01:00
Rafael Bortolon Paulovic 297e886e1b fix: remove dsIndexProvider from Convert_V2alpha1_to_V0 (#115017) 2025-12-09 16:33:43 +01:00
Oscar Kilhed dab64addf8 SchemaV2: Always set ad hoc filters to empty array when converting to v2 (#114914)
* Always set ad hoc filters to empty array when converting to v2

* Update test files
2025-12-08 11:27:55 +01:00
Ryan McKinley 5ac702a4c1 Dashboards: update manifest to avoid useoldmanifestkinds (#114910) 2025-12-05 16:21:30 +02:00
Dominik Prokop 1ba57a505a v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114779)
* Reapply "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555)"

This reverts commit db9cff8e2d.

* Update input and fix the failing test
2025-12-04 09:23:45 +01:00
Ivan Ortega Alba c8853f50cf Dashboard migration: Implement v2 to v0 conversions (#114812)
* Update docs

* Remove 406 response since now it is converted

* fix linter

---------

Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
2025-12-04 05:08:03 +00:00
Dominik Prokop bb787a2637 Schema v2: Move annotation mappings out of legacyOptions (#114721)
* Add mappings property to v2(alpha/beta)1

* Mappings convetions

* OpenAPI spec

* fe annotaations mapping

* Update snapshots

* v2->v1 conversion

* fix tests

---------

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-03 10:19:21 +01:00
Dominik Prokop 2ef211fe96 Revert "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555) (#114725)
Revert "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555)"

This reverts commit ac62070ac7.
2025-12-02 19:07:11 +00:00
Dominik Prokop ac62070ac7 v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555) 2025-12-02 17:34:45 +00:00
Ivan Ortega Alba 39d0dbeddc Dashboard: Transform v2alpha1 to v1beta1 (#114024)
Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-02 09:27:26 -07:00
Levente Balogh 0e6166a753 Dashboard Controls: Fix schema transformation for link placement (#114630)
* fix: add missing transformation for scenes -> save model v2

* fix: link placement transformation on the backend between schemas

* fix: update the openapi spec in the tests

* tes: add tests for `transformSceneToSaveModelSchemaV2`

* tests: extend conversion_test.go to cover link placements
2025-12-02 13:12:01 +00:00
Levente Balogh 930f7ce489 Dashboards: Cover the Switch variable in schema transformations - part 2. (#114549)
* feat: add v2alpha_1 conversion for the switch variable

* chore: gofmt fixes

* chore: update comments in tests

* chore: fix gofmt

* Update specs

* tests: update the v2alpha1 openapi snapshot

---------

Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
2025-11-28 14:21:33 +01:00
Oscar Kilhed e09905df35 SchemaV2: Add library panel repeat options to v2 schema during conversion (#114109)
* Add library panel repeat options to v2 schema during conversion

* use any instead of interface{}

* change to common.Unstructured instead of byte[] for model field

* Fix the tests and let the library panel behavior fetch repeat options in public and scripted dashboards

* fix library panel differences between backend and frontend conversion
2025-11-21 11:41:03 +01:00
Ivan Ortega Alba 40fb421556 Schema: Implement v2beta1 → v2alpha1 conversion (#113876) 2025-11-19 15:56:33 +01:00
Costa Alexoglou faabe2e46d feat: add library elements to dash service (#114016) 2025-11-18 09:21:05 +01:00
Jean-Philippe Quéméner 9dd8c85448 feat(dashboards): add ttl based caching for datasources (#113999) 2025-11-17 09:48:17 +01:00
Jean-Philippe Quéméner 64c61c6916 fix(dashboards): use index for schema migration datasource lookups (#113911) 2025-11-17 08:56:54 +01:00
Jean-Philippe Quéméner a8dda428ce fix(dashboard): proper check int size (#113766) 2025-11-12 15:35:38 +00:00
Jean-Philippe Quéméner 16ddd536ab fix(dashboard): proper check uint32 size (#113760) 2025-11-12 14:55:59 +00:00
Ivan Ortega Alba e463781077 Schema: convert dashboards from v1beta1 to v2beta1 (#109037)
- Implement full conversion pipeline from v1beta1 → v2beta1
- Ensure frontend–backend parity for all dashboard serialization paths
- Add automatic data loss detection for conversions (panels, queries, annotations, links, variables)
- Extract atomic conversion functions for v0 → v1beta1 → v2alpha1 → v2beta1
- Introduce conversion metrics and detailed logging for loss tracking
- Normalize datasource resolution, defaults, and annotation processing
- Improve panel layout serialization and y-coordinate normalization
- Fix inconsistencies in nested panels and collapsed row behavior
- Refine variable handling:
  - Filter refId from variable query specs
  - Default variable refresh to 'never' (matches frontend)
  - Fix constant and interval variable handling for missing queries
- Unify schema defaults (enable, hide, iconColor, editable, liveNow)
- Fix pluginId usage (UID vs type) and datasource references
- Fix metrics.go bug swallowing errors (return nil → return err)
- Add tests for version-specific conversion error handling
- Add data loss detection tests using source/target version comparison
- Clean up lint issues, legacy code, and redundant files
- Update OpenAPI snapshots and migrated dashboards
- Improve backend migrator to reuse datasource provider and match frontend logic

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
Co-authored-by: Oscar Kilhed <oscar.kilhed@grafana.com>
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
2025-11-12 11:43:46 +01:00
Haris Rozajac 394922c4c8 Dashboard Migrations: V6 pulldowns to annotations; variables (#112221)
* migrate to v19

* migrate to v18

* Migration to be verified: v17 Convert minSpan to maxPerRow in panels

* Migration to be verified: 16 Grid layout migration

* Refactor v17 and v19 migrations to use shared helper functions

* Migration to be verified: 15 No-op migration for schema consistency

* Migration to be verified: 14 Shared crosshair to graph tooltip migration

* cleanup

* wip

* complete migration

* fix lint issues

* refactor and test with minimal graph config

* update tests

* migrate to v12

* extract defaults outside the func

* lint

* lint

* add missing showValues prop

* migrate to v11

* migrate to v10

* add test files

* update

* migrate to v9

* migrate to v8

* add context and fix latest version

* add context

* add context

* generate snapshots

* v13 should be no-op

* clean up

* fix tests

* add context

* snapshots

* generate snapshots

* update

* snapshots

* wip

* fix test

* remove nav when cleaning up defaults

* migrate to v6

* update comments

* remove v28

* remove singlestat migraiton from frontend migrator because this is an automigration

* remove unused function

* Remove v24 table plugin logic

* cleanup

* remove plugin version for automigrate as it was used only in v24 and v28 that have been removed

* cleanup

* update snapshot

* update snapshot

* update snapshot

* update snapshot

* remove test

---------

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-10-14 07:16:34 -06:00
Ryan McKinley fdccc3e33c Dashboards/API: Keep original when conversion fails (#109912)
* keep original

* openapi

* update tests

* workspace

* workspace

* fix ts

* merge main

* update snapshots
2025-10-10 15:37:32 +03:00
Ivan Ortega Alba a72e02f88a Fix dashboard migration discrepancies between backend and frontend implementations (use toEqual) (#110268)
**Highlights**

* **Single-version migrations**: add `targetVersion` to migrator & model, separate outputs, enforce exact version.
* **Datasource fixes**: include `apiVersion` in tests, empty-string → `{}`, preserve `{}` refs, drop unwanted defaults.
* **Panel defaults & nesting**: only top-level panels get defaults; preserve empty `transformations` context-aware; filter repeated panels.

* **Migration parity**

  * V16: collapsed rows, grid height parsing (`px`).
  * V17: omit `maxPerRow` when `minSpan=1`.
  * V19–V20: cleanup defaults (`targetBlank`, style).
  * V23–V24: template vars + table panel consistency.
  * V28: full singlestat/stat parity, mappings & color.
  * V30–V36: threshold logic, empty refs, nested targets.
* **Save-model cleanup**: replicate frontend defaults/filtering, drop null IDs, metadata, unused props.
* **Testing**: unified suites, dev dashboards (v42), full unit coverage for major migrations.

Co-authored-by: Ivan Ortega [ivanortegaalba@gmail.com](mailto:ivanortegaalba@gmail.com)
Co-authored-by: Dominik Prokop [dominik.prokop@grafana.com](mailto:dominik.prokop@grafana.com)
2025-09-24 12:20:25 +02:00
Haris Rozajac 0aa5dee86a Dashboard Migrations: Report metrics when migration fails (#111212)
* return migration error when running a conversionFunc

* fix tests
2025-09-18 08:11:15 -06:00
Ryan McKinley 0a79b3bdc5 Chore: Upgrade k8s.io/api v0.34.1 and grafana-app-sdk v0.43.1 (#111009) 2025-09-16 13:35:20 +03:00
Dominik Prokop b4e63c36c3 Migration v42: HideFrom tooltip consistency migration (#110517)
* Migration to be verified: v42 HideFrom tooltip migration

* snap update

* make gen cue

* Add comments of 42 being the final version
2025-09-05 15:07:30 +02:00
Ryan McKinley 8052ecb3ba Dashboards: Remove panel plugin provider from migrations (#110477) 2025-09-04 14:17:22 +03:00