Compare commits

...

72 Commits

Author SHA1 Message Date
Yuri Tseretyan 4236845ea8 register endpoint 2026-01-05 12:47:21 -05:00
Yuri Tseretyan d4e94cef50 define a custom route for receiver testing 2026-01-05 12:47:21 -05:00
Yuri Tseretyan c723526f4e integration testing svc 2026-01-05 12:47:21 -05:00
Yuri Tseretyan e56fc80d93 create testintegration method 2026-01-05 12:47:20 -05:00
Yuri Tseretyan dfaa5ec1d4 refactor: extract conversion to integration to ConvertReceiverIntegrationToIntegration 2026-01-05 12:46:26 -05:00
Yuri Tseretyan 4abd88ec95 refactor: consolidate all encrypt\decrypt functions 2026-01-05 12:46:26 -05:00
Yuri Tseretyan 405871d41d refactor: change GetReceiver to get by UID
to avoid conversions of name to uid back an forth
2026-01-05 12:46:25 -05:00
Will Browne 618316a2f7 Revert "App Plugins: Allow to define experimental pages" (#115841)
Revert "App Plugins: Allow to define experimental pages (#114232)"

This reverts commit e1a2f178e7.
2026-01-05 17:04:07 +00:00
vesalaakso-oura a9c2117aa7 Transformers: Add smoothing transformer (#111077)
* Transformers: Add smoothing transformer

Added a smoothing transformer to help clean up noisy time series data.
It uses the ASAP algorithm to pick the most important data points while
keeping the overall shape and trends intact.

The transformer always keeps the first and last points so you get the
complete time range. I also added a test for it.

* Change category

Change category from Reformat to CalculateNewFields

* Remove first/last point preservation

* Fix operator recreation

* Simplify ASAP code

Include performance optimization as well

* Refactor interpolateFromSmoothedCurve

Break function into smaller focused functions and lift functions to the
top level

* Add isApplicable Check

Make sure the transformer is applicable for timeseries data

* Add tests for isApplicable check

* UI/UX improvements: Display effective resolution when limited by data points

Show "Effective: X" indicator when resolution is capped by the 2x data
points multiplier. Includes tooltip explaining the limit.

Memoizes calculation to prevent unnecessary recalculation on re-renders.

Example: With 72 data points and resolution set to 150, displays
"Effective: 144" since the limit is 72 x 2 = 144.

Plus added tests

* Improve discoverability by adding tags

* Preserve Original Data

Let's preserve original data as well, makes the UX so much better.
Changed from appending (smoothed) to frame names to use Smoothed frame name. This should match the pattern used by other transformers (e.g,. regression)
Updated tests accordingly
Updated tooltip note

* Add asap tests

Basic functionality:
* returns valid DataPoint objects
* Maintain x-axis ordering

Edge cases:
* Empty array
* single data point
* filter NaN values
* all NaN values
* sort unsorted data
* negative values

* Update dark and light images

* Clear state cache

* Add feature toggle

* Conditionally add new transformation to the registry

* chore: update and regenerate feature toggles

* chore: update yarn.lock

* chore: fix transformers and imports
2026-01-05 17:53:45 +01:00
renovate-sh-app[bot] bc31a768f7 chore(deps): update dependency nodemailer to v7.0.11 [security] (#115182)
| datasource | package    | from  | to     |
| ---------- | ---------- | ----- | ------ |
| npm        | nodemailer | 7.0.7 | 7.0.11 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2026-01-05 16:40:56 +00:00
Isabella Siu 52c035defc Cloudwatch: fix aws authentication doc links (#115805) 2026-01-05 11:25:41 -05:00
Yuri Tseretyan 7ba2c559c4 Alerting: Add support for client certificate authentication and TLS options to External Alertmanager (#115716)
* add support for skip TLS verify

* extract constructor for ExternalAMcfg and tests

* extract constructor for AlertmanagerConfig and tests

* add support for client cert auth
2026-01-05 16:19:29 +00:00
Andreas Christou c1f95a2713 Graphite: Fix series naming convention in backend mode (#115588)
Fix series naming convention
2026-01-05 16:04:17 +00:00
Stephanie Hingtgen 158fc09015 Zanzana: Reset on migration failures (#115806) 2026-01-05 09:55:26 -06:00
Stephanie Hingtgen e9e507a887 Zanzana: Add reconcilation verbs (#115772) 2026-01-05 09:48:00 -06:00
Stephanie Hingtgen dc992b62b6 Zanzana: Only increment reconciliation metric if successful across all namespaces (#115807) 2026-01-05 09:47:51 -06:00
Ashley Harrison 6adc45bf30 FS: Allow anonymous access to snapshot route (#115829)
allow anonymous access to snapshot route
2026-01-05 15:27:49 +00:00
Ashley Harrison e310d5e8ee FS: Only attempt session rotation if expiration cookie exists (#115824)
don't attempt rotation if no expiration cookie exists
2026-01-05 15:27:35 +00:00
Adela Almasan 5698f2d039 Tooltips: Prevent dismissing with keyboard shortcuts (#115802) 2026-01-05 08:56:21 -06:00
Jesse David Peterson d8cdee80f0 Canvas: Fix image loading when icon element SVG defined by field mappings (#115748)
* chore(gdev-dashboard): minimal repro of escalation #19939 bug report

* fix(canvas): add branching logic to handle field mapping to icons case

* test(canvas): validate integration of canvas icon mappings

* refactor(resource-dimension): defensive against JS `undefined` in paths
2026-01-05 10:48:16 -04:00
Deyan Halachliyski e8e2f95637 Alerting: Add Alert activity card to alerting home page (#115822) 2026-01-05 15:42:56 +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
Will Browne 99cabcb8be Plugins: Remove pkg/services/org and pkg/services/pluginsintegration/pluginerrs dependencies (#115820)
* remove deps from pkg/plugins

* fmt

* lint fix
2026-01-05 14:10:44 +00:00
Atharv Mudse b4a65ac5ac Prometheus Dashboards: Use $__rate_interval instead of hardcoded value (#111899)
* Prometheus Dashboards: Use __rate_interval #110370 fix(prometheus): use  in stats dashboard

* Added required changes to F:\grafana\public\app\plugins\datasource\prometheus\dashboards\prometheus_2_stats.json file

* removed empty line

* removed all steps
2026-01-05 13:14:30 +00:00
Alexander Akhmetov 872ed5dc9d Alerting: Add plugins:hide backend rule search parameter (#113706)
Alerting: Add plugins filter to list rules API
2026-01-05 13:17:51 +01:00
Will Browne 70b1053ad1 Plugins: Remove pkg/infra/fs, pkg/infra/tracing and pkg/infra/process dependencies from pkg/plugins (#115798)
* remove dependency on packages

* update tests

* trigger
2026-01-05 11:12:31 +00:00
Josh Hunt 4e3039e4bd Chore: Bump qs (#115815)
Bumps qs package in transitive dependencies to version 6.14.1
2026-01-05 11:02:52 +00:00
Akshat Sinha c05e1bd43a Auth: Cleanup duplicate isGroupMember methods from OAuth connectors (#115786)
Remove duplicate isGroupMember methods from OAuth connectors
2026-01-05 11:35:28 +01:00
Gabriel MABILLE 93566ce4ef Chore: Unify token exchange round trippers (#115609)
* Chore: Unify token exchange rount trippers

* Remove the conditional provider for now

* Remove unecessary strategy

* test cleanup

* Lint
2026-01-05 11:23:35 +01:00
Mariell Hoversholm 76a6db818e Frontend: Remove bootstrap (#115813) 2026-01-05 11:07:23 +01:00
Will Browne 1a0bc39ec3 Plugins: Remove some pkg/infra/* dependencies from pkg/plugins (#115795)
* tackle some /pkg/infra/* packages

* run make update-workspace

* add owner for slugify dep
2026-01-05 09:42:47 +00:00
Gareth 3b3e87ff89 OpenTSDB: Migrate frontend requests to data source backend (#115221)
* OpenTSDB: Migrate metadata queries to data source backend

* OpenTSDB: Migrate annotations to the data source backend

* return errors for failed unmarshal

* remove trailing / from metadata requests

* remove console logs
2026-01-05 18:35:19 +09:00
Stephanie Hingtgen eb2a390425 Unistore: Prevent deadlock on startup errors (#115799) 2026-01-05 00:51:23 -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
Will Browne 105b407629 Plugins: Sync validator plugin.json schema copy edits back to source of truth (#115790)
sync validator copy edits back to source of truth
2026-01-02 15:52:10 +00:00
Mustafa Sencer Özcan dc4c106e91 fix: use memory index if index file already open (#115720)
* feat: add lock structure into bleve index files

* fix: another approach

* fix: new check

* fix: build in memory if index file already open

* fix: update workspace

* fix: add test

* refactor: update func signature

* fix: address comments

* fix: make const
2026-01-02 13:51:51 +01:00
Kristina Demeshchik 33a1c60433 Dashboard: Add lazy loading for repeated panels (#115047)
Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
2026-01-02 08:15:40 +01:00
Stephanie Hingtgen 521670981a Zanzana: Add metric for last reconciliation (#115768) 2025-12-31 12:42:09 -06:00
alerting-team[bot] 79ca4e5aec Alerting: Update alerting module to b7821017d69f2e31500fc0e49cd0ba3b85372a1b (#115767)
* [create-pull-request] automated change

* Fix tests

---------

Co-authored-by: alexander-akhmetov <1875873+alexander-akhmetov@users.noreply.github.com>
Co-authored-by: Alexander Akhmetov <me@alx.cx>
2025-12-31 16:04:41 +00:00
Paul Marbach e3bc61e7d2 Suggestions: Add intermediate state to avoid unexpected saved states (#115709)
* Suggestions: Add intermediate state to avoid unexpected saved states

* cleanup

* update and add e2es to confirm behavior

* fix some of the change dispatch

* codeowners

* fix js error that this exposed

* Apply suggestion from @fastfrwrd
2025-12-31 10:56:47 -05:00
Stephanie Hingtgen cc6a75d021 Zanzana: Add folder integration tests (#115766) 2025-12-31 15:15:20 +00:00
Stephanie Hingtgen 6d0f7f3567 AccessControl: Seed basic roles on startup (#115729) 2025-12-31 08:43:29 -06:00
Stephanie Hingtgen 913c0ba3c5 Dashboards: Cleanup integration tests (#115765) 2025-12-31 14:29:01 +00:00
Matheus Macabu 552b6aa717 Secrets: Dont update createdBy when updating a secure value (#115760) 2025-12-31 15:01:22 +01:00
Alexander Akhmetov 2ddb4049c6 Alerting: Fix target datasource description (#115666) 2025-12-31 12:35:35 +00:00
Jo 318a0ebb36 IAM: Authorize writes to zanzana on token permissions (#115645)
* validate writes to zanzana, not reads

* lint ignore
2025-12-31 09:15:00 +00:00
grafana-pr-automation[bot] bba5c44dc4 I18n: Download translations from Crowdin (#115757)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-31 00:42:54 +00:00
Paul Marbach 44e6ea3d8b Gauge: Fix issues found during bug bash (#115740)
* fix warning for VizRepeater styles

* Gauge: Update test dashboard to round two of the segment panels to whole numbers

* Gauge: E2E tests

* add test for sparklines

* Gauge: Change inner glow to be friendlier to our a11y tests

* remove unused CODEOWNER declaration

* expose text mode so that old displayName usage is somewhat preserved

* update migrations to use the value_and_text mode if displayName has a non-empty value

* more test cases

* update unit tests for fixture updates
2025-12-30 15:27:32 -05:00
Kristina Demeshchik 014d4758c6 Dashboards: Prevent row selection when clicking canvas add actions (#115580)
* event propogation issues

* Action items width

* prevent pointer up event
2025-12-30 12:27:38 -07:00
Sean Griffin 82b4ce0ece Redesign Empty Transformation Panel (#115648)
Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com>
2025-12-30 16:46:29 +00:00
Paul Marbach 52698cf0da Sparkline: Restore to a function component (#115447)
* Sparkline: Restore to a function component

* fix whitespace lint issue
2025-12-30 10:55:40 -05:00
Haris Rozajac d291dfb35b Dashboard Conversion: Fix type assertion mismatch in data loss detection (#115749) 2025-12-30 08:51:46 -07:00
Andrew Hackmann 9c6feb8de5 Elasticsearch: Builder queries no longer execute in code mode (#115456)
* The builder query no longer runs if code mode query is empty. Remove checks for query being empty to run raw query.

* missed save

* prettier?

* Update public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/state/reducer.ts

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>

---------

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2025-12-30 15:37:19 +00:00
Ayush Kaithwas e7625186af Dashboards: Clear edit pane selection when entering panel edit (#115658)
* Clear selection on entering edit mode. Added test to verify selection is cleared when editing a panel.

* Update comment

---------

Co-authored-by: Haris Rozajac <58232930+harisrozajac@users.noreply.github.com>
2025-12-30 07:35:43 -07:00
Matheus Macabu 75b2c905cd Auditing: Move sinkable/logger interfaces and add global default logger implementation (#115743)
* Auditing: Move sinkable and logger interfaces

* Auditing: Add global default logger implementation

* Chore: Fix enterprise imports
2025-12-30 14:05:23 +01:00
Ezequiel Victorero 45fc95cfc9 Snapshots: Use settings MT service (#115541) 2025-12-30 09:54:20 -03:00
Ezequiel Victorero 9c3cdd4814 Playlists: Support get with None role (#115713) 2025-12-30 08:46:43 -03:00
Marc M. 2dad8b7b5b DynamicDashboards: Add button to feedback form (#114980) 2025-12-30 10:54:00 +01:00
Matheus Macabu 9a831ab4e1 Auditing: Set default policy rule level for create to req+resp (#115727)
Auditing: Set default policy rule level to req+resp
2025-12-30 09:47:00 +01:00
Dominik Prokop 759035a465 Remove kubernetesDashboardsV2 feature toggle (#114912)
Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-30 09:45:33 +01:00
Todd Treece 6e155523a3 Plugins App: Add basic README (#115507)
* Plugins App: Add basic README

* prettier:write

---------

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2025-12-30 08:14:06 +00:00
Lewis John McGibbney 5c0ee2d746 Documentation: Fix JSON file export relative link (#115650) 2025-12-30 10:46:57 +03:00
ismail simsek 0c6b97bee2 Prometheus: Fallback to fetch metric names when metadata returns nothing (#115369)
fallback to fetch metric names when metadata returns nothing
2025-12-29 19:11:44 +01:00
linoman 4c79775b57 auth: Protect from empty session token panic (#115728)
* Protect from empty session token panic

* Rename returned error
2025-12-29 17:19:49 +01:00
Matheus Macabu e088c9aac9 Auditing: Add feature flag (#115726) 2025-12-29 16:28:29 +01:00
Rodrigo Vasconcelos de Barros 7182511bcf Alerting: Auto-format numeric values in Alert Rule History (#115708)
* Add helper function to format numeric values in alert rule history

* Use formatting function in LogRecordViewer

* Refactor numerical formatting logic

* Handle edge cases when counting decimal places

* Cleanup tests and numberFormatter code
2025-12-29 10:18:42 -05:00
Paul Marbach 3023a72175 E2E: Use updated setVisualization from grafana/e2e (#115640) 2025-12-29 10:10:04 -05:00
Ivan Ortega Alba 30ad61e0e9 Dashboards: Fix adhoc filter click when panel has no panel-level datasource (#115576)
* V2: Panel datasource is defined only for mixed ds

* if getDatasourceFromQueryRunner only returns ds.type, resolve to full ds ref throgh ds service

---------

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-29 10:29:50 +01: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
Matheus Macabu 4ba2fe6cce Auditing: Add Event struct to map audit logs into (#115509) 2025-12-29 09:31:58 +01:00
grafana-pr-automation[bot] a345f78ae0 I18n: Download translations from Crowdin (#115717)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-28 00:34:24 +00:00
Yuri Tseretyan fa1e6cce5e Alerting: Rule backtesting with experimental UI (#115525)
* add function to convert StateTransition to LokiEntry
* add QueryResultBuilder
* update backtesting to produce result similar to historian
* make shouldRecord public
* filter out noop transitions
* add experimental front-end
* add new fields
* move conversion of api model to AlertRule to validation
* add extra labels
* calculate tick timestamp using the same logic as in scheduler
* implement correct logic of calculating first evaluation timestamp
* add uid, group and folder uid they are needed for jitter strategy

* add JitterOffsetInDuration and JitterStrategy.String()

* add config `backtesting_max_evaluations` to [unified_alerting] (not documented for now)

* remove obsolete tests

* elevate permisisons for backtesting endpoint
* move backtesting to separate dir
2025-12-26 16:55:57 -05:00
494 changed files with 14765 additions and 3660 deletions
+1 -2
View File
@@ -501,7 +501,6 @@ i18next.config.ts @grafana/grafana-frontend-platform
/e2e-playwright/various-suite/filter-annotations.spec.ts @grafana/dashboards-squad
/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts @grafana/plugins-platform-frontend
/e2e-playwright/various-suite/frontend-sandbox-datasource.spec.ts @grafana/plugins-platform-frontend
/e2e-playwright/various-suite/gauge.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/grafana-datasource-random-walk.spec.ts @grafana/grafana-frontend-platform
/e2e-playwright/various-suite/graph-auto-migrate.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/inspect-drawer.spec.ts @grafana/dashboards-squad
@@ -520,7 +519,7 @@ i18next.config.ts @grafana/grafana-frontend-platform
/e2e-playwright/various-suite/solo-route.spec.ts @grafana/dashboards-squad
/e2e-playwright/various-suite/trace-view-scrolling.spec.ts @grafana/observability-traces-and-profiling
/e2e-playwright/various-suite/verify-i18n.spec.ts @grafana/grafana-frontend-platform
/e2e-playwright/various-suite/visualization-suggestions.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/visualization-suggestions*.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/perf-test.spec.ts @grafana/grafana-frontend-platform
# Packages
+2 -1
View File
@@ -54,6 +54,7 @@ require (
github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/Machiel/slugify v1.0.1 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
@@ -157,7 +158,7 @@ require (
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/google/wire v0.7.0 // indirect
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196 // indirect
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f // indirect
github.com/grafana/authlib v0.0.0-20250930082137-a40e2c2b094f // indirect
github.com/grafana/dataplane/sdata v0.0.9 // indirect
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4 // indirect
+4 -2
View File
@@ -115,6 +115,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo=
github.com/IBM/pgxpoolprometheus v1.1.2 h1:sHJwxoL5Lw4R79Zt+H4Uj1zZ4iqXJLdk7XDE7TPs97U=
github.com/IBM/pgxpoolprometheus v1.1.2/go.mod h1:+vWzISN6S9ssgurhUNmm6AlXL9XLah3TdWJktquKTR8=
github.com/Machiel/slugify v1.0.1 h1:EfWSlRWstMadsgzmiV7d0yVd2IFlagWH68Q+DcYCm4E=
github.com/Machiel/slugify v1.0.1/go.mod h1:fTFGn5uWEynW4CUMG7sWkYXOf1UgDxyTM3DbR6Qfg3k=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
@@ -619,8 +621,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196 h1:A9UJtyBBUE7PkRsAITKU05iz+HpHO9SaVjfdo2Df3UQ=
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f h1:Br4SaUL3dnVopKKNhDavCLgehw60jdtl/sIxdfzmVts=
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/authlib v0.0.0-20250930082137-a40e2c2b094f h1:Cbm6OKkOcJ+7CSZsGsEJzktC/SIa5bxVeYKQLuYK86o=
github.com/grafana/authlib v0.0.0-20250930082137-a40e2c2b094f/go.mod h1:axY0cdOg3q0TZHwpHnIz5x16xZ8ZBxJHShsSHHXcHQg=
github.com/grafana/authlib/types v0.0.0-20251119142549-be091cf2f4d4 h1:Muoy+FMGrHj3GdFbvsMzUT7eusgii9PKf9L1ZaXDDbY=
+1 -1
View File
@@ -4,7 +4,7 @@ go 1.25.5
require (
github.com/go-kit/log v0.2.1
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4
github.com/grafana/grafana-app-sdk v0.48.7
github.com/grafana/grafana-app-sdk/logging v0.48.7
+2 -2
View File
@@ -243,8 +243,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196 h1:A9UJtyBBUE7PkRsAITKU05iz+HpHO9SaVjfdo2Df3UQ=
github.com/grafana/alerting v0.0.0-20251223160021-926c74910196/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f h1:Br4SaUL3dnVopKKNhDavCLgehw60jdtl/sIxdfzmVts=
github.com/grafana/alerting v0.0.0-20251231150637-b7821017d69f/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4 h1:jSojuc7njleS3UOz223WDlXOinmuLAIPI0z2vtq8EgI=
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4/go.mod h1:VahT+GtfQIM+o8ht2StR6J9g+Ef+C2Vokh5uuSmOD/4=
github.com/grafana/grafana-app-sdk v0.48.7 h1:9mF7nqkqP0QUYYDlznoOt+GIyjzj45wGfUHB32u2ZMo=
@@ -430,4 +430,100 @@ spec:
type: object
scope: Namespaced
name: v0alpha1
routes:
namespaced:
/testing/integration:
get:
operationId: getIntegrationTest
requestBody:
content:
application/json:
schema:
additionalProperties: false
properties:
alert:
$ref: '#/components/schemas/getIntegrationTestAlert'
integration:
$ref: '#/components/schemas/getIntegrationTestIntegration'
receiver_ref:
type: string
required:
- alert
- integration
type: object
required: true
responses:
default:
content:
application/json:
schema:
additionalProperties: false
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of
this representation of an object. Servers should convert
recognized schemas to the latest internal value, and may
reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
duration:
type: string
error:
type: string
kind:
description: 'Kind is a string value representing the REST
resource this object represents. Servers may infer this
from the endpoint the client submits requests to. Cannot
be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
timestamp:
format: date-time
type: string
required:
- timestamp
- duration
- apiVersion
- kind
type: object
description: Default OK response
schemas:
getIntegrationTestAlert:
additionalProperties: false
properties:
annotations:
additionalProperties:
type: string
type: object
labels:
additionalProperties:
type: string
type: object
required:
- labels
- annotations
type: object
getIntegrationTestIntegration:
additionalProperties: false
properties:
disableResolveMessage:
type: boolean
secureFields:
additionalProperties:
type: boolean
type: object
settings:
additionalProperties:
additionalProperties: {}
type: object
type: object
type:
type: string
uid:
type: string
version:
type: string
required:
- type
- version
- settings
type: object
served: true
+36 -1
View File
@@ -1,5 +1,19 @@
package kinds
import (
"time",
"github.com/grafana/grafana/apps/alerting/notifications/kinds/v0alpha1"
)
#Alert: {
labels: {
[string]: string
}
annotations: {
[string]: string
}
}
manifest: {
appName: "alerting-notifications"
groupOverride: "notifications.alerting.grafana.app"
@@ -14,7 +28,28 @@ manifest: {
routeTreev0alpha1,
templatev0alpha1,
timeIntervalv0alpha1,
]
],
routes: {
namespaced: {
"/testing/integration" : {
"GET": {
name: "getIntegrationTest"
request: {
body: {
alert: #Alert
receiver_ref?: string
integration: v0alpha1.#Integration
}
}
response: {
timestamp: time.Time
duration: string
error?: string
}
}
}
}
},
}
}
}
@@ -0,0 +1,46 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
type GetIntegrationTestRequestAlert struct {
Labels map[string]string `json:"labels"`
Annotations map[string]string `json:"annotations"`
}
// NewGetIntegrationTestRequestAlert creates a new GetIntegrationTestRequestAlert object.
func NewGetIntegrationTestRequestAlert() *GetIntegrationTestRequestAlert {
return &GetIntegrationTestRequestAlert{
Labels: map[string]string{},
Annotations: map[string]string{},
}
}
type GetIntegrationTestRequestIntegration struct {
Uid *string `json:"uid,omitempty"`
Type string `json:"type"`
Version string `json:"version"`
DisableResolveMessage *bool `json:"disableResolveMessage,omitempty"`
Settings map[string]any `json:"settings"`
SecureFields map[string]bool `json:"secureFields,omitempty"`
}
// NewGetIntegrationTestRequestIntegration creates a new GetIntegrationTestRequestIntegration object.
func NewGetIntegrationTestRequestIntegration() *GetIntegrationTestRequestIntegration {
return &GetIntegrationTestRequestIntegration{
Settings: map[string]any{},
}
}
type GetIntegrationTestRequestBody struct {
Alert GetIntegrationTestRequestAlert `json:"alert"`
ReceiverRef *string `json:"receiver_ref,omitempty"`
Integration GetIntegrationTestRequestIntegration `json:"integration"`
}
// NewGetIntegrationTestRequestBody creates a new GetIntegrationTestRequestBody object.
func NewGetIntegrationTestRequestBody() *GetIntegrationTestRequestBody {
return &GetIntegrationTestRequestBody{
Alert: *NewGetIntegrationTestRequestAlert(),
Integration: *NewGetIntegrationTestRequestIntegration(),
}
}
@@ -0,0 +1,19 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
import (
time "time"
)
// +k8s:openapi-gen=true
type GetIntegrationTestBody struct {
Timestamp time.Time `json:"timestamp"`
Duration string `json:"duration"`
Error *string `json:"error,omitempty"`
}
// NewGetIntegrationTestBody creates a new GetIntegrationTestBody object.
func NewGetIntegrationTestBody() *GetIntegrationTestBody {
return &GetIntegrationTestBody{}
}
@@ -0,0 +1,37 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
import (
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
// +k8s:openapi-gen=true
type GetIntegrationTest struct {
metav1.TypeMeta `json:",inline"`
GetIntegrationTestBody `json:",inline"`
}
func NewGetIntegrationTest() *GetIntegrationTest {
return &GetIntegrationTest{}
}
func (t *GetIntegrationTestBody) DeepCopyInto(dst *GetIntegrationTestBody) {
_ = resource.CopyObjectInto(dst, t)
}
func (o *GetIntegrationTest) DeepCopyObject() runtime.Object {
dst := NewGetIntegrationTest()
o.DeepCopyInto(dst)
return dst
}
func (o *GetIntegrationTest) DeepCopyInto(dst *GetIntegrationTest) {
dst.TypeMeta.APIVersion = o.TypeMeta.APIVersion
dst.TypeMeta.Kind = o.TypeMeta.Kind
o.GetIntegrationTestBody.DeepCopyInto(&dst.GetIntegrationTestBody)
}
var _ runtime.Object = NewGetIntegrationTest()
@@ -79,9 +79,206 @@ var appManifestData = app.ManifestData{
},
},
Routes: app.ManifestVersionRoutes{
Namespaced: map[string]spec3.PathProps{},
Cluster: map[string]spec3.PathProps{},
Schemas: map[string]spec.Schema{},
Namespaced: map[string]spec3.PathProps{
"/testing/integration": {
Get: &spec3.Operation{
OperationProps: spec3.OperationProps{
OperationId: "getIntegrationTest",
RequestBody: &spec3.RequestBody{
RequestBodyProps: spec3.RequestBodyProps{
Required: true,
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"alert": {
SchemaProps: spec.SchemaProps{
Ref: spec.MustCreateRef("#/components/schemas/getIntegrationTestAlert"),
},
},
"integration": {
SchemaProps: spec.SchemaProps{
Ref: spec.MustCreateRef("#/components/schemas/getIntegrationTestIntegration"),
},
},
"receiver_ref": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
Required: []string{
"alert",
"integration",
},
}},
}},
},
}},
Responses: &spec3.Responses{
ResponsesProps: spec3.ResponsesProps{
Default: &spec3.Response{
ResponseProps: spec3.ResponseProps{
Description: "Default OK response",
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"apiVersion": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
},
},
"duration": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
"error": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
"kind": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
},
},
"timestamp": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
},
},
},
Required: []string{
"timestamp",
"duration",
"apiVersion",
"kind",
},
}},
}},
},
},
},
}},
},
},
},
},
Cluster: map[string]spec3.PathProps{},
Schemas: map[string]spec.Schema{
"getIntegrationTestAlert": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"annotations": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
},
},
"labels": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
},
},
},
Required: []string{
"labels",
"annotations",
},
},
},
"getIntegrationTestIntegration": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"disableResolveMessage": {
SchemaProps: spec.SchemaProps{
Type: []string{"boolean"},
},
},
"secureFields": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"boolean"},
},
},
},
},
},
"settings": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{},
},
},
},
},
},
},
},
"type": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
"uid": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
"version": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
Required: []string{
"type",
"version",
"settings",
},
},
},
},
},
},
},
@@ -109,7 +306,9 @@ func ManifestGoTypeAssociator(kind, version string) (goType resource.Kind, exist
return goType, exists
}
var customRouteToGoResponseType = map[string]any{}
var customRouteToGoResponseType = map[string]any{
"v0alpha1||<namespace>/testing/integration|GET": v0alpha1.GetIntegrationTest{},
}
// ManifestCustomRouteResponsesAssociator returns the associated response go type for a given kind, version, custom route path, and method, if one exists.
// kind may be empty for custom routes which are not kind subroutes. Leading slashes are removed from subroute paths.
@@ -133,7 +332,9 @@ func ManifestCustomRouteQueryAssociator(kind, version, path, verb string) (goTyp
return goType, exists
}
var customRouteToGoRequestBodyType = map[string]any{}
var customRouteToGoRequestBodyType = map[string]any{
"v0alpha1||<namespace>/testing/integration|GET": v0alpha1.GetIntegrationTestRequestBody{},
}
func ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb string) (goType any, exists bool) {
if len(path) > 0 && path[0] == '/' {
@@ -2,6 +2,8 @@ package app
import (
"context"
"errors"
"fmt"
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/logging"
@@ -9,6 +11,7 @@ import (
"github.com/grafana/grafana-app-sdk/simple"
"github.com/grafana/grafana/apps/alerting/notifications/pkg/apis"
"github.com/grafana/grafana/apps/alerting/notifications/pkg/apis/alertingnotifications/v0alpha1"
)
func New(cfg app.Config) (app.App, error) {
@@ -19,6 +22,14 @@ func New(cfg app.Config) (app.App, error) {
}
}
customCfg, ok := cfg.SpecificConfig.(*Config)
if !ok {
return nil, errors.New("no configuration")
}
if err := customCfg.Validate(); err != nil {
return nil, fmt.Errorf("invalid configuration: %w", err)
}
c := simple.AppConfig{
Name: "alerting.notification",
KubeConfig: cfg.KubeConfig,
@@ -30,6 +41,15 @@ func New(cfg app.Config) (app.App, error) {
},
},
ManagedKinds: managedKinds,
VersionedCustomRoutes: map[string]simple.AppVersionRouteHandlers{
v0alpha1.APIVersion: {
simple.AppVersionRoute{
Namespaced: true,
Path: "testing/integration",
Method: "GET",
}: customCfg.ReceiverTestingHandler.HandleReceiverTestingRequest,
},
},
}
a, err := simple.NewApp(c)
@@ -0,0 +1,23 @@
package app
import (
"context"
"errors"
"github.com/grafana/grafana-app-sdk/app"
)
type Config struct {
ReceiverTestingHandler ReceiverTestingHandler
}
func (c *Config) Validate() error {
if c.ReceiverTestingHandler == nil {
return errors.New("receiver testing handler is required")
}
return nil
}
type ReceiverTestingHandler interface {
HandleReceiverTestingRequest(context.Context, app.CustomRouteResponseWriter, *app.CustomRouteRequest) error
}
@@ -180,12 +180,15 @@ func countAnnotationsV0V1(spec map[string]interface{}) int {
return 0
}
annotationList, ok := annotations["list"].([]interface{})
if !ok {
return 0
// Handle both []interface{} (from JSON unmarshaling) and []map[string]interface{} (from programmatic creation)
if annotationList, ok := annotations["list"].([]interface{}); ok {
return len(annotationList)
}
if annotationList, ok := annotations["list"].([]map[string]interface{}); ok {
return len(annotationList)
}
return len(annotationList)
return 0
}
// countLinksV0V1 counts dashboard links in v0alpha1 or v1beta1 dashboard spec
@@ -194,12 +197,15 @@ func countLinksV0V1(spec map[string]interface{}) int {
return 0
}
links, ok := spec["links"].([]interface{})
if !ok {
return 0
// Handle both []interface{} (from JSON unmarshaling) and []map[string]interface{} (from programmatic creation)
if links, ok := spec["links"].([]interface{}); ok {
return len(links)
}
if links, ok := spec["links"].([]map[string]interface{}); ok {
return len(links)
}
return len(links)
return 0
}
// countVariablesV0V1 counts template variables in v0alpha1 or v1beta1 dashboard spec
@@ -213,12 +219,15 @@ func countVariablesV0V1(spec map[string]interface{}) int {
return 0
}
variableList, ok := templating["list"].([]interface{})
if !ok {
return 0
// Handle both []interface{} (from JSON unmarshaling) and []map[string]interface{} (from programmatic creation)
if variableList, ok := templating["list"].([]interface{}); ok {
return len(variableList)
}
if variableList, ok := templating["list"].([]map[string]interface{}); ok {
return len(variableList)
}
return len(variableList)
return 0
}
// collectStatsV0V1 collects statistics from v0alpha1 or v1beta1 dashboard
@@ -85,20 +85,20 @@ func withConversionMetrics(sourceVersionAPI, targetVersionAPI string, conversion
// Only track schema versions for v0/v1 dashboards (v2+ info is redundant with API version)
switch source := a.(type) {
case *dashv0.Dashboard:
dashboardUID = string(source.UID)
dashboardUID = source.Name
if source.Spec.Object != nil {
sourceSchemaVersion = schemaversion.GetSchemaVersion(source.Spec.Object)
}
case *dashv1.Dashboard:
dashboardUID = string(source.UID)
dashboardUID = source.Name
if source.Spec.Object != nil {
sourceSchemaVersion = schemaversion.GetSchemaVersion(source.Spec.Object)
}
case *dashv2alpha1.Dashboard:
dashboardUID = string(source.UID)
dashboardUID = source.Name
// Don't track schema version for v2+ (redundant with API version)
case *dashv2beta1.Dashboard:
dashboardUID = string(source.UID)
dashboardUID = source.Name
// Don't track schema version for v2+ (redundant with API version)
}
@@ -0,0 +1,142 @@
{
"kind": "Dashboard",
"apiVersion": "dashboard.grafana.app/v1beta1",
"metadata": {
"name": "bom-in-links-test",
"namespace": "org-1",
"labels": {
"test": "bom-stripping"
}
},
"spec": {
"title": "BOM Stripping Test Dashboard",
"description": "Testing that BOM characters are stripped from URLs during conversion",
"schemaVersion": 42,
"tags": ["test", "bom"],
"editable": true,
"links": [
{
"title": "Dashboard link with BOM",
"type": "link",
"url": "http://example.com?var=${datasource}&other=value",
"targetBlank": true,
"icon": "external link"
}
],
"panels": [
{
"id": 1,
"type": "table",
"title": "Panel with BOM in field config override links",
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"fieldConfig": {
"defaults": {
"custom": {},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{"color": "green"},
{"color": "red", "value": 80}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "server"
},
"properties": [
{
"id": "links",
"value": [
{
"title": "Override link with BOM",
"url": "http://localhost:3000/d/test?var-datacenter=${__data.fields[datacenter]}&var-server=${__value.raw}"
}
]
}
]
}
]
},
"links": [
{
"title": "Panel data link with BOM",
"url": "http://example.com/${__data.fields.cluster}&var=value",
"targetBlank": true
}
],
"targets": [
{
"refId": "A",
"datasource": {
"type": "prometheus",
"uid": "test-ds"
}
}
]
},
{
"id": 2,
"type": "timeseries",
"title": "Panel with BOM in options dataLinks",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"options": {
"legend": {
"showLegend": true,
"displayMode": "list",
"placement": "bottom"
},
"dataLinks": [
{
"title": "Options data link with BOM",
"url": "http://example.com?series=${__series.name}&time=${__value.time}",
"targetBlank": true
}
]
},
"fieldConfig": {
"defaults": {
"links": [
{
"title": "Field config default link with BOM",
"url": "http://example.com?field=${__field.name}&value=${__value.raw}",
"targetBlank": false
}
]
},
"overrides": []
},
"targets": [
{
"refId": "A",
"datasource": {
"type": "prometheus",
"uid": "test-ds"
}
}
]
}
],
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": ["5s", "10s", "30s", "1m", "5m"]
}
}
}
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -93,6 +105,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -115,6 +131,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -93,6 +105,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -115,6 +131,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "gdev-prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "gdev-prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -50,6 +54,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -50,6 +54,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -65,6 +65,9 @@
"type": "row"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Versions running\nShows the versions reported by each running pod.\n\nThe rollout will fail if any pod is not running the expected version.\n\nPods in green are running the expected version, while pods running other versions are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -185,6 +188,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Deployment rollout progress\nShows the number of pods for each `Deployment` that match the desired configuration, as a proportion of the desired number of pods.\n\nThe rollout will fail if insufficient pods match the desired configuration for any `Deployment`.\n\nPods in green match the desired configuration, while pods that do not match the desired configuration are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -286,6 +292,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### StatefulSet rollout progress\nShows the number of pods for each `StatefulSet` that match the desired configuration, as a proportion of the desired number of pods.\n\nThe rollout will fail if insufficient pods match the desired configuration for any `StatefulSet`.\n\nPods in green match the desired configuration, while pods that do not match the desired configuration are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -399,6 +408,9 @@
"type": "row"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Aggregator lag\nShows the consumption lag of each aggregator pod.\n\nThis panel may show no data if aggregators are not deployed to this cell.\n\nThe rollout will fail if any pod's consumption lag is both:\n* greater than 30s (red area on graph), and\n* trending upwards compared to 1 minute earlier\n\n",
"fieldConfig": {
"defaults": {
@@ -468,6 +480,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Unhealthy Deployment replicas\nShows the number of unavailable pods for each `Deployment`.\n\nThe rollout will fail if any `Deployment` has an unavailable pod.\n\nBoth this panel and the rollout check ignore any `Deployment`s that require spot nodes, as these are expected to be unavailable from time to time.\n\n`Deployment`s shown in green do not have any unavailable pods, while `Deployment`s shown in orange have one or more unavailable pods.\n\n",
"fieldConfig": {
"defaults": {
@@ -569,6 +584,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Unhealthy StatefulSet replicas\nShows the number of pods for each `StatefulSet` that are not ready.\n\nThe rollout will fail if any `StatefulSet` has fewer ready pods than requested.\n\nBoth this panel and the rollout check ignore any `StatefulSets`s that require spot nodes, as these are expected to be unavailable from time to time.\n\n`StatefulSets`s shown in green do not have any pods that are not ready, while `StatefulSet`s shown in orange have one or more pods that are not ready.\n\n",
"fieldConfig": {
"defaults": {
@@ -65,6 +65,9 @@
"type": "row"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Versions running\nShows the versions reported by each running pod.\n\nThe rollout will fail if any pod is not running the expected version.\n\nPods in green are running the expected version, while pods running other versions are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -185,6 +188,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Deployment rollout progress\nShows the number of pods for each `Deployment` that match the desired configuration, as a proportion of the desired number of pods.\n\nThe rollout will fail if insufficient pods match the desired configuration for any `Deployment`.\n\nPods in green match the desired configuration, while pods that do not match the desired configuration are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -286,6 +292,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### StatefulSet rollout progress\nShows the number of pods for each `StatefulSet` that match the desired configuration, as a proportion of the desired number of pods.\n\nThe rollout will fail if insufficient pods match the desired configuration for any `StatefulSet`.\n\nPods in green match the desired configuration, while pods that do not match the desired configuration are shown in orange.\n\n",
"fieldConfig": {
"defaults": {
@@ -399,6 +408,9 @@
"type": "row"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Aggregator lag\nShows the consumption lag of each aggregator pod.\n\nThis panel may show no data if aggregators are not deployed to this cell.\n\nThe rollout will fail if any pod's consumption lag is both:\n* greater than 30s (red area on graph), and\n* trending upwards compared to 1 minute earlier\n\n",
"fieldConfig": {
"defaults": {
@@ -468,6 +480,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Unhealthy Deployment replicas\nShows the number of unavailable pods for each `Deployment`.\n\nThe rollout will fail if any `Deployment` has an unavailable pod.\n\nBoth this panel and the rollout check ignore any `Deployment`s that require spot nodes, as these are expected to be unavailable from time to time.\n\n`Deployment`s shown in green do not have any unavailable pods, while `Deployment`s shown in orange have one or more unavailable pods.\n\n",
"fieldConfig": {
"defaults": {
@@ -569,6 +584,9 @@
"type": "barchart"
},
{
"datasource": {
"uid": "$datasource"
},
"description": "### Unhealthy StatefulSet replicas\nShows the number of pods for each `StatefulSet` that are not ready.\n\nThe rollout will fail if any `StatefulSet` has fewer ready pods than requested.\n\nBoth this panel and the rollout check ignore any `StatefulSets`s that require spot nodes, as these are expected to be unavailable from time to time.\n\n`StatefulSets`s shown in green do not have any pods that are not ready, while `StatefulSet`s shown in orange have one or more pods that are not ready.\n\n",
"fieldConfig": {
"defaults": {
@@ -37,6 +37,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -59,6 +63,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -37,6 +37,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -59,6 +63,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -44,6 +44,9 @@
"liveNow": false,
"panels": [
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample metric showing connection count.",
"fieldConfig": {
"defaults": {
@@ -134,6 +137,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample counter metric.",
"fieldConfig": {
"defaults": {
@@ -224,6 +230,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample error metric.",
"fieldConfig": {
"defaults": {
@@ -314,6 +323,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample event rate metric.",
"fieldConfig": {
"defaults": {
@@ -404,6 +416,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample resource utilization metric.",
"fieldConfig": {
"defaults": {
@@ -493,6 +508,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample memory allocation metrics.",
"fieldConfig": {
"defaults": {
@@ -593,6 +611,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample utilization percentage.",
"fieldConfig": {
"defaults": {
@@ -662,6 +683,9 @@
"type": "row"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample latency metric for primary operations.",
"fieldConfig": {
"defaults": {
@@ -748,6 +772,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample latency metric for secondary operations.",
"fieldConfig": {
"defaults": {
@@ -834,6 +861,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample expansion events metric.",
"fieldConfig": {
"defaults": {
@@ -44,6 +44,9 @@
"liveNow": false,
"panels": [
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample metric showing connection count.",
"fieldConfig": {
"defaults": {
@@ -134,6 +137,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample counter metric.",
"fieldConfig": {
"defaults": {
@@ -224,6 +230,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample error metric.",
"fieldConfig": {
"defaults": {
@@ -314,6 +323,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample event rate metric.",
"fieldConfig": {
"defaults": {
@@ -404,6 +416,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample resource utilization metric.",
"fieldConfig": {
"defaults": {
@@ -493,6 +508,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample memory allocation metrics.",
"fieldConfig": {
"defaults": {
@@ -593,6 +611,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample utilization percentage.",
"fieldConfig": {
"defaults": {
@@ -662,6 +683,9 @@
"type": "row"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample latency metric for primary operations.",
"fieldConfig": {
"defaults": {
@@ -748,6 +772,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample latency metric for secondary operations.",
"fieldConfig": {
"defaults": {
@@ -834,6 +861,9 @@
"type": "timeseries"
},
{
"datasource": {
"uid": "${example_datasource}"
},
"description": "Sample expansion events metric.",
"fieldConfig": {
"defaults": {
@@ -39,6 +39,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 12,
@@ -61,6 +65,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 12,
@@ -151,6 +159,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -173,6 +185,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -195,6 +211,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -229,6 +249,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 16,
@@ -251,6 +275,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 8,
@@ -286,6 +314,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 24,
@@ -39,6 +39,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 12,
@@ -61,6 +65,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 12,
@@ -151,6 +159,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -173,6 +185,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -195,6 +211,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -229,6 +249,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 16,
@@ -251,6 +275,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 8,
@@ -286,6 +314,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 24,
@@ -41,6 +41,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 24,
@@ -78,6 +82,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -103,6 +111,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -128,6 +140,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"fieldConfig": {
"defaults": {
"thresholds": {
@@ -174,6 +190,10 @@
"type": "stat"
},
{
"datasource": {
"type": "loki",
"uid": "${loki}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -202,6 +222,10 @@
"type": "logs"
},
{
"datasource": {
"type": "loki",
"uid": "${loki}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -230,6 +254,10 @@
"type": "logs"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -255,6 +283,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Number of concurrent processing threads available for handling operations",
"gridPos": {
"h": 7,
@@ -280,6 +312,10 @@
"type": "stat"
},
{
"datasource": {
"type": "tempo",
"uid": "${tempo}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -324,6 +360,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Histogram showing p99, p95, p50, and p10 percentiles for job processing duration based on number of resources changed",
"fieldConfig": {
"defaults": {
@@ -425,6 +465,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Histogram showing p99, p95, p50, and p10 percentiles for job processing duration based on number of resources changed",
"gridPos": {
"h": 7,
@@ -477,6 +521,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Total number of jobs waiting to be processed",
"gridPos": {
"h": 7,
@@ -502,6 +550,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"fieldConfig": {
"defaults": {
"unit": "s"
@@ -532,6 +584,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "How long a job is in the queue before being picked up",
"gridPos": {
"h": 7,
@@ -584,6 +640,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -609,6 +669,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -633,6 +697,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -675,6 +743,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -41,6 +41,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 24,
@@ -78,6 +82,10 @@
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -103,6 +111,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -128,6 +140,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"fieldConfig": {
"defaults": {
"thresholds": {
@@ -174,6 +190,10 @@
"type": "stat"
},
{
"datasource": {
"type": "loki",
"uid": "${loki}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -202,6 +222,10 @@
"type": "logs"
},
{
"datasource": {
"type": "loki",
"uid": "${loki}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -230,6 +254,10 @@
"type": "logs"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -255,6 +283,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Number of concurrent processing threads available for handling operations",
"gridPos": {
"h": 7,
@@ -280,6 +312,10 @@
"type": "stat"
},
{
"datasource": {
"type": "tempo",
"uid": "${tempo}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -324,6 +360,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Histogram showing p99, p95, p50, and p10 percentiles for job processing duration based on number of resources changed",
"fieldConfig": {
"defaults": {
@@ -425,6 +465,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Histogram showing p99, p95, p50, and p10 percentiles for job processing duration based on number of resources changed",
"gridPos": {
"h": 7,
@@ -477,6 +521,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "Total number of jobs waiting to be processed",
"gridPos": {
"h": 7,
@@ -502,6 +550,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"fieldConfig": {
"defaults": {
"unit": "s"
@@ -532,6 +584,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"description": "How long a job is in the queue before being picked up",
"gridPos": {
"h": 7,
@@ -584,6 +640,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -609,6 +669,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -633,6 +697,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -675,6 +743,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${prom}"
},
"gridPos": {
"h": 7,
"w": 8,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -93,6 +105,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 4,
@@ -115,6 +131,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -137,6 +157,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -159,6 +183,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 24,
@@ -181,6 +209,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 24,
@@ -203,6 +235,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -225,6 +261,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -93,6 +105,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 4,
@@ -115,6 +131,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 8,
@@ -137,6 +157,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -159,6 +183,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 6,
"w": 24,
@@ -181,6 +209,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 24,
@@ -203,6 +235,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -225,6 +261,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 4,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +75,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -98,6 +106,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -126,6 +138,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -160,6 +176,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +75,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -98,6 +106,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -126,6 +138,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -160,6 +176,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -55,6 +59,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -83,6 +91,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -111,6 +123,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -140,6 +156,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -168,6 +188,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -55,6 +59,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -83,6 +91,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -111,6 +123,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -140,6 +156,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -168,6 +188,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -50,6 +54,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -73,6 +81,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -95,6 +107,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -50,6 +54,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -73,6 +81,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -95,6 +107,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -62,6 +66,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -102,6 +110,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 24,
@@ -144,6 +156,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -186,6 +202,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -62,6 +66,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -102,6 +110,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 24,
@@ -144,6 +156,10 @@
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -186,6 +202,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -60,6 +64,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -97,6 +105,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -136,6 +148,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -165,6 +181,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -60,6 +64,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -97,6 +105,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -136,6 +148,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -165,6 +181,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests basic migration with default style pattern (/.*/) containing thresholds and colors. Should convert styles to fieldConfig.defaults with threshold steps.",
"gridPos": {
"h": 3,
@@ -57,6 +61,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests comprehensive migration including: default style with thresholds/colors/unit/decimals/align/colorMode, column overrides with exact name and regex patterns, date formatting, hidden columns, and links with tooltips.",
"gridPos": {
"h": 3,
@@ -80,6 +88,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_aggregations transform to reduce transformation with column mappings (avg-\u003emean, max-\u003emax, min-\u003emin, total-\u003esum, current-\u003elastNotNull, count-\u003ecount).",
"gridPos": {
"h": 3,
@@ -103,6 +115,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_to_rows transform to seriesToRows transformation.",
"gridPos": {
"h": 3,
@@ -126,6 +142,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_to_columns transform to seriesToColumns transformation.",
"gridPos": {
"h": 3,
@@ -149,6 +169,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of table transform to merge transformation. Also tests auto alignment conversion to empty string.",
"gridPos": {
"h": 3,
@@ -172,6 +196,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests that existing transformations are preserved and new transformation from old format is appended to the list.",
"gridPos": {
"h": 3,
@@ -208,6 +236,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests handling of mixed numeric and string threshold values (int, string, float) with proper type conversion.",
"gridPos": {
"h": 3,
@@ -231,6 +263,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests all color mode mappings: cell-\u003ecolor-background, row-\u003ecolor-background, value-\u003ecolor-text.",
"gridPos": {
"h": 3,
@@ -254,6 +290,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests all alignment options: left, center, right, and auto (should convert to empty string).",
"gridPos": {
"h": 3,
@@ -277,6 +317,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests both field matcher types: byName for exact matches and byRegexp for regex patterns.",
"gridPos": {
"h": 3,
@@ -300,6 +344,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests various link configurations: with and without tooltip, with and without target blank.",
"gridPos": {
"h": 3,
@@ -323,6 +371,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests various date format patterns and aliases.",
"gridPos": {
"h": 3,
@@ -346,6 +398,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "React table (table2) should not be migrated. Properties should remain unchanged.",
"gridPos": {
"h": 3,
@@ -369,6 +425,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Angular table without styles property should not be migrated.",
"gridPos": {
"h": 3,
@@ -392,6 +452,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Non-table panels should remain completely unchanged.",
"gridPos": {
"h": 3,
@@ -415,6 +479,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Other panel types should not be affected by table migration.",
"gridPos": {
"h": 3,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests basic migration with default style pattern (/.*/) containing thresholds and colors. Should convert styles to fieldConfig.defaults with threshold steps.",
"gridPos": {
"h": 3,
@@ -57,6 +61,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests comprehensive migration including: default style with thresholds/colors/unit/decimals/align/colorMode, column overrides with exact name and regex patterns, date formatting, hidden columns, and links with tooltips.",
"gridPos": {
"h": 3,
@@ -80,6 +88,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_aggregations transform to reduce transformation with column mappings (avg-\u003emean, max-\u003emax, min-\u003emin, total-\u003esum, current-\u003elastNotNull, count-\u003ecount).",
"gridPos": {
"h": 3,
@@ -103,6 +115,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_to_rows transform to seriesToRows transformation.",
"gridPos": {
"h": 3,
@@ -126,6 +142,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of timeseries_to_columns transform to seriesToColumns transformation.",
"gridPos": {
"h": 3,
@@ -149,6 +169,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests migration of table transform to merge transformation. Also tests auto alignment conversion to empty string.",
"gridPos": {
"h": 3,
@@ -172,6 +196,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests that existing transformations are preserved and new transformation from old format is appended to the list.",
"gridPos": {
"h": 3,
@@ -208,6 +236,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests handling of mixed numeric and string threshold values (int, string, float) with proper type conversion.",
"gridPos": {
"h": 3,
@@ -231,6 +263,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests all color mode mappings: cell-\u003ecolor-background, row-\u003ecolor-background, value-\u003ecolor-text.",
"gridPos": {
"h": 3,
@@ -254,6 +290,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests all alignment options: left, center, right, and auto (should convert to empty string).",
"gridPos": {
"h": 3,
@@ -277,6 +317,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests both field matcher types: byName for exact matches and byRegexp for regex patterns.",
"gridPos": {
"h": 3,
@@ -300,6 +344,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests various link configurations: with and without tooltip, with and without target blank.",
"gridPos": {
"h": 3,
@@ -323,6 +371,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests various date format patterns and aliases.",
"gridPos": {
"h": 3,
@@ -346,6 +398,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "React table (table2) should not be migrated. Properties should remain unchanged.",
"gridPos": {
"h": 3,
@@ -369,6 +425,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Angular table without styles property should not be migrated.",
"gridPos": {
"h": 3,
@@ -392,6 +452,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Non-table panels should remain completely unchanged.",
"gridPos": {
"h": 3,
@@ -415,6 +479,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Other panel types should not be affected by table migration.",
"gridPos": {
"h": 3,
@@ -33,6 +33,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -55,6 +59,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -33,6 +33,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -55,6 +59,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -56,6 +60,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -78,6 +86,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -107,6 +119,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -56,6 +60,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -78,6 +86,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -107,6 +119,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -56,6 +60,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -85,6 +93,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -107,6 +119,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -136,6 +152,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -159,6 +179,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"gridPos": {
"h": 8,
"w": 8,
@@ -182,6 +206,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -249,6 +277,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"gridPos": {
"h": 8,
"w": 8,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -56,6 +60,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -85,6 +93,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -107,6 +119,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -136,6 +152,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -159,6 +179,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"gridPos": {
"h": 8,
"w": 8,
@@ -182,6 +206,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -249,6 +277,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "PD8C576611E62080A"
},
"gridPos": {
"h": 8,
"w": 8,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -93,6 +105,10 @@
"type": "barchart"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -93,6 +105,10 @@
"type": "barchart"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -125,6 +129,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -151,6 +159,10 @@
"type": "xychart"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -178,6 +190,10 @@
"type": "xychart2"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -204,6 +220,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -305,6 +325,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"unit": "bytes"
@@ -337,6 +361,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"overrides": [
{
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -125,6 +129,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -151,6 +159,10 @@
"type": "xychart"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -178,6 +190,10 @@
"type": "xychart2"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -204,6 +220,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"mappings": [
@@ -305,6 +325,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"unit": "bytes"
@@ -337,6 +361,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"overrides": [
{
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -59,6 +63,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -99,6 +107,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -149,6 +161,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -171,6 +187,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -259,6 +279,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -59,6 +63,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -99,6 +107,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -149,6 +161,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -171,6 +187,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -259,6 +279,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -33,6 +33,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +75,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -33,6 +33,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +75,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "loki",
"uid": "non-default-test-ds-uid"
},
"description": "Tests v33 migration behavior when panel datasource is explicitly null. Should remain null after migration (returnDefaultAsNull: true).",
"gridPos": {
"h": 3,
@@ -51,6 +55,10 @@
"type": "stat"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests v33 migration behavior when panel datasource is already a proper object reference. Should remain unchanged.",
"gridPos": {
"h": 3,
@@ -75,6 +83,10 @@
"type": "stat"
},
{
"datasource": {
"type": "loki",
"uid": "non-default-test-ds-uid"
},
"description": "Tests v33 migration when panel datasource is a string name. Should convert to proper object with uid, type, apiVersion.",
"gridPos": {
"h": 3,
@@ -98,6 +110,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests v33 migration when panel has datasource string but empty targets array. Panel datasource should still migrate.",
"gridPos": {
"h": 3,
@@ -283,6 +299,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Nested panel with string datasource should migrate to proper object reference, proving row panel recursion works.",
"gridPos": {
"h": 3,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "loki",
"uid": "non-default-test-ds-uid"
},
"description": "Tests v33 migration behavior when panel datasource is explicitly null. Should remain null after migration (returnDefaultAsNull: true).",
"gridPos": {
"h": 3,
@@ -51,6 +55,10 @@
"type": "stat"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests v33 migration behavior when panel datasource is already a proper object reference. Should remain unchanged.",
"gridPos": {
"h": 3,
@@ -75,6 +83,10 @@
"type": "stat"
},
{
"datasource": {
"type": "loki",
"uid": "non-default-test-ds-uid"
},
"description": "Tests v33 migration when panel datasource is a string name. Should convert to proper object with uid, type, apiVersion.",
"gridPos": {
"h": 3,
@@ -98,6 +110,10 @@
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests v33 migration when panel has datasource string but empty targets array. Panel datasource should still migrate.",
"gridPos": {
"h": 3,
@@ -283,6 +299,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Nested panel with string datasource should migrate to proper object reference, proving row panel recursion works.",
"gridPos": {
"h": 3,
@@ -289,6 +289,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -355,6 +359,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -386,6 +394,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -492,6 +504,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -522,6 +538,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -626,6 +646,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -689,6 +713,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -738,6 +766,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -769,6 +801,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -818,6 +854,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -849,6 +889,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -927,6 +971,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -1006,6 +1054,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -289,6 +289,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -355,6 +359,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -386,6 +394,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -492,6 +504,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -522,6 +538,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -626,6 +646,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -689,6 +713,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -738,6 +766,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -769,6 +801,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -818,6 +854,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -849,6 +889,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -927,6 +971,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -1006,6 +1054,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -70,6 +74,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -125,6 +133,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -154,6 +166,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -183,6 +199,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -205,6 +225,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -227,6 +251,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"unit": "bytes"
@@ -254,6 +282,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -70,6 +74,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -125,6 +133,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -154,6 +166,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -183,6 +199,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -205,6 +225,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -227,6 +251,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"unit": "bytes"
@@ -254,6 +282,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"fieldConfig": {
"defaults": {
"custom": {
@@ -77,6 +77,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource migration with targets - should fallback to default",
"gridPos": {
"h": 3,
@@ -100,6 +104,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource with empty targets array - should create default target",
"gridPos": {
"h": 3,
@@ -123,6 +131,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource with missing targets - should create default target array",
"gridPos": {
"h": 3,
@@ -180,6 +192,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with already migrated datasource object - should preserve existing refs",
"gridPos": {
"h": 3,
@@ -203,6 +219,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "unknown-target-datasource"
},
"description": "Tests panel with unknown datasource - should preserve as UID-only reference",
"gridPos": {
"h": 3,
@@ -260,6 +280,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel inheriting datasource from target when panel datasource was default",
"gridPos": {
"h": 3,
@@ -283,6 +307,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with datasource referenced by name - should migrate to full object",
"gridPos": {
"h": 3,
@@ -306,6 +334,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with datasource referenced by UID - should migrate to full object",
"gridPos": {
"h": 3,
@@ -345,6 +377,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Nested panel in collapsed row with default datasource",
"gridPos": {
"h": 3,
@@ -368,6 +404,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Nested panel in collapsed row with unknown datasource",
"gridPos": {
"h": 3,
@@ -77,6 +77,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource migration with targets - should fallback to default",
"gridPos": {
"h": 3,
@@ -100,6 +104,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource with empty targets array - should create default target",
"gridPos": {
"h": 3,
@@ -123,6 +131,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"description": "Tests null panel datasource with missing targets - should create default target array",
"gridPos": {
"h": 3,
@@ -180,6 +192,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with already migrated datasource object - should preserve existing refs",
"gridPos": {
"h": 3,
@@ -203,6 +219,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "unknown-target-datasource"
},
"description": "Tests panel with unknown datasource - should preserve as UID-only reference",
"gridPos": {
"h": 3,
@@ -260,6 +280,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel inheriting datasource from target when panel datasource was default",
"gridPos": {
"h": 3,
@@ -283,6 +307,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with datasource referenced by name - should migrate to full object",
"gridPos": {
"h": 3,
@@ -306,6 +334,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Tests panel with datasource referenced by UID - should migrate to full object",
"gridPos": {
"h": 3,
@@ -345,6 +377,10 @@
"id": -1,
"panels": [
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Nested panel in collapsed row with default datasource",
"gridPos": {
"h": 3,
@@ -368,6 +404,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "elasticsearch",
"uid": "existing-target-uid"
},
"description": "Nested panel in collapsed row with unknown datasource",
"gridPos": {
"h": 3,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +49,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -72,6 +76,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -49,6 +49,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -72,6 +76,10 @@
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 8,
"w": 12,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -27,6 +27,10 @@
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -49,6 +53,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -71,6 +79,10 @@
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "default-ds-uid"
},
"gridPos": {
"h": 3,
"w": 6,
@@ -120,7 +120,7 @@
"value": [
{
"title": "filter",
"url": "http://localhost:3000/d/-Y-tnEDWk/templating-nested-template-variables?var-datacenter=${__data.fields[datacenter]}\u0026var-server=${__value.raw}"
"url": "http://localhost:3000/d/-Y-tnEDWk/templating-nested-template-variables?var-datacenter=${__data.fields[datacenter]}\u0026var-server=${__value.raw}"
}
]
}
@@ -124,7 +124,7 @@
"value": [
{
"title": "filter",
"url": "http://localhost:3000/d/-Y-tnEDWk/templating-nested-template-variables?var-datacenter=${__data.fields[datacenter]}\u0026var-server=${__value.raw}"
"url": "http://localhost:3000/d/-Y-tnEDWk/templating-nested-template-variables?var-datacenter=${__data.fields[datacenter]}\u0026var-server=${__value.raw}"
}
]
}
@@ -2051,4 +2051,4 @@
"storedVersion": "v0alpha1"
}
}
}
}
@@ -2691,4 +2691,4 @@
"storedVersion": "v0alpha1"
}
}
}
}
@@ -2764,4 +2764,4 @@
"storedVersion": "v0alpha1"
}
}
}
}
@@ -1173,4 +1173,4 @@
"storedVersion": "v0alpha1"
}
}
}
}
@@ -1618,4 +1618,4 @@
"storedVersion": "v0alpha1"
}
}
}
}
@@ -1670,4 +1670,4 @@
"storedVersion": "v0alpha1"
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More