Compare commits

..

34 Commits

Author SHA1 Message Date
Ivan Ortega d60c85ba8c Refactor ResponseTransformers to use scene-based transformations
- Replace manual v1->v2 conversion with scene transformers
- Extract buildVizPanelFromPanelModel for reusable panel conversion
- Use ensureV2Response in ShareExportTab for proper row handling
- Remove ~1200 lines of duplicate transformation code
- Update tests to work with scene-based transformation behavior
2025-12-17 16:16:57 +01:00
Ivan Ortega c88c29fadf Use v2 serializer to transform v1 to v2 2025-12-16 23:26:54 +01:00
github-actions[bot] e21bdbe89a Release: update changelog for main (#115424)
* Update changelog

* restart ci

* Update changelog

* restart ci

* Update changelog

* restart ci

* Update changelog

* Update changelog

* restart ci

* restart ci

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
2025-12-16 14:47:05 -07:00
Ivan Ortega Alba dfd396b06c Dashboard: Support Angular panel migrations in v2 schema (#115368)
* V2: Support angular panel migrations

* Add autoMigrateFrom and update ensureV2

* Remove context files

* Simplify angular migration handler

* linter

* Only include angular options in angular panel data
2025-12-16 22:39:21 +01:00
Renato Costa c647140475 unified-storage: add Delete support to the sqlkv implementation (#115443) 2025-12-16 16:19:45 -05:00
Yuri Tseretyan f2c30cbbd1 Alerting: Protected fields for Contact points (#115442)
* Alerting: Protect sensitive fields of contact points from
 unauthorized modification

- Introduce a new permission alert.notifications.receivers.protected:write. The permission is granted to contact point administrators.
- Introduce field Protected to NotifierOption
- Introduce DiffReport for models.Integrations with focus on Settings. The diff report is extended with methods that return all keys that are different between two settings.
- Add new annotation 'grafana.com/access/CanModifyProtected' to Receiver model
- Update receiver service to enforce the permission and return status 403 if unauthorized user modifies protected field
- Update receiver testing API to enforce permission and return status 403 if unauthorized user modifies protected field.
- Update UI to disable protected fields if user cannot modify them
2025-12-16 15:56:02 -05:00
Luminessa Starlight 30fb1c032a Rudderstack: Update init logic to automatically use new url when new config is set (#115275)
update rudderstack init logic
to rely on existence of old or new sdk config option being set and only defer to feature toggle if both or neither is set
2025-12-16 15:01:53 -05:00
Renato Costa bd8f0083ce unified-storage: add Get support to the sqlkv implementation (#115382) 2025-12-16 14:32:13 -05:00
Matthew Jacobson 26487fb864 Alerting: Improve ASH Loki query efficiency by including folderUID (#113322)
* Alerting: Improve ASH Loki query efficiency by including folderUID

Previously, the folderUID label was only included when ruleUID was not specified
 and the user did not have full alert rule read permissions.

To improve ASH Loki query efficiency, this PR includes the folderUID in the ASH
Loki query when ruleUID is specified, even if the user has full alert rule read
permissions.

Some non-obvious considerations:
- The naive implementation of just including the current folder UID would have
the unintended side-effect of no longer returning history after a rule is moved
 between folders.
- The previous implementation made the trade-off of only checking RBAC on the
current folder, including any history from old folders that may exist.

To solve both of the above, we make an extra query to the database to check the
alert rule's previous versions so we can include any old folderUIDs, checking
RBAC at the same time.

The querying and inclusion of history from old folders is done best-effort, any
issues that might arise are logged and ignored so as not to prevent the current
folder history.

* Fix merge conflicts

* Reduce scanning on GetAlertRuleVersionFolders by grouping in query
2025-12-16 13:34:41 -05:00
Daniele Stefano Ferru bf2682712f Provisioning: Add Connection reference to Repository resource (#115419)
* Provisioning: Add Connection reference to Repository resource

* addressing comments
2025-12-16 17:31:53 +00:00
Roberto Jiménez Sánchez f8069aebcf Provisioning: delegate authorization to access checker in dualwriter (#115407)
* refactor: delegate authorization to access checker in dualwriter

- Remove role-based authorization checks (editor/admin role checks)
- Delegate all authorization to access checker which checks resource-level permissions
- Update authorizeCreateFolder to use access checker instead of role-based checks
- Add comprehensive authorization tests for viewer, editor, and admin roles
- Tests cover GET, POST, PUT, DELETE operations and folder creation

This change ensures that authorization is consistently handled through
the access checker, which checks resource-level permissions rather than
just organization roles.

* fix: format files_test.go

* fix: check error return value of resp.Body.Close()

* fix: grant permissions to all dashboards for editor role in authorization test

Use SetPermissions with wildcard to grant permissions to Editor user
for all dashboards, not just the initial one. This ensures that dashboards
created during tests (like in DELETE operations) have the necessary
permissions for the editor role.
2025-12-16 18:26:32 +01:00
Alexander Akhmetov 81710ca1f5 Alerting: Fix saving result_fingerprint in async alert state persister (#115005) 2025-12-16 18:09:32 +01:00
Torkel Ödegaard f64daba9dd Dropdown: Don't pass getFloatingProps to content function (#115415)
* Dropdown: Revert accidential cahnge

* Update

* update
2025-12-16 17:54:49 +01:00
Tobias Skarhed 6dd711b6f2 Scopes: Fix selector crashing on unavailable node (#115417)
* Fix crash

* Add regression tests

* Remove component mocking
2025-12-16 18:52:08 +02:00
mohammad-hamid 482bb6a2fb AuthZ: Redirect legacy resource permissions handler to k8s (part II) (#114356)
* move restconfig to options

* Add K8s API redirects for write operations

* Revert restConfigProvider changes to receivers, service accounts, and teams

* discard changing team permissions

* lint

* cleanup

* trigger build

* address feedback

* improve test coverage

* lint

* trigger build

* refactor
2025-12-16 11:43:03 -05:00
Sarah Zinger ad7e066703 Feature Flags: Remove queryServiceFromExplore (#115168)
* Remove feature flag: queryServiceFromExplore

* Remove CoreApp
2025-12-16 11:40:18 -05:00
Jack Westbrook 6eab74a90f Plugin Extensions: Remove react API refs in ComponentWithMeta (#115347)
* maybe better way to attach meta?

* chore(plugin-extensions): remove todo comment

---------

Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2025-12-16 16:59:40 +01:00
Misi c09cb08dec Teams: Refactor TeamGroupSync UI to functional component and hooks (#115223)
* Refactor TeamGroupSync to use func component and hooks

* Fix tests, lint

* Lint prune suppressions

* Address feedback

* Address feedback - tests
2025-12-16 16:48:38 +01:00
Dominik Prokop 52205fbf4f CustomVariable: Remove dead code and incorrect label (#115340)
* CustomVariable: Remove dead code and incorrect label

* Update i18n translations
2025-12-16 15:56:16 +01:00
Kristina Demeshchik 321e60e69c Dashboards: Add missing keyboard shortcuts for new layouts (#115377)
* missing key bindings

* Collapse repeted panels
2025-12-16 09:34:10 -05:00
Kristina Demeshchik c6dda2dfc3 Dashboards: exit edit mode after saving changes modal (#115380)
Exit edit mode with unsaved changes
2025-12-16 09:33:54 -05:00
Marc M. e03f7fe878 DynamicDashboards: prevent nested repeats based on the same variable (#114953) 2025-12-16 15:11:23 +01:00
Daniele Stefano Ferru 5ecfc79e14 Provisioning: Add Connection resource (#115272)
* Provisioning: Add Connection resource

* adding some more integration tests

* updating openapi snapshot, linting

* generating FE code, fixing issue in unit tests

* addressing comments

* addressing comments

* adding more integration tests

* fixing rebase issues

* removing linting exception

* addressing comments: improving validation and tests

* adding Connection URL at mutation time, updating tests accordingly

* linting
2025-12-16 14:37:07 +01:00
Alexander Akhmetov c0295d06a3 Alerting: Add rule_matcher filter to Prometheus rules API (#115297)
**What is this feature?**

Add `rule_matcher` filter to the Prometheus-compatible list rules API: `/api/prometheus/grafana/api/v1/rules`. It allows to filter rules by static labels (not by alert instance labels).

**Special notes:**
  - Equality (`=`) and inequality (`!=`) matchers are pushed down to the database. Regex matchers (`=~`, `!~`) are applied in-memory at the API layer.
  - SQLite: Uses GLOB pattern matching
  - MySQL / PostgreSQL: Use JSON functions to compare label values


---------

Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-12-16 14:13:50 +01:00
Oscar Kilhed c7c1dd4ead V2 Schema: Fix panel Y position when converting from tabs to legacy rows in V2 -> v1 conversion. (#115373)
* fix row y conversion

* fix only for tabs

* add tests examples
2025-12-16 13:47:26 +01:00
Ivan Ortega Alba 195bf681d1 V2: Ensure refIds for queries (#115404)
Ensure refIds for queries
2025-12-16 13:34:08 +01:00
Tobias Skarhed 18837682cc Scopes: ScopesNavigation preload functionality (#115354)
* Add devenv configs

* Initial preload functionality

* Remove support for expandOnLoad

* Add tests

* Remove unnecessary go code
2025-12-16 13:01:03 +01:00
Ryan McKinley fea972cb11 Dashboards: Avoid infra/log in apps (#115396) 2025-12-16 11:11:46 +00:00
grafana-pr-automation[bot] d1ef2837fc I18n: Download translations from Crowdin (#115383)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-16 11:04:19 +00:00
Torkel Ödegaard 6ffb805d45 Dashboard: Hide sidebar in kiosk mode (#115387)
* Dashboard: Hide sidebar in kiosk mode

* Fix kiosk url sync issues

* Fixes

* fixes

* Update
2025-12-16 11:43:59 +01:00
Andres Martinez Gotor a4eb98b4ed Advisor: RBAC revamp (#115151)
Co-authored-by: Todd Treece <todd.treece@grafana.com>
2025-12-16 11:33:18 +01:00
Yulia Shanyrova 1f4f2b4d7c Plugins: Add PluginInsights UI (#111603)
* Add getInsights endpoint, add new component PluginInsights

* fix linting and add styles

* add version option to insights request

* Add plugininsights tests, remove console.logs

* fix the insight items types

* Add getting insights to all the mocks to fix the tests

* remove deprecated lint package

* Add theme colors, added tests to PluginDetailsPanel

* Fix eslint error for plugin details page

* Add pluginInsights feature toggle

* change getInsights with version API call, resolve conflicts with main

* fix typecheck and translation

* updated UI

* update registry go

* fix translation

* light css changes

* remove duplicated feature toggle

* fix the build

* update plugin insights tests

* fix typecheck

* rudderstack added, feedback form added

* fix translation
2025-12-16 11:20:18 +01:00
Daniele Stefano Ferru 9c8531b71b Provisioning: Block Library Panel creation in provisioned folders (#114933)
* WIP: Block Library Panel creation in provisioned folders

* blocking patch - adding integration tests

* checking code in tests

* addressing comments, adding one more test
2025-12-16 11:20:04 +01:00
Levente Balogh 7913b20cca Tracing: Fix excluding paths from tracing (#115394)
fix: not tracing paths correctly
2025-12-16 11:02:40 +01:00
375 changed files with 51552 additions and 3964 deletions
+15 -5
View File
@@ -3,7 +3,7 @@
# Others can set up the YAML LSP manually, which supports schemas: https://github.com/redhat-developer/yaml-language-server
# $schema: https://golangci-lint.run/jsonschema/golangci.jsonschema.json
version: "2"
version: '2'
run:
timeout: 15m
concurrency: 10
@@ -83,6 +83,16 @@ linters:
deny:
- pkg: github.com/grafana/grafana/pkg
desc: apps/playlist is not allowed to import grafana core
apps-dashboard:
list-mode: lax
files:
- ./apps/dashboard/*
- ./apps/dashboard/**/*
allow:
- github.com/grafana/grafana/pkg/apimachinery
deny:
- pkg: github.com/grafana/grafana/pkg
desc: apps/dashboard is not allowed to import grafana core
apps-secret:
list-mode: lax
files:
@@ -281,16 +291,16 @@ linters:
text: G306
- linters:
- gosec
text: "401"
text: '401'
- linters:
- gosec
text: "402"
text: '402'
- linters:
- gosec
text: "501"
text: '501'
- linters:
- gosec
text: "404"
text: '404'
- linters:
- errorlint
text: non-wrapping format verb for fmt.Errorf
+98
View File
@@ -1,3 +1,101 @@
<!-- 12.3.1 START -->
# 12.3.1 (2025-12-16)
### Features and enhancements
- **Alerting:** Update alerting dependency [#114259](https://github.com/grafana/grafana/pull/114259), [@moustafab](https://github.com/moustafab)
- **Azure:** Improved column handling in logs query builder [#114841](https://github.com/grafana/grafana/pull/114841), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Include aggregate columns in logs builder [#114835](https://github.com/grafana/grafana/pull/114835), [@aangelisc](https://github.com/aangelisc)
- **Dependencies:** Bump Go to v1.25.5 [#114751](https://github.com/grafana/grafana/pull/114751), [@macabu](https://github.com/macabu)
- **Docs:** Clarify section title for repeating rows and tabs [#115346](https://github.com/grafana/grafana/pull/115346), [@imatwawana](https://github.com/imatwawana)
- **Plugins:** Add PluginContext to plugins when scenes is disabled [#115064](https://github.com/grafana/grafana/pull/115064), [@hugohaggmark](https://github.com/hugohaggmark)
- **QueryEditorRows:** Clear hideSeriesFrom override on query edit [#114628](https://github.com/grafana/grafana/pull/114628), [@Sergej-Vlasov](https://github.com/Sergej-Vlasov)
### Bug fixes
- **Azure:** Fix `dcount` aggregation [#114907](https://github.com/grafana/grafana/pull/114907), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Fix `percentile` syntax [#114707](https://github.com/grafana/grafana/pull/114707), [@aangelisc](https://github.com/aangelisc)
- **Dashboards:** Fix empty space under time controls when a dashboard has a lot of variables [#114730](https://github.com/grafana/grafana/pull/114730), [@oscarkilhed](https://github.com/oscarkilhed)
- **Plugins:** Datasource breadcrumb link should link to settings tab [#113910](https://github.com/grafana/grafana/pull/113910), [@wbrowne](https://github.com/wbrowne)
- **Postgresql:** Fix variable interpolation logic when the variable has multiple values [#114876](https://github.com/grafana/grafana/pull/114876), [@itsmylife](https://github.com/itsmylife)
<!-- 12.3.1 END -->
<!-- 12.2.3 START -->
# 12.2.3 (2025-12-16)
### Features and enhancements
- **Alerting:** Update alerting dependency [#114256](https://github.com/grafana/grafana/pull/114256), [@moustafab](https://github.com/moustafab)
- **Azure:** Improved column handling in logs query builder [#114840](https://github.com/grafana/grafana/pull/114840), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Include aggregate columns in logs builder [#114834](https://github.com/grafana/grafana/pull/114834), [@aangelisc](https://github.com/aangelisc)
- **Dependencies:** Bump Go to v1.25.5 [#114753](https://github.com/grafana/grafana/pull/114753), [@macabu](https://github.com/macabu)
- **Plugins:** Add PluginContext to plugins when scenes is disabled [#115063](https://github.com/grafana/grafana/pull/115063), [@hugohaggmark](https://github.com/hugohaggmark)
- **QueryEditorRows:** Clear hideSeriesFrom override on query edit [#114629](https://github.com/grafana/grafana/pull/114629), [@Sergej-Vlasov](https://github.com/Sergej-Vlasov)
### Bug fixes
- **Alerting:** Fix contact points issue [#115412](https://github.com/grafana/grafana/pull/115412), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Azure:** Fix `dcount` aggregation [#114906](https://github.com/grafana/grafana/pull/114906), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Fix `percentile` syntax [#114706](https://github.com/grafana/grafana/pull/114706), [@aangelisc](https://github.com/aangelisc)
- **Postgresql:** Fix variable interpolation logic when the variable has multiple values [#114875](https://github.com/grafana/grafana/pull/114875), [@itsmylife](https://github.com/itsmylife)
<!-- 12.2.3 END -->
<!-- 12.1.5 START -->
# 12.1.5 (2025-12-16)
### Features and enhancements
- **Alerting:** Update alerting dependency [#114254](https://github.com/grafana/grafana/pull/114254), [@moustafab](https://github.com/moustafab)
- **Dependencies:** Bump Go to v1.25.5 [#114755](https://github.com/grafana/grafana/pull/114755), [@macabu](https://github.com/macabu)
- **Docs:** Clarify section title for repeating rows and tabs [#115344](https://github.com/grafana/grafana/pull/115344), [@imatwawana](https://github.com/imatwawana)
- **Plugins:** Add PluginContext to plugins when scenes is disabled [#115062](https://github.com/grafana/grafana/pull/115062), [@hugohaggmark](https://github.com/hugohaggmark)
### Bug fixes
- **Alerting:** Fix contact points issue [#115411](https://github.com/grafana/grafana/pull/115411), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Azure:** Fix `dcount` aggregation [#114905](https://github.com/grafana/grafana/pull/114905), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Fix `percentile` syntax [#114705](https://github.com/grafana/grafana/pull/114705), [@aangelisc](https://github.com/aangelisc)
- **Postgresql:** Fix variable interpolation logic when the variable has multiple values [#114874](https://github.com/grafana/grafana/pull/114874), [@itsmylife](https://github.com/itsmylife)
<!-- 12.1.5 END -->
<!-- 12.0.8 START -->
# 12.0.8 (2025-12-16)
### Features and enhancements
- **Alerting:** Update alerting dependency [#114252](https://github.com/grafana/grafana/pull/114252), [@moustafab](https://github.com/moustafab)
- **Dependencies:** Bump Go to v1.25.5 [#114756](https://github.com/grafana/grafana/pull/114756), [@macabu](https://github.com/macabu)
- **Docs:** Clarify section title for repeating rows and tabs [#115343](https://github.com/grafana/grafana/pull/115343), [@imatwawana](https://github.com/imatwawana)
- **Plugins:** Add PluginContext to plugins when scenes is disabled [#115061](https://github.com/grafana/grafana/pull/115061), [@hugohaggmark](https://github.com/hugohaggmark)
### Bug fixes
- **Alerting:** Fix contact points issue [#115410](https://github.com/grafana/grafana/pull/115410), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Azure:** Fix `dcount` aggregation [#114904](https://github.com/grafana/grafana/pull/114904), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Fix `percentile` syntax [#114704](https://github.com/grafana/grafana/pull/114704), [@aangelisc](https://github.com/aangelisc)
- **Postgresql:** Fix variable interpolation logic when the variable has multiple values [#114873](https://github.com/grafana/grafana/pull/114873), [@itsmylife](https://github.com/itsmylife)
<!-- 12.0.8 END -->
<!-- 11.6.9 START -->
# 11.6.9 (2025-12-16)
### Features and enhancements
- **Alerting:** Update alerting dependency [#114249](https://github.com/grafana/grafana/pull/114249), [@moustafab](https://github.com/moustafab)
- **Dependencies:** Bump Go to v1.25.5 [#114757](https://github.com/grafana/grafana/pull/114757), [@macabu](https://github.com/macabu)
- **PDFTables:** Dynamically shrink font to try and fit whole table in pdf page width (Enterprise)
- **Plugins:** Add PluginContext to plugins when scenes is disabled [#115060](https://github.com/grafana/grafana/pull/115060), [@hugohaggmark](https://github.com/hugohaggmark)
### Bug fixes
- **Alerting:** Fix contacts point issues [#115409](https://github.com/grafana/grafana/pull/115409), [@yuri-tceretian](https://github.com/yuri-tceretian)
<!-- 11.6.9 END -->
<!-- 12.3.0 START -->
# 12.3.0 (2025-11-19)
+19 -1
View File
@@ -15,6 +15,7 @@ require (
github.com/stretchr/testify v1.11.1
k8s.io/apimachinery v0.34.2
k8s.io/apiserver v0.34.2
k8s.io/client-go v0.34.2
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
)
@@ -43,6 +44,7 @@ replace github.com/grafana/grafana/apps/plugins => ../plugins
replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250911094103-5456b6e45604
require (
cel.dev/expr v0.24.0 // indirect
cloud.google.com/go/compute/metadata v0.9.0 // indirect
dario.cat/mergo v1.0.2 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
@@ -55,6 +57,7 @@ require (
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
github.com/NYTimes/gziphandler v1.1.1 // indirect
github.com/ProtonMail/go-crypto v1.1.6 // indirect
github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f // indirect
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect
@@ -85,6 +88,7 @@ require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cheekybits/genny v1.0.0 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
@@ -101,6 +105,7 @@ require (
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/gchaincl/sqlhooks v1.3.0 // indirect
github.com/getkin/kin-openapi v0.133.0 // indirect
@@ -144,6 +149,7 @@ require (
github.com/golang-migrate/migrate/v4 v4.7.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/cel-go v0.26.1 // indirect
github.com/google/flatbuffers v25.2.10+incompatible // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
@@ -162,6 +168,7 @@ require (
github.com/grafana/sqlds/v4 v4.2.7 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
@@ -176,6 +183,7 @@ require (
github.com/hashicorp/memberlist v0.5.2 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jaegertracing/jaeger-idl v0.5.0 // indirect
github.com/jessevdk/go-flags v1.6.1 // indirect
github.com/jmespath-community/go-jmespath v1.1.1 // indirect
@@ -248,7 +256,9 @@ require (
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/cobra v1.10.1 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/stoewer/go-strcase v1.3.1 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/tetratelabs/wazero v1.8.2 // indirect
github.com/thomaspoignant/go-feature-flag v1.42.0 // indirect
@@ -256,6 +266,9 @@ require (
github.com/woodsbury/decimal128 v1.3.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
go.etcd.io/etcd/api/v3 v3.6.4 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.6.4 // indirect
go.etcd.io/etcd/client/v3 v3.6.4 // indirect
go.mongodb.org/mongo-driver v1.17.4 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
@@ -274,6 +287,8 @@ require (
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/mock v0.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.1 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.45.0 // indirect
@@ -297,23 +312,26 @@ require (
google.golang.org/grpc v1.77.0 // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/mail.v2 v2.3.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/src-d/go-errors.v1 v1.0.0 // indirect
gopkg.in/telebot.v3 v3.3.8 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/api v0.34.2 // indirect
k8s.io/apiextensions-apiserver v0.34.2 // indirect
k8s.io/client-go v0.34.2 // indirect
k8s.io/component-base v0.34.2 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kms v0.34.2 // indirect
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
modernc.org/libc v1.66.10 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.40.1 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect
+29
View File
@@ -282,6 +282,7 @@ github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03V
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
github.com/cznic/fileutil v0.0.0-20180108211300-6a051e75936f/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg=
@@ -406,6 +407,8 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
github.com/go-openapi/analysis v0.24.0 h1:vE/VFFkICKyYuTWYnplQ+aVr45vlG6NcZKC7BdIXhsA=
github.com/go-openapi/analysis v0.24.0/go.mod h1:GLyoJA+bvmGGaHgpfeDh8ldpGo69fAJg7eeMDMRCIrw=
github.com/go-openapi/errors v0.22.3 h1:k6Hxa5Jg1TUyZnOwV2Lh81j8ayNw5VVYLvKrp4zFKFs=
@@ -606,6 +609,8 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
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-20251212143239-491433b332b7 h1:ZzG/gCclEit9w0QUfQt9GURcOycAIGcsQAhY1u0AEX0=
github.com/grafana/alerting v0.0.0-20251212143239-491433b332b7/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/authlib v0.0.0-20250930082137-a40e2c2b094f h1:Cbm6OKkOcJ+7CSZsGsEJzktC/SIa5bxVeYKQLuYK86o=
@@ -749,6 +754,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
@@ -979,6 +986,7 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg
github.com/pressly/goose/v3 v3.26.0 h1:KJakav68jdH0WDvoAcj8+n61WqOIaPGgH0bJWS6jpmM=
github.com/pressly/goose/v3 v3.26.0/go.mod h1:4hC1KrritdCxtuFsqgs1R4AU5bWtTAf+cnWvfhf2DNY=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
@@ -996,6 +1004,7 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
@@ -1010,6 +1019,7 @@ github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57J
github.com/prometheus/exporter-toolkit v0.14.0 h1:NMlswfibpcZZ+H0sZBiTjrA3/aBFHkNZqE+iCj5EmRg=
github.com/prometheus/exporter-toolkit v0.14.0/go.mod h1:Gu5LnVvt7Nr/oqTBUC23WILZepW0nffNo10XdhQcwWA=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
@@ -1036,6 +1046,7 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8=
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
@@ -1058,6 +1069,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -1071,6 +1084,7 @@ github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw=
@@ -1096,6 +1110,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
@@ -1112,6 +1127,8 @@ github.com/thomaspoignant/go-feature-flag v1.42.0/go.mod h1:y0QiWH7chHWhGATb/+Xq
github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/tjhop/slog-gokit v0.1.5 h1:ayloIUi5EK2QYB8eY4DOPO95/mRtMW42lUkp3quJohc=
github.com/tjhop/slog-gokit v0.1.5/go.mod h1:yA48zAHvV+Sg4z4VRyeFyFUNNXd3JY5Zg84u3USICq0=
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
@@ -1129,6 +1146,8 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs=
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510 h1:S2dVYn90KE98chqDkyE9Z4N61UnQd+KOfgp5Iu53llk=
github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -1139,6 +1158,8 @@ github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE=
go.etcd.io/bbolt v1.4.2 h1:IrUHp260R8c+zYx/Tm8QZr04CX+qWS5PGfPdevhdm1I=
go.etcd.io/bbolt v1.4.2/go.mod h1:Is8rSHO/b4f3XigBC0lL0+4FwAQv3HXEEIgFMuKHceM=
go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
go.etcd.io/etcd/api/v3 v3.6.4 h1:7F6N7toCKcV72QmoUKa23yYLiiljMrT4xCeBL9BmXdo=
go.etcd.io/etcd/api/v3 v3.6.4/go.mod h1:eFhhvfR8Px1P6SEuLT600v+vrhdDTdcfMzmnxVXXSbk=
@@ -1149,6 +1170,12 @@ go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+
go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
go.etcd.io/etcd/client/v3 v3.6.4 h1:YOMrCfMhRzY8NgtzUsHl8hC2EBSnuqbR3dh84Uryl7A=
go.etcd.io/etcd/client/v3 v3.6.4/go.mod h1:jaNNHCyg2FdALyKWnd7hxZXZxZANb0+KGY+YQaEMISo=
go.etcd.io/etcd/pkg/v3 v3.6.4 h1:fy8bmXIec1Q35/jRZ0KOes8vuFxbvdN0aAFqmEfJZWA=
go.etcd.io/etcd/pkg/v3 v3.6.4/go.mod h1:kKcYWP8gHuBRcteyv6MXWSN0+bVMnfgqiHueIZnKMtE=
go.etcd.io/etcd/server/v3 v3.6.4 h1:LsCA7CzjVt+8WGrdsnh6RhC0XqCsLkBly3ve5rTxMAU=
go.etcd.io/etcd/server/v3 v3.6.4/go.mod h1:aYCL/h43yiONOv0QIR82kH/2xZ7m+IWYjzRmyQfnCAg=
go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ=
go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo=
go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw=
go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
@@ -1301,6 +1328,7 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1712,6 +1740,7 @@ google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba h1:UKgtfRM7Yh93Sya0Fo8ZzhDP4qBckrrxEr2oF5UIVb8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+48
View File
@@ -8,18 +8,24 @@ import (
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/k8s"
appsdkapiserver "github.com/grafana/grafana-app-sdk/k8s/apiserver"
"github.com/grafana/grafana-app-sdk/logging"
"github.com/grafana/grafana-app-sdk/operator"
"github.com/grafana/grafana-app-sdk/resource"
"github.com/grafana/grafana-app-sdk/simple"
advisorapi "github.com/grafana/grafana/apps/advisor/pkg/apis"
advisorv0alpha1 "github.com/grafana/grafana/apps/advisor/pkg/apis/advisor/v0alpha1"
"github.com/grafana/grafana/apps/advisor/pkg/app/checkregistry"
"github.com/grafana/grafana/apps/advisor/pkg/app/checks"
"github.com/grafana/grafana/apps/advisor/pkg/app/checkscheduler"
"github.com/grafana/grafana/apps/advisor/pkg/app/checktyperegisterer"
"github.com/grafana/grafana/pkg/apimachinery/identity"
"github.com/grafana/grafana/pkg/services/org"
"github.com/grafana/grafana/pkg/setting"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/client-go/rest"
)
func New(cfg app.Config) (app.App, error) {
@@ -188,3 +194,45 @@ func GetKinds() map[schema.GroupVersion][]resource.Kind {
},
}
}
func ProvideAppInstaller(
authorizer authorizer.Authorizer,
checkRegistry checkregistry.CheckService,
cfg *setting.Cfg,
orgService org.Service,
) (*AdvisorAppInstaller, error) {
provider := simple.NewAppProvider(advisorapi.LocalManifest(), nil, New)
pluginConfig := cfg.PluginSettings["grafana-advisor-app"]
specificConfig := checkregistry.AdvisorAppConfig{
CheckRegistry: checkRegistry,
PluginConfig: pluginConfig,
StackID: cfg.StackID,
OrgService: orgService,
}
appCfg := app.Config{
KubeConfig: rest.Config{},
ManifestData: *advisorapi.LocalManifest().ManifestData,
SpecificConfig: specificConfig,
}
defaultInstaller, err := appsdkapiserver.NewDefaultAppInstaller(provider, appCfg, advisorapi.NewGoTypeAssociator())
if err != nil {
return nil, err
}
installer := &AdvisorAppInstaller{
AppInstaller: defaultInstaller,
authorizer: authorizer,
}
return installer, nil
}
type AdvisorAppInstaller struct {
appsdkapiserver.AppInstaller
authorizer authorizer.Authorizer
}
func (a *AdvisorAppInstaller) GetAuthorizer() authorizer.Authorizer {
return a.authorizer
}
-47
View File
@@ -1,47 +0,0 @@
package app
import (
"context"
claims "github.com/grafana/authlib/types"
"github.com/grafana/grafana/pkg/apimachinery/identity"
"k8s.io/apiserver/pkg/authorization/authorizer"
)
func GetAuthorizer() authorizer.Authorizer {
return authorizer.AuthorizerFunc(func(
ctx context.Context, attr authorizer.Attributes,
) (authorized authorizer.Decision, reason string, err error) {
if !attr.IsResourceRequest() {
return authorizer.DecisionNoOpinion, "", nil
}
// Check for service identity
if identity.IsServiceIdentity(ctx) {
return authorizer.DecisionAllow, "", nil
}
// Check for access policy identity
info, ok := claims.AuthInfoFrom(ctx)
if ok && claims.IsIdentityType(info.GetIdentityType(), claims.TypeAccessPolicy) {
// For access policy identities, we need to use ResourceAuthorizer
// This requires an AccessClient, which should be provided by the API server
// For now, we'll use the default ResourceAuthorizer from the API server
// This will be set up by the API server's authorization chain
return authorizer.DecisionNoOpinion, "", nil
}
// For regular Grafana users, check if they are admin
u, err := identity.GetRequester(ctx)
if err != nil {
return authorizer.DecisionDeny, "valid user is required", err
}
// check if is admin
if u.HasRole(identity.RoleAdmin) {
return authorizer.DecisionAllow, "", nil
}
return authorizer.DecisionDeny, "forbidden", nil
})
}
-91
View File
@@ -1,91 +0,0 @@
package app
import (
"context"
"testing"
claims "github.com/grafana/authlib/types"
"github.com/grafana/grafana/pkg/apimachinery/identity"
"github.com/stretchr/testify/assert"
"k8s.io/apiserver/pkg/authorization/authorizer"
)
func TestGetAuthorizer(t *testing.T) {
tests := []struct {
name string
ctx context.Context
attr authorizer.Attributes
expectedDecision authorizer.Decision
expectedReason string
expectedErr error
}{
{
name: "non-resource request",
ctx: context.TODO(),
attr: &mockAttributes{resourceRequest: false},
expectedDecision: authorizer.DecisionNoOpinion,
expectedReason: "",
expectedErr: nil,
},
{
name: "user is admin",
ctx: identity.WithRequester(context.TODO(), &mockUser{isGrafanaAdmin: true}),
attr: &mockAttributes{resourceRequest: true},
expectedDecision: authorizer.DecisionAllow,
expectedReason: "",
expectedErr: nil,
},
{
name: "user is not admin",
ctx: identity.WithRequester(context.TODO(), &mockUser{isGrafanaAdmin: false}),
attr: &mockAttributes{resourceRequest: true},
expectedDecision: authorizer.DecisionDeny,
expectedReason: "forbidden",
expectedErr: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := GetAuthorizer()
decision, reason, err := auth.Authorize(tt.ctx, tt.attr)
assert.Equal(t, tt.expectedDecision, decision)
assert.Equal(t, tt.expectedReason, reason)
assert.Equal(t, tt.expectedErr, err)
})
}
}
type mockAttributes struct {
authorizer.Attributes
resourceRequest bool
}
func (m *mockAttributes) IsResourceRequest() bool {
return m.resourceRequest
}
// Implement other methods of authorizer.Attributes as needed
type mockUser struct {
identity.Requester
isGrafanaAdmin bool
}
func (m *mockUser) GetIsGrafanaAdmin() bool {
return m.isGrafanaAdmin
}
func (m *mockUser) HasRole(role identity.RoleType) bool {
return role == identity.RoleAdmin && m.isGrafanaAdmin
}
func (m *mockUser) GetUID() string {
return "test-uid"
}
func (m *mockUser) GetIdentityType() claims.IdentityType {
return claims.TypeUser
}
// Implement other methods of identity.Requester as needed
+1 -1
View File
@@ -9,6 +9,7 @@ require (
github.com/grafana/grafana-app-sdk/logging v0.48.3
github.com/grafana/grafana-plugin-sdk-go v0.284.0
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250514132646-acbc7b54ed9e
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/prometheus/client_golang v1.23.2
github.com/stretchr/testify v1.11.1
k8s.io/apimachinery v0.34.2
@@ -57,7 +58,6 @@ require (
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.7.0 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/jaegertracing/jaeger-idl v0.5.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
@@ -706,6 +706,10 @@ lineage: schemas: [{
// Field options allow you to change how the data is displayed in your visualizations.
fieldConfig?: #FieldConfigSource
// When a panel is migrated from a previous version (Angular to React), this field is set to the original panel type.
// This is used to determine the original panel type when migrating to a new version so the plugin migration can be applied.
autoMigrateFrom?: string
} @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview)
// The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
@@ -706,6 +706,10 @@ lineage: schemas: [{
// Field options allow you to change how the data is displayed in your visualizations.
fieldConfig?: #FieldConfigSource
// When a panel is migrated from a previous version (Angular to React), this field is set to the original panel type.
// This is used to determine the original panel type when migrating to a new version so the plugin migration can be applied.
autoMigrateFrom?: string
} @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview)
// The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
@@ -1,74 +0,0 @@
package v2alpha1
import (
"k8s.io/apimachinery/pkg/runtime"
)
// SetDefaults_Dashboard ensures all panel queries have unique refIds
// This is called by the Kubernetes defaulting mechanism when dashboards are returned
func SetDefaults_Dashboard(obj *Dashboard) {
EnsureUniqueRefIds(&obj.Spec)
}
// EnsureUniqueRefIds ensures all queries within each panel have unique refIds
// This matches the frontend behavior in PanelModel.ensureQueryIds()
func EnsureUniqueRefIds(spec *DashboardSpec) {
for _, element := range spec.Elements {
if element.PanelKind != nil {
ensureUniqueRefIdsForPanel(element.PanelKind)
}
}
}
func ensureUniqueRefIdsForPanel(panel *DashboardPanelKind) {
queries := panel.Spec.Data.Spec.Queries
if len(queries) == 0 {
return
}
// First pass: collect existing refIds
existingRefIds := make(map[string]bool)
for i := range queries {
if queries[i].Spec.RefId != "" {
existingRefIds[queries[i].Spec.RefId] = true
}
}
// Second pass: assign unique refIds to queries without one
for i := range queries {
if queries[i].Spec.RefId == "" {
queries[i].Spec.RefId = getNextRefId(existingRefIds)
existingRefIds[queries[i].Spec.RefId] = true
}
}
}
// getNextRefId generates the next available refId (A, B, C, ..., Z, AA, AB, etc.)
// This matches the frontend behavior in packages/grafana-data/src/query/refId.ts
func getNextRefId(existingRefIds map[string]bool) string {
for num := 0; ; num++ {
refId := getRefIdFromNumber(num)
if !existingRefIds[refId] {
return refId
}
}
}
// getRefIdFromNumber converts a number to a refId (0=A, 1=B, ..., 25=Z, 26=AA, 27=AB, etc.)
func getRefIdFromNumber(num int) string {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if num < len(letters) {
return string(letters[num])
}
return getRefIdFromNumber(num/len(letters)-1) + string(letters[num%len(letters)])
}
// RegisterCustomDefaults registers custom defaulting functions for Dashboard types.
// This should be called from RegisterDefaults in zz_generated.defaults.go
// However, since that file is auto-generated, we provide this as a separate registration
func RegisterCustomDefaults(scheme *runtime.Scheme) error {
scheme.AddTypeDefaultingFunc(&Dashboard{}, func(obj interface{}) {
SetDefaults_Dashboard(obj.(*Dashboard))
})
return nil
}
@@ -99,9 +99,5 @@ func addKnownTypes(scheme *runtime.Scheme) error {
}
func addDefaultingFuncs(scheme *runtime.Scheme) error {
if err := RegisterDefaults(scheme); err != nil {
return err
}
// Register custom defaults to ensure unique refIds in panel queries
return RegisterCustomDefaults(scheme)
return RegisterDefaults(scheme)
}
@@ -1,74 +0,0 @@
package v2beta1
import (
"k8s.io/apimachinery/pkg/runtime"
)
// SetDefaults_Dashboard ensures all panel queries have unique refIds
// This is called by the Kubernetes defaulting mechanism when dashboards are returned
func SetDefaults_Dashboard(obj *Dashboard) {
EnsureUniqueRefIds(&obj.Spec)
}
// EnsureUniqueRefIds ensures all queries within each panel have unique refIds
// This matches the frontend behavior in PanelModel.ensureQueryIds()
func EnsureUniqueRefIds(spec *DashboardSpec) {
for _, element := range spec.Elements {
if element.PanelKind != nil {
ensureUniqueRefIdsForPanel(element.PanelKind)
}
}
}
func ensureUniqueRefIdsForPanel(panel *DashboardPanelKind) {
queries := panel.Spec.Data.Spec.Queries
if len(queries) == 0 {
return
}
// First pass: collect existing refIds
existingRefIds := make(map[string]bool)
for i := range queries {
if queries[i].Spec.RefId != "" {
existingRefIds[queries[i].Spec.RefId] = true
}
}
// Second pass: assign unique refIds to queries without one
for i := range queries {
if queries[i].Spec.RefId == "" {
queries[i].Spec.RefId = getNextRefId(existingRefIds)
existingRefIds[queries[i].Spec.RefId] = true
}
}
}
// getNextRefId generates the next available refId (A, B, C, ..., Z, AA, AB, etc.)
// This matches the frontend behavior in packages/grafana-data/src/query/refId.ts
func getNextRefId(existingRefIds map[string]bool) string {
for num := 0; ; num++ {
refId := getRefIdFromNumber(num)
if !existingRefIds[refId] {
return refId
}
}
}
// getRefIdFromNumber converts a number to a refId (0=A, 1=B, ..., 25=Z, 26=AA, 27=AB, etc.)
func getRefIdFromNumber(num int) string {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if num < len(letters) {
return string(letters[num])
}
return getRefIdFromNumber(num/len(letters)-1) + string(letters[num%len(letters)])
}
// RegisterCustomDefaults registers custom defaulting functions for Dashboard types.
// This should be called from RegisterDefaults in zz_generated.defaults.go
// However, since that file is auto-generated, we provide this as a separate registration
func RegisterCustomDefaults(scheme *runtime.Scheme) error {
scheme.AddTypeDefaultingFunc(&Dashboard{}, func(obj interface{}) {
SetDefaults_Dashboard(obj.(*Dashboard))
})
return nil
}
@@ -1,219 +0,0 @@
package v2beta1
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGetRefIdFromNumber(t *testing.T) {
testCases := []struct {
num int
expected string
}{
{0, "A"},
{1, "B"},
{25, "Z"},
{26, "AA"},
{27, "AB"},
{51, "AZ"},
{52, "BA"},
{701, "ZZ"},
{702, "AAA"},
}
for _, tc := range testCases {
t.Run(tc.expected, func(t *testing.T) {
result := getRefIdFromNumber(tc.num)
assert.Equal(t, tc.expected, result, "getRefIdFromNumber(%d) should return %s", tc.num, tc.expected)
})
}
}
func TestGetNextRefId(t *testing.T) {
testCases := []struct {
name string
existing map[string]bool
expected string
}{
{
name: "empty map returns A",
existing: map[string]bool{},
expected: "A",
},
{
name: "A exists returns B",
existing: map[string]bool{"A": true},
expected: "B",
},
{
name: "A and B exist returns C",
existing: map[string]bool{"A": true, "B": true},
expected: "C",
},
{
name: "gap in sequence returns first available",
existing: map[string]bool{"A": true, "C": true, "D": true},
expected: "B",
},
{
name: "A-Z exist returns AA",
existing: func() map[string]bool {
m := make(map[string]bool)
for i := 0; i < 26; i++ {
m[string(rune('A'+i))] = true
}
return m
}(),
expected: "AA",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := getNextRefId(tc.existing)
assert.Equal(t, tc.expected, result)
})
}
}
func TestEnsureUniqueRefIds(t *testing.T) {
t.Run("assigns unique refIds to queries without refIds", func(t *testing.T) {
spec := &DashboardSpec{
Elements: map[string]DashboardElement{
"panel-1": {
PanelKind: &DashboardPanelKind{
Kind: "Panel",
Spec: DashboardPanelSpec{
Data: DashboardQueryGroupKind{
Spec: DashboardQueryGroupSpec{
Queries: []DashboardPanelQueryKind{
{Spec: DashboardPanelQuerySpec{RefId: ""}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
},
},
},
},
},
},
},
}
EnsureUniqueRefIds(spec)
panel := spec.Elements["panel-1"].PanelKind
require.NotNil(t, panel)
require.Len(t, panel.Spec.Data.Spec.Queries, 3)
assert.Equal(t, "A", panel.Spec.Data.Spec.Queries[0].Spec.RefId)
assert.Equal(t, "B", panel.Spec.Data.Spec.Queries[1].Spec.RefId)
assert.Equal(t, "C", panel.Spec.Data.Spec.Queries[2].Spec.RefId)
})
t.Run("preserves existing refIds and fills gaps", func(t *testing.T) {
spec := &DashboardSpec{
Elements: map[string]DashboardElement{
"panel-1": {
PanelKind: &DashboardPanelKind{
Kind: "Panel",
Spec: DashboardPanelSpec{
Data: DashboardQueryGroupKind{
Spec: DashboardQueryGroupSpec{
Queries: []DashboardPanelQueryKind{
{Spec: DashboardPanelQuerySpec{RefId: "A"}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
{Spec: DashboardPanelQuerySpec{RefId: "D"}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
},
},
},
},
},
},
},
}
EnsureUniqueRefIds(spec)
panel := spec.Elements["panel-1"].PanelKind
require.NotNil(t, panel)
require.Len(t, panel.Spec.Data.Spec.Queries, 4)
assert.Equal(t, "A", panel.Spec.Data.Spec.Queries[0].Spec.RefId)
assert.Equal(t, "B", panel.Spec.Data.Spec.Queries[1].Spec.RefId)
assert.Equal(t, "D", panel.Spec.Data.Spec.Queries[2].Spec.RefId)
assert.Equal(t, "C", panel.Spec.Data.Spec.Queries[3].Spec.RefId)
})
t.Run("handles library panels (no modification)", func(t *testing.T) {
spec := &DashboardSpec{
Elements: map[string]DashboardElement{
"panel-1": {
LibraryPanelKind: &DashboardLibraryPanelKind{
Kind: "LibraryPanel",
Spec: DashboardLibraryPanelKindSpec{
LibraryPanel: DashboardLibraryPanelRef{
Uid: "lib-uid",
Name: "lib-name",
},
},
},
},
},
}
// Should not panic
EnsureUniqueRefIds(spec)
})
t.Run("handles multiple panels", func(t *testing.T) {
spec := &DashboardSpec{
Elements: map[string]DashboardElement{
"panel-1": {
PanelKind: &DashboardPanelKind{
Kind: "Panel",
Spec: DashboardPanelSpec{
Data: DashboardQueryGroupKind{
Spec: DashboardQueryGroupSpec{
Queries: []DashboardPanelQueryKind{
{Spec: DashboardPanelQuerySpec{RefId: ""}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
},
},
},
},
},
},
"panel-2": {
PanelKind: &DashboardPanelKind{
Kind: "Panel",
Spec: DashboardPanelSpec{
Data: DashboardQueryGroupKind{
Spec: DashboardQueryGroupSpec{
Queries: []DashboardPanelQueryKind{
{Spec: DashboardPanelQuerySpec{RefId: ""}},
{Spec: DashboardPanelQuerySpec{RefId: ""}},
},
},
},
},
},
},
},
}
EnsureUniqueRefIds(spec)
// Each panel should have unique refIds independently
panel1 := spec.Elements["panel-1"].PanelKind
panel2 := spec.Elements["panel-2"].PanelKind
require.NotNil(t, panel1)
require.NotNil(t, panel2)
assert.Equal(t, "A", panel1.Spec.Data.Spec.Queries[0].Spec.RefId)
assert.Equal(t, "B", panel1.Spec.Data.Spec.Queries[1].Spec.RefId)
assert.Equal(t, "A", panel2.Spec.Data.Spec.Queries[0].Spec.RefId)
assert.Equal(t, "B", panel2.Spec.Data.Spec.Queries[1].Spec.RefId)
})
}
@@ -99,9 +99,5 @@ func addKnownTypes(scheme *runtime.Scheme) error {
}
func addDefaultingFuncs(scheme *runtime.Scheme) error {
if err := RegisterDefaults(scheme); err != nil {
return err
}
// Register custom defaults to ensure unique refIds in panel queries
return RegisterCustomDefaults(scheme)
return RegisterDefaults(scheme)
}
+71
View File
@@ -53,6 +53,7 @@ v0alpha1 (Legacy JSON) → v1beta1 (Migrated JSON) → v2alpha1/v2beta1 (Structu
- Transforms JSON dashboards to structured dashboard format
- v2 schema is the stable, typed schema with proper type definitions
- Handles modern dashboard features and Kubernetes-native storage
- Preserves Angular panel migration data for frontend processing (see [Angular Panel Migrations](#angular-panel-migrations))
- See [V2 to V1 Layout Conversion](./conversion/v2_to_v1_layout_conversion.md) for details on how V2 layouts are converted back to V1 panel arrays
#### v2 to v0/v1 Conversion:
@@ -61,6 +62,76 @@ v0alpha1 (Legacy JSON) → v1beta1 (Migrated JSON) → v2alpha1/v2beta1 (Structu
- v0alpha1 and v1beta1 share the same spec structure (only API version differs)
- Enables backward compatibility when storing v2 dashboards in legacy format
### Angular Panel Migrations
When converting dashboards from v0/v1 to v2, panels with Angular types require special handling. The `autoMigrateFrom` field is used in v0 and v1 to indicate the panel was migrated from a deprecated plugin type, and the target plugin contains migration logic to transform the original panel's options and field configurations.
Panel plugins define their own migration logic via `plugin.onPanelTypeChanged()`. This migration runs in the frontend when a panel type changes, transforming old options/fieldConfig to the new format. Examples:
- `singlestat.format: "short"``stat.fieldConfig.defaults.unit: "short"`
- `graph.legend.show: true``timeseries.options.legend.showLegend: true`
The v2 schema doesn't include `autoMigrateFrom` as a typed field, so we need a mechanism to preserve the original panel data for the frontend to run these plugin migrations.
#### `__angularMigration` Temporary Data
The backend v1 → v2 conversion preserves the original panel data in a temporary field within `vizConfig.spec.options`. This works for **any** Angular panel, not just specific panel types:
```json
{
"vizConfig": {
"kind": "stat",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalPanel": {
"type": "singlestat",
"format": "short",
"colorBackground": true,
"sparkline": { "show": true },
"fieldConfig": { ... },
"options": { ... }
}
}
}
}
}
}
```
#### How It Works
1. **Backend (v1 → v2):** The conversion detects panels that need Angular migration in two ways:
- If `autoMigrateFrom` is already set on the panel (from v0 → v1 migration) - panel type already converted
- If the panel type is a known Angular panel type (fallback for dashboards stored directly as v1 without v0 → v1 migration)
In the second case, the conversion also transforms the panel type (e.g., `singlestat``stat`) and sets `autoMigrateFrom`. This replicates the same logic as the v0 → v1 migration.
The entire original panel is stored under `options.__angularMigration` for the frontend to run plugin-specific migrations.
2. **Frontend (v2 load):** When building a `VizPanel` from v2 data:
- Extracts `__angularMigration` from options
- Removes it from the options object (not persisted)
- Attaches a custom migration handler via `_UNSAFE_customMigrationHandler`
3. **Plugin load (VizPanel activation):** When the plugin loads, the migration handler calls `plugin.onPanelTypeChanged()` with the original panel data, allowing the plugin's own migration code to run
#### Key Points
- Works for **any** panel with `autoMigrateFrom`, not limited to specific panel types
- Each plugin defines its own migration logic - the backend just preserves the data
- The `originalPanel` contains the complete panel data to ensure no information is lost
- Migration data is removed from options after loaded in frontend
- The 0v → v1 and v1 → v2 conversions automatically detects these Angular panel types if `autoMigrateFrom` is not set.
#### Implementation Files
| File | Purpose |
|------|---------|
| `apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go` | Injects `__angularMigration` during v1 → v2 |
| `public/app/features/dashboard-scene/serialization/layoutSerializers/utils.ts` | Extracts and consumes `__angularMigration` |
| `public/app/features/dashboard-scene/serialization/angularMigration.ts` | Creates migration handler for v2 path |
## Conversion Matrix
The system supports conversions between all dashboard API versions:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,715 @@
{
"kind": "DashboardWithAccessInfo",
"apiVersion": "dashboard.grafana.app/v2beta1",
"metadata": {
"name": "adt885j",
"namespace": "default",
"uid": "yTWet6JgBjlRIWnqRE9ZOmUycfT0tEkr2mljaln1GWIX",
"resourceVersion": "2",
"generation": 2,
"creationTimestamp": "2025-12-16T10:44:31Z",
"labels": {
"grafana.app/deprecatedInternalID": "2409"
},
"annotations": {
"grafana.app/createdBy": "user:u000000001",
"grafana.app/updatedBy": "user:u000000001",
"grafana.app/updatedTimestamp": "2025-12-16T10:51:14Z"
}
},
"spec": {
"annotations": [
{
"kind": "AnnotationQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "grafana",
"version": "v0",
"datasource": {
"name": "-- Grafana --"
},
"spec": {}
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations \u0026 Alerts",
"builtIn": true
}
}
],
"cursorSync": "Off",
"description": "",
"editable": true,
"elements": {
"panel-1": {
"kind": "Panel",
"spec": {
"id": 1,
"title": "Panel1",
"description": "",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "grafana-testdata-datasource",
"version": "v0",
"datasource": {
"name": "PD8C576611E62080A"
},
"spec": {}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "12.4.0-pre",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": 0,
"color": "green"
},
{
"value": 80,
"color": "red"
}
]
},
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
}
},
"overrides": []
}
}
}
}
},
"panel-2": {
"kind": "Panel",
"spec": {
"id": 2,
"title": "Panel2",
"description": "",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "",
"version": "v0",
"spec": {}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "12.4.0-pre",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": 0,
"color": "green"
},
{
"value": 80,
"color": "red"
}
]
},
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
}
},
"overrides": []
}
}
}
}
},
"panel-3": {
"kind": "Panel",
"spec": {
"id": 3,
"title": "Panel3",
"description": "",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "",
"version": "v0",
"spec": {}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "12.4.0-pre",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": 0,
"color": "green"
},
{
"value": 80,
"color": "red"
}
]
},
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
}
},
"overrides": []
}
}
}
}
},
"panel-4": {
"kind": "Panel",
"spec": {
"id": 4,
"title": "Panel4",
"description": "",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "",
"version": "v0",
"spec": {}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "12.4.0-pre",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": 0,
"color": "green"
},
{
"value": 80,
"color": "red"
}
]
},
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
}
},
"overrides": []
}
}
}
}
},
"panel-5": {
"kind": "Panel",
"spec": {
"id": 5,
"title": "Panel5",
"description": "",
"links": [],
"data": {
"kind": "QueryGroup",
"spec": {
"queries": [
{
"kind": "PanelQuery",
"spec": {
"query": {
"kind": "DataQuery",
"group": "",
"version": "v0",
"spec": {}
},
"refId": "A",
"hidden": false
}
}
],
"transformations": [],
"queryOptions": {}
}
},
"vizConfig": {
"kind": "VizConfig",
"group": "timeseries",
"version": "12.4.0-pre",
"spec": {
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
"steps": [
{
"value": 0,
"color": "green"
},
{
"value": 80,
"color": "red"
}
]
},
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
}
},
"overrides": []
}
}
}
}
}
},
"layout": {
"kind": "TabsLayout",
"spec": {
"tabs": [
{
"kind": "TabsLayoutTab",
"spec": {
"title": "Tab1",
"layout": {
"kind": "GridLayout",
"spec": {
"items": [
{
"kind": "GridLayoutItem",
"spec": {
"x": 0,
"y": 0,
"width": 7,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-1"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 7,
"y": 0,
"width": 8,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-2"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 15,
"y": 0,
"width": 9,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-3"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 0,
"y": 8,
"width": 12,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-4"
}
}
},
{
"kind": "GridLayoutItem",
"spec": {
"x": 12,
"y": 8,
"width": 12,
"height": 8,
"element": {
"kind": "ElementReference",
"name": "panel-5"
}
}
}
]
}
}
}
}
]
}
},
"links": [],
"liveNow": false,
"preload": false,
"tags": [],
"timeSettings": {
"timezone": "browser",
"from": "now-6h",
"to": "now",
"autoRefresh": "",
"autoRefreshIntervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"hideTimepicker": false,
"fiscalYearStartMonth": 0
},
"title": "Dashboard with tabs",
"variables": []
},
"status": {},
"access": {
"slug": "dashboard-with-tabs",
"url": "/d/adt885j/dashboard-with-tabs",
"isPublic": false,
"canSave": true,
"canEdit": true,
"canAdmin": true,
"canStar": true,
"canDelete": true,
"annotationsPermissions": {
"dashboard": {
"canAdd": true,
"canEdit": true,
"canDelete": true
},
"organization": {
"canAdd": true,
"canEdit": true,
"canDelete": true
}
}
}
}
@@ -66,7 +66,29 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"thresholds": [
"20",
"30"
]
},
{
"align": "auto",
"thresholds": [
"200",
"300"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +132,22 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"thresholds": [
"50",
"75"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +191,22 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"styles": [
{
"thresholds": [
"5",
"10",
"15"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,29 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"thresholds": [
"20",
"30"
]
},
{
"align": "auto",
"thresholds": [
"200",
"300"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +137,22 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"thresholds": [
"50",
"75"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +198,22 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"styles": [
{
"thresholds": [
"5",
"10",
"15"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +121,20 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +126,20 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,20 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 200,
"threshold1Color": "yellow",
"threshold2": 400,
"threshold2Color": "red",
"thresholdLine": true
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +123,20 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 100,
"threshold1Color": "green",
"threshold2": 300,
"threshold2Color": "blue",
"thresholdLine": false
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +180,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 150,
"threshold1Color": "orange",
"thresholdLine": true
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -198,7 +235,25 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 200,
"threshold1Color": "yellow",
"thresholdLine": false
},
"thresholds": [
{
"color": "purple",
"colorMode": "custom",
"value": 50
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -242,7 +297,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,20 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 200,
"threshold1Color": "yellow",
"threshold2": 400,
"threshold2Color": "red",
"thresholdLine": true
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +128,20 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 100,
"threshold1Color": "green",
"threshold2": 300,
"threshold2Color": "blue",
"thresholdLine": false
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +187,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 150,
"threshold1Color": "orange",
"thresholdLine": true
}
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -207,7 +244,25 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"threshold1": 200,
"threshold1Color": "yellow",
"thresholdLine": false
},
"thresholds": [
{
"color": "purple",
"colorMode": "custom",
"value": 50
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -253,7 +308,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -72,7 +72,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -75,7 +75,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -68,7 +68,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -114,7 +125,20 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"max": 100,
"min": 0,
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -71,7 +71,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -119,7 +130,20 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"max": 100,
"min": 0,
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -83,7 +83,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -127,7 +138,20 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -87,7 +87,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -133,7 +144,20 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +159,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -198,7 +208,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -254,7 +269,14 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"height": 200
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -282,7 +304,14 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"height": 200
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +166,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -207,7 +217,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -265,7 +280,14 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"height": 200
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -294,7 +316,14 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"height": 200
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +115,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +164,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -242,7 +257,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -374,7 +394,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -462,7 +487,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +120,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +171,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -253,7 +268,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -391,7 +411,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -483,7 +508,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -288,6 +288,10 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"show": true,
"showLegend": true
@@ -299,6 +299,10 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"show": true,
"showLegend": true
@@ -71,7 +71,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -312,7 +317,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -74,7 +74,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -325,7 +330,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -68,7 +68,20 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graphite",
"originalOptions": {
"grid": {
"max": 100,
"min": 0
},
"legend": true,
"y2_format": "short",
"y_format": "percent"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -114,7 +127,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"min": 0
},
"legend": false,
"y_format": "bytes"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -204,7 +228,15 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graphite",
"originalOptions": {
"legend": true,
"y2_format": "Bps"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -71,7 +71,20 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graphite",
"originalOptions": {
"grid": {
"max": 100,
"min": 0
},
"legend": true,
"y2_format": "short",
"y_format": "percent"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -119,7 +132,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"grid": {
"min": 0
},
"legend": false,
"y_format": "bytes"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -213,7 +237,15 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graphite",
"originalOptions": {
"legend": true,
"y2_format": "Bps"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -181,6 +181,10 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"dataLinks": [
{
"title": "Graph Data Link",
@@ -188,6 +188,10 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"dataLinks": [
{
"title": "Graph Data Link",
@@ -66,7 +66,25 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"pattern": "Time",
"type": "number"
},
{
"align": "auto",
"pattern": "Value",
"type": "string"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,25 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"pattern": "Time",
"type": "number"
},
{
"align": "auto",
"pattern": "Value",
"type": "string"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -81,7 +81,29 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"legend": true,
"styles": [
{
"colors": [
"red",
"yellow",
"green"
],
"pattern": "/.*/",
"thresholds": [
"10",
"20",
"30"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -125,7 +147,31 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "center",
"pattern": "/.*/"
},
{
"align": "left",
"pattern": "LeftColumn"
},
{
"align": "right",
"pattern": "RightColumn"
},
{
"align": "auto",
"pattern": "AutoColumn"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -169,7 +215,35 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"alias": "Exact Match",
"pattern": "ExactColumnName"
},
{
"alias": "Regex Match",
"pattern": "/Regex.*Pattern/"
},
{
"alias": "Start Pattern",
"pattern": "/^Start/"
},
{
"alias": "End Pattern",
"pattern": "/End$/"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -213,7 +287,37 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"link": true,
"linkTargetBlank": true,
"linkTooltip": "Click to view details",
"linkUrl": "http://example.com/with-tooltip",
"pattern": "LinkWithTooltip"
},
{
"link": true,
"linkTargetBlank": false,
"linkUrl": "http://example.com/no-tooltip",
"pattern": "LinkWithoutTooltip"
},
{
"link": true,
"linkUrl": "http://example.com/minimal",
"pattern": "LinkMinimal"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -257,7 +361,37 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"alias": "ISO Date",
"dateFormat": "YYYY-MM-DD",
"pattern": "DateISO",
"type": "date"
},
{
"alias": "Full DateTime",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "DateTime",
"type": "date"
},
{
"alias": "Time Only",
"dateFormat": "HH:mm:ss",
"pattern": "TimeOnly",
"type": "date"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -389,7 +523,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -433,7 +572,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -477,7 +621,57 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "center",
"colorMode": "cell",
"colors": [
"green",
"yellow",
"red"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [
"100",
"500"
],
"unit": "bytes"
},
{
"alias": "Current Status",
"align": "left",
"colorMode": "value",
"decimals": 0,
"pattern": "Status",
"unit": "short"
},
{
"colorMode": "row",
"link": true,
"linkTargetBlank": true,
"linkTooltip": "View error details",
"linkUrl": "http://example.com/errors",
"pattern": "/Error.*/"
},
{
"alias": "Timestamp",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"pattern": "Hidden",
"type": "hidden"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -521,7 +715,47 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [
{
"text": "Average",
"value": "avg"
},
{
"text": "Maximum",
"value": "max"
},
{
"text": "Minimum",
"value": "min"
},
{
"text": "Total",
"value": "total"
},
{
"text": "Current",
"value": "current"
},
{
"text": "Count",
"value": "count"
}
],
"styles": [
{
"decimals": 1,
"pattern": "/.*/",
"unit": "percent"
}
],
"transform": "timeseries_aggregations"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -565,7 +799,20 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
}
],
"transform": "timeseries_to_rows"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -609,7 +856,20 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "bytes"
}
],
"transform": "timeseries_to_columns"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -653,7 +913,20 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"pattern": "/.*/"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -712,7 +985,20 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
}
],
"transform": "timeseries_to_rows"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -756,7 +1042,29 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"colors": [
"green",
"yellow",
"orange",
"red"
],
"pattern": "/.*/",
"thresholds": [
10,
"20",
30.5
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -800,7 +1108,31 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"colorMode": "cell",
"pattern": "/.*/"
},
{
"colorMode": "cell",
"pattern": "CellColumn"
},
{
"colorMode": "row",
"pattern": "RowColumn"
},
{
"colorMode": "value",
"pattern": "ValueColumn"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -85,7 +85,29 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"legend": true,
"styles": [
{
"colors": [
"red",
"yellow",
"green"
],
"pattern": "/.*/",
"thresholds": [
"10",
"20",
"30"
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -131,7 +153,31 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "center",
"pattern": "/.*/"
},
{
"align": "left",
"pattern": "LeftColumn"
},
{
"align": "right",
"pattern": "RightColumn"
},
{
"align": "auto",
"pattern": "AutoColumn"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -177,7 +223,35 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"alias": "Exact Match",
"pattern": "ExactColumnName"
},
{
"alias": "Regex Match",
"pattern": "/Regex.*Pattern/"
},
{
"alias": "Start Pattern",
"pattern": "/^Start/"
},
{
"alias": "End Pattern",
"pattern": "/End$/"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -223,7 +297,37 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"link": true,
"linkTargetBlank": true,
"linkTooltip": "Click to view details",
"linkUrl": "http://example.com/with-tooltip",
"pattern": "LinkWithTooltip"
},
{
"link": true,
"linkTargetBlank": false,
"linkUrl": "http://example.com/no-tooltip",
"pattern": "LinkWithoutTooltip"
},
{
"link": true,
"linkUrl": "http://example.com/minimal",
"pattern": "LinkMinimal"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -269,7 +373,37 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
},
{
"alias": "ISO Date",
"dateFormat": "YYYY-MM-DD",
"pattern": "DateISO",
"type": "date"
},
{
"alias": "Full DateTime",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "DateTime",
"type": "date"
},
{
"alias": "Time Only",
"dateFormat": "HH:mm:ss",
"pattern": "TimeOnly",
"type": "date"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -407,7 +541,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -453,7 +592,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -499,7 +643,57 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "center",
"colorMode": "cell",
"colors": [
"green",
"yellow",
"red"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [
"100",
"500"
],
"unit": "bytes"
},
{
"alias": "Current Status",
"align": "left",
"colorMode": "value",
"decimals": 0,
"pattern": "Status",
"unit": "short"
},
{
"colorMode": "row",
"link": true,
"linkTargetBlank": true,
"linkTooltip": "View error details",
"linkUrl": "http://example.com/errors",
"pattern": "/Error.*/"
},
{
"alias": "Timestamp",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"pattern": "Hidden",
"type": "hidden"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -545,7 +739,47 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [
{
"text": "Average",
"value": "avg"
},
{
"text": "Maximum",
"value": "max"
},
{
"text": "Minimum",
"value": "min"
},
{
"text": "Total",
"value": "total"
},
{
"text": "Current",
"value": "current"
},
{
"text": "Count",
"value": "count"
}
],
"styles": [
{
"decimals": 1,
"pattern": "/.*/",
"unit": "percent"
}
],
"transform": "timeseries_aggregations"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -591,7 +825,20 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
}
],
"transform": "timeseries_to_rows"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -637,7 +884,20 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "bytes"
}
],
"transform": "timeseries_to_columns"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -683,7 +943,20 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"align": "auto",
"pattern": "/.*/"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -744,7 +1017,20 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"pattern": "/.*/",
"unit": "short"
}
],
"transform": "timeseries_to_rows"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -790,7 +1076,29 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"colors": [
"green",
"yellow",
"orange",
"red"
],
"pattern": "/.*/",
"thresholds": [
10,
"20",
30.5
]
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -836,7 +1144,31 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"styles": [
{
"colorMode": "cell",
"pattern": "/.*/"
},
{
"colorMode": "cell",
"pattern": "CellColumn"
},
{
"colorMode": "row",
"pattern": "RowColumn"
},
{
"colorMode": "value",
"pattern": "ValueColumn"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -123,7 +123,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -130,7 +130,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -94,7 +99,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -98,7 +103,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -81,7 +81,24 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -125,7 +142,28 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"gauge": {
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"grid": {
"max": 10,
"min": 1
},
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -184,7 +222,47 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"mappingTypes": [
{
"name": "value to text",
"value": 1
}
],
"thresholds": "10,20,30",
"valueMaps": [
{
"op": "=",
"text": "test",
"value": "20"
},
{
"op": "=",
"text": "test1",
"value": "30"
},
{
"op": "=",
"text": "50",
"value": "40"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -85,7 +85,24 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -131,7 +148,28 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"gauge": {
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"grid": {
"max": 10,
"min": 1
},
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -193,7 +231,47 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"mappingTypes": [
{
"name": "value to text",
"value": 1
}
],
"thresholds": "10,20,30",
"valueMaps": [
{
"op": "=",
"text": "test",
"value": "20"
},
{
"op": "=",
"text": "test1",
"value": "30"
},
{
"op": "=",
"text": "50",
"value": "40"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -81,7 +81,24 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -140,7 +157,24 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": ""
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -184,7 +218,28 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"gauge": {
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"grid": {
"max": 10,
"min": 1
},
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -243,7 +298,47 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"mappingTypes": [
{
"name": "value to text",
"value": 1
}
],
"thresholds": "10,20,30",
"valueMaps": [
{
"op": "=",
"text": "test",
"value": "20"
},
{
"op": "=",
"text": "test1",
"value": "30"
},
{
"op": "=",
"text": "50",
"value": "40"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -289,7 +384,68 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "grafana-singlestat-panel",
"originalOptions": {
"colorBackground": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"format": "areaF2",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"nullPointMode": "connected",
"postfix": "b",
"postfixFontSize": "50%",
"prefix": "a",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"thresholds": "",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -85,7 +85,24 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -147,7 +164,24 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"thresholds": ""
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -193,7 +227,28 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"gauge": {
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"grid": {
"max": 10,
"min": 1
},
"thresholds": "10,20,30"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -255,7 +310,47 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {
"colors": [
"#FF0000",
"green",
"orange"
],
"grid": {
"max": 10,
"min": 1
},
"legend": true,
"mappingTypes": [
{
"name": "value to text",
"value": 1
}
],
"thresholds": "10,20,30",
"valueMaps": [
{
"op": "=",
"text": "test",
"value": "20"
},
{
"op": "=",
"text": "test1",
"value": "30"
},
{
"op": "=",
"text": "50",
"value": "40"
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -303,7 +398,68 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "grafana-singlestat-panel",
"originalOptions": {
"colorBackground": false,
"colorValue": true,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"format": "areaF2",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"nullPointMode": "connected",
"postfix": "b",
"postfixFontSize": "50%",
"prefix": "a",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"thresholds": "",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -280,6 +280,10 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"tooltip": {
"mode": "single"
}
@@ -289,6 +289,10 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"tooltip": {
"mode": "single"
}
@@ -144,7 +144,18 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -151,7 +151,18 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"yAxes": [
{
"show": true
}
]
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -345,7 +345,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -361,7 +361,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -111,6 +111,10 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"displayMode": "list",
"showLegend": false
@@ -207,6 +211,10 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"displayMode": "list",
"showLegend": false
@@ -115,6 +115,10 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"displayMode": "list",
"showLegend": false
@@ -214,6 +218,10 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
},
"legend": {
"displayMode": "list",
"showLegend": false
@@ -443,7 +443,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -455,7 +455,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -443,7 +443,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -455,7 +455,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -217,7 +217,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -396,7 +401,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -222,7 +222,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -406,7 +411,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +115,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +164,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +120,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +171,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -94,7 +94,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": [
@@ -97,7 +97,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": [
@@ -66,7 +66,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +115,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +164,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +120,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +171,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -108,7 +108,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +159,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -113,7 +113,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +166,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -119,7 +119,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -177,7 +182,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -122,7 +122,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -182,7 +187,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -66,7 +66,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -110,7 +115,12 @@
"kind": "stat",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -154,7 +164,12 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -69,7 +69,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -115,7 +120,12 @@
"group": "stat",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "singlestat",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -161,7 +171,12 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -164,6 +164,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": true,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -170,6 +170,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": true,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -113,7 +113,78 @@
"kind": "timeseries",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"annotate": {
"enable": false
},
"bars": false,
"dashLength": 10,
"dashes": false,
"editable": true,
"error": false,
"fill": 2,
"grid": {},
"legend": {
"alignAsTable": true,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": true,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"resolution": 100,
"scale": 1,
"seriesOverrides": [],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"msResolution": false,
"query_as_alias": true,
"shared": false,
"sort": 0,
"value_type": "cumulative"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
},
"zerofill": true
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -117,7 +117,78 @@
"group": "timeseries",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"annotate": {
"enable": false
},
"bars": false,
"dashLength": 10,
"dashes": false,
"editable": true,
"error": false,
"fill": 2,
"grid": {},
"legend": {
"alignAsTable": true,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": true,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "connected",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"resolution": 100,
"scale": 1,
"seriesOverrides": [],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"msResolution": false,
"query_as_alias": true,
"shared": false,
"sort": 0,
"value_type": "cumulative"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
},
"zerofill": true
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -129,6 +129,74 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -178,7 +246,45 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -227,6 +333,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -296,6 +461,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -138,6 +138,74 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -189,7 +257,45 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -240,6 +346,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -312,6 +477,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -128,6 +128,74 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -179,6 +247,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -249,6 +376,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -299,7 +485,46 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -137,6 +137,74 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -190,6 +258,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -263,6 +390,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -315,7 +501,46 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -68,6 +68,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -119,6 +178,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -72,6 +72,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -125,6 +184,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -84,6 +84,65 @@
"spec": {
"pluginVersion": "8.1.0-pre",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"alertThreshold": true
},
"fieldConfig": {
@@ -148,6 +207,65 @@
"spec": {
"pluginVersion": "8.1.0-pre",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"alertThreshold": true
},
"fieldConfig": {
@@ -88,6 +88,65 @@
"version": "8.1.0-pre",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"alertThreshold": true
},
"fieldConfig": {
@@ -154,6 +213,65 @@
"version": "8.1.0-pre",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"alertThreshold": true
},
"fieldConfig": {
@@ -170,6 +170,74 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -221,6 +289,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -291,6 +418,65 @@
"spec": {
"pluginVersion": "",
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -341,7 +527,46 @@
"kind": "table",
"spec": {
"pluginVersion": "",
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []
@@ -179,6 +179,74 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {
"total avg": "#6ed0e0"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "total avg",
"fill": 0,
"pointradius": 3,
"points": true
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -232,6 +300,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -305,6 +432,65 @@
"version": "",
"spec": {
"options": {
"__angularMigration": {
"autoMigrateFrom": "graph",
"originalOptions": {
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 2,
"fillGradient": 0,
"hiddenSeries": false,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"thresholds": [],
"timeRegions": [],
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"xaxis": {
"mode": "time",
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"logBase": 1,
"show": true
},
{
"format": "short",
"logBase": 1,
"show": true
}
],
"yaxis": {
"align": false
}
}
},
"dataLinks": []
},
"fieldConfig": {
@@ -357,7 +543,46 @@
"group": "table",
"version": "",
"spec": {
"options": {},
"options": {
"__angularMigration": {
"autoMigrateFrom": "table-old",
"originalOptions": {
"columns": [],
"fontSize": "100%",
"scroll": true,
"showHeader": true,
"sort": {
"col": 0,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "auto",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Time",
"type": "date"
},
{
"alias": "",
"align": "auto",
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"decimals": 2,
"pattern": "/.*/",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"transform": "table"
}
}
},
"fieldConfig": {
"defaults": {},
"overrides": []

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