Compare commits

...

1183 Commits

Author SHA1 Message Date
Timur Olzhabayev
8e781a5577 Update .github/CODEOWNERS
Co-authored-by: Artur Wierzbicki <artur.wierzbicki@grafana.com>
2025-12-15 09:23:10 +01:00
Timur Olzhabayev
d2d3f02db8 revert 2025-12-12 17:51:18 +01:00
Timur Olzhabayev
2947db067c replace platform-monitoring 2025-12-12 17:50:22 +01:00
Timur Olzhabayev
b903ef8a65 changing unicorns ownership 2025-12-12 17:48:59 +01:00
Timur Olzhabayev
86c3da53d6 fixing codeowners 2025-12-12 17:48:13 +01:00
Timur Olzhabayev
1573e0cc40 Avoid context resuse when logging an error 2025-12-12 17:26:29 +01:00
Matias Chomicki
f35447435f LogLineContext: remove broken permalink prop (#115252) 2025-12-12 16:24:36 +00:00
Paul Marbach
c0dc92e8cd Gauge: Fit-and-finish tweaks to glows, text position, and sparkline size (#115173)
* Gauge: Fit-and-finish tweaks to glows, text position, and sparkline size

* adjust text height and positions a little more

* cohesive no data handling

* more tweaks

* fix migration test

* Fix JSON formatting by adding missing newline

* remove new line
2025-12-12 11:10:56 -05:00
Matias Chomicki
7114b9cd3b Log Line Details: Fix width calculation in dashboards (#115248)
* FieldSelector: rename functions to be more explicit

* LogDetailsContext: calculate width based on field selector visibility

* LogLineDetails: Fix sidebar max width calculation

* Update functions usage

* Add regression and fix context calculation
2025-12-12 16:56:23 +01:00
Kristina Demeshchik
b40d0e6ff4 Dashboards: Fix accessible color palettes not being saved in v2 schema (#115244)
* Fix palette color v2 conversion

* v2->v1 conversion
2025-12-12 10:36:31 -05:00
Yunwen Zheng
584615cf3f RecentlyViewedDashboards: Set up container on browsing dashboards page (#115164)
* RecentlyViewedDashboards: Set up container on browsing dashboards page
2025-12-12 10:32:05 -05:00
William Wernert
5f80a29a28 Alerting: Prevent users from saving rules to git-synced folders (#114944)
---------

Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
2025-12-12 15:25:08 +00:00
Bogdan Matei
eab5d2b30e Dashboard: Fix rogue modal when exiting edit mode (#115240)
* Dashboard: Fix rogue modal when exiting edit mode

* Remove unnecessary change
2025-12-12 17:17:34 +02:00
Anna Urbiztondo
f3421b9718 Docs: Git Sync scenarios (#115199)
* WIP

* Review

* Move scenarions

* Structure fix

* Edits, fix

* Vale, x-refs

* Feedback, tweaks

* Consolidate HA, titles

* Prettier

* Prettier

* Adding missing content

* Minor edits

* Links

* Prettier
2025-12-12 16:08:28 +01:00
Alex Khomenko
1addfd69b4 Provisioning: Fix duplicated breadcrumb (#115234)
* Provisioning: Fix duplicated breadcrumb

* translations
2025-12-12 15:00:40 +00:00
Gonzalo Trigueros Manzanas
d4a627c5fc Provisioning: Add resource-level warning support. (#115023) 2025-12-12 15:59:45 +01:00
Johnny Kartheiser
46ef9aaa0a Alerting docs: Links fix (#115044)
* alerting docs: links fix

fixes 404 errors

* Alerting docs: Fix Slack integration links

Fixes Slack links and clarifies the first two steps.

* prettier
2025-12-12 08:58:10 -06:00
Serge Zaitsev
6ce672dd00 Chore: Fix mysql query for annotation migration (#115222)
fix mysql query for annotation migration
2025-12-12 15:37:43 +01:00
Matheus Macabu
403f4d41de APIServer: Add wiring for audit backend and policy rule evaluator (#115212) 2025-12-12 15:17:44 +01:00
Juan Cabanas
6512259acc DashboardLibrary: Restore New dashboard naming (#115184) 2025-12-12 10:10:05 -03:00
Will Assis
b2dd095bd8 Unified-storage: sql backend key path backfill (#115033)
* unified-storage: add migration to backfill key_path in resource_history
2025-12-12 08:09:51 -05:00
Charandas
e525b529a8 fix: Add panic for nil authorizer in installer (#115186) 2025-12-12 05:01:03 -08:00
Paul Marbach
7805e18368 Sparkline: Export a class component for now (#115189) 2025-12-12 07:56:31 -05:00
Levente Balogh
7a07a49ecc Dashboard: Update toolbar layout (option 2.) (#115210)
fix: dashboard toolbar layout updates
2025-12-12 12:22:04 +00:00
beejeebus
9a4e13800d Guard config CRUD metrics so it's safe for grafana-enterprise
Previous attempt to land this required this PR and a grafana-enterprise
PR to land at the ~same time.

This PR guards the use of `dsConfigHandlerRequestsDuration` with a nil
check, and doesn't change any existing APIs, so we can land it without
any timing issues with grafana-enterprise.

Once this has landed, we'll make a follow-up PR for grafana-enterprise.
2025-12-12 07:21:29 -05:00
Nathan Marrs
a0c4e8b4f4 Suggested Dashboards: Add missing loaded event tracking for v1 of feature (#115195)
## Summary

Fixes a regression where the `loaded` analytics event was not being tracked for the `BasicProvisionedDashboardsEmptyPage` component, which is the component shown in production when the `suggestedDashboards` feature toggle is disabled (i.e. community dashboards disabled but v1 of feature enabled)

## Problem

Regression introduced by https://github.com/grafana/grafana/pull/112808/changes#diff-3a19d2e887a3344cb0bcd2449b570bd50a7d78d1d473f4a3cf623f9fe40f35fc adding community dashboard support to `SuggestedDashboards`, the `BasicProvisionedDashboardsEmptyPage` component was missing the `loaded` event tracking. Component is mounted here: https://github.com/grafana/grafana/pull/112808/changes#diff-fba79ed6f8bfb5f712bdd529155158977a3e081d1d6a5932a5fa90fb57a243e6R82. This caused analytics discrepancies where in the past 7 days (note: issue has been present for last several weeks but here is sample of data from previous week):

- 106 provisioned dashboard items were clicked
- Only 1 `loaded` event was received (from `SuggestedDashboards` when the feature toggle is enabled)
- The `loaded` events are missing for the production v1 flow (when `suggestedDashboards` feature toggle is off)

## Root Cause

The `BasicProvisionedDashboardsEmptyPage` component (used in v1 flow in production) was never updated with the `loaded` event tracking that was added to `SuggestedDashboards` in PR #113417. Since the `suggestedDashboards` feature toggle is not enabled in production, users were seeing `BasicProvisionedDashboardsEmptyPage` which had no tracking, resulting in missing analytics events.

## Solution

Added the `loaded` event tracking to `BasicProvisionedDashboardsEmptyPage` using the same approach that was previously used (tracking inside the async callback when dashboards are loaded). This ensures consistency with the existing pattern and restores analytics tracking for the production flow.

## Changes

- Added `DashboardLibraryInteractions.loaded()` call in `BasicProvisionedDashboardsEmptyPage` when dashboards are successfully loaded
- Uses the same tracking pattern as the original implementation (tracking inside async callback)
- Matches the event structure used in `SuggestedDashboards` for consistency

## Testing

- Verified that `loaded` events are now tracked when `BasicProvisionedDashboardsEmptyPage` loads dashboards
- Confirmed the event includes correct `contentKinds`, `datasourceTypes`, and `eventLocation` values
- No duplicate events are sent (tracking only occurs once per load)

## Related

- Original analytics implementation: #113417
- Related PR: #112808
- Component: [`BasicProvisionedDashboardsEmptyPage.tsx`](https://github.com/grafana/grafana/blob/main/public/app/features/dashboard/dashgrid/DashboardLibrary/BasicProvisionedDashboardsEmptyPage.tsx)
2025-12-12 09:16:55 -03:00
Victor Marin
fa62113b41 Dashboards: Fix custom variable legacy model to return options when flag is set (#115154)
* fix custom var legacy model options property

* add test
2025-12-12 12:12:46 +00:00
Roberto Jiménez Sánchez
b863acab05 Provisioning: Fix race condition causing unhealthy repository message to be lost (#115150)
* Fix race condition causing unhealthy repository message to be lost

This commit fixes a race condition in the provisioning repository controller
where the "Repository is unhealthy" message in the sync status could be lost
due to status updates being based on stale repository objects.

## Problem

The issue occurred in the `process` function when:
1. Repository object was fetched from cache with old status
2. `RefreshHealth` immediately patched the health status to "unhealthy"
3. `determineSyncStatusOps` used the stale object to check if unhealthy
   message was already set
4. A second patch operation based on stale data would overwrite the
   health status update

## Solution

Introduced `RefreshHealthWithPatchOps` method that returns patch operations
instead of immediately applying them. This allows batching all status updates
(health + sync) into a single atomic patch operation, eliminating the race
condition.

## Changes

- Added `HealthCheckerInterface` for better testability
- Added `RefreshHealthWithPatchOps` method to return patch ops without applying
- Updated `process` function to batch health and sync status updates
- Added comprehensive unit tests for the fix

Fixes the issue where unhealthy repositories don't show the "Repository is
unhealthy" message in their sync status.

* Fix staticcheck lint error: remove unnecessary nil check for slice
2025-12-12 13:24:58 +02:00
Ezequiel Victorero
c7c052480d Chore: Bump grafana/llm 1.0.1 (#115175) 2025-12-12 11:22:37 +00:00
Gabriel MABILLE
478ae15f0e grafana-iam: Use parent folder to authorize ResourcePermissions (#115008)
* `grafana-iam`: Fetch target parent folder

* WIP add different ParentProviders

* Add version

* Move code to a different file

* Instantiate resourceParentProvider

* same import name

* imports

* Add tests

* Remove unecessary test

* forgot wire

* WIP integration tests

* Add test to cover list

* Fix caching problem in integration tests

* comments

* Logger and comments

* Add lazy creation and caching

* Instantiate clients only once

* Rerun wire gen
2025-12-12 11:43:12 +01:00
Erik Sundell
8ebb1c2bc9 NPM: Remove dist-tag code (#115209)
remove dist-tag
2025-12-12 11:41:57 +01:00
Marc M.
5572ce966a DynamicDashboards: Hide variables from outline in view mode (#115142) 2025-12-12 10:34:47 +00:00
Marc M.
e3510f6eb3 DynamicDashboards: Replace discard changes modal (#114789) 2025-12-12 11:24:53 +01:00
Mihai Doarna
a832e5f222 IAM: Add missing params to team search request (#115208)
add missing params to team search request
2025-12-12 12:13:43 +02:00
Levente Balogh
c5a5482d7d Doc: Add docs for displaying links in the dashboard-controls menu (#115201)
* docs: add docs for displaying links in the dashboard-controls menu

* Update docs/sources/as-code/observability-as-code/schema-v2/links-schema.md

Co-authored-by: Anna Urbiztondo <anna.urbiztondo@grafana.com>

---------

Co-authored-by: Anna Urbiztondo <anna.urbiztondo@grafana.com>
2025-12-12 09:57:35 +00:00
Gareth
169ffc15c6 OpenTSDB: Run suggest queries through the data source backend (#114990)
* OpenTSDB: Run suggest queries through the data source backend

* use mux
2025-12-12 18:36:52 +09:00
Levente Balogh
296fe610ba Docs: Add docs for displaying variables in the dashboard-controls (#115205)
docs: update docs for adding a template variable
2025-12-12 10:34:13 +01:00
grafana-pr-automation[bot]
eceff8d26e I18n: Download translations from Crowdin (#115193)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-12 09:30:01 +00:00
Lauren
3cdfe34ec8 Alerting: Fix Alerts page filtering (#115178)
* Alerting: fix filtering on alerts page

* exclude __name__ from label filter dropdown list
2025-12-12 08:16:55 +00:00
Erik Sundell
35c214249f E2E Selectors: Fix comment typo (#115197)
fix typo
2025-12-12 08:59:10 +01:00
Erik Sundell
c3224411c0 NPM: Use env var for OIDC token auth instead of direct npmrc (#115153)
* use env var

* ignore spellcheck
2025-12-12 07:45:04 +01:00
Steve Simpson
b407f0062d Alerting: Add an authorizer to the historian app (#115188)
historian: add an authorizer

Co-authored-by: Charandas Batra <charandas.batra@grafana.com>
2025-12-11 23:34:37 +00:00
Haris Rozajac
0385a7a4a4 Dashboard Import: disable importing V2 dashboards when dashboardNewLayouts is disabled (#114188)
* Disable importing v2 dashboards when dynamic dashboards are disabled

* clean up

* Update error messaging
2025-12-11 15:54:06 -07:00
Jack Baldry
1611489b84 Fix path to generation and source content (#115095)
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
2025-12-11 21:40:35 +00:00
Eric Hilse
e8039d1c3d fix(topbar): remove minWidth property for better layout handling (#115166) 2025-12-11 13:28:30 -07:00
Andres Torres
652b4f2fab fix(setting): Add default scheme to handle k8s api errors (#115177) 2025-12-11 20:12:25 +00:00
Ezequiel Victorero
c35642b04d Chore: Bump nodemailer with forced resolution (#115172) 2025-12-11 16:40:23 -03:00
Larissa Wandzura
91a72f2572 DOCS: Updates to Elasticsearch data source docs (#115021)
* created new configure folder, rewrote intro page

* updated configure doc

* updated query editor

* updates to template variables

* added troubleshooting doc, fixed heading issues

* fix linter issues

* added alerting doc

* corrected title

* final edits

* fixed linter issue

* added deprecation comment per feedback

* ran prettier
2025-12-11 19:21:33 +00:00
Bogdan Matei
f8027e4d75 Dashboard: Implement modal to confirm layout change (#111093) 2025-12-11 19:17:23 +00:00
Paul Marbach
f5b2dde4a1 Suggestions: Add keyboard support (#114517)
* Suggestions: hashes on suggestions, update logic to select first suggestion

* fix types

* Suggestions: New UI style updates

* update some styles

* getting styles just right

* remove grouping when not on flag

* adjust minimum width for sidebar

* CI cleanups

* updates from ad hoc review

* add loading and error states to suggestions

* remove unused import

* update header ui for panel editor

* restore back button to vizpicker

* fix e2e test

* fix e2e

* add i18n update

* use new util for setVisualization operation

* Apply suggestions from code review

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>

* comments from review

* updates from review

* Suggestions: Add keyboard support

* fix selector for PluginVisualization.item

---------

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2025-12-11 14:13:33 -05:00
Misi
0c264b7a5f IAM: Add user search endpoint (#114542)
* wip: initial changes, api registration

* wip

* LegacySearch working with sorting

* Revert mapper change for now

* Clean up

* Cleanup, add integration tests

* Improve tests

* OpenAPI def regen

* Use wildcard search, fix lastSeenAt handling, add lastSeenAtAge

* Add missing files

* Fix merge

* Fixes

* Add tests, regen openapi def

* Address feedback

* Address feedback batch 2

* Chores

* regen openapidef

* Address feedback

* Add tests for paging

* gen apis

* Revert go.mod, go.sum. go.work.sum

* Fix + remove extra tracer parameter
2025-12-11 19:54:48 +01:00
Ashley Harrison
d83b216a32 FS: Fix rendering of public dashboards in MT frontend service (#115162)
* pass publicDashboardAccessToken to ST backend via bootdata

* slightly cleaner

* slightly tidy up go templating

* add HandleView middleware
2025-12-11 17:56:40 +00:00
Anna Urbiztondo
ada14df9fd Add new glossary word (#115070)
* Docs: Add grafanactl term to glossary

* Edit to adapt to Glossary def length

* Fix

* Real fix

* Fix link

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2025-12-11 17:05:21 +00:00
Tobias Skarhed
f63c2cb2dd Scopes: Don't use redirect if you're on an active scope navigation (#115149)
* Don't use redirectUrl if we are on an active scope navigation

* Remove superflous test
2025-12-11 17:42:47 +01:00
Tobias Skarhed
fe4c615b3d Scopes: Sync nested scopes navigation open folders to URL (#114786)
* Sync nav_scope_path with url

* Let the current active scope remain if it is a child of the selected subscope

* Remove location updates based on nav_scope_path to maintain expanded folders

* Fix folder tests

* Remove console logs

* Better mock for changeScopes

* Update test to support the new calls

* Update test with function inputs

* Fix failinging test

* Add tests and add isEqual check for fetching new subscopes
2025-12-11 17:34:21 +01:00
grafana-pr-automation[bot]
02d3fd7b31 I18n: Download translations from Crowdin (#115123)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-11 16:31:02 +00:00
Jesse David Peterson
5dcfc19060 Table: Add title attribute to make truncated headings legible (#115155)
* fix(table): add HTML title attribute to make truncated headings legible

* fix(table): avoid redundant display name calculation

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>

---------

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-12-11 12:22:10 -04:00
Roberto Jiménez Sánchez
5bda17be3f Provisioning: Update provisioning docs to reflect kubernetesDashboards defaults to true (#115159)
Docs: Update provisioning docs to reflect kubernetesDashboards defaults to true

The kubernetesDashboards feature toggle now defaults to true, so users
don't need to explicitly enable it in their configuration. Updated
documentation and UI to reflect this:

- Removed kubernetesDashboards from configuration examples
- Added notes explaining it's enabled by default
- Clarified that users only need to take action if they've explicitly
  disabled it
- Kept validation checks to catch explicit disables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 17:08:57 +01:00
Usman Ahmad
bc88796e6e Created Troubleshooting guide for MySQL data source plugin (#114737)
* created troubleshooting guide for mysql data source plugin

Signed-off-by: Usman Ahmad <usman.ahmad@grafana.com>

* Apply suggestions from code review

thanks for the code review

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

* rename file from _index.md to index.md

Signed-off-by: Usman Ahmad <usman.ahmad@grafana.com>

* Update docs/sources/datasources/mysql/troubleshoot/index.md

---------

Signed-off-by: Usman Ahmad <usman.ahmad@grafana.com>
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
2025-12-11 16:42:09 +01:00
Andres Torres
5d7b9c5050 fix(setting): Replacing dynamic client to reduce memory footprint (#115125) 2025-12-11 10:24:01 -05:00
Alexander Akhmetov
73bcfbcc74 Alerting: Collate alert_rule.namespace_uid column as binary (#115152)
Alerting: Collate namespace_uid column as binary
2025-12-11 16:05:13 +01:00
Erik Sundell
4ab198b201 E2E Selectors: Fix package description (#115148)
dummie change
2025-12-11 14:00:54 +00:00
Erik Sundell
0c82f92539 NPM: Attempt to fix e2e-selectors dist-tag after OIDC migration (#115012)
* fetch oidc token from github

* use same approach as electron
2025-12-11 14:35:27 +01:00
Ivana Huckova
73de5f98e1 Assistant: Update origin for analyze-rule-menu-item (#115147)
* Assistant: Update origin for analyze-rule-menu-item

* Update origin, not test id
2025-12-11 13:06:09 +00:00
Oscar Kilhed
b6ba8a0fd4 Dashboards: Make variables selectable in controls menu (#115092)
* Dashboard: Make variables selectable in controls menu and improve spacing

- Add selection support for variables in controls menu (onPointerDown handler and selection classes)
- Add padding to variables and annotations in controls menu (theme.spacing(1))
- Reduce menu container padding from 1.5 to 1
- Remove margins between menu items

* fix: remove unused imports in DashboardControlsMenu
2025-12-11 13:55:03 +01:00
Oscar Kilhed
350c3578c7 Dynamic dashboards: Update variable set state when variable hide property changes (#115094)
fix: update variable set state when variable hide property changes

When changing a variable's positioning to show in controls menu using the edit side pane, the state of dashboardControls does not immediately update. This makes it seem to the user that nothing was changed.

The issue was that when a variable's hide property changes, only the variable's state was updated, but not the parent SceneVariableSet state. Components that subscribe to the variable set state (like useDashboardControls) didn't detect the change because the variables array reference remained the same.

This fix updates the parent SceneVariableSet state when a variable's hide property changes, ensuring components that subscribe to the variable set will re-render immediately.

Co-authored-by: grafakus <marc.mignonsin@grafana.com>
2025-12-11 13:54:30 +01:00
Andres Martinez Gotor
e6b5ece559 Plugins Preinstall: Fix URL parsing when includes basic auth (#115143)
Preinstall: Fix URL setting when includes basic auth
2025-12-11 13:38:02 +01:00
Ryan McKinley
eef14d2cee Dependencies: update glob@npm for dependabot (#115146) 2025-12-11 12:33:34 +00:00
Anna Urbiztondo
c71c0b33ee Docs: Configure Git Sync using CLI (#115068)
* WIP

* WIP

* Edits, Claude

* Prettier

* Update docs/sources/as-code/observability-as-code/provision-resources/git-sync-setup.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Update docs/sources/as-code/observability-as-code/provision-resources/git-sync-setup.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* WIP

* Restructuring

* Minor tweaks

* Fix

* Update docs/sources/as-code/observability-as-code/provision-resources/git-sync-setup.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Feedback

* Prettier

* Links

---------

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>
2025-12-11 11:27:36 +00:00
Lauren
d568798c64 Alerting: Improve instance count display (#114997)
* Update button text to Show All if filters are enabled

* Show state in text if filters enabled

* resolve PR comments
2025-12-11 11:01:53 +00:00
Ryan McKinley
9bec62a080 Live: simplify dependencies (#115130) 2025-12-11 13:37:45 +03:00
Roberto Jiménez Sánchez
7fe3214f16 Provisioning: Add fieldSelector regression tests for Repository and Jobs (#115135) 2025-12-11 13:36:01 +03:00
Alexander Zobnin
e2d12f4cce Zanzana: Refactor remote client initialization (#114142)
* Zanzana: Refactor remote client

* rename config field URL to Addr

* Instrument grpc queries

* fix duplicated field
2025-12-11 10:55:12 +01:00
Victor Marin
d48455cd20 Dashboards: Panel non applicable filters optimization (#115132)
optimisations
2025-12-11 11:31:19 +02:00
Alexander Akhmetov
439d2c806c Alerting: Add folder_uid label to the grafana_alerting_rule_group_rules metric (#115129) 2025-12-11 09:30:55 +01:00
Ivan Ortega Alba
8aab6302c5 Fix conversion error shallowed and normalize conversion status (#115086)
* Fix the conversion shallowed error and normalize the conversion status

* Add unit tests to ensure all permutations data loss detection

* Fix counting issue
2025-12-11 08:01:31 +00:00
Torkel Ödegaard
33c5cbf4de Dashboards: Update edit button and share button (#115093)
* Dashboards: Update edit button and share button

* update translations
2025-12-11 08:54:50 +01:00
Ryan McKinley
d686a49cf7 Preferences: Enable preferences APIserver (#115128) 2025-12-11 09:33:13 +02:00
Victor Marin
cedf08c9ce DashboardDS: Fix datasource annotations not hiding on toggle hide (#115024)
* fix dashboard datasource annotations not hiding on toggle hide

* cleanup
2025-12-11 09:03:38 +02:00
Stephanie Hingtgen
5ca221743f Dashboards: Prevent query for ID 0; improve logging (#115120) 2025-12-11 00:02:52 -07:00
Ryan McKinley
2fc1210b38 Stars: Enable the collections apiserver (#115076) 2025-12-11 06:36:09 +00:00
Ryan McKinley
8542b2f6a2 Live: Move dashboard events from the raw http server to the apiserver (#115066) 2025-12-11 09:26:35 +03:00
Ryan McKinley
a6043deb33 UnifiedStorage: Include RV when fieldSelectors are processed in the backend (#115110) 2025-12-11 09:15:01 +03:00
Stephanie Hingtgen
3697c8dafc Dashboards: Fix logging for conversions (#115126) 2025-12-10 23:52:35 -06:00
Charandas
3a4022061d K8s: discourage nil authorizer return for APIBuilder as well (#115116) 2025-12-10 23:06:09 +00:00
beejeebus
2a65e0cdcb Revert "Wire up data source config metrics correctly"
This reverts commit e433cfa02d.
2025-12-10 17:38:00 -05:00
Paul Marbach
000c00aee9 Sparkline: Improve min/max logic to avoid issues for very narrow deltas (#115030)
* Sparkline: Prevent infinite loop when rendering a sparkline with a single value

* some tests for this case

* refactor out utils, experiment with getting highlightIndex working

* add comments throughout for #112977

* remove unused import

* Update Sparkline.test.tsx

* fix points mode rendering

* Sparkline: Improve min/max logic to avoid issues for very narrow deltas

* spread all config

* defaults deep

* delete unused import

* remove go.work.sum delta

* line break at end of file
2025-12-10 16:54:29 -05:00
beejeebus
e433cfa02d Wire up data source config metrics correctly
Fix metrics for data source configuration CRUD.

Make sure to only create one histogram and only register it with prometheus once.
2025-12-10 16:16:22 -05:00
Will Assis
30045c02c0 unified-storage: add index on resource_history key_path column (#115113) 2025-12-10 16:03:58 -05:00
Paul Marbach
63bfc1596c Gauge: Updates to the design of the panel edit (#115097)
* Gauge: Updates to the design of the panel edit

* i18n

* remove unused const

* i18n

* fix gdev and migration tests

* reduce bar gauge glow factor
2025-12-10 21:03:44 +00:00
Charandas
da14be859e Authorization: panic when specific authorizer returns nil (#114982) 2025-12-10 13:01:34 -08:00
ismail simsek
30d3bb39c0 Chore: Remove deprecated language_provider methods in prometheus package (#114361)
* remove deprecated language provider and its methods

* remove more deprecated code

* yarn lint:prune
2025-12-10 21:07:18 +01:00
Yunwen Zheng
b3f98d4cc3 SaveProvisionedDashboard: Provisioned dashboard "Save as copy" flow (#114435)
* SaveProvisionedDashboard: Save as copy flow

* add copy tags toggle
2025-12-10 14:01:51 -05:00
Isabel Matwawana
f368139802 Docs: Add permissions information (#115107) 2025-12-10 18:24:36 +00:00
Adela Almasan
7ae9f94de7 Suggestions: Handle errors (#114868)
Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-12-10 18:17:24 +00:00
Alexander Akhmetov
a46f0a222e Alerting: Initialize rule routine with initial alert rule fingerprint (#114979)
Alerting: Initialize rule routine with initial fingerprint
2025-12-10 19:14:30 +01:00
Paul Marbach
1146ac790c Sparkline: Prevent infinite loop when rendering a sparkline with a single value (#114203)
* Sparkline: Prevent infinite loop when rendering a sparkline with a single value

* some tests for this case

* refactor out utils, experiment with getting highlightIndex working

* add comments throughout for #112977

* remove unused import

* Update Sparkline.test.tsx

* fix points mode rendering
2025-12-10 12:37:05 -05:00
Gábor Farkas
a847f36df2 datasources: querier: log caller (#115087) 2025-12-10 18:23:59 +01:00
Gabriel MABILLE
9e1fe16873 AuthZ: Remove automatic Admin grant for root folders and dashboards (#115098) 2025-12-10 10:00:24 -07:00
Tania
3ec1c27ad4 Chore: Migrate pluginsAutoUpdate flag to OpenFeature (#114404)
* Chore: Migrate pluginsAutoUpdate flag to OpenFeature

* Update workspace

* fixup! Chore: Migrate pluginsAutoUpdate flag to OpenFeature

* Add a test

* Refactor

* Apply suggestion from @hairyhenderson

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

* Apply suggestions

* Update pkg/services/updatemanager/plugins_test.go

Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>

* Reorder code blocks

---------

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
2025-12-10 17:40:30 +01:00
Yunwen Zheng
094b6a36dc Add feature flag: recentlyViewedDashboards (#115042) 2025-12-10 11:28:19 -05:00
Yuri Tseretyan
47f7b3e095 Alerting: Dedicated permission for Template testing API (#115032) 2025-12-10 10:56:29 -05:00
owensmallwood
5e7b900416 Unified Storage: Adds readme for setting up quotas/overrides (#115031)
* adds readme for setting up quotas/overrides

* updates namespace wording

* updates docs

* update test

* Revert "update test"

This reverts commit ad43e355ba.
2025-12-10 09:21:52 -06:00
Rafael Bortolon Paulovic
5eae7d4f22 feat: legacy ListIterator with batches (#115038)
* feat: legacy ListIterator with batches

* chore: address code review

* chore: remove nil check in nextBatch

* chore: move close before count check

* chore: add err field to batchingIterator for its own errors

* chore: remove unused import
2025-12-10 16:12:08 +01:00
Rafael Bortolon Paulovic
8c6ccdd1ab feat(dashboard): Org-aware cache for schema migration (#115025)
* fix: use dsIndexProvider cache on migrations

* chore: use same comment as before

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

* chore: use LRU cache

* chore: change DefaultCacheTTL to 1 minute

* chore: address copilot reviews

* chore: use expirable cache

* chore: remove unused import
2025-12-10 16:09:16 +01:00
Cauê Marcondes
85c643ece9 Elasticsearch: Add default query mode config setting (#112540)
* elasticsearch: Add default query mode config setting

* doc

* syncing default query mode with url

* addressing PR comments
2025-12-10 15:07:22 +00:00
Galen Kistler
8272edda96 Logs: Default columns API (#114309)
* Logs Drilldown(app-platform): add LogsDrilldownDefaultColumns api

---------

Co-authored-by: L2D2Grafana <liza.detrick@grafana.com>
Co-authored-by: Austin Pond <austin.pond@grafana.com>
2025-12-10 09:02:14 -06:00
Todd Treece
e56c2c5156 Plugins App: Remove unused import (#115096) 2025-12-10 14:59:12 +00:00
Todd Treece
ac55fad1ba Plugins App: Switch to resource authorizer (#115019) 2025-12-10 09:12:26 -05:00
Will Browne
c4c1708e38 Plugins: Sync channel close for app installer readiness (#115078)
sync channel close
2025-12-10 14:07:55 +00:00
Sonia Aguilar
92a8dd8b53 Alerting: Add gh in CLAUDE.md (#114992)
add gh in CLAUDE.md
2025-12-10 14:52:48 +01:00
Ashley Harrison
cc1bba85e4 VizLegend: Always display header for screenreader users (#115003)
always display vizlegend header for screenreader users
2025-12-10 13:44:21 +00:00
Ashley Harrison
27482194e3 InteractiveTable: Improve accessibility and reenable tests (#115002)
* attempt at fixing some stuff

* tidy up

* prettier

* fix suppressions
2025-12-10 13:44:08 +00:00
Ida Štambuk
ea331dc0d3 Dashboards: Add variables with datasource to tracking (#114110) 2025-12-10 14:39:58 +01:00
Steve Simpson
baee9fb214 Alerting: Add historian.alerting app permissions to service identity. (#115082) 2025-12-10 13:05:10 +00:00
Will Browne
39f4b2a959 Plugins: Rename current meta provider to catalog provider (#114966)
rename cloud provider to catalog provider
2025-12-10 12:22:05 +00:00
Will Assis
755b479be4 unified-storage: make sql backend update key_path for kv store (#114879)
* unified-storage: update resource_history_update_rv.sql to populate key_path in resource_history
2025-12-10 07:06:06 -05:00
Dominik Prokop
532a2e5f4d VariablesEditableElement: Set margin correctly (#115079) 2025-12-10 13:04:42 +01:00
Matias Chomicki
a7bbca3451 Logs Panel: Emphasize log line, rename field (#114579)
* Logs: Rename attributes field

* LogLine: emphasize log line body

* LogLine: improve light mode

* Lint

* Update tests

* Only override colors if displayed fields are used

* Fix small font size ignored with displayed fields

* Fix types
2025-12-10 11:19:31 +01:00
dependabot[bot]
633332c750 deps(docker): bump alpine from 3.22.2 to 3.23.0 (#114816)
Bumps alpine from 3.22.2 to 3.23.0.

---
updated-dependencies:
- dependency-name: alpine
  dependency-version: 3.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 10:34:23 +01:00
Misi
8911785fdf Chore: Regenerate iam app objects with 0.48.5 sdk (#115035)
* Regenerate iam app with 0.48.5 sdk

* update ws

---------

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2025-12-10 09:15:12 +00:00
Stephanie Hingtgen
4fd03bc05e Folders: Fix error handling for zanzana (#115056) 2025-12-10 11:45:22 +03:00
Hugo Häggmark
d1761606fb Plugins: Add PluginContext to plugins when scenes is disabled (#114989)
Plugins: Add PluginContext to plugins when scenes is disabled
2025-12-10 06:44:46 +01:00
grafana-pr-automation[bot]
4fe481ec81 I18n: Download translations from Crowdin (#115054)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-10 00:42:27 +00:00
owensmallwood
6b50e2d730 Unified Storage: Update yaml decoding for quotas to accomodate top-level overrides key (#115049)
* update yaml decoding for quotas to accomodate top-level overrides key

* update test

* fix test indentation
2025-12-09 23:14:22 +00:00
Stephanie Hingtgen
ff43c175c8 Folders: Remove duplicate check; improve unit test (#115048) 2025-12-09 22:15:25 +00:00
Jacob Valdez
ae03b08c25 Docs: Creating upgrade guide content for annotation table bloat (#114883) 2025-12-09 16:12:49 -06:00
Todd Treece
0088e55b8f Plugins App: PluginMeta -> Meta (#115034) 2025-12-09 16:01:22 -05:00
Stephanie Hingtgen
d9fc183e39 Folders: Prevent circular dependencies on apis level (#115040) 2025-12-09 15:00:01 -06:00
Nathan Marrs
6bbb00d0a2 Short URL: Change default expiration to never (#115029)
* Short Links: Change default expiration to never expire (-1)

Previously, short links defaulted to expiring after 7 days. This change
updates the default to -1 (never expire) to prevent automatic deletion
of shared dashboard links.

Changes:
- conf/defaults.ini: Set expire_time = -1 and update comment
- conf/sample.ini: Set expire_time = -1 and update comment
- pkg/setting/setting.go: Update MustInt default from 7 to -1

The cleanup logic already handles -1 correctly (only runs when > 0),
so no changes needed there.

This unblocks progress on short URL feature improvements by ensuring
shared links remain accessible indefinitely by default.

* fix go

* update docs / comments

* update missed comment in sample.ini

* Revert "fix go"

This reverts commit e0d099ae31.

* chore: update workspace dependencies

Run 'make update-workspace' to sync Go workspace dependencies.
This updates go.mod and go.sum files to match the current workspace state.

* chore: add modowner for apps/quotas dependency

Assign @grafana/grafana-search-and-storage as owner for apps/quotas
dependency to satisfy modowners CI check.
2025-12-09 20:23:27 +00:00
Paul Marbach
83b0b14af6 Suggestions: Hook project up to auto-triaging (#114984) 2025-12-09 14:53:55 -05:00
Todd Treece
18280e1aa6 Chore: Add owner for quotas in go.mod (#115039) 2025-12-09 19:48:19 +00:00
Mihai Doarna
b3980eeec8 IAM: Add tracing for legacy stores (#114974) 2025-12-09 13:46:18 -06:00
owensmallwood
b8acfade21 Unified Storage: Adds debug logs for checking quotas (#115036)
* adds debug logs for checking quotas

* make update-workspace
2025-12-09 18:59:46 +00:00
Jesse David Peterson
1013d74f13 TimeRange: Additional keyboard shortcut t = to complement t + for zoom in (#115022)
feat(time-range): additional keyboard shortcut "t =" for zoom in
2025-12-09 14:35:43 -04:00
Marc M.
4b999cd943 FeatureToggles: Add multiPropsVariables (#115020) 2025-12-09 18:11:49 +01:00
Stephanie Hingtgen
747da28fe4 Docs: Remove unused feature toggle logsinfinitescrolling (#114983) 2025-12-09 10:52:01 -06:00
Matias Chomicki
3197892094 Log Line Details: Header options and inline icons improvements (#114479)
* LogLineDetailsHeader: introduce divider

* LogLineDetails: improve icons spacing

* useKeyBindings: close sidebar details with escape
2025-12-09 17:15:05 +01:00
Matias Chomicki
6e4de0f81c LogLine: add trailing spaces for copying (#114543)
* LogLine: add trailing spaces for copying

* Lint
2025-12-09 17:08:09 +01:00
Kristina Demeshchik
533ee1f078 Dashboard : Allow applying variable regex to display text (#114426)
* Ability to apply regex to display text

* Frontend tests

* scenes-react version

* lock file

* adjust tests input

* adjust inputs

* unused variable

* change data type

* unit tests

* bump scenes

* bump scenes

* Update docs

* V2->V1 conversion

* re-generate files

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

* chore: use same comment as before
2025-12-09 16:54:54 +01:00
owensmallwood
a3daf0e39d Unified storage: Add quotas app to apiserver (#114425)
* initial generation

* went through doc to add new resource

* added dummy kind so grafana will run

* added dummy handler and custom route

* fix app name

* gets custom route working - still a dummy route

* adds groupOverride to manifest

* adds quotas to grpc client and server

* WIP - trying to get api recognized - not working

* Gets route working

* fixes group and resource vars

* expects group and resource as separate params

* set content-type header on response

* removes Quotas kind and regens

* Update grafana-app-sdk to v0.48.5

* Update codegen

* updates manifest

* formatting

* updates grafana-app-sdk version to 0.48.5

* regen ResourceClient mocks

* adds tests

* remove commented code

* uncomment go mod tidy

* fix tests and make update workspace

* adds quotas app to codeowners

* formatting

* make gen-apps

* deletes temp file

* fix generated folder code

* make gofmt

* make gen-go

* make update-workspace

* add COPY apps/quotas to Dockerfile

* fix test mock

* fixes undefined NewFolderStatus()

* make gen-apps, and add func for NewFolderStatus

* make gen-apps again

* make update-workspace

* regen folder_object_gen.go

* gofmt

* fix linting

* apps/folder make update-workspace

* make gen-apps

* make gen-apps

* fixes enterprise_imports.go

* go get testcontainers

* adds feature toggle

* make update-workspace

* fix go mod

* fix another client mock

---------

Co-authored-by: Steve Simpson <steve@grafana.com>
2025-12-09 09:40:34 -06:00
Rafael Bortolon Paulovic
297e886e1b fix: remove dsIndexProvider from Convert_V2alpha1_to_V0 (#115017) 2025-12-09 16:33:43 +01:00
Mihai Doarna
8602ec7924 IAM: Add integration tests for team search (#114996)
add integration tests for team search
2025-12-09 17:31:38 +02:00
Renato Costa
83311049ad fix: create dashboard in legacy storage within transaction (#114808)
fix: create dashboard within transaction
2025-12-09 10:16:33 -05:00
Kristina Demeshchik
8c4b3d1702 Dashboard: Default dashboard folder to current folder when importing (#114929)
* Set default folder when importing dashboard

* console

* remove unused import
2025-12-09 09:59:21 -05:00
Santiago
b8ad272159 Alerting: Fix header precedence in the remote writer (#114999) 2025-12-09 15:38:57 +01:00
Torkel Ödegaard
b5f1573aef AppChrome: Increase header height from 40-48 (#115004)
AppChrome: Inrease header height from 40-48
2025-12-09 15:19:50 +01:00
Jean-Philippe Quéméner
1f5fd1c0da chore(unified-storage): align how we do tracing (#114998) 2025-12-09 14:53:53 +01:00
Christian Simon
3e66c7ed21 CI: Add Docker Hub authentication to ephemeral instances workflow (#114851)
* CI: Add Docker Hub authentication to ephemeral instances workflow

Add Docker Hub login step to avoid unauthenticated image pull
rate-limiting in the ephemeral-instances-pr-comment workflow.

* Use the correct vault path
2025-12-09 13:15:15 +00:00
Alexander Akhmetov
c59d5d1c8e Alerting: Store instance annotations in alert rule state (#114975)
Alerting: Store annotations in alert instance state
2025-12-09 13:52:42 +01:00
Tobias Skarhed
6746c978b4 Scopes: Resolve path directly from leaf node bugfix (#114507)
* Resolve path directly from leaf node

* Add childrenLoaded field

* Add tests and remove parentNodeId from changeScopes

* Move parentNodeId patameter order

* Resotre call order

* Undo superflous change

* Add comments

* Make sure childrenLoaded state is properly set default to false

* Reference parent path

* Look for parent in state and fetch scopeNode if it is not avilable

* Check for undefined

* Add mock to test

* Set scopeNodeId with recent scopes

* Improve test selector

* Add scope node endpoint to mocks

* Never set childrenLoaded to true when inserting

* Remove unused import

* Pass on the already set childrenLoaded value

* Fix test
2025-12-09 13:44:00 +01:00
Oscar Kilhed
3cac27c611 Dashboards V2: Show banner when a dashboard has been converted from v2 to v1. (#114960)
* Show warning banner when convertion from v2 to v1

* fix edit state

* Reset eslint-suppression.json

* Always show, update copy

* reset eslint-supression.json

* Update copy

* reset eslint-supression.json
2025-12-09 13:38:26 +01:00
Ryan McKinley
8cae4eb0af Investigations: avoid useoldmanifestkinds and remove unused status (#114903) 2025-12-09 15:11:07 +03:00
Jean-Philippe Quéméner
5b9965ee47 fix(unified-storage): check auth before getting value (#114995) 2025-12-09 12:20:37 +01:00
Dominik Prokop
02f431093c Dashboard profiling: Send Faro measurements for individual panels operation time (#114898)
Dahboard profiling: Send Faro measurements for individual panels operation time
2025-12-09 11:44:17 +01:00
Marc M.
39b7d86660 Dashboards: support undo/redo when grouping panels (#114787) 2025-12-09 10:23:44 +01:00
Torkel Ödegaard
ca342afb25 AppChrome: Add proper menu icon for menu, logo icon becomes home (#114713)
* AppChrome: Add proper menu icon for menu, logo icon becomes home

* Update

* Update

* fix merge issue

* Aligning icons

* Simplify styling and fix issues

* fixes

* style fix

* Fixed unit test

* review updates

* update

* Update

* Remove feature highlight

* fix lint

* remove unused parts
2025-12-09 09:59:40 +01:00
Victor Marin
de42ff2f75 Dashboards: Fix versions tab not showing in dashboard settings after making dashboard editable (#114963)
* fix showing versions tab on dashboard settings after making dashboard editable

* Update public/app/features/dashboard-scene/scene/NavToolbarActions.tsx

Co-authored-by: Marc M. <146180665+grafakus@users.noreply.github.com>

* Update public/app/features/dashboard-scene/scene/new-toolbar/actions/MakeDashboardEditableButton.tsx

Co-authored-by: Marc M. <146180665+grafakus@users.noreply.github.com>

---------

Co-authored-by: Marc M. <146180665+grafakus@users.noreply.github.com>
2025-12-09 10:24:05 +02:00
Gareth
8eb25a0164 OpenTSDB: Support all query options in the backend (#114822)
* update backend to support all query options

* update backend tests

* move formatDownsampleInterval to utils
2025-12-09 17:18:06 +09:00
Charandas
16f5eab786 MTFF: Allow viewers access in cloud (#114607)
* Reapply "K8s: read resource configs from API Enablement for API Builders" (#114475)

This reverts commit 4130bd9cd3.

* revert part that broke things

* FF service changes are gonna come later

* MTFF: allow viewers access to MTFF by enforcing runtime_config for custom routes

* unused var

* removed now

* pass the test, include defaults

* revert sample.ini change
2025-12-08 17:37:10 -08:00
grafana-pr-automation[bot]
802e208440 I18n: Download translations from Crowdin (#114987)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-09 00:41:23 +00:00
Tobias Skarhed
a1517debfa Docs: Specify permissions for creating public dashboards (#113086)
Co-authored-by: jtvdez <jacob.valdez@grafana.com>
2025-12-08 22:43:38 +00:00
Bogdan Matei
15c93100ab Dashboards: Fix autogrid selection / drag and drop (#114964) 2025-12-08 16:52:00 +00:00
Sergej-Vlasov
ab9b070eb0 VariablesEditView: Update cloned variable key when duplicating (#114908)
update cloned variable key when duplicating
2025-12-08 16:34:21 +00:00
Tim Levett
e40673b298 github-action: Breaking change label prompts you to create a what's new (#113241)
* (workflow) add in what's new comment when we have a breaking change

* levitate as well

* fix add to what's new label
2025-12-08 16:23:14 +00:00
Victor Marin
7ea009c7f8 Dashboards: Per panel filtering for timeseries (#114499)
* wip per panel group by

* wip groupBy per panel

* wip groupBy per panel

* groupBy per panel action tests

* fix

* fix

* fix

* fix

* CR mods

* switch to dropdown

* adjust apply

* optimise action logic to avoid unnecessary triggers

* canary scenes

* wip

(cherry picked from commit 51a00db93d0805f481a9e48213382468f1eb2986)

* optimise action logic to avoid unnecessary triggers

(cherry picked from commit c4de2dfff8)

* refactor

* refactor

* memoize values/ refactor

* refactor

* refactor components - do not make async call unless queries/groupByOptions change

* canary scenes

* fix test

* Optimise handlers

* Reset options if they are not applied

* refactor subscriptions

* refactor

* scenes bump

* fixes

* properly deactivate header actions on panel edit

* list

* refactor showing menu using css, remove header deactivation code from panel-edit

* cleanup

* cleanup

* cleanup + action redesign

* i18n

* wip

* wip

* wip

* wip

* wip

* tests

* pr mods

* translations

* fix

* fix

* fixes

* translations

* translations

* extra ff check

* CR mods

---------

Co-authored-by: Sergej-Vlasov <sergej.s.vlasov@gmail.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-12-08 16:18:04 +00:00
Kristina Demeshchik
fef6196195 Dashboard: Default weekStart to an empty string (#114932)
* Default clien scene-based logic to empty string to match backend + non-scene logic

* re-gen snapshots
2025-12-08 10:49:36 -05:00
Ashley Harrison
b50cf6e067 FieldColor: Group new accessible options within the select menu (#114690)
* group new accessible options within the select menu

* move comment
2025-12-08 15:10:16 +00:00
Lauren
ccdb6ff261 Alerting: Fix alert instances count display (#114965)
Alerting: fix alert instances count display
2025-12-08 14:54:46 +00:00
Gábor Farkas
692712961b datasources: querier: configurable concurrent-query-limit (#114585) 2025-12-08 15:20:01 +01:00
Mihai Doarna
b2e1b257b3 IAM: Add search for teams in app platform (#113503)
* add legacy search (wip)

* fix search field name

* implement team search endpoint

* generate openapi spec

* generate endpoints for frontend

* minor fixes

* fix issues found while testing

* add more fields to search result

* add basic unit tests

* add more unit tests

* improve getColumns() func in legacy search

* configure search endpoint in team.cue

* add team search handler

* add the searchTeams endpoint to manifest.cue

* make gofmt

* update openapi spec

* generate frontend endpoints

* remove unused field

* move fields defiitions to separate builder

* fix legacy search

* fix unit tests

* fix unit test

* address feedback

* fix unit test

* update openapi specs

* yarn generate-apis

* add missing unit tests
2025-12-08 15:02:59 +02:00
Ashley Harrison
5bd73f3264 Icon: Use empty <svg> as fallback to prevent layout shift (#114901)
render an empty `<svg>` instead to better match styles in other components
2025-12-08 11:11:50 +00:00
Levente Balogh
5a8a730cfe UI Extensions: Add openInNewTab property to link extensions (#114831)
feat: add `openInNewTab` property for link extensions
2025-12-08 12:09:56 +01:00
Hugo Häggmark
7c5457a75e e2e: update @grafana/plugin-e2e version (#114958) 2025-12-08 10:36:34 +00:00
Oscar Kilhed
dab64addf8 SchemaV2: Always set ad hoc filters to empty array when converting to v2 (#114914)
* Always set ad hoc filters to empty array when converting to v2

* Update test files
2025-12-08 11:27:55 +01:00
Ashley Harrison
310662a4d0 QueryEditor: Expose aria-labelledby prop, reenable storybook a11y tests (#114925)
* expose aria-label prop, reenable storybook a11y tests

* extract translations

* expose aria-labelledby instead
2025-12-08 10:27:40 +00:00
Hugo Häggmark
3490c3b0fd e2e: add tests for translations (#114390)
e2e: add tests for translations
2025-12-08 10:19:44 +01:00
Torkel Ödegaard
8bf3ac9710 SelectBase: Use standard portal container (#114844)
* SelectBase: Use standard portal container

* Fixed positioning issue
2025-12-08 10:13:56 +01:00
Gabriel MABILLE
d0977b5245 grafana-iam: Add role apis to the standalone app (#114897) 2025-12-08 09:22:28 +01:00
Ryan McKinley
78b1ae4f27 Search: Fix field selector parsing (#114940) 2025-12-06 16:45:18 +03:00
Steve Simpson
592c599ca6 Alerting: Add configurable transport to historian app (#114935) 2025-12-06 10:37:20 +01:00
Austin Pond
8e11851bb0 Dashboards: Use the OpenAPI generated by app-sdk in the manifest to … (#114858) 2025-12-06 08:01:28 +00:00
Steve Simpson
e9ba45ca4f Update grafana-app-sdk to v0.48.5 (#114810)
Co-authored-by: Owen Smallwood <owen.smallwood@grafana.com>
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2025-12-06 07:34:18 +00:00
grafana-pr-automation[bot]
0f9d0317dc I18n: Download translations from Crowdin (#114938)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-06 00:40:23 +00:00
Charandas
d1cbef9157 K8s: use runtime config for API Builders (#114601)
* Reapply "K8s: read resource configs from API Enablement for API Builders" (#114475)

This reverts commit 4130bd9cd3.

* revert part that broke things

* FF service changes are gonna come later
2025-12-05 11:53:31 -08:00
Todd Treece
5b89d3b807 Plugins App: Add access control (#114869) 2025-12-05 12:56:01 -05:00
Alexander Akhmetov
74c7b5a292 Alerting: Fix creating a new alert rule vesion when only keep_firing_for changes (#114926)
Alerting: Create alert rule vesion when keep_firing_for changes
2025-12-05 18:02:11 +01:00
Marc M.
0adb2461e9 Dashboards: Improve custom variable editor and undo/redo (#114559) 2025-12-05 16:48:34 +01:00
Sarah Zinger
7cd10aa49e SQL Expressions: Fix alerts with sql expressions that have a cte (#114852)
Fix for #114377 - fix alerts with sql expressions that have a cte
2025-12-05 10:14:02 -05:00
Bogdan Matei
bf042afa98 Dashboard: Fix dropping panels in tabs and rows (#114893) 2025-12-05 17:12:12 +02:00
Santiago
b19e546254 Remote Alertmanager: Remove X-Remote-Alertmanager header (#114917)
Remote Alertmanager: Remove X-Remote-Alertmanager haeder
2025-12-05 15:04:42 +00:00
Ryan McKinley
5ac702a4c1 Dashboards: update manifest to avoid useoldmanifestkinds (#114910) 2025-12-05 16:21:30 +02:00
Alexander Zobnin
8a0fa93aec Zanzana: Fix duplicated writes in one request (#114900)
* Zanzana: Fix duplicated writes

* add tests
2025-12-05 13:55:56 +01:00
Tung Nguyen
65817794b5 OpenTSDB: Remove gf-form from opentsdb Annotation Editor (#112590)
* Chore: Remove gf-form in opentsdb AnnotationEditor

* Fix: small typo

* chore: remove stale eslint suppression rule
2025-12-05 12:26:56 +00:00
Andreas Christou
b719aea078 Azure: Fix dcount aggregation (#114666)
* Add parameter type field

* Use parameterType to filter columns for aggregation funcs

* Support selecting column for dcount aggregation
2025-12-05 12:25:56 +00:00
Ryan McKinley
75eb820c73 Folders: update manifest (avoid useoldmanifestkinds) (#114827) 2025-12-05 15:01:11 +03:00
Sergej-Vlasov
be99781176 TransformSaveModelToScene: Force v1 for reports (#114767)
force v1 for reports
2025-12-05 11:01:43 +00:00
Andreas Christou
0a51779107 MSSQL: Remove the need for azure_auth_enabled (#114775)
Remove the need for azure_auth_enabled for MSSQL
2025-12-05 10:42:17 +00:00
Torkel Ödegaard
c74af430a6 Gauge: Only show spotlight in dark themes (#114524)
* Gauge: Only show spotlight in dark themes

* Update
2025-12-05 08:48:39 +01:00
Hugo Häggmark
88478a851e chore: reduce Loki barrel files (#114888) 2025-12-05 08:29:48 +01:00
Pepe Cano
a8d174ccef docs(alerting): add new Examples of trace-based alerts (#114511)
* docs(alerting): add new Examples of trace-based alerts

* fix vale issues
2025-12-05 08:28:16 +01:00
Hugo Häggmark
b3648f0823 chore: introduce toggle for decoupling plugins from bootdata (#114890)
chore: toggle for decoupling plugins from bootdata
2025-12-05 08:09:41 +01:00
grafana-pr-automation[bot]
c53500378e I18n: Download translations from Crowdin (#114886)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-05 00:48:25 +00:00
Galen Kistler
10ad94af38 TableRT: fix bug preventing users from selecting filter operators (#114860)
* fix: bug preventing users from selecting filter operators
2025-12-04 17:02:54 -06:00
Steve Simpson
4969df8a83 Alerting: Add basic auth options to historian args (#114880) 2025-12-04 22:56:07 +01:00
Steve Simpson
f07cc211bd Alerting: Add command line parsing for historian options (#114865) 2025-12-04 22:07:22 +01:00
alerting-team[bot]
ff33237052 Alerting: Update alerting module to de8c2bbf9eba591078e9d9d7c6cbbe4142ef2d0b (#114877)
[create-pull-request] automated change

Co-authored-by: yuri-tceretian <25988953+yuri-tceretian@users.noreply.github.com>
2025-12-04 20:31:19 +00:00
ismail simsek
0291f6d1e7 Postgresql: Fix variable interpolation logic when the variable has multiple values (#114058)
* fix the variable interpolation

* add jest config to grafana-sql

* fix broken tests

* add variable interpolation tests

* lint

* apply fix only to postresql datasource
2025-12-04 20:58:20 +01:00
beejeebus
26c52796f6 Pass the feature flag instead of false to RegisterAPIService
Doh. The feature flag was not actually being used to enable the new DS
config CRUD APIs. This PR fixes that, hashtag facepalm.
2025-12-04 14:17:45 -05:00
Rafael Bortolon Paulovic
ff97bfc772 fix(unified): key_path column default (#114859)
fix: key_path column default
2025-12-04 12:40:21 -05:00
Andrew Hackmann
665daa5a5d Elasticsearch: Client refactor (#114745)
* split up client.go

* split up search_request.go

* remove double spaces
2025-12-04 11:28:38 -06:00
Costa Alexoglou
42661bed36 feat: add default permissions and DTO support for MT (#114829)
* feat: add default permissions and DTO support for MT

* chore: review comments

* chore: review comments
2025-12-04 18:27:49 +01:00
Collin Fingar
c90677831b Library Panels: Update connection generation for V2 (#114504)
* Library Panels: Update connection generation for V2

* add test

---------

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-04 12:21:27 -05:00
Gabriel MABILLE
59ec85b936 grafana-iam: Fix missing UID (#114856) 2025-12-04 18:00:57 +01:00
Todd Treece
bcaf94f219 Plugins API: Add plugins to RBAC mapper (#114843) 2025-12-04 11:58:49 -05:00
Ashley Harrison
83d6eab66a Chore: Upgrade rc- libs (#114788)
* upgrade rc-drawer

* upgrade rc-slider

* update rc-tooltip

* update rc-picker

* update rc-tree

* upgrade rc-cascader

* for some reason this works

* Revert "for some reason this works"

This reverts commit 4f8cbc5a76.

* force react to 18

* add MessageChannel mock

* Revert "add MessageChannel mock"

This reverts commit 93c11d4060.

* Revert "force react to 18"

This reverts commit 6433204d4b.

* Revert "upgrade rc-cascader"

This reverts commit 16c36cd12e.
2025-12-04 16:25:22 +00:00
Ashley Harrison
d7d0c104ab React 19: non-breaking type and test changes (#114760)
non-breaking type and test changes needed for react 19
2025-12-04 16:19:25 +00:00
Alexander Zobnin
030c7099cb Zanzana: Fix shadow client context (#114853)
* Zanzana: Fix shadow client context

* don't cancel on parent context cancel

* share timeout
2025-12-04 17:09:04 +01:00
Gabriel MABILLE
1e82f99b12 grafana-iam: use apiserver errors (#114850)
* `grafana-iam`: Use api server errors

* A bit more verbose
2025-12-04 16:47:06 +01:00
Levente Balogh
e2bef6bf60 Panel Menu: Allow using icons for link extensions (#114836)
* feat: allow using icons for panel menu link extensions

* tests: add a test for checking if the icon is added to the panel menu item
2025-12-04 15:41:49 +00:00
Jacob Valdez
a65cf639f4 Adds workflow that comments on PRs that change defaults.ini with docs reminder (#114739) 2025-12-04 09:28:23 -06:00
Levente Balogh
32a58c56ed Dashboard Controls: Add UI for displaying under menu (#113517)
* feat: add options to render under the controls menu

* fix: filter out hidden annotation layers from the dashboard-controls menu

* fix: adjust spacing between annotation controls in the dashboard-controls menu

* fix: e2e test for variables

* feat: move the menu button next to the variables

* fix: remove duplicate link controls

* fix: show dashboard controls when the dashboard is not saved
2025-12-04 16:22:41 +01:00
Mustafa Sencer Özcan
4c5d9cb95f feat: add unified storage data migration step for playlists (#114582)
* fix: add type

* feat: register step

* feat: add playlist support

* test: add test case

* fix: gen mock

* fix: go gen

* fix: lint

* fix: lint

* fix: tests

* fix: add resource

* fix: readd

* fix: address comments

* fix: independent playlist query for migrations

* fix: remove lock logic for sqlite

* fix: handle creation and update datetimes

* fix: query templating

* fix: simply resources and address comments
2025-12-04 15:15:00 +00:00
Roberto Jiménez Sánchez
e5259c2ad4 Dashboards: Prevent memory leak in CUE validation by reusing context only for 100 validations (#114818)
* fix(dashboard): prevent memory leak in CUE validation by using fresh contexts

Fixes #114344

The CUE validation was reusing a single cue.Context across all
validations, which caused unbounded memory growth due to CUE's internal
caching of intermediate computation results (disjunctions, unifications,
etc.).

Root Cause:
- A single cue.Context was created and reused via getValidator()
- Each validation added entries to the context's internal caches
- These caches grew unboundedly over time
- Memory could not be garbage collected because the context held references

Solution:
- Store the schema source string instead of a compiled cue.Value
- Create a fresh cuecontext.New() for each validation
- This allows the context and its caches to be garbage collected after
  each validation completes

Performance Impact:
- ~2x slower due to schema recompilation per validation
- Acceptable trade-off to prevent memory leaks
- Memory usage stays bounded instead of growing unboundedly

* fix(dashboard): use periodic context recreation to prevent CUE memory leaks

Replace fresh context creation with periodic context recreation approach.
The context is reused for up to 100 validations, then recreated to allow
garbage collection of cached values while maintaining good performance.

This balances performance (only 19% slower than leaky approach) with memory
safety (stable at ~5 MB vs ~2 GB leak).

See https://github.com/grafana/grafana/issues/114344#issuecomment-3605562491

* refactor(cuevalidator): simplify to use mutex instead of atomic counter

Since CUE is not thread-safe, we need the mutex for the entire validation
operation anyway. Using a regular int counter protected by the mutex is
simpler and cleaner than using atomic operations.
2025-12-04 16:05:15 +01:00
mohammad-hamid
3c5d905e0f AuthZ: Redirect legacy resource permissions handler to k8s (part I) (#114199)
* Add K8s API redirect for GET resource permissions

* wire

* move restconfig to options

* address comments

* fix helper after adding RestConfigProvider

* Revert K8s redirect changes for service accounts, teams, and receivers

Keep only dashboard and folder redirect functionality for this PR.
Service accounts, teams, and receivers will be handled in a separate PR.

* address comments

* lint
2025-12-04 10:04:23 -05:00
Will Assis
ae4d2324d6 Unified storage kvstore bulk import support (#113791)
* implement batchdelete in datastore

* implement bulkprocess in kv storage_backend

* convert bulkRVs to snowflake
2025-12-04 09:26:50 -05:00
Mariell Hoversholm
64a3c298cf docs: use clearly invalid tokens (#114842) 2025-12-04 15:25:59 +01:00
Will Assis
994e1dd58f unified-storage: sqlkv migrations (#114790)
* unified-storage: create resource_events table and add key_path column to resource_history

* Update resource_history_insert template

* update test snapshots

* use latin encoding for key_path and bump size to 2048
2025-12-04 09:21:17 -05:00
Irene Rodríguez
c88314296b Add Zabbix to the list of unsupported data sources (#114823)
Fixes: https://github.com/grafana/support-escalations/issues/19739
2025-12-04 14:51:59 +01:00
Andreas Christou
ff4228bd58 Azure: Improved column handling in logs query builder (#114667)
* Add parameter type field

* Use parameterType to filter columns for aggregation funcs

* Add tests for aggregate components
2025-12-04 12:48:55 +00:00
Gareth
d92898888c OpenTSDB: Fix metric dropdown autocomplete (#114825) 2025-12-04 21:34:52 +09:00
Steve Simpson
7aa77af7c4 Alerting: Implement notification history query endpoint. (#114736)
Implements the /notification/query endpoint on the historian app. Note that it
does not apply any RBAC right now, that will be a follow up commit.

We have to use a go-kit logger in grafana/alerting, so an adapter is needed.
Going from go-kit to slog is a bit hairy but works well enough.
2025-12-04 13:26:09 +01:00
Andreas Christou
94b7d6f7b8 Azure: Include aggregate columns in logs builder (#114684)
* Include groupBy and aggregate columns

* Order by tests
2025-12-04 12:22:23 +00:00
Steve Simpson
b71ed229f1 Alerting: Minor refactor to historan app RegisterAppInstaller. (#114828)
Splits the function in two so that NewAppInstaller can be used stanalone.
2025-12-04 11:52:24 +00:00
David Harris
45cc410ab8 feat: add new feature highlights for tempo and pyroscope (#114761)
* add new ds feature highlights

* fix translation

* fix translation again
2025-12-04 11:08:57 +00:00
Samarth Bagga
7f4a94a6bd Explore: Use new Table component (#111463)
* Update TableContainer.tsx

Use PanelRenderer in TableContainer instead of Table

* Passing OnCellFilterAdded

* Fix lint

* Fix

* Update tests

* Update tests

---------

Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
2025-12-04 12:00:44 +01:00
Alexander Zobnin
5c49dbf4c4 Zanzana: Non-blocking shadow compile (#114774) 2025-12-04 11:28:09 +01:00
Alexander Zobnin
ed91ada3c0 Zanzana: Allow resources to derive permissions from folders by default (#114820) 2025-12-04 11:27:59 +01:00
Santiago
73b9a8c3af Alerting: Add datasource_uid query param to search for rules (#114697)
* Alerting: Add datasource param to BE search

* use array for param, datasource -> datasources

* tests

* remove comments

* tests, short-circuit request if all data source names are invalid

* rephrase comment

* update some tests...

* make linter happy

* datasource_uid -> datasource_uids

* added test

* datasource_uids -> datasource_uid

---------

Co-authored-by: Sonia Aguilar <soniaaguilarpeiron@gmail.com>
2025-12-04 09:01:12 +00:00
Alexander Zobnin
f4fbbcc4f4 Zanzana: Fix dashboard access evaluation in folders (#114718)
* Zanzana: Fix dashboard access evaluation in folders

* add negative test

* Fix listing
2025-12-04 09:36:03 +01:00
Dominik Prokop
1ba57a505a v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114779)
* Reapply "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555)"

This reverts commit db9cff8e2d.

* Update input and fix the failing test
2025-12-04 09:23:45 +01:00
Gareth
dc8bb66a45 OpenTSDB: Move health check to the backend (#114082)
* add feature toggle

* move health check to backend

* add tests
2025-12-04 17:11:33 +09:00
Ivan Ortega Alba
c8853f50cf Dashboard migration: Implement v2 to v0 conversions (#114812)
* Update docs

* Remove 406 response since now it is converted

* fix linter

---------

Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
2025-12-04 05:08:03 +00:00
Hugo Häggmark
dcd2086212 chore: reduce cloudwatch barrel files (#114568) 2025-12-04 06:06:41 +01:00
Hugo Häggmark
36ded11aa4 chore: reduce barrel files (#114566) 2025-12-04 06:06:16 +01:00
Johnny Kartheiser
0aeb4feef3 update documentation to mention protected fields (#114809)
* update documentation to mention protected fields

* alerting docs: add protected field info for grafana cloud

add protected field info for grafana cloud

* prettier

* link fix

---------

Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
2025-12-03 19:47:23 -05:00
grafana-pr-automation[bot]
2d2a1da87f I18n: Download translations from Crowdin (#114815)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-04 00:41:38 +00:00
Gabriel MABILLE
e3afb0daf9 grafana-iam: Use the K8sStorage interface (#114799) 2025-12-03 21:41:05 +00:00
Gabriel MABILLE
f7d9d22963 grafana-iam: standalone rely on storage layer resource permissions authorization (#114785)
* : standalone resource permissions authorization done at storage layer

* instantiate the accessclient
2025-12-03 19:16:37 +01:00
Liza Detrick
29cf10f1fb Logs: table add action buttons and deeplink to log line (#114330) 2025-12-03 09:26:41 -08:00
Gabriel MABILLE
8998b1fde4 grafana-iam: Implement api level user authorization (#114498)
* OnGoing

comment

* WIP on the wrapper

* Get before Delete

* WIP: add an unimplemented storage authorizer

* WIP implementing the resource permission authorize

* Implement beforeCreate

* Create, Delete, Update

* List

* Use a resource permissions wrapper

* Switch the main authorizer to service

* Add namespace

* Use compile for list

* Comment

* Remove unecessary comments

* fix bug with folder permissions

* Implement tests for List

* Test get

* List test small refactor

* Delete test

* Reorganize code

* imports

* Start splitting the tests

* test AfterDelete

* actually test beforeWrite

* Implement tests for wrapper create

* Test delete

* Test List and Get

* Fix List

* Remaining tests

* simplify

* Remove comments

* Reorder

* Change authorizer to allow access
2025-12-03 17:06:26 +01:00
Austin Pond
0f698d08d3 appinstaller: Use grafana-app-sdk apiserver.KubernetesGenericAPIServer to wrap the generic API server (#114654)
[App Platform] Use the app-sdk's apiserver.KubernetesGenericAPIServer in the serverWrapper to ensure that any extra logic for handling WebServices is used.
2025-12-03 11:05:00 -05:00
Liza Detrick
c847f1fa4b Logs in Explore: Persist table sorting in the url (#114060) 2025-12-03 08:03:36 -08:00
Todd Treece
157cab192c Plugins API: Add authlib authorizer (#114773) 2025-12-03 11:01:55 -05:00
Dominik Prokop
dbb4eb7e12 v2 conversion error: Throw DashboardVersionError correctly to redirecr to v1 API (#114772)
v2 conversion error: Throw DashboardVersionError correctly
2025-12-03 16:28:14 +01:00
Torkel Ödegaard
c9fe5c3669 Page: Background prop to support canvas background for standard layout pages (#111174)
* Page canvas

* Working

* remove isOnCanvas prop on card, leave for different PR

* Update

* remove leftover

* Remvoe Card changes

* Fix

* Update
2025-12-03 16:10:25 +01:00
Torkel Ödegaard
e89efd7068 Dashboard: Simplify layout categories (#114682)
* Dashboard: Simplify layout categories

* update

* fixing e2e
2025-12-03 16:07:10 +01:00
Renato Costa
3cb03b888f fix: apply appropriate labels and annotations when creating provisioned folders (#114669)
fix: labels and anotations when creating provisioned folders
2025-12-03 09:18:18 -05:00
Sanket Kalekar
d04f51f7ed Auth: Fix inconsistent symbol validation by allowing underscore "_" in strong password policy (#114571)
* Update validation regex for symbol requirement

Fixes #114544 
frontend: accept underscore as valid symbol in password validation

* test: add underscore symbol test for strong password policy

* chore(changelog): add changelog for #114571

* Delete changelog/114571.md

* fix: correct indentation in password test

* chore(workflows): skip OIDC steps for fork PRs

* chore(workflows): pass fork status to reusable workflow

* revert: remove workflow changes for fork detection

* revert: remove fork status parameter from workflow caller

* Fix formatting issues in PR patch check workflow

---------

Co-authored-by: Mihaly Gyongyosi <mgyongyosi@users.noreply.github.com>
2025-12-03 14:32:28 +01:00
Sonia Aguilar
b74465e428 Alerting: Fix 'Rule group does not exist' error toast (#101949) (#114766)
Alerting: Fix "Rule group does not exist" error toast (#101949)
2025-12-03 12:33:48 +01:00
Haris Rozajac
f3ed3a999d Dashboard Schema V2: Preserve ds refs that only have type (#114734)
Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-12-03 11:29:52 +00:00
Ryan McKinley
612af5ef55 Search: improve openapi operation ids (#114754) 2025-12-03 10:28:59 +00:00
Steve Simpson
34ac5059c1 Alerting: Allow missing NGAlert in historian.alerting app (#114750) 2025-12-03 09:39:54 +00:00
Dominik Prokop
bb787a2637 Schema v2: Move annotation mappings out of legacyOptions (#114721)
* Add mappings property to v2(alpha/beta)1

* Mappings convetions

* OpenAPI spec

* fe annotaations mapping

* Update snapshots

* v2->v1 conversion

* fix tests

---------

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-03 10:19:21 +01:00
Matheus Macabu
3e50bfced8 Dependencies: Bump Go to v1.25.5 (#114749) 2025-12-03 10:18:31 +01:00
Alex Khomenko
553d14ba8e Restore dashboards: Add limitations to the docs (#112848)
* Restore dashboards: Document limitations

* Update settings modal text

* Add version history limits

* Update docs/sources/visualizations/dashboards/manage-dashboards/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Apply suggestion from @imatwawana

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/visualizations/dashboards/manage-dashboards/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Feedback

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-12-03 06:34:02 +00:00
grafana-pr-automation[bot]
89d8198154 I18n: Download translations from Crowdin (#114740)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-03 00:40:14 +00:00
Steve Simpson
2673da03d9 Alerting: Update grafana/alerting (#114733) 2025-12-03 00:18:51 +01:00
Seunghun Shin
55b94e6df6 Alerting: Add expression type information to webhook valueString (#112312)
* Alerting: Add expression type to webhook valueString
- Add Type field to NumberValueCapture struct
- Implement AlertQuery.GetExpressionType() method
- Update valueString format to include type information

* Alerting: Add expression type to webhook valueString
- Fix tests

* Alerting: Add expression type to webhook valueString
- Update default annotations in notifier templates to include type field

* Alerting: Add expression type to webhook valueString
- Add type='math' to webhook and email test expectations
2025-12-02 22:03:17 +01:00
Jocelyn Collado-Kuri
5175beb9ef Jaeger: Update docs for gRPC endpoint support (#114714)
* update docs for jaeger grpc support

* add space

* Update docs/sources/datasources/jaeger/_index.md

Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>

---------

Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
2025-12-02 12:03:25 -08:00
Paul Marbach
021e0c6da0 Suggestions: improve styling for new version (#114381)
* Suggestions: hashes on suggestions, update logic to select first suggestion

* fix types

* Suggestions: New UI style updates

* update some styles

* getting styles just right

* remove grouping when not on flag

* adjust minimum width for sidebar

* CI cleanups

* updates from ad hoc review

* add loading and error states to suggestions

* remove unused import

* update header ui for panel editor

* restore back button to vizpicker

* fix e2e test

* fix e2e

* add i18n update

* use new util for setVisualization operation

* Apply suggestions from code review

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>

* comments from review

* updates from review

---------

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2025-12-02 11:36:46 -08:00
Ezequiel Victorero
227b596a46 Snapshots: Migrate API as dashboards k8s subresource (#113552) 2025-12-02 16:26:45 -03:00
Dominik Prokop
2ef211fe96 Revert "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555) (#114725)
Revert "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555)"

This reverts commit ac62070ac7.
2025-12-02 19:07:11 +00:00
Santiago
f4b8f2d038 Alerting: Filter alerts by data source on the back end (search) (#114717) 2025-12-02 18:41:51 +01:00
Dominik Prokop
ac62070ac7 v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555) 2025-12-02 17:34:45 +00:00
Matias Chomicki
ec5165d1a4 Logs Volume: Show visible range of logs in Explore (#114501)
* Logs Volume: Show visible range of logs

* Translations

* Prettier and translations

* Unfocus test
2025-12-02 18:08:48 +01:00
Liza Detrick
a112c6c169 Logs Explore: logsdrilldown authorizer permissions, rtkq (#114320)
* Logs Explore: logsdrilldown app platform authorizer permissions, rtkq
---------

Co-authored-by: Austin Pond <austin.pond@grafana.com>
2025-12-02 09:07:36 -08:00
Deyan Halachliyski
68b02c2283 Alerting: Correct relative paths in CLAUDE.md Required Reading links (#114709)
fix: correct relative paths in CLAUDE.md Required Reading links
2025-12-02 17:52:09 +01:00
Ivan Ortega Alba
39d0dbeddc Dashboard: Transform v2alpha1 to v1beta1 (#114024)
Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
2025-12-02 09:27:26 -07:00
Tom Ratcliffe
8ff75c2177 Docs: Cleanup enterprise tag usage (#114694)
Co-authored-by: Thomas Casteleyn <thomas.casteleyn@super-visions.com>
2025-12-02 16:15:16 +00:00
Serge Zaitsev
95e65e2588 Chore: Run annotation data migration in batches (#113589)
* run annotation data migration in batches

* how could i miss it

* run in the background, starting from newest annotations

* update tests

* optionally pass batch size via env
2025-12-02 17:10:22 +01:00
Roberto Jiménez Sánchez
f2694ce72f Provisioning: add generic version handling for dashboard export (#114691)
* feat(provisioning): add generic version handling for dashboard export

- Update export job to handle any dashboard version generically (v0, v1, v2, v3, etc.)
- Dynamically construct GroupVersionResource for any stored version
- Cache version-specific clients for efficiency
- Add comprehensive table-driven unit tests for multiple versions
- Add integration test to verify version handling end-to-end
- Remove unnecessary version shim from clean operation (deletion works by name)

* test: add unit test for v2 dashboard version (no suffix)
2025-12-02 16:44:24 +01:00
Will Assis
047e6d45fa unified-storage: use name instead of offset in kvstore continue token (#113560)
* unified-storage: use name instead of offset in kvstore continue token

---------

Co-authored-by: Georges Chaudy <chaudyg@gmail.com>
2025-12-02 10:35:03 -05:00
Todd Treece
bdf529c545 Plugins: Support MT app registration (#113348) 2025-12-02 09:59:46 -05:00
Todd Treece
77e13f7ef8 CI: Run CodeQL on self hosted ubuntu-x64-large-io (#114676) 2025-12-02 09:54:48 -05:00
Alexander Akhmetov
7dd9e8f185 Alerting: Fix ignored filters when paginating alert rules in the API (#114710)
Alerting: Fix alert rules pagination with filters
2025-12-02 15:49:49 +01:00
David
4fc328d57a Chore: updated caniuse dependency (#114640)
updated caniuse dependency
2025-12-02 15:40:31 +01:00
Andreas Christou
1b10581c63 Azure: Fix percentile syntax (#114665)
Fix percentile syntax
2025-12-02 13:50:40 +00:00
Steve Simpson
c8ac64c5cc Alerting: Frontend codegen for historian.alerting app (#114692) 2025-12-02 14:29:10 +01:00
Levente Balogh
0e6166a753 Dashboard Controls: Fix schema transformation for link placement (#114630)
* fix: add missing transformation for scenes -> save model v2

* fix: link placement transformation on the backend between schemas

* fix: update the openapi spec in the tests

* tes: add tests for `transformSceneToSaveModelSchemaV2`

* tests: extend conversion_test.go to cover link placements
2025-12-02 13:12:01 +00:00
Josh Hunt
09883ab4ee Chore: Bump express and js-yaml (#114696)
* Bump express version

* Bump js-yaml version

* Force resolution of js-yaml 4.1.0 to 4.1.1
2025-12-02 13:03:46 +00:00
Sonia Aguilar
e626acbc24 Alerting: Fix RuleEditorCloudRules test flakiness in CI (#114695)
Tests: Fix RuleEditorCloudRules test flakiness in CI

Mock the labels plugin as not installed to ensure consistent test behavior
across OSS and Enterprise environments. The labels plugin detection was
causing different API calls to be made in CI vs local, leading to snapshot
mismatches.

This test is focused on cloud rule creation, not label plugin functionality,
so explicitly disabling the plugin ensures the test remains stable.
2025-12-02 12:39:56 +00:00
Torkel Ödegaard
3abe3fa730 Explore: Remove use of AppChrome navbar (#114680)
* Explore: Remove use of AppChrome navbar

* fix lint

* Active state
2025-12-02 12:29:30 +00:00
Alexander Zobnin
ca9b24d435 Chore: Update OpenFGA to 1.11.1 (#114685)
* Chore: Update OpenFGA to 1.11.1

* fix testcontainers-go dependency error

* update workspaces
2025-12-02 12:46:17 +01:00
Marc M.
e8f1eb1ee8 Sidebar: Fix resizing (#114597) 2025-12-02 11:51:26 +01:00
Peter Štibraný
c0f8e5688b Delete pkg/services/sqlstore/migrator/snapshot directory (#114687)
This is no longer used.
2025-12-02 11:41:53 +01:00
Sonia Aguilar
6e7f28f5a1 Alerting: Fix label values not being shown in the label drop down (#114642)
* fix label values not being shown in the label drop down

* update fetching gops label values

* improve tests

* add test
2025-12-02 10:19:25 +00:00
Sonia Aguilar
9dcad9c255 Alerting: Update prompt for the button 'Analyze rule with assistant' button (#114593)
* Update analyze rule prompt

* Conditionally apply alerts prompt

---------

Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-12-02 11:12:24 +01:00
Sonia Aguilar
f8f4fb5640 Alerting: Fix advanced filter not preserving freewords filter in the list view (#114651)
fix custom advanced filter not preserving freewords filter in the list view
2025-12-02 10:59:47 +01:00
Charandas
d5de92e5b2 fix: propagate service identity correctly for requester (#114423)
* fix: propagate service identity correctly for requester

* revert
2025-12-02 10:38:37 +01:00
Paul Marbach
e36ea78771 Suggestions: Deprecate the old API and put external suggestions behind a flag (#114127)
* Suggestions: Deprecate previous API, enable external plugin suggestions behind flag

* fix types for deprecated builder

* restore some support for cloud-onboarding

* add support for cloud-onboarding usage, add test to ensure it keeps working

* refactor to not hardcode on 'core:'

* remove unused import
2025-12-01 23:22:22 +00:00
Steve Simpson
b332a108f3 Alerting: Notification history query API. (#114677)
* Alerting: Notification history query API.

First cut at defining a namespace scoped route on the historian.alerting app
to query notification history.

* Address review comments
2025-12-02 00:14:54 +01:00
Todd Treece
1060dd538a CI: Run lint on self-hosted ubuntu-x64-small (#114674) 2025-12-01 22:27:14 +00:00
Todd Treece
be8076dee8 CI: Run lint on ubuntu-latest-8-cores (#114673) 2025-12-01 21:40:46 +00:00
Ashley Harrison
7f1ac6188a PanelChrome: Wrapping div needs height: 100% as well (#114655)
wrapping div needs height: 100% as well
2025-12-01 17:39:15 +00:00
Rafael Bortolon Paulovic
31eaf1e898 chore: add log and metric before unified migration enforcement (#114598) 2025-12-01 17:56:59 +01:00
Sergej-Vlasov
780a64e771 DashboardControls: Adjust dashboard controls UI shift (#114639)
adjust controls layout
2025-12-01 16:08:26 +00:00
Dave Thompson
156a6f1375 fix(operator): unify service center capitalization (#113720)
Change "Service Center" to "Service center" in navigation menu to follow
sentence case capitalization style consistently across the application.

Fixes grafana/slo#3818

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-01 17:20:29 +02:00
Isabel Matwawana
5fd4fb5fb8 Docs: Add missing layout options and rework Grid view section (#113007)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Joey <90795735+joey-grafana@users.noreply.github.com>
2025-12-01 09:19:00 -05:00
Torkel Ödegaard
0275939762 Sidebar: Persist state to local storage (#114627)
* fix merge issues

* unsaved file
2025-12-01 12:54:18 +01:00
Serge Zaitsev
c15b1b6f10 Chore: Annotation store interface (#114100)
* annotation legacy store with api server, read only

* annotations are not addressable by ID for read operations

* add ownership for an app

* typo, of course

* fix go workspace

* update workspace

* copy annotation app in dockerfile

* experimenting with store interface

* finalising interfaces

* add tags as custom handler

* implement tags handler

* add missing config file

* mute linter

* update generated files

* update workspace
2025-12-01 12:28:46 +01:00
Josh Hunt
32b9bebc75 Swagger: Load embedded icons from CDN (#114632) 2025-12-01 11:17:28 +00:00
Rafael Bortolon Paulovic
7fce2d9516 fix(unified): set SQLite path in cfg for reusing shared DB (#114580) 2025-12-01 11:30:22 +01:00
Ashley Harrison
2da171595a FieldColor: Add accessible color palettes (#114424)
* add viridis and others, allow passing interpolator directly to FieldColorSchemeMode

* fix bug

* be more defensive when getting the fieldcolor

* backend changes

* add d3-scale-chromatic to list of esModules
2025-12-01 09:51:11 +00:00
Tom Ratcliffe
dd77107ed4 Folders: Add additional query param to legacy API for tracking purposes (#114505) 2025-12-01 09:25:57 +00:00
Stephanie Hingtgen
aaa5d02a3e AuthZ: Set span errors (#114460) 2025-12-01 09:29:04 +01:00
Stephanie Hingtgen
db9afe31e4 Provisioning: Fix panic on watcher when channel is closed (#114439) 2025-12-01 08:24:03 +03:00
Stephanie Hingtgen
3b481f8687 Docs: Add dashboard dto information (#114459)
---------

Co-authored-by: Anna Urbiztondo <anna.urbiztondo@grafana.com>
2025-11-30 07:53:19 -06:00
grafana-pr-automation[bot]
66b72b659f I18n: Download translations from Crowdin (#114604)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-29 00:39:42 +00:00
Alexander Akhmetov
1c3795d97c Alerting: Add spec.title selector to the receivers endpoint (#114599) 2025-11-28 21:22:36 +01:00
Alexander Akhmetov
32c1ad1b53 chore: update grafana-app-sdk to v0.48.4 (#114563)
(chore): update grafana-app-sdk to v0.48.4
2025-11-28 18:20:57 +01:00
Alexander Akhmetov
e53236e9cd Alerting: Add historian app to go.work (#114591) 2025-11-28 15:53:00 +00:00
Steve Simpson
a5d00d6264 Alerting: Fix make update-workspace for historian app (#114578) 2025-11-28 16:17:38 +01:00
Alexander Akhmetov
a2e34d2296 Alerting: Fetch only silenced alerts on the Silences page (#114564) 2025-11-28 16:13:02 +01:00
Sergej-Vlasov
0856cac9ad QueryEditorRows: Clear hideSeriesFrom override on query edit (#114315)
clear hideSeriesFrom override on query edit
2025-11-28 14:25:28 +00:00
Torkel Ödegaard
b5eac7baad Sidebar: Clickout side to close pane (#114523)
* Sidebar: Clickout side to close pane

* fixes

* fixing tests

* fix

* ignore clicks in portals

* fix e2e

* fix test

* Fix click away issues

* add missing file
2025-11-28 15:07:15 +01:00
Alex Khomenko
ce72dc6224 API clients: Remove duplicate config entries (#114569) 2025-11-28 15:41:19 +02:00
Levente Balogh
930f7ce489 Dashboards: Cover the Switch variable in schema transformations - part 2. (#114549)
* feat: add v2alpha_1 conversion for the switch variable

* chore: gofmt fixes

* chore: update comments in tests

* chore: fix gofmt

* Update specs

* tests: update the v2alpha1 openapi snapshot

---------

Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
2025-11-28 14:21:33 +01:00
Sergej-Vlasov
c75137b2d3 QueryVariableForm: Refil query variable query on default data source update (#114491)
* refil qury variable query on default ds update

* refactor datasource update logic

* adjust test
2025-11-28 13:18:14 +00:00
Haris Rozajac
8227ecb499 Dashboard Controls: Display dashboard links on the right side of the toolbar (#114378)
* have dashboard links on the right side

* Lets try a compromise (#114389)

Try to compromise on white space. Having a lot of links will create unessecary empty space under the time controls, but it is necessary if we want to be able to have the links on the right

---------

Co-authored-by: Oscar Kilhed <oscar.kilhed@grafana.com>
Co-authored-by: Sergej-Vlasov <sergej.s.vlasov@gmail.com>
2025-11-28 13:17:59 +00:00
Victor Marin
d3d294c99e Dashboards: Per panel GroupBy action (#113445)
* wip per panel group by

* wip groupBy per panel

* wip groupBy per panel

* groupBy per panel action tests

* fix

* fix

* fix

* fix

* CR mods

* switch to dropdown

* adjust apply

* optimise action logic to avoid unnecessary triggers

* canary scenes

* wip

(cherry picked from commit 51a00db93d0805f481a9e48213382468f1eb2986)

* optimise action logic to avoid unnecessary triggers

(cherry picked from commit c4de2dfff8)

* refactor

* refactor

* memoize values/ refactor

* refactor

* refactor components - do not make async call unless queries/groupByOptions change

* canary scenes

* fix test

* Optimise handlers

* Reset options if they are not applied

* refactor subscriptions

* refactor

* scenes bump

* fixes

* properly deactivate header actions on panel edit

* list

* refactor showing menu using css, remove header deactivation code from panel-edit

* cleanup

* cleanup

* cleanup + action redesign

* i18n

* pr mods

* translations

* fix

* fix

* fix design

---------

Co-authored-by: Sergej-Vlasov <sergej.s.vlasov@gmail.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-11-28 15:03:11 +02:00
Josh Hunt
f0e9c2e8a3 FS: Fix HTML loader jumping a few pixels (#114581) 2025-11-28 12:53:38 +00:00
Tom Ratcliffe
3c76e9ee72 Teams: Refactor most functionality to use hooks (#113713) 2025-11-28 12:42:36 +00:00
Ana Ivanov
43c3322caf Increase limitPerPlugin from 40 to 80 (#114573)
* Increase limitPerPlugin from 40 to 60

* Increase limitPerPlugin from 60 to 80
2025-11-28 12:28:19 +00:00
Rafael Bortolon Paulovic
12c6d7e83f fix(unified): in-proc SQLite data migration (#114537)
* feat: unified storage migrations integration tests

* chore: add comment and adjust db path name

* chore: refactor test cases into interface

* fix: unified SQLite migration with SQLStore migrator

* revert changes to newResourceDBProvider
2025-11-28 13:13:35 +01:00
Ashley Harrison
11a27ab870 Chore: Convert more class components to functional (#114311)
* refactor ColorPicker to functional components

* don't need memo for these components

* convert CustomHeadersSettings to a functional component

* ignore Legacy form components

* ignore legacy forms in some lint rules

* convert JSONFormatter to a functional component

* convert WrapperWithState to a functional component

* convert StatsPicker to a functional component

* convert PopoverController to a functional component

* convert UnitPicker to a functional component

* fix linting

* fix flaky dashboardcontrolsmenu test
2025-11-28 12:00:31 +00:00
Alex Khomenko
026a000304 Provisioning: Prevent duplicate source links (#114577) 2025-11-28 13:32:25 +02:00
Ashley Harrison
49175bb2cb Chore: Run some React 19 codemods (#114575)
running react 19 codemods
2025-11-28 11:27:48 +00:00
Steve Simpson
eafc8ab1cd Alerting: Foundations of historian app. (#114463)
We have two historians in alerting - alert state and notification. The intention
of this app is to provide query capabilities for both.

In this initial commit, the existing /history API is simply cloned to the new
app. It is identical except that it will send Kubernetes-style error responses
instead of Grafana-style.

This approach was taken to implement the new app more iteratively - ideally we
would define a new API, but this requires quite a significant overhaul of the
backend code.
2025-11-28 11:51:56 +01:00
Alexander Zobnin
725df38dad Zanzana: Use team bindings write APIs on the client side (#114503)
* Zanzana: Use team bindings write APIs on the client side

* fix linter

* remove unused code

* Apply suggestions from code review

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>

* fix syntax

---------

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
2025-11-28 11:45:14 +01:00
Alexander Zobnin
358d0eb266 Zanzana: Role write APIs (#114533)
* Zanzana: Role write APIs

* Add tests

* Update pkg/services/authz/zanzana/server/server_mutate_roles.go

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>

* fix func usage

---------

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
2025-11-28 11:44:58 +01:00
Alexander Zobnin
8e7ba60b93 Zanzana: Team bindings write APIs (#114493)
* Zanzana: Team bindings write APIs

* Update pkg/services/authz/zanzana/server/server_mutate_teambindings.go

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>

* fix missing import

* fix linter

---------

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
2025-11-28 10:12:50 +01:00
Alex Khomenko
646fb2aa35 Provisioning: Add source link to provisioned dashboards (#114552)
* Provisioning: Add dashboard source link

* Fix type

* Refactor

* Simplify code

* more fixes

* Extract utils

* Switch to object params

* Fix types

* Move to existing file
2025-11-28 07:47:59 +02:00
Eric Shields
34e3c20250 Chore: tree is never undefined, so set type to non-optional (#114518) 2025-11-27 17:19:38 -08:00
grafana-pr-automation[bot]
48a8d54794 I18n: Download translations from Crowdin (#114565)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-28 00:40:11 +00:00
Jesse David Peterson
62d83a1ba9 Histogram: Fix runaway bucket densification with extremely sparse + large datasets (#114557)
* test(histogram): failing test for runaway densification

* fix(histogram): maximum bucket densification avoids OOM error

* fix(histogram): handle multiple densified buckets
2025-11-27 19:50:47 +00:00
Georges Chaudy
5626dc50f8 feat(unified-storage): Add adaptive backoff to event notifier polling (#114401)
* use exponential backoff in notifier

* Enhance BadgerDB configuration in REST options with memory table size and number of memtables

* Enhance BadgerDB configuration in REST options by adding value threshold for LSM vs value log storage
2025-11-27 18:42:01 +01:00
Kevin Yu
eea50c8e9b Elasticsearch: Update codeowner for elasticsearchImprovedParsing feature toggle (#114556) 2025-11-27 16:58:43 +00:00
owensmallwood
df2f528612 Unified Storage: Adds overrides service to resource server (#113794)
* first pass of adding quotas service resource server

* passes prom reg as param

init quota service as part of server params

* init quota service as part of server params

* adds config and only creates quota service when overrides file path is defined

* when quota service enabled, check quota on create and log result

* update log message

* adds tests for quota service

* adds tests for config reloading when the file changes

* fix linter errors

* fix comment

* use startAndAwaitRunning

* Simplifies quotas service. Call manager.GetConfig() when getting quota instead of watching for changes.

* adds tracing to quotas service

* adds nsr attributes to traces when getting quotas and resource stats

* update comment

* update comment

remove check for nil overrides since it will (should) never happen

* fix linter error

* refactors naming to overrides service

checks quotas in separate function

* fix quotas naming

* fixes more quotas -> overrides naming

* use logger from ctx

* linter - remove trailing whitespace

* log FromContext() when checking quotas

* adds events to spans instead of create new spans

updates tenant -> namespace naming

few other minor fixes
2025-11-27 10:29:16 -06:00
Steve Simpson
7b8191ba42 Alerting: Add kubernetesAlertingHistorian feature toggle. (#114551) 2025-11-27 17:14:16 +01:00
Alan Martin
ba58506ffd Notifications: Prevent triggering duplicate notifications (#114497)
* fix(notifications): prevent event listener re-registration on route changes

* refactor(notifications): rename alert handling functions for clarity

* refactor(notifications): simplify alert handling by using spread operator for payloads

* refactor(events): address feedback - update LegacyEmitter and LegacyEventHandler interfaces for improved type safety

* fix(events): ensure event handlers handle undefined events gracefully in tests

* test(notifications): add tests for event listener registration and cleanup in AppNotificationList
2025-11-27 16:12:26 +00:00
antonio
f12cc5411d Docs: Add feature request guide for contributors (#114538)
* Docs: Add feature request guide for contributors

* prettier

* redo self contrib section

* all pretty no pity

* removed duplicate li
2025-11-27 16:09:04 +00:00
Marc M.
8daa228083 MetricFindValue: add missing "properties" field to the TS interface (#114486) 2025-11-27 16:38:42 +01:00
Steve Simpson
cd797b6789 Alerting: Refactor api_ruler_history.go to allow code re-use. (#114548) 2025-11-27 16:37:09 +01:00
Isabel Matwawana
c7ea3d17cc Docs: Fix alias for next and latest docs (#114547) 2025-11-27 10:09:33 -05:00
Daniele Stefano Ferru
8e4be891c5 Provisioning: add URL and Path in setting response (#114534)
* Provisioning: add URL and Path in setting response

* linting

* marking fields as non-required
2025-11-27 16:06:03 +01:00
Haris Rozajac
763067f8e1 Dashboard Schema V2: Force v2 when dashboardNewLayouts or v2DashboardAPI are enabled (#113548)
* SchemaV2: Convertion from v1beta1 to v2beta1

* Compare backend-frontend v1 convertion

* Compare backend-frontend v1 convertion

* Fix fe be diff

* Resolve DS issues

* Fix ds inconsistecnies

* fix legacy string value issues

* fix ds test

* fix layout issue

* update test

* Fix tests and issue with defaultConfig

* Update output

* Fix viz config convertion

* wip

* Fix v1 to v2 dashboard transformation differences

Major fixes implemented:
- Backend function names in conversion.go
- Backend group field logic for queries, annotations, and vizConfig
- Backend datasource resolution with map-based lookup
- Backend timezone handling (empty string vs browser)
- Backend annotation processing (empty array vs default annotation)
- Backend default values (editable, liveNow)
- Backend variable processing (definition, defaultKeys, refresh, refId)
- Backend panel layout (y position calculations)
- Backend VizConfig (Kind and Group fields, default values)
- Frontend snapshot issue (annotations not processing)
- Frontend datasource references (only when original has valid datasource)

Test results:
- annotation-conversions: PASSING (0 differences)
- dashboard-properties: 3 expected architectural differences
- panel-conversions: Multiple expected architectural differences
- variable-conversions: 7 expected architectural differences

All remaining differences are expected architectural choices between
backend persistence optimization and frontend UI consumption optimization.

* fix issues with panel and annotation queries with no datasource

* definition and regex

* Use proper v1beta1 resource when testing

* remove misc file

* fix ds provider test

* fix def ds test in response transformer

* fix remaining ResponseTransformers test

* timesettings, variable refresh, editable, liveNow, definition

* fix transformSceneToSaveModelSchemaV2 test

* revert legacyRow changes

* fix go lint issues

* normalize y coordinates when serializing a row

* clean up

* update tests

* use GetStringValue from schemaversion

* fix go lint - cyclomatic complexity

* update open api snapshot

* add migrated dashboards

* fix default panel type when panel type is not provided

* revert dash link changes for now

* fix

* fix nested panel issue and default ref in v1

* apply defaults to nested panels too

* update snapshots

* fix issues with annotations

* matchers, showLegend, annotations

* when converting also don't process queries that have only a refId

* fix issues with text var

* fix dash links

* default to collapse: false when serializing

* fix: filter refId from variable query specs in backend migration

- Add buildDataQueryKindForVariable function to filter refId for variables
- Remove default refId "A" in transformSingleQuery
- Only include __legacyStringValue for non-empty string queries
- Remove refId addition in transformSaveModelSchemaV2ToScene.getDataQueryForVariable
- Handle undefined queries gracefully in frontend and backend
- Ensure backend matches frontend behavior for query variable serialization

* fix: default variable refresh to 'never' to match frontend behavior

Change backend default for missing refresh field from 'onDashboardLoad'
to 'never' to match frontend defaultVariableRefresh() schema default

* fix: only include iconColor in annotations when it exists

- Frontend: Use defaultAnnotationQuerySpec().iconColor as fallback to match schema defaults
- Backend: Only set iconColor if it exists in v1 input (not using GetStringValue)
- Ensures iconColor is only included when present in original dashboard

* fix: use schema defaults for annotation enable, hide, and iconColor

- Use defaultAnnotationQuerySpec() to get schema defaults instead of hardcoded values
- Default enable to false (schema default) to match frontend behavior
- Use schema default for iconColor and hide fields
- Ensures consistency with frontend which uses defaultAnnotationQuerySpec() defaults

* fix: set collapse for hidden-header rows to match first explicit row

- When panels appear before the first explicit row, the hidden-header row's
  collapse should match the first explicit row's collapsed value
- Matches frontend behavior where collapse: panel.collapsed uses the next
  row panel's collapsed value
- Ensures consistency between frontend and backend when converting rows layout

* fix: handle constant variables with missing query value

- Frontend: Fix bug where undefined value was converted to string 'undefined'
  - Now defaults to empty string when value is undefined: value ? String(value) : ''
- Backend: Match frontend fix - default to empty string for text/value when query is missing
- Ensures consistency when constant variable query is missing from v1 dashboard

* Fix interval variable handling when query is missing

- Extract intervals from options when query is missing/empty (matches backend behavior)
- Handle undefined/null query in getIntervalsFromQueryString
- Handle missing current object/value in getCurrentValueForOldIntervalModel
- Update interval variable refresh to use literal 'onTimeRangeChanged' in schema
- Use defaultIntervalVariableSpec() for interval variable serialization
- Backend: Generate query string from options when query is missing

* Fix corrupted dashboard with systemRef override

* don't resolve types for template variables in datasource refs on the backend

* fix annotation and ds issues

* fix range and special mappings

* fix datasource var pluginId and regex

* add __systemRef to schema

* update v15 migration annotation to have a ds type because v2 keeps track of if type is in the initial save model, and if it's not it removes it, but for frontendOuput we are running transformSaveModelToScene which will then assign the type

* add migration fields since the backend applies automigrations in collapsed rows

* filter out queries in ResponseTransformer that only have refId field

* lint

* v2: add default query if queries are empty to match v1 behavior

* fix single migration test

* tracking test should have a defined spec otherwise datasource is removed and won't be tracked

* initialize default with default ds ref

* wip

* Do not assign DS if ds group is empty

* cleanup

* revert change in setupTests.ts

* clean up TODO

* query with only refId should not expect to have a group

* refactor: extract v0alpha1 to v1beta1 conversion logic into atomic function

- Extract ConvertDashboard_V0_to_V1beta1 into v0alpha1_to_v1beta1.go
- Extract prepareV0ConversionContext and migrateV0Dashboard helper functions
- Standardize v0.go to match v1.go pattern with inline multi-step conversions
- Implement Convert_V0_to_V2alpha1 using atomic functions (v0->v1beta1->v2alpha1)
- Implement Convert_V0_to_V2beta1 using atomic functions (v0->v1beta1->v2alpha1->v2beta1)
- Remove non-atomic v0alpha1_to_v2alpha1.go file

* test: add version-specific test files for conversion error handling

- Extract v0 conversion tests into v0_test.go
- Extract v1 conversion tests into v1_test.go
- Add v2 conversion tests in v2_test.go
- Ensure all error handling paths in conversion functions are covered
- Add tests for Convert_V0_to_V2alpha1 and Convert_V0_to_V2beta1 error paths
- Add tests for Convert_V1beta1_to_V2alpha1 and Convert_V1beta1_to_V2beta1 error paths
- Add tests for Convert_V2alpha1_to_V2beta1 error handling

* Fix tests

* Fix linter

* Clean up

* feat(dashboard): Add automatic data loss detection for dashboard conversions

Implements comprehensive data loss detection for all dashboard API version conversions.

Components Tracked:
• Panels (visualization + library panels)
• Queries (data source queries, excludes row panel queries)
• Annotations
• Links
• Variables (template variables)

Features:
• Automatic detection via withConversionMetrics wrapper (zero code changes)
• Error type: 'conversion_data_loss_error'
• Logs: panelsLost, queriesLost, annotationsLost, linksLost, variablesLost

Bugs Found:
• Fixed critical bug: metrics.go was silently swallowing ALL errors (return nil → return err)

Testing:
• TestDataLossDetectionOnAllInputFiles - runs all conversions with detailed logging
• V2→V0/V1 downgrades write output for debugging then skip (not yet implemented)
• All tests passing

* Run dashboards on schema v2 E2Es

* reveret unintended changes

* cleanup

* Reset active manager correctly according to toggles config

* Fix new dashboard being serialized as v1

* Rename toggle

---------

Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-11-27 15:52:42 +01:00
Marc M.
eedb613a5e Dashboards: Don't store options when saving a dashboard with Query/Custom variables (#114540) 2025-11-27 15:41:38 +01:00
Alexander Akhmetov
42d3673d04 Alerting: Add rule_limits to rule list requests (#114176)
* Alerting: Add rule_limits to rule list requests

* Unify pagination limits calculation for GMA and DMA rules

* Fix limits, add tests

* Alerting: Rename filter functions and limit properties for clarity

- hasClientSideFilters → hasGrafanaClientSideFilters
- hasDatasourceFilters → hasDatasourceClientSideFilters
- gmaLimit → grafanaManagedLimit
- dmaLimit → datasourceManagedLimit

---------

Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-11-27 14:19:38 +00:00
Levente Balogh
8e73cc2f70 Dashboards: Cover the Switch variable in schema transformations - part 1. (#114293)
fix: cover the switch variable when transforming betwen v1 and v2 schemas
2025-11-27 15:14:42 +01:00
Alexander Zobnin
80fc87339a Zanzana: Role binding hooks (#114470)
* Zanzana: Role bindings hooks WIP

* Empty hooks for role bindings

* implement hooks for role bindings

* add tests

* apply review suggestions
2025-11-27 15:11:34 +01:00
Santiago
8515bcc6b0 Alerting: Use data source headers when remote writing (#114528) 2025-11-27 14:57:54 +01:00
Laura Fernández
f872fd7f2f Chore: Update body-parser to v2.2.1 (#114539) 2025-11-27 14:06:27 +01:00
Rafael Bortolon Paulovic
4c869a21a4 feat(unified): data migration integration tests (#114418)
* feat: unified storage migrations integration tests

* chore: add comment and adjust db path name

* chore: refactor test cases into interface
2025-11-27 13:35:49 +01:00
Josh Hunt
cffca37999 FS: Check session expiration and rotate if needed (#114433)
* FS: Check session expiration and rotate if needed

* Remove unused return values
2025-11-27 12:30:48 +00:00
Marc M.
95174454e3 ConditionalRendering: Fix for repeated items (#114160) 2025-11-27 12:05:15 +01:00
renovate-sh-app[bot]
1c8f4a745f chore(deps): update dependency node-forge to v1.3.2 [security] (#114522) 2025-11-27 11:47:52 +01:00
Alex Khomenko
fe3e2bf9cb Provisioning: Unify resource and file list pages (#114508)
* Provisioning: Unify resources and files view

* Use interactive table

* Add tests

* Show status

* Omit root

* Fix status

* Fix link

* Tab spacing

* Cleanup

* Move funciton outside

* Add source link

* Hide source link for unsynced files

* Show folders sync status

* refactor

* Fix sync folder logic

* refactor

* fix unsynced files type

* Show external source link

* tweaks

* SHow pending for unsynced files
2025-11-27 12:45:25 +02:00
grafana-pr-automation[bot]
f6dfbe0e15 I18n: Download translations from Crowdin (#114520)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-27 10:17:24 +00:00
Torkel Ödegaard
b90b8f2a34 Dashboard: Sidebar / outline style fixes (#114487)
* Dashboard: Sidebar / outline style fixes

* fixing empty outline node

* fixing empty outline node
2025-11-27 11:00:43 +01:00
Yunwen Zheng
b473524787 Provisioning: View in repository open containing folder (#114513)
* Provisioning: View in repostiory open containing folder

* i18n

* comment

* tweaks

* Simplify for display

---------

Co-authored-by: Clarity-89 <homes89@ukr.net>
2025-11-27 07:01:40 +00:00
Yunwen Zheng
cb05a4ae1b usePullRequestParam: Provisioned dashboard preview banner, decode pull request url before sanitize (#114516)
usePullRequestParam: decode url before sanitize
2025-11-27 08:03:36 +02:00
Eric Shields
84a07be6e4 Chore: Finalize removal of updateNode & expandOrFilter (#114202)
- Remove references to, and related private functions for, `updateNode` and `expandOrFilter`
- Remove obsolete tests
- Update all usages of `updateNode` to `filterNode`
- Integrate `expandOrFilter` functionality into `filterNode`
- Add profiler to `filterNode`
- Add `.claude` to `.gitignore` IDE junk section
- Unit tests for `toggleExpandedNode` and `filterNode`
- Add profiler to `toggleExpandedNode`

Fixes: https://github.com/grafana/grafana-operator-experience-squad/issues/1566
2025-11-26 15:47:32 -08:00
Drew Slobodnjak
a8aef11926 Geomap: Fix data filter for layers (#114515)
* Geomap: Fix data filter for layers

* Simplify comments
2025-11-26 14:59:21 -08:00
owensmallwood
f116539541 Unified Storage: Update readme (#114415)
* update readme

* Adds message about creating database

* update sample storage config
2025-11-26 15:53:00 -06:00
Andreas Christou
a455f9700d Azure: Enable resource picker updates (#114089)
* Default resource picker updates to true

* Update toggle docs
2025-11-26 21:07:24 +00:00
Jesse David Peterson
399370bc2c TimeRange: Avoid x-axis pan jump caused by data loading latency (#114496)
* fix(time-range): avoid x-axis pan jump caused by data loading latency

* refactor(time-range): use a more semantically meaningful names
2025-11-26 20:41:02 +00:00
Jesse David Peterson
b08e7bc373 TimePicker: Show new shortcut for zoom out when experimental flag toggled on (#114506)
* fix(time-picker): show new shortcut for zoom out when flag toggled on

* chore(i18n): extract translations
2025-11-26 20:32:37 +00:00
maicon
7eb467e561 provisioning: acquire server lock before provisioning dashboards+folders (#114488)
* provisioning: acquire server lock before provisioning dashboards+folders

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

---------

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
2025-11-26 16:24:34 -03:00
Torkel Ödegaard
d732bb2751 PanelChrome: Enable new panel padding by default (#114492) 2025-11-26 19:26:53 +01:00
Tito Lins
c29ed31c7a alerting: set model refID if missing/mismatch (#114441) 2025-11-26 17:59:22 +01:00
Paul Marbach
ebaccc781b Suggestions: Update all suggestions suppliers to be functions (#113986)
* Suggestions: Convert panels to use function supplier

* rework deaggregation

* BarGauge

* cleanup and make consistent the deaggregation in suggestions

* Candlestick

* Implement timeseries and clean up some things that can already be deleted

* spotted some typos in self-review

* restore PanelDataSummary deprecated fields, we wont delete till Grafana 13

* change deprecation message

* remove some unused imports

* run prettier

* update radialbar defaults logic

* update tests and logic to DRY up the reduceOptions a bit and more thoroughly test the output

* Trend: Improve suggestions

* updates from review

* add unique DataFrameType list to PanelDataSummary

* add histogram suggestions

* rework panelDataSummary to be a class, change some things

* further boil down PanelDataSummary

* Improve FlameGgraph suggestions

* geomap and other defaults

* reorder the single frame with string and number test
2025-11-26 08:30:38 -08:00
beejeebus
ca8cad68c8 Add a metric to track usage of datasource configuration CRUD
This PR adds `ds_config_handler_requests_duration_seconds` metric to help us
track the release of the new datasource configuration CRUD api.

Fixes https://github.com/grafana/grafana-enterprise/issues/10309
2025-11-26 10:49:11 -05:00
Jacob Valdez
51d562eb81 Docs: Clarify some language in migration assistant docs (#114440)
Co-authored-by: Irene Rodriguez <irene.rodriguez@grafana.com>
2025-11-26 09:21:12 -06:00
Mustafa Sencer Özcan
4130bd9cd3 Revert "K8s: read resource configs from API Enablement for API Builders" (#114475)
Revert "K8s: read resource configs from API Enablement for API Builders (#114…"

This reverts commit 0c2707bbc4.
2025-11-26 16:15:24 +01:00
Andres Torres
759d49a1df feat(setting): Adding setting service client (#114428) 2025-11-26 14:58:49 +00:00
Sonia Aguilar
84fbe6bc7b Alerting: Analyze an alert rule with Grafana Assistant (#114420)
* fix

* rename to analyze

* Enable Analyze rule for GMA recording rules

* Fix declare incident button condition

---------

Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-11-26 13:51:31 +00:00
Jacob Valdez
9606e9c51c Docs: Clarify the uid is metadata.name (#114432) 2025-11-26 07:48:18 -06:00
Alex Khomenko
d49993ddab Provisioning: Disable imports for new dashboard (#114419)
* Provisioning: Disable imports for new dashboard

* Refactor
2025-11-26 15:45:36 +02:00
Torkel Ödegaard
f0a394e67b Dashboards: Use new sidebar in dynamic dashboards (#114245)
* Dynamic dashboards sidebar wip

* Progress

* Outline in view mode cannot change name

* Only one pane at a time

* Adding starbutton and custom precence

* undo / redo working

* Progress

* Update

* Progress

* Update

* Public badge, provisining badge

* playlist stop

* Update

* some initial unit tests

* Fix export tooltip

* Close pane when leaving edit mode if pane is an element

* Update

* e2e fixes

* fixing e2e

* Fix lint suppressions

* e2e fixes

* fixing more e2e

* fixing e2e

* fix e2e

* e2e fixes

* Fixinfg e2e

* fixing e2e
2025-11-26 14:30:18 +01:00
Gilles De Mey
c94bf34d0b Alerting: Patch missing expression model refIds (#114477) 2025-11-26 14:27:31 +01:00
Erik Sundell
5ba3139d4a E2E Selectors: Fix readme typo (#114480)
fix typo
2025-11-26 13:51:16 +01:00
Andres Martinez Gotor
e1a2f178e7 App Plugins: Allow to define experimental pages (#114232) 2025-11-26 13:41:06 +01:00
Erik Sundell
ae2e5f0df7 NPM: Fix e2e-selectors change detection (#114471)
fix git cmd
2025-11-26 13:11:44 +01:00
Matheus Macabu
21c1d9aedd Secrets: Remove unused methods and dependencies from secure value service (#114467) 2025-11-26 12:58:00 +01:00
Gabriel MABILLE
8c7170727b grafana-iam: Prevent crashloops of the standalone IAM server (#114473)
* `grafana-iam`: Prevent crashloops of the standalone IAM server
2025-11-26 12:54:50 +01:00
Tom Ratcliffe
cef4449f14 Folders: Send permissions query param with app platform for folder picker (#114158) 2025-11-26 11:16:47 +00:00
Andreas Christou
a3dacabedf MSSQL: Current-user authentication (#113977)
* Moving things around

* Update frontend to support CUA

* Add CUA support to backend

* Copy parseURL function to where it's used

* Update test

* Remove experimental-strip-types

* Docs

* A bit more of a refactor to reduce complexity

* Revert "Remove experimental-strip-types"

This reverts commit 70fbc1c0cd.

* Review

* Docs updates

* Another docs fix
2025-11-26 11:10:54 +00:00
Matias Chomicki
291e3ea9cf Logs: Persist sort order in the Explore URL (#114350)
* Logs: store sort order in the URL

* ToolbarExtensionPoint: pass sort order to extension

* Logs: send sort order in links

* ToolbarExtensionPoint: pass panelState instead of sortOrder

* Update test

* Remove condition

* Logs: initialize sort order and remove unnecessary check
2025-11-26 12:00:15 +01:00
Sonia Aguilar
5538dfe73d Alerting: Add RBAC for enrichment (#113296)
* wip

* wip 2

* prettier

* fix tests

* address pr feedback

* address pr feedback 2

* address review comments

* update useEnrichmentAbilities changing AlwaysSupported with onfig.featureToggles.alertEnrichmentfix
2025-11-26 11:17:51 +01:00
Tobias Skarhed
513b81a531 Scopes: Sync navigation scope and apply subScopes (#114083)
* Set navigationScope if we have a subScope

* Proper URL sync

* Update unit test with dashboards service subscription handling

* Add a bunch of tests

* Update functionality to change scopes when clicking on icon

* Add test for TreeFolderItem

* Udpate test and remove errors

* Fix issues in test

* Use ScopeNavgiations by default in the ScopesDashboardService unit tests

* Remove misplaced test
2025-11-26 11:15:58 +01:00
grafana-pr-automation[bot]
136a0eb4d6 I18n: Download translations from Crowdin (#114456)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-26 09:51:56 +00:00
Alexander Zobnin
bfda534825 Zanzana: Implement role bindings write APIs (#114385) 2025-11-26 10:40:35 +01:00
Sonia Aguilar
d226c35904 Alerting: Add first CLAUDE.md in the frontend alerting folder (#114308)
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
2025-11-26 08:37:57 +00:00
Stephanie Hingtgen
a99946d921 Dashboards: Cleanup includes fields (#114455) 2025-11-26 02:58:20 +00:00
Johnny Kartheiser
2544a3441e alerting docs: initialization_timeout addition (#114373)
added docs for initialization_timeout (https://github.com/grafana/grafana/pull/96053)

Co-authored-by: Irene Rodríguez <irene.rodriguez@grafana.com>
2025-11-25 16:35:38 -06:00
Bryan Huhta
fee3f12e4e grafana-flamegraph: Add storybook stories for major components (#113375) 2025-11-25 15:19:29 -06:00
Stephanie Hingtgen
235ebbf5c5 Dashboards: Prevent panic in validation (#114436) 2025-11-25 20:27:38 +00:00
Ezequiel Victorero
da374527f2 ShortURL: K8s Implement custom authorizer (#114192) 2025-11-25 16:34:10 -03:00
Renato Costa
6e0093f048 fix: update search request for existing provisioned dashboards in modes 3+ (#114412)
Fix search for existing provisioned dashboards in modes 3+

The search query was not requesting the dashboard's "legacy ID". As a result,
the provisioning process would not find existing provisioned dashboards, making
copies of these dashboards every time there was a change in the provisioned
dashboard's definition.
2025-11-25 19:38:26 +01:00
Renato Costa
ccba9fd70b chore: print wire file diff in Check Wire Changes workflow (#114417) 2025-11-25 11:33:06 -05:00
Ihor Yeromin
a6497cf91e Expressions: Fix duplicate SQL expression tracking events (#114239)
* Expressions: Fix duplicate SQL expression tracking events

* fix(tracking): event firing on type select dropdown

* chore(queries): wrap handler with useCallback
2025-11-25 17:27:45 +01:00
Will Browne
5694d6371e Plugins: Upgrade github.com/grafana/grafana-plugin-sdk-go v0.283.0 => v0.284.0 (#114400)
* upgraded github.com/grafana/grafana-plugin-sdk-go v0.283.0 => v0.284.0

* make update-workspace

* apply fixes

* nolint for FieldTypeNullableJSON instead

* fmt

* fix lint issues
2025-11-25 15:46:07 +00:00
Yunwen Zheng
82b81c2b75 Rudderstack Event: When click dashboard list item, add uid to rudderstack event (#114374)
NameCell: add uid to rudderstack event
2025-11-25 09:48:57 -05:00
Matias Chomicki
c42d6a53a6 Logs: Fixed prettify JSON behavior with unescaped content (#114403)
* processing: move escaping to a later stage

* Regression test
2025-11-25 14:33:50 +01:00
Misi
2e524483ac IAM: Add kubernetesExternalGroupMapping feature toggle (#114386)
Add kubernetesExternalGroupMapping ft
2025-11-25 14:21:23 +01:00
Misi
93ec32dd6a IAM: Add teams/{id}/groups as a custom endpoint to Teams API (#114228)
* Add teams/{id}/groups as a custom endpoint

* TeamGroupsHandler OSS and Ent registration

* Update OpenAPI spec

* Add indexer tests for external group mapping

* Remove noopsearch

* Remove unnecessary interface declaration, fixes

* Chores

* fmt

* Rename constant

* Align the rest to the changes of main

* Update workspace

* Add missing file
2025-11-25 14:19:57 +01:00
Bruno
9091ac6f5c Secrets: add basic namespace and name checks to keeper store and secure value store (#114355) 2025-11-25 10:04:43 -03:00
Denis Vodopianov
eb25d9f4a8 chore: Add retries to the setup enterprise action (#114399)
* add retries to the setup enterprise action

* add fail pipeline after the last retry

* fix a dyslectic typo

* fix syntax errors in the script

* fix syntax errors in the script and the issue detected by zizmor

* cd to grafana enterprise dir

* update the go ws
2025-11-25 12:41:02 +00:00
Lauren
1672bbada0 Alerting: Change group filtering to search-based using lightweight BE endpoint (#114347)
* change group filtering from load-all to search-based

* generate translations

* refactoring

* Resolve design comments

* resolve PR comment
2025-11-25 12:39:18 +00:00
Alexander Akhmetov
1d4067216d Alerting: Add search.folder filter to the Prometheus rules API (#114358) 2025-11-25 12:19:31 +01:00
Tom Ratcliffe
f7a19be381 Folders: Revert changes to listFolder (#114388) 2025-11-25 10:38:21 +00:00
Steve Simpson
d50e2a94a3 Alerting: Implement setting of version message in convert API. (#114331)
Part 2 of adding version messages to the `alert_rule_version` able. This allows
setting the message via a header when using the Prometheus conversion API,
which can be useful for e.g. linking changes back to source control.
2025-11-25 11:20:28 +01:00
Jean-Philippe Quéméner
b57e6383e4 refactor(unified-storage): move builders in their own package (#114375) 2025-11-25 10:58:03 +01:00
Matheus Macabu
a2f14d7306 Dependencies: Bump golang.org/x/crypto to v0.45.0 (#114384) 2025-11-25 10:43:20 +01:00
Ryan McKinley
fbc0540528 Chore: Remove unused+experimental /dashboards/calculate-diff API support (#114151) 2025-11-25 12:39:29 +03:00
Laura Benz
18bf4d99cd FeatureTracking: Adjust and add events (#114305)
* feat: add tracking for opening menu

* refactor: add location to tracking event

* refactor: apply changes from code review
2025-11-25 09:28:05 +00:00
Dominik Prokop
c7345ac11e Content outline: Fix runtime error with system variable and ad hoc filters (#114306) 2025-11-25 09:51:09 +01:00
Anna Urbiztondo
7edaf76de4 Docs: asCode - export resources (#114244)
* WIP

* Edits

* Fixes

* New title

* Update docs/sources/as-code/observability-as-code/provision-resources/export-resources.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Feedback

* Prettier

* Link

* Added cli option

* Prettier

* Update docs/sources/as-code/observability-as-code/provision-resources/export-resources.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Update docs/sources/as-code/observability-as-code/provision-resources/export-resources.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Update docs/sources/as-code/observability-as-code/provision-resources/export-resources.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Update docs/sources/as-code/observability-as-code/provision-resources/export-resources.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Feedback

* Fixes

* Prettier

* Fix?

* Prettier

---------

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>
2025-11-25 09:28:20 +01:00
Torkel Ödegaard
89576baf2e Revert "TimeComparison: Ensure headerActions are activated" (#114370)
Revert "TimeComparison: Ensure headerActions are activated (#111224)"

This reverts commit 5556bcbc52.
2025-11-25 09:16:31 +01:00
Matheus Macabu
84f44c45c1 Docs: Document auditing logs loki retries and timeout options (#114364) 2025-11-25 09:13:39 +01:00
Adela Almasan
ede756f5a8 Suggestions: Introduce V2 right sidebar (#114274)
* newVizSuggestions feature toggle

* panel empty state

* add data check

* select first suggestion

* update text

* PanelEmptyState component

* add test

* ?

* remove fake translation

* Visualizations -> All visualizations

* updates

* move empty state to UnconfiguredPanel

* default tab to Suggestions; new tabs and content

* select first suggestion; apply button; removed search functionaility from suggestions

* extract hasData

* refactor

* cleanup

* fix default selection

* translation

* hasData test

* update e2e

* fix width of suggestions tabs

* make sure we only show a max of two columns

* useMeasure with a static gridTemplateColumns def

* Suggestions: hashes on suggestions, update logic to select first suggestion

* reorganize comments a little bit

* fix types

* add tests for hashes

---------

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-11-25 00:59:25 +00:00
grafana-pr-automation[bot]
fb05096d48 I18n: Download translations from Crowdin (#114379)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-25 00:41:15 +00:00
Alexander Soelberg Heidarsson
fe367b570b Alerting: Align OpenAPI definition with notification settings header (#114363)
fix: Align OpenAPI definition with notification settings header

Signed-off-by: Alexander Soelberg Heidarsson <89837986+alex5517@users.noreply.github.com>
2025-11-24 23:08:02 +01:00
Luminessa Starlight
93362c9024 Chore: Bump i18next-cli to 1.24.22 (#114183)
* bump i18next-cli to latest

* make it 1.24.22 while we're here

* Update extracted phrases after i18n-extract update

* yarn dedupe

---------

Co-authored-by: joshhunt <josh.hunt@grafana.com>
2025-11-24 15:39:09 -05:00
William Wernert
2c18526a78 Alerting: Collate rule_group column as binary (#114365)
* fix: collate rule_group column as utf8mb4_bin

This ensures this column is sorted identically by the database and
golang, which should eliminate issues related to a mismatch in sort
order.

* chore: make test stricter

* fix: also add binary collation for postgres
2025-11-24 14:58:43 -05:00
Charandas
0c2707bbc4 K8s: read resource configs from API Enablement for API Builders (#114329) 2025-11-24 11:09:49 -08:00
Will Browne
f1dbbcbe00 Plugins: Add /meta and /metas APIs to plugins app (#113775)
* add /meta and /metas APIs

* wrapped storage route

* format file

* fix switch statement lint issue

* fix plugininstaller test

---------

Co-authored-by: Todd Treece <todd.treece@grafana.com>
2025-11-24 18:20:11 +00:00
Eric Hilse
335111e783 Plugins: Add extension points for grafana-setupguide-app in top nav and menu (#114272)
* feat: add plugin extension point to SingleTopBar for setup guide integration

* feat: add plugin extension point for grafana-setupguide-app in MegaMenu

* feat: add TopBarExtensionPoint for grafana-setupguide-app integration

* feat: add MegaMenuExtensionPoint for grafana-setupguide-app integration

* feat: simplify MegaMenu and TopBar extension points by removing unused context checks

* feat: add MegaMenuAction and SingleTopBarAction to PluginExtensionPoints

* refactor: simplify return statement in MegaMenu and TopBar extension points

* feat: update extension point IDs in MegaMenu and TopBar components to use PluginExtensionPoints
2025-11-24 10:49:41 -07:00
Paul Marbach
43dfad3a0e Sparkline: Move codeownership to dataviz (#114318) 2025-11-24 09:39:29 -08:00
Haris Rozajac
11814426e4 Dashboard Schema V2: Support alerting for v2 schema in alert rule editor (#113891)
* implement alerting for v2 schema

* clean up

* clarify

* add support for library panels

* comment

* include missing library panel when v1 returns v2; cleanup

* Use type union

* remove unneccesary check

* add AlertStatesDataLayer so that alert state is displayed next to panel title

* fix test

* cleanup undefined
2025-11-24 09:51:54 -07:00
Alex Spencer
3d95d2aa79 SQLExpressions: Add new schema inspector panel (#113545)
* chore: initial approach

* chore: keep editor and inspector height in tandem

* chore: improve drawer animation

* feat: hook it up for real

* chore: i18n

* chore: consistent errors/warnings

* chore: remove unused className

* chore: oops fix button name!

* chore: set up refetch. call on apply query

* chore: use getAPINamespace instead of "default"

* chore: use dashboard timerange for api call

* fix: shadow variable update

* fix: add styles back to dependency array. it's weird but oh well

* chore: reorder some code for readability

* chore: default inspector open

* chore: pr feedback - border radius

* chore: pr feedback - don't filter queries

* chore: pr feedback - button updates

* refactor: improve schema inspector logic and loading state management

* chore: refactor some logic + tests

* chore: i18n
2025-11-24 08:05:50 -08:00
Kim Nylander
6a6c5e8ae0 Draft docs for LBAC for traces (#114280)
Co-authored-by: Taylor C <41653732+tacole02@users.noreply.github.com>
Co-authored-by: Irene Rodríguez <irene.rodriguez@grafana.com>
2025-11-24 15:33:59 +00:00
Oscar Kilhed
258173ea94 Dashboards: Fix margin of time controls (#114345) 2025-11-24 16:28:13 +01:00
Matheus Macabu
0c965a9cb1 CloudMigrations: Remove feature toggle and introduce config setting to disable it (#114223) 2025-11-24 14:15:23 +01:00
Mustafa Sencer Özcan
2f6836e78a fix: make graceful handle default for the malformed dashboard jsons during unified migration (#114295)
* fix: graceful handling by default

* fix: make fallback the default behavior
2025-11-24 14:12:52 +01:00
Alexander Akhmetov
67ad43a784 Alerting: Fix rules API pagination when using in-memory filters (#114334) 2025-11-24 12:48:22 +01:00
Konrad Lalik
01a4a5409a Alerting: Add alertingUIUseFullyCompatBackendFilters feature toggle (#114153)
* Add alertingUIUseFullyCompatBackendFilters for fully compatible backend filters

* Remove hide from admin flag
2025-11-24 12:42:09 +01:00
Matheus Macabu
b5335d9357 Alerting: Remove dependency on yaml/v2 package (#114348) 2025-11-24 12:38:44 +01:00
Andre Pereira
4e228cab00 Trace View: UI improvements (#114156)
* Fix unclear child span relationship

* Trace view UI improvements

* Fix tests
2025-11-24 11:15:03 +00:00
Mustafa Sencer Özcan
bca58f5626 feat: add folder tree validation for unified data migration (#114342)
* fix: add validator

* fix: revert startup index
2025-11-24 11:02:14 +01:00
Zoltán Bedi
8d75d79313 PostgreSQL: Remove feature toggle postgresDSUsePGX (#113675)
* PostgreSQL: Remove feature toggle `postgresDSUsePGX`

* Fix tests and linting

* Address review comments
2025-11-24 10:26:41 +01:00
Hugo Häggmark
39dc659ad8 chore: reduce Azure barrel files (#114297) 2025-11-24 06:03:45 +01:00
grafana-pr-automation[bot]
4b0d6a2e1a I18n: Download translations from Crowdin (#114332)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-24 00:32:34 +00:00
Adela Almasan
2ee9561920 Chore: Fix panels smoke test (#113187)
* update test

* update
2025-11-21 20:35:25 +00:00
Larissa Wandzura
01eee72c80 DOCS: Fixed PDC link for CloudWatch data source (#114200)
fixed broken link (refURI) for PDC
2025-11-21 14:22:38 -06:00
Moustafa Baiou
8108d3c795 Alerting: Add tracing to prometheus rules api (#114282)
To better observe and identify performance bottlenecks in the prometheus rules API.

The following spans were added:
- `api.prometheus.RouteGetRuleStatuses`
- `api.prometheus.PrepareRuleGroupStatusesV2`

The `api.prometheus.PrepareRuleGroupStatusesV2` includes attributes to capture the parameters used in the request to help with debugging and performance analysis.
2025-11-21 15:00:35 -05:00
Adela Almasan
8cf777b5e8 VizSuggestions: Empty state (#114049)
* newVizSuggestions feature toggle

* panel empty state

* add data check

* select first suggestion

* update text

* PanelEmptyState component

* add test

* ?

* remove fake translation

* updates

* move empty state to UnconfiguredPanel
2025-11-21 13:42:41 -05:00
Denis Vodopianov
0e460a267e chore : Deprecating FeatureToggles.IsEnabled (#113062)
* Deprecating features.IsEnabled

* add one more nolint

* add one more nolint

* Give better hints to devs in the deprecation message of IsEnabledGlobally

* adding more doc strings

* fix linter after rebase

* Extend deprecation message
2025-11-21 18:43:42 +01:00
Matias Chomicki
43217025cf processing: set log clone as not collapsed (#114313) 2025-11-21 17:01:04 +00:00
Daniele Stefano Ferru
7299651a32 Hotfix: Granting None role Viewer access for a fixed API group list (#114310) 2025-11-21 17:50:25 +01:00
Beverly Buchanan
1b2fe6d6a8 RBAC plugin doc: add k8s rbac to list (#114265) 2025-11-21 17:44:00 +01:00
João Calisto
c2c443757d Unified Storage: allow rebuilding indexes for resource with a new grpc endpoint (#113748)
* Unified Storage: allow rebuilding indexes for resource from a new grpc endpoint

* remove log line

* fix trace def

* lint

* fix after rebase

* addressing code review changes

* update with one channel per rebuild request

* other review suggestions

* update with review suggestions

* run mockery generate for MockResourceClient

* update tests

* update tests and lint

* fix test
2025-11-21 16:42:15 +00:00
Victor Marin
336aa06966 Dashboards: Add non-applicable filter pills per panel (#112507)
* wip non-applicable pills

* refactor

* fix

* tests

* locales

* canary version

* mods

* fix query fetching

* fix

* fix

* Add VizPanelSubHeader component

* lint

* extra check

* refactor

* wip

* refactor wipp

* refactor

* refactor

* use canary scenes

* prettier

* canary scenes

* interpolate ds uid for ds var case

* refactor

* refactor

* memoize values + tests + rename component

* refactor

* refactor

* refactor

* refactor

* canary scenes + fixes

* Fix infinite loop casused by unstable useEffect dependency

* lint

* helper functions

* bump scenes

* reduce applicability calls to only when filters or groupBy keys change, not any var state change

* refactor

* fix

* fix

* fixes

---------

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2025-11-21 18:03:27 +02:00
Matheus Macabu
5e949fc955 Secrets: Fix secure value creation timestamp changing when updating it (#114290) 2025-11-21 16:31:17 +01:00
Bruno
0d67442f1a Secrets manager: create secure value using the active keeper (#114039)
* Secrets manager: create secure value using the active keeper

* SecureValueService.Update: fetch secure value from db to get the keeper

* fix keeper_store_test.go

* SecureValueService: fix bug in update where the current version keeper wasn't being passed to the createNewVersion method

* make gofmt

* remove outdated test

* update TestModel

* undo enterprise_imports changes

* use xkube.Namespace

* migrator: set secret_secure_value.keeper to 'system' when the column is null

* indent cue

* fix tests

* fix enterprise imports

* properly fix enterprise imports

* make update-workspace

* go mod tidy

---------

Co-authored-by: Matheus Macabu <macabu.matheus@gmail.com>
2025-11-21 11:20:16 -03:00
Galen Kistler
133677d1d6 Explore: fix logs viz toggle alignment (#114302)
chore: fix alignment
2025-11-21 14:05:19 +00:00
Gareth
57d0228317 Tempo: Bump gRPC limit to allow for larger streaming queries (#114286) 2025-11-21 23:01:52 +09:00
Konrad Lalik
10e0c435ad Alerting: Fix NotificationPreview permission checking (#114303)
Add permission check to NotificationPreview component
2025-11-21 14:59:25 +01:00
Peter Štibraný
198375599e Fix/ignore some common dashboard problems (#114296)
* Fix some common problems found when parsing dashboards for indexing
2025-11-21 14:41:45 +01:00
Peter Štibraný
def4c644ec Use infra/log instead of slog in pkg/storage/unified (#114292)
Use infra/log instead of slog. Use log.FromContext to add contextual info to log messages.
2025-11-21 14:38:09 +01:00
Galen Kistler
c0f6d90971 Loki: Set Query limits context header (#114112)
* feat(lokiQueryLimitsContext): send full query range & expr on initial split requests
2025-11-21 07:19:55 -06:00
Gábor Farkas
669382c212 datasources: ClearAuthHeadersMiddleware: refactor (#113707)
* refactor: extract logic

* directly use the setting.cfg in the middleware

* more granular config handling, per section

* fixed unit test

* refactor code to avoid lint error
2025-11-21 14:18:32 +01:00
Matheus Macabu
203549ce3c Chore: Fix enterprise imports drift (#114288)
* Chore: Fix enterprise imports drift

* Fix indirect dependency
2025-11-21 12:53:15 +01:00
Sergej-Vlasov
b366217aa6 SchemaV2ToScenes: Adjust ad hoc multi value check in v2 (#114291)
adjust ad hoc multi value check in v2
2025-11-21 11:40:44 +00:00
Mustafa Sencer Özcan
af684248b5 feat: add reindex trigger as a migration validation (#114283)
* feat: add search validation

* chore: remove comment

* fix: remove local test

* fix: revert rebuild index portion

* chore: remove unnecessary comments

* refactor: validator

* fix: revert setting
2025-11-21 12:21:19 +01:00
Matias Chomicki
b17ba6677e Logs: Feature flag logsInfiniteScrolling removed (#113585)
* Remove feature flag definition

* Remove feature flag from code

* Update imports

* LogsNavigationPages: remove deprecated component

* Finally deprecate navigation pages

* Update tests

* Update translations

* Remove unused code

* More cleanup

* Test cleanup

* Remove deprecated props

* More props removal

* Update feature flags

* Revert changes
2025-11-21 11:51:56 +01:00
Oscar Kilhed
e09905df35 SchemaV2: Add library panel repeat options to v2 schema during conversion (#114109)
* Add library panel repeat options to v2 schema during conversion

* use any instead of interface{}

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

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

* fix library panel differences between backend and frontend conversion
2025-11-21 11:41:03 +01:00
Galen Kistler
3d2f702ae5 Loki: fix status in body not matching http status code (#114201)
* fix: status in body not matching http status code
2025-11-21 04:40:29 -06:00
Victor Marin
42babc7ce7 Select: Fix width bug when maxVisibleValues is set (#113913)
* fix

* fix
2025-11-21 12:14:50 +02:00
Sonia Aguilar
e7377a8842 Alerting: Update docs for ash AI helper button (#114229)
Update docs for ash AI helper button
2025-11-21 09:31:22 +01:00
Mustafa Sencer Özcan
e2cbf8abf1 fix: handle empty provisioning folder gracefully in stub provisioning (#114273)
fix: provisioning folder empty case
2025-11-21 09:04:04 +01:00
Konrad Lalik
6f68b96097 Alerting: Fix minInterval interpolation when creating rules from panel (#114238)
Interpolate minInterval query parameter before query conversion
2025-11-21 08:56:17 +01:00
grafana-pr-automation[bot]
07d975134d I18n: Download translations from Crowdin (#114278)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-21 00:39:57 +00:00
Jesse David Peterson
ef00dd4940 Dashboard: New experimental time range zoom shortcuts (#114190)
* feat(toggle): new feature toggle for time range zoom keyboard shortcuts

* feat(keyboard-shortcuts): handle `t +` and `t -` key combinations

* test(keyboard-shortcuts): validate time range zoom with `t +`, and `t -`

* chore(i18n): update keyboard shortcut translations

* refactor(time-range): no-op when timespan is zero instead of defaulting
2025-11-20 17:14:27 -04:00
Paul Marbach
6f9c867660 Timeseries: More nuanced editing of linear threshold to avoid crashes (#112301)
* Timeseries: More nuanced editing of linear threshold to avoid crashes

* remove useEffect import

* remove unused import

* update error and invalid field handling to call out error case
2025-11-20 18:49:46 +00:00
Larissa Wandzura
0b020c5e30 DOCS: add alias to SQL expressions doc (#114253)
added alias to SQL expressions since the doc moved
2025-11-20 17:44:06 +00:00
Ashley Harrison
496d6f8021 Frontend Service: Avoid double counting boot errors (#114250)
avoid double counting boot errors
2025-11-20 17:33:58 +00:00
Ezequiel Victorero
5ca3c27e4f Chore: Fix playlist flaky test (#114241) 2025-11-20 14:17:53 -03:00
Juan Cabanas
4d25381716 DashboardLibrary: Template dashboards public preview (#114230) 2025-11-20 13:51:59 -03:00
Peter Štibraný
534ed3421b Fix search by both tags and folders. (#114246)
* Fix search by both tags and folders.

* Move // nolint:gocyclo to the new method.

* Revert unnecessary change.
2025-11-20 17:09:49 +01:00
Mustafa Sencer Özcan
30c04ab3fc feat: inject unified data migrations in dual writer (#114138)
* feat: draft changes for on-prem unified migration

* feat: further draft changes for on-prem unified migration

* fix: remove some tbis

* refactor: rename

* fix: another approach

* fix: background service related issues

* fix: address comments

* fix: make gen-go

* fix: background service related issues

* feat: refactor dual writer and legacy migrator

* fix: minor issues

* feat: working version in oss

* fix: wire

* fix: revert test data override

* fix: enterprise related issues

* chore: add todo

* fix: revert dual writer method

* fix: lint

* chore: logger format

* fix: reduce log level

* fix: log change

* fix: disable

* fix: address comments

* fix: return error on dual writer service

* fix: merge conflict

---------

Co-authored-by: Rafael Paulovic <rafael.paulovic@grafana.com>
2025-11-20 16:40:20 +01:00
Alexander Zobnin
cb06bba243 Zanzana: Add token namespace to config (#114165) 2025-11-20 15:54:32 +01:00
Gabriel MABILLE
b5a50e7772 grafana-iam: Use the UniStore as the default store (#113614)
* `grafana-iam`: Use the UniStore as the default store

* Refactor all instantiations

* Remove enableDualWriter

* Nit. dw is clear enough

* Use the correct access control client
2025-11-20 15:51:50 +01:00
Rafael Bortolon Paulovic
65fd15bbf9 feat: define unified disable migrations flag (#114120)
chore: add US data migrations config
2025-11-20 15:47:44 +01:00
Robby Milo
7db72e03b5 remove image rendering docs (#114217) 2025-11-20 15:39:10 +01:00
Kristina Demeshchik
834f1c5e98 TS checker: Increase memory limit (#114236)
Increase ts checker memory limit
2025-11-20 09:13:19 -05:00
Roberto Jiménez Sánchez
41276676eb Provisioning: add retry logic for transient errors in Kubernetes client (#114215)
* feat: add retry logic for transient errors in Kubernetes client

Add retry wrapper for dynamic.ResourceInterface that automatically retries
transient errors using Kubernetes' wait.ExponentialBackoff utility.

- Implements retry logic with exponential backoff for all Kubernetes API operations
- Detects transient errors: ServiceUnavailable, ServerTimeout, TooManyRequests,
  InternalError, Timeout, and network errors
- Uses wait.ExponentialBackoff from k8s.io/apimachinery/pkg/util/wait
- Respects context cancellation
- Includes comprehensive unit tests

Part of https://github.com/grafana/git-ui-sync-project/issues/634

* docs: add detailed documentation for defaultRetryBackoff

Document when retry attempts will happen, what errors trigger retries,
and the retry behavior (attempts, delays, exponential backoff, jitter).

* feat: add logging and increase retry attempts for Kubernetes client

- Add context logger to track retry attempts (Info for retries, Warn for exhaustion)
- Increase retry attempts from 5 to 8 steps (~10 seconds total retry window)
- Document when all retry attempts will fail:
  * API server completely unavailable/unreachable
  * Network connectivity issues persist beyond retry window
  * Consistent transient errors for entire retry duration
  * Context cancellation before retries complete

* chore: update retry client documentation

* fix: resolve linting issues in retry client

- Replace type assertions with errors.As for wrapped errors
- Remove deprecated Temporary() check (deprecated since Go 1.18)
- Update tests to remove temporary error test case

* fix: resolve staticcheck S1008 linting issue in retry_client.go

Simplify return statement to use errors.As directly instead of if-return pattern
2025-11-20 15:12:07 +01:00
Will Browne
7d179120b6 Plugins: Replace CDN class with FS CDN type (#113968)
replace cdn class with fs type
2025-11-20 14:03:24 +00:00
Tom Ratcliffe
3999d108f7 Folders: Make listFolders call correct API and fix tags sorting (#114181) 2025-11-20 14:00:33 +00:00
Roberto Jiménez Sánchez
a4cbbe10c0 Provisioning: Add retry logic for nanogit client operations (#114216)
* chore(deps): update nanogit to v0.3.0 in go.mod and go.sum files

* Add retry logic for nanogit client operations

- Configure retry logic in withGitContext to ensure all Git operations have retry support
- Use nanogit's ExponentialBackoffRetrier with 8 attempts (~10s retry window)
- Retry transient network errors and HTTP-specific server errors (5xx for GET/DELETE, 429 for all)
- Rename logger function to withGitContext to better reflect its responsibilities

* fix: resolve staticcheck S1008 linting issue in retry_client.go

Simplify return statement to use errors.As directly instead of if-return pattern

* Revert "fix: resolve staticcheck S1008 linting issue in retry_client.go"

This reverts commit bd367b5629.
2025-11-20 13:55:45 +00:00
Ryan McKinley
c9801fc66e FeatureFlags: Remove unused settings for admin UI (#114137) 2025-11-20 13:33:44 +00:00
Alexander Zobnin
f6a1d4a14e Revert Auth: Add None role to Viewer case (#114224) 2025-11-20 14:02:15 +01:00
Konrad Lalik
24d970e4b9 Alerting: Remove stale filtering code (#114231)
Remove the old filters file, update import paths
2025-11-20 13:58:13 +01:00
dependabot[bot]
e6a4e6fa4e deps(go): bump github.com/prometheus/common from 0.67.1 to 0.67.2 in /pkg/promlib (#113145)
* deps(go): bump github.com/prometheus/common in /pkg/promlib

Bumps [github.com/prometheus/common](https://github.com/prometheus/common) from 0.67.1 to 0.67.2.
- [Release notes](https://github.com/prometheus/common/releases)
- [Changelog](https://github.com/prometheus/common/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/common/compare/v0.67.1...v0.67.2)

---
updated-dependencies:
- dependency-name: github.com/prometheus/common
  dependency-version: 0.67.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps(go): update github.com/prometheus/common to v0.67.3

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
2025-11-20 12:50:38 +00:00
Priyansh Gupta
7f52586c68 Prometheus: Hide 'Kick start your query' button for existing queries (#113980)
* Prometheus: Hide 'Kick start your query' button for existing queries

* refactor: simplify query check logic in Prometheus editor

Remove unnecessary useMemo and buildVisualQueryFromString logic.
Just check query.expr directly to determine button visibility.

* fix: format code with prettier
2025-11-20 13:19:54 +01:00
Mihai Doarna
fbadbf385d IAM: Add validation for new tokens with no expiration when token_expiration_day_limit is set (#114166)
* do not create sa with no expiration when day limit is set

* disable No expiration option if day limit is set

* make i18n-extract

* run prettier

* address feedback
2025-11-20 13:44:15 +02:00
Ida Štambuk
b2f022fb5e Dynamic Dashboards: Make outline open by default (#114146) 2025-11-20 12:37:12 +01:00
Jay Clifford
e9116cd23c chore(testid): added missing testid to add datasource button (#114169)
* added missing testid

* added to pages.ts

* added e2e to datasource button

* fixed lint
2025-11-20 12:27:04 +01:00
Torkel Ödegaard
4637da8fcc Sidebar: A new reusable component for side toolbars and panes (#114141)
* initial wip

* fixes

* Switching to context

* New button design

* Overflow ellipsis

* Changes to button

* initial resize work

* resize progress

* Update

* no reszier in tabs mode

* fixing text truncte, and tabs right position

* Minor story tweaks

* added unit test

* added unit test

* Minor change

* minor story fix

* Fixes
2025-11-20 12:22:47 +01:00
Nathan Marrs
1d2426f880 Dashboard Favorites: Dashboard star icon stuck in loading state on initial load (#114211)
Co-Author: Haris Rozajac <haris.rozajac12@gmail.com>
2025-11-20 11:14:29 +00:00
Andreas Christou
3c777399d5 MSSQL: Minor refactor (#113976)
* Moving things around

* Copy parseURL function to where it's used

* Update test

* Remove experimental-strip-types

* Revert "Remove experimental-strip-types"

This reverts commit 70fbc1c0cd.

* Trigger build
2025-11-20 11:09:09 +00:00
Gareth
0efffd9ec8 Live: Add configuration for client_queue_max_size (#114225)
Live: add configuration for client_queue_max_size
2025-11-20 20:08:26 +09:00
Ida Štambuk
6e9a33e712 Dynamic Dashboards: Add more tracking (#114098) 2025-11-20 12:01:21 +01:00
Charandas
3c0d5745fe chore: remove remaining references to singular namespace (#114208) 2025-11-20 11:23:36 +01:00
Matheus Macabu
5d26bc5ee1 FeatureToggles: Remove feedbackButton unused toggle (#114222) 2025-11-20 11:18:50 +01:00
Anna Urbiztondo
bf509de89f Docs: IaC edits (#114086)
* Removed Grizzly from table

* Fixes

* Review

* Reviews

* Edits

* More edits

* Prettier

* Remove agent

* Review, removing Agent docs

* Prettier

* Fixes

* Prettier

* Edit

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Update docs/sources/as-code/infrastructure-as-code/ansible/ansible-cloud-stack/index.md

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>

* Feedback

* Prettier

* Variable style edits

---------

Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>
2025-11-20 10:24:47 +01:00
petergreen86
fbe29596f1 Docs: Team Sync correction (#114043) 2025-11-20 10:20:02 +01:00
Steve Simpson
cc6e037093 Alerting: Add message to alert_rule_version table (Part 1). (#114194)
This adds a `message` column to the `alert_rule_version` table. This follows the
pattern established for dashboards as closely as possible. A new type is
introduced internally for passing the new `message` field around in a type-safe
manner, but doing the same for the API types becomes very messy. In that case, a
new field is added with omitempty.

Note this PR is only:
- The column addition
- The "read" path; API for listing versions

Subsequent PRs will add code to actually set the message when updating rules.
2025-11-20 10:00:27 +01:00
Matheus Macabu
1d763df932 Docs: Document font_min_text_size setting in reporting section (#114155)
* Docs: Document font_min_text_size setting in reporting section

* better wording
2025-11-20 09:50:07 +01:00
Konrad Lalik
4e24b2977c Alerting: Fix expression queries when coming from a panel (#114095)
* Add getDefaultExpressions tests

* Fix expression queries when building form values from a panel

* make query params empty and add some better types

* update snapshots

* fix tests

* Revert devenv changes

* update shapshot

---------

Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
2025-11-20 08:38:49 +01:00
grafana-pr-automation[bot]
b0f3e531b1 I18n: Download translations from Crowdin (#114206)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-20 00:40:29 +00:00
Paul Marbach
946e6d9641 Table: Improve JSON rendering in inspect for JSON strings (#114189) 2025-11-19 19:38:06 -05:00
maicon
5754d7fbad chore: bump authlib/types to v0.0.0-20251119142549-be091cf2f4d4 (#114177)
* chore: bump authlib/types to v0.0.0-20251119142549-be091cf2f4d4

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

* Update Go Workspace

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

* Stop supporting deprecated namespace format in TestExtendedJWT_Authenticate

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

* Update go mod

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

---------

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
2025-11-19 16:05:20 -08:00
Josh Hunt
a4e1db66d3 Chore: Add html_handler_requests metric (#113991)
* Chore: Add html_handler_requests metric for tracking requests handled by index.go

* make a member of HttpServer

* make it a histogram instead

* update test
2025-11-19 16:40:54 -05:00
Isabel Matwawana
fabb4a603d Docs: Add panel time zoom with mouse (#113721)
Co-authored-by: Jesse David Peterson <jesdavpet@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-11-19 21:27:11 +00:00
alerting-team[bot]
53c39ccda3 Alerting: Update alerting module to 3befd25883e0d17673e5590cc5c5702bbc031b16 (#114062)
* [create-pull-request] automated change

* fix module path for alerting notify test receivers

---------

Co-authored-by: moustafab <27738648+moustafab@users.noreply.github.com>
Co-authored-by: Moustafa Baiou <moustafa.baiou@grafana.com>
2025-11-19 21:24:08 +00:00
Dave Henderson
7264803016 chore(deps): Switch to maintained gopkg.in/yaml fork (#114131)
Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
2025-11-19 15:20:32 -05:00
Ieva
84d6f54daa Chore: Remove references to editors_can_admin (#114168)
remove references to editors_can_admin
2025-11-19 19:40:54 +00:00
Juan Cabanas
62b8caec9b DashboardLibrary: Add template dashboard tests (#114179)
* dashboard template tests

* command plaette restored

* command plaette restored
2025-11-19 16:26:34 -03:00
Alexander Akhmetov
5a0e9e4183 Alerting: Add rule_uid filter support to the Prometheus-compatible list rules API (#114182) 2025-11-19 20:01:40 +01:00
Victor Cinaglia
164873591b IAM: Optionally make refresh tokens required if use_refresh_token is enabled (#114174)
* OAuth: Optionally make refresh tokens required if use_refresh_token is enabled

* make linter happy

* feedback: log missing refresh token during token refresh

* feedback: tweak wording in the message & change level
2025-11-19 15:21:40 -03:00
Eric Hilse
f074431a36 Plugins: add card extension to nav-landing-page (#113768)
* Plugins: add card extension to nav-landing-page

* feat(nav-landing-page): update card extension to include category and onClick support

* feat(NavLandingPage): add setPluginLinksHook to test setup

* feat(NavLandingPageCard): refactor className handling using cx for better style management

* feat(NavLandingPage): update card extension targets to use plural form for consistency

* feat(NavLandingPage): add warning for mutually exclusive extension points
2025-11-19 11:19:14 -07:00
Isabel Matwawana
e9c959a0e5 Docs: Add template dashboards page (#114113) 2025-11-19 12:48:23 -05:00
dependabot[bot]
235dec4e77 Bump glob from 10.4.1 to 11.1.0 in /e2e-playwright/test-plugins/grafana-extensionstest-app (#114061)
* Bump glob in /e2e-playwright/test-plugins/grafana-extensionstest-app

Bumps [glob](https://github.com/isaacs/node-glob) from 10.4.1 to 11.1.0.
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v10.4.1...v11.1.0)

---
updated-dependencies:
- dependency-name: glob
  dependency-version: 11.1.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* update lockfile

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: samsch <git@samsch.org>
2025-11-19 12:27:05 -05:00
Denis Vodopianov
043b1a702a chore: Reflect changes in FF management in contribute guidelines. (#113312)
* Reflect changes in FF management in contribute guidelines.

* add a ref to the OpenFeature project

* fix codestyle in md file

* yet another key point

* Update contribute/feature-toggles.md

Co-authored-by: Tania <10127682+undef1nd@users.noreply.github.com>

* Update contribute/feature-toggles.md

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

---------

Co-authored-by: Tania <10127682+undef1nd@users.noreply.github.com>
Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2025-11-19 11:57:49 -05:00
Brendan O'Handley
77d98fc73d Transformations: feature toggle cleanup transformations redesign (#113561)
* remove feature toggle transformationsRedesign

* remove for event tracking

* remove uneccessary code
2025-11-19 10:54:05 -06:00
Brendan O'Handley
20a8987ff1 Dataplane: feature toggle cleanup dataplane frontend fallback (#113542)
* remove feature toggle dataplaneFrontendFallback because GA

* remove feature toggle logic

* fix import

* fix toggle ownership from merging main

* merge main

* fix extra feature toggle
2025-11-19 10:53:24 -06:00
Luminessa Starlight
3e7b952488 Chore: Rudderstack upgrade to SDK v3 behind flag (#114126)
* add rudderstack version upgrade feature flag

* add new rudderstack backend file
gate new backend with feature flag

* fix global type error
2025-11-19 11:48:23 -05:00
Moustafa Baiou
1f9ed37b1b Alerting: Optimize cache metrics updates (#114134) 2025-11-19 11:39:13 -05:00
Peter Štibraný
42db6324c9 Collect and log search stats. (#114107)
* Collect and log search stats.

* Fix compilation problems.
2025-11-19 16:52:47 +01:00
Tom Ratcliffe
1fcf15d05f API Clients: Update codeowners for API clients to be more granular (#113928)
Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
2025-11-19 15:24:29 +00:00
Andrew Hackmann
a327fec8df Elasticsearch: data query refactor (#113360)
* split up data_query.go

* split up response_parser

* remove white space
2025-11-19 15:10:12 +00:00
Kevin Yu
a6343d7a68 CloudWatch Logs: Hide internal logs field (#114121) 2025-11-19 07:00:03 -08:00
Ivan Ortega Alba
40fb421556 Schema: Implement v2beta1 → v2alpha1 conversion (#113876) 2025-11-19 15:56:33 +01:00
github-actions[bot]
e66a49ce06 Release: update changelog for main (#114148)
* Update changelog

* Update changelog

* Update changelog

* Update changelog

* Update changelog

* Update changelog

* Update changelog

* Update changelog

* update changelog

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
2025-11-19 14:49:52 +00:00
Erik Sundell
be0857fa8f Plugins: Pass build mode to frontend (#114092)
* pass build mode to frontend

* set buildMode build time using shared plugin webpack conf
2025-11-19 15:42:27 +01:00
Peter Štibraný
acf6f1ae5f Ignore boolean ".spec.refresh" silently. (#114167) 2025-11-19 15:42:14 +01:00
ismail simsek
74e98fc183 Prometheus: Filter label values based on the search in metrics browser (#113949)
Filter label values based on the search
2025-11-19 15:38:31 +01:00
Matias Chomicki
dde5b6476c Remove feature flag from bad rebase (#114154) 2025-11-19 13:56:15 +01:00
Ashley Harrison
341a32266d Toggletip: Ensure consistent positioning in all scenarios (#114085)
* portal toggletip content

* add test to check focus trapping

* kick CI
2025-11-19 12:53:21 +00:00
Ashley Harrison
3f008acde2 PanelChrome: Wrap in a div to allow for hover headers (#114037)
wrap PanelChrome in a div that's outside of `overflow: hidden;` to allow for hover headers
2025-11-19 12:52:09 +00:00
Ashley Harrison
cf24e0bbd8 ToolbarButton: Require tooltip or aria-label if no children are present (#114097)
* split into separate stories

* make tooltip/aria-label required if no children present

* kick CI

* fix unit tests

* cleaner

* clean up story
2025-11-19 12:51:29 +00:00
Hugo Häggmark
5f3dcadf9e Docs: Revert move of plugin schema file (#114139)
* Docs: revert move of plugin schema file

* Trigger build
2025-11-19 13:40:52 +01:00
Jean-Philippe Quéméner
0e4b701bd6 fix(dashboards): apply permission search filter if provided (#114147) 2025-11-19 13:05:07 +01:00
Mariell Hoversholm
d19828870b feat: remove newPDFRendering ff (#113451) 2025-11-19 12:50:41 +01:00
Gábor Farkas
fc18c9315e update grafana/gafana-plugin-sdk-go dependency, and adjusted code accordingly (#113922)
* update dependencies

* query: stop handling _timeRange

* fixed unit test
2025-11-19 12:44:13 +01:00
Matias Chomicki
9dd68dbbcc Logs: Feature flag logRowsPopoverMenu removed (#113583)
* logRowsPopoverMenu: remove feature flag

* Remove import

* Remove feature flag
2025-11-19 11:43:59 +00:00
Matias Chomicki
bef8414781 logParser: memoize getVisibleFieldIndices (#113602)
* logParser: memoize getVisibleFieldIndices

* Remove unnecessary parameter
2025-11-19 12:17:10 +01:00
Tom Ratcliffe
6f8c1525da Folders: Improve wording for actions and move/delete (#114090) 2025-11-19 11:05:11 +00:00
Sam Jewell
cff5a42bce Rework Title of SQL Transformation card (#114093)
* Rework UI of SQL Transformation card

I made a few changes:
- Green - to indicate that this is DIFFERENT from the other transforms, not similar
- Command prompt, not a preview of the table input and output - to indicate that
   - you code this yourself, and
   - the output table format is not predictable - it's entirely outside of our control

I updated the card title to "Transform with SQL" because I felt this was more
indicative of what the user will be doing. It's a call to action.

* Reverse the change to the illustration

The changes to the illustration aren't ready yet,
As per PR feedback in comment: https://github.com/grafana/grafana/pull/114093#issuecomment-3547943167

* Update tests and code with new header text
2025-11-19 10:51:33 +00:00
Konrad Lalik
56e148408e Alerting: Remove unknown state filter (#114143)
* Remove unknown state filter

* Update translations
2025-11-19 11:42:39 +01:00
Ashley Harrison
99e0654fc9 Chore: Convert some more react class components to functional (#113951)
* convert LoginCtrl to a functional component

* convert NumberInput to a functional component

* convert StringArrayEditor to a functional component

* convert TeamPicker to a functional component

* convert AddToOrgModal to a functional component

* don't set noMargin yet

* convert UserProfile to a functional component

* convert AnnotationFieldMapper to a functional component

* convert PanelHeaderCorner to a functional component

* convert ShareExport to a functional component

* convert ShareLink to a functional component

* convert RawPrometheusContainer to a functional component
2025-11-19 09:58:16 +00:00
Lauren
6dcb921333 Alerting: Fix for fetching evaluation group in new filter (#113694)
* Alerting: Fix for fetching evaluation group in new filter

* WIP: Add async evaluation groups dropdown with 500 group limit

* Add text to query param if threshold limit reached

* update translations, remove group info tooltip

* resolve PR comment
2025-11-19 09:11:07 +00:00
Misi
56c2c1cfe2 IAM: Add validation to ExternalGroupMapping (#113957)
* Add validation before ExternalGroupMapping creation

* Add FIXME to implement team lookup

* Lint
2025-11-19 09:48:09 +01:00
Mustafa Sencer Özcan
0d4ad01b65 feat: add unified data migrations for dashboard and folders (#113853) 2025-11-19 09:09:08 +01:00
Jara Suárez de Puga García
92bee5e510 Docs: Update documentation on PDF/Email generation with logo (#114005)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-11-19 08:43:38 +01:00
Ryan McKinley
00329cab14 Stars: Move stars from preferences apiserver to a new collections apiserver (#114006) 2025-11-19 08:28:39 +03:00
grafana-pr-automation[bot]
e558c9af5d I18n: Download translations from Crowdin (#114130)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-19 00:40:18 +00:00
Jacob Valdez
03ed5a372d Docs: What's new and Upgrade guide v12.3 (#113372) 2025-11-18 20:24:25 +00:00
Ryan McKinley
2f591aaaeb GitSync: Fix documentation link (#114119) 2025-11-18 19:10:46 +00:00
owensmallwood
8dddff3ce4 Unified Storage: Pass ns, group, resource to GetResourceStats instead of just namespace (#114050)
* passes nsr to GetResourceStats instead of just namespace

* removes ns check

* fixes failing tests

* make update-workspace

* pass group and resource from rebuild request when getting resource stats
2025-11-18 13:05:21 -06:00
Kristina Demeshchik
bf3de07147 QueryEditor: datasource getQueryDisplayText error (#114106)
Fixes an issue where `getQueryDisplayText` throes an error and breaks the query editor.
2025-11-18 13:58:55 -05:00
Juan Cabanas
1458a28eee DashboardLibrary: Fix 404 not found error when browsing the page (#114094)
* 404 fix

* any enabled added
2025-11-18 15:43:25 -03:00
Paul Marbach
92ac33736b Suggestions: Proposed PanelPlugin API (#113688)
* Suggestions: Update ownership of core files and improve some types

* Suggestions: Proposed PanelPlugin API

* get rid of .useSuggestionsConfig

* update i18n

* iterate on TypeScript types, add example in radialbar

* tweak implementation, add commentary

* actually, suggestions really does not need panel defaults

* split suggestions handler into its own file and add tests for radialbar

* small comment revision

* fix test

* add ds.hasData check back for state-timeline

* restore a handful of comments that got lost in the merge shuffle

* more updated commnets

* remove pluginId from VisualizationSuggestion, whoops

* fix getAllSuggestions test

* update i18n

* might as well restore description here

* move fieldconfig back on radialbar

* call them suppliers, remove boolean return type in favor of internal util

* Update packages/grafana-data/src/panel/PanelPlugin.ts

* Update packages/grafana-data/src/panel/PanelPlugin.ts

* Update packages/grafana-data/src/panel/PanelPlugin.ts

* tweak return type for setSuggestionSupplier to be this
2025-11-18 18:49:29 +01:00
Matheus Macabu
a636e1dc8e Docs: Add secrets management beta API docs (#114020)
* Docs: Add secrets management beta API docs

* Apply suggestions from code review

Co-authored-by: Anna Urbiztondo <anna.urbiztondo@grafana.com>

* backtick params

* all caps JSON

* Apply suggestions from code review

Co-authored-by: Jacob Valdez <jacob.valdez@grafana.com>

* fix tab

* run yarn prettier

* fix anchor and permission for update

* example delete request

* Apply suggestions from code review

---------

Co-authored-by: Anna Urbiztondo <anna.urbiztondo@grafana.com>
Co-authored-by: Jacob Valdez <jacob.valdez@grafana.com>
2025-11-18 17:19:54 +00:00
Rafael Bortolon Paulovic
0fc0fb8db5 chore: move enable search to US configuration (#114070) 2025-11-18 17:32:25 +01:00
Torkel Ödegaard
11901cd242 PanelChrome: Hover header fixes (#113908)
* PanelChrome: Hover header fixes

* More fixes

* fixes

* Fix test

* restore hoverHeaderOffset feature

* Fixes
2025-11-18 17:05:30 +01:00
Sebastian Gaiser
e6f0107923 Prometheus: Add option to configure "use series endpoint" provisioned data source (#109852)
* feat(datasources,prometheus): add option to configure 'Use series endpoint' from datasource config

Signed-off-by: Sebastian Gaiser <sebastian.gaiser@hetzner-cloud.de>

# Conflicts:
#	docs/sources/datasources/prometheus/configure/_index.md

* Update public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/types.ts
2025-11-18 16:41:13 +01:00
Alexander Akhmetov
bbd0fbe9d0 Alerting: Update documentation for Prometheus list rules API (#114057) 2025-11-18 15:56:54 +01:00
Alexander Akhmetov
633c9a9cb0 Alerting: Add rule_limit parameter to the list rules API (#114055) 2025-11-18 15:56:40 +01:00
David Kim (DK)
66259bdede SLO: remove is new badge for SLO reports (#113784) 2025-11-18 14:30:46 +00:00
Konrad Lalik
a6952b554f Alerting: Rules filtering improvements (#114073)
* Reorganize filtering code structure

* Remove unused imports

* Simplify naming
2025-11-18 14:21:55 +01:00
Marcus Andersson
083c7f31f7 PluginExtensions: Prevent unneccesary re-renders (#113436)
* wip

* wip

* wip

* wip

* wip

* wip

* removed array.from.

* using concat

* added more tests.

* renamed according to feedback.

* Update the getPluginExtensions to use the slice.

* fixed expect statements.

* Reverted the test app from the allow list.

* cleanded up tests.

* added generic tests for base functionality.

* removed unused iport.
2025-11-18 14:12:23 +01:00
Peter Štibraný
ec74a721ea Be more tolerant to invalid JSON when parsing dashboards for indexing (#114040)
* Tags can only be string array.

* Be more lenient when parsing dashboard. Parse what we can, don't error out easily.

* Check element before parsing, log unexpected types.
2025-11-18 14:01:57 +01:00
Ida Štambuk
e821578ab0 Dynamic Dashboards: Disallow adding empty row and tab titles (#113941) 2025-11-18 12:58:45 +01:00
Andreas Christou
ad9f9fc408 Remove unneeded node options (#114081)
* Remove unneeded node options

* Remove experimentalWarning flag
2025-11-18 11:41:08 +00:00
Taha Derouiche
a5638b5c8b Docs: Fix SCIM EntraId broken link (#114078) 2025-11-18 12:39:06 +01:00
Will Browne
e00eb854f5 Plugins: Add ttlPluginInstanceManager feature toggle (#114084)
add ttlPluginInstanceManager feature toggle
2025-11-18 11:17:23 +00:00
Tobias Skarhed
82b283959b Scopes: Remove fallback title for scope node display (#114080)
* Remove fallback title for scope node display

* Remove newline
2025-11-18 11:05:27 +00:00
Will Browne
374cb1b163 Plugins: Bump plugin SDK version to v0.282.0 (#114079)
bump plugin SDK version to v0.282.0
2025-11-18 10:42:58 +00:00
Ashley Harrison
9321ca2019 Config: Set skip migrations in defaults.ini + override when running frontend service locally (#114007)
fs: skip migrations locally + add to defaults.ini
2025-11-18 09:49:26 +00:00
renovate-sh-app[bot]
db0b35f6df chore(deps): update dependency glob to v11.1.0 [security] (#114064)
| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | glob    | 11.0.3 | 11.1.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-18 10:43:10 +01:00
Gábor Farkas
a1a73dde66 datasources: querier: forward more headers (#113897) 2025-11-18 10:33:59 +01:00
Torkel Ödegaard
c7727eb25c Scopes: Scope input UI update (#114002)
* Progress

* Update

* Progress

* Fixes

* Update

* update e2e

* e2e fix

* More e2e fixes

* fix
2025-11-18 10:09:55 +01:00
Ihor Yeromin
4c75ea918a Transformations: Wrap sql expression tile under FF (#114030)
* Transformations: Add empty state placeholder with SQL expression and transformation cards

- Extract TransformationCard and SqlExpressionCard into separate reusable components
- Add new empty transformations placeholder UI behind transformationsEmptyPlaceholder feature toggle
- Add auto-scroll to SQL expression when navigating from transformations tab
- Add analytics tracking for transformation interactions
- Split EmptyTransformationsMessage into Legacy and New variants for easier toggle removal

* add tests
2025-11-18 10:01:45 +01:00
Kevin Minehart
a553256b46 CI: run publish artifacts on self-hosted runner (#114068)
run publish artifacts on self-hosted runner
2025-11-18 01:00:40 -08:00
Costa Alexoglou
faabe2e46d feat: add library elements to dash service (#114016) 2025-11-18 09:21:05 +01:00
Paul Marbach
d6e81c6334 Table: Clean up filter popover layout and improve filter selection UX (#114052)
* Table: Clean up filter popover layout

* Table: Improve filter selection ux text

* remove unused ref

* update snapshot test

* whoops, we don't want to change the global input suffix padding
2025-11-18 06:57:08 +01:00
grafana-pr-automation[bot]
7e6b5505f0 I18n: Download translations from Crowdin (#114059)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-18 00:40:35 +00:00
Paul Marbach
dd3f085648 Heatmap: Improve error messaging if no numeric fields were provided (#113985)
* Heatmap: Improve error messaging if no numeric fields were provided

* update i18n
2025-11-17 22:27:01 +00:00
Kristina
b6784c4354 API Client: Add exact command to run (#113994) 2025-11-17 21:52:41 +00:00
Johnny Kartheiser
441556d1a3 alerts docs: triage page (#113869)
* alerts docs: triage page

documentation for the alert triage page

* public preview note added

* Update alert-triage.md

* prettier

* removed alerts triage references

* rename

* image

* prettier
2025-11-17 15:15:46 -06:00
Rafael Bortolon Paulovic
32da63a20f chore: remove US history pruner feature toggle (#114014) 2025-11-17 20:47:37 +01:00
Alexander Akhmetov
da5af29218 Alerting: Add search.rule_group to search rules by rule group name (#113680)
Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-11-17 20:38:42 +01:00
Yuri Tseretyan
9d928a3ac6 Alerting: Remove stale states in two steps (#114044) 2025-11-17 18:43:29 +00:00
Tobias Skarhed
b79ace082c Scopes: Nested scope navigations (#113394)
* Initial nested scope navigation

* Seperate sections for scope navigation vs groups

* Add ungrouped navigation items

* Create tree structure helper for mock scope navigations

* Improve generated folder structure and add link to change scope

* Update mocks

* DevEnv Navigations

* Remove mocks

* Update button position and add border

* Remove subScope from TreeLink

* Do unblocking async update

* Add loading state

* Allow '' for root groups

* Formatting

* Add unit and integration tests

* Update openapi spec

* Update tooltip for IconButton

* Update i18n

* Make code more DRY

* Update public/app/dev-utils.ts

* update folderUpdate type

* Remove isSubScope in facvor of checking subScopeName

* Do an early return

* Use subScopeName

* Remove use of isSubScope

* Prevent nested items with the same subScope

* Extract filder method to function

---------

Co-authored-by: Mariell Hoversholm <mariell@mardroemmar.dev>
2025-11-17 17:18:12 +01:00
Ihor Yeromin
b6d34acc44 Feature toggle: Remove addFieldFromCalculationStatFunctions feature toggle (#113757)
* Remove addFieldFromCalculationStatFunctions feature toggle

The addFieldFromCalculationStatFunctions feature toggle was at GA stage
and enabled by default. This commit removes the toggle and makes the
cumulative and window functions permanently available in the add field
from calculation transformation.

Changes:
- Removed feature toggle definition from registry.go
- Updated CalculateFieldTransformerEditor to always include cumulative and window functions
- Removed unused config import
- Removed documentation entry
- Regenerated all generated files (toggles_gen.go, toggles_gen.csv, toggles_gen.json, featureToggles.gen.ts)

* fix merge conflicts
2025-11-17 16:58:43 +01:00
Drew Slobodnjak
ddb4690633 Heatmap: Add timeRangePan (#113889)
* Heatmap: Add timeRangePan

* Add tests

* Consolidate tests

* Optimize time range pan tests
2025-11-17 11:48:32 -04:00
Drew Slobodnjak
749cc735bb Timeline: Add timeRangePan (#113890)
* Timeline: Add timeRangePan

* Add tests for state timeline

* Add tests for status history

* Fix state timeline test and use same dashboard

* Consolidate tests

* Optimize time range pan tests
2025-11-17 11:42:54 -04:00
Laura Fernández
7888f19443 FS: custom domain error message (#113779) 2025-11-17 16:29:32 +01:00
Alexa Vargas
c7e8291bd1 Dashboard Library: Add basic unit test to suggested dashboards flow (#113825)
* Create unit tests for communityDashboardHelper

* Add unit test for autoMapDatasources

* Create unit test for DashboardCard

* --wip-- [skip ci]

* Fix test

* fix linting

* Add unit test to the dashboardLibraryApi

* update codeowners for dashboard library code

* fix: improve test coverage and fix failing tests

- Fix image handling tests in DashboardCard to verify actual behavior
- Fix UID filtering test in autoMapDatasources to use correct mock data
- Add test for dimThumbnail prop
- Add test for undefined inputs edge case
- All 82 tests now passing

* render function modified

* merge with template dashboard modifications. tests modified

---------

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>
2025-11-17 12:10:19 -03:00
Drew Slobodnjak
e9883f6c61 TimeSeries: Improve e2e for time range pan (#113981)
Timeseries: Improve e2e for time range pan
2025-11-17 11:02:08 -04:00
Drew Slobodnjak
fcceff99e2 CandleStick: Add timeRangePan (#113888)
* Candlestick: Add timeRangePan

* Add tests

* Rename test file

* Optimize time range pan tests
2025-11-17 10:36:36 -04:00
Matheus Macabu
cad9e1c5f3 Actions: Only run CodeQL analysis on main/release branches (#114021)
* Actions: Only run CodeQL analysis on main/release branches

* disble cache in go action
2025-11-17 14:26:33 +00:00
Anna Urbiztondo
2dfcaf9be8 Docs: Consolidate OaC intros (#113895)
* Consolidate

* Edits

* Remove Get started

* Prettier

* Edit

* Removing Grizzly

* Prettier
2025-11-17 15:10:31 +01:00
Natalia Bernarte Oses
c4f2f3f6f4 transformations and sql expressions discovery poc (#113664)
* transformations and sql expressions discovery poc

* add translations

* extract transformation card component

* scroll to sql expression

* put changes under ff

* fix translation

* add event tracker

* add tests

* naming, refactoring

* button amends

* add icons for sql expression tile

* TransformationPickerNg refactoring

* PanelDataTransformationsTab refactoring

* refactor empty message component

* refactor empty message component

* cleaning

* update feature toggle

* cover event tracking

* update interation events

---------

Co-authored-by: Develer <yeryomin.igor@gmail.com>
2025-11-17 14:57:05 +01:00
renovate-sh-app[bot]
100fb26d27 fix(deps): update dependency @reduxjs/toolkit to v2.10.1 (#113972)
| datasource | package          | from  | to     |
| ---------- | ---------------- | ----- | ------ |
| npm        | @reduxjs/toolkit | 2.9.0 | 2.10.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 13:47:01 +00:00
renovate-sh-app[bot]
f6df949bc3 chore(deps): update node.js to v24 (#114011)
| datasource   | package     | from     | to       |
| ------------ | ----------- | -------- | -------- |
| node-version | node        | v22.21.1 | v24.11.1 |
| npm          | @types/node | 24.9.2   | 24.10.1  |
| npm          | @types/node | 22.17.0  | 24.10.1  |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 13:46:26 +00:00
renovate-sh-app[bot]
a5103784fe fix(deps): update dependency swagger-ui-react to v5.30.2 (#114010)
| datasource | package          | from   | to     |
| ---------- | ---------------- | ------ | ------ |
| npm        | swagger-ui-react | 5.28.1 | 5.30.2 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 13:44:11 +00:00
Peter Štibraný
890fc1ea79 Support string version of "editable" field when indexing dashboard. (#114008) 2025-11-17 13:43:42 +00:00
renovate-sh-app[bot]
e6b12f865f fix(deps): update dependency ol to v10.7.0 (#114009)
| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | ol      | 10.6.1 | 10.7.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 13:43:18 +00:00
Konrad Lalik
703e93d103 Alerting: Refactor rules filtering (#113898)
* Refactor rules filter to easily switch between frontend and backend filters

* Refactor getFilter functions to receive filters as an argument

* Move filter normalization to getFilter utils
2025-11-17 14:42:29 +01:00
Ihor Yeromin
10a699fb6c Transformers: Remove formatString feature toggle (#113756)
* Transformers: Remove formatString feature toggle

The formatString feature toggle was in GA stage and enabled by default.
This change removes the feature toggle and makes the format string
transformer always available.

Changes:
- Remove formatString feature toggle definition from registry
- Remove conditional check in standardTransformers.ts
- Update feature toggle git log with deletion timestamp
- Regenerate feature toggle files

* fix lint errors
2025-11-17 14:06:30 +01:00
Laura Benz
434d370394 BrowseDashboards: Add tracking (#113696)
* feat: add tracking for New button

* feat: add tracking for New button dashboard click

* refactor: move tracking

* refactor: add payload

* refactor: clean up

* refactor: include folder clicks

* refactor: add view to payload

* feat: add tracking in serach view

* refactor: fix TS error

* refactor: adjust payload

* refactor: adjust payload

* refactor: fix TS error

* refactor: clean up

* refactor: set trackingSource

* refactor: remove type declaration

Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>

* refactor: apply changes after code review

* Refactor: clean up

Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>

* refactor: fix tests

---------

Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
2025-11-17 13:19:37 +01:00
Tom Ratcliffe
77dac4210f Chore: Remove pinNavItems feature toggle (#113855) 2025-11-17 12:12:47 +00:00
renovate-sh-app[bot]
6f8b4032c2 fix(deps): update dependency immer to v10.2.0 (#113974)
| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | immer   | 10.1.3 | 10.2.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 12:02:14 +00:00
renovate-sh-app[bot]
3b328b2609 fix(deps): update dependency @prometheus-io/lezer-promql to v0.307.3 (#113971)
| datasource | package                     | from    | to      |
| ---------- | --------------------------- | ------- | ------- |
| npm        | @prometheus-io/lezer-promql | 0.305.0 | 0.307.3 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 12:01:16 +00:00
renovate-sh-app[bot]
6a047e8f95 fix(deps): update dependency @opentelemetry/semantic-conventions to v1.38.0 (#113970)
| datasource | package                             | from   | to     |
| ---------- | ----------------------------------- | ------ | ------ |
| npm        | @opentelemetry/semantic-conventions | 1.37.0 | 1.38.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 12:00:46 +00:00
Ezequiel Victorero
fe95e0a6db FrontendService: Add support for swagger in the local dev env (#113937) 2025-11-17 09:00:11 -03:00
Ihor Yeromin
d10dc81a79 Feature toggle: Remove groupToNestedTableTransformation feature toggle (#113761)
Remove groupToNestedTableTransformation feature toggle

The group to nested table transformation has reached GA and is now
enabled by default. This commit removes the feature toggle and makes
the transformation always available.

Changes:
- Removed feature toggle definition from registry.go
- Updated standardTransformers.ts to always include the transformation
- Updated feature toggles documentation
- Regenerated feature toggle files
2025-11-17 12:57:22 +01:00
Ihor Yeromin
950376c0d9 Feature toggle: Remove regressionTransformation feature toggle (#113759)
Remove regressionTransformation feature toggle

The regression analysis transformation feature is now GA and no longer needs to be behind a feature toggle.
2025-11-17 12:55:03 +01:00
Andres Martinez Gotor
151d9ec1cc Advisor: Expose endpoint to register checktypes (#113750) 2025-11-17 12:48:53 +01:00
Josh Hunt
aa26cc4254 FS: Preserve buildInfo.edition from backend (#113967) 2025-11-17 11:32:16 +00:00
Ryan McKinley
d0fe342cfe Chore: Update app-sdk and k8s.io (#113998) 2025-11-17 13:34:15 +03:00
Ryan McKinley
1ef7c68f53 Chore: use context rather than golang.org/x/net/context (#114000) 2025-11-17 12:53:44 +03:00
Jean-Philippe Quéméner
9dd8c85448 feat(dashboards): add ttl based caching for datasources (#113999) 2025-11-17 09:48:17 +01:00
Jean-Philippe Quéméner
64c61c6916 fix(dashboards): use index for schema migration datasource lookups (#113911) 2025-11-17 08:56:54 +01:00
renovate-sh-app[bot]
f50d513252 fix(deps): update dependency centrifuge to v5.5.2 (#113973)
| datasource | package    | from  | to    |
| ---------- | ---------- | ----- | ----- |
| npm        | centrifuge | 5.4.0 | 5.5.2 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-17 10:24:48 +03:00
Hugo Häggmark
7772c3ab2e chore: fix failing builds on main (#113996)
Update import path for contextSrv in DashboardScenePageStateManager
2025-11-17 07:04:35 +01:00
Hugo Häggmark
8288ce6dd6 chore: reduce barrel files (#113842)
chore: reduce barrelfiles
2025-11-17 05:58:35 +01:00
grafana-pr-automation[bot]
f5df0b05ef I18n: Download translations from Crowdin (#113987)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-16 00:32:25 +00:00
Dave Henderson
1f1c75f817 Revert "OFREP: add ST builder for the authorizer, APIEnabled=false needs it" (#113983)
Revert "OFREP: add ST builder for the authorizer, APIEnabled=false needs it (…"

This reverts commit 9ca6ad3b49.
2025-11-14 21:54:48 +00:00
Ezequiel Victorero
af7f110664 ShortURL: Support memoize when creating shorturl using k8s api (#113952) 2025-11-14 18:29:50 +00:00
Juan Cabanas
de45393eb5 Dashboard Library: Integrate template dashboards (#112906)
* Extend interpolate endpoint to support community dashboard json interpolation
Added unit tests

* Implement Frontend Side
- Show tabs
- Fetch Community dashboads
- basic cards for community
- Search bar for community

* Improve card community and show thumbnails

* quick poc with template dashboards

* better cards ui

* entry point conditional added. dashboard card improved

* dev dashboard for testing

* details removed in template dashboard modal

* improvement when loading the templates

* dashboard from template entry points

* interactions added

* tracking event improvements. card improvement

* unused import removed

* 90% Complete MVP community dashboards integraton
- Use DashboardCard component
- Search grafana dashboard in the community tab
- Make Tabs and pagination sticky
- Adjust titles to be scoped by datasource name/type
- Add skeleton loading for community tabs and pagination
- Add dashboard details tooltip

* Use DataSourcePicker for extra configuration page

* Fix suggested dashboard, don't use filter but slug and also add gcomURLink

* Implement badge, for now reuse Badge component

* translations added

* Refactor code, extract to utils function and clean up code

* refactor provisioned dashboards images

* add missing file

* Extract API functions

* standarize event handlers

* Auto select tab when provisioned or community are not present, also add empty state for provisioned tab

* use SecondaryAction iconButton for Details, and also use Tooltip

* For suggested dashboards change Grid for Stack to fix issue with less than 3 dashboards, also add the details next to
the main action

* Fix styling issue with description miss-aligment

* Change "use template" to use dashboard

* update i18n

* fix broken unit test

* FF added

* uid changed to make it work for both scenarios

* Apply PR feedback
- add eventLocation
- Fix description placeholder
- Fix issue with suggested dashboards card aligment, change to Grid

* use datasource type instead of name, extract i18n and fix linting

* Improve View on Grafana.com link

* remove console.log

* Fix issue with cards styling

* improvements

* Apply suggestion from @juanicabanas

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>

* Use query params for modal state and reorder dashboard empty to keep suggestions in the middle

* extract common interpolate logic in new function

* fix linting

* rename loadTemplateDashboard function to loadSuggestedDashboard

* Improve automapping layout, add dashboard name to title and pipe the mappings

* Apply style guide for callback functions, and refactor constant inputs initialization wiht reduce

* Fix styling issues with focus border and pagination

* fix issue with card aligment

* use attach skeleton instead of custom css

* Adjust all i18n to use dashboard-library key

* Refactor mapping form to use one array to handle unmapped ds

* Update public/app/features/dashboard/dashgrid/DashboardLibrary/CommunityDashboardSection.tsx

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>

* Refactor pagination, use api pagination data

* Remove unnecesary trim

* Fix issue with Stack height and justifyContent in modal

* Update public/app/features/dashboard/dashgrid/DashboardLibrary/SuggestedDashboards.tsx

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>

* Add missing dependency

* Fix issue with mapping config form, make buttons to be aligned at the bottom

* Fix unit tests

* Add and refactor tracking interactions to support experiment KPIS

* rename unmappedInputs to unmappedDsInputs for clarity

* Update public/app/features/dashboard/dashgrid/DashboardLibrary/CommunityDashboardSection.tsx

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>

* rename modal and move modal to section

* Simplify search params, extrack user selected dashboards to helper function, update pagination styles and use url based
pagination

* Move modal logic to the suggested dashboards component

* Fix tracking duplication on first load and revert change on pagination url persistence

* Extrac on preview community dashboard into utils

* Bring old datasource-provisioned box back and rely on new feature toggle for community dashboards

* change logic for showing suggested dashboards, we only need to enable that feature toggle

* update i18n

* Fix unit test for basic provisioned dashboard

* fix css

* Apply feedback

* Add suggested dashboards to endpoint

* Add missing feature toggle check in the backend to expose the interpolate api

* Add extra test case

* update swagger

* Update public/app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmpty.tsx

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>

* update swagger

* changes applied to retrieve templates dashboards from raintank

* translations

* Remove duplicated tracking and add gnet id to the save tracking action

* interactions

* improvements applied

* last improvements

* tracking events modified with merge. translations fixed

* tests fixed

* uid property removed from dto. new way of tracking the ds types added

* ds types from gnet dashboard removed

* fixes

* tracking changed

* tracking modified

---------

Co-authored-by: alexandra vargas <alexa1866@gmail.com>
Co-authored-by: Alexa Vargas <239999+axelavargas@users.noreply.github.com>
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2025-11-14 15:22:48 -03:00
renovate-sh-app[bot]
4581ed89a0 fix(deps): update dependency marked-mangle to v1.1.12 (#113923)
| datasource | package       | from   | to     |
| ---------- | ------------- | ------ | ------ |
| npm        | marked-mangle | 1.1.11 | 1.1.12 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 17:51:42 +00:00
renovate-sh-app[bot]
050f6572a8 chore(deps): update dependency js-yaml to v4.1.1 [security] (#113953)
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | js-yaml | 4.1.0 | 4.1.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 17:03:27 +00:00
Yunwen Zheng
ffcd06c629 Git sync: Remove unnecessary comments (#113963)
remove comment
2025-11-14 12:03:08 -05:00
renovate-sh-app[bot]
58e0d03f46 chore(deps): update dependency ol-mapbox-style to v13.1.1 (#113880)
| datasource | package         | from   | to     |
| ---------- | --------------- | ------ | ------ |
| npm        | ol-mapbox-style | 13.1.0 | 13.1.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 17:01:01 +00:00
renovate-sh-app[bot]
f116208b88 chore(deps): update dependency nanoid to v5.1.6 (#113879)
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | nanoid  | 5.1.5 | 5.1.6 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 17:00:36 +00:00
Lauren
ef61b67e66 Alerting: Update tooltip message when routing preview is disabled (#113962)
* update tooltip message

* generate translations

* update translations
2025-11-14 16:37:08 +00:00
Andres Torres
b70c6a726f refactor(annotations): Allow skipping always on dashboard UID migrations (#113780) 2025-11-14 11:34:13 -05:00
Alexander Akhmetov
e6eb40a679 Alerting: Propagate dashboard uid filter to the backend (#113947)
* Alerting: Propagate dashboard uid filter to the backend

* Fix variable casing

---------

Co-authored-by: Konrad Lalik <konradlalik@gmail.com>
2025-11-14 16:25:14 +00:00
Ashley Harrison
fe0486915e Card: Adjust grid styles conditionally based on the presence of description (#113848)
* adjust card grid styles conditionally based on presence of description

* handle everything as part of `gridTemplate`
2025-11-14 15:57:31 +00:00
renovate-sh-app[bot]
66766fe729 fix(deps): update dependency @lezer/highlight to v1.2.3 (#113091)
| datasource | package          | from  | to    |
| ---------- | ---------------- | ----- | ----- |
| npm        | @lezer/highlight | 1.2.1 | 1.2.3 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 15:36:09 +00:00
Ezequiel Victorero
a2c5d6e686 InviteUser: Remove experimental feature toggle (#113914) 2025-11-14 12:33:26 -03:00
Yunwen Zheng
3e9662d910 BootstrapStep: Display disabled option and add reason (#113881)
* BootstrapStep: Display disabled option and add reason
2025-11-14 10:22:17 -05:00
Will Browne
9818822e87 Plugins: Fix flaky backend tests (#113945)
* fix flaky tests

* tidy
2025-11-14 15:09:12 +00:00
ismail simsek
f7e07d814a Tempo: Fix "undefined is not object (evaluating 'super.query')" error (#113722)
remove arrow function
2025-11-14 15:48:17 +01:00
renovate-sh-app[bot]
77aac05b09 fix(deps): update dependency @lezer/common to v1.3.0 (#113924)
| datasource | package       | from  | to    |
| ---------- | ------------- | ----- | ----- |
| npm        | @lezer/common | 1.2.3 | 1.3.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 15:36:04 +01:00
Oscar Kilhed
a59c4e2fcc Dashboards: Wrap links and data layer controls in divs to make them behave like variables (#113927)
Wrap links and data layer controls in divs to make them float together with variables
2025-11-14 15:26:31 +01:00
Collin Fingar
5e2a579802 Saved Queries: Run query after replacing (#113366)
* Saved Queries: Run query after replacing

* Fix unit tests
2025-11-14 09:19:41 -05:00
Rafael Bortolon Paulovic
5a111bc087 fix: delete provisioned dashboard in unified if forceDeleteRules is set (#113839) 2025-11-14 14:11:05 +01:00
Lauren
c2b15ca786 Alerting: Prevent routing preview from auto-triggering on mount (#113749)
* Alerting: Prevent routing preview from auto-triggering on mount

* resolve PR comments

* add info on hover of preview routing when disabled
2025-11-14 12:41:16 +00:00
Alexander Akhmetov
6d7ce16883 Alerting: Add rule_type filter to the rules endpoint (#113701)
Alerting: Add type filter parameter to the rules endpoint
2025-11-14 13:03:15 +01:00
Andres Martinez Gotor
bfa7ce9d78 Advisor: Remove legacy app register (#113773) 2025-11-14 12:25:30 +01:00
Andre Pereira
4355b3ed0d Trace View: Span filters updated to use combobox filters (#112287)
* Start using adhoc filters component in trace view

* Migrate old span filters to adhoc filters

* Add support for duration filter

* Set placeholder in adhoc filters input

* Moved the span graph to the header, above the filters

* Update next and prev buttons, added filter pills, style fixes

* Fix types

* Use canary scenes version

* Remove copyright

* More duration operators

* Added tests for the controller

* More consistent spacing

* Remove unused container style from SpanGraph component

* Update scenes canary

* Update scenes to 6.42.0

* Fix all spans toggle

* Use InlineSwitch instead of Switch

* Fix critical path

* Fix duration filtering

* Add tooltips to filter pills

* Improve duration filter pill

* Improvements to backgrounds of span row. Fixed size of collapsible overview section

* Fix sticky trace view header

* Removed old span filters from panel options

* Migrate old filters to adhocfilters in panel. Use the adhoc filters component in panel options.

* i18n

* Fix tests

* Fix tests
2025-11-14 11:19:11 +00:00
Kevin Minehart
92ef1c4942 CI: release-build.yml missing pipe (#113915) 2025-11-14 10:53:12 +00:00
Andrei
bcc5d29bf7 Loki: Apply default_manage_alerts_ui_toggle config (#112297)
Datasources: Apply default_manage_alerts_ui_toggle config to Loki datasource

- Update AlertingSettings component to use config.defaultDatasourceManageAlertsUiToggle
- Change from options.jsonData.manageAlerts !== false to nullish coalescing operator
- Add comprehensive tests for config behavior
- Ensures consistency with Prometheus datasource implementation from PR #98441

Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
2025-11-14 11:52:45 +01:00
Kevin Minehart
9376d569cc CI: Fix release-build bug; github.repository includes org (#113909)
* CI: Fix release-build bug; github.repository includes org

* set pipefail

* fix notify in release-build; this step should fail if it actually fails
2025-11-14 10:27:32 +00:00
Ida Štambuk
c2489d2768 Dynamic Dashboards: Fix dashboard-group-panels E2E tests (#113902) 2025-11-14 11:25:59 +01:00
Ashley Harrison
67444cee78 Storybook: Set role="menuitem" on storybook menu links, fix positioning to not stretch menu (#113705)
* set role="menuitem" on storybook menu links, fix positioning to not stretch menu

* fix description/icon contrast for active items
2025-11-14 10:20:18 +00:00
Ashley Harrison
bfee2ecc65 Chore: Rename render method on classes which aren't actually react class components (#113808)
* rename canvas class method so it's not falsely marked as a react class component

* also rename scene method

* rename render method in OptionsPaneCategoryDescriptor and OptionsPaneItemDescriptor

* rename render to setup in test scenario class
2025-11-14 10:20:01 +00:00
Will Browne
1535cfc17b Plugins: Datasource breadcrumb link should link to settings tab (#113862)
datasource breadcrumb link should link to settings tab
2025-11-14 10:03:39 +00:00
renovate-sh-app[bot]
9ad6507eef chore(deps): update yarn to v4.11.0 (#113884)
| datasource | package      | from   | to     |
| ---------- | ------------ | ------ | ------ |
| npm        | @yarnpkg/cli | 4.10.3 | 4.11.0 |
| npm        | @yarnpkg/cli | 4.9.4  | 4.11.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 10:50:14 +01:00
Lauren
d8a5d8d882 Alerting: Update UI of instance counts on triage page (#113660)
* Alerting: Update UI of instance counts on triage page

* make boxes full height

* resolve PR comments- use grafana-ui components

* refactoring
2025-11-14 09:45:57 +00:00
renovate-sh-app[bot]
3fffb2d998 fix(deps): update dependency @grafana/plugin-ui to ^0.11.0 (#113886)
| datasource | package            | from    | to     |
| ---------- | ------------------ | ------- | ------ |
| npm        | @grafana/plugin-ui | 0.10.10 | 0.11.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-14 10:43:52 +01:00
Georges Chaudy
1162fa5104 kvstore: Add optimistic locking for unified resource storage backend (#113230)
* Add optimistic concurrency

* add optimistic concurrency

* fix test

* nit

* fix tests for sql

* fix tests for sql

* rebase fix

* add one more check

* Implement GetLatestAndPredecessor method in datastore and add corresponding tests. This new functionality retrieves the latest resource version and its immediate predecessor, handling cases for single and non-existent resources. Update WriteEvent to utilize this method for improved optimistic concurrency control.

* Enhance optimistic concurrency control in WriteEvent method. Added checks for concurrent create operations to ensure only one succeeds, preventing race conditions. Updated tests to validate this behavior with multiple concurrent create attempts.

* lint

* Refactor optimistic concurrency check in WriteEvent method. Simplified the logic by removing unnecessary condition for single version existence, ensuring more robust handling of concurrent modifications.
2025-11-14 10:42:39 +01:00
Kevin Minehart
8c3c3a851f CI: Continue notify even on error (#113906) 2025-11-14 09:41:47 +00:00
Roberto Jiménez Sánchez
1cc21a0705 Provisioning: Make image renderer note optional in PR comments (#113837)
* Provisioning: Remove image renderer note from PR comment template

Removes the 'NOTE: The image renderer is not configured' message from
the pull request comment template when image renderer is unavailable.
This addresses issue #656 in git-ui-sync-project.

- Updated commentTemplateMissingImageRenderer to be empty
- Updated testdata to reflect the change
- All unit tests pass

* Provisioning: Make image renderer note optional in PR comments

Make the image renderer note in pull request comments optional based on
the allowImageRendering configuration flag. When enabled, the note now
includes a link to the setup documentation.

- Add showImageRendererNote boolean field to commenter struct
- Update NewCommenter to accept showImageRendererNote parameter
- Update template to conditionally show note with documentation link
- Pass allowImageRendering from APIBuilder to commenter in register.go
- Update ProvidePullRequestWorker to use cfg.ProvisioningAllowImageRendering
- Add tests to verify note appears/disappears based on flag

Fixes https://github.com/grafana/git-ui-sync-project/issues/656

* Format code with go fmt

* Remove redundant text from image renderer note

Remove 'The image renderer is not configured.' from the note message.
The note now focuses on actionable guidance with the documentation link.

* Fix compilation error: use cfg.ProvisioningAllowImageRendering directly

Cannot access unexported field allowImageRendering from webhooks package.
Use cfg.ProvisioningAllowImageRendering directly since we have access to cfg.
2025-11-14 10:33:28 +01:00
Gareth
5b34d92dca OpenTSDB: Fix type mismatch with counterMax and counterResetValue (#113835)
* fix

* update test
2025-11-14 18:31:09 +09:00
Tobias Skarhed
668ef398d6 Scopes: Don't redirect on URL sync (#113851)
* Add toggle for redirection when applying a scope

* Add e2e tests

* Update unit tests
2025-11-14 10:15:28 +01:00
Kevin Minehart
d92cb9f7a6 CI: Make notify-pr workflow optional (#113896)
* CI: Make notify-pr workflow optional

* also set repo to the current repo

* fix find-pr
2025-11-14 08:40:03 +00:00
Alex Khomenko
326d374266 Provisioning: display limits (#113778)
* Provisioning: Add tier limit messages

* Style the icon

* Add upgrade link

* update free tier check

* Update repository button

* Add trial edition

* Fix card layout

* use custom link

* use variable text

* Update messages

* comment
2025-11-14 08:10:13 +00:00
grafana-pr-automation[bot]
5717da4b22 I18n: Download translations from Crowdin (#113883)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-14 00:43:10 +00:00
Yuri Tseretyan
0ab58642c4 Alerting: Resize created_by and updated_by columns in alert rules tables (#113870) 2025-11-13 17:15:54 -05:00
Victor Marin
09a7a0c94f CSV Export: FieldType.other objects will be stringified (#113854) 2025-11-13 15:11:10 -05:00
Galen Kistler
23c192f330 TableCellInspector: fix runtime error thrown when inspecting non-string table cells (#113865)
* fix: old table throwing error on inspect of dates and empty cells

---------

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-11-13 19:48:40 +00:00
Matt Cowley
6b26391cf2 Theme: Add breakpoint methods for container queries (#113619)
* Theme: Add breakpoint methods for container queries

* Page: Define page as inline container
2025-11-13 18:55:28 +00:00
renovate-sh-app[bot]
cd40f7e36c chore(deps): update dependency micro-memoize to v4.2.0 (#113815)
| datasource | package       | from  | to    |
| ---------- | ------------- | ----- | ----- |
| npm        | micro-memoize | 4.1.3 | 4.2.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 17:33:08 +00:00
renovate-sh-app[bot]
bfca0d578c chore(deps): update dependency lossless-json to v4.3.0 (#113814)
| datasource | package       | from  | to    |
| ---------- | ------------- | ----- | ----- |
| npm        | lossless-json | 4.2.0 | 4.3.0 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 17:32:38 +00:00
renovate-sh-app[bot]
060af9cede chore(deps): update dependency @openfeature/web-sdk to v1.7.1 (#113811)
| datasource | package              | from  | to    |
| ---------- | -------------------- | ----- | ----- |
| npm        | @openfeature/web-sdk | 1.6.1 | 1.7.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 17:32:12 +00:00
Matheus Macabu
4ee2112ea4 Secrets: Remove unused register_api_server setting (#113849) 2025-11-13 09:26:04 -08:00
Charandas
9ca6ad3b49 OFREP: add ST builder for the authorizer, APIEnabled=false needs it (#113809) 2025-11-13 09:19:16 -08:00
xavi
3f48a6358f Stricter validation for redirect URLs (#113852) 2025-11-13 18:04:20 +01:00
Roberto Jiménez Sánchez
c1485ecf5f Provisioning: detect stale sync status and trigger resync (#113826)
* provisioning: detect stale sync status and trigger resync

When sync jobs expire and are cleaned up by the expired job cleanup
controller, the Repository sync status remains stuck in Pending or
Working state. This prevents new sync jobs from being queued because
shouldResync() blocks on these states.

This change adds detection logic in shouldResync() to check if a sync
job referenced in the sync status still exists. If the job doesn't exist
(NotFound), we trigger a resync to reconcile the stale state.

Fixes grafana/git-ui-sync-project#626

* test: remove unused mocks and fix test case

- Remove unused mockRepositoryLister and mockRepositoryNamespaceLister types
- Remove unused imports (labels, listers)
- Remove test case for sync disabled scenario as we don't care about sync enabled state when detecting stale status
2025-11-13 16:58:33 +00:00
Kevin Yu
1491607e8e CloudWatch: Add links to data source docs in the config editor (#113795)
* CloudWatch: Add links to data source docs in the config editor

* fix tests
2025-11-13 08:54:00 -08:00
renovate-sh-app[bot]
7c709f0b89 chore(deps): update dependency i18next to v25.6.1 (#113813)
| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | i18next | 25.5.2 | 25.6.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 16:41:19 +00:00
renovate-sh-app[bot]
42bca68966 chore(deps): update dependency @reduxjs/toolkit to v2.10.1 (#113812)
| datasource | package          | from  | to     |
| ---------- | ---------------- | ----- | ------ |
| npm        | @reduxjs/toolkit | 2.9.2 | 2.10.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 16:40:33 +00:00
Jesse David Peterson
df44209e53 Dashboards: Fix timeseries off-by N time shift bug after mouse x-axis zoom in panel (#113821)
fix(panel-time-range): override method to account for time shift
2025-11-13 12:25:05 -04:00
Victor Marin
ed17fb22dc Dashboards: Query variable editor sets default ds on variable on init (#113843)
* Query variable editor sets default ds on var instead of undefined

* fix old arch tests
2025-11-13 18:19:10 +02:00
Torkel Ödegaard
1bb9de6f75 Sidepane: Remove padding (#113819) 2025-11-13 16:36:18 +01:00
Yuri Tseretyan
6603abc873 Alerting: Support for imported receivers in API (#112138)
* add support for converting Mimir integrations to Integration
* implement imported config revision
* update service to load staged receivers if configured
* make sure non-Grafana origin cannot be mutated
* set access control metadata for imported origin
* set includeImported from feature flag. Disabled for service used by provisioning
* add tests for new functionality
* add snapshot-based integration test
2025-11-13 15:35:21 +00:00
Will Browne
f041563df3 Plugins: Prevent passing host environment variables to plugin processes by default (#113412)
* remove pluginsSkipHostEnvVars toggle

* fix tests
2025-11-13 15:31:57 +00:00
Oscar Kilhed
ae8a8cf16e Dynamic dashboards: Fix empty space under time controls when dashboard has many variables (#113765)
* fix space under time controls by using floats instead of flex

* remove commented out styles

* adjust spacing: use marginBottom and reduce bottom padding

* make Add variable button float inline with variables
2025-11-13 16:16:21 +01:00
Sven Grossmann
906d32b437 Tempo: Disable streaming for grafana-assistant-app (#113847) 2025-11-13 15:54:22 +01:00
Alexander Akhmetov
44a92d252b Alerting: Support rule title search on the backend (#113738) 2025-11-13 15:52:14 +01:00
Jack Baldry
7fe5772888 Restructure As code and developer resources (#113845) 2025-11-13 14:04:57 +00:00
Ieva
0d67fac87f RBAC: Correctly display the new roles after updating user, service account and team roles (#113783)
always fetch the new roles after updating user/team roles
2025-11-13 13:29:17 +00:00
Piotr Jamróz
3e4933ec60 Span Details: Two-column view (#112856)
* Span Details: Two-column view

Fixes #108465

* Use different flow

* Remove redundant comment

* Fix resizing and background color

* Clean up styles

* Fix tests

* Clean up

* Update types

* Revert i18n key changes

* Clean up i18n keys
2025-11-13 13:59:18 +01:00
Victor Marin
a2150b0b79 Deps: Bump scenes version to v6.46.0 (#113823)
bump scenes
2025-11-13 14:33:43 +02:00
Ashley Harrison
f5f0c1e6f6 Playwright: fix timezone test to work at all times (#113827)
* fix timezone test to work at all times

* remove unused imports
2025-11-13 12:23:25 +00:00
Alexander Zobnin
b550750a9b Zanzana: Rename namespace to req_namespace label (#113822) 2025-11-13 12:08:10 +00:00
Jean-Philippe Quéméner
e92a976de2 fix(unified-storage): process list items concurrently (#113801) 2025-11-13 12:08:14 +01:00
Jesse David Peterson
108693eb31 TimeSeries: X-axis (time range) click-and-drag panning in panel (#112982)
* feat(time-range): click and drag interaction to pan x-axis over time

* feat(timeseries): add x-axis interaction area uPlot plugin

* test(timeseries): validate x-axis pan with Playwright browser test

* refactor(uplot-config): simplify state management for x-axis panning

* refactor(uplot-config): plot state union type

* fix(time-range-pan): simplify calcs, mouse handler cleanup function
2025-11-13 06:33:09 -04:00
Gabriel MABILLE
97a6ab7b1c AuthZ: Remove outdated comments (#113817) 2025-11-13 11:06:02 +01:00
Matt Cowley
3bd49f6546 fix(TopBar): consistent ToolbarButton styling for sidebar buttons (#113804)
* Remove custom styles from ExtensionToolbarItemButton

* Use active ToolbarButton variant for ExtensionToolbarItemButton

* Use active ToolbarButton variant for HelpTopBarButton

* Simplify ExtensionToolbarItemButton conditional logic

* Replace nested ternary with iife
2025-11-13 09:57:27 +00:00
Roberto Jiménez Sánchez
73657be5e7 Provisioning: Fix history write for expired jobs (#113764)
* refactor: Move job cleanup to separate controller and fix history write

- Created JobCleanupController in apps/provisioning/pkg/controller
- Separated cleanup logic from ConcurrentJobDriver
- Fixed bug where expired jobs were not written to history
- Added comprehensive tests with 93.8% coverage
- Removed cleanup interval parameter from ConcurrentJobDriver
- Cleanup now properly follows Complete + WriteJob pattern

Fixes expired jobs being lost instead of archived

* refactor: Update lease renewal interval to use jobExpiry variable

- Changed the lease renewal interval in the GetPostStartHooks method to utilize the jobExpiry variable for improved clarity and maintainability.

* Format code

* Fix Unix milliseconds

* fix: correct Unix timestamp assertions and remove duplicate test expectations

- Changed Unix() to UnixMilli() for correct millisecond timestamp validation
- Removed duplicate store.AssertExpectations(t) calls throughout tests
2025-11-13 10:54:07 +01:00
Dafydd
3082a762d3 Update grafana socks proxy information (#110832)
Co-authored-by: Jacob Valdez <jacob.valdez@grafana.com>
Co-authored-by: Irene Rodríguez <irene.rodriguez@grafana.com>
2025-11-13 10:53:54 +01:00
Gabriel MABILLE
b4b410f5be grafana-iam: Register a flag to configure dualwrite modes (#113610)
* `grafana-iam`: Register a flag to configure dualwrite modes

* Streamline helper code

* Launch sync job only with mode 1 to 3
2025-11-13 10:34:55 +01:00
Mustafa Sencer Özcan
6eac95f860 fix: inject index min update interval into resource server (#113816) 2025-11-13 09:27:54 +00:00
Ihor Yeromin
5091c946b5 Correlations: Remove correlations feature toggle (#113752)
* Remove correlations feature toggle

The correlations feature toggle has been removed from the registry and all
usages throughout the codebase have been cleaned up. Correlations are now
always available.
2025-11-13 10:21:46 +01:00
Tom Ratcliffe
6da33546a5 Chore: Mark more files as generated in gitattributes (#113776) 2025-11-13 09:09:15 +00:00
Torkel Ödegaard
ac5e54a225 Prom/Loki: Query editor padding fix (#113727) 2025-11-13 09:56:10 +01:00
Gabriel MABILLE
0a9f93436a Docs: Fix grpc server key file param in config ini (#113798)
Docs: Fix config ini grpc server key param
2025-11-13 09:40:47 +01:00
renovate-sh-app[bot]
eaa1b62c01 fix(deps): update dependency @lezer/lr to v1.4.3 (#113787)
| datasource | package   | from  | to    |
| ---------- | --------- | ----- | ----- |
| npm        | @lezer/lr | 1.4.2 | 1.4.3 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 05:30:10 +00:00
renovate-sh-app[bot]
7ee61a9277 fix(deps): update dependency @grafana/assistant to v0.1.4 (#113786)
| datasource | package            | from  | to    |
| ---------- | ------------------ | ----- | ----- |
| npm        | @grafana/assistant | 0.1.1 | 0.1.4 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 05:29:42 +00:00
renovate-sh-app[bot]
00e4d98ca3 chore(deps): update dependency ol-mapbox-style to v13.1.1 (#113785)
| datasource | package         | from   | to     |
| ---------- | --------------- | ------ | ------ |
| npm        | ol-mapbox-style | 13.1.0 | 13.1.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 05:29:11 +00:00
renovate-sh-app[bot]
55a29bd2d1 fix(deps): update dependency ol-ext to v4.0.36 (#113788)
| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | ol-ext  | 4.0.35 | 4.0.36 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 03:37:48 +00:00
renovate-sh-app[bot]
a5b8038f35 chore(deps): update dependency nanoid to v5.1.6 (#113497)
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | nanoid  | 5.1.5 | 5.1.6 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-13 03:33:43 +00:00
Ashley Harrison
3563388d4d Frontend Service: Client side redirect to custom domain (#113717)
* handle redirect in frontend service

* add comments
2025-11-13 03:32:14 +00:00
Ashley Harrison
6c8c4c32b5 Chore: Cleanup FEP feature toggles (#113772)
* reassign some feature toggles

* remove templateVariablesUsesCombobox toggle as it's unused
2025-11-13 03:31:18 +00:00
grafana-pr-automation[bot]
e60ad6f195 I18n: Download translations from Crowdin (#113805)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-13 00:40:07 +00:00
Paul Marbach
3e31f7b713 Suggestions: Update ownership of core files and improve some types (#113254) 2025-11-12 16:31:33 -05:00
Charandas
cbd794d0b8 Provisioning: fix regression with webhook authz failing in MT (#113793) 2025-11-12 13:21:28 -08:00
Johnny Kartheiser
a67fad4734 alerting: best practices docs update (#113188)
* alerting: best practices docs update

best practices docs update re: recording rules

* Update _index.md
2025-11-12 19:26:51 +00:00
Adela Almasan
a194219365 VizSuggestions: Add new feature toggle (#113549) 2025-11-12 13:26:29 -06:00
Isabella Siu
ec9f39d54a AWS Datasources: add toggle for http proxy (#113777) 2025-11-12 13:51:23 -05:00
renovate-sh-app[bot]
c9e381b96f chore(deps): update prom/prometheus docker tag to v3.7.3 (#113515)
| datasource | package         | from   | to     |
| ---------- | --------------- | ------ | ------ |
| docker     | prom/prometheus | v3.7.2 | v3.7.3 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-12 17:32:15 +00:00
renovate-sh-app[bot]
97c8121785 chore(deps): update grafana/alloy docker tag to v1.11.3 (#113498)
| datasource | package       | from    | to      |
| ---------- | ------------- | ------- | ------- |
| docker     | grafana/alloy | v1.11.2 | v1.11.3 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-12 17:31:43 +00:00
renovate-sh-app[bot]
59ff606106 chore(deps): update dependency @openfeature/core to v1.9.1 (#113496)
| datasource | package           | from  | to    |
| ---------- | ----------------- | ----- | ----- |
| npm        | @openfeature/core | 1.9.0 | 1.9.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-12 17:30:26 +00:00
renovate-sh-app[bot]
4cb290e4cc chore(deps): update dependency @formatjs/intl-durationformat to v0.7.6 (#113495)
| datasource | package                       | from  | to    |
| ---------- | ----------------------------- | ----- | ----- |
| npm        | @formatjs/intl-durationformat | 0.7.4 | 0.7.6 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-12 17:29:51 +00:00
Johnny Kartheiser
1f14f1447f alerting docs: target data source clarification (#113126)
adding information to create grafana managed recording rules doc per support request 16892
2025-11-12 10:51:13 -06:00
Johnny Kartheiser
67f811b6d8 alerting: mute timing clarification (#113129)
* alerting: mute timing clarification

clarify that mute timing takes precedence over active timing

* alerting docs: best practices addition

draft content for best practices re: recording rules

* wrong branch

* alerting: best practices docs

best practices addition re: recording rules

* smh
2025-11-12 10:49:50 -06:00
Alexander Zobnin
4bca10195e Zanzana: Fix shadow client metric (#113771) 2025-11-12 16:48:48 +00:00
Andres Torres
5162988fa1 feat(semconv): Add grafana namespace name attribute (#113767) 2025-11-12 16:33:26 +00:00
Alexa Vargas
6eabb9b2e4 Dashboard Library: Implement analytics tracking for Suggested Dashboards (#113417)
Implement analytics tracking for Suggested Dashboard
* loaded - Tracks when library content becomes available
* searchPerformed - Tracks search behavior (privacy-preserving, no query text)
* itemClicked - Tracks dashboard selection
* mappingFormShown - Tracks when datasource mapping form is displayed
* mappingFormCompleted - Tracks successful mapping form completion

---------

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2025-11-12 17:13:31 +01:00
Sven Grossmann
d35524915c BackendSrv: Remove extra console.logs in chunked (#113446)
BackendSrv: Remove extra `console.logs`
2025-11-12 16:06:09 +00:00
Alexander Zobnin
5ca48bc73d folder-operator: use new zanzana write APIs (#113732) 2025-11-12 17:03:02 +01:00
Dana Axinte
06954b7b0a Caching: Remove tsl memcached feature toggle (#113715)
* Remove tsl memcached feature toggle

* Remove feature flag from docs
2025-11-12 15:49:28 +00:00
Torkel Ödegaard
1f558b1e06 PanelChrome: Feature toggle increased panel header height and padding (#112613)
* PanelChrome: Feature toggle for increase header and content panel padding

* Update

* Update to panel menu

* Fix lint

* Revert theme feature ttoggle changes

Signed-off-by: Torkel Ödegaard <torkel@grafana.com>

* Update

* fix storybook

* Update

---------

Signed-off-by: Torkel Ödegaard <torkel@grafana.com>
2025-11-12 16:40:46 +01:00
Jean-Philippe Quéméner
a8dda428ce fix(dashboard): proper check int size (#113766) 2025-11-12 15:35:38 +00:00
Torkel Ödegaard
d1d8aa7c14 PanelEdit: Remove double border when viz picker is open (#113729) 2025-11-12 16:04:54 +01:00
Torkel Ödegaard
0392bf5724 ExternalPlugins: Restore backward compatability for util function (#113735)
* ExternalPlugins: Restore backward compatability for util function

* tweak

* fix withValue => withTitle
2025-11-12 16:04:35 +01:00
Jean-Philippe Quéméner
16ddd536ab fix(dashboard): proper check uint32 size (#113760) 2025-11-12 14:55:59 +00:00
Paul Marbach
4b1fbcbd04 Cleanup: Remove CSV drag-and-drop snapshot query feature (#113645)
* Chore: Remove editPanelCSVDragAndDrop feature

* update i18n

* fix issues from PR
2025-11-12 09:47:44 -05:00
Andres Martinez Gotor
d83c35fd71 Advisor: App installer setup (#113525) 2025-11-12 15:32:21 +01:00
Mike
6c512dabdc Secrets: Fix MariaDB syntax error due to unsupported CTE syntax (#111610) (#113690)
* Secrets: fix MariaDB syntax error due to unsupported CTE syntax (#111610)

* parametrize guid/created columns and re-generate test fixtures

---------

Co-authored-by: Matheus Macabu <macabu.matheus@gmail.com>
2025-11-12 15:15:43 +01:00
Yunwen Zheng
3e2dccb544 FilesView: .keep file should not be clickable and no actions available (#113687)
* FilesView: .keep file should not be clickable and no actions available
2025-11-12 09:06:41 -05:00
Mustafa Sencer Özcan
735b776edc fix: cleanup legacy resource if it is created in legacy during dual update (#113753) 2025-11-12 15:02:36 +01:00
Roberto Jiménez Sánchez
cdc6a6114c Provisioning: Improve logging and tracing in job processing (#113454)
* Provisioning: Improve logging and tracing in job processing

- Add comprehensive tracing with OpenTelemetry spans across all job operations
- Enhance logging with consistent style: lowercase, concise messages, appropriate log levels
- Use past tense for completed lifecycle events (e.g., 'stopped' vs 'stop')
- Add structured logging with contextual attributes for better searchability
- Handle graceful shutdowns without throwing errors on context cancellation
- Refactor Cleanup method into listExpiredJobs and cleanUpExpiredJob for better code quality
- Avoid double logging by only logging errors when handled locally
- Add tracing and logging to historyjob controller cleanup operations

Files modified:
- pkg/registry/apis/provisioning/jobs/driver.go: Add tracing spans and improve error handling for graceful shutdown
- pkg/registry/apis/provisioning/jobs/concurrent_driver.go: Add tracing and consistent logging
- pkg/registry/apis/provisioning/jobs/persistentstore.go: Add comprehensive tracing and logging to all public methods, refactor cleanup
- apps/provisioning/pkg/controller/historyjob.go: Add tracing and improve logging consistency

* Update pkg/registry/apis/provisioning/jobs/persistentstore.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor logging in persistentstore.go

- Remove debug log statements at the start of job operations for cleaner output
- Maintain structured logging with contextual attributes for improved traceability

Files modified:
- pkg/registry/apis/provisioning/jobs/persistentstore.go: Clean up logging for job operations

* Enhance logging and tracing in provisioning job operations

- Introduce OpenTelemetry spans for better observability in job processing and webhook handling
- Improve structured logging with contextual attributes for key operations
- Remove unnecessary tracing spans in long-running functions to streamline performance
- Update error handling to record errors in spans for better traceability

Files modified:
- pkg/registry/apis/provisioning/controller/repository.go: Add tracing and structured logging to sync job operations
- pkg/registry/apis/provisioning/jobs/concurrent_driver.go: Remove tracing span from long-running function
- pkg/registry/apis/provisioning/jobs/driver.go: Enhance logging and tracing in job processing
- pkg/registry/apis/provisioning/webhooks/webhook.go: Implement tracing and structured logging for webhook connections

* Update pkg/registry/apis/provisioning/jobs/driver.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Improve error handling in ConcurrentJobDriver to differentiate between graceful shutdown and unexpected stops

* Remove unused import in driver.go to clean up code

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-12 14:59:27 +01:00
beejeebus
6d64c373ce Allow FlagQueryServiceWithConnections to enable datasource config CRUD
The FlagGrafanaAPIServerWithExperimentalAPIs is only available when
`app_mode=development`. We have a more specific flag that is usable in
production, so use that.

Also, there was some old code constraining these APIs to a static list
of datasources. We don't need that anymore, so this PR removes it.

The FlagQueryServiceWithConnections is left as is, because there are
multiple existing tests that rely on this development-only, experimental
flag. I don't want to understand why that is.
2025-11-12 08:48:46 -05:00
Jean-Philippe Quéméner
b9e39cdfcc chore(unified-storage): add debug log for read after write (#113747) 2025-11-12 14:39:03 +01:00
Gareth
4e050267c7 decouple the opentsdb data source from core (#113588)
* enable linting rules for opentsdb

* remove core imports

* update plugin.json

* write backend standalone files

* remove frontend core imports

* add yarn workspace

* remove core import for the plugin

* update grafana dependency

* update package.json

* add jest config
2025-11-12 22:33:17 +09:00
Lauren
ed19a92a2a Alerting: Fix to prevent regex escape on search input query (#113734)
prevent regex escape on search input query
2025-11-12 12:48:20 +00:00
Piotr Jamróz
d54a2b33fe Explore: Ensure data source is part of query object in internal data links (#112949)
* Explore: Ensure data source is part of query object in internal data links

Fixes #112945

* Fix tests

* Fix tests

* Update tests

* Update tests

* Add a safeguard for misconfigured links

* Update logic to update uid when only type or name is defined
2025-11-12 13:40:11 +01:00
Alex Khomenko
4eca53890f Provisioning: Collapse repository status messages (#113666)
* Provisioning: Add collapsible pull status messages

* Use text styles

* Add animation

* Fix error message

* cleanup

* a11y

* more a11y
2025-11-12 12:21:58 +00:00
Ivan Ortega Alba
e463781077 Schema: convert dashboards from v1beta1 to v2beta1 (#109037)
- Implement full conversion pipeline from v1beta1 → v2beta1
- Ensure frontend–backend parity for all dashboard serialization paths
- Add automatic data loss detection for conversions (panels, queries, annotations, links, variables)
- Extract atomic conversion functions for v0 → v1beta1 → v2alpha1 → v2beta1
- Introduce conversion metrics and detailed logging for loss tracking
- Normalize datasource resolution, defaults, and annotation processing
- Improve panel layout serialization and y-coordinate normalization
- Fix inconsistencies in nested panels and collapsed row behavior
- Refine variable handling:
  - Filter refId from variable query specs
  - Default variable refresh to 'never' (matches frontend)
  - Fix constant and interval variable handling for missing queries
- Unify schema defaults (enable, hide, iconColor, editable, liveNow)
- Fix pluginId usage (UID vs type) and datasource references
- Fix metrics.go bug swallowing errors (return nil → return err)
- Add tests for version-specific conversion error handling
- Add data loss detection tests using source/target version comparison
- Clean up lint issues, legacy code, and redundant files
- Update OpenAPI snapshots and migrated dashboards
- Improve backend migrator to reuse datasource provider and match frontend logic

Co-authored-by: Haris Rozajac <haris.rozajac12@gmail.com>
Co-authored-by: Oscar Kilhed <oscar.kilhed@grafana.com>
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
2025-11-12 11:43:46 +01:00
Sam Jewell
09942c08db Transforms: Extract Fields: Remove Deduplication feature toggle (#113709)
Remove extractFieldsNameDeduplication feature toggle

The extractFieldsNameDeduplication feature has reached GA (General Availability),
so the feature toggle is no longer needed. The name deduplication behavior is
now permanently enabled.

Changes:
- Removed feature toggle definition from registry.go
- Removed feature toggle check in extractFields.ts (always deduplicate now)
- Updated tests to remove feature toggle manipulation
- Regenerated feature toggle files
2025-11-12 10:08:13 +00:00
Sam Jewell
f0d18beaf3 AdHoc Filters in Tooltips: Remove feature toggle (#113695)
* Remove `dashboardDsAdHocFiltering` feature toggle

From our feature toggles machinery only.
Removing from our application code next.

* Remove feature toggle from application code
2025-11-12 10:05:30 +00:00
Alexander Zobnin
48438f49e7 grafana-iam: refactor resource permissions write to zanzana (#113700)
* grafana-iam: refactor resource permissions write to zanzana

* Fix linter

* fix linter
2025-11-12 10:23:15 +01:00
Chris Bedwell
6401901e5d GrafanaUI: Fix iconPlacement prop not being respected in LinkButton (#113708)
fix: iconPlacement now respected in LinkButton. Added tests.
2025-11-12 08:53:04 +00:00
Jean-Philippe Quéméner
76ab09a6a2 feat(unified-storage): add tracing to apistore (#113714) 2025-11-12 09:48:56 +01:00
grafana-pr-automation[bot]
04902b0419 I18n: Download translations from Crowdin (#113724)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-12 00:39:33 +00:00
Tom Ratcliffe
a9b52589ff Folders: Deprecate getFolderByUID method (#113173) 2025-11-11 18:11:57 +00:00
Yunwen Zheng
d8363bdfcf SaveProvisionedDashboardForm: When comment is edited, enable save button (#113686)
SaveProvisionedDashboardForm: When comment is edit, enable save button
2025-11-11 13:02:42 -05:00
Moustafa Baiou
559dab8b1b Alerting: Fix error when updating Alertmanager config with autogenerated receivers (#113710)
If an alert rule with an invalid receiver is created it breaks the entire alertmanager configuration rather than preventing the save.

This fixes the issue by erroring on save and apply, and logging invalid receivers only when applying the config after an update.

Introduced in #111838
2025-11-11 16:53:36 +00:00
Lauren
c4cf454cf0 Alerting: Fix label value dropdown suggestions in alert rule editor (#113702) 2025-11-11 16:40:23 +00:00
Josh Hunt
96f34f8f56 EchoSrv: Enable auto route tracking for Azure App Insights (#113354)
* Echo: Enable auto route tracking with Azure App Insights

* Add server config option to disable auto route tracking

* fix not using minified js
2025-11-11 16:33:46 +00:00
Laura Fernández
4ae1774e1f Chore: remove gf-form in grafana-ui components (#113659) 2025-11-11 15:58:16 +01:00
Ashley Harrison
ee6c8a6e20 Storybook: Ensure panels have unique titles (#113703)
ensure panels have unique titles
2025-11-11 13:47:31 +00:00
Ashley Harrison
562e7ba043 Frontend Service: Ensure the favicon/appletouchicon/loadinglogo are using the CDN url (#113699)
* ensure the favicon, appletouchicon and loadinglogo are using the CDN url

* add nosec comments since we control the cdn url
2025-11-11 13:47:21 +00:00
Rafael Bortolon Paulovic
194f7cb4f0 fix: detect circular references in GetDescendants (#113672)
* fix: detect circular references in GetDescendants

* chore: use map[string]bool and instantiate at the beginning of the function
2025-11-11 12:46:35 +01:00
Tom Ratcliffe
f34f7579a2 Stars: Update star toolbar button to include name only in the label (#113678) 2025-11-11 09:42:27 +00:00
Alexa Vargas
62eef87208 Dashboard Library: Integrate community dashboards on Suggested Dashboards Flow (#112808)
* Extend interpolate endpoint to support community dashboard json interpolation
Added unit tests

* Implement Frontend Side
- Show tabs
- Fetch Community dashboads
- Use DashboardCard component
- Search grafana dashboard in the community tab
- Make Tabs and pagination sticky
- Adjust titles to be scoped by datasource name/type
- Add skeleton loading for community tabs and pagination
- Add dashboard details tooltip
- Bring old datasource-provisioned box back and rely on new feature toggle for community dashboards
- update i18n
- update swagger
---------

Co-authored-by: Juan Cabanas <juan.cabanas@grafana.com>
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2025-11-11 10:40:39 +01:00
Gábor Farkas
34e85113d2 datasources: apiserver: removed unnecessary code (#113384)
* datasources: apiserver: removed unnecessary code

* workspace fixes
2025-11-11 09:25:22 +01:00
Stephanie Hingtgen
2d4e432239 Dashboard provisioning: Add support for v2 schema (#113620) 2025-11-10 17:45:37 -06:00
Adam Simpson
fcc243886c chore: change ownership of disableSSEDataplane and sseGroupByDatasource (#113640) 2025-11-10 20:50:29 +00:00
Brendan O'Handley
43de885aad Feature toggles: remove unused recordedQueriesMulti feature toggle (#113616)
remove recordedQueriesMulti feature toggle

Co-authored-by: Tania B. <10127682+undef1nd@users.noreply.github.com>
2025-11-10 14:31:43 -06:00
Luminessa Starlight
b6bd31a4aa Slider: Add support for decimal values (#113473)
* UI: Fix Slider component to handle decimal inputs correctly

* format code and run eslint fix

* fix Slider to have:
- "single" source of truth for state
- state synchronization for controlled values
- clamp values to step
- disallow decimal values in input when min+step are integers
- tests for the new functionality
- design decision included in docs
- behavior notes in docs

* allow non-numeric characters all the time
always parse decimal numbers, stripping non-numerics
integer coercion is implicitly handled in clamping

---------

Co-authored-by: Harshada Gawas <harshadagawas95@gmail.com>
2025-11-10 14:41:39 -05:00
Moustafa Baiou
dd0a2d4cff Alerting: Add validation to check updates on rule groups (#113669)
This moves some of the validation logic for rule groups from the legacy storage layer to the validator.
2025-11-10 14:40:35 -05:00
Jean-Philippe Quéméner
142340e0ff refactor(folders): use set to detect circular references (#113665) 2025-11-10 20:37:02 +01:00
Sam Jewell
c49caead25 [--Dashboard-- data source] AdHoc filtering: Remove feature toggle (#113674)
* Remove dashboardDsAdHocFiltering feature toggle

The dashboardDsAdHocFiltering feature toggle has been enabled by default
and is now in General Availability stage. This commit removes the feature
toggle and makes the AdHoc filtering functionality for the dashboard
datasource permanently available.

Changes:
- Remove feature toggle from registry.go
- Regenerate feature toggle files
- Remove conditional checks in frontend code
- Update tests to reflect permanent enablement
- Always show AdHoc Filters toggle in dashboard query editor
- Always enable dashboard datasource in DataSourcePicker for variables

* Remove unused imports

* Fix Prettier formatting issues
2025-11-10 17:17:49 +00:00
ismail simsek
ac9259d6a4 Chore: Update pyroscope error sources logging (#113175)
* remove loggers

* more downstream errors

* more downstream errors 2

* uber nit
2025-11-10 16:47:29 +00:00
Moustafa Baiou
70e30df6ce Alerting: Fix support for converted Prometheus rules in app-platform apis (#113648)
* Alerting: Fix support for converted Prometheus rules in app-platform apis

Retrieving converted Prometheus retrieval rules was not supported in the app-platform apis and was throwing a 500 error due to the provenance not being handled properly.

Also adds a test to cover converted Prometheus rules when getting rules.

Closes https://github.com/grafana/alerting-squad/issues/1200

* add test to confirm provenance compatibility
2025-11-10 16:43:38 +00:00
Paul Marbach
fb20d7311e Chore: Change ownership of some Dataviz feature flags to Datapro (#113528)
* Chore: Change ownership of some Dataviz feature flags

* retain ownership of csv drag n drop
2025-11-10 15:26:38 +00:00
Jesse David Peterson
243f1fc64b Timeseries: Change mouse cursors to indicate active x-axis and y-axis zoom interactions (#113465)
* feat(panel-zoom): change mouse cursor when zooming x-axis or y-axis

* test(panel-zoom): browser test mouse cursor change interactions

* fix(mouse-cursor-styles): no need for important
2025-11-10 11:26:00 -04:00
Bruno
f094a9d5e5 Caching: Add flag to disable clean cache button (#113598)
Caching: add flag to disable clean cache button
2025-11-10 12:08:56 -03:00
Gábor Farkas
2dc48c0b98 datasources: querier: add mode-info (#113592)
* datasources: querier: add mode-info

* fixed unit test
2025-11-10 15:48:59 +01:00
Irene Rodríguez
704c6a47e3 Docs: Add Tempo to the list of unsupported data sources (#113667) 2025-11-10 14:42:44 +00:00
Andres Martinez Gotor
1a2beae38a Preinstall: Replace auto update feature flag with a permanent one (#113586) 2025-11-10 15:06:30 +01:00
Tom Ratcliffe
9a542489a7 APIs: Fix pre-processing of getApiResources & update godoc for teams endpoints (#113536) 2025-11-10 12:59:40 +00:00
Roberto Jiménez Sánchez
746efb4c56 Provisioning: Include ref field in DELETE endpoint response for branch operations (#113615)
Fix: Include ref field in DELETE endpoint response for branch operations

When deleting a dashboard file via DELETE endpoint with a ref query parameter
(for branch operations), the response was missing the ref field. This caused
the frontend branch workflow success handler to fail silently.

The issue was an inverted boolean condition in the Delete method. The code
was setting file.Ref = opts.Ref when shouldUpdateGrafanaDB returned true
(main branch operations), but it should have been setting it when false
(branch operations), since we read the file with an empty ref.

Fixed by inverting the condition from:
  if r.shouldUpdateGrafanaDB(opts, nil)
to:
  if !r.shouldUpdateGrafanaDB(opts, nil)

This ensures the ref field is properly included in the ResourceWrapper
response for branch operations.
2025-11-10 13:34:46 +01:00
Ezequiel Victorero
32db7e176d ShortURL: Fix wrong creation timestamp conversion (#113646) 2025-11-10 09:14:51 -03:00
Mustafa Sencer Özcan
8ce9098765 test: improve folder integration test performance (#113518) 2025-11-10 13:05:05 +01:00
Alex Khomenko
a7ace2dcdd API clients: Use open_snapshots for possibleOpenAPISpecs (#113587)
* API clients: Use open_snapshots for possibleOpenAPISpecs

* Tweak logic to throw error if we can't load openapi specs

---------

Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
2025-11-10 11:43:00 +00:00
Ashley Harrison
51c18b57a2 Chore: some any fixes (#113290)
* fix some anys in select styles

* remove anys from ModalsContext

* improve some types

* improve ArrayDataFrame

* restore behavior

* use unknown for Parser type
2025-11-10 10:57:33 +00:00
Ezequiel Victorero
cd91f858e6 ShortURL: Graduate api v1alpha1 to v1beta1 (#113597) 2025-11-10 07:29:33 -03:00
Ashley Harrison
834ff1be3c MultiCombobox: Fix a11y and enable storybook a11y tests (#113411)
fix multicombobox a11y and enable storybook a11y tests
2025-11-10 09:47:01 +00:00
Günther Grill
478ae025a3 docs: fix typo (#111821) 2025-11-10 10:00:22 +01:00
Bradley
5806196797 Remove 'oss' label from Query Caching documentation (#113656) 2025-11-10 10:00:05 +01:00
Ezequiel Victorero
24e4e0946d Dashboard: Improve search error response (#113617)
* Dashboard: Improve search error response

* improve errors
2025-11-08 12:58:51 +01:00
grafana-pr-automation[bot]
aa75cc5bbe I18n: Download translations from Crowdin (#113568)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-08 00:38:38 +00:00
Jacob Valdez
cb43dea319 docs: clarifying info on what's new lading page (#113562) 2025-11-07 16:10:39 -06:00
Jesse David Peterson
f3843fc67a Linter: Custom eslint rule to prevent in-repo plugins from reaching into neighbouring plugin code (#112248)
* feat(linter-rule): prevent cross plugin relative path imports

* docs(readme): document new grafana/no-plugin-external-import-paths rule

* chore(test): add an NPM script to run linter rule tests

* test(linter-rule): prevent cross plugin relative path imports

* docs(eslint-config): add a commented out example of new rule usage
2025-11-07 21:18:50 +00:00
beejeebus
0e9fe9dc40 Register external datasource plugins on startup
Current code only registers core datasource k8s api groups.

Add external plugins.

Companion grafana-enterprise PR:

https://github.com/grafana/grafana-enterprise/pull/10125
2025-11-07 14:42:41 -05:00
Paul Marbach
90ddd922ad Chore: Cleanup panelMonitoring feature flag (#113530) 2025-11-07 14:04:42 -05:00
Moustafa Baiou
1e1adafeec Alerting: Add admission hooks for rules app (#113429)
This adds validating admission hooks to enforce the requirements on AlertRules and RecordingRules that are currently enforced through the provisioning service and storage mechanisms in preparation of a consistent validation in both legacy storage and unified storage. It also adds a mutating admission hook to the app to ensure that folder annotations and folder labels are kept in sync so we can perform label-selector lists.
2025-11-07 12:01:16 -05:00
Paul Marbach
ecc9e9257e E2E: Prevent issue where certain times can cause test failures (#110196)
* E2E: Prevent issue where certain times can cause test failures

* re-enable first test
2025-11-07 11:34:11 -05:00
Paul Marbach
4fee8b34ad Suggestions: Refactor getPanelDataSummary into its own method (#113251)
* Suggestions: Refactor getPanelDataSummary into its own method

* restore order

* update some imports

* update codeowners
2025-11-07 11:33:13 -05:00
Roberto Jiménez Sánchez
02464c19b8 Provisioning: Add validation for Job specifications (#113590)
* Validate Job Specs

* Add comprehensive unit test coverage for job validator

- Added 8 new test cases to improve coverage from 88.9% to ~100%
- Tests for migrate action without options
- Tests for delete/move actions with resources (missing kind)
- Tests for move action with valid resources
- Tests for move/delete with both paths and resources
- Tests for move action with invalid source paths
- Tests for push action with valid paths

Now covers all validation paths including resource validation and
edge cases for all job action types.

* Add integration tests for job validation

Added comprehensive integration tests that verify the job validator properly
rejects invalid job specifications via the API:

- Test job without action (required field)
- Test job with invalid action
- Test pull job without pull options
- Test push job without push options
- Test push job with invalid branch name (consecutive dots)
- Test push job with path traversal attempt
- Test delete job without paths or resources
- Test delete job with invalid path (path traversal)
- Test move job without target path
- Test move job without paths or resources
- Test move job with invalid target path (path traversal)
- Test migrate job without migrate options
- Test valid pull job to ensure validation doesn't block legitimate requests

These tests verify that the admission controller properly validates job specs
before they are persisted, ensuring security (path traversal prevention) and
data integrity (required fields/options).

* Remove valid job test case from integration tests

Removed the positive test case as it's not necessary for validation testing.
The integration tests now focus solely on verifying that invalid job specs
are properly rejected by the admission controller.

* Fix movejob_test to expect validation error at creation time

Updated the 'move without target path' test to expect the job creation
to fail with a validation error, rather than expecting the job to be
created and then fail during execution.

This aligns with the new job validation logic which rejects invalid
job specs at the API admission control level (422 Unprocessable Entity)
before they can be persisted.

This is better behavior as it prevents invalid jobs from being created
in the first place, rather than allowing them to be created and then
failing during execution.

* Simplify action validation using slices.Contains

Replaced manual loop with slices.Contains for cleaner, more idiomatic Go code.
This reduces code complexity while maintaining the same validation logic.

- Added import for 'slices' package
- Replaced 8-line loop with 1-line slices.Contains call
- All unit tests pass

* Refactor job action validation in ValidateJob function

Removed the hardcoded valid actions array and simplified the validation logic. The function now directly appends an error for invalid actions, improving code clarity and maintainability. This change aligns with the recent updates to job validation, ensuring that invalid job specifications are properly handled.
2025-11-07 16:31:50 +00:00
Sven Grossmann
62129bb91f Search: Change copy to Search with Grafana Assistant (#113609) 2025-11-07 16:27:19 +00:00
Paul Marbach
3d8da61569 E2E: Improve ad-hoc filtering test (#113558)
* E2E: Improve ad-hoc filtering test

* remove unused import

* fix some table e2es after making getCell sync
2025-11-07 11:06:33 -05:00
Misi
d7d296df8e Fix: Return auth labels from /api/users/lookup (#113584)
* wip

* Return auth labels from /api/users/lookup

* Rename

* Address feedback

* Add more tests, fix tests

* Cleanup
2025-11-07 16:51:41 +01:00
Jean-Philippe Quéméner
305ed25896 fix(folders): add a circuit breaker to prevent infinite loops (#113596) 2025-11-07 14:32:17 +00:00
Yunwen Zheng
8b6cc211e9 Git Sync: Allow user disable push to configured branch (#113564)
* Git Sync: Allow user disable push to configured branch
2025-11-07 09:24:34 -05:00
Jean-Philippe Quéméner
1ca95cda4a fix(folders): prevent circular dependencies (#113595) 2025-11-07 14:19:55 +00:00
Alexa Vargas
e5ed003fb2 Dashboard Library: Add new "suggestedDashboards" feature toggle (#113591) 2025-11-07 13:38:59 +00:00
Jo
176b0f8b48 IAM: Refactor user org hooks to use MutateRequest API (#113392)
* update with mutation hooks

* add missing delete mutation
2025-11-07 14:36:53 +01:00
Juan Cabanas
33390a1483 LibraryPanels: Improve getAllLibraryElements filter performance (#113544) 2025-11-07 10:16:41 -03:00
Gabriel MABILLE
e90759e5af grafana-iam: enable dual writing for resource permissions (#112793)
* `grafana-iam`: enable dual writing for resource permissions

Co-authored-by: jguer <joao.guerreiro@grafana.com>

* copy paste mistake

* Reduce complexity

* nits to make the code easy to review

* Forgot to check the error

---------

Co-authored-by: jguer <joao.guerreiro@grafana.com>
2025-11-07 13:50:40 +01:00
Alex Khomenko
8cb5f5646a Provisioning: Fix miscellaneous issues with setting and displaying sync status (#113529)
* Provisioning: Preserve in progress job data

* Refactor code and cover more situations

* Fix linting

* Fix issue with remove path operation for started time

* Cleanup

* prettier

---------

Co-authored-by: Roberto Jimenez Sanchez <roberto.jimenez@grafana.com>
2025-11-07 12:27:25 +01:00
Seunghun Shin
c784de6ef5 Alerting: Add compressed periodic save for alert instances (#111803)
What is this feature?

This PR implements compressed periodic save for alert state storage, providing a more efficient alternative to regular periodic saves by grouping alert instances by rule UID and storing them using protobuf and snappy compression. When enabled via the state_compressed_periodic_save_enabled configuration option, the system groups alert instances by their alert rule, compresses each group using protobuf serialization and snappy compression, and processes all rules within a single database transaction at specified intervals instead of syncing after every alert evaluation cycle.

Why do we need this feature?

During discussions in PR #111357, we identified the need for a compressed approach to periodic alert state storage that could further reduce database load beyond the jitter mechanism. While the jitter feature distributes database operations over time, this compressed periodic save approach reduces the frequency of database operations by batching alert state updates at explicitly declared intervals rather than syncing after every alert evaluation cycle.
This approach provides several key benefits:

- Reduced Database Frequency: Instead of frequent sync operations tied to alert evaluation cycles, updates occur only at configured intervals
- Storage Efficiency: Rule-based grouping with protobuf and snappy compression significantly reduces storage requirements

The compressed periodic save complements the existing jitter mechanism by providing an alternative strategy focused on reducing overall database interaction frequency while maintaining data integrity through compression and batching.

Who is this feature for?

- Platform/Infrastructure teams managing large-scale Grafana deployments with high alert cardinality
- Organizations looking to optimize storage costs and database performance for alerting workloads
- Production environments with 1000+ alert rules where database write frequency is a concern
2025-11-07 11:51:48 +01:00
Jean-Philippe Quéméner
589435b7c2 fix(unified-storage): resource server tracing (#113582) 2025-11-07 11:51:32 +01:00
Gilles De Mey
b4d2d1eaf5 Alerting: Fix width of the code editor for Alertmanager configurations (#113541)
fix width of the code editor for Alertmanager configurations
2025-11-07 11:15:18 +01:00
Tobias Skarhed
36e28963d3 Scopes: Script for setting up gdev scope resources (#113448)
* Script for setting up gdev scope objects

* Script for setting up gdev scope objects

* Format

* Update codeowners

* Do a feature flag check

* Formatting

* Remove FF check, because creation is explicit anyways

* Formatting
2025-11-07 10:56:16 +01:00
Ida Štambuk
942b847952 CloudWatch: Add anomaly command to language support, add documentation for anomaly queries (#113311) 2025-11-07 09:54:24 +00:00
Elliot Kirk
488423abfc Icons: add hand pointer icon (#113255)
add hand pointer icon
2025-11-07 09:53:42 +00:00
Roberto Jiménez Sánchez
f75c853b90 Provisioning: Update slog-gokit to v0.1.5 to fix data race (#113455)
* Use fork of slog-gokit to fix data race

Replace github.com/tjhop/slog-gokit with fork that includes fix for data race in handler.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update workspace

* Bump github.com/tjhop/slog-gokit to v0.1.5

* Update go.sum

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-07 09:47:53 +00:00
Ida Štambuk
4bbbd19049 CloudWatch: Make match exact toggle false by default (#113314) 2025-11-07 10:30:24 +01:00
Nathan Vērzemnieks
f4b23253b1 DataSources: Update SDKs in support of auth service (#112101)
* DataSources: Update SDKs for auth service

* Fix deprecated methods & types for new arrow-go version
2025-11-07 10:15:27 +01:00
Erik Sundell
06e1c83276 Chore: Bump plugin-e2e (#113578)
* bump plugin-e2e

* use plugin-e2e selector

* update lock file
2025-11-07 10:11:05 +01:00
Moustafa Baiou
54041155bd fix import path for annotation app 2025-11-06 19:33:12 -05:00
Adam Yeats
b9b1028b91 Elasticsearch: Handle keyed filters buckets and emit frames (#113478) 2025-11-06 17:20:08 -06:00
Taygun Bulmus
f468597ad8 Document rule_version_record_limit setting (#113511)
* Document rule_version_record_limit setting

Add documentation for rule_version_record_limit configuration.

* Update docs/sources/setup-grafana/configure-grafana/_index.md

Co-authored-by: Jacob Valdez <jacob.valdez@grafana.com>

* Update docs/sources/setup-grafana/configure-grafana/_index.md

* run prettier

---------

Co-authored-by: Jacob Valdez <jacob.valdez@grafana.com>
2025-11-06 15:10:25 -06:00
Kevin Yu
69060f5437 CloudWatch Logs: Limit CloudWatch logs queries to use logGroupIdentifiers only for monitoring accounts (#113137)
* Set the log group name when executing log queries from the frontend

* Add helper for a data source instance to check if its a monitoring account

* Execute log queries with log group identifiers only for monitoring account queries

* fix cloudwatch datasource.ts tests

* remove unneeded check
2025-11-06 12:19:39 -08:00
Leon Sorokin
2ac4d0a13e Chore: Remove Intl.DurationFormat polyfill from runtime (#113475) 2025-11-06 20:11:53 +00:00
Matias Chomicki
e953e76006 Log Details: Dedicated context provider + improvements (#113409)
* LogDetailsContext: create component

* LogListContext: extract details out of context

* Refactor components to use new context provider

* More component updates

* Update currentLog implementation

* Use new context provider

* LogLineDetails: prevent cascade of listeners

* LogDetailsContext: sync currentLog with changes

* LogLine: use icon status to show the current log

* LogLineDetails: first tab is the last open log line

* LogLineDetailsLog: respect font size

* Update tests

* Update tests

* LogList: add integration test

* LogLine: use level to mark the current log

* Chore: only check uids, no need for references

* Fix duplicated hook usage

* chore: overflow auto

* LogList: consider field selector width

* Revert "LogLine: use level to mark the current log"

This reverts commit 2d5d54d9a7.

* LogLine: darken details displayed, font weight bold current

* LogLineMenu: icon when current log

* Differenciate contrast from light and dark themes

* Use angle-right for the active icon
2025-11-06 20:21:51 +01:00
Will Assis
c9e4c26c11 unified-storage: add more list pagination tests (#113543)
* unified-storage: add more list pagination tests
2025-11-06 13:36:02 -05:00
Serge Zaitsev
95ea758475 Chore: Start annotations app (#113018)
* annotation legacy store with api server, read only

* Add a feature flag for annotations app

* implement list filters

* annotations are not addressable by ID for read operations

* fix registry apps test

* add ownership for an app

* disable linter

* typo, of course

* fix go workspace

* update workspace

* copy annotation app in dockerfile

* update workspace

---------

Co-authored-by: Tania B. <10127682+undef1nd@users.noreply.github.com>
2025-11-06 19:22:20 +01:00
Rafael Bortolon Paulovic
0931423259 fix: use step output instead of !cancelled() in condition (#113533)
* fix: use step output instead of !cancelled() in condition

We are uploading profile files without need otherwise

* fix: try using !cancelled() and output

Otherwise, step isn't triggered due to failure of the previous one
2025-11-06 19:17:05 +01:00
Rafael Bortolon Paulovic
75afc64dd0 fix: disable mode4,5 tests with library element table (#113539) 2025-11-06 17:49:44 +00:00
Ihor Yeromin
67ca3c231a Test: Fix array element removal in adhoc filter e2e test (#113514)
fix(test): adhoc-filter-from-panel
2025-11-06 18:46:23 +01:00
Adela Almasan
bcc2057456 Canvas: Fix Field image source when non-string field is used (#113534) 2025-11-06 11:01:25 -06:00
Konrad Lalik
720dfb65be Alerting: Alerts page performance improvements (#113391)
* Add IntersectionObserver to render rule viz panel only when visible

* Move data transformations to dataTransform file

* Add tests for data transform

* Use a new time series transformation algorithm

* Reduce the number of time series data conversion

* Memoize small components

* Update tests

* Remove some comments

* Use Box component for styling. Remove unnecessary effect dependency
2025-11-06 17:39:27 +01:00
Mihai Turdean
7df3582237 Authz: Implement Query operation for Zanzana with folder parent retrieval (#113483) 2025-11-06 09:06:42 -07:00
Irene Rodríguez
2e0cf9bb61 Update grafanacli-workflows.md with command link (#113527)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-06 17:02:50 +01:00
Yunwen Zheng
0ed742cad7 FilesView: Git sync repository -> Files list remove size column, added unit tests (#113425)
* FilesView: remove size column, added unit tests
2025-11-06 15:44:46 +00:00
Konrad Lalik
6746207c36 Alerting: Fix url rule form parsing (#113513)
Fix alertRuleFormSchema to properly handle query model objects
2025-11-06 16:43:42 +01:00
Alex Khomenko
4430699f2d Provisioning: Update recent jobs (#113509)
* Provisioning: refactor recent jobs

* Re-render only on initial load

* i18n

* Refactor init loading

* Update spinner

* upd
2025-11-06 17:35:23 +02:00
Gábor Farkas
acb0320796 datasources: apiserver: do not enable extra methods by default (#113395) 2025-11-06 15:34:32 +01:00
Ryan McKinley
95ffd1a55a LibraryPanel: Cleanup service calls (#113277)
* cleanup

* library panel via search

* test cleanup

* merge main

* add FindDashboards mock

* no matching dashbaords should return empty

* do not alllow name and libraryPanel query
2025-11-06 15:31:02 +01:00
linoman
ca5d898120 SCIM: Upgrade the User.UID field to allow for the new scim- prefix (#113500)
Upgrade the User.UID field to allow for the new scim- prefix
2025-11-06 15:26:18 +01:00
Roberto Jiménez Sánchez
e3d73ddb81 Bump nanogit version with delta resolution fixes (#113516)
* Bump nanogit version with delta fixes

* Update workspace
2025-11-06 15:12:00 +01:00
Rafael Bortolon Paulovic
e69f3c55f7 fix: delete folders using postorder (#113493)
* fix: delete folders using postorder

* chore: use helper function and do not add method to Folder store

- addresses other review comments fixing log messages and cleans up the unit tests

* chore: run library element tests on modes 2,3,5 only

* chore: adjust to folder.SortByPostorder(folders []*Folder)

* chore: run library panels tests in mode 2,3,5 only

* chore: run tests in all modes and increase timeout

- adjusting the modes and tweaking configs will be done separately
2025-11-06 15:04:34 +01:00
Tom Ratcliffe
fbf1cdd0ce Folders: Remove unneeded reducer (#113506) 2025-11-06 13:46:41 +00:00
Haris Rozajac
859865351d Dashboard Export: Don't pass already templateized ds var to ds service (#113319) 2025-11-06 06:42:21 -07:00
Rafael Bortolon Paulovic
7b3145a3c1 fix: delete subfolder dangling panels (#113419)
* fix: delete subfolder dangling panels and error if used

* chore: add observation about library panel DeleteInFolders

- logs folders UIDs on DeleteInFolders error

* chore: add integration test for blocking library panel deletion and handling dangling library panels

* chore: fix integration test on mode 4 and 5
2025-11-06 13:56:32 +01:00
Jean-Philippe Quéméner
fd14d4a5ed feat(unified-storage): add tracing to dual writer and legacy storage (#113504)
Co-authored-by: Mustafa Sencer Özcan <32759850+mustafasencer@users.noreply.github.com>
2025-11-06 11:42:46 +00:00
Leon Sorokin
efd6b250d9 Chore: Remove Chance.js dependency from runtime code (#113457) 2025-11-06 05:08:31 -06:00
renovate-sh-app[bot]
6bf5e3303e chore(deps): pin dependencies (#113494)
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-11-06 11:04:40 +00:00
Sergej-Vlasov
71d511abd8 VariableControls: Adjust variable selection in edit mode (#113408)
* adjust variable selection logic

* clean up

* adjust attribute used
2025-11-06 10:27:26 +00:00
Esteban Beltran
1b278cc87e Plugins: cleanup feature toggle pluginsFrontendSandbox (#113439)
* clean feature pluginsFrontendSandbox

Co-authored-by: Andres Martinez Gotor <andres.martinez@grafana.com>
2025-11-06 11:06:53 +01:00
Mustafa Sencer Özcan
51c31e00a4 fix: dual writer log object formatting (#113492)
fix: logging
2025-11-06 11:03:28 +01:00
Gabriel MABILLE
ff53276870 grafana-iam: Instantiate ExternalGroupMappingStorage as a NoopStorage (#113499)
Co-authored-by: jguer <joao.guerreiro@grafana.com>
2025-11-06 11:00:37 +01:00
Tom Ratcliffe
b739e4e802 APIs: Include enterprise spec check (#113470) 2025-11-06 08:31:24 +00:00
Rafael Bortolon Paulovic
7281bb7069 fix: background delete on create failure after ctx cancellation (#113442)
* fix: background delete on create failure after ctx cancellation

* fix: address comments

* chore: remove tests using mock
2025-11-06 09:21:11 +01:00
Andres Martinez Gotor
35ac04bad3 Chore: Fix two minor bugs related to favorite datasources (#113444) 2025-11-06 09:18:11 +01:00
grafana-pr-automation[bot]
2411e78cd1 I18n: Download translations from Crowdin (#113428)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-06 00:39:34 +00:00
grafana-delivery-bot[bot]
7236ba5fce Release: Bump version to 12.4.0-pre (#113480)
bump version 12.4.0-pre

Co-authored-by: grafana-delivery-bot[bot] <grafana-delivery-bot[bot]@users.noreply.github.com>
2025-11-05 23:54:05 +01:00
colin-stuart
612a0d1c7f Revert "SCIM: Update UIDs for provisioned users (#113423)" (#113474)
This reverts commit daa28773d6.
2025-11-05 15:49:05 -06:00
Misi
06373ae47b IAM: Add ExternalGroupMapping kind for TeamSync (#113052)
* wip

* wip

* Add authorizer -> VERIFY it's working correctly

* Update openapi definitions

* Authorizer wip

* regen apis

* Increase timeout of pg int tests to 20m

* Revert "Increase timeout of pg int tests to 20m"

This reverts commit 8c20568217.

* Fix NewTestStore when Truncate is enabled
2025-11-05 18:02:34 +01:00
linoman
daa28773d6 SCIM: Update UIDs for provisioned users (#113423)
* Update UIDs for provisioned users

* change the prefix from scim_ to scim-

* Update tests
2025-11-05 17:52:23 +01:00
Ivana Huckova
1830e2ce9d CommanPalette: Add Assistant integration for empty state (#112601)
* CommanPalette: Add Assistant integration for empty state

* Update assistant package and use new onClick pop

* i18n

* Update public/locales/en-US/grafana.json

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>

* Update public/app/features/commandPalette/CommandPalette.tsx

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>

* Update test

---------

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2025-11-05 16:13:47 +01:00
Sven Grossmann
9a8d17a209 Toolbar: Move ExtensionSidebar next to toolbar (#113404)
* Toolbar: Move ExtensionSidebar next to toolbar

* Toolbar: Simplify AppChrome

* simplify height calculation

* Fix scrollbar positon

* remove irrelevant comment

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>

---------

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
2025-11-05 16:05:20 +01:00
Galen Kistler
8149f586b3 Annotations: Multi-lane annotations rendering (lane per frame) (#111559)
* feat: support multi-lane annotations panel option

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
2025-11-05 09:00:28 -06:00
Andre Pereira
c7dd159db1 Trace View: Span tree style updates (#113095)
* Style tweaks of span bar row

* More tweaks

* More tweaks to span style

* 2px width for the service color border

* Refactor SpanBarRow to function component

* Refactor SpanDetailRow to function component

* Refactor SpanTreeOffset to function component

* eslint ignore

* Service name font weight to 500

* Don't render the last indentGuide if the span doens't have children

* Fix tests
2025-11-05 14:49:47 +00:00
Yunwen Zheng
a17d5a75fe FolderActionsButton: Provisioned folder should hide "Manage Permission" folder action (#113367)
* FolderActionsButton: Hide Manage permission option when folder is git provisioned
2025-11-05 08:59:26 -05:00
Yunwen Zheng
2ccb7f618d ConfigFormGithubCollapse: Hide github features section if nothing is available (#113410)
ConfigFormGithubCollapse: Hide github features section if nothing is available. Added unit tests
2025-11-05 08:59:07 -05:00
Mustafa Sencer Özcan
b97fb638ad fix: only validate allowed descendants for folder deletion (#113440) 2025-11-05 14:04:43 +01:00
Bogdan Matei
d9d227ec4d Dashboard: Hide add variable button in edit views (#113438) 2025-11-05 14:38:31 +02:00
Josh Hunt
93f1c24b82 FS: Update devenv docker images with renovate (#112943)
* FS: Use renovate to update devenv docker images

* add gha check to test tiltfile

* setup nodejs

* create empty config files
2025-11-05 12:24:45 +00:00
Tom Ratcliffe
7c2f38641a Chore: Add gitattributes config for generated files (#113402)
* Add gitattributes config for generated files

* Add snapshots and manifest files
2025-11-05 11:24:58 +00:00
Darren Janeczek
6376484b13 Card: apply grid fractional unit to description instead of heading (#113424) 2025-11-05 10:18:14 +00:00
Alexander Zobnin
d1334a6dff Zanzana: Log token namespace in case of error (#113437) 2025-11-05 11:13:08 +01:00
Alexander Zobnin
505e025d18 Zanzana: Fix namespace in remote client (#113433) 2025-11-05 11:12:41 +01:00
Roberto Jiménez Sánchez
571e5c2e3c Provisioning: Fix data race in job progress and leasing (#113157)
* Fix data race in provisioning job execution

* Fix TODO

* Update pkg/registry/apis/provisioning/jobs/driver.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update pkg/registry/apis/provisioning/jobs/driver.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix unlocking issue on panic

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-05 10:07:21 +00:00
Oscar Kilhed
4ceb7eec52 Dynamic Dashboards: Change dragging to using grid items instead of viz panels. (#113343)
* Preserve grid item size and repeat options when dragging between grids

* push gridItem usage all the way

* do console.warn and log to faro instead
2025-11-05 10:47:19 +01:00
Andres Martinez Gotor
2e507d5042 Advisor: Add mock checks to standalone setup (#113406) 2025-11-05 10:33:45 +01:00
Lauren
1bd5b29963 Alerting: Bug fix for regex matching in Alerts page (#113400)
* Alerting: bug fix for regex matching in Alerts page

* remove test
2025-11-05 09:24:48 +00:00
Jean-Philippe Quéméner
98ec655f33 fix: add resource type to not empty log (#113432) 2025-11-05 10:12:44 +01:00
Lauren
1d38cf7f0d Alerting: Add empty state to triage page WIP (#113390)
* add empty state to triage page WIP

* tidy up and refactor

* generate translations

* resolve PR comments

* generate translations

* resolve PR comment part 2
2025-11-05 08:46:41 +00:00
Anna Urbiztondo
891ed6c4b7 Docs: Git Sync permissions (#113405)
* Permissions

* Prettier

* Edit
2025-11-05 09:38:48 +01:00
Jesse David Peterson
e067b1de98 FeatureToggle: Create experimental timeRangePan flag (#112988)
feat(toggle): new experimental timeRangePan feature toggle
2025-11-04 21:39:46 -04:00
Stephanie Hingtgen
4cecab3185 Dashboards: add isPublic to dto and remove public endpoint call (#113334)
---------

Co-authored-by: Matheus Macabu <macabu.matheus@gmail.com>
2025-11-04 16:57:05 -06:00
Paul Marbach
867e8bb98f StatusHistory: Add e2e suite to confirm standard cases (#113358)
* StatusHistory: Add e2e suite to confirm standard cases

* update dev dashbord tests

* update CODEOWNERS
2025-11-04 16:21:30 -04:00
Paul Marbach
5abc0d0d91 Coverage: Add new exclusions for team coverage report (#112997) 2025-11-04 15:35:56 -04:00
Ashley Harrison
3972046695 Chore: Improve step name to differentiate between light/dark themes (#113407)
improve step name to differentiate between light/dark themes
2025-11-04 17:38:42 +00:00
Pepe Cano
ffa5e41bec docs(alerting): add note about invalid numeric identifiers in templates (#113269) 2025-11-04 17:56:41 +01:00
Alex Spencer
84bd99f1c1 SQL Expressions: Update to feature badges (#112795)
* chore: update badge + update logic

* chore: update comment
2025-11-04 08:18:15 -08:00
Todd Treece
de512fb02e Plugins: Fix API sync error handling (#113240) 2025-11-04 10:47:58 -05:00
Alexander Zobnin
3fca7cf952 Zanzana: Refactor basic role write APIs (#113397)
* Zanzana: Refactor basic role write APIs

* Fix updates

* fix linter
2025-11-04 16:29:56 +01:00
Serge Zaitsev
8f8ed2bbec Chore: Change ownership for annotations (#112791)
change ownership for annotations
2025-11-04 13:30:47 +00:00
Josh Hunt
69e4b4667b Backend: Add logs and metric for when host is redirected (#112373) 2025-11-04 13:28:33 +00:00
Ihor Yeromin
0c016e210a Linter: Rollback suppressed errors (#113396)
chore(linter): rollback suppressed errors
2025-11-04 13:15:54 +01:00
Jo
769787ea40 IAM: Improve team binding hooks error handling and validation (#113393)
small team hook fixes
2025-11-04 11:54:38 +01:00
Levente Balogh
b4312a220f Dashboard Controls: Adjust spacing for annotation controls (#113381)
* fix: spacing issues with annotation control switches inside the dashboad controls

* refactor: remove unnecessary css class
2025-11-04 11:20:10 +01:00
Lauren
c75a451b13 Alerting: Add counts for firing and pending alert rules (#113309)
* add counts for firing and pending alert rules

* resolve Pr comments part 1

* resolve PR comments part 2

* resolve PR comments part 3
2025-11-04 10:17:07 +00:00
dependabot[bot]
df816d00e4 deps(actions): bump actions/upload-artifact from 4 to 5 (#113025)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 10:03:56 +00:00
Rafael Bortolon Paulovic
782c819727 Get traces and profiles of nocgo sqlite integration tests as GH artifact (#113034) 2025-11-04 10:36:20 +01:00
Gábor Farkas
6fc82629d4 codeowners: updated ownership of datasources code (#113387) 2025-11-04 09:29:57 +00:00
Sonia Aguilar
fc34b18122 Alerting: Fix data source recording rules editor (#113363)
fix data source recording rules editor
2025-11-04 09:01:26 +01:00
Gábor Farkas
ac162e203b datasources: querier: do not forward these headers (#113383) 2025-11-04 09:01:16 +01:00
Georges Chaudy
ddeb970b4d unistore: replace CDK backend with KV store backend (again) (#113184)
* Reapply "unistore: replace CDK backend with KV store backend"" (#113132)

This reverts commit 7127b2538c.

* enable cluster scope
2025-11-04 00:33:36 +00:00
Charandas
a06905e2d3 fix: switch to test-containers from grafana/e2e for API server tests (#113256) 2025-11-03 16:10:32 -08:00
Georges Chaudy
07bf7b2ae1 kvstore: add cluster-scoped resource support (#113183)
kvstore add experimental clusterscope resource
2025-11-03 15:53:59 -08:00
Austin Pond
0649635639 Apps: call app.Runner().Run() in a goroutine in the post-start hook (#113371)
Run the app runner in a goroutine in the post-start hook, as the '/readyz' endpoint for the API server waits for a non-nil error response from the post-start hook to mark it as ready.
2025-11-03 17:05:20 -05:00
Ezequiel Victorero
126e6dbcd8 ShortURL: Set same generateName for old and new API endpoints (#113368) 2025-11-03 17:50:02 -03:00
Stephanie Hingtgen
f56fec2c10 Short URLs: Skip flaky test for now (#113364) 2025-11-03 17:19:12 +00:00
Alexa Vargas
ca5cf5fe7c Dashboard datasource: Fix library panels not tracked in mixed queries (#112959)
* Dashboard datasource: Fix library panels not tracked in mixed queries

* Remove unnecessary code and add unit tests

* Add relevant comment
2025-11-03 18:01:29 +01:00
Oscar Kilhed
06fb3fef43 Dynamic Dashboards: Change look and copy of add variable control to make it more obvious what it does (#113361)
Change look+copy of add variable control
2025-11-03 18:00:25 +01:00
Moustafa Baiou
414524e799 Alerting: Add index for rule_group_index in alert_rule table
This is a slight optimization for the list queries which sort by these fields.
2025-11-03 11:36:18 -05:00
Moustafa Baiou
acf0da9b80 Make the ordering of test on case-sensitivity consistent across databases and charsets 2025-11-03 11:36:18 -05:00
Moustafa Baiou
6f7c525213 Alerting: Ensure case-sensitive ordering for alert rule group column
The query which fetches alert rules in a paginated manner ordered by `rule_group` can result in strange and inconsistent ordering when the database uses a case-insensitive collation for the `rule_group` column. This can lead to scenarios where rules from different groups are interleaved in the results, making pagination unreliable and the returned number of rule_groups incorrect.

Related to #88990
2025-11-03 11:36:18 -05:00
Ihor Yeromin
684156fdf1 Event Tracking: Add tracking for expression query removal (#113113)
* feat(tracking-events): add traking event on expression remove

* chore(traking): remove type assertion
2025-11-03 16:58:51 +01:00
Bruno
4cda8669a5 Caching: GetKey requires a namespace argument (#113180)
* Caching: GetKey requires a namespace argument

* GetKey: special case empty namespace
2025-11-03 12:22:36 -03:00
Andres Martinez Gotor
14c45b6db2 Advisor: Standalone server mock (#113224) 2025-11-03 16:09:54 +01:00
Jo
eeddc8cd18 Zanzana: Add team binding hooks (#113274)
add team binding hooks
2025-11-03 15:39:20 +01:00
Jo
99e4583cd1 Zanzana: Add user org role hooks (#113276)
* add user org role hooks

* update with feedback
2025-11-03 15:39:12 +01:00
Matias Chomicki
cbd6b53182 New Logs Panel: Enable new visualization by default (#113340)
* New Logs Panel: enabled by default

* Update toggles

* Change feature flag availability
2025-11-03 06:21:39 -08:00
Alexander Zobnin
259c7807cb Zanzana: Respect action sets for dashboards and folders during reconciliation (#113352)
Zanzana: Respect action sets for dashboards and folders during legacy reconciliation
2025-11-03 15:19:23 +01:00
Alexander Zobnin
d6fa822e89 Zanzana: Write API for org roles (#113339)
* Zanzana: Add write APIs for user org roles

* Add tests

* Fix tests

* fix role translation
2025-11-03 14:47:10 +01:00
Anna Urbiztondo
a89377337b Docs: Full instance Git Sync notes (#113083)
* Full instance sync

* Edits

* Prettier

* Fix

* Edits, note on import

* Feedback

* Fix?

* Fix

* Prettier

* Fixing lists

* Fixes

* X-refs

* Prettier

* Update docs/sources/observability-as-code/provision-resources/git-sync-setup.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Update docs/sources/observability-as-code/provision-resources/intro-git-sync.md

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>

* Edits

* Prettier

---------

Co-authored-by: Roberto Jiménez Sánchez <roberto.jimenez@grafana.com>
2025-11-03 14:32:04 +01:00
Tobias Skarhed
3b99370aac Scopes: Fix icon lookup for scope navigation (#113313)
Fix icon lookup for scope navigation
2025-11-03 13:09:58 +01:00
Levente Balogh
3c0409fe05 Dashboard Controls: Add annotations to the dashboard controls menu (#112816)
* feat: add a placement property to annotations model v2

* chore: update scenes to `v6.42.1`

* chore: run `make gen-apps`

* fix: cater for cases when there is no data layer

* chore: swagger clean

* chore: update api clients

* fix: correct type guard

* fix: display control labels in the default renderer as well for DashboardDataLayerSet
2025-11-03 11:33:44 +01:00
Stephanie Hingtgen
6d9e28a59f Frontend tests: Fix for timechange (#113338) 2025-11-03 07:31:40 +00:00
Charandas
6c728f8dec Provisioning: allow access check to proceed even when non access policy (#112946)
* Provisioning: allow access check to proceed even when non access policy

* Provisioning: access checker needs this for MT

* add permissions registration

* remove scopes

* use in MT for now

* no need to document an internal flag here

* revert vscode change

* refactor the authZ permission evaluation and mapper code to allow evaluating unscoped actions beyond creation

* update wire

* gofmt

* add boolean to struct

---------

Co-authored-by: IevaVasiljeva <ieva.vasiljeva@grafana.com>
2025-11-02 13:14:08 -08:00
Stephanie Hingtgen
445e88cb93 Dashboard Provisioning: Add duplicate cleanup for modes 0-2 (#113336) 2025-11-02 20:39:15 +00:00
Charandas
c98259f74a Identity: adds ServiceIdentityForSingleNamespace helper (#113161) 2025-11-01 11:51:25 -07:00
grafana-pr-automation[bot]
83e3b1fac7 I18n: Download translations from Crowdin (#113326)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-11-01 00:40:48 +00:00
Isabel Matwawana
16a0f6c86e Docs: Clarify difference between "Add" and "Replace" for saved queries (#113318) 2025-10-31 17:25:59 -04:00
Isabel Matwawana
10833172b9 Docs: Add saved queries for annotations (#113302) 2025-10-31 18:30:41 +00:00
Jocelyn Collado-Kuri
d0ea82633f Jaeger: Migrate API calls to gRPC endpoint (#113297)
* Jaeger: Migrate Services and Operations to the gRPC Jaeger endpoint (#112384)

* add grpc feature toggle

* move types into types.go

* creates grpc client functions for services and operations

* Call grpc services function when feature flag is enabled for health check

* remove unnecessary double encoding

* check for successful status code before decoding response and return nil in case of successful response

* remove duplicate code

* use variable

* fix error type in testsz

* Jaeger: Migrate search and Trace Search calls to use gRPC endpoint (#112610)

* move all types into types package except for JagerClient

* move all helper functions into utils package

* change return type of search function to be frames and add grpc search functionality

* fix tests

* fix types and the way we check error response from grpc

* change trace name and duration unit conversion

* fix types and add tests

* support queryAttributes

* quick limit implementation in post processing

* add todo for attributes / tags

* make trace functionality ready to support grpc flow

* add functions to process search response for a specific trace and create the Trace frame

* tests for helper funtions

* remove grpc querying for now!

* change logic to be able to process and support multiple resource spans

* remove logic for gRPC from grpc_client.go

* add equivalent fields for logs and references

* add tests for grpcTraceResponse function

* fix types after merge with main

* fix status code checks and return nil for error on successful responses

* enable reading through config flag for trace search

* create sigle key value type since they are similar for OTLP and non OTLP based formats

* reference right type

* convert events and links into references and logs

* add status code, status message and kind to data frame

* fix tests to accomodate new format

* remove unused function and add more tests

* remove edit flag for jsonc golden test files

* add clarifying comment

* fix tests and linting

* fix golden files for testing

* fix typo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix typo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix typo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* add clarifying comment

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* remove unnecessary logging statement

* fix downstream errors

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* use downstreamerrorf where applicable and add missing downstream eror sources.

* tests

---------

Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-31 11:19:16 -07:00
Paul Marbach
64da716a2e Heatmap: Fix runtime error when no data is present, add e2e test (#113242)
* Heatmap: Fix runtime error when no xAxis is present, add e2e test

* update migration test fixture

* updates from review
2025-10-31 18:17:30 +00:00
Isabel Matwawana
2d250ab364 Docs: Add share dashboard as image section and links (#113136)
Co-authored-by: Nathan Marrs  <nathanielmarrs@gmail.com>
Co-authored-by: Nathan Marrs <nathanielmarrs@gmail.com>
2025-10-31 17:58:37 +00:00
Owen Diehl
b0ecc36fd6 [App-Platform,Git-Sync]: Add sync job & phase metrics (#113253)
* [git-sync] add sync job & phase metrics

* refactoring sync jobs for clarity and ease of instrumentation

* make gofmt
2025-10-31 10:24:17 -07:00
Paul Marbach
d64cc987b8 Table: Fix JSON display for array and object (#113246) 2025-10-31 12:31:07 -04:00
Ryan McKinley
ac7c1eed42 ShortURL: Increase timeout checking for lastSeenAt (#113294) 2025-10-31 15:38:43 +00:00
Alexander Zobnin
cfc8989d24 Zanzana: Inject client into standalone AuthZ client (#113293) 2025-10-31 16:15:45 +01:00
Kim Nylander
33b4d43248 [DOC] Add doc for critical path highlighting (#113194) 2025-10-31 11:12:24 -04:00
Kyle Brandt
92a6faeff2 SQL Expressions: Add Functions to Allow list (#113291)
Add assorted math, windowing, json, date/time, regex, string, conditional, and aggregation functions to allow list
2025-10-31 10:45:56 -04:00
Jo
a339a2dad3 AuthZ: Instantiate needed clients for IAM hooks (#113268)
build API with zanzana hooks support
2025-10-31 15:37:43 +01:00
Stephanie Hingtgen
ea90bdff9c Dashboard: Fix editor specific permissions in /api (#113292) 2025-10-31 09:03:35 -05:00
John-George Sample
f6e4dd9b0c Icon: Add thumbs-down to availableIconIndex (#113108)
add `thumbs-down` to icon types
2025-10-31 09:30:06 -04:00
Yunwen Zheng
460ed5b827 navModel: Hide Panels tab when a folder is provisioned (#113250) 2025-10-31 09:08:47 -04:00
Gilles De Mey
8010784322 Alerting: Improve test notification visualization (#113228) 2025-10-31 14:08:24 +01:00
Tobias Skarhed
f9c0924f0c Scopes: Sync scope_node in favor of scope_parent in the URL (#113212)
* Enhance ScopesService to support scopeNodeId in URL parameters for improved backward compatibility. Update changeScopes method to accept scopeNodeId, allowing for better handling of scope nodes. Adjust ScopesInput to prioritize scope node titles and ensure loading states are managed correctly. Refactor related logic in ScopesSelectorService for consistent scope handling.

* Scopes: Add tests for scope_node URL sync and scopeNodeId handling

- Add ScopesService.test.ts with tests for URL parameter handling
  - Test scope_node and scope_parent reading from URL
  - Test scope_node writing to URL with scope_parent reset
  - Test backward compatibility with legacy scope_parent
  - Test URL sync when scopes and scopeNodeId change

- Add tests to ScopesSelectorService.test.ts for changeScopes
  - Test scopeNodeId assignment (only first scope gets it)
  - Test handling scopeNodeId without parentNodeId
  - Test backward compatibility when only parentNodeId provided

All 13 new tests passing, maintaining 100% test coverage.

* Fix linting error

* Fix comments
2025-10-31 13:36:10 +01:00
Tania
4813256e0a OpenFeature: Log key name and namespace in handler (#113288) 2025-10-31 12:31:48 +00:00
Matias Chomicki
28e8d7d56e Logs in Explore: Hide "show original line" when using the table (#113215)
* Logs in Explore: Hide "show original line" when using the table

* Test update
2025-10-31 12:00:30 +00:00
grafana-pr-automation[bot]
3a6459cda3 I18n: Download translations from Crowdin (#113285)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-31 11:59:48 +00:00
Tobias Skarhed
03d738004d Scopes: Disable support for public dashboards (#113267)
Disable scopes support for public dashboards
2025-10-31 12:45:56 +01:00
Neeraj Panwar
e3d1fc9c2c Docs: Clarify Grafana Live data format requirements (#112926)
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Irene Rodriguez <irene.rodriguez@grafana.com>
2025-10-31 11:18:38 +00:00
Matias Chomicki
52d758dc93 Field Selector: Show scroll and add "suggested" section for fields (#113178)
* Show scrollbar

* ActiveFields: move suggested fields to another section

* Translations

* Update tests
2025-10-31 12:18:10 +01:00
Matheus Macabu
452fc04d1d PublicDashboards: Dont call API on dashboard page if public dashboards is disabled (#113273) 2025-10-31 12:05:26 +01:00
Sonia Aguilar
3e6a601fba Alerting: Update width to instance details drawer in Triage page (#113209)
* add depreacted width to instance details drawer

* prettier

* use percentage instead

* use width aligned with the left column in the parent

* clamp value for wide screen monitors

* refactor: use hook instead of function for calculations

* refactor: use context provider for right column for the calculation of the width

* remove unnecessary changes exporting styles values
2025-10-31 11:05:07 +00:00
Misi
e09deb6889 IAM: Use the new authorizer for Teams (#113275)
Use the new authorizer for Teams
2025-10-31 10:48:01 +00:00
Janos Gub
1070f94fbb Navigation: Move Cost management and billing plugin to root (#111739) 2025-10-31 10:41:01 +00:00
Torkel Ödegaard
137803a32a NewGauge: Fixes issue with too eager migration (#113200) 2025-10-31 10:58:57 +01:00
Pepe Cano
7648eac654 ui(alerting): show correct tooltip when label search includes spaces (#113038) 2025-10-31 10:56:56 +01:00
Kevin Minehart
0a8d15dcac SQL: Fix 32 bit arm builds (#113270)
* add arm specific frame_db_conf

* use proper field type and fix error

* add extra mising func
2025-10-31 09:42:25 +00:00
Alex Khomenko
b5cf192331 Provisioning: Move nav item to General (#113266) 2025-10-31 10:06:41 +02:00
Tom Ratcliffe
f678f5a2cb Nav: Render menu items as p tags so truncation logic can work (#113248) 2025-10-31 08:04:30 +00:00
Alex Khomenko
ca5e7202b9 Provisioning: Update onPrem check to use stacks (#113262) 2025-10-31 07:40:33 +00:00
Yunwen Zheng
ce6523c5f6 RepositoryOverview: Always display recent jobs (#113249)
* RepositoryOverview: always display recent jobs

* clean up import
2025-10-31 08:44:57 +02:00
Stephanie Hingtgen
83bed02a41 Dashboards: Fix bug with anon users with editor permissions creating dashboards (#113260) 2025-10-31 09:05:38 +03:00
Ryan McKinley
1759732d91 Alerting/Notification: Remove unused status sub-resource (#113198) 2025-10-31 08:24:19 +03:00
Ryan McKinley
53aed34652 LibraryPanels: Support CRUD via apiserver (#113035) 2025-10-31 08:14:38 +03:00
Michael Mandrus
cf242def3a Secrets: Refactor data_key_id out of the encoded secure value payload (#112077)
* Secrets: Refactor data_key_id out of the encoded secure value payload (#111852)

* everything compiles

* tests pass

* remove file included by accident

* add entry to gitignore

* some scaffolding for the migration executor

* remove file

* implement and test the migration

* use xkube.Namespace in our interfaces

* add todo

* update wire deps

* add some logs

* fix wire dependency ordering

* create tests to validate error conditions during migrations

* only run the migration as an MT api server

* formatting issues

* change detection of secrets running as MT server

* add todo

* use more specific initializer flags

* make secrets playwright tests work

* set new properties to true by default

* remove developer mode flag

* fix unit tests
2025-10-30 23:04:32 -04:00
Drew Slobodnjak
f61578a50f Geomap: Add a MapLibre style base layer (#109841)
* GeoMap: Add maplibre style basemap

* Docs: Add maplibre GeoMap base map

* GeoMap: Add test dashboard to devenv

* Add support for opacity

* Simplify layer name and description

* Add no repeat support

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Fix vale issues

* Move to consistent async await approach

* Increment ol-ext

* Remove mapbox temporarily

* Add mapbox back

* Add access token url to docs

* Highlight access token as public

* Make capitalization consistent

* Update yarn lock

* Grab yarn lock from main

* Add missing line to yarn lock

* Fix last line again

* Remove gdev dashboard for now

---------

Co-authored-by: Remo Geissbühler <37411349+remogeissbuehler@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-10-30 17:56:30 -07:00
grafana-pr-automation[bot]
3965761168 I18n: Download translations from Crowdin (#113258)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-31 00:39:11 +00:00
Drew Slobodnjak
f5ee26540b Geomap: Add ol-mapbox-style to package.json (#113257) 2025-10-30 17:00:43 -07:00
Nathan Marrs
21b120cbae Dashboards: Promote export dashboard as image feature to GA (#113192) 2025-10-30 13:34:33 -07:00
Isabel Matwawana
50932cbdab Docs: Saved queries remove menu references (#113125) 2025-10-30 15:57:19 -04:00
J Stickler
1f4720a0fd docs: Update Logs Visualizations topic (#112541)
* docs: Update Logs Visualizations topic

* updated based on review comments

* Add log details options

* Updated main image, moved log details info to intro and added screenshot of menu

* Changed max width of log menu image

* Added screenshot with log line icons highlighted

* Replaced example image

---------

Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
2025-10-30 14:16:36 -04:00
Oscar Kilhed
9cbdaef4be Codegen: Revert gen-cue verification (#113247)
* Revert "Codegen/CI: Update makefile to also verify gen-cue (#113211)"

This reverts commit 1342858f36.

* fix wording of generated code verification error
2025-10-30 17:21:41 +00:00
Collin Fingar
782b521c0f E2E-Skip: Skipping test due to failing CI test run (#113244)
* E2E-Skip: Skipping test due to failing CI test run

* Skipping entire file due to repeated failures
2025-10-30 12:56:32 -04:00
Yunwen Zheng
8d5e5e2ead SaveDashboardAsForm: Adjust form field spacing (#113243) 2025-10-30 12:17:06 -04:00
Drew Slobodnjak
1613d2815c Geomap: Move beta layers to GA (#113186) 2025-10-30 09:12:04 -07:00
Drew Slobodnjak
7fbe2e5962 PanelTimeSettings: Update wording (#113176)
* PanelTimeSettings: Update wording

* Update wording
2025-10-30 09:02:09 -07:00
Jay Clifford
72e244c1e7 fix(nav): Add tooltip to help button (#113225)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2025-10-30 15:57:16 +00:00
Misi
44beedd09a IAM: Handle NULL external_uid, is_provisioned correctly for Teams (#113219)
* Handle NULL external_uid correctly with MySQL

* Add NULL handling to is_provisioned column
2025-10-30 15:50:40 +00:00
Lauren
d6bcca2f7e Alerting: Hide metadata if grouping by folder (#113216)
* Alerting: Hide metadata if grouping by folder

* resolve comments

* resolve comments 2
2025-10-30 15:14:37 +00:00
Yunwen Zheng
20ec8ee61c useProvisionedRequestHandler: reset ref when a new request is loading (#113196) 2025-10-30 10:37:13 -04:00
Oscar Kilhed
1342858f36 Codegen/CI: Update makefile to also verify gen-cue (#113211)
* update makefile to also verify gen-cue

* update for jsonnet
2025-10-30 15:31:57 +01:00
Ashley Harrison
63c5d8cb8f Collapse: Improve layout and deprecate collapsible prop (#113164)
* deprecate collapsible prop, improve Collapse to allow for buttons in the header

* add ariaLabel

* Revert "add ariaLabel"

This reverts commit a903a0da5d.

* add aria-labelledby
2025-10-30 14:23:03 +00:00
Ashley Harrison
92375279f7 Slider: Expose prop to control visibility of input (#113084)
expose prop to control visibility of slider input
2025-10-30 14:22:44 +00:00
Kyle Brandt
c3d7dbc258 SQL Expressions: Add endpoint to get Schemas (#108864)
Return the SQL schema for all DS queries in request (to provide information to AI / Autocomplete for SQL expressions).

All DS queries are treated as if they were inputs to SQL expressions in terms of conversion, regardless if they are selected in a query or not.

Requires feature toggle queryService = true

Endpoint is apis/query.grafana.app/v0alpha1/namespaces/default/sqlschemas

---------

Co-authored-by: Todd Treece <360020+toddtreece@users.noreply.github.com>
2025-10-30 10:05:12 -04:00
Paul Marbach
c487952279 Table: Support DataLinks and Actions in SparklineCell (#112244)
* Table: Support DataLinks in SparklineCell

* add data links to sparkline gdev

* fix migrator test

* Clean up single action use case
2025-10-30 10:04:08 -04:00
Tom Ratcliffe
05dc9b2be1 API Clients: Add lazy hooks to clients (#113226) 2025-10-30 13:08:14 +00:00
Ryan McKinley
d303746ff9 ShortURL: Use UpdateStatus client (#111170) 2025-10-30 15:57:03 +03:00
Ezequiel Victorero
f185377c68 ShortURL: Use RTK api for creation (#113185) 2025-10-30 09:29:40 -03:00
Ida Štambuk
80d5cfa184 CloudWatch: Add tracking for logs anomalies (#113181)
- Fix tracking for new logs queries with logGroups field
2025-10-30 12:10:00 +00:00
Piotr Jamróz
5f2074e84c Explore: Use compact mode only when targeting Tempo (#113037)
* Explore: Use compact mode only when targeting Tempo

* Fix checking ds type when data source is not in the query object
2025-10-30 12:55:06 +01:00
Costa Alexoglou
bbfb8268d1 Provisioning: concurrent deletes in finalizers and 404 handling (#113155)
* fix: concurrent deletes in finalizers and 404 handling

* chore: feedback review

* fix: broken tests
2025-10-30 11:55:36 +01:00
maicon
cb86be2e32 Unistore: ensure dashboard DeleteInFolders work on both storages (#113197)
Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
2025-10-30 11:51:31 +01:00
Torkel Ödegaard
344fc5606f PanelTimeCompare: Support saving time compare window (#113150)
* PanelTimeCompare: Support saving time compare window

* fix indentation

* Fix merge issue

* Update

* Update

* make gen-cue

---------

Co-authored-by: oscarkilhed <oscar.kilhed@grafana.com>
2025-10-30 10:50:05 +01:00
Torkel Ödegaard
3cabc12f4c PanelEditor: Fixes double top border around Queries (#112865)
* PanelEditor: Fixes double top border around Queries

* Fixes
2025-10-30 10:49:54 +01:00
Konrad Lalik
ee62a8d431 Alerting: Alerts page improvements (#113172)
* Remove column header from Triage workbench

* Use md size for details Drawers

* Fix top workbench border

* Fix query filter for alert instances

* Remove the default grouping

* Update translations
2025-10-30 10:43:13 +01:00
Konrad Lalik
d399f116b8 Alerting: Improve instance details drawer in Alerts (#113106)
* Add alert instance breadcrumbs, change instance drawer title

* Update translations

* Add instance drawer title component and unify its usage
2025-10-30 10:28:15 +01:00
Ashley Harrison
8b31ec5040 Chore: Convert to functional components (#112951)
* refactor ErrorBoundary so it doesn't trigger the lint rule

* refactor ErrorBoundaryAlert to functional component

* convert StatPanel to a functional component

* convert ServiceAccountPicker to a functional component

* convert UserPicker to a functional component

* don't need displayName when not memoized

* convert TimelineChart to a functional component

* convert UserLdapSyncInfo to a functional component

* convert UserOrgs to functional component

* convert OrgRow to a functional component

* convert UserSessions to a functional component

* convert TimePickerSettings to a functional component

* convert DataSourcePluginSettings to a functional component

* convert ExploreTimeControls to a functional component

* convert SearchBarInput to a functional component

* convert LiveConnectionWarning to a functional component

* convert ConcatenateTransformerEditor

* convert ConstantVariableEditor a functional component

* convert VariableInput to a functional component

* convert ConfigEditor to a functional component

* convert CSVWavesEditor to a functional component
2025-10-30 09:23:21 +00:00
Mustafa Sencer Özcan
58098f9339 chore: improve unified dual writer logging (#113203)
chore: improve dual writer logging
2025-10-30 10:12:29 +01:00
Levente Balogh
f9ef1b6bd0 Switch variable: Stop allowing identical values (#113166)
* fix: don't allow identical values for enabled and disabled states

* fix: add missing translation
2025-10-30 10:08:10 +01:00
antonio
5dce711680 add feedback survey to contributing related docs (#113168)
* add feedback survey to contributing related docs

* removed deprecated drone logo and link

* all pretty, no pity

* removed indentation
2025-10-30 09:36:44 +01:00
Alex Khomenko
31a2d2aff4 Provisioning: Show last and preview branches in the branch dropdown (#113148)
* Provisioning: Show configured and last used branches

* Remove unused var

* Add hooks

* Extract branch logic

* remove type assertion

* fix tests

* Memoize descriptions
2025-10-30 07:20:41 +00:00
Dominik Prokop
209aa13ff7 Dashboard performance analytics system with Scenes integration (#112137)
* Dashboard performance profiling architecture improvements

- Create shared performanceUtils.ts with type-safe performance.memory access
- Add standardized grouped logging utilities for structured console output
- Convert observer methods to arrow functions eliminating constructor bindings
- Implement DashboardAnalyticsAggregator for comprehensive panel metrics
- Add ScenePerformanceLogger for performance marks and measurements
- Create DashboardAnalyticsInitializerBehavior for automatic profiling setup
- Update dashboard scene integration to use improved profiling system
- Add numeric duration logging for better programmatic analysis
- Fix localStorage usage to use @grafana/data store for consistency
- Consolidate performance tracking logic into shared utilities

* canary scenes

* tests/lint

* docs

* performanceUtils namespace

* Review and sync scenes

* Only enable dashboard profiling when needed

* docs update

* update scenes

---------

Co-authored-by: Victor Marin <victor.marin@grafana.com>
2025-10-30 06:25:55 +00:00
Yunwen Zheng
84edc45dee PreviewBannerViewPR: Display branch info in preview banner (#113195) 2025-10-30 08:49:15 +03:00
Anna Urbiztondo
0b56628622 Docs: Plugins link to catalog (#113103)
* Plugins link

* Typo

* Prettier

* Edits

* More edits
2025-10-30 06:33:26 +01:00
Ryan McKinley
4c8c32a1d4 Chore: Update @playwright/test (#113179) 2025-10-30 04:25:59 +00:00
grafana-pr-automation[bot]
c0c31afdde I18n: Download translations from Crowdin (#113191)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-30 00:40:00 +00:00
Yuri Tseretyan
a4df6c8bb9 Alerting: Prohibit receivers with empty name (#113064) 2025-10-29 16:30:38 -04:00
dependabot[bot]
f2404361bf deps(actions): bump actions/download-artifact from 5 to 6 (#113024)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-29 18:51:40 +00:00
Ida Štambuk
30bd4e7dba CloudWatch Logs: Support Log Anomalies query type (#113067) 2025-10-29 18:47:33 +01:00
Todd Treece
de88abafdd Plugins API: Merge meta and installs (#112962) 2025-10-29 13:32:31 -04:00
Ivan Ortega Alba
6a3e95913e Scenes: Fix timezone not being preserved in links (#112879)
* Scenes: Fix timezone not being preserved in links

* Update E2E
2025-10-29 17:15:16 +00:00
dependabot[bot]
0124aab805 deps(actions): bump trufflesecurity/trufflehog from 3.90.11 to 3.90.12 (#113069)
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.90.11 to 3.90.12.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Changelog](https://github.com/trufflesecurity/trufflehog/blob/main/.goreleaser.yml)
- [Commits](ad6fc8fb44...b84c3d14d1)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.90.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-29 20:08:38 +03:00
Laura Fernández
af8d166b90 Chore: Update node to v24 (#112649) 2025-10-29 17:17:07 +01:00
Yunwen Zheng
ec6e516e28 DashboardEmpty: Disable import dashboard function when a new dashboard is git provisioned (#113122)
DashboardEmpty: Disable import dashboard function when a new dashboar is git provisioned
2025-10-29 12:14:57 -04:00
Yunwen Zheng
269c145051 SaveProvisionedDashboardForm: Bug fix repo type incorrectly showing in preview banner (#113120)
* SaveProvisionedDashboardForm: fix repo type incorrectly showing in preview banner
2025-10-29 12:14:12 -04:00
Todd Treece
3bfbbb1961 Plugins: Skip angular check for CDN source (#113163) 2025-10-29 11:33:43 -04:00
Pepe Cano
7eb8a9af99 docs(alerting): clarify notification group deletion after group interval elapses (#113160) 2025-10-29 16:08:08 +01:00
Sergej-Vlasov
51b39d8c6e DashboardScene: Ignore defaults changes when exiting edit mode (#112796)
* exit dashboard without confirmation with only optional changes

* centralise

* clean up logic

* export to util
2025-10-29 15:07:55 +00:00
Kyle Brandt
284648df9e SQL Expressions: Point to grafana GMS fork (#113104)
Use fork that does not have cgo as default, had to revert build tag method attempt since it broke things like running go test on macs (without the tag) #112289.
2025-10-29 15:06:56 +00:00
Tobias Skarhed
04ab552950 DashboardControls: Render UNSAFE hidden dashboard controls (#113046)
* Render UNSAFE hidden dashboard controls

* Remove unused imports

* Extract to function and write test

* Remove unnecessary context from test

* Remove exclamation
2025-10-29 08:33:48 -06:00
Gilles De Mey
87794bec12 Alerting: Add instances with no label value to an ungrouped group (#113170)
add instances with no label value to an ungrouped group in alerting
triage – these will be collapsed by default
2025-10-29 15:21:05 +01:00
Haris Rozajac
19826b5b26 Dashboard Save: Fix the issue of clicking Save button that wouldn't trigger save (#113134)
* fix the issue of clicking Save button that wouldn't trigger save

* clean up
2025-10-29 08:15:43 -06:00
Brendan O'Handley
2472555af0 Add to dashboard: expose add to dashboard form component for external apps (#112609)
* add extension for drilldown to add to dashboard

* reuse configure add to dashboard function callback

* structure for drilldown add to dashboard

* fix imports

* fix tests

* expose as a component

* remove extension link

* get component ready to extend

* lazy load component

* add component to exposed component registry

* update folder structure to not work in explore folder

* keep dependencies clean

* nice structure to let folks know this is a drilldown integration

* update code owners for new file

* make exposed component more generic, step one, update component id

* step 2, expose add to dashboard form component

* add more explicit useAbsolutePath option to form

* remove old implementation code for drilldown specific component

* commit translation

* add comments to avoid breaking changes

* add e2e test for add to dashboard form component

* fix flaky test

* add exposed component id to e2e test app

* remove gridPos in buildPanel fallback fn

* add code comment for useAbsolutePath's purpose

* remove gridPos from e2e test
2025-10-29 09:15:20 -05:00
Matheus Macabu
7dbacddb18 CloudMigrations: Check contact point permissions before fetching it (#113159) 2025-10-29 15:08:43 +01:00
Janos Gub
c1808a00c2 Adding adaptive telemetry's own weight (#113167) 2025-10-29 14:07:56 +00:00
Isabel Matwawana
edc7302c2f Docs: Add query variable static options (#113058) 2025-10-29 09:35:53 -04:00
Tom Ratcliffe
f533a5a6e5 API clients: Update API clients to include all endpoints & add hooks (#113061) 2025-10-29 13:20:19 +00:00
Gábor Farkas
ec0c14ac1a log: added debug-log (#113156)
* log: added debug-log

* fixed unit test

* fixed another unit test
2025-10-29 14:19:24 +01:00
Luminessa Starlight
8bff09b88b Docs: Add storybook links to components (#113102)
* for every storybook component, a storybook link

* typo fix

* text improvements
2025-10-29 09:11:23 -04:00
Pepe Cano
86bf99aaaa docs(alerting): add additional migration details (#112383) 2025-10-29 13:58:13 +01:00
Irene Rodríguez
1d0ab617e8 Update Git Sync and File provisioning status to private preview (#113158) 2025-10-29 15:38:49 +03:00
Tom Ratcliffe
6093afddd4 Folders: Migrate FolderFilter component to ComboBox (#113047) 2025-10-29 11:21:58 +00:00
Ryan McKinley
c0b8fc6e6c Chore: update storybook/test-runner (#113154) 2025-10-29 11:06:35 +00:00
Chris Chang
86cb5d8af7 Cloudwatch: Add missing AWS regions (#113010)
Add missing cw regions
2025-10-29 11:58:58 +01:00
Ashley Harrison
e75610ed03 Frontend service: Ensure we set Cache-Control header in the response (#113152)
ensure we set Cache-Control header in the response from frontend-service
2025-10-29 10:09:06 +00:00
Tobias Skarhed
c0ae0f437f Scopes: Display subtitle and enable direct scopes apply (#112876)
* Display subtitle and enable direct scopes apply

* Extract each type into its own component

* Fix unit integration test

* Fix fe linting

* Fix imports

* Import order

* Update generated type

* Update type generation

* Format go

* Add test case for radio button container selection

* Remove infra mock

* Remove non-existant imports

* Remove unused assertions

* Refactor tree item for a11y

* Add proper keyboard support for directly applying scope

* Update i18n

* Fix button selector

* Remove test code

* Fix race condition for seletion vs blur update
2025-10-29 10:52:18 +01:00
Stephanie Hingtgen
2d5713e330 Docs: Add information on continue tokens (#113144) 2025-10-29 12:26:42 +03:00
Stephanie Hingtgen
3176821ddc Docs: Update search default information (#113146) 2025-10-29 10:13:26 +01:00
Javier Ruiz
c7d77c6c64 Nav: Update Observability section nav to phase 2 (#112806)
* Move up a level the knowledge graph children

* Remove unused frontend id

* Add special id to plugin pages
2025-10-29 09:25:09 +01:00
Torkel Ödegaard
5a031b370f PanelTimeSettings: Support panel time range settings changes from dashboard in view mode (#113027)
* Something is working

* Progress

* Update

* Update

* Update

* Some new unit tests

* Fix

* time shift fix

* Update

* Always show hidden toggle

* Update
2025-10-29 09:06:23 +01:00
Costa Alexoglou
25dd7e927f feat: add granular context timeout (#112952)
* feat: add granular context timeout

* test: forced thread timeout

* fix: test assumption for blocks

* test: new change

* trigger build

* remove loggers to test

* test with fmt.print

* fix: deadlocks
2025-10-29 08:41:53 +01:00
grafana-pr-automation[bot]
2c1aa65f2d I18n: Download translations from Crowdin (#113140)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-29 00:41:02 +00:00
Nathan Marrs
1492db8ead Grafana: Fix main build by skipping flaky test (#113138)
skip panel smokescreen test due to breaking main build (potentially flaky)
2025-10-28 23:27:37 +00:00
Georges Chaudy
9533cc4dbb kvstore: Fix missing Folder field in listModifiedSinceEventStore data lookup (#113131)
* fix: ListModifiedSince for resources in folders

* fix: ListModifiedSince for resources in folders
2025-10-28 23:18:15 +01:00
Ryan McKinley
d72e048bfe Chore: Use Kind().GroupVersionResource() (#113133) 2025-10-28 14:54:10 -07:00
Paul Marbach
329d6a11fa Table: Fix cell inspect for Sparkline and inferred JSON cells (#113059)
* Table: Sparkline Cell inspect support

* update to better support FieldType.other structures

* clean up styling a bit for empty case

* fix test import

* add test for no x case for sparkline

* fix merge mistake

* fix test import
2025-10-28 21:50:46 +00:00
Stephanie Hingtgen
7127b2538c Revert "unistore: replace CDK backend with KV store backend"" (#113132)
Revert "unistore: replace CDK backend with KV store backend" (#112746)"

This reverts commit fe9c21ebf8.
2025-10-28 21:37:51 +00:00
Paul Marbach
237ab6c1b4 Table: Pill and JSON Cells should allow formatting (#111951)
* Table: PillCell should use formatted text inside pills

* Table: JSONCell should use formatted text

* remove unused imports
2025-10-28 16:37:28 -04:00
Nathan Marrs
8263803e81 Grafana Data Source: Add random walk configuration options (#113009)
* Grafana: Add random walk configuration options to Grafana datasource

Add UI controls to configure random walk parameters (min, max, start value,
spread, noise, drop percent) to match TestData datasource functionality.

- Add RandomWalkEditor component with inline number inputs for all parameters
- Update GrafanaQuery type to include random walk configuration fields
- Update backend to parse and apply query parameters to RandomWalk function
- Configuration options match TestData datasource UX for consistency

* Grafana: Add series count support to random walk

Add ability to generate multiple random walk series in a single query
for complete parity with TestData datasource.

- Add seriesCount field to RandomWalkEditor
- Update backend to loop and generate multiple frames based on series count
- Default to 1 series if not specified for backward compatibility

* Grafana: Improve random walk editor UI with better organization and tooltips

Enhance the random walk configuration UI for better usability:

- Organize fields into two logical rows (core config vs fine-tuning)
- Add helpful tooltips to all fields explaining their purpose
- Increase label width to prevent text wrapping
- Group related fields visually for better comprehension

Row 1: Series count, Start value, Min, Max (basic shape and range)
Row 2: Spread, Noise, Drop % (randomness and variation controls)

This provides a cleaner, more intuitive experience compared to TestData's
single-row layout, making it easier for users to configure random walks.

* Grafana: Format RandomWalkEditor code

Apply consistent formatting to RandomWalkEditor component.

* Grafana: Add E2E tests for random walk configuration

Add comprehensive Playwright E2E tests to verify random walk functionality:

- Test that all configuration fields render correctly
- Test min/max value constraints
- Test multiple series generation
- Test spread and noise parameters
- Test drop percentage for simulating missing data
- Test that tooltips are present and functional

These tests ensure the random walk configuration works end-to-end from
UI input to data rendering in panels.

* Grafana: Fix E2E tests for random walk configuration

Fix Playwright test selectors and assertions to work reliably:

- Use specific element IDs to avoid selector conflicts
- Remove flaky dropPercent check from rendering test (covered separately)
- Simplify test assertions to focus on functional verification
- All 7 tests now passing consistently

Tests verify: field rendering, min/max constraints, series count,
spread/noise configuration, drop percentage, and tooltips.

* Grafana: Add advanced E2E tests for random walk

Add two additional tests for better coverage:

- Test configuration value persistence across interactions
- Test that series count actually generates the expected number of series

These tests verify deeper functionality beyond basic UI rendering,
ensuring the random walk feature works correctly end-to-end.

All 9 tests passing consistently (20.1s runtime).

* Grafana: Remove redundant Min/Max tooltips

Remove tooltips from Min and Max fields that just repeated the label text.
These fields are self-explanatory and don't need tooltip icons.

Keeps the UI cleaner while maintaining helpful tooltips on fields that
actually benefit from explanation (Series count, Start value, Spread,
Noise, Drop %).

* Grafana: Add CODEOWNERS entry for random walk E2E tests

Add codeowner assignment for the new grafana-datasource-random-walk.spec.ts
test file to @grafana/grafana-frontend-platform, matching the ownership of
the Grafana datasource code.

* Add dashboardTemplates feature toggle and put new changes behind this toggle to limit impact

* Grafana: Add unit tests for dashboardTemplates feature toggle

Add unit tests to verify RandomWalkEditor renders correctly based on
the dashboardTemplates feature toggle:

- Test that random walk editor renders when FF is enabled
- Test that random walk editor is hidden when FF is disabled

These tests ensure the feature toggle works as expected and prevents
the random walk configuration UI from appearing when the feature is disabled.

* revert previous codeowners change as not necessary

* Grafana: Remove redundant E2E test for feature flag disabled

Remove E2E test for dashboardTemplates feature flag disabled scenario
since it's already covered by unit tests and E2E environment can't
reliably control server-side feature flags.

Feature flag behavior is properly tested in QueryEditor.test.tsx unit tests.
E2E tests focus on functional validation when the feature is enabled.

* fix lint
2025-10-28 13:05:32 -07:00
Isabel Matwawana
e5cf0e2086 Docs: Add styling from field cell option (#113107)
Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-10-28 13:16:37 -04:00
Stephanie Hingtgen
6a3dfacc95 Datasources: Add service function to get by group, name, and namespace (#113066) 2025-10-28 16:43:03 +00:00
Georges Chaudy
147ff4279b kvstore: fix events lookback + startkey (#113092)
* fix snowflakes events

* add tests
2025-10-28 17:25:55 +01:00
Collin Fingar
0973a44e6a Saved Queries: Update query's ds to default if necessary (#112674) 2025-10-28 11:51:09 -04:00
William Wernert
75fb832826 Alerting: Ensure state history client has external labels set (#113101)
* Ensure state history client has external labels set

* Run `make update-workspace`

* Add dep owner
2025-10-28 11:35:54 -04:00
Tom Ratcliffe
f3e7576f0c ComboBox: Add loading state to dropdown and prefixIcon (#112967) 2025-10-28 15:22:18 +00:00
Matias Chomicki
8863ed9d6f Logs Panel: Improve search terms highlighting for highlighted JSON logs (#113093)
* Rename for clarity

* New logs panel: improve highlighting of search terms between highlighted JSON logs
2025-10-28 16:11:52 +01:00
Bruno
437dcc875c QueryCaching: Use CachingServiceClient for query caching (#112128)
* Integrate mt querier with query caching

* typo

* let the caller set cache status response header

* fix TestQueryAPI

* make gen-go

* handle CachingServiceClient being nil and make gen-go

* include namespace in cache key

* set signed in user namespace in query_test.go

* fix test

* remove commented out code

* undo services/query/query.go changes

* make gen-go

* remove namespace requirement

* fix tests

* fix test

* remove namespace from SignedInUser in tests

* make gen-go
2025-10-28 11:41:46 -03:00
Levente Balogh
3131a69f04 Switch variable type: Add docs (#113029)
* docs: add docs for the switch variable type

* chore: prettier fix

* docs: fix review notes

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* docs: move the switch variable section after ad-hoc variables

* fix: vale fixes

* Update docs/sources/visualizations/dashboards/variables/add-template-variables/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-10-28 14:15:54 +00:00
Alyssa Joyner
1cb66d86b0 [InfluxDB]: Update product selection and UI (#112074) 2025-10-28 08:09:43 -06:00
Yunwen Zheng
79a5b024e1 MegaMenu: Spacing alignment tweaks (#113055) 2025-10-28 09:34:33 -04:00
Yunwen Zheng
238244fe5c SaveProvisionedDashboardForm: Show preview banner when pushing to non-configured existing branch (#112947)
* SaveProvisionedDashboardForm: Show preview banner when pushing to non-configured existing branch

* useProvisionedRequestHandler: use ref to prevent handler triggered twice
2025-10-28 09:34:18 -04:00
Paul Marbach
2a5ce2f031 Gauge: Fix migration version targeting and gdev dashboard (#112974) 2025-10-28 09:31:20 -04:00
Ryan McKinley
e1ddbda1bb LibraryPanels: Remove unique name constraints (#113077) 2025-10-28 16:30:39 +03:00
Gilles De Mey
5670f1c34c Alerting: Normalize health when filtering rules (#113087) 2025-10-28 13:23:29 +00:00
Oscar Kilhed
7df95261f3 Dynamic dashboards: Refactor ungroup rows and tabs (#112575)
* refactor ungroup

* deleting last row/tab no longer ungroups

* Change test for deleting last row to not test for ungroup

* fix comment with correct pull request

* use isLayoutGroup instead

* fix implementations

* missing import
2025-10-28 13:55:20 +01:00
Konrad Lalik
68bc0f8076 Alerting: Use common labels tooltip in Triage (#113072)
* Add a tooltip mode for common labels and use it in Triage workbench

* Change Tooltip to ToggleTip for displaying common labels
2025-10-28 12:09:41 +01:00
Ashley Harrison
b39708e439 Accessibility: Wrap data source info onto 2 lines at small viewports (#113033)
* wrap data source info onto 2 lines at small viewports

* undo other changes

* need flex-start
2025-10-28 10:48:44 +00:00
Christian Simon
74a9a288e2 grafana-flamegraph: Improve prompt for open assistant to analyze flamegraph (#113071)
* feat: Improve prompt for open assistant

Existing prompt is not specific enough and uses a new visual tool, which will result in taking a screenshot to analyze the flame graph.

* Apply suggestion from @cyriltovena

less instructions for now.

---------

Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
2025-10-28 10:39:00 +00:00
Alexander Zobnin
7a7fd45bdd Zanzana: app platform style write APIs (#112812)
* refactor zanzana client instantiation

* refactor client imports

* POC write API (Mutate)

* fix linter

* delete exisitng folder parents

* refactor common functions

* minor refactor

* groupd operations by type

* atomic folder operations

* use deleteExisting for deletes

* Add tests for folders

* more tests

* resource permissions tests

* add more tests

* fix mock zanzana client

* fix linter

* fix linter

* re-use types from apps

* add some comments to the protobuf
2025-10-28 11:22:13 +01:00
renovate-sh-app[bot]
19d88de3cf fix(deps): update dependency @grafana/azure-sdk to v0.0.8 (#113054)
| datasource | package            | from  | to    |
| ---------- | ------------------ | ----- | ----- |
| npm        | @grafana/azure-sdk | 0.0.7 | 0.0.8 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-28 10:07:59 +00:00
Georges Chaudy
fe9c21ebf8 unistore: replace CDK backend with KV store backend" (#112746)
* deprecate the cdk backend in favor of the kv storage backend

* lint

* fix watchtests

* cover limit=0 for ListHistory

* fix rv too large
2025-10-28 10:56:08 +01:00
grafana-pr-automation[bot]
a0180f8031 I18n: Download translations from Crowdin (#113068)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-28 09:37:03 +00:00
Ashley Harrison
92fb6872f0 FileDropzone: expose id to underlying input, fix story a11y violations (#113042)
* expose inputId to underlying input, add field to story

* just use id instead of inputId
2025-10-28 09:22:09 +00:00
Ryan McKinley
d4d8b2562e Chore: Update gocloud.dev, removing opencensus (#113056) 2025-10-28 09:10:37 +00:00
Andres Martinez Gotor
bee486be23 Advisor: update app-sdk and deps (#112937) 2025-10-28 09:24:44 +01:00
Kyle Brandt
4bb91a7846 Revert "SQL Expressions: (Chore) Update GMS (go-mysql-server) depende… (#113050) 2025-10-28 06:48:57 +00:00
Anna Urbiztondo
b77a99214a Docs: Admin tweaks - Edits, weights (#113031)
* Edits, weights

* WIP

* Weights

* prettier
2025-10-28 07:45:32 +01:00
Erik Sundell
3dd4493d50 Plugin Details Page: Fix tabs not loading on hard refresh (#112915)
* don't show nav children while plugin config is loading

* add tests
2025-10-28 07:32:35 +01:00
Moustafa Baiou
ce246936c4 Alerting: Surface remote AM silence creation errors properly
When creating silences in remote Alertmanager instances, all 4xx errors were treated as 500s.

This change ensures that 4xx errors are properly surfaced as bad payload errors, allowing callers to handle them appropriately.
2025-10-27 14:21:46 -04:00
Matias Chomicki
555deb5d28 Logs panel: Respect selected fields for downloading logs (#111753)
* txt: download selected fields

* csv: download selected fields

* json: download selected fields

* Address lint issues

* Update tests

* Update tests

* Update suppressions
2025-10-27 18:34:14 +01:00
Jo
d216d75fbb Access: Add CoreRole/Role Delete/Update hooks for OpenFGA (#112839)
* Add delete and update hooks for roles/core roles

no need to capture non reference types

small cleanup on vars

* fix ticket priming in hooks

* fix ticket priming in hooks

* Revert "fix ticket priming in hooks"

This reverts commit f8e953ca09.

* use old testing blocks

* protect runtime obj in go func

* update test for correctness

* separate files for test correctness. fix leaking goroutines in go tests

* go workspace fixes

* attribute owner

* clean up go mod
2025-10-27 17:20:59 +00:00
Paul Marbach
edef69fdc8 Canvas: Allow non-icon bg image fields (#112308)
* Canvas: Allow non-icon bg image fields

* add tests
2025-10-27 12:24:26 -04:00
Austin Pond
bf65c43783 Apps: Add Example App to ./apps (#112069)
* [API Server] Add Example App for reference use.

* Remove Printlns.

* Upgrade app-sdk to v0.46.0, update apps to handle breaking changes.

* Only start the reconciler for the example app if the v1alpha1 API version is enabled.

* Some comment doc updates.

* Run make update-workspace

* Set codeowner for /apps/example

* Run make gofmt and make update-workspace

* Run prettier on apps/example/README.md

* Add COPY apps/example to Dockerfile

* Add an authorizer to the example app.

* Fix import ordering.

* Update apps/example/kinds/manifest.cue

Co-authored-by: Owen Diehl <ow.diehl@gmail.com>

* Run make update-workspace

* Re-run make gen-go for enterprise import updates

* Run make update-workspace

---------

Co-authored-by: Owen Diehl <ow.diehl@gmail.com>
2025-10-27 12:01:10 -04:00
ksemtinimahmoud
d25f5199c7 Docs: Fix incorrect label in recording rules documentation (#111464)
* Fix incorrect label: 'New Grafana recording rule' → 'New Data source recording rule'

* lowercase
2025-10-27 15:29:12 +00:00
renovate-sh-app[bot]
9c8a13c8c8 chore(deps): update dependency nanoid to v5.1.6 (#113040)
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | nanoid  | 5.1.5 | 5.1.6 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-27 15:23:37 +00:00
Bogdan Matei
e91144950b Dashboard: Fix eslint suppressions in conditional rendering (#113045) 2025-10-27 15:23:03 +00:00
Yuri Tseretyan
5673d0b532 Alerting: Skip logging in case of invalid receivers during auto generating policies (#111838)
* skip logging of invalid receivers during autogen
* log warn instead of error
2025-10-27 11:03:06 -04:00
Ryan McKinley
6783c7f998 Dashboards: Remove unused version types (#113036) 2025-10-27 09:12:31 -04:00
Samarth Bagga
f9fb2cfd50 Flame Graph: Anchor exact match when clicking a table symbol in search (#111101)
* fixed #110680

* Edit

* Fixed test

---------

Co-authored-by: Samarth Bagga <samarth.bagga@meesho.com>
2025-10-27 14:03:19 +01:00
Gilles De Mey
7b2ea9a735 Alerting: Rename triage to alerts (#113039) 2025-10-27 12:47:51 +00:00
Kyle Brandt
0e9a3881e7 SQL Expressions: (Chore) Update GMS (go-mysql-server) dependency (#112289)
- Added gms_pure_go build tags to disable cgo - (cgo was added to GMS since we last updated it)
- Docs note on regex limitations

---------

Co-authored-by: Matheus Macabu <macabu.matheus@gmail.com>
2025-10-27 08:22:51 -04:00
Georges Chaudy
bc9540fadb kvstore: use batch delete to cleanup old events (#112737)
* use batchdelete for cleaning up old events

* comment
2025-10-27 12:27:31 +01:00
Alex Khomenko
b53e3ac860 Provisioning: Update pulling disabled badge (#112832)
* Provisioning: Update pulling disabled badge

* Move props

* Use early return
2025-10-27 11:03:22 +00:00
Levente Balogh
5a5aa18570 Dashboard Controls: Address the spacing between switch variables (#112819)
fix: adjust switch variable height in dashboard-controls menu
2025-10-27 11:40:47 +01:00
renovate-sh-app[bot]
7cd3e5dc54 chore(deps): update dependency @reduxjs/toolkit to v2.9.1 (#112975)
| datasource | package          | from  | to    |
| ---------- | ---------------- | ----- | ----- |
| npm        | @reduxjs/toolkit | 2.9.0 | 2.9.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-27 09:57:37 +00:00
Sonia Aguilar
3c57a1880c Alerting: Fix enrichment tab to be rendered only for grafana alerting rules (#113030)
fix enrichment tab to be rendered only for grafana alerting rules
2025-10-27 10:54:50 +01:00
Hugo Häggmark
4f2abe185c Chore: Replace deprecated i18next-parser (#112512)
* chore: replace deprecated i18next-parser

* chore: bump i18next-cli to 1.11.6

* chore: revert translation files

* chore: bumps to i18next-cli 1.11.9

* Trigger build

* chore: revert translations files

* chore: bump i18next-cli

* chore: changes after yarn i18n-extract

* chore: revert translation files

* chore: bump i18next-cli to 1.11.12

* chore: fix select space

* chore: add i18next to packages

* chore: add i18next-cli to plugin dev deps

* chore: fix yarn lock
2025-10-27 10:38:31 +01:00
Tobias Skarhed
f76a4885ec PanelStateWrapper: Add error boundary name (#112841)
Add error boundary name to PanelStateWrapper
2025-10-27 10:04:37 +01:00
Ryan McKinley
5df4a3b9a3 Chore: Update app-sdk to v0.48.1 (#113023) 2025-10-27 09:34:26 +03:00
Hugo Häggmark
6a15f40a85 Plugins: Remove plugin load failure logging for unauth users (#112940) 2025-10-27 05:48:31 +01:00
Kevin Minehart
cc4a6cff64 CI: End process if e2e tests fail in daggerbuild (#113013) 2025-10-25 08:50:04 -06:00
grafana-pr-automation[bot]
b9b0ff1219 I18n: Download translations from Crowdin (#113012)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-25 00:39:21 +00:00
Isabel Matwawana
815ced0f70 Docs: Update saved queries permissions for Viewer role (#112978) 2025-10-24 15:13:47 -04:00
Paul Marbach
1bf0861738 TimeSeries: Tests for x-axis units (#112956)
* more panels

* fix

* TimeSeries: Tests for x-axis units

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
2025-10-24 15:05:13 -04:00
Paul Marbach
5656f62cf4 Gauge: Update codeownership for RadialGauge grafana/ui component (#112972) 2025-10-24 15:04:49 -04:00
Paul Marbach
eabb348152 StateTimeline: Comment and metadata cleanup (#112960) 2025-10-24 15:04:33 -04:00
Mihai Turdean
f019d58a99 [grafana-iam] Add resourcePermissions hooks to sync write to Zanzana on UPDATE and DELETE (#112767) 2025-10-24 11:45:24 -06:00
Andreas Christou
d2dbb816b2 Graphite: Fix legacy response unmarshalling (#112968)
Fix legacy response unmarshalling
2025-10-24 12:28:04 -05:00
Jacob Valdez
e23ba8aa6c docs: Fix broken refs in single stack access doc (#112903) 2025-10-24 11:45:49 -05:00
Josh Hunt
59bfb44a50 FS: Apply versionString in help menu in frontend (#112958)
Set version in help menu in the frontend instead
2025-10-24 17:42:42 +01:00
Leon Sorokin
9b7c68c994 TimeSeries: Allow custom time units on x-axis (#112913)
* more panels

* fix
2025-10-24 12:35:52 -04:00
renovate-sh-app[bot]
a7349af934 chore(deps): update dependency @openfeature/web-sdk to v1.6.2 (#112923)
| datasource | package              | from  | to    |
| ---------- | -------------------- | ----- | ----- |
| npm        | @openfeature/web-sdk | 1.6.1 | 1.6.2 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-24 17:34:24 +01:00
Leon Sorokin
adcc634db6 Histogram: Properly handle sparse heatmap-cells frames (#112907)
* Histogram: Properly handle sparse heatmap-cells frames

* add test

* fix crash with float bounds and rounding

* tweak comment

* add test for float bounds
2025-10-24 12:19:49 -04:00
Sergej-Vlasov
e818234a4e E2E: Skip flaky test (#112964)
skip falky test
2025-10-24 16:12:14 +00:00
Denis Vodopianov
81683d554d chore : Deprecating FeatureToggles.IsEnabledGlobally (#112885)
* add deprecation on featuremgmt.IsEnabledGlobally

* add nolint reason

* add reasonable deprecation message

* remove junk edits

* add more nolints

* addressing review comments

* Update pkg/services/featuremgmt/models.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

---------

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2025-10-24 12:02:53 -04:00
Ieva
4cea71ee73 Access Control: Fix the permission checks for saving/updating/deleting annotations (#112953)
pass in the correct scope for evaluating annotation permissions on a dashboard
2025-10-24 16:11:58 +01:00
Paul Marbach
3f02f50cf9 StateTimeline: Complete E2E tests and add simple StateTimelineTooltip unit tests (#112901)
* StateTimeline: E2E tests for basic rendering, no data, and tooltip interactions

* Add tests for StateTimelineTooltip sub-component

* Remove unused import from state-timeline.spec.ts

* updates from PR review
2025-10-24 10:45:48 -04:00
Alex Khomenko
f7eac7f7ba Provisioning: Fix badge for classic provisioning (#112954) 2025-10-24 14:37:06 +00:00
Tom Ratcliffe
2362f9bd6b API Clients: Fix exports for correlations API (#112950) 2025-10-24 14:19:32 +00:00
Tom Ratcliffe
5ffff1e39d Teams: Refactor tests and tidy up reducer (#112850) 2025-10-24 14:14:12 +00:00
Alex Khomenko
bda35611f1 Dashboard v2: Use valid default timestamp (#112928) 2025-10-24 14:00:19 +00:00
Sonia Aguilar
681f27e6b3 Alerting: Create alertingAlertRuleFormSchema in restrictedGrafanaApis (#112794)
* create navigateToAlertFormSchemaApi in restrictedGrafanaApis and use it in formDefaults.ts

* update alertingSchemaApi

* fix test

* move alertingSchemaApi.ts and the alerting section in README.md to a new alerting folder

* move cloud rules form schema outside restrictedGrafanaApis

* remove cloud fields in schema and use values from existing enums for some fields

* refactor RestrictedGrafanaApisContextTypeInternalenrichment type adding a high level entry for alerting

* refactor: change naming and come back to one single level in the RestrictedGrafanaApisContextType

* update README.md
2025-10-24 15:47:52 +02:00
Matheus Macabu
2c6c564c18 Secrets: Add decrypter to decrypt duration metric (#112942) 2025-10-24 15:23:54 +02:00
Oscar Kilhed
c1e308f61e Dynamic dashboards: Clarify conditional rendering disabled tooltip (#112843)
* change conditional rendering copy

* update link

* small fix
2025-10-24 13:05:52 +00:00
Andrej Ocenas
2f22073ad8 Plugin navigation: Fix active nav item selection when there are more than 10 items in a group (#112886)
Fix passing depth in map function
2025-10-24 15:04:24 +02:00
Tom Ratcliffe
546d3ec313 Dashboard Picker: Update to use correct search + dashboards APIs (#112341) 2025-10-24 14:00:16 +01:00
Ashley Harrison
466f1b8271 Frontend service: Improve logging to include hostname/traceid (#112889)
improve frontend service logging to include hostname/traceid
2025-10-24 13:55:44 +01:00
Jason Marshall
83ec5e6789 Onboarding issues I noticed (#105211)
* Fix inconsistency in command instructions between the Backend and Frontend section.

* Increase ulimit advice.

On a bare system I'm getting almost 6200 files from the given `find` command.
It's clear that this project has grown considerably since this line was added
to the onboarding docs.

* starting grafana is not explained in the devenv readme.
2025-10-24 14:54:30 +02:00
Josh Hunt
5ee636d47d FS: Fix tempo-init not working in devenv (#112938) 2025-10-24 12:42:29 +00:00
Hugo Häggmark
be2944ea16 Chore: Add Bytespider to frontend bot list (#112941) 2025-10-24 12:41:10 +00:00
Paul Marbach
027eeb99e1 StateTimeline: Fix color display in tooltip (#112878) 2025-10-24 08:40:56 -04:00
Gilles De Mey
2a3b3c0003 Alerting: Promote the policy matching functions to stable (#112931) 2025-10-24 12:36:23 +00:00
Todd Treece
dc77da11cf Plugins: API sync (#112452) 2025-10-24 08:09:26 -04:00
Jo
8b12bbcc55 AccessControl: Include hidden roles in service account role display (#112924)
* AccessControl: Include hidden roles in service account role fetches

Add includeHidden=true parameter to role API calls to ensure service accounts
with hidden roles assigned properly display those roles in the UI.

Previously, service accounts with only hidden roles would appear to have no
roles assigned in the UI, even though the API showed they had roles when
queried with includeHidden=true.

This change affects both:
- Bulk role fetching for the service accounts list
- Individual user role fetching used by the role picker

* format
2025-10-24 14:04:13 +02:00
Jack Baldry
e48eaa567e Restructure IAM documentation (#112929)
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
2025-10-24 12:54:59 +01:00
Tom Ratcliffe
5b717af829 Codeowners: Add search nav org team to codeowners for navtree (#112918) 2025-10-24 11:43:14 +01:00
Tom Ratcliffe
e21c0d4724 Folders: Simplify FolderFilter and use GrafanaSearcher (#112639) 2025-10-24 11:42:36 +01:00
Sven Grossmann
f03125279a Loki: Fix merging responses would merge null notices (#112920)
* Loki: Fix merging responses would merge `null` notices

* fix tests
2025-10-24 10:28:39 +00:00
Josh Hunt
bb6d7d02c7 FS: Call IndexDataHooks for custom version string (#112670)
* Add enterprise hooks

* wip...

* undo

* update wire gen

* remove old hook thing

* move build info into seperate func

* align fs context middleware with grafana, setting SignedInUser

* Call IndexDataHooks to get modified build info

* update tests

* go workspace

* idk, reset workspace files or whatever

* conditionally mount license

* support loading decoupled plugins from cdn

---------

Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2025-10-24 11:04:44 +01:00
Jo
71d10a3fa3 FolderPermissions: Return 404 error when folder does not exist instead of 500 (#112919)
* AccessControl: Improve folder permissions error handling

- Add proper error type handling for folder permission checks
- Convert dashboards.ErrFolderNotFound to folder.ErrFolderNotFound
- Preserve errutil.Error types when returned
- Wrap unhandled errors with new ErrFolderUnhandledError for better error tracking

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update pkg/services/accesscontrol/ossaccesscontrol/folder.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-24 09:50:38 +00:00
Matias Chomicki
df4922ea78 mergeResponses: use map to find frames to combine (#112855)
* mergeResponses: use map to find frames to combine

* Remove console
2025-10-24 11:25:02 +02:00
Kevin Minehart
e7a49fc472 CI: Windows builds with CGO cross-compiler toolchain (#112922)
* CI: Windows builds with CGO cross-compiler toolchain

* fix comments
2025-10-24 09:23:14 +00:00
Mihai Doarna
4bdee91501 IAM: Implement the delete method for team bindings (#112844)
* implement the delete method for team bindings

* add integration test

* remove team binding search from legacy store
2025-10-24 11:58:13 +03:00
Gilles De Mey
5f9ed73f82 Alerting: Mark triage as new in the navigation (#112887) 2025-10-24 10:54:25 +02:00
grafana-pr-automation[bot]
0fe06800d5 I18n: Download translations from Crowdin (#112911)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-24 08:46:41 +00:00
renovate-sh-app[bot]
6f82e44283 chore(deps): update dependency @openfeature/core to v1.9.1 (#112896)
| datasource | package           | from  | to    |
| ---------- | ----------------- | ----- | ----- |
| npm        | @openfeature/core | 1.9.0 | 1.9.1 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-24 09:41:55 +01:00
Gareth
20a11e0bc0 Tempo error source fix (#112916)
fix tempo error source
2025-10-24 16:58:58 +09:00
Marcus Andersson
52cd4d434f Bugfix: Adding support for resolving panel plugins that expose a Promise<PanelPlugin> (#112899)
Fixed issue where panel plugin module returns an async function that resolves a panel plugin.
2025-10-24 08:31:55 +02:00
Alex Khomenko
f7748676b3 Provisioning: Display manager kind (#112831)
* Provisioning: Display manager kind

* Show repo id

* Show repository name
2025-10-24 08:02:08 +03:00
Adam Yeats
df305c111e Elasticsearch: Update documentation to state that Elastic Cloud Serverless is not supported (#112898)
Elasticsearch: Update documentation to state Elastic Cloud Serverless is not supported
2025-10-23 22:04:36 +01:00
Larissa Wandzura
64f6bd5348 DOCS: Added a warning about using timezone with macros in MSSQL (#112900)
added warning about using timezone with macros in MSSQL
2025-10-23 16:03:58 -05:00
Juan Cabanas
89ca1dd0e4 DashboardLibrary: Fix border radius box (#112905) 2025-10-23 20:45:09 +00:00
renovate-sh-app[bot]
7ecb057414 chore(deps): update dependency @formatjs/intl-durationformat to v0.7.6 (#112884)
| datasource | package                       | from  | to    |
| ---------- | ----------------------------- | ----- | ----- |
| npm        | @formatjs/intl-durationformat | 0.7.4 | 0.7.6 |

Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
2025-10-23 17:06:41 +01:00
Matias Chomicki
34cf970b54 Logs volume: set line width to 0 (#112881) 2025-10-23 17:36:51 +02:00
Yunwen Zheng
ddc5ae6f4d Git Sync UI a11y finding fixes (#112751)
* ProgressBar: progressbar nodes must have accsible name fix

* BrowseActions: Bulk move and delete drawwer a11y fix

* FolderActionsButton: Move and delete drawer a11y fix

* ConfigForm: a11y fix missing id

* GettingStarted: Skip img alt since its decorative

* JobContent: heading a11y fix

* StatusBadge: add displayOnly prop to avoid cursor pointer display when its not necessary

* RepositoryTypeCards: Card missing discernible text

* i18n

* input id fix
2025-10-23 11:25:26 -04:00
Gilles De Mey
62c5df36d6 Alerting: Always initialize an empty slice of routes for the routingtree (#112880) 2025-10-23 17:21:13 +02:00
Ashley Harrison
c74af4f3d4 Modal: Fix button focus being clipped (#112867)
add padding to modalbuttonrow
2025-10-23 16:18:30 +01:00
Gábor Farkas
87f40c65e4 datasources: forward the x-forwarded-for header (#112863) 2025-10-23 17:14:50 +02:00
Yuri Tseretyan
8b7f119cad Alerting: Provisioning to fix contact point type on save (#112246)
fix contact point type on create\update
2025-10-23 11:11:36 -04:00
5520 changed files with 1060527 additions and 76660 deletions

View File

@@ -1,6 +1,6 @@
module air
go 1.25.3
go 1.25.5
tool github.com/air-verse/air
@@ -21,8 +21,8 @@ require (
github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.8.0 // indirect
github.com/tdewolff/parse/v2 v2.8.1 // indirect
golang.org/x/net v0.45.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/text v0.31.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
)

View File

@@ -167,19 +167,19 @@ golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b h1:QoALfVG9rhQ/M7vYDScfPdWjG
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ=
golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w=
golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=

View File

@@ -1,6 +1,6 @@
module bra
go 1.25.3
go 1.25.5
tool github.com/unknwon/bra
@@ -17,6 +17,6 @@ require (
github.com/unknwon/com v1.0.1 // indirect
github.com/unknwon/log v0.0.0-20200308114134-929b1006e34a // indirect
github.com/urfave/cli v1.22.16 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/sys v0.38.0 // indirect
gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
)

View File

@@ -56,8 +56,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20191020152052-9984515f0562/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -1,6 +1,6 @@
module cog
go 1.25.3
go 1.25.5
tool github.com/grafana/cog/cmd/cli
@@ -40,11 +40,11 @@ require (
github.com/spf13/pflag v1.0.6 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/yalue/merged_fs v1.3.0 // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/net v0.45.0 // indirect
golang.org/x/mod v0.29.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/tools v0.36.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/tools v0.38.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -85,20 +85,20 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/yalue/merged_fs v1.3.0 h1:qCeh9tMPNy/i8cwDsQTJ5bLr6IRxbs6meakNE5O+wyY=
github.com/yalue/merged_fs v1.3.0/go.mod h1:WqqchfVYQyclV2tnR7wtRhBddzBvLVR83Cjw9BKQw0M=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

View File

@@ -1,6 +1,6 @@
module cue
go 1.25.3
go 1.25.5
tool cuelang.org/go/cmd/cue
@@ -25,13 +25,13 @@ require (
github.com/spf13/pflag v1.0.6 // indirect
github.com/stretchr/testify v1.10.0 // indirect
github.com/tetratelabs/wazero v1.6.0 // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/net v0.45.0 // indirect
golang.org/x/mod v0.29.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/tools v0.36.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/tools v0.38.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -53,20 +53,20 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tetratelabs/wazero v1.6.0 h1:z0H1iikCdP8t+q341xqepY4EWvHEw8Es7tlqiVzlP3g=
github.com/tetratelabs/wazero v1.6.0/go.mod h1:0U0G41+ochRKoPKCJlh0jMg1CHkyfK8kDqiirMmKY8A=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

View File

@@ -1,6 +1,6 @@
module golangci-lint
go 1.25.3
go 1.25.5
tool github.com/golangci/golangci-lint/v2/cmd/golangci-lint
@@ -198,12 +198,12 @@ require (
go.uber.org/zap v1.27.0 // indirect
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
golang.org/x/exp/typeparams v0.0.0-20250911091902-df9299821621 // indirect
golang.org/x/mod v0.28.0 // indirect
golang.org/x/net v0.45.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/tools v0.37.0 // indirect
golang.org/x/mod v0.29.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/tools v0.38.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
honnef.co/go/tools v0.6.1 // indirect

View File

@@ -481,8 +481,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -496,8 +496,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -507,8 +507,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -529,8 +529,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -545,8 +545,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
@@ -559,8 +559,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=

View File

@@ -1,6 +1,6 @@
module jb
go 1.25.3
go 1.25.5
tool github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb
@@ -15,6 +15,6 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/stretchr/testify v1.10.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/sys v0.38.0 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
)

View File

@@ -54,8 +54,8 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -1,6 +1,6 @@
module lefthook
go 1.25.3
go 1.25.5
tool github.com/evilmartians/lefthook
@@ -43,9 +43,9 @@ require (
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/term v0.35.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/term v0.37.0 // indirect
golang.org/x/text v0.31.0 // indirect
gopkg.in/alessio/shellescape.v1 v1.0.0-20170105083845-52074bc9df61 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect

View File

@@ -91,14 +91,14 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
gopkg.in/alessio/shellescape.v1 v1.0.0-20170105083845-52074bc9df61 h1:8ajkpB4hXVftY5ko905id+dOnmorcS2CHNxxHLLDcFM=
gopkg.in/alessio/shellescape.v1 v1.0.0-20170105083845-52074bc9df61/go.mod h1:IfMagxm39Ys4ybJrDb7W3Ob8RwxftP0Yy+or/NVz1O8=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -1,6 +1,6 @@
module swagger
go 1.25.3
go 1.25.5
tool github.com/go-swagger/go-swagger/cmd/swagger
@@ -51,12 +51,12 @@ require (
github.com/toqueteos/webbrowser v1.2.0 // indirect
go.mongodb.org/mongo-driver v1.16.1 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.42.0 // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/tools v0.36.0 // indirect
golang.org/x/crypto v0.45.0 // indirect
golang.org/x/mod v0.29.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/tools v0.38.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -101,19 +101,19 @@ go.mongodb.org/mongo-driver v1.16.1 h1:rIVLL3q0IHM39dvE+z2ulZLp9ENZKThVfuvN/IiN4
go.mongodb.org/mongo-driver v1.16.1/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

10
.gitattributes vendored
View File

@@ -1 +1,11 @@
* text=auto eol=lf
*.gen.ts linguist-generated
*_gen.ts linguist-generated
*_gen.go linguist-generated
*_gen.csv linguist-generated
*_gen.json linguist-generated
**/openapi_snapshots/*.json linguist-generated
apps/**/pkg/apis/*_manifest.go linguist-generated
public/openapi3.json linguist-generated
public/api-merged.json linguist-generated
public/api-enterprise-spec.json linguist-generated

81
.github/CODEOWNERS vendored
View File

@@ -41,6 +41,8 @@
/docs/sources/ @irenerl24
/docs/sources/alerting/ @JohnnyK-Grafana
/docs/sources/as-code/ @urbiz-grafana
/docs/sources/developer-resources/ @urbiz-grafana
/docs/sources/datasources/ @lwandz13
/docs/sources/upgrade-guide/ @jtvdez
/docs/sources/whatsnew/ @jtvdez
@@ -75,18 +77,20 @@
/.air.toml @macabu
# Git Sync / App Platform Provisioning
/apps/provisioning/ @grafana/grafana-git-ui-sync-team
/pkg/operators @grafana/grafana-git-ui-sync-team
/public/app/features/provisioning @grafana/grafana-git-ui-sync-team
/pkg/registry/apis/provisioning @grafana/grafana-git-ui-sync-team
/pkg/tests/apis/provisioning @grafana/grafana-git-ui-sync-team
/apps/provisioning/ @grafana/grafana-app-platform-squad
/pkg/operators @grafana/grafana-app-platform-squad
/public/app/features/provisioning @grafana/grafana-search-navigate-organise
/pkg/registry/apis/provisioning @grafana/grafana-app-platform-squad
/pkg/tests/apis/provisioning @grafana/grafana-app-platform-squad
# Git Sync frontend owned by frontend team as a whole.
/apps/alerting/ @grafana/alerting-backend
/apps/quotas/ @grafana/grafana-search-and-storage
/apps/dashboard/ @grafana/grafana-app-platform-squad @grafana/dashboards-squad
/apps/folder/ @grafana/grafana-app-platform-squad
/apps/playlist/ @grafana/grafana-app-platform-squad
/apps/plugins/ @grafana/plugins-platform-backend
/apps/collections/ @grafana/grafana-app-platform-squad @grafana/grafana-frontend-platform
/apps/preferences/ @grafana/grafana-app-platform-squad @grafana/grafana-frontend-platform
/apps/shorturl/ @grafana/sharing-squad
/apps/secret/ @grafana/grafana-operator-experience-squad
@@ -96,7 +100,9 @@
/apps/iam/ @grafana/access-squad
/apps/sdk.mk @grafana/grafana-app-platform-squad
/apps/correlations @grafana/datapro
/apps/example/ @grafana/grafana-app-platform-squad
/apps/logsdrilldown/ @grafana/observability-logs
/apps/annotation/ @grafana/grafana-backend-services-squad
/pkg/api/ @grafana/grafana-backend-group
/pkg/apis/ @grafana/grafana-app-platform-squad
/pkg/apis/query @grafana/grafana-datasources-core-services
@@ -150,7 +156,7 @@
/pkg/promlib @grafana/oss-big-tent
/pkg/storage/ @grafana/grafana-search-and-storage
/pkg/storage/secret/ @grafana/grafana-operator-experience-squad
/pkg/services/annotations/ @grafana/grafana-search-and-storage
/pkg/services/annotations/ @grafana/grafana-backend-services-squad
/pkg/services/apikey/ @grafana/identity-squad
/pkg/services/cleanup/ @grafana/grafana-backend-group
/pkg/services/contexthandler/ @grafana/grafana-backend-group @grafana/grafana-app-platform-squad
@@ -166,7 +172,7 @@
/pkg/services/kmsproviders/ @grafana/grafana-operator-experience-squad
/pkg/services/licensing/ @grafana/grafana-operator-experience-squad
/pkg/services/dsquerierclient/ @grafana/grafana-datasources-core-services
/pkg/services/navtree/ @grafana/grafana-backend-group
/pkg/services/navtree/ @grafana/grafana-backend-group @grafana/grafana-search-navigate-organise
/pkg/services/notifications/ @grafana/grafana-backend-group
/pkg/services/org/ @grafana/grafana-backend-group
/pkg/services/playlist/ @grafana/grafana-app-platform-squad
@@ -180,7 +186,8 @@
/pkg/services/search/ @grafana/grafana-search-and-storage
/pkg/services/searchusers/ @grafana/grafana-search-and-storage
/pkg/services/secrets/ @grafana/grafana-operator-experience-squad
/pkg/services/shorturls/ @grafana/grafana-backend-group
/pkg/services/setting/ @grafana/grafana-backend-services-squad
/pkg/services/shorturls/ @grafana/sharing-squad
/pkg/services/sqlstore/ @grafana/grafana-search-and-storage
/pkg/services/ssosettings/ @grafana/identity-squad
/pkg/services/star/ @grafana/grafana-search-and-storage
@@ -198,6 +205,7 @@
/pkg/tests/apis/features @grafana/grafana-backend-services-squad
/pkg/tests/apis/folder @grafana/grafana-search-and-storage
/pkg/tests/apis/iam @grafana/identity-access-team
/pkg/tests/apis/shorturl @grafana/sharing-squad
/pkg/tests/api/correlations/ @grafana/datapro
/pkg/tsdb/grafanads/ @grafana/grafana-backend-group
/pkg/tsdb/opentsdb/ @grafana/partner-datasources
@@ -224,6 +232,7 @@
/devenv/datasources.yaml @grafana/grafana-backend-group
/devenv/datasources_docker.yaml @grafana/grafana-backend-group
/devenv/dev-dashboards-without-uid/ @grafana/dashboards-squad
/devenv/scopes/ @grafana/grafana-operator-experience-squad
/devenv/dev-dashboards/annotations @grafana/dataviz-squad
/devenv/dev-dashboards/migrations @grafana/dataviz-squad
@@ -240,6 +249,7 @@
/devenv/dev-dashboards/panel-library @grafana/dataviz-squad
/devenv/dev-dashboards/panel-piechart @grafana/dataviz-squad
/devenv/dev-dashboards/panel-stat @grafana/dataviz-squad
/devenv/dev-dashboards/panel-status-history @grafana/dataviz-squad
/devenv/dev-dashboards/panel-table @grafana/dataviz-squad
/devenv/dev-dashboards/panel-timeline @grafana/dataviz-squad
/devenv/dev-dashboards/panel-timeseries @grafana/dataviz-squad
@@ -249,7 +259,6 @@
/devenv/dev-dashboards/all-panels.json @grafana/dataviz-squad
/devenv/dev-dashboards/dashboards.go @grafana/dataviz-squad
/devenv/dev-dashboards/home.json @grafana/dataviz-squad
/devenv/dev-dashboards/datasource-elasticsearch/ @grafana/partner-datasources
/devenv/dev-dashboards/datasource-opentsdb/ @grafana/partner-datasources
/devenv/dev-dashboards/datasource-influxdb/ @grafana/partner-datasources
@@ -413,8 +422,8 @@
/crowdin.yml @grafana/grafana-frontend-platform
/public/locales/ @grafanabot
/public/locales/i18next-parser.config.cjs @grafana/grafana-frontend-platform
/public/locales/i18next-parser-enterprise.config.cjs @grafana/grafana-frontend-platform
i18next.config.ts @grafana/grafana-frontend-platform
/public/locales/enterprise/i18next.config.ts @grafana/grafana-frontend-platform
/public/app/core/internationalization/ @grafana/grafana-frontend-platform
/e2e/ @grafana/grafana-frontend-platform
/e2e-playwright/cloud-plugins-suite/ @grafana/partner-datasources
@@ -471,22 +480,12 @@
/e2e-playwright/fixtures/long-trace-response.json @grafana/observability-traces-and-profiling
/e2e-playwright/fixtures/tempo-response.json @grafana/oss-big-tent
/e2e-playwright/fixtures/prometheus-response.json @grafana/datapro
/e2e-playwright/panels-suite/canvas-scene.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/ @grafana/dataviz-squad
/e2e-playwright/panels-suite/dashlist.spec.ts @grafana/grafana-search-navigate-organise
/e2e-playwright/panels-suite/datagrid-data-change.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/datagrid-editing-features.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/frontend-sandbox-panel.spec.ts @grafana/plugins-platform-frontend
/e2e-playwright/panels-suite/geomap-layer-types.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/geomap-map-controls.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/geomap-spatial-operations-transform.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/panelEdit_base.spec.ts @grafana/dashboards-squad
/e2e-playwright/panels-suite/panelEdit_queries.spec.ts @grafana/dashboards-squad
/e2e-playwright/panels-suite/panelEdit_transforms.spec.ts @grafana/datapro
/e2e-playwright/panels-suite/table-footer.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/table-kitchenSink.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/table-markdown.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/table-sparkline.spec.ts @grafana/dataviz-squad
/e2e-playwright/panels-suite/table-utils.ts @grafana/dataviz-squad
/e2e-playwright/plugin-e2e/ @grafana/oss-big-tent @grafana/partner-datasources
/e2e-playwright/plugin-e2e/plugin-e2e-api-tests/ @grafana/plugins-platform-frontend
/e2e-playwright/smoke-tests-suite/ @grafana/grafana-frontend-platform
@@ -503,6 +502,7 @@
/e2e-playwright/various-suite/frontend-sandbox-app.spec.ts @grafana/plugins-platform-frontend
/e2e-playwright/various-suite/frontend-sandbox-datasource.spec.ts @grafana/plugins-platform-frontend
/e2e-playwright/various-suite/gauge.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/grafana-datasource-random-walk.spec.ts @grafana/grafana-frontend-platform
/e2e-playwright/various-suite/graph-auto-migrate.spec.ts @grafana/dataviz-squad
/e2e-playwright/various-suite/inspect-drawer.spec.ts @grafana/dashboards-squad
/e2e-playwright/various-suite/keybinds.spec.ts @grafana/grafana-frontend-platform
@@ -554,6 +554,7 @@
/packages/grafana-data/src/geo/ @grafana/dataviz-squad
/packages/grafana-data/src/monaco/ @grafana/partner-datasources
/packages/grafana-data/src/panel/ @grafana/dashboards-squad
/packages/grafana-data/src/panel/suggestions/ @grafana/dataviz-squad
/packages/grafana-data/src/query/ @grafana/grafana-datasources-core-services
/packages/grafana-data/src/rbac/ @grafana/access-squad
/packages/grafana-data/src/table/ @grafana/dataviz-squad
@@ -562,6 +563,7 @@
/packages/grafana-data/src/transformations/ @grafana/datapro
/packages/grafana-data/src/types/ @grafana/grafana-frontend-platform
/packages/grafana-data/src/types/scopes.ts @grafana/grafana-operator-experience-squad
/packages/grafana-data/src/types/suggestions.ts @grafana/dataviz-squad
/packages/grafana-data/src/utils/__snapshots__/ @grafanabot
/packages/grafana-data/src/utils/anyToNumber.ts @grafana/grafana-frontend-platform
/packages/grafana-data/src/utils/arrayUtils* @grafana/grafana-frontend-platform
@@ -719,10 +721,11 @@
/packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/DataLinks/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/Gauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/RadialGauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/PluginSignatureBadge/ @grafana/plugins-platform-frontend
/packages/grafana-ui/src/components/Sparkline/ @grafana/grafana-frontend-platform @grafana/app-o11y-visualizations
/packages/grafana-ui/src/components/Sparkline/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/Table/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/Table/Cells/SparklineCell.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations
/packages/grafana-ui/src/components/Table/Cells/SparklineCell.tsx @grafana/dataviz-squad
/packages/grafana-ui/src/components/uPlot/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/ValuePicker/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/VizLayout/ @grafana/dataviz-squad
@@ -743,6 +746,15 @@
# @grafana/api-clients
/packages/grafana-api-clients/ @grafana/grafana-frontend-platform @grafana/grafana-search-navigate-organise
/packages/grafana-api-clients/src/clients/rtkq/advisor/ @grafana/plugins-platform-frontend
/packages/grafana-api-clients/src/clients/rtkq/correlations/ @grafana/datapro
/packages/grafana-api-clients/src/clients/rtkq/dashboard/ @grafana/dashboards-squad
/packages/grafana-api-clients/src/clients/rtkq/folder/ @grafana/grafana-search-navigate-organise
/packages/grafana-api-clients/src/clients/rtkq/iam/ @grafana/access-squad @grafana/identity-squad
/packages/grafana-api-clients/src/clients/rtkq/logsdrilldown/ @grafana/observability-logs
/packages/grafana-api-clients/src/clients/rtkq/preferences/ @grafana/plugins-platform-frontend
/packages/grafana-api-clients/src/clients/rtkq/provisioning/ @grafana/grafana-search-navigate-organise
/packages/grafana-api-clients/src/clients/rtkq/shorturl/ @grafana/sharing-squad
# root files, mostly frontend
/.browserslistrc @grafana/frontend-ops
@@ -794,7 +806,7 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
/public/app/core/components/ColorScale/ @grafana/dataviz-squad
/public/app/core/components/DynamicImports/ @grafana/grafana-search-navigate-organise
/public/app/core/components/EmptyListCTA/ @grafana/grafana-frontend-platform
/public/app/core/components/FolderFilter/ @grafana/sharing-squad
/public/app/core/components/FolderFilter/ @grafana/grafana-search-navigate-organise
/public/app/core/components/Footer/ @grafana/grafana-search-navigate-organise
/public/app/core/components/ForgottenPassword/ @grafana/grafana-search-navigate-organise
/public/app/core/components/Form/ @grafana/grafana-frontend-platform
@@ -836,7 +848,6 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
/public/app/core/constants.ts @grafana/grafana-frontend-platform
/public/app/core/context/ @grafana/grafana-frontend-platform
/public/app/core/copy/appNotification.ts @grafana/grafana-search-navigate-organise
/public/app/core/core.ts @grafana/grafana-frontend-platform
/public/app/core/crash/ @grafana/observability-traces-and-profiling
/public/app/core/history/ @grafana/observability-traces-and-profiling
/public/app/core/hooks/useBusEvent.ts @grafana/grafana-frontend-platform
@@ -945,6 +956,7 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
/public/app/features/notifications/ @grafana/grafana-search-navigate-organise
/public/app/features/org/ @grafana/grafana-search-navigate-organise
/public/app/features/panel/ @grafana/dashboards-squad
/public/app/features/panel/suggestions/ @grafana/dataviz-squad
/public/app/features/playlist/ @grafana/dashboards-squad
/public/app/features/plugins/ @grafana/plugins-platform-frontend
/public/app/features/profile/ @grafana/grafana-frontend-platform
@@ -983,7 +995,7 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
/public/app/plugins/panel/state-timeline/ @grafana/dataviz-squad
/public/app/plugins/panel/status-history/ @grafana/dataviz-squad
/public/app/plugins/panel/table/ @grafana/dataviz-squad
/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations
/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad
/public/app/plugins/panel/timeseries/ @grafana/dataviz-squad
/public/app/plugins/panel/trend/ @grafana/dataviz-squad
/public/app/plugins/panel/geomap/ @grafana/dataviz-squad
@@ -1072,7 +1084,7 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
eslint-suppressions.json @grafanabot
# Design system
/public/img/icons/unicons/ @grafana/design-system
/public/img/icons/unicons/ @grafana/product-design-engineering
# Core datasources
/public/app/plugins/datasource/dashboard/ @grafana/dashboards-squad
@@ -1101,6 +1113,7 @@ eslint-suppressions.json @grafanabot
# Grafana Sharing Squad
/public/app/features/dashboard-scene/sharing/ @grafana/sharing-squad
/public/app/features/dashboard/components/ShareModal/ @grafana/sharing-squad
/public/app/features/dashboard/dashgrid/DashboardLibrary/ @grafana/sharing-squad
/public/app/features/manage-dashboards/components/SnapshotListTable.tsx @grafana/sharing-squad
/pkg/services/dashboardsnapshots/ @grafana/sharing-squad
/public/app/features/explore/QueryLibrary/ @grafana/sharing-squad
@@ -1171,6 +1184,7 @@ embed.go @grafana/grafana-as-code
/pkg/registry/ @grafana/grafana-as-code
/pkg/registry/apis/ @grafana/grafana-app-platform-squad
/pkg/registry/apis/folders @grafana/grafana-search-and-storage
/pkg/registry/apis/datasource @grafana/grafana-datasources-core-services
/pkg/registry/apis/query @grafana/grafana-datasources-core-services
/pkg/registry/apis/secret @grafana/grafana-operator-experience-squad
/pkg/registry/apis/userstorage @grafana/grafana-app-platform-squad @grafana/plugins-platform-backend
@@ -1246,11 +1260,11 @@ embed.go @grafana/grafana-as-code
/.github/workflows/stale.yml @grafana/grafana-developer-enablement-squad
/.github/workflows/storybook-a11y.yml @grafana/grafana-frontend-platform
/.github/workflows/update-make-docs.yml @grafana/docs-tooling
/.github/workflows/scripts/kinds/verify-kinds.go @grafana/platform-monitoring
/.github/workflows/scripts/kinds/verify-kinds.go @grafana/grafana-app-platform-squad
/.github/workflows/scripts/create-security-branch/create-security-branch.sh @grafana/grafana-developer-enablement-squad
/.github/workflows/publish-kinds-next.yml @grafana/platform-monitoring
/.github/workflows/publish-kinds-release.yml @grafana/platform-monitoring
/.github/workflows/verify-kinds.yml @grafana/platform-monitoring
/.github/workflows/publish-kinds-next.yml @grafana/grafana-app-platform-squad
/.github/workflows/publish-kinds-release.yml @grafana/grafana-app-platform-squad
/.github/workflows/verify-kinds.yml @grafana/grafana-app-platform-squad
/.github/workflows/dashboards-issue-add-label.yml @grafana/dashboards-squad
/.github/workflows/run-schema-v2-e2e.yml @grafana/dashboards-squad
/.github/workflows/run-dashboard-search-e2e.yml @grafana/grafana-search-and-storage
@@ -1292,6 +1306,7 @@ embed.go @grafana/grafana-as-code
/.github/actionlint.yaml @grafana/grafana-developer-enablement-squad
/.github/workflows/pr-test-docker.yml @grafana/grafana-developer-enablement-squad
/.github/workflows/update-schema-types.yml @grafana/plugins-platform-frontend
/.github/workflows/defaults-ini-docs-reminder.yml @grafana/docs-tooling @jtvdez
# Generated files not requiring owner approval
/packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot
@@ -1310,7 +1325,7 @@ embed.go @grafana/grafana-as-code
/conf/provisioning/dashboards/ @grafana/dashboards-squad
/conf/provisioning/datasources/ @grafana/plugins-platform-backend
/conf/provisioning/plugins/ @grafana/plugins-platform-backend
/conf/provisioning/sample/ @grafana/grafana-git-ui-sync-team
/conf/provisioning/sample/ @grafana/grafana-app-platform-squad
# Security
/relyance.yaml @grafana/security-team

View File

@@ -31,6 +31,9 @@ outputs:
dockerfile:
description: Whether the dockerfile or self have changed in any way
value: ${{ steps.changed-files.outputs.dockerfile_any_changed || 'true' }}
devenv:
description: Whether the devenv or self have changed in any way
value: ${{ steps.changed-files.outputs.devenv_any_changed || 'true' }}
runs:
using: composite
steps:
@@ -136,6 +139,9 @@ runs:
- '.vale.ini'
- '.github/actions/change-detection/**'
- '${{ inputs.self }}'
devenv:
- 'devenv/**'
- '${{ inputs.self }}'
- name: Print all change groups
shell: bash
run: |
@@ -157,3 +163,5 @@ runs:
echo " --> ${{ steps.changed-files.outputs.docs_all_changed_files }}"
echo "Dockerfile: ${{ steps.changed-files.outputs.dockerfile_any_changed || 'true' }}"
echo " --> ${{ steps.changed-files.outputs.dockerfile_all_changed_files }}"
echo "devenv: ${{ steps.changed-files.outputs.devenv_any_changed || 'true' }}"
echo " --> ${{ steps.changed-files.outputs.devenv_all_changed_files }}"

View File

@@ -33,16 +33,48 @@ runs:
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
run: |
git clone https://x-access-token:${GH_TOKEN}@github.com/grafana/grafana-enterprise.git ../grafana-enterprise;
RETRIES="5"
for i in $(seq 1 $RETRIES); do
echo "Attempt $i to clone..."
if git clone https://x-access-token:${GH_TOKEN}@github.com/grafana/grafana-enterprise.git ../grafana-enterprise; then
echo "Clone succeeded on attempt $i"
break
fi
if [ $i -eq $RETRIES ]; then
echo "Clone failed after $RETRIES attempts, failing pipeline."
exit 1
fi
sleep "$i"
done
cd ../grafana-enterprise
if git checkout ${GITHUB_HEAD_REF}; then
echo "checked out ${GITHUB_HEAD_REF}"
elif git checkout ${GITHUB_BASE_REF}; then
echo "checked out ${GITHUB_BASE_REF}"
else
git checkout main
fi
for i in $(seq 1 $RETRIES); do
echo "Attempt $i to checkout..."
if git checkout ${GITHUB_HEAD_REF}; then
echo "checked out ${GITHUB_HEAD_REF}"
elif git checkout ${GITHUB_BASE_REF}; then
echo "checked out ${GITHUB_BASE_REF}"
else
git checkout main
fi
if [ $? -eq 0 ]; then
echo "Checkout succeeded, breaking retry loop"
break
fi
if [ $i -eq $RETRIES ]; then
echo "Checkout failed after $RETRIES attempts, failing pipeline."
exit 1
fi
sleep "$i"
done
QUIET=1 ./build.sh

View File

@@ -1226,5 +1226,13 @@
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/69"
}
},
{
"type": "label",
"name": "area/suggestions",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
}
]

View File

@@ -469,5 +469,15 @@
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/190"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/features/panel/suggestions/**/*",
"public/app/plugins/panel/**/suggestions.ts",
"packages/grafana-data/src/types/suggestions*"
],
"action": "updateLabel",
"addLabel": "area/suggestions"
}
]

View File

@@ -1,6 +1,6 @@
{
extends: ["config:recommended"],
enabledManagers: ["npm"],
enabledManagers: ["npm", "docker-compose"],
ignorePresets: [
"github>grafana/grafana-renovate-config//presets/labels",
],
@@ -26,7 +26,7 @@
"@types/slate-react", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
"@types/slate", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
],
includePaths: ["package.json", "packages/**", "public/app/plugins/**"],
includePaths: ["package.json", "packages/**", "public/app/plugins/**", "devenv/frontend-service/docker-compose.yaml"],
ignorePaths: ["emails/**", "**/mocks/**"],
labels: ["area/frontend", "dependencies", "no-changelog"],
postUpdateOptions: ["yarnDedupeHighest"],

View File

@@ -1,11 +1,11 @@
name: Add comment about adding a What's new note
name: Add comment about adding a What's new note for either what's new or breaking changes
on:
pull_request:
types: [labeled]
jobs:
add-comment:
if: ${{ ! github.event.pull_request.head.repo.fork && contains(github.event.pull_request.labels.*.name, 'add to what''s new') }}
if: ${{ ! github.event.pull_request.head.repo.fork && (contains(github.event.pull_request.labels.*.name, 'add to what''s new') || contains(github.event.pull_request.labels.*.name, 'breaking change') || contains(github.event.pull_request.labels.*.name, 'levitate breaking change')) }}
runs-on: ubuntu-latest
permissions:
pull-requests: write
@@ -13,4 +13,4 @@ jobs:
- uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2.9.4
with:
message: |
Since you've added the `Add to what's new` label, consider drafting a [What's new note](https://admin.grafana.com/content-admin/#/collections/whats-new/new) for this feature.
Since you've added the `What's New` or a breaking change label, consider drafting a [What's new note](https://admin.grafana.com/content-admin/#/collections/whats-new/new) for this feature.

View File

@@ -85,6 +85,7 @@ area/scenes
area/search
area/security
area/streaming
area/suggestions
area/templating/repeating
area/tooltip
area/transformations

View File

@@ -79,7 +79,7 @@ jobs:
make swagger-clean && make openapi3-gen
# Check if the generated specs differ from what's in the repository
for f in public/api-merged.json public/openapi3.json; do git add $f; done
for f in public/api-merged.json public/openapi3.json public/api-enterprise-spec.json; do git add $f; done
if [ -z "$(git diff --name-only --cached)" ]; then
echo "OpenAPI specs are up to date!"
else

View File

@@ -40,7 +40,7 @@ jobs:
}' "$GITHUB_EVENT_PATH" > /tmp/pr_info.json
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: pr_info
path: /tmp/pr_info.json

View File

@@ -36,7 +36,7 @@ jobs:
private_key: ${{ fromJSON(steps.secrets.outputs.secrets).APP_PEM }}
- name: Download PR info artifact
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
id: download-pr-info
with:
github-token: ${{ github.token }}

View File

@@ -8,7 +8,9 @@ name: "CodeQL checks"
on:
workflow_dispatch:
push:
branches: ['**'] # run on all branches
branches:
- main
- release-*.*.*
paths-ignore:
- '**/*.cue'
- '**/*.json'
@@ -46,7 +48,7 @@ jobs:
analyze:
needs: detect-changes
name: Analyze
runs-on: ubuntu-latest
runs-on: ubuntu-x64-large-io
continue-on-error: true # doesn't block PRs from being merged if this fails
if: github.repository == 'grafana/grafana'
@@ -74,6 +76,7 @@ jobs:
name: Set go version
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00
with:
cache: false
go-version-file: go.mod
# Initializes the CodeQL tools for scanning.

View File

@@ -193,7 +193,7 @@ jobs:
exit 1
fi
- name: store build artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: build-artifacts
path: ${{ steps.get_dir.outputs.dir }}/ci/packages/*.zip

View File

@@ -0,0 +1,24 @@
name: Remind about config documentation updates
on:
pull_request:
types: [opened]
paths:
- 'conf/defaults.ini'
jobs:
add-comment:
if: ${{ ! github.event.pull_request.head.repo.fork }}
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2.9.4
with:
message: |
Hi there! 👋 This PR modifies `conf/defaults.ini`.
If this change introduces user-facing configuration options or modifies existing ones, please remember to update [`docs/sources/setup-grafana/configure-grafana/_index.md`](https://github.com/grafana/grafana/blob/main/docs/sources/setup-grafana/configure-grafana/_index.md).
If this change is internal-only (experimental flags, internal refactoring, etc.), you can ignore this reminder.
Questions? Reach out to the #docs channel on Slack.

View File

@@ -64,7 +64,7 @@ jobs:
run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz
- name: Upload build output as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: buildPr
path: './pr/pr_built_packages.zip'
@@ -116,7 +116,7 @@ jobs:
run: zip -r ./base_built_packages.zip ./packages/**/*.tgz
- name: Upload build output as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: buildBase
path: './base/base_built_packages.zip'
@@ -141,12 +141,12 @@ jobs:
node-version-file: '.nvmrc'
- name: Get built packages from pr
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
with:
name: buildPr
- name: Get built packages from base
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
with:
name: buildBase
@@ -189,7 +189,7 @@ jobs:
PR_NUMBER: ${{ github.event.pull_request.number }}
- name: Upload check output as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: levitate
path: levitate/
@@ -225,7 +225,7 @@ jobs:
persist-credentials: false
- name: 'Download artifact'
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
with:
name: levitate

View File

@@ -33,6 +33,16 @@ jobs:
GCOM_TOKEN=ephemeral-instances-bot:gcom-token
REGISTRY=ephemeral-instances-bot:registry
GCP_SA_ACCOUNT_KEY_BASE64=ephemeral-instances-bot:sa-key
# Secrets placed in the ci/common/<path> path in Vault
common_secrets: |
DOCKERHUB_USERNAME=dockerhub:username
DOCKERHUB_PASSWORD=dockerhub:password
- name: Log in to Docker Hub to avoid unauthenticated image pull rate-limiting
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ env.DOCKERHUB_PASSWORD }}
- name: Generate a GitHub app installation token
id: generate_token

View File

@@ -57,7 +57,7 @@ jobs:
lint-go:
needs: detect-changes
if: needs.detect-changes.outputs.changed == 'true'
runs-on: ubuntu-latest
runs-on: ubuntu-x64-large-io
steps:
- uses: actions/checkout@v5
with:

View File

@@ -94,14 +94,14 @@ jobs:
id: artifact
- name: Upload grafana.tar.gz
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
retention-days: 1
name: grafana-tar-gz
path: build-dir/grafana.tar.gz
- name: Upload grafana docker tarball
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
retention-days: 1
name: grafana-docker-tar-gz
@@ -133,7 +133,7 @@ jobs:
# We want a static binary, so we need to set CGO_ENABLED=0
CGO_ENABLED=0 go build -o ./e2e-runner ./e2e/
echo "artifact=e2e-runner-${{github.run_number}}" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
id: upload
with:
retention-days: 1
@@ -159,7 +159,7 @@ jobs:
with:
registry: 'us-docker.pkg.dev'
environment: 'dev'
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: grafana-docker-tar-gz
path: .
@@ -221,10 +221,10 @@ jobs:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
name: grafana-tar-gz
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
name: ${{ needs.build-e2e-runner.outputs.artifact }}
- name: chmod +x
@@ -245,7 +245,7 @@ jobs:
run: |
set -euo pipefail
echo "suite=$(echo "$SUITE" | sed 's/\//-/g')" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
if: success() || failure()
with:
name: ${{ steps.set-suite-name.outputs.suite }}-${{ github.run_number }}
@@ -298,7 +298,7 @@ jobs:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
name: grafana-tar-gz
- name: Run E2E tests
@@ -307,7 +307,7 @@ jobs:
version: 0.18.8
verb: run
args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} --blob-dir=./blob-report
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
if: success() || failure()
with:
name: playwright-blob-${{ github.run_number }}-${{ matrix.shard }}
@@ -360,7 +360,7 @@ jobs:
run: |
docker cp cpp-e2e-deploy:/outputs.json /tmp/outputs.json
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
name: grafana-tar-gz
@@ -400,7 +400,7 @@ jobs:
node-version-file: '.nvmrc'
- name: Download blob reports from GitHub Actions Artifacts
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
with:
path: blobs
pattern: playwright-blob-*
@@ -439,7 +439,7 @@ jobs:
- name: Upload HTML report
id: upload-html
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: playwright-html-${{ github.run_number }}
path: playwright-report
@@ -479,7 +479,7 @@ jobs:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
name: grafana-tar-gz
- name: Run PR a11y test
@@ -498,7 +498,7 @@ jobs:
args: go run ./pkg/build/a11y --package=grafana.tar.gz --no-threshold-fail --results=./pa11y-ci-results.json
- name: Upload pa11y results
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
retention-days: 1
name: pa11y-ci-results
@@ -531,7 +531,7 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Get pa11y results
uses: actions/download-artifact@v5
uses: actions/download-artifact@v6
with:
name: pa11y-ci-results
- name: Extract and publish metrics

View File

@@ -18,6 +18,7 @@ jobs:
contents: read
outputs:
changed: ${{ steps.detect-changes.outputs.frontend }}
devenv-changed: ${{ steps.detect-changes.outputs.devenv }}
steps:
- uses: actions/checkout@v5
with:
@@ -169,3 +170,26 @@ jobs:
needs: ${{ toJson(needs) }}
failure-message: "One or more unit test jobs have failed"
success-message: "All unit tests completed successfully"
devenv:
needs:
- detect-changes
if: needs.detect-changes.outputs.devenv-changed == 'true'
runs-on: ubuntu-x64-large
name: "Devenv frontend-service build"
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Setup Docker
uses: docker/setup-docker-action@3fb92d6d9c634363128c8cce4bc3b2826526370a # v4
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Install Tilt
run: curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
- name: Create empty config files # TODO: the tiltfile should conditionally mount these only if they exist, like the enterprise license
run: |
touch devenv/frontend-service/configs/grafana-api.local.ini
touch devenv/frontend-service/configs/frontend-service.local.ini
- name: Test frontend-service Tiltfile
run: tilt ci --file devenv/frontend-service/Tiltfile

View File

@@ -107,6 +107,7 @@ jobs:
CURRENT_OSS_WIRE_CHECKSUM=$(sha256sum pkg/server/wire_gen.go | cut -d' ' -f1)
if [ "$CURRENT_OSS_WIRE_CHECKSUM" != "${{ steps.pre_gen_oss.outputs.wire_checksum }}" ]; then
OSS_WIRE_CHANGED=true
OSS_DIFF=$(git diff pkg/server/wire_gen.go)
echo "Uncomitted changes detected in pkg/server/wire_gen.go"
fi
@@ -115,6 +116,7 @@ jobs:
CURRENT_ENTERPRISE_WIRE_CHECKSUM=$(sha256sum pkg/server/enterprise_wire_gen.go | cut -d' ' -f1)
if [ "$CURRENT_ENTERPRISE_WIRE_CHECKSUM" != "${{ steps.pre_gen_enterprise.outputs.wire_checksum }}" ]; then
ENTERPRISE_WIRE_CHANGED=true
ENTERPRISE_DIFF=$(git diff pkg/server/enterprise_wire_gen.go)
echo "Uncomitted changes detected in pkg/server/enterprise_wire_gen.go"
fi
fi
@@ -124,6 +126,14 @@ jobs:
else
if [[ "${{ github.event.pull_request.head.repo.fork }}" == "false" ]]; then
echo "> !!! Please synchronize the grafana OSS and grafana enterprise code bases as defined in the enterprise readme, then run 'make gen-go' in the OSS folder and commit the changes to both repositories."
if [[ "$OSS_WIRE_CHANGED" == "true" ]]; then
echo "OSS changes:"
echo "$OSS_DIFF"
fi
if [[ "$ENTERPRISE_WIRE_CHANGED" == "true" ]]; then
echo "Enterprise changes:"
echo "$ENTERPRISE_DIFF"
fi
else
echo "> !!! Please run 'make gen-go' and commit the changes."
fi

View File

@@ -78,6 +78,7 @@ jobs:
# We don't need more than this since it has to wait for the other tests.
shard: [
1/4, 2/4, 3/4, 4/4,
profiled,
]
fail-fast: false
@@ -96,13 +97,74 @@ jobs:
go-version-file: go.mod
cache: true
- name: Run tests
if: matrix.shard != 'profiled'
env:
SHARD: ${{ matrix.shard }}
CGO_ENABLED: 0
SKIP_PACKAGES: |-
pkg/tests/apis/folder
pkg/tests/apis/dashboard
run: |
set -euo pipefail
readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N"$SHARD" -d-)"
# ionice since tests are IO intensive
CGO_ENABLED=0 ionice -c2 -n7 go test -p=4 -tags=sqlite -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}"
# Build regex pattern like: pkg1$|pkg2$|pkg3$
SKIP_PATTERN=$(echo "$SKIP_PACKAGES" | sed '/^$/d' | sed 's|.*|&$|' | paste -sd '|' -)
readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N "$SHARD" -d - | grep -Ev "($SKIP_PATTERN)")"
go test -tags=sqlite -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}"
- name: Run profiled tests
id: run-profiled-tests
if: matrix.shard == 'profiled'
env:
CGO_ENABLED: 0
PROFILED_PACKAGES: |-
pkg/tests/apis/folder
pkg/tests/apis/dashboard
run: |
set -euo pipefail
# Build regex pattern line: pkg1$|pkg2$|pkg3$
PROFILE_PATTERN=$(echo "$PROFILED_PACKAGES" | sed '/^$/d' | sed 's|.*|&$|' | paste -sd '|' -)
readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | grep -E "($PROFILE_PATTERN)")"
if [ ${#PACKAGES[@]} -eq 0 ]; then
echo "⚠️ No profiled packages found"
exit 0
fi
mkdir -p profiles
EXIT_CODE=0
# Run each profiled package sequentially
for full_pkg in "${PACKAGES[@]}"; do
# Build valid file name
pkg_name=$(basename "$full_pkg" | tr '/' '_' | tr '.' '_')
echo "📦 Running $full_pkg"
set +e
go test -tags=sqlite -timeout=8m -run '^TestIntegration' \
-outputdir=profiles \
-cpuprofile="cpu_${pkg_name}.prof" \
-memprofile="mem_${pkg_name}.prof" \
-trace="trace_${pkg_name}.out" \
"$full_pkg" 2>&1 | tee "profiles/test_${pkg_name}.log"
TEST_EXIT=$?
set -e
if [ $TEST_EXIT -ne 0 ]; then
echo "❌ $full_pkg failed with exit code $TEST_EXIT"
EXIT_CODE=1
else
echo "✅ $full_pkg passed"
fi
done
# Set output for artifact upload
if [ $EXIT_CODE -ne 0 ]; then
echo "upload_artifacts=true" >> "$GITHUB_OUTPUT"
else
echo "upload_artifacts=false" >> "$GITHUB_OUTPUT"
fi
exit $EXIT_CODE
- name: Output test profiles and traces
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
if: matrix.shard == 'profiled' && !cancelled() && steps.run-profiled-tests.outputs.upload_artifacts == 'true'
with:
name: integration-test-profiles-sqlite-nocgo-${{ github.run_number }}
path: profiles/
retention-days: 7
if-no-files-found: ignore
mysql:
needs: detect-changes
if: needs.detect-changes.outputs.changed == 'true'

View File

@@ -44,7 +44,7 @@ jobs:
permissions:
id-token: write
steps:
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: ${{ inputs.name }}
pattern: ${{ inputs.pattern }}

View File

@@ -187,12 +187,12 @@ jobs:
output: artifacts-${{ matrix.name }}.txt
verify: ${{ matrix.verify }}
build-id: ${{ github.run_id }}
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: artifacts-list-${{ matrix.name }}
path: ${{ steps.build.outputs.file }}
retention-days: 1
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: artifacts-${{ matrix.name }}
path: ${{ steps.build.outputs.dist-dir }}
@@ -212,6 +212,7 @@ jobs:
run-id: ${{ github.run_id }}
bucket-path: ${{ needs.setup.outputs.version }}_${{ github.run_id }}
environment: prod
runs-on: ubuntu-x64-small
publish-dockerhub:
if: github.ref_name == 'main'
@@ -224,27 +225,27 @@ jobs:
- build
steps:
- uses: grafana/shared-workflows/actions/dockerhub-login@dockerhub-login/v1.0.2
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-list-linux-amd64
path: .
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-list-linux-arm64
path: .
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-list-linux-armv7
path: .
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-linux-amd64
path: dist
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-linux-arm64
path: dist
- uses: actions/download-artifact@4a24838f3d5601fd639834081e118c2995d51e1c
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: artifacts-linux-armv7
path: dist
@@ -320,13 +321,21 @@ jobs:
repositories: '["grafana"]'
permissions: '{"issues": "write", "pull_requests": "write", "contents": "read"}'
- name: Find PR
continue-on-error: true
id: find-pr
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
GRAFANA_COMMIT: ${{ needs.setup.outputs.grafana-commit }}
run: echo "ISSUE_NUMBER=$(gh api "/repos/grafana/grafana/commits/${GRAFANA_COMMIT}/pulls" | jq -r '.[0].number')" >> "$GITHUB_ENV"
REPO: ${{ github.repository }}
run: |
set -eo pipefail
gh api "/repos/${REPO}/commits/${GRAFANA_COMMIT}/pulls" | jq -r '.[0].number' | tee issue_number.txt
echo "ISSUE_NUMBER=$(cat issue_number.txt)" >> "$GITHUB_ENV"
- name: Find Comment
uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3
if: ${{ steps.find-pr.outcome == 'success' }}
id: fc
continue-on-error: true
with:
issue-number: ${{ env.ISSUE_NUMBER }}
comment-author: 'grafana-delivery-bot[bot]'
@@ -334,6 +343,7 @@ jobs:
token: ${{ steps.generate_token.outputs.token }}
- name: Create or update comment
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v4
if: ${{ steps.find-pr.outcome == 'success' }} # Run even if comment wasn't found
with:
token: ${{ steps.generate_token.outputs.token }}
comment-id: ${{ steps.fc.outputs.comment-id }}

View File

@@ -34,7 +34,7 @@ jobs:
id-token: write
needs: detect-changes
if: needs.detect-changes.outputs.changed == 'true'
name: "Run Storybook a11y tests"
name: "Run Storybook a11y tests (light theme)"
steps:
- uses: actions/checkout@v5
with:
@@ -64,7 +64,7 @@ jobs:
id-token: write
needs: detect-changes
if: needs.detect-changes.outputs.changed == 'true'
name: "Run Storybook a11y tests"
name: "Run Storybook a11y tests (dark theme)"
steps:
- uses: actions/checkout@v5
with:

View File

@@ -31,6 +31,6 @@ jobs:
persist-credentials: false
fetch-depth: ${{ steps.fetch_depth.outputs.fetch_depth }}
- name: Trufflehog
uses: trufflesecurity/trufflehog@ad6fc8fb446b8fafbf7ea8193d2d6bfd42f45690 # v3.90.11
uses: trufflesecurity/trufflehog@b84c3d14d189e16da175e2c27fa8136603783ffc # v3.90.12
with:
extra_args: --results=verified

7
.gitignore vendored
View File

@@ -71,6 +71,7 @@ public/css/*.min.css
.vs/
.cursor/
.devcontainer/
.claude/
.eslintcache
.stylelintcache
@@ -165,6 +166,7 @@ pkg/services/quota/quotaimpl/storage/storage.json
/packages/grafana-ui/.yarn/.cache
/packages/grafana-ui/.storybook/static
/packages/grafana-ui/unstable
/packages/grafana-flamegraph/.storybook/static
/packages/**/dist
/packages/**/compiled
/packages/**/.rpt2_cache
@@ -250,9 +252,12 @@ public/mockServiceWorker.js
/e2e-playwright/test-plugins/*/dist
/apps/provisioning/cmd/job-controller/bin/
# Ignore unified storage kv store files
/grafana-kv-data
# Ignore debug output from test library
/pkg/storage/secret/metadata/testdata/rapid/TestStateMachine/
/codeowners-manifest/
# Ignore grafana/hippocampus local cache folder

View File

@@ -83,7 +83,7 @@ linters:
deny:
- pkg: github.com/grafana/grafana/pkg
desc: apps/playlist is not allowed to import grafana core
apps-secret:
apps-secret:
list-mode: lax
files:
- ./apps/secret/*
@@ -105,6 +105,8 @@ linters:
- '**/pkg/tsdb/graphite/**/*'
- '**/pkg/tsdb/mysql/*'
- '**/pkg/tsdb/mysql/**/*'
- '**/pkg/tsdb/opentsdb/*'
- '**/pkg/tsdb/opentsdb/**/*'
- '**/pkg/tsdb/parca/*'
- '**/pkg/tsdb/parca/**/*'
- '**/pkg/tsdb/tempo/*'
@@ -179,7 +181,9 @@ linters:
- pkg: io/ioutil
desc: 'Deprecated: As of Go 1.16, the same functionality is now provided by package io or package os, and those implementations should be preferred in new code. See the specific function documentation for details.'
- pkg: gopkg.in/yaml.v2
desc: Grafana packages are not allowed to depend on gopkg.in/yaml.v2 as gopkg.in/yaml.v3 is now available
desc: use go.yaml.in/yaml/v3 instead
- pkg: gopkg.in/yaml.v3
desc: use go.yaml.in/yaml/v3 instead
- pkg: github.com/pkg/errors
desc: 'Deprecated: Go 1.13 supports the functionality provided by pkg/errors in the standard library.'
- pkg: github.com/xorcare/pointer

2
.nvmrc
View File

@@ -1 +1 @@
v22.16.0
v24.11.0

File diff suppressed because one or more lines are too long

View File

@@ -25,6 +25,6 @@ plugins:
path: .yarn/plugins/@yarnpkg/plugin-licenses.cjs
spec: "https://raw.githubusercontent.com/mhassan1/yarn-plugin-licenses/v0.15.0/bundles/@yarnpkg/plugin-licenses.js"
yarnPath: .yarn/releases/yarn-4.10.3.cjs
yarnPath: .yarn/releases/yarn-4.11.0.cjs
enableScripts: false

View File

@@ -1,3 +1,251 @@
<!-- 12.3.0 START -->
# 12.3.0 (2025-11-19)
### Features and enhancements
- **API Clients:** Add lazy hooks to clients [#113226](https://github.com/grafana/grafana/pull/113226), [@tomratcliffe](https://github.com/tomratcliffe)
- **API clients:** Automatically set PATCH headers [#111879](https://github.com/grafana/grafana/pull/111879), [@Clarity-89](https://github.com/Clarity-89)
- **API clients:** Extract into a package [#111810](https://github.com/grafana/grafana/pull/111810), [@Clarity-89](https://github.com/Clarity-89)
- **API clients:** Extract into a package (Enterprise)
- **API clients:** Update API clients to include all endpoints & add hooks [#113061](https://github.com/grafana/grafana/pull/113061), [@tomratcliffe](https://github.com/tomratcliffe)
- **AccessControl:** Include hidden roles in service account role display [#112924](https://github.com/grafana/grafana/pull/112924), [@Jguer](https://github.com/Jguer)
- **AccessControl:** Increase limit of LBAC for Datasources rules [#111560](https://github.com/grafana/grafana/pull/111560), [@Jguer](https://github.com/Jguer)
- **Accessibility:** Wrap data source info onto 2 lines at small viewports [#113033](https://github.com/grafana/grafana/pull/113033), [@ashharrison90](https://github.com/ashharrison90)
- **Alert Enrichment:** Add mutator to insert rule UID labels to allow for efficient use of labelSelector (Enterprise)
- **Alerting:** Add enrichment components to rule view page (Enterprise)
- **Alerting:** Add enrichment section to rule view page (Enterprise)
- **Alerting:** Add jitter support for periodic alert state storage to reduce database load spikes [#111357](https://github.com/grafana/grafana/pull/111357), [@softho0n](https://github.com/softho0n)
- **Alerting:** Add position-based matching for identical alert rules [#112407](https://github.com/grafana/grafana/pull/112407), [@konrad147](https://github.com/konrad147)
- **Alerting:** Create alertingAlertRuleFormSchema in restrictedGrafanaApis [#112794](https://github.com/grafana/grafana/pull/112794), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Display error message in central state history view [#111445](https://github.com/grafana/grafana/pull/111445), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Enrichment per rule wip-2 (Enterprise)
- **Alerting:** Hide metadata if grouping by folder [#113216](https://github.com/grafana/grafana/pull/113216), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Improve template ai helper prompt and add some examples (Enterprise)
- **Alerting:** Move enrichment tab between details and versions [#110886](https://github.com/grafana/grafana/pull/110886), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Remove ai feedback button from alert form [#112713](https://github.com/grafana/grafana/pull/112713), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Remove unused components [#111320](https://github.com/grafana/grafana/pull/111320), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Remove useRulesSourcesWithRuler for SmartAlertTypeDetector [#111623](https://github.com/grafana/grafana/pull/111623), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Surface remote AM silence creation errors properly [#112757](https://github.com/grafana/grafana/pull/112757), [@moustafab](https://github.com/moustafab)
- **Alerting:** Triage [#110339](https://github.com/grafana/grafana/pull/110339), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Triage rule details drawer [#112055](https://github.com/grafana/grafana/pull/112055), [@konrad147](https://github.com/konrad147)
- **Alerting:** Update prompt examples for template AI Helper (Enterprise)
- **Alerting:** Update width to instance details drawer in Triage page [#113209](https://github.com/grafana/grafana/pull/113209), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Use new enrichment endpoints in FE (Enterprise)
- **Alerting:** Use ruleUid as a prop instead of extracting it from the rule context (Enterprise)
- **Analytics:** Aggregate daily summary in datasources analytics (Enterprise)
- **Analytics:** Apply proper batching to Loki exports and add configurable settings (Enterprise)
- **Annotations:** Exclude internal dashboard id when saved via UID [#111535](https://github.com/grafana/grafana/pull/111535), [@ryantxu](https://github.com/ryantxu)
- **Azure:** Use SSO settings in plugin context [#112058](https://github.com/grafana/grafana/pull/112058), [@aangelisc](https://github.com/aangelisc)
- **Buttons:** Active style for buttons [#111235](https://github.com/grafana/grafana/pull/111235), [@gtk-grafana](https://github.com/gtk-grafana)
- **Caching:** Disable cache if datasource has oauthPassThru=true (Enterprise)
- **Canvas:** Allow non-icon bg image fields [#112308](https://github.com/grafana/grafana/pull/112308), [@fastfrwrd](https://github.com/fastfrwrd)
- **Chore:** Add logsdrilldown replace to apps/iam/go.mod [#112581](https://github.com/grafana/grafana/pull/112581), [@njvrzm](https://github.com/njvrzm)
- **CloudWatch Logs:** Don't add console link to every field in the logs response [#112230](https://github.com/grafana/grafana/pull/112230), [@idastambuk](https://github.com/idastambuk)
- **CloudWatch Logs:** Support Log Anomalies query type [#113067](https://github.com/grafana/grafana/pull/113067), [@idastambuk](https://github.com/idastambuk)
- **CloudWatch:** Add syntax highlighting and autocomplete for logs diff command [#111207](https://github.com/grafana/grafana/pull/111207), [@kevinwcyu](https://github.com/kevinwcyu)
- **CloudWatch:** Add tracking for logs anomalies [#113181](https://github.com/grafana/grafana/pull/113181), [@idastambuk](https://github.com/idastambuk)
- **Dashboard Controls:** Add annotations to the dashboard controls menu [#112816](https://github.com/grafana/grafana/pull/112816), [@leventebalogh](https://github.com/leventebalogh)
- **Dashboard Picker:** Update to use correct search + dashboards APIs [#112341](https://github.com/grafana/grafana/pull/112341), [@tomratcliffe](https://github.com/tomratcliffe)
- **Dashboard:** Backend always set `metricEditorMode: 0` regardless `metricQueryType` and `expression` [#111613](https://github.com/grafana/grafana/pull/111613), [@ivanortegaalba](https://github.com/ivanortegaalba)
- **Dashboards:** Add a new variable type called "Switch" [#111366](https://github.com/grafana/grafana/pull/111366), [@leventebalogh](https://github.com/leventebalogh)
- **Dashboards:** Hide error notifications in kiosk mode on dashboards [#112390](https://github.com/grafana/grafana/pull/112390), [@ivanortegaalba](https://github.com/ivanortegaalba)
- **Dynamic Dashboards:** Expand dashboards_init_dashboard_completed tracking info [#111102](https://github.com/grafana/grafana/pull/111102), [@idastambuk](https://github.com/idastambuk)
- **ErrorBoundary:** Report specific boundary type to Faro [#112071](https://github.com/grafana/grafana/pull/112071), [@tskarhed](https://github.com/tskarhed)
- **Explore:** Use compact mode only when targeting Tempo [#113037](https://github.com/grafana/grafana/pull/113037), [@ifrost](https://github.com/ifrost)
- **FeatureToggles:** Remove deprecated experimental apiserver [#111617](https://github.com/grafana/grafana/pull/111617), [@ryantxu](https://github.com/ryantxu)
- **Fields Selector:** Add component and integrate with Logs and Logs table visualization [#112534](https://github.com/grafana/grafana/pull/112534), [@matyax](https://github.com/matyax)
- **Flame Graph:** Anchor exact match when clicking a table symbol in search [#111101](https://github.com/grafana/grafana/pull/111101), [@samarthbagga-meesho](https://github.com/samarthbagga-meesho)
- **FlameGraph:** Improve prompt for open assistant to analyze flamegraph [#113071](https://github.com/grafana/grafana/pull/113071), [@simonswine](https://github.com/simonswine)
- **FolderPicker:** Don't show expand button for empty folders and move search icon [#111872](https://github.com/grafana/grafana/pull/111872), [@aocenas](https://github.com/aocenas)
- **FolderPicker:** Show parent folder when searching [#111026](https://github.com/grafana/grafana/pull/111026), [@aocenas](https://github.com/aocenas)
- **Geomap:** Add a MapLibre style base layer [#109841](https://github.com/grafana/grafana/pull/109841), [@remogeissbuehler](https://github.com/remogeissbuehler)
- **Geomap:** Move beta layers to GA [#113186](https://github.com/grafana/grafana/pull/113186), [@drew08t](https://github.com/drew08t)
- **Go:** Update to 1.25.2 + golangci-lint v2.5.0 + golang.org/x/net v0.45.0 [#112149](https://github.com/grafana/grafana/pull/112149), [@macabu](https://github.com/macabu)
- **Go:** Update to 1.25.3 [#112359](https://github.com/grafana/grafana/pull/112359), [@macabu](https://github.com/macabu)
- **Grafana Advisor:** Prometheus Type Migration check [#110853](https://github.com/grafana/grafana/pull/110853), [@bossinc](https://github.com/bossinc)
- **Grafana Data Source:** Add random walk configuration options [#113009](https://github.com/grafana/grafana/pull/113009), [@nmarrs](https://github.com/nmarrs)
- **IAM:** Add uid column in team_member DB table [#112439](https://github.com/grafana/grafana/pull/112439), [@dmihai](https://github.com/dmihai)
- **Jaeger:** Migrate API calls to gRPC endpoint [#113297](https://github.com/grafana/grafana/pull/113297), [@jcolladokuri](https://github.com/jcolladokuri)
- **LBAC for data sources:** Provide user feedback of potential performance loss from LBAC rules (Enterprise)
- **Library Panels:** Remove direct use of legacy search [#112231](https://github.com/grafana/grafana/pull/112231), [@tomratcliffe](https://github.com/tomratcliffe)
- **Logs panel:** Respect selected fields for downloading logs [#111753](https://github.com/grafana/grafana/pull/111753), [@matyax](https://github.com/matyax)
- **Nav:** Render menu items as `p` tags so truncation logic can work [#113248](https://github.com/grafana/grafana/pull/113248), [@tomratcliffe](https://github.com/tomratcliffe)
- **Navigation:** Move Cost management and billing plugin to root [#111739](https://github.com/grafana/grafana/pull/111739), [@gubjanos](https://github.com/gubjanos)
- **PanelTimeCompare:** Support saving time compare window [#113150](https://github.com/grafana/grafana/pull/113150), [@torkelo](https://github.com/torkelo)
- **PanelTimeSettings:** Support panel time range settings changes from dashboard in view mode [#113027](https://github.com/grafana/grafana/pull/113027), [@torkelo](https://github.com/torkelo)
- **Plugins:** Install Grafana Pathfinder behind a feature flag [#109909](https://github.com/grafana/grafana/pull/109909), [@Jayclifford345](https://github.com/Jayclifford345)
- **PostgreSQL:** Support PGPASSFILE by making password optional [#108856](https://github.com/grafana/grafana/pull/108856), [@taraspos](https://github.com/taraspos)
- **Provisioning:** Watch file system for changes [#112184](https://github.com/grafana/grafana/pull/112184), [@ryantxu](https://github.com/ryantxu)
- **Reporting:** Add support for schema v2 dashboards (Enterprise)
- **Reporting:** Wait for streaming to end before exporting CSVs (Enterprise)
- **SQL Expressions:** Add Functions to Allow list [#113291](https://github.com/grafana/grafana/pull/113291), [@kylebrandt](https://github.com/kylebrandt)
- **Snapshots:** Use appSubUrl for View all snapshots [#111652](https://github.com/grafana/grafana/pull/111652), [@Clarity-89](https://github.com/Clarity-89)
- **Span Details:** Bring back span id to span details [#112411](https://github.com/grafana/grafana/pull/112411), [@ifrost](https://github.com/ifrost)
- **Span Details:** Wrap label values [#112413](https://github.com/grafana/grafana/pull/112413), [@ifrost](https://github.com/ifrost)
- **Stars:** Refactor StarsToolbarButton and unify nav update logic [#112582](https://github.com/grafana/grafana/pull/112582), [@tomratcliffe](https://github.com/tomratcliffe)
- **Stat/BarGauge:** Border radius tweak [#112562](https://github.com/grafana/grafana/pull/112562), [@torkelo](https://github.com/torkelo)
- **Table:** Add some error-case handling to ImageCell [#110461](https://github.com/grafana/grafana/pull/110461), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Allow FieldType.other containing arrays to use Pills [#111205](https://github.com/grafana/grafana/pull/111205), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Disable virtualization, hover overflow, and scrollbar width resizing on Safari 26 [#111834](https://github.com/grafana/grafana/pull/111834), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Pill and JSON Cells should allow formatting [#111951](https://github.com/grafana/grafana/pull/111951), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Support DataLinks and Actions in SparklineCell [#112244](https://github.com/grafana/grafana/pull/112244), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Update ad-hoc filter to use name instead of displayName [#112815](https://github.com/grafana/grafana/pull/112815), [@fastfrwrd](https://github.com/fastfrwrd)
- **Tempo:** Migrates tags and tag values to datasource backend CallResource requests (Enterprise)
- **Theme:** Changes light theme canvas color a more white shade [#111318](https://github.com/grafana/grafana/pull/111318), [@torkelo](https://github.com/torkelo)
- **Themes:** Update themes border radius [#111478](https://github.com/grafana/grafana/pull/111478), [@torkelo](https://github.com/torkelo)
- **TimeComparison:** Automatically show/hide menu on hover [#112750](https://github.com/grafana/grafana/pull/112750), [@jesdavpet](https://github.com/jesdavpet)
- **TimeSeries:** Allow custom time units on x-axis [#112913](https://github.com/grafana/grafana/pull/112913), [@leeoniya](https://github.com/leeoniya)
- **Timeseries:** Numeric duration values could render as NaN (#73795) [#112076](https://github.com/grafana/grafana/pull/112076), [@fastfrwrd](https://github.com/fastfrwrd)
- **Transformations:** Hide "Match all/any" conditions for less than two filters [#109754](https://github.com/grafana/grafana/pull/109754), [@sudoice](https://github.com/sudoice)
- **UI Extensions:** Remove path validation from link extensions [#112259](https://github.com/grafana/grafana/pull/112259), [@leventebalogh](https://github.com/leventebalogh)
### Bug fixes
- **Access Control:** Fix the permission checks for saving/updating/deleting annotations [#112953](https://github.com/grafana/grafana/pull/112953), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
- **Accessibility:** Improve no-unreduced-motion rule and fix violations [#110304](https://github.com/grafana/grafana/pull/110304), [@tomratcliffe](https://github.com/tomratcliffe)
- **Alerting Provisioning:** Don't error on recording rules without conditions [#109410](https://github.com/grafana/grafana/pull/109410), [@djpnicholls](https://github.com/djpnicholls)
- **Alerting:** Clear outdated settings when switching contact point type [#111869](https://github.com/grafana/grafana/pull/111869), [@konrad147](https://github.com/konrad147)
- **Alerting:** Fix enrichment tab to be rendered only for grafana alerting rules [#113030](https://github.com/grafana/grafana/pull/113030), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Fix instances matching in notification policies [#112326](https://github.com/grafana/grafana/pull/112326), [@konrad147](https://github.com/konrad147)
- **Alerting:** Fix threshold params [#111645](https://github.com/grafana/grafana/pull/111645), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Fix unmarshalling of GettableStatus to include time intervals [#112602](https://github.com/grafana/grafana/pull/112602), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Alerting:** Migrate `spec.title` and `spec.name` fieldSelectors [#111993](https://github.com/grafana/grafana/pull/111993), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Normalize health when filtering rules [#113087](https://github.com/grafana/grafana/pull/113087), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Prohibit receivers with empty name [#113064](https://github.com/grafana/grafana/pull/113064), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Alerting:** Provisioning to fix contact point type on save [#112246](https://github.com/grafana/grafana/pull/112246), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Alerting:** Remove \_\_grafana_origin when duplicating rule [#112396](https://github.com/grafana/grafana/pull/112396), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **AnnoList:** Fix annotations not loading when in a repeated row [#111540](https://github.com/grafana/grafana/pull/111540), [@joshhunt](https://github.com/joshhunt)
- **Annotations:** Fix issue with transformation logic in scenes [#112288](https://github.com/grafana/grafana/pull/112288), [@fastfrwrd](https://github.com/fastfrwrd)
- **Auth:** Fix render user OAuth passthrough [#111636](https://github.com/grafana/grafana/pull/111636), [@charandas](https://github.com/charandas)
- **ComboBox:** Add loading state to dropdown and prefixIcon [#112967](https://github.com/grafana/grafana/pull/112967), [@tomratcliffe](https://github.com/tomratcliffe)
- **Connections:** Fix connections home page on enterprise [#111751](https://github.com/grafana/grafana/pull/111751), [@oshirohugo](https://github.com/oshirohugo)
- **Dashboard:** Fix editor specific permissions in /api [#113292](https://github.com/grafana/grafana/pull/113292), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
- **Dashboards:** Fix bug with anon users with editor permissions creating dashboards [#113260](https://github.com/grafana/grafana/pull/113260), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
- **Dashboards:** Fix missing Ctrl+O keyboard shortcut for crosshair toggle [#111310](https://github.com/grafana/grafana/pull/111310), [@ivanortegaalba](https://github.com/ivanortegaalba)
- **Dashboards:** Fix moving to root folder [#111515](https://github.com/grafana/grafana/pull/111515), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
- **Dashboards:** Fix preload field not being persisted via /v1beta1 [#112475](https://github.com/grafana/grafana/pull/112475), [@ivanortegaalba](https://github.com/ivanortegaalba)
- **Flame Graph:** Use suffix for values formatted with a short formatter [#110999](https://github.com/grafana/grafana/pull/110999), [@ifrost](https://github.com/ifrost)
- **FlameGraph:** Ensure total is only counted once for recursive function calls [#111548](https://github.com/grafana/grafana/pull/111548), [@simonswine](https://github.com/simonswine)
- **FolderPermissions:** Return 404 error when folder does not exist instead of 500 [#112919](https://github.com/grafana/grafana/pull/112919), [@Jguer](https://github.com/Jguer)
- **FolderPicker:** Fix expand toggle also selecting folder [#111755](https://github.com/grafana/grafana/pull/111755), [@aocenas](https://github.com/aocenas)
- **Graphite:** Fix legacy response unmarshalling [#112968](https://github.com/grafana/grafana/pull/112968), [@aangelisc](https://github.com/aangelisc)
- **Histogram:** Properly handle sparse heatmap-cells frames [#112907](https://github.com/grafana/grafana/pull/112907), [@leeoniya](https://github.com/leeoniya)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111723](https://github.com/grafana/grafana/pull/111723), [@bradleypettit](https://github.com/bradleypettit)
- **Node graph:** Fix context menu position after scrolling [#112374](https://github.com/grafana/grafana/pull/112374), [@adrapereira](https://github.com/adrapereira)
- **Playlist:** Fix navigation issues with emoji-titled dashboards during dual-write migration [#111659](https://github.com/grafana/grafana/pull/111659), [@axelavargas](https://github.com/axelavargas)
- **Plugin Details Page:** Fix tabs not loading on hard refresh [#112915](https://github.com/grafana/grafana/pull/112915), [@sunker](https://github.com/sunker)
- **Plugin navigation:** Fix active nav item selection when there are more than 10 items in a group [#112886](https://github.com/grafana/grafana/pull/112886), [@aocenas](https://github.com/aocenas)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111762](https://github.com/grafana/grafana/pull/111762), [@wbrowne](https://github.com/wbrowne)
- **Plugins:** Set isProvisioned for local plugins without remote counterpart [#111268](https://github.com/grafana/grafana/pull/111268), [@oshirohugo](https://github.com/oshirohugo)
- **Prometheus:** Fix incremental querying logic for public dashboards [#111642](https://github.com/grafana/grafana/pull/111642), [@jcolladokuri](https://github.com/jcolladokuri)
- **Prometheus:** Fix parsing logic of prometheus expressions to honor the order of binary operations [#112220](https://github.com/grafana/grafana/pull/112220), [@jcolladokuri](https://github.com/jcolladokuri)
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
- **SoloPanel:** Fixes issue with solo route and scopes variable [#112769](https://github.com/grafana/grafana/pull/112769), [@torkelo](https://github.com/torkelo)
- **Stars:** Fix starred state not being updated [#111936](https://github.com/grafana/grafana/pull/111936), [@Clarity-89](https://github.com/Clarity-89)
- **Stat:** Fix math for percent change value heights when sparkline is not rendered [#112599](https://github.com/grafana/grafana/pull/112599), [@fastfrwrd](https://github.com/fastfrwrd)
- **StateTimeline:** Fix color display in tooltip [#112878](https://github.com/grafana/grafana/pull/112878), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Fix cell inspect for Sparkline and inferred JSON cells [#113059](https://github.com/grafana/grafana/pull/113059), [@fastfrwrd](https://github.com/fastfrwrd)
- **TextPanel:** Fix `CodeEditor` not appearing properly [#111937](https://github.com/grafana/grafana/pull/111937), [@ashharrison90](https://github.com/ashharrison90)
- **UnitPicker/Cascader:** Fixes type to search for unit feature [#112614](https://github.com/grafana/grafana/pull/112614), [@torkelo](https://github.com/torkelo)
- **VizTooltip:** Better overflow handling on long series names [#112240](https://github.com/grafana/grafana/pull/112240), [@fastfrwrd](https://github.com/fastfrwrd)
### Breaking changes
- **Faro:** Update configuration with best practices [#112108](https://github.com/grafana/grafana/pull/112108), [@joshhunt](https://github.com/joshhunt)
- **LibraryPanels:** Remove unique name constraints [#113077](https://github.com/grafana/grafana/pull/113077), [@ryantxu](https://github.com/ryantxu)
- **RBAC:** Only write action sets [#112429](https://github.com/grafana/grafana/pull/112429), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
### Plugin development fixes & changes
- **Checkbox:** Improve accessibility of the `indeterminate` state [#112388](https://github.com/grafana/grafana/pull/112388), [@ashharrison90](https://github.com/ashharrison90)
- **Collapse:** Improve layout and deprecate `collapsible` prop [#113164](https://github.com/grafana/grafana/pull/113164), [@ashharrison90](https://github.com/ashharrison90)
- **Docs:** Add storybook links to components [#113102](https://github.com/grafana/grafana/pull/113102), [@samsch](https://github.com/samsch)
- **Modal:** Fix button focus being clipped [#112867](https://github.com/grafana/grafana/pull/112867), [@ashharrison90](https://github.com/ashharrison90)
- **Slider:** Expose prop to control visibility of input [#113084](https://github.com/grafana/grafana/pull/113084), [@ashharrison90](https://github.com/ashharrison90)
- **Slider:** Make `inputId` a required param and fix minor a11y violations [#112006](https://github.com/grafana/grafana/pull/112006), [@ashharrison90](https://github.com/ashharrison90)
<!-- 12.3.0 END -->
<!-- 12.1.4 START -->
# 12.1.4 (2025-11-19)
### Bug fixes
- **Alerting:** Fix unmarshalling of GettableStatus to include time intervals [#112733](https://github.com/grafana/grafana/pull/112733), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **AnalyticsSummaries:** Fix dashboard rollup not resetting "last X days" metrics to zero (Enterprise)
- **AnalyticsSummaries:** Fix dashboard rollup totals resetting incorrectly (Enterprise)
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.1.4 END -->
<!-- 12.0.7 START -->
# 12.0.7 (2025-11-19)
### Bug fixes
- **Alerting:** Fix unmarshalling of GettableStatus to include time intervals [#112732](https://github.com/grafana/grafana/pull/112732), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **AnalyticsSummaries:** Fix dashboard rollup not resetting "last X days" metrics to zero (Enterprise)
- **AnalyticsSummaries:** Fix dashboard rollup totals resetting incorrectly (Enterprise)
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.0.7 END -->
<!-- 12.2.2 START -->
# 12.2.2 (2025-11-19)
### Features and enhancements
- **Access control:** Reduce memory usage when fetching user's permissions [#113414](https://github.com/grafana/grafana/pull/113414), [@hairyhenderson](https://github.com/hairyhenderson)
- **Table:** Pill and JSON Cells should allow formatting [#113130](https://github.com/grafana/grafana/pull/113130), [@fastfrwrd](https://github.com/fastfrwrd)
### Bug fixes
- **AnalyticsSummaries:** Fix dashboard rollup not resetting "last X days" metrics to zero (Enterprise)
- **AnalyticsSummaries:** Fix dashboard rollup totals resetting incorrectly (Enterprise)
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.2.2 END -->
<!-- 11.6.8 START -->
# 11.6.8 (2025-11-19)
### Bug fixes
- **Alerting:** Fix unmarshalling of GettableStatus to include time intervals [#112731](https://github.com/grafana/grafana/pull/112731), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **AnalyticsSummaries:** Fix dashboard rollup not resetting "last X days" metrics to zero (Enterprise)
- **AnalyticsSummaries:** Fix dashboard rollup totals resetting incorrectly (Enterprise)
- **Seeder:** Add check in `filterRemovedPermissions` for already existing new permissions before seeding (Enterprise)
<!-- 11.6.8 END -->
<!-- 12.2.1+security-01 START -->
# 12.2.1+security-01 (2025-11-19)
### Bug fixes
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.2.1+security-01 END -->
<!-- 12.1.3+security-01 START -->
# 12.1.3+security-01 (2025-11-19)
### Bug fixes
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.1.3+security-01 END -->
<!-- 12.0.6+security-01 START -->
# 12.0.6+security-01 (2025-11-19)
### Bug fixes
- **Security:** fix for CVE-2025-41115 in SCIM (System for Cross-domain Identity Management) (Enterprise)
<!-- 12.0.6+security-01 END -->
<!-- 12.2.1 START -->
# 12.2.1 (2025-10-21)

View File

@@ -2,7 +2,9 @@
Thank you for your interest in contributing to Grafana! We welcome all people who want to contribute in a healthy and constructive manner within our community. To help us create a safe and positive community experience for all, we require all participants to adhere to the [Code of Conduct](CODE_OF_CONDUCT.md).
This document is a guide to help you through the process of contributing to Grafana. Be sure to check out the [Grafana Champions program](https://grafana.com/community/champions/?src=github&camp=community-cross-platform-engagement) as you start to contribute. Its designed to recognize and empower individuals who are actively contributing to the growth and success of the Grafana ecosystem.
This document is a guide to help you through the process of contributing to Grafana. Be sure to check out the [Grafana Champions program](https://grafana.com/community/champions/?src=github&camp=community-cross-platform-engagement) as you start to contribute. It's designed to recognize and empower individuals who are actively contributing to the growth and success of the Grafana ecosystem.
> **Help us improve!** We'd love to hear about your contributor experience. Take a moment to share your feedback in our [Open Source Contributor Experience Survey](https://gra.fan/ome). Your input helps us make contributing to Grafana better for everyone.
Whether you're a new contributor or a seasoned veteran, we hope these resources help you connect with the community.
@@ -108,7 +110,7 @@ If you believe you've found a security vulnerability, please read our [security
### Suggest features
If you have an idea of how to improve Grafana, submit a [feature request](https://github.com/grafana/grafana/issues/new?template=1-feature_requests.md).
If you have an idea of how to improve Grafana, submit a [feature request](https://github.com/grafana/grafana/issues/new?template=1-feature_requests.md). To learn how to write an effective feature request, refer to [Create a feature request](contribute/create-feature-request.md).
We want to make Grafana accessible to even more people. Submit an [accessibility issue](https://github.com/grafana/grafana/issues/new?template=2-accessibility.md) to help us understand what we can improve.

View File

@@ -14,10 +14,10 @@ ARG JS_SRC=js-builder
# Dependabot cannot update dependencies listed in ARGs
# By using FROM instructions we can delegate dependency updates to dependabot
FROM alpine:3.22.2 AS alpine-base
FROM alpine:3.23.0 AS alpine-base
FROM ubuntu:22.04 AS ubuntu-base
FROM golang:1.25.3-alpine AS go-builder-base
FROM --platform=${JS_PLATFORM} node:22-alpine AS js-builder-base
FROM golang:1.25.5-alpine AS go-builder-base
FROM --platform=${JS_PLATFORM} node:24-alpine AS js-builder-base
# Javascript build stage
FROM --platform=${JS_PLATFORM} ${JS_IMAGE} AS js-builder
ARG JS_NODE_ENV=production
@@ -93,10 +93,13 @@ COPY pkg/storage/unified/apistore pkg/storage/unified/apistore
COPY pkg/semconv pkg/semconv
COPY pkg/aggregator pkg/aggregator
COPY apps/playlist apps/playlist
COPY apps/quotas apps/quotas
COPY apps/plugins apps/plugins
COPY apps/shorturl apps/shorturl
COPY apps/annotation apps/annotation
COPY apps/correlations apps/correlations
COPY apps/preferences apps/preferences
COPY apps/collections apps/collections
COPY apps/provisioning apps/provisioning
COPY apps/secret apps/secret
COPY apps/scope apps/scope
@@ -105,15 +108,16 @@ COPY apps/logsdrilldown apps/logsdrilldown
COPY apps/advisor apps/advisor
COPY apps/dashboard apps/dashboard
COPY apps/folder apps/folder
COPY apps/preferences apps/preferences
COPY apps/iam apps/iam
COPY apps apps
COPY kindsv2 kindsv2
COPY apps/alerting/alertenrichment apps/alerting/alertenrichment
COPY apps/alerting/historian apps/alerting/historian
COPY apps/alerting/notifications apps/alerting/notifications
COPY apps/alerting/rules apps/alerting/rules
COPY pkg/codegen pkg/codegen
COPY pkg/plugins/codegen pkg/plugins/codegen
COPY apps/example apps/example
RUN go mod download

View File

@@ -8,7 +8,7 @@ WIRE_TAGS = "oss"
include .citools/Variables.mk
GO = go
GO_VERSION = 1.25.3
GO_VERSION = 1.25.5
GO_LINT_FILES ?= $(shell ./scripts/go-workspace/golangci-lint-includes.sh)
GO_TEST_FILES ?= $(shell ./scripts/go-workspace/test-includes.sh)
SH_FILES ?= $(shell find ./scripts -name *.sh)
@@ -135,14 +135,14 @@ i18n-extract-enterprise:
@echo "Skipping i18n extract for Enterprise: not enabled"
else
i18n-extract-enterprise:
@echo "Extracting i18n strings for Enterprise"
yarn run i18next --config public/locales/i18next-parser-enterprise.config.cjs
@echo "Extracting i18n strings for Enterprise"
cd public/locales/enterprise && yarn run i18next-cli extract --sync-primary
endif
.PHONY: i18n-extract
i18n-extract: i18n-extract-enterprise
@echo "Extracting i18n strings for OSS"
yarn run i18next --config public/locales/i18next-parser.config.cjs
yarn run i18next-cli extract --sync-primary
@echo "Extracting i18n strings for packages"
yarn run packages:i18n-extract
@echo "Extracting i18n strings for plugins"
@@ -178,7 +178,7 @@ gen-apps: do-gen-apps gofmt ## Generate code for Grafana App SDK apps and run go
@if [ -n "$$CODEGEN_VERIFY" ]; then \
echo "Verifying generated code is up to date..."; \
if ! git diff --quiet; then \
echo "Error: Generated apps code is not up to date. Please run 'make gen-apps' to regenerate."; \
echo "Error: Generated code is not up to date. Please run 'make gen-apps', 'make gen-cue', and 'make gen-jsonnet' to regenerate."; \
git diff --name-only; \
exit 1; \
fi; \

View File

@@ -4,7 +4,6 @@
The open-source platform for monitoring and observability
[![License](https://img.shields.io/github/license/grafana/grafana)](LICENSE)
[![Drone](https://drone.grafana.net/api/badges/grafana/grafana/status.svg)](https://drone.grafana.net/grafana/grafana)
[![Go Report Card](https://goreportcard.com/badge/github.com/grafana/grafana)](https://goreportcard.com/report/github.com/grafana/grafana)
Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data-driven culture:
@@ -36,6 +35,8 @@ If you're interested in contributing to the Grafana project:
- Explore our [beginner-friendly issues](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22beginner+friendly%22).
- Look through our [style guide and Storybook](https://developers.grafana.com/ui/latest/index.html).
> Share your contributor experience in our [feedback survey](https://gra.fan/ome) to help us improve.
## Get involved
- Follow [@grafana on X (formerly Twitter)](https://x.com/grafana/).

View File

@@ -1,5 +1,34 @@
include ../sdk.mk
.PHONY: generate
.PHONY: etcd
etcd:
@docker run -d --name etcd --env ALLOW_NONE_AUTHENTICATION=yes -p 22379:2379 bitnamilegacy/etcd:latest
.PHONY: generate # Run Grafana App SDK code generation
generate: install-app-sdk update-app-sdk
@$(APP_SDK_BIN) generate -g ./pkg/apis --grouping=group --postprocess --defencoding=none --useoldmanifestkinds
@$(APP_SDK_BIN) generate \
--source=./kinds/ \
--gogenpath=./pkg/apis \
--grouping=group \
--defencoding=none
.PHONY: run
run:
@go run ./pkg/standalone/server.go --etcd-servers=http://127.0.0.1:22379 --secure-port 7445
.PHONY: create-checks
create-checks:
@echo "Creating plugin check..."
@curl -k -X POST https://localhost:7445/apis/advisor.grafana.app/v0alpha1/namespaces/stacks-1/checks \
-H "Content-Type: application/json" \
-d '{"kind":"Check","apiVersion":"advisor.grafana.app/v0alpha1","spec":{"data":{}},"metadata":{"generateName":"check-","labels":{"advisor.grafana.app/type":"plugin"},"namespace":"stacks-1"},"status":{"report":{"count":0,"failures":[]}}}' \
&& echo "Plugin check created successfully"
@echo "Creating datasource check..."
@curl -k -X POST https://localhost:7445/apis/advisor.grafana.app/v0alpha1/namespaces/stacks-1/checks \
-H "Content-Type: application/json" \
-d '{"kind":"Check","apiVersion":"advisor.grafana.app/v0alpha1","spec":{"data":{}},"metadata":{"generateName":"check-","labels":{"advisor.grafana.app/type":"datasource"},"namespace":"stacks-1"},"status":{"report":{"count":0,"failures":[]}}}' \
&& echo "Datasource check created successfully"
delete-checks:
@curl -k -X DELETE https://localhost:7445/apis/advisor.grafana.app/v0alpha1/namespaces/stacks-1/checks \
&& echo "All checks deleted successfully"

View File

@@ -1,37 +1,56 @@
module github.com/grafana/grafana/apps/advisor
go 1.25.3
go 1.25.5
require (
github.com/Masterminds/semver/v3 v3.4.0
github.com/google/go-cmp v0.7.0
github.com/google/go-github/v70 v70.0.0
github.com/grafana/authlib/types v0.0.0-20250710201142-9542f2f28d43
github.com/grafana/authlib/types v0.0.0-20251119142549-be091cf2f4d4
github.com/grafana/grafana v0.0.0-00010101000000-000000000000
github.com/grafana/grafana-app-sdk v0.40.2
github.com/grafana/grafana-app-sdk/logging v0.40.2
github.com/grafana/grafana-plugin-sdk-go v0.278.0
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250804150913-990f1c69ecc2
github.com/stretchr/testify v1.10.0
k8s.io/apimachinery v0.33.3
k8s.io/apiserver v0.33.3
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
github.com/grafana/grafana-app-sdk v0.48.5
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
github.com/stretchr/testify v1.11.1
k8s.io/apimachinery v0.34.2
k8s.io/apiserver v0.34.2
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
)
// transitive dependencies that need replaced
// TODO: stop depending on grafana core
replace github.com/grafana/grafana => ../..
replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250620093340-be61a673dee6
replace github.com/grafana/grafana/apps/provisioning => ../provisioning
replace github.com/grafana/grafana/pkg/apimachinery => ../../pkg/apimachinery
replace github.com/grafana/grafana/pkg/apiserver => ../../pkg/apiserver
replace github.com/grafana/grafana/apps/dashboard => ../dashboard
replace github.com/grafana/grafana/pkg/aggregator => ../../pkg/aggregator
replace github.com/grafana/grafana/apps/folder => ../folder
replace github.com/grafana/grafana/apps/secret => ../secret
replace github.com/grafana/grafana/apps/iam => ../iam
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 (
cloud.google.com/go/compute/metadata v0.7.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
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect
github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
@@ -40,19 +59,19 @@ require (
github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f // indirect
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/apache/arrow-go/v18 v18.3.0 // indirect
github.com/apache/arrow-go/v18 v18.4.1 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/at-wat/mqtt-go v0.19.4 // indirect
github.com/at-wat/mqtt-go v0.19.6 // indirect
github.com/aws/aws-sdk-go v1.55.7 // indirect
github.com/aws/aws-sdk-go-v2 v1.36.5 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.70 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 // indirect
github.com/aws/smithy-go v1.22.4 // indirect
github.com/aws/aws-sdk-go-v2 v1.39.1 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.18.14 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.8 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.8 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.8 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.5 // indirect
github.com/aws/smithy-go v1.23.1 // indirect
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df // indirect
github.com/benbjohnson/clock v1.3.5 // indirect
github.com/beorn7/perks v1.0.1 // indirect
@@ -62,13 +81,11 @@ require (
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
github.com/bwmarrin/snowflake v0.3.0 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cheekybits/genny v1.0.0 // indirect
github.com/chromedp/cdproto v0.0.0-20250429231605-6ed5b53462d4 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/diegoholiveira/jsonlogic/v3 v3.7.4 // indirect
@@ -78,102 +95,107 @@ require (
github.com/dolthub/go-icu-regex v0.0.0-20250327004329-6799764f2dad // indirect
github.com/dolthub/go-mysql-server v0.19.1-0.20250410182021-5632d67cd46e // indirect
github.com/dolthub/jsonpath v0.0.2-0.20240227200619-19675ab05c71 // indirect
github.com/dolthub/vitess v0.0.0-20250410090211-143e6b272ad4 // indirect
github.com/dolthub/vitess v0.0.0-20250930230441-70c2c6a98e33 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/elazarl/goproxy v1.7.2 // indirect
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
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/fxamacker/cbor/v2 v2.7.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.132.0 // indirect
github.com/getkin/kin-openapi v0.133.0 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
github.com/go-jose/go-jose/v4 v4.1.3 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-ldap/ldap/v3 v3.4.4 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logfmt/logfmt v0.6.1 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/analysis v0.23.0 // indirect
github.com/go-openapi/errors v0.22.0 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/loads v0.22.0 // indirect
github.com/go-openapi/analysis v0.24.0 // indirect
github.com/go-openapi/errors v0.22.3 // indirect
github.com/go-openapi/jsonpointer v0.22.1 // indirect
github.com/go-openapi/jsonreference v0.21.2 // indirect
github.com/go-openapi/loads v0.23.1 // indirect
github.com/go-openapi/runtime v0.28.0 // indirect
github.com/go-openapi/spec v0.21.0 // indirect
github.com/go-openapi/strfmt v0.23.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-openapi/validate v0.24.0 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-openapi/spec v0.22.0 // indirect
github.com/go-openapi/strfmt v0.24.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-openapi/swag/conv v0.25.1 // indirect
github.com/go-openapi/swag/fileutils v0.25.1 // indirect
github.com/go-openapi/swag/jsonname v0.25.1 // indirect
github.com/go-openapi/swag/jsonutils v0.25.1 // indirect
github.com/go-openapi/swag/loading v0.25.1 // indirect
github.com/go-openapi/swag/mangling v0.25.1 // indirect
github.com/go-openapi/swag/stringutils v0.25.1 // indirect
github.com/go-openapi/swag/typeutils v0.25.1 // indirect
github.com/go-openapi/swag/yamlutils v0.25.1 // indirect
github.com/go-openapi/validate v0.25.0 // indirect
github.com/go-sql-driver/mysql v1.9.3 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/go-test/deep v1.1.1 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang-jwt/jwt/v5 v5.2.3 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang-migrate/migrate/v4 v4.7.0 // indirect
github.com/golang/mock v1.7.0-rc.1 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/flatbuffers v25.2.10+incompatible // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/google/wire v0.6.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/grafana/alerting v0.0.0-20250729175202-b4b881b7b263 // indirect
github.com/grafana/authlib v0.0.0-20250710201142-9542f2f28d43 // indirect
github.com/google/wire v0.7.0 // indirect
github.com/grafana/alerting v0.0.0-20251204145817-de8c2bbf9eba // indirect
github.com/grafana/authlib v0.0.0-20250930082137-a40e2c2b094f // indirect
github.com/grafana/dataplane/sdata v0.0.9 // indirect
github.com/grafana/dskit v0.0.0-20250611075409-46f51e1ce914 // indirect
github.com/grafana/grafana-aws-sdk v1.1.0 // indirect
github.com/grafana/grafana-azure-sdk-go/v2 v2.2.0 // indirect
github.com/grafana/grafana/apps/provisioning v0.0.0-20250804150913-990f1c69ecc2 // indirect
github.com/grafana/grafana/pkg/apiserver v0.0.0-20250804150913-990f1c69ecc2 // indirect
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4 // indirect
github.com/grafana/grafana-aws-sdk v1.3.0 // indirect
github.com/grafana/grafana-azure-sdk-go/v2 v2.3.1 // indirect
github.com/grafana/grafana/apps/provisioning v0.0.0 // indirect
github.com/grafana/grafana/pkg/apiserver v0.0.0 // indirect
github.com/grafana/otel-profiling-go v0.5.1 // indirect
github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect
github.com/grafana/sqlds/v4 v4.2.4 // indirect
github.com/grafana/pyroscope-go/godeltaprof v0.1.9 // indirect
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.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // 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
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.4 // indirect
github.com/hashicorp/go-msgpack/v2 v2.1.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.6.3 // indirect
github.com/hashicorp/go-plugin v1.7.0 // indirect
github.com/hashicorp/go-sockaddr v1.0.7 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/memberlist v0.5.2 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/huandu/xstrings v1.5.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
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jmoiron/sqlx v1.3.5 // indirect
github.com/jmoiron/sqlx v1.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/lestrrat-go/strftime v1.0.4 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/magefile/mage v1.15.0 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattetti/filebuffer v1.0.1 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/mattn/go-sqlite3 v1.14.32 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/mdlayher/vsock v1.2.1 // indirect
@@ -188,7 +210,7 @@ require (
github.com/mithrandie/go-text v1.6.0 // indirect
github.com/mithrandie/ternary v1.1.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
@@ -199,51 +221,48 @@ require (
github.com/oklog/run v1.1.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/open-feature/go-sdk v1.14.1 // indirect
github.com/open-feature/go-sdk-contrib/providers/go-feature-flag v0.2.3 // indirect
github.com/open-feature/go-sdk-contrib/providers/ofrep v0.1.5 // indirect
github.com/open-feature/go-sdk v1.16.0 // indirect
github.com/open-feature/go-sdk-contrib/providers/go-feature-flag v0.2.6 // indirect
github.com/open-feature/go-sdk-contrib/providers/ofrep v0.1.6 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/perimeterx/marshmallow v1.1.5 // indirect
github.com/pierrec/lz4/v4 v4.1.22 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/alertmanager v0.28.0 // indirect
github.com/prometheus/client_golang v1.22.0 // indirect
github.com/prometheus/alertmanager v0.28.2 // indirect
github.com/prometheus/client_golang v1.23.2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.65.0 // indirect
github.com/prometheus/common v0.67.3 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/exporter-toolkit v0.14.0 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
github.com/puzpuzpuz/xsync/v2 v2.5.1 // indirect
github.com/redis/go-redis/v9 v9.14.0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rs/cors v1.11.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/pflag v1.0.7 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // 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
github.com/tjhop/slog-gokit v0.1.3 // indirect
github.com/unknwon/bra v0.0.0-20200517080246-1e3013ecaff8 // indirect
github.com/unknwon/com v1.0.1 // indirect
github.com/unknwon/log v0.0.0-20200308114134-929b1006e34a // indirect
github.com/urfave/cli v1.22.16 // indirect
github.com/tjhop/slog-gokit v0.1.5 // indirect
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.mongodb.org/mongo-driver v1.17.3 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
go.opentelemetry.io/contrib/propagators/jaeger v1.36.0 // indirect
go.opentelemetry.io/contrib/samplers/jaegerremote v0.30.0 // 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
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.63.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
go.opentelemetry.io/contrib/propagators/jaeger v1.38.0 // indirect
go.opentelemetry.io/contrib/samplers/jaegerremote v0.32.0 // indirect
go.opentelemetry.io/otel v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
@@ -252,48 +271,52 @@ require (
go.opentelemetry.io/otel/metric v1.38.0 // indirect
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
go.opentelemetry.io/otel/trace v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
golang.org/x/crypto v0.40.0 // indirect
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
golang.org/x/mod v0.26.0 // indirect
golang.org/x/net v0.42.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.34.0 // indirect
golang.org/x/term v0.33.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/time v0.11.0 // indirect
golang.org/x/tools v0.35.0 // indirect
go.uber.org/mock v0.6.0 // 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
golang.org/x/exp v0.0.0-20251002181428-27f1f14c8bb9 // indirect
golang.org/x/mod v0.30.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.33.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 // indirect
golang.org/x/term v0.37.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/time v0.14.0 // indirect
golang.org/x/tools v0.39.0 // indirect
golang.org/x/tools/godoc v0.1.0-deprecated // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
gonum.org/v1/gonum v0.16.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/grpc v1.74.2 // indirect
google.golang.org/protobuf v1.36.6 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba // indirect
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/fsnotify/fsnotify.v1 v1.4.7 // 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/src-d/go-errors.v1 v1.0.0 // indirect
gopkg.in/telebot.v3 v3.2.1 // 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.33.3 // indirect
k8s.io/apiextensions-apiserver v0.33.3 // indirect
k8s.io/client-go v0.33.3 // indirect
k8s.io/component-base v0.33.3 // 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/utils v0.0.0-20241210054802-24370beab758 // indirect
modernc.org/libc v1.65.0 // 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.10.0 // indirect
modernc.org/sqlite v1.38.0 // indirect
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.40.1 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/yaml v1.5.0 // indirect
xorm.io/builder v0.3.6 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect
sigs.k8s.io/yaml v1.6.0 // indirect
xorm.io/builder v0.3.13 // indirect
)

File diff suppressed because it is too large Load Diff

View File

@@ -1,57 +1,49 @@
package advisor
check: {
kind: "Check"
pluralName: "Checks"
current: "v0alpha1"
checkv0alpha1: {
kind: "Check"
plural: "checks"
scope: "Namespaced"
validation: {
operations: [
"CREATE",
"UPDATE",
]
}
versions: {
"v0alpha1": {
codegen: {
ts: {enabled: false}
go: {enabled: true}
}
schema: {
#Data: {
// Generic data input that a check can receive
data?: [string]: string
}
#ErrorLink: {
// URL to a page with more information about the error
url: string
// Human readable error message
message: string
}
#ReportFailure: {
// Severity of the failure
severity: "high" | "low"
// Step ID that the failure is associated with
stepID: string
// Human readable identifier of the item that failed
item: string
// ID of the item that failed
itemID: string
// Links to actions that can be taken to resolve the failure
links: [...#ErrorLink]
// More information about the failure, not meant to be displayed to the user. Used for LLM suggestions.
moreInfo?: string
}
#Report: {
// Number of elements analyzed
count: int
// List of failures
failures: [...#ReportFailure]
}
spec: #Data
status: {
report: #Report
}
}
schema: {
#Data: {
// Generic data input that a check can receive
data?: [string]: string
}
#ErrorLink: {
// URL to a page with more information about the error
url: string
// Human readable error message
message: string
}
#ReportFailure: {
// Severity of the failure
severity: "high" | "low"
// Step ID that the failure is associated with
stepID: string
// Human readable identifier of the item that failed
item: string
// ID of the item that failed
itemID: string
// Links to actions that can be taken to resolve the failure
links: [...#ErrorLink]
// More information about the failure, not meant to be displayed to the user. Used for LLM suggestions.
moreInfo?: string
}
#Report: {
// Number of elements analyzed
count: int
// List of failures
failures: [...#ReportFailure]
}
spec: #Data
status: {
report: #Report
}
}
}

View File

@@ -1,27 +1,19 @@
package advisor
checktype: {
kind: "CheckType"
pluralName: "CheckTypes"
current: "v0alpha1"
versions: {
"v0alpha1": {
codegen: {
ts: {enabled: false}
go: {enabled: true}
}
schema: {
#Step: {
title: string
description: string
stepID: string
resolution: string
}
spec: {
name: string
steps: [...#Step]
}
}
checktypev0alpha1: {
kind: "CheckType"
plural: "checktypes"
scope: "Namespaced"
schema: {
#Step: {
title: string
description: string
stepID: string
resolution: string
}
spec: {
name: string
steps: [...#Step]
}
}
}

View File

@@ -1,4 +1,4 @@
module: "github.com/grafana/grafana/apps/advisor/kinds"
language: {
version: "v0.9.0"
version: "v0.11.0"
}

View File

@@ -1,10 +1,29 @@
package advisor
manifest: {
appName: "advisor"
groupOverride: "advisor.grafana.app"
kinds: [
check,
checktype,
]
appName: "advisor"
groupOverride: "advisor.grafana.app"
versions: {
"v0alpha1": {
codegen: {
ts: {enabled: false}
go: {enabled: true}
}
kinds: [
checkv0alpha1,
checktypev0alpha1,
]
routes: {
namespaced: {
"/register": {
"POST": {
response: {
message: string
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,99 @@
package v0alpha1
import (
"context"
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type CheckClient struct {
client *resource.TypedClient[*Check, *CheckList]
}
func NewCheckClient(client resource.Client) *CheckClient {
return &CheckClient{
client: resource.NewTypedClient[*Check, *CheckList](client, CheckKind()),
}
}
func NewCheckClientFromGenerator(generator resource.ClientGenerator) (*CheckClient, error) {
c, err := generator.ClientFor(CheckKind())
if err != nil {
return nil, err
}
return NewCheckClient(c), nil
}
func (c *CheckClient) Get(ctx context.Context, identifier resource.Identifier) (*Check, error) {
return c.client.Get(ctx, identifier)
}
func (c *CheckClient) List(ctx context.Context, namespace string, opts resource.ListOptions) (*CheckList, error) {
return c.client.List(ctx, namespace, opts)
}
func (c *CheckClient) ListAll(ctx context.Context, namespace string, opts resource.ListOptions) (*CheckList, error) {
resp, err := c.client.List(ctx, namespace, resource.ListOptions{
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
for resp.GetContinue() != "" {
page, err := c.client.List(ctx, namespace, resource.ListOptions{
Continue: resp.GetContinue(),
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
resp.SetContinue(page.GetContinue())
resp.SetResourceVersion(page.GetResourceVersion())
resp.SetItems(append(resp.GetItems(), page.GetItems()...))
}
return resp, nil
}
func (c *CheckClient) Create(ctx context.Context, obj *Check, opts resource.CreateOptions) (*Check, error) {
// Make sure apiVersion and kind are set
obj.APIVersion = GroupVersion.Identifier()
obj.Kind = CheckKind().Kind()
return c.client.Create(ctx, obj, opts)
}
func (c *CheckClient) Update(ctx context.Context, obj *Check, opts resource.UpdateOptions) (*Check, error) {
return c.client.Update(ctx, obj, opts)
}
func (c *CheckClient) Patch(ctx context.Context, identifier resource.Identifier, req resource.PatchRequest, opts resource.PatchOptions) (*Check, error) {
return c.client.Patch(ctx, identifier, req, opts)
}
func (c *CheckClient) UpdateStatus(ctx context.Context, identifier resource.Identifier, newStatus CheckStatus, opts resource.UpdateOptions) (*Check, error) {
return c.client.Update(ctx, &Check{
TypeMeta: metav1.TypeMeta{
Kind: CheckKind().Kind(),
APIVersion: GroupVersion.Identifier(),
},
ObjectMeta: metav1.ObjectMeta{
ResourceVersion: opts.ResourceVersion,
Namespace: identifier.Namespace,
Name: identifier.Name,
},
Status: newStatus,
}, resource.UpdateOptions{
Subresource: "status",
ResourceVersion: opts.ResourceVersion,
})
}
func (c *CheckClient) Delete(ctx context.Context, identifier resource.Identifier, opts resource.DeleteOptions) error {
return c.client.Delete(ctx, identifier, opts)
}

View File

@@ -0,0 +1,99 @@
package v0alpha1
import (
"context"
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type CheckTypeClient struct {
client *resource.TypedClient[*CheckType, *CheckTypeList]
}
func NewCheckTypeClient(client resource.Client) *CheckTypeClient {
return &CheckTypeClient{
client: resource.NewTypedClient[*CheckType, *CheckTypeList](client, CheckTypeKind()),
}
}
func NewCheckTypeClientFromGenerator(generator resource.ClientGenerator) (*CheckTypeClient, error) {
c, err := generator.ClientFor(CheckTypeKind())
if err != nil {
return nil, err
}
return NewCheckTypeClient(c), nil
}
func (c *CheckTypeClient) Get(ctx context.Context, identifier resource.Identifier) (*CheckType, error) {
return c.client.Get(ctx, identifier)
}
func (c *CheckTypeClient) List(ctx context.Context, namespace string, opts resource.ListOptions) (*CheckTypeList, error) {
return c.client.List(ctx, namespace, opts)
}
func (c *CheckTypeClient) ListAll(ctx context.Context, namespace string, opts resource.ListOptions) (*CheckTypeList, error) {
resp, err := c.client.List(ctx, namespace, resource.ListOptions{
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
for resp.GetContinue() != "" {
page, err := c.client.List(ctx, namespace, resource.ListOptions{
Continue: resp.GetContinue(),
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
resp.SetContinue(page.GetContinue())
resp.SetResourceVersion(page.GetResourceVersion())
resp.SetItems(append(resp.GetItems(), page.GetItems()...))
}
return resp, nil
}
func (c *CheckTypeClient) Create(ctx context.Context, obj *CheckType, opts resource.CreateOptions) (*CheckType, error) {
// Make sure apiVersion and kind are set
obj.APIVersion = GroupVersion.Identifier()
obj.Kind = CheckTypeKind().Kind()
return c.client.Create(ctx, obj, opts)
}
func (c *CheckTypeClient) Update(ctx context.Context, obj *CheckType, opts resource.UpdateOptions) (*CheckType, error) {
return c.client.Update(ctx, obj, opts)
}
func (c *CheckTypeClient) Patch(ctx context.Context, identifier resource.Identifier, req resource.PatchRequest, opts resource.PatchOptions) (*CheckType, error) {
return c.client.Patch(ctx, identifier, req, opts)
}
func (c *CheckTypeClient) UpdateStatus(ctx context.Context, identifier resource.Identifier, newStatus CheckTypeStatus, opts resource.UpdateOptions) (*CheckType, error) {
return c.client.Update(ctx, &CheckType{
TypeMeta: metav1.TypeMeta{
Kind: CheckTypeKind().Kind(),
APIVersion: GroupVersion.Identifier(),
},
ObjectMeta: metav1.ObjectMeta{
ResourceVersion: opts.ResourceVersion,
Namespace: identifier.Namespace,
Name: identifier.Name,
},
Status: newStatus,
}, resource.UpdateOptions{
Subresource: "status",
ResourceVersion: opts.ResourceVersion,
})
}
func (c *CheckTypeClient) Delete(ctx context.Context, identifier resource.Identifier, opts resource.DeleteOptions) error {
return c.client.Delete(ctx, identifier, opts)
}

View File

@@ -0,0 +1,13 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
// +k8s:openapi-gen=true
type CreateRegisterBody struct {
Message string `json:"message"`
}
// NewCreateRegisterBody creates a new CreateRegisterBody object.
func NewCreateRegisterBody() *CreateRegisterBody {
return &CreateRegisterBody{}
}

View File

@@ -0,0 +1,37 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
import (
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
// +k8s:openapi-gen=true
type CreateRegister struct {
metav1.TypeMeta `json:",inline"`
CreateRegisterBody `json:",inline"`
}
func NewCreateRegister() *CreateRegister {
return &CreateRegister{}
}
func (t *CreateRegisterBody) DeepCopyInto(dst *CreateRegisterBody) {
_ = resource.CopyObjectInto(dst, t)
}
func (o *CreateRegister) DeepCopyObject() runtime.Object {
dst := NewCreateRegister()
o.DeepCopyInto(dst)
return dst
}
func (o *CreateRegister) DeepCopyInto(dst *CreateRegister) {
dst.TypeMeta.APIVersion = o.TypeMeta.APIVersion
dst.TypeMeta.Kind = o.TypeMeta.Kind
o.CreateRegisterBody.DeepCopyInto(&dst.CreateRegisterBody)
}
var _ runtime.Object = NewCreateRegister()

View File

@@ -12,22 +12,26 @@ import (
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/resource"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/kube-openapi/pkg/spec3"
"k8s.io/kube-openapi/pkg/validation/spec"
v0alpha1 "github.com/grafana/grafana/apps/advisor/pkg/apis/advisor/v0alpha1"
)
var (
rawSchemaCheckv0alpha1 = []byte(`{"spec":{"properties":{"data":{"additionalProperties":{"type":"string"},"description":"Generic data input that a check can receive","type":"object"}},"type":"object"},"status":{"properties":{"additionalFields":{"description":"additionalFields is reserved for future use","type":"object","x-kubernetes-preserve-unknown-fields":true},"operatorStates":{"additionalProperties":{"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"description":"details contains any extra information that is operator-specific","type":"object","x-kubernetes-preserve-unknown-fields":true},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"},"report":{"properties":{"count":{"description":"Number of elements analyzed","type":"integer"},"failures":{"description":"List of failures","items":{"properties":{"item":{"description":"Human readable identifier of the item that failed","type":"string"},"itemID":{"description":"ID of the item that failed","type":"string"},"links":{"description":"Links to actions that can be taken to resolve the failure","items":{"properties":{"message":{"description":"Human readable error message","type":"string"},"url":{"description":"URL to a page with more information about the error","type":"string"}},"required":["url","message"],"type":"object"},"type":"array"},"moreInfo":{"description":"More information about the failure, not meant to be displayed to the user. Used for LLM suggestions.","type":"string"},"severity":{"description":"Severity of the failure","enum":["high","low"],"type":"string"},"stepID":{"description":"Step ID that the failure is associated with","type":"string"}},"required":["severity","stepID","item","itemID","links"],"type":"object"},"type":"array"}},"required":["count","failures"],"type":"object"}},"required":["report"],"type":"object"}}`)
rawSchemaCheckv0alpha1 = []byte(`{"Check":{"properties":{"spec":{"$ref":"#/components/schemas/spec"},"status":{"$ref":"#/components/schemas/status"}},"required":["spec"]},"ErrorLink":{"additionalProperties":false,"properties":{"message":{"description":"Human readable error message","type":"string"},"url":{"description":"URL to a page with more information about the error","type":"string"}},"required":["url","message"],"type":"object"},"OperatorState":{"additionalProperties":false,"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"details contains any extra information that is operator-specific","type":"object"},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"Report":{"additionalProperties":false,"properties":{"count":{"description":"Number of elements analyzed","type":"integer"},"failures":{"description":"List of failures","items":{"$ref":"#/components/schemas/ReportFailure"},"type":"array"}},"required":["count","failures"],"type":"object"},"ReportFailure":{"additionalProperties":false,"properties":{"item":{"description":"Human readable identifier of the item that failed","type":"string"},"itemID":{"description":"ID of the item that failed","type":"string"},"links":{"description":"Links to actions that can be taken to resolve the failure","items":{"$ref":"#/components/schemas/ErrorLink"},"type":"array"},"moreInfo":{"description":"More information about the failure, not meant to be displayed to the user. Used for LLM suggestions.","type":"string"},"severity":{"description":"Severity of the failure","enum":["high","low"],"type":"string"},"stepID":{"description":"Step ID that the failure is associated with","type":"string"}},"required":["severity","stepID","item","itemID","links"],"type":"object"},"spec":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"type":"string"},"description":"Generic data input that a check can receive","type":"object"}},"type":"object"},"status":{"additionalProperties":false,"properties":{"additionalFields":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"additionalFields is reserved for future use","type":"object"},"operatorStates":{"additionalProperties":{"$ref":"#/components/schemas/OperatorState"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"},"report":{"$ref":"#/components/schemas/Report"}},"required":["report"],"type":"object"}}`)
versionSchemaCheckv0alpha1 app.VersionSchema
_ = json.Unmarshal(rawSchemaCheckv0alpha1, &versionSchemaCheckv0alpha1)
rawSchemaCheckTypev0alpha1 = []byte(`{"spec":{"properties":{"name":{"type":"string"},"steps":{"items":{"properties":{"description":{"type":"string"},"resolution":{"type":"string"},"stepID":{"type":"string"},"title":{"type":"string"}},"required":["title","description","stepID","resolution"],"type":"object"},"type":"array"}},"required":["name","steps"],"type":"object"},"status":{"properties":{"additionalFields":{"description":"additionalFields is reserved for future use","type":"object","x-kubernetes-preserve-unknown-fields":true},"operatorStates":{"additionalProperties":{"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"description":"details contains any extra information that is operator-specific","type":"object","x-kubernetes-preserve-unknown-fields":true},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"}},"type":"object"}}`)
rawSchemaCheckTypev0alpha1 = []byte(`{"CheckType":{"properties":{"spec":{"$ref":"#/components/schemas/spec"},"status":{"$ref":"#/components/schemas/status"}},"required":["spec"]},"OperatorState":{"additionalProperties":false,"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"details contains any extra information that is operator-specific","type":"object"},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"Step":{"additionalProperties":false,"properties":{"description":{"type":"string"},"resolution":{"type":"string"},"stepID":{"type":"string"},"title":{"type":"string"}},"required":["title","description","stepID","resolution"],"type":"object"},"spec":{"additionalProperties":false,"properties":{"name":{"type":"string"},"steps":{"items":{"$ref":"#/components/schemas/Step"},"type":"array"}},"required":["name","steps"],"type":"object"},"status":{"additionalProperties":false,"properties":{"additionalFields":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"additionalFields is reserved for future use","type":"object"},"operatorStates":{"additionalProperties":{"$ref":"#/components/schemas/OperatorState"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"}},"type":"object"}}`)
versionSchemaCheckTypev0alpha1 app.VersionSchema
_ = json.Unmarshal(rawSchemaCheckTypev0alpha1, &versionSchemaCheckTypev0alpha1)
)
var appManifestData = app.ManifestData{
AppName: "advisor",
Group: "advisor.grafana.app",
AppName: "advisor",
Group: "advisor.grafana.app",
PreferredVersion: "v0alpha1",
Versions: []app.ManifestVersion{
{
Name: "v0alpha1",
@@ -57,6 +61,62 @@ var appManifestData = app.ManifestData{
Schema: &versionSchemaCheckTypev0alpha1,
},
},
Routes: app.ManifestVersionRoutes{
Namespaced: map[string]spec3.PathProps{
"/register": {
Post: &spec3.Operation{
OperationProps: spec3.OperationProps{
OperationId: "createRegister",
Responses: &spec3.Responses{
ResponsesProps: spec3.ResponsesProps{
Default: &spec3.Response{
ResponseProps: spec3.ResponseProps{
Description: "Default OK response",
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"apiVersion": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
},
},
"kind": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
},
},
"message": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
Required: []string{
"message",
"apiVersion",
"kind",
},
}},
}},
},
},
},
}},
},
},
},
},
Cluster: map[string]spec3.PathProps{},
Schemas: map[string]spec.Schema{},
},
},
},
}
@@ -81,11 +141,14 @@ func ManifestGoTypeAssociator(kind, version string) (goType resource.Kind, exist
return goType, exists
}
var customRouteToGoResponseType = map[string]any{}
var customRouteToGoResponseType = map[string]any{
"v0alpha1||<namespace>/register|POST": v0alpha1.CreateRegister{},
}
// ManifestCustomRouteResponsesAssociator returns the associated response go type for a given kind, version, custom route path, and method, if one exists.
// kind may be empty for custom routes which are not kind subroutes. Leading slashes are removed from subroute paths.
// If there is no association for the provided kind, version, custom route path, and method, exists will return false.
// Resource routes (those without a kind) should prefix their route with "<namespace>/" if the route is namespaced (otherwise the route is assumed to be cluster-scope)
func ManifestCustomRouteResponsesAssociator(kind, version, path, verb string) (goType any, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
@@ -93,3 +156,42 @@ func ManifestCustomRouteResponsesAssociator(kind, version, path, verb string) (g
goType, exists = customRouteToGoResponseType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
var customRouteToGoParamsType = map[string]runtime.Object{}
func ManifestCustomRouteQueryAssociator(kind, version, path, verb string) (goType runtime.Object, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
goType, exists = customRouteToGoParamsType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
var customRouteToGoRequestBodyType = map[string]any{}
func ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb string) (goType any, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
goType, exists = customRouteToGoRequestBodyType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
type GoTypeAssociator struct{}
func NewGoTypeAssociator() *GoTypeAssociator {
return &GoTypeAssociator{}
}
func (g *GoTypeAssociator) KindToGoType(kind, version string) (goType resource.Kind, exists bool) {
return ManifestGoTypeAssociator(kind, version)
}
func (g *GoTypeAssociator) CustomRouteReturnGoType(kind, version, path, verb string) (goType any, exists bool) {
return ManifestCustomRouteResponsesAssociator(kind, version, path, verb)
}
func (g *GoTypeAssociator) CustomRouteQueryGoType(kind, version, path, verb string) (goType runtime.Object, exists bool) {
return ManifestCustomRouteQueryAssociator(kind, version, path, verb)
}
func (g *GoTypeAssociator) CustomRouteRequestBodyGoType(kind, version, path, verb string) (goType any, exists bool) {
return ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb)
}

View File

@@ -2,7 +2,9 @@ package app
import (
"context"
"encoding/json"
"fmt"
"net/http"
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/k8s"
@@ -16,10 +18,15 @@ import (
"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"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
)
func New(cfg app.Config) (app.App, error) {
// Needed until https://github.com/grafana/grafana-app-sdk/pull/1077
if cfg.KubeConfig.APIPath == "" {
cfg.KubeConfig.APIPath = "apis"
}
// Read config
specificConfig, ok := cfg.SpecificConfig.(checkregistry.AdvisorAppConfig)
if !ok {
@@ -45,6 +52,16 @@ func New(cfg app.Config) (app.App, error) {
checkMap[c.ID()] = c
}
ctr, err := checktyperegisterer.New(cfg, log)
if err != nil {
return nil, err
}
csch, err := checkscheduler.New(cfg, log)
if err != nil {
return nil, err
}
simpleConfig := simple.AppConfig{
Name: "advisor",
KubeConfig: cfg.KubeConfig,
@@ -106,6 +123,37 @@ func New(cfg app.Config) (app.App, error) {
Kind: advisorv0alpha1.CheckTypeKind(),
},
},
VersionedCustomRoutes: map[string]simple.AppVersionRouteHandlers{
"v0alpha1": {
{
Namespaced: true,
Path: "register",
Method: "POST",
}: func(ctx context.Context, w app.CustomRouteResponseWriter, req *app.CustomRouteRequest) error {
logger := log.WithContext(ctx)
namespace := req.ResourceIdentifier.Namespace
// Register check types for the namespace
err := ctr.RegisterCheckTypesInNamespace(ctx, logger, namespace)
if err != nil {
logger.Error("Failed to register check types", "namespace", namespace, "error", err)
w.WriteHeader(http.StatusInternalServerError)
_ = json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
return err
}
// Return typed response matching the manifest
return json.NewEncoder(w).Encode(advisorv0alpha1.CreateRegister{
TypeMeta: metav1.TypeMeta{
APIVersion: fmt.Sprintf("%s/%s", advisorv0alpha1.APIGroup, advisorv0alpha1.APIVersion),
},
CreateRegisterBody: advisorv0alpha1.CreateRegisterBody{
Message: "Check types registered successfully",
},
})
},
},
},
}
a, err := simple.NewApp(simpleConfig)
@@ -119,17 +167,9 @@ func New(cfg app.Config) (app.App, error) {
}
// Save check types as resources
ctr, err := checktyperegisterer.New(cfg, log)
if err != nil {
return nil, err
}
a.AddRunnable(ctr)
// Start scheduler
csch, err := checkscheduler.New(cfg, log)
if err != nil {
return nil, err
}
a.AddRunnable(csch)
return a, nil

View File

@@ -3,6 +3,7 @@ package app
import (
"context"
claims "github.com/grafana/authlib/types"
"github.com/grafana/grafana/pkg/apimachinery/identity"
"k8s.io/apiserver/pkg/authorization/authorizer"
)
@@ -15,7 +16,22 @@ func GetAuthorizer() authorizer.Authorizer {
return authorizer.DecisionNoOpinion, "", nil
}
// require a user
// 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

View File

@@ -4,6 +4,7 @@ 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"
@@ -79,4 +80,12 @@ 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

View File

@@ -26,7 +26,7 @@ const (
type check struct {
DatasourceSvc datasources.DataSourceService
PluginStore pluginstore.Store
PluginContextProvider pluginContextProvider
PluginContextProvider PluginContextProvider
PluginClient plugins.Client
PluginRepo repo.Service
GrafanaVersion string
@@ -37,7 +37,7 @@ type check struct {
func New(
datasourceSvc datasources.DataSourceService,
pluginStore pluginstore.Store,
pluginContextProvider pluginContextProvider,
pluginContextProvider PluginContextProvider,
pluginClient plugins.Client,
pluginRepo repo.Service,
grafanaVersion string,
@@ -168,6 +168,6 @@ func (c *check) canBeInstalled(ctx context.Context, pluginType string) (bool, er
return isAvailableInRepo, nil
}
type pluginContextProvider interface {
type PluginContextProvider interface {
GetWithDataSource(ctx context.Context, pluginID string, user identity.Requester, ds *datasources.DataSource) (backend.PluginContext, error)
}

View File

@@ -15,7 +15,7 @@ import (
)
type healthCheckStep struct {
PluginContextProvider pluginContextProvider
PluginContextProvider PluginContextProvider
PluginClient plugins.Client
}

View File

@@ -86,6 +86,11 @@ func New(cfg app.Config, log logging.Logger) (app.Runnable, error) {
func (r *Runner) Run(ctx context.Context) error {
logger := r.log.WithContext(ctx)
if r.stackID == "" && r.orgService == nil {
logger.Debug("Check scheduler disabled")
return nil
}
// We still need the context to eventually be cancelled to exit this function
// but we don't want the requests to fail because of it
ctxWithoutCancel := context.WithoutCancel(ctx)

View File

@@ -34,8 +34,10 @@ type Runner struct {
retryDelay time.Duration
}
var _ app.Runnable = (*Runner)(nil)
// NewRunner creates a new Runner.
func New(cfg app.Config, log logging.Logger) (app.Runnable, error) {
func New(cfg app.Config, log logging.Logger) (*Runner, error) {
// Read config
specificConfig, ok := cfg.SpecificConfig.(checkregistry.AdvisorAppConfig)
if !ok {
@@ -64,6 +66,11 @@ func New(cfg app.Config, log logging.Logger) (app.Runnable, error) {
func (r *Runner) Run(ctx context.Context) error {
logger := r.log.WithContext(ctx)
// If stackID is empty and OrgService is nil, do nothing (on-demand registration only)
if r.stackID == "" && r.orgService == nil {
logger.Debug("Auto-registration of checktypes disabled")
return nil
}
// Determine namespaces based on StackID or OrgID
namespaces, err := checks.GetNamespaces(ctx, r.stackID, r.orgService)
@@ -74,37 +81,9 @@ func (r *Runner) Run(ctx context.Context) error {
// Register check types in each namespace
for _, namespace := range namespaces {
for _, t := range r.checkRegistry.Checks() {
steps := t.Steps()
stepTypes := make([]advisorv0alpha1.CheckTypeStep, len(steps))
for i, s := range steps {
stepTypes[i] = advisorv0alpha1.CheckTypeStep{
Title: s.Title(),
Description: s.Description(),
StepID: s.ID(),
Resolution: s.Resolution(),
}
}
obj := &advisorv0alpha1.CheckType{
ObjectMeta: metav1.ObjectMeta{
Name: t.ID(),
Namespace: namespace,
Annotations: map[string]string{
checks.NameAnnotation: t.Name(),
// Flag to indicate feature availability
checks.RetryAnnotation: "1",
checks.IgnoreStepsAnnotation: "1",
},
},
Spec: advisorv0alpha1.CheckTypeSpec{
Name: t.ID(),
Steps: stepTypes,
},
}
err := r.registerCheckType(ctx, logger, t.ID(), obj)
if err != nil {
return err
}
err := r.RegisterCheckTypesInNamespace(ctx, logger, namespace)
if err != nil {
return fmt.Errorf("failed to register check types in namespace %s: %w", namespace, err)
}
}
return nil
@@ -238,3 +217,38 @@ func isAPIServerShuttingDown(err error, logger logging.Logger) bool {
}
return false
}
func (r *Runner) RegisterCheckTypesInNamespace(ctx context.Context, logger logging.Logger, namespace string) error {
for _, t := range r.checkRegistry.Checks() {
steps := t.Steps()
stepTypes := make([]advisorv0alpha1.CheckTypeStep, len(steps))
for i, s := range steps {
stepTypes[i] = advisorv0alpha1.CheckTypeStep{
Title: s.Title(),
Description: s.Description(),
StepID: s.ID(),
Resolution: s.Resolution(),
}
}
obj := &advisorv0alpha1.CheckType{
ObjectMeta: metav1.ObjectMeta{
Name: t.ID(),
Namespace: namespace,
Annotations: map[string]string{
checks.NameAnnotation: t.Name(),
// Flag to indicate feature availability
checks.RetryAnnotation: "1",
checks.IgnoreStepsAnnotation: "1",
},
},
Spec: advisorv0alpha1.CheckTypeSpec{
Name: t.ID(),
Steps: stepTypes,
},
}
if err := r.registerCheckType(ctx, logger, t.ID(), obj); err != nil {
return fmt.Errorf("failed to register check type %s: %w", t.ID(), err)
}
}
return nil
}

View File

@@ -1,11 +1,11 @@
module github.com/grafana/grafana/apps/alerting/alertenrichment
go 1.25.3
go 1.25.5
require (
github.com/grafana/grafana-app-sdk v0.47.0
github.com/grafana/grafana-app-sdk v0.48.5
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250901080157-a0280d701b28
k8s.io/apimachinery v0.34.1
k8s.io/apimachinery v0.34.2
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
)
@@ -15,7 +15,7 @@ require (
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-openapi/jsonpointer v0.22.1 // indirect
github.com/go-openapi/jsonreference v0.21.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-openapi/swag/jsonname v0.25.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
@@ -27,8 +27,8 @@ require (
github.com/x448/float16 v0.8.4 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/net v0.45.0 // indirect
golang.org/x/text v0.30.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/text v0.31.0 // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
@@ -36,5 +36,5 @@ require (
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // 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.0 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect
)

View File

@@ -12,8 +12,8 @@ github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo
github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM=
github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU=
github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU=
github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -23,8 +23,8 @@ github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7O
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/grafana/grafana-app-sdk v0.47.0 h1:zTKV+p6zM9y+In+dAcaHczbJJsQj9WKglSBcQXMOA+8=
github.com/grafana/grafana-app-sdk v0.47.0/go.mod h1:kywXmkppq0oReUMzkjTW8Fq2EBzyN7v914jttTWnWxA=
github.com/grafana/grafana-app-sdk v0.48.5 h1:MS8l9fTZz+VbTfgApn09jw27GxhQ6fNOWGhC4ydvZmM=
github.com/grafana/grafana-app-sdk v0.48.5/go.mod h1:HJsMOSBmt/D/Ihs1SvagOwmXKi0coBMVHlfvdd+qe9Y=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250901080157-a0280d701b28 h1:PgMfX4OPENz/iXmtDDIW9+poZY4UD0hhmXm7flVclDo=
github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250901080157-a0280d701b28/go.mod h1:av5N0Naq+8VV9MLF7zAkihy/mVq5UbS2EvRSJukDHlY=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -73,8 +73,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -83,8 +83,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -102,8 +102,8 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4=
k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4=
k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
@@ -114,7 +114,7 @@ sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7np
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 h1:JrhdFMqOd/+3ByqlP2I45kTOZmTRLBUm5pvRjeheg7E=
sigs.k8s.io/structured-merge-diff/v6 v6.3.1/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

View File

@@ -0,0 +1,9 @@
include ../../sdk.mk
.PHONY: generate # Run Grafana App SDK code generation
generate: install-app-sdk update-app-sdk
@$(APP_SDK_BIN) generate \
--source=./kinds/ \
--gogenpath=./pkg/apis \
--grouping=group \
--defencoding=none

View File

@@ -0,0 +1,182 @@
module github.com/grafana/grafana/apps/alerting/historian
go 1.25.5
require (
github.com/go-kit/log v0.2.1
github.com/grafana/alerting v0.0.0-20251204145817-de8c2bbf9eba
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4
github.com/grafana/grafana-app-sdk v0.48.5
github.com/grafana/grafana-app-sdk/logging v0.48.3
github.com/prometheus/client_golang v1.23.2
github.com/spf13/pflag v1.0.10
github.com/stretchr/testify v1.11.1
go.opentelemetry.io/otel v1.38.0
go.opentelemetry.io/otel/trace v1.38.0
k8s.io/apimachinery v0.34.2
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
)
require (
dario.cat/mergo v1.0.2 // indirect
github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.4.0 // indirect
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/aws/aws-sdk-go v1.55.7 // indirect
github.com/benbjohnson/clock v1.3.5 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // 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/emicklei/go-restful/v3 v3.13.0 // indirect
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/getkin/kin-openapi v0.133.0 // indirect
github.com/go-logfmt/logfmt v0.6.1 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/errors v0.22.3 // indirect
github.com/go-openapi/jsonpointer v0.22.1 // indirect
github.com/go-openapi/jsonreference v0.21.2 // indirect
github.com/go-openapi/strfmt v0.24.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-openapi/swag/jsonname v0.25.1 // indirect
github.com/go-test/deep v1.1.1 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/gogo/status v1.1.1 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v1.0.0 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grafana/loki/pkg/push v0.0.0-20250823105456-332df2b20000 // indirect
github.com/grafana/otel-profiling-go v0.5.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.4 // indirect
github.com/hashicorp/go-msgpack/v2 v2.1.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-sockaddr v1.0.7 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/memberlist v0.5.2 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/jaegertracing/jaeger-idl v0.5.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mdlayher/socket v0.4.1 // indirect
github.com/mdlayher/vsock v1.2.1 // indirect
github.com/miekg/dns v1.1.63 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/onsi/ginkgo/v2 v2.22.2 // indirect
github.com/onsi/gomega v1.36.2 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/perimeterx/marshmallow v1.1.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/alertmanager v0.28.2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.67.3 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/exporter-toolkit v0.14.0 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
github.com/puzpuzpuz/xsync/v2 v2.5.1 // indirect
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/woodsbury/decimal128 v1.3.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.mongodb.org/mongo-driver v1.17.4 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 // indirect
go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 // indirect
go.opentelemetry.io/contrib/propagators/jaeger v1.38.0 // indirect
go.opentelemetry.io/contrib/samplers/jaegerremote v0.32.0 // indirect
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect
go.opentelemetry.io/otel/exporters/prometheus v0.59.0 // indirect
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.12.2 // indirect
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 // indirect
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 // indirect
go.opentelemetry.io/otel/log v0.12.2 // indirect
go.opentelemetry.io/otel/metric v1.38.0 // indirect
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
go.opentelemetry.io/otel/sdk/log v0.12.2 // indirect
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
go.uber.org/atomic v1.11.0 // 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
golang.org/x/mod v0.30.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.33.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/term v0.37.0 // indirect
golang.org/x/text v0.31.0 // indirect
golang.org/x/time v0.14.0 // indirect
golang.org/x/tools v0.39.0 // indirect
golang.org/x/tools/godoc v0.1.0-deprecated // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba // indirect
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/inf.v0 v0.9.1 // indirect
gopkg.in/mail.v2 v2.3.1 // 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/klog/v2 v2.130.1 // indirect
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // 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
sigs.k8s.io/yaml v1.6.0 // indirect
)
// Use our fork of the upstream Alertmanager.
replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250911094103-5456b6e45604

View File

@@ -0,0 +1,870 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE=
github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o=
github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 h1:N7oVaKyGp8bttX0bfZGmcGkjz7DLQXhAn3DNd3T0ous=
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874/go.mod h1:r5xuitiExdLAJ09PR7vBVENGvp4ZuTBeWTGtxuX3K+c=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ=
github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE=
github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
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-openapi/errors v0.22.3 h1:k6Hxa5Jg1TUyZnOwV2Lh81j8ayNw5VVYLvKrp4zFKFs=
github.com/go-openapi/errors v0.22.3/go.mod h1:+WvbaBBULWCOna//9B9TbLNGSFOfF8lY9dw4hGiEiKQ=
github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk=
github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM=
github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU=
github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ=
github.com/go-openapi/strfmt v0.24.0 h1:dDsopqbI3wrrlIzeXRbqMihRNnjzGC+ez4NQaAAJLuc=
github.com/go-openapi/strfmt v0.24.0/go.mod h1:Lnn1Bk9rZjXxU9VMADbEEOo7D7CDyKGLsSKekhFr7s4=
github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU=
github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/gogo/status v1.1.1 h1:DuHXlSFHNKqTQ+/ACf5Vs6r4X/dH2EgIzR9Vr+H65kg=
github.com/gogo/status v1.1.1/go.mod h1:jpG3dM5QPcqu19Hg8lkUhBFBa3TcLs1DG7+2Jqci7oU=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grafana/grafana-app-sdk v0.48.5 h1:MS8l9fTZz+VbTfgApn09jw27GxhQ6fNOWGhC4ydvZmM=
github.com/grafana/grafana-app-sdk v0.48.5/go.mod h1:HJsMOSBmt/D/Ihs1SvagOwmXKi0coBMVHlfvdd+qe9Y=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/grafana/alerting v0.0.0-20251204145817-de8c2bbf9eba h1:psKWNETD5nGxmFAlqnWsXoRyUwSa2GHNEMSEDKGKfQ4=
github.com/grafana/alerting v0.0.0-20251204145817-de8c2bbf9eba/go.mod h1:l7v67cgP7x72ajB9UPZlumdrHqNztpKoqQ52cU8T3LU=
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4 h1:jSojuc7njleS3UOz223WDlXOinmuLAIPI0z2vtq8EgI=
github.com/grafana/dskit v0.0.0-20250908063411-6b6da59b5cc4/go.mod h1:VahT+GtfQIM+o8ht2StR6J9g+Ef+C2Vokh5uuSmOD/4=
github.com/grafana/grafana-app-sdk v0.48.5 h1:MS8l9fTZz+VbTfgApn09jw27GxhQ6fNOWGhC4ydvZmM=
github.com/grafana/grafana-app-sdk v0.48.5/go.mod h1:HJsMOSBmt/D/Ihs1SvagOwmXKi0coBMVHlfvdd+qe9Y=
github.com/grafana/grafana-app-sdk/logging v0.48.3 h1:72NUpGNiJXCNQz/on++YSsl38xuVYYBKv5kKQaOClX4=
github.com/grafana/grafana-app-sdk/logging v0.48.3/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA=
github.com/grafana/loki/pkg/push v0.0.0-20250823105456-332df2b20000 h1:/5LKSYgLmAhwA4m6iGUD4w1YkydEWWjazn9qxCFT8W0=
github.com/grafana/loki/pkg/push v0.0.0-20250823105456-332df2b20000/go.mod h1:/ZklAgE1i4f3Z8uriXwESmCr1VLF8lBGaJspuaGuf78=
github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8=
github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls=
github.com/grafana/prometheus-alertmanager v0.25.1-0.20250911094103-5456b6e45604 h1:aXfUhVN/Ewfpbko2CCtL65cIiGgwStOo4lWH2b6gw2U=
github.com/grafana/prometheus-alertmanager v0.25.1-0.20250911094103-5456b6e45604/go.mod h1:O/QP1BCm0HHIzbKvgMzqb5sSyH88rzkFk84F4TfJjBU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY=
github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI=
github.com/hashicorp/go-msgpack/v2 v2.1.2 h1:4Ee8FTp834e+ewB71RDrQ0VKpyFdrKOjvYtnQ/ltVj0=
github.com/hashicorp/go-msgpack/v2 v2.1.2/go.mod h1:upybraOAblm4S7rx0+jeNy+CWWhzywQsSRV5033mMu4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw=
github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hashicorp/memberlist v0.5.2 h1:rJoNPWZ0juJBgqn48gjy59K5H4rNgvUoM1kUD7bXiuI=
github.com/hashicorp/memberlist v0.5.2/go.mod h1:Ri9p/tRShbjYnpNf4FFPXG7wxEGY4Nrcn6E7jrVa//4=
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jaegertracing/jaeger-idl v0.5.0 h1:zFXR5NL3Utu7MhPg8ZorxtCBjHrL3ReM1VoB65FOFGE=
github.com/jaegertracing/jaeger-idl v0.5.0/go.mod h1:ON90zFo9eoyXrt9F/KN8YeF3zxcnujaisMweFY/rg5k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
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=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ=
github.com/mdlayher/vsock v1.2.1/go.mod h1:NRfCibel++DgeMD8z/hP+PPTjlNJsdPOmxcnENvE+SE=
github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY=
github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY=
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw=
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c=
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s=
github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
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.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.67.3 h1:shd26MlnwTw5jksTDhC7rTQIteBxy+ZZDr3t7F2xN2Q=
github.com/prometheus/common v0.67.3/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
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.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
github.com/puzpuzpuz/xsync/v2 v2.5.1 h1:mVGYAvzDSu52+zaGyNjC+24Xw2bQi3kTr4QJ6N9pIIU=
github.com/puzpuzpuz/xsync/v2 v2.5.1/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c h1:aqg5Vm5dwtvL+YgDpBcK1ITf3o96N/K7/wsRXQnUTEs=
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c/go.mod h1:owqhoLW1qZoYLZzLnBw+QkPP9WZnjlSWihhxAJC1+/M=
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 h1:OfRzdxCzDhp+rsKWXuOO2I/quKMJ/+TQwVbIP/gltZg=
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92/go.mod h1:7/OT02F6S6I7v6WXb+IjhMuZEYfH/RJ5RwEWnEo5BMg=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
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=
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0=
github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
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=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
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=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 h1:RyrtJzu5MAmIcbRrwg75b+w3RlZCP0vJByDVzcpAe3M=
go.opentelemetry.io/contrib/bridges/prometheus v0.61.0/go.mod h1:tirr4p9NXbzjlbruiRGp53IzlYrDk5CO2fdHj0sSSaY=
go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 h1:XfzKtKSrbtYk9TNCF8dkO0Y9M7IOfb4idCwBOTwGBiI=
go.opentelemetry.io/contrib/exporters/autoexport v0.61.0/go.mod h1:N6otC+qXTD5bAnbK2O1f/1SXq3cX+3KYSWrkBUqG0cw=
go.opentelemetry.io/contrib/propagators/jaeger v1.38.0 h1:nXGeLvT1QtCAhkASkP/ksjkTKZALIaQBIW+JSIw1KIc=
go.opentelemetry.io/contrib/propagators/jaeger v1.38.0/go.mod h1:oMvOXk78ZR3KEuPMBgp/ThAMDy9ku/eyUVztr+3G6Wo=
go.opentelemetry.io/contrib/samplers/jaegerremote v0.32.0 h1:oPW/SRFyHgIgxrvNhSBzqvZER2N5kRlci3/rGTOuyWo=
go.opentelemetry.io/contrib/samplers/jaegerremote v0.32.0/go.mod h1:B9Oka5QVD0bnmZNO6gBbBta6nohD/1Z+f9waH2oXyBs=
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2/go.mod h1:DvPtKE63knkDVP88qpatBj81JxN+w1bqfVbsbCbj1WY=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2/go.mod h1:QTnxBwT/1rBIgAG1goq6xMydfYOBKU6KTiYF4fp5zL8=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
go.opentelemetry.io/otel/exporters/prometheus v0.59.0 h1:HHf+wKS6o5++XZhS98wvILrLVgHxjA/AMjqHKes+uzo=
go.opentelemetry.io/otel/exporters/prometheus v0.59.0/go.mod h1:R8GpRXTZrqvXHDEGVH5bF6+JqAZcK8PjJcZ5nGhEWiE=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.12.2 h1:12vMqzLLNZtXuXbJhSENRg+Vvx+ynNilV8twBLBsXMY=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.12.2/go.mod h1:ZccPZoPOoq8x3Trik/fCsba7DEYDUnN6yX79pgp2BUQ=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 h1:6VjV6Et+1Hd2iLZEPtdV7vie80Yyqf7oikJLjQ/myi0=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0/go.mod h1:u8hcp8ji5gaM/RfcOo8z9NMnf1pVLfVY7lBY2VOGuUU=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE=
go.opentelemetry.io/otel/log v0.12.2 h1:yob9JVHn2ZY24byZeaXpTVoPS6l+UrrxmxmPKohXTwc=
go.opentelemetry.io/otel/log v0.12.2/go.mod h1:ShIItIxSYxufUMt+1H5a2wbckGli3/iCfuEbVZi/98E=
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
go.opentelemetry.io/otel/sdk/log v0.12.2 h1:yNoETvTByVKi7wHvYS6HMcZrN5hFLD7I++1xIZ/k6W0=
go.opentelemetry.io/otel/sdk/log v0.12.2/go.mod h1:DcpdmUXHJgSqN/dh+XMWa7Vf89u9ap0/AAk/XGLnEzY=
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc h1:uqxdywfHqqCl6LmZzI3pUnXT1RGFYyUgxj0AkWPFxi0=
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc/go.mod h1:TY/N/FT7dmFrP/r5ym3g0yysP1DefqGpAZr4f82P0dE=
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A=
go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
golang.org/x/tools/godoc v0.1.0-deprecated h1:o+aZ1BOj6Hsx/GBdJO/s815sqftjSnrZZwyYTHODvtk=
golang.org/x/tools/godoc v0.1.0-deprecated/go.mod h1:qM63CriJ961IHWmnWa9CjZnBndniPt4a3CK0PVB9bIg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=
gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4=
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U=
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.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
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=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY=
k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw=
k8s.io/apiextensions-apiserver v0.34.2 h1:WStKftnGeoKP4AZRz/BaAAEJvYp4mlZGN0UCv+uvsqo=
k8s.io/apiextensions-apiserver v0.34.2/go.mod h1:398CJrsgXF1wytdaanynDpJ67zG4Xq7yj91GrmYN2SE=
k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4=
k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M=
k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 h1:JrhdFMqOd/+3ByqlP2I45kTOZmTRLBUm5pvRjeheg7E=
sigs.k8s.io/structured-merge-diff/v6 v6.3.1/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

View File

@@ -0,0 +1,4 @@
module: "github.com/grafana/grafana/apps/alerting/historian/kinds"
language: {
version: "v0.11.0"
}

View File

@@ -0,0 +1,26 @@
package kinds
import (
"github.com/grafana/grafana/apps/alerting/historian/kinds/v0alpha1"
)
manifest: {
appName: "alerting-historian"
groupOverride: "historian.alerting.grafana.app"
versions: {
"v0alpha1": {
kinds: [dummyv0alpha1]
routes: v0alpha1.routes
}
}
}
dummyv0alpha1: {
kind: "Dummy"
schema: {
// Spec is the schema of our resource. The spec should include all the user-editable information for the kind.
spec: {
dummyField: int
}
}
}

View File

@@ -0,0 +1,9 @@
package v0alpha1
#Matcher: {
type: "=" | "!=" | "=~" | "!~" @cuetsy(kind="enum",memberNames="Equal|NotEqual|EqualRegex|NotEqualRegex")
label: string
value: string
}
#Matchers: [...#Matcher]

View File

@@ -0,0 +1,65 @@
package v0alpha1
import (
"time"
)
#NotificationStatus: "firing" | "resolved" @cog(kind="enum",memberNames="Firing|Resolved")
#NotificationOutcome: "success" | "error" @cog(kind="enum",memberNames="Success|Error")
#NotificationQuery: {
// From is the starting timestamp for the query.
from?: time.Time
// To is the starting timestamp for the query.
to?: time.Time
// Limit is the maximum number of entries to return.
limit?: int64
// Receiver optionally filters the entries by receiver title (contact point).
receiver?: string
// Status optionally filters the entries to only either firing or resolved.
status?: #NotificationStatus
// Outcome optionally filters the entries to only either successful or failed attempts.
outcome?: #NotificationOutcome
// RuleUID optionally filters the entries to a specific alert rule.
ruleUID?: string
// GroupLabels optionally filters the entries by matching group labels.
groupLabels?: #Matchers
}
#NotificationQueryResult: {
entries: [...#NotificationEntry]
}
#NotificationEntry: {
// Timestamp is the time at which the notification attempt completed.
timestamp: time.Time
// Receiver is the receiver (contact point) title.
receiver: string
// Status indicates if the notification contains one or more firing alerts.
status: #NotificationStatus
// Outcome indicaes if the notificaion attempt was successful or if it failed.
outcome: #NotificationOutcome
// GroupLabels are the labels uniquely identifying the alert group within a route.
groupLabels: [string]: string
// Alerts are the alerts grouped into the notification.
alerts: [...#NotificationEntryAlert]
// Retry indicates if the attempt was a retried attempt.
retry: bool
// Error is the message returned by the contact point if delivery failed.
error?: string
// Duration is the length of time the notification attempt took in nanoseconds.
duration: int
// PipelineTime is the time at which the flush began.
pipelineTime: time.Time
// GroupKey uniquely idenifies the dispatcher alert group.
groupKey: string
}
#NotificationEntryAlert: {
status: string
labels: [string]: string
annotations: [string]: string
startsAt: time.Time
endsAt: time.Time
}

View File

@@ -0,0 +1,29 @@
package v0alpha1
routes: {
namespaced: {
// This endpoint is an exact copy of the existing /history endpoint,
// with the exception that error responses will be Kubernetes-style,
// not Grafana-style. It will be replaced in the future with a better
// more schema-friendly API.
"/alertstate/history": {
"GET": {
response: {
body: [string]: _
}
responseMetadata: typeMeta: false
}
}
// Query notification history.
"/notification/query": {
"POST": {
request: {
body: #NotificationQuery
}
response: #NotificationQueryResult
responseMetadata: typeMeta: false
}
}
}
}

View File

@@ -0,0 +1,18 @@
package v0alpha1
import "k8s.io/apimachinery/pkg/runtime/schema"
const (
// APIGroup is the API group used by all kinds in this package
APIGroup = "historian.alerting.grafana.app"
// APIVersion is the API version used by all kinds in this package
APIVersion = "v0alpha1"
)
var (
// GroupVersion is a schema.GroupVersion consisting of the Group and Version constants for this package
GroupVersion = schema.GroupVersion{
Group: APIGroup,
Version: APIVersion,
}
)

View File

@@ -0,0 +1,67 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
import (
time "time"
)
type CreateNotificationqueryRequestNotificationStatus string
const (
CreateNotificationqueryRequestNotificationStatusFiring CreateNotificationqueryRequestNotificationStatus = "firing"
CreateNotificationqueryRequestNotificationStatusResolved CreateNotificationqueryRequestNotificationStatus = "resolved"
)
type CreateNotificationqueryRequestNotificationOutcome string
const (
CreateNotificationqueryRequestNotificationOutcomeSuccess CreateNotificationqueryRequestNotificationOutcome = "success"
CreateNotificationqueryRequestNotificationOutcomeError CreateNotificationqueryRequestNotificationOutcome = "error"
)
type CreateNotificationqueryRequestMatchers []CreateNotificationqueryRequestMatcher
type CreateNotificationqueryRequestMatcher struct {
Type CreateNotificationqueryRequestMatcherType `json:"type"`
Label string `json:"label"`
Value string `json:"value"`
}
// NewCreateNotificationqueryRequestMatcher creates a new CreateNotificationqueryRequestMatcher object.
func NewCreateNotificationqueryRequestMatcher() *CreateNotificationqueryRequestMatcher {
return &CreateNotificationqueryRequestMatcher{}
}
type CreateNotificationqueryRequestBody struct {
// From is the starting timestamp for the query.
From *time.Time `json:"from,omitempty"`
// To is the starting timestamp for the query.
To *time.Time `json:"to,omitempty"`
// Limit is the maximum number of entries to return.
Limit *int64 `json:"limit,omitempty"`
// Receiver optionally filters the entries by receiver title (contact point).
Receiver *string `json:"receiver,omitempty"`
// Status optionally filters the entries to only either firing or resolved.
Status *CreateNotificationqueryRequestNotificationStatus `json:"status,omitempty"`
// Outcome optionally filters the entries to only either successful or failed attempts.
Outcome *CreateNotificationqueryRequestNotificationOutcome `json:"outcome,omitempty"`
// RuleUID optionally filters the entries to a specific alert rule.
RuleUID *string `json:"ruleUID,omitempty"`
// GroupLabels optionally filters the entries by matching group labels.
GroupLabels *CreateNotificationqueryRequestMatchers `json:"groupLabels,omitempty"`
}
// NewCreateNotificationqueryRequestBody creates a new CreateNotificationqueryRequestBody object.
func NewCreateNotificationqueryRequestBody() *CreateNotificationqueryRequestBody {
return &CreateNotificationqueryRequestBody{}
}
type CreateNotificationqueryRequestMatcherType string
const (
CreateNotificationqueryRequestMatcherTypeEqual CreateNotificationqueryRequestMatcherType = "="
CreateNotificationqueryRequestMatcherTypeNotEqual CreateNotificationqueryRequestMatcherType = "!="
CreateNotificationqueryRequestMatcherTypeEqualRegex CreateNotificationqueryRequestMatcherType = "=~"
CreateNotificationqueryRequestMatcherTypeNotEqualRegex CreateNotificationqueryRequestMatcherType = "!~"
)

View File

@@ -0,0 +1,86 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
import (
time "time"
)
// +k8s:openapi-gen=true
type NotificationEntry struct {
// Timestamp is the time at which the notification attempt completed.
Timestamp time.Time `json:"timestamp"`
// Receiver is the receiver (contact point) title.
Receiver string `json:"receiver"`
// Status indicates if the notification contains one or more firing alerts.
Status NotificationStatus `json:"status"`
// Outcome indicaes if the notificaion attempt was successful or if it failed.
Outcome NotificationOutcome `json:"outcome"`
// GroupLabels are the labels uniquely identifying the alert group within a route.
GroupLabels map[string]string `json:"groupLabels"`
// Alerts are the alerts grouped into the notification.
Alerts []NotificationEntryAlert `json:"alerts"`
// Retry indicates if the attempt was a retried attempt.
Retry bool `json:"retry"`
// Error is the message returned by the contact point if delivery failed.
Error *string `json:"error,omitempty"`
// Duration is the length of time the notification attempt took in nanoseconds.
Duration int64 `json:"duration"`
// PipelineTime is the time at which the flush began.
PipelineTime time.Time `json:"pipelineTime"`
// GroupKey uniquely idenifies the dispatcher alert group.
GroupKey string `json:"groupKey"`
}
// NewNotificationEntry creates a new NotificationEntry object.
func NewNotificationEntry() *NotificationEntry {
return &NotificationEntry{
GroupLabels: map[string]string{},
Alerts: []NotificationEntryAlert{},
}
}
// +k8s:openapi-gen=true
type NotificationStatus string
const (
NotificationStatusFiring NotificationStatus = "firing"
NotificationStatusResolved NotificationStatus = "resolved"
)
// +k8s:openapi-gen=true
type NotificationOutcome string
const (
NotificationOutcomeSuccess NotificationOutcome = "success"
NotificationOutcomeError NotificationOutcome = "error"
)
// +k8s:openapi-gen=true
type NotificationEntryAlert struct {
Status string `json:"status"`
Labels map[string]string `json:"labels"`
Annotations map[string]string `json:"annotations"`
StartsAt time.Time `json:"startsAt"`
EndsAt time.Time `json:"endsAt"`
}
// NewNotificationEntryAlert creates a new NotificationEntryAlert object.
func NewNotificationEntryAlert() *NotificationEntryAlert {
return &NotificationEntryAlert{
Labels: map[string]string{},
Annotations: map[string]string{},
}
}
// +k8s:openapi-gen=true
type CreateNotificationquery struct {
Entries []NotificationEntry `json:"entries"`
}
// NewCreateNotificationquery creates a new CreateNotificationquery object.
func NewCreateNotificationquery() *CreateNotificationquery {
return &CreateNotificationquery{
Entries: []NotificationEntry{},
}
}

View File

@@ -0,0 +1,99 @@
package v0alpha1
import (
"context"
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type DummyClient struct {
client *resource.TypedClient[*Dummy, *DummyList]
}
func NewDummyClient(client resource.Client) *DummyClient {
return &DummyClient{
client: resource.NewTypedClient[*Dummy, *DummyList](client, DummyKind()),
}
}
func NewDummyClientFromGenerator(generator resource.ClientGenerator) (*DummyClient, error) {
c, err := generator.ClientFor(DummyKind())
if err != nil {
return nil, err
}
return NewDummyClient(c), nil
}
func (c *DummyClient) Get(ctx context.Context, identifier resource.Identifier) (*Dummy, error) {
return c.client.Get(ctx, identifier)
}
func (c *DummyClient) List(ctx context.Context, namespace string, opts resource.ListOptions) (*DummyList, error) {
return c.client.List(ctx, namespace, opts)
}
func (c *DummyClient) ListAll(ctx context.Context, namespace string, opts resource.ListOptions) (*DummyList, error) {
resp, err := c.client.List(ctx, namespace, resource.ListOptions{
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
for resp.GetContinue() != "" {
page, err := c.client.List(ctx, namespace, resource.ListOptions{
Continue: resp.GetContinue(),
ResourceVersion: opts.ResourceVersion,
Limit: opts.Limit,
LabelFilters: opts.LabelFilters,
FieldSelectors: opts.FieldSelectors,
})
if err != nil {
return nil, err
}
resp.SetContinue(page.GetContinue())
resp.SetResourceVersion(page.GetResourceVersion())
resp.SetItems(append(resp.GetItems(), page.GetItems()...))
}
return resp, nil
}
func (c *DummyClient) Create(ctx context.Context, obj *Dummy, opts resource.CreateOptions) (*Dummy, error) {
// Make sure apiVersion and kind are set
obj.APIVersion = GroupVersion.Identifier()
obj.Kind = DummyKind().Kind()
return c.client.Create(ctx, obj, opts)
}
func (c *DummyClient) Update(ctx context.Context, obj *Dummy, opts resource.UpdateOptions) (*Dummy, error) {
return c.client.Update(ctx, obj, opts)
}
func (c *DummyClient) Patch(ctx context.Context, identifier resource.Identifier, req resource.PatchRequest, opts resource.PatchOptions) (*Dummy, error) {
return c.client.Patch(ctx, identifier, req, opts)
}
func (c *DummyClient) UpdateStatus(ctx context.Context, identifier resource.Identifier, newStatus DummyStatus, opts resource.UpdateOptions) (*Dummy, error) {
return c.client.Update(ctx, &Dummy{
TypeMeta: metav1.TypeMeta{
Kind: DummyKind().Kind(),
APIVersion: GroupVersion.Identifier(),
},
ObjectMeta: metav1.ObjectMeta{
ResourceVersion: opts.ResourceVersion,
Namespace: identifier.Namespace,
Name: identifier.Name,
},
Status: newStatus,
}, resource.UpdateOptions{
Subresource: "status",
ResourceVersion: opts.ResourceVersion,
})
}
func (c *DummyClient) Delete(ctx context.Context, identifier resource.Identifier, opts resource.DeleteOptions) error {
return c.client.Delete(ctx, identifier, opts)
}

View File

@@ -11,18 +11,18 @@ import (
"github.com/grafana/grafana-app-sdk/resource"
)
// PluginInstallJSONCodec is an implementation of resource.Codec for kubernetes JSON encoding
type PluginInstallJSONCodec struct{}
// DummyJSONCodec is an implementation of resource.Codec for kubernetes JSON encoding
type DummyJSONCodec struct{}
// Read reads JSON-encoded bytes from `reader` and unmarshals them into `into`
func (*PluginInstallJSONCodec) Read(reader io.Reader, into resource.Object) error {
func (*DummyJSONCodec) Read(reader io.Reader, into resource.Object) error {
return json.NewDecoder(reader).Decode(into)
}
// Write writes JSON-encoded bytes into `writer` marshaled from `from`
func (*PluginInstallJSONCodec) Write(writer io.Writer, from resource.Object) error {
func (*DummyJSONCodec) Write(writer io.Writer, from resource.Object) error {
return json.NewEncoder(writer).Encode(from)
}
// Interface compliance checks
var _ resource.Codec = &PluginInstallJSONCodec{}
var _ resource.Codec = &DummyJSONCodec{}

View File

@@ -9,7 +9,7 @@ import (
// metadata contains embedded CommonMetadata and can be extended with custom string fields
// TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
// without external reference as using the CommonMetadata reference breaks thema codegen.
type PluginInstallMetadata struct {
type DummyMetadata struct {
UpdateTimestamp time.Time `json:"updateTimestamp"`
CreatedBy string `json:"createdBy"`
Uid string `json:"uid"`
@@ -22,9 +22,9 @@ type PluginInstallMetadata struct {
Labels map[string]string `json:"labels"`
}
// NewPluginInstallMetadata creates a new PluginInstallMetadata object.
func NewPluginInstallMetadata() *PluginInstallMetadata {
return &PluginInstallMetadata{
// NewDummyMetadata creates a new DummyMetadata object.
func NewDummyMetadata() *DummyMetadata {
return &DummyMetadata{
Finalizers: []string{},
Labels: map[string]string{},
}

View File

@@ -0,0 +1,319 @@
//
// Code generated by grafana-app-sdk. DO NOT EDIT.
//
package v0alpha1
import (
"fmt"
"github.com/grafana/grafana-app-sdk/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"time"
)
// +k8s:openapi-gen=true
type Dummy struct {
metav1.TypeMeta `json:",inline" yaml:",inline"`
metav1.ObjectMeta `json:"metadata" yaml:"metadata"`
// Spec is the spec of the Dummy
Spec DummySpec `json:"spec" yaml:"spec"`
Status DummyStatus `json:"status" yaml:"status"`
}
func (o *Dummy) GetSpec() any {
return o.Spec
}
func (o *Dummy) SetSpec(spec any) error {
cast, ok := spec.(DummySpec)
if !ok {
return fmt.Errorf("cannot set spec type %#v, not of type Spec", spec)
}
o.Spec = cast
return nil
}
func (o *Dummy) GetSubresources() map[string]any {
return map[string]any{
"status": o.Status,
}
}
func (o *Dummy) GetSubresource(name string) (any, bool) {
switch name {
case "status":
return o.Status, true
default:
return nil, false
}
}
func (o *Dummy) SetSubresource(name string, value any) error {
switch name {
case "status":
cast, ok := value.(DummyStatus)
if !ok {
return fmt.Errorf("cannot set status type %#v, not of type DummyStatus", value)
}
o.Status = cast
return nil
default:
return fmt.Errorf("subresource '%s' does not exist", name)
}
}
func (o *Dummy) GetStaticMetadata() resource.StaticMetadata {
gvk := o.GroupVersionKind()
return resource.StaticMetadata{
Name: o.ObjectMeta.Name,
Namespace: o.ObjectMeta.Namespace,
Group: gvk.Group,
Version: gvk.Version,
Kind: gvk.Kind,
}
}
func (o *Dummy) SetStaticMetadata(metadata resource.StaticMetadata) {
o.Name = metadata.Name
o.Namespace = metadata.Namespace
o.SetGroupVersionKind(schema.GroupVersionKind{
Group: metadata.Group,
Version: metadata.Version,
Kind: metadata.Kind,
})
}
func (o *Dummy) GetCommonMetadata() resource.CommonMetadata {
dt := o.DeletionTimestamp
var deletionTimestamp *time.Time
if dt != nil {
deletionTimestamp = &dt.Time
}
// Legacy ExtraFields support
extraFields := make(map[string]any)
if o.Annotations != nil {
extraFields["annotations"] = o.Annotations
}
if o.ManagedFields != nil {
extraFields["managedFields"] = o.ManagedFields
}
if o.OwnerReferences != nil {
extraFields["ownerReferences"] = o.OwnerReferences
}
return resource.CommonMetadata{
UID: string(o.UID),
ResourceVersion: o.ResourceVersion,
Generation: o.Generation,
Labels: o.Labels,
CreationTimestamp: o.CreationTimestamp.Time,
DeletionTimestamp: deletionTimestamp,
Finalizers: o.Finalizers,
UpdateTimestamp: o.GetUpdateTimestamp(),
CreatedBy: o.GetCreatedBy(),
UpdatedBy: o.GetUpdatedBy(),
ExtraFields: extraFields,
}
}
func (o *Dummy) SetCommonMetadata(metadata resource.CommonMetadata) {
o.UID = types.UID(metadata.UID)
o.ResourceVersion = metadata.ResourceVersion
o.Generation = metadata.Generation
o.Labels = metadata.Labels
o.CreationTimestamp = metav1.NewTime(metadata.CreationTimestamp)
if metadata.DeletionTimestamp != nil {
dt := metav1.NewTime(*metadata.DeletionTimestamp)
o.DeletionTimestamp = &dt
} else {
o.DeletionTimestamp = nil
}
o.Finalizers = metadata.Finalizers
if o.Annotations == nil {
o.Annotations = make(map[string]string)
}
if !metadata.UpdateTimestamp.IsZero() {
o.SetUpdateTimestamp(metadata.UpdateTimestamp)
}
if metadata.CreatedBy != "" {
o.SetCreatedBy(metadata.CreatedBy)
}
if metadata.UpdatedBy != "" {
o.SetUpdatedBy(metadata.UpdatedBy)
}
// Legacy support for setting Annotations, ManagedFields, and OwnerReferences via ExtraFields
if metadata.ExtraFields != nil {
if annotations, ok := metadata.ExtraFields["annotations"]; ok {
if cast, ok := annotations.(map[string]string); ok {
o.Annotations = cast
}
}
if managedFields, ok := metadata.ExtraFields["managedFields"]; ok {
if cast, ok := managedFields.([]metav1.ManagedFieldsEntry); ok {
o.ManagedFields = cast
}
}
if ownerReferences, ok := metadata.ExtraFields["ownerReferences"]; ok {
if cast, ok := ownerReferences.([]metav1.OwnerReference); ok {
o.OwnerReferences = cast
}
}
}
}
func (o *Dummy) GetCreatedBy() string {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
return o.ObjectMeta.Annotations["grafana.com/createdBy"]
}
func (o *Dummy) SetCreatedBy(createdBy string) {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
o.ObjectMeta.Annotations["grafana.com/createdBy"] = createdBy
}
func (o *Dummy) GetUpdateTimestamp() time.Time {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
parsed, _ := time.Parse(time.RFC3339, o.ObjectMeta.Annotations["grafana.com/updateTimestamp"])
return parsed
}
func (o *Dummy) SetUpdateTimestamp(updateTimestamp time.Time) {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
o.ObjectMeta.Annotations["grafana.com/updateTimestamp"] = updateTimestamp.Format(time.RFC3339)
}
func (o *Dummy) GetUpdatedBy() string {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
return o.ObjectMeta.Annotations["grafana.com/updatedBy"]
}
func (o *Dummy) SetUpdatedBy(updatedBy string) {
if o.ObjectMeta.Annotations == nil {
o.ObjectMeta.Annotations = make(map[string]string)
}
o.ObjectMeta.Annotations["grafana.com/updatedBy"] = updatedBy
}
func (o *Dummy) Copy() resource.Object {
return resource.CopyObject(o)
}
func (o *Dummy) DeepCopyObject() runtime.Object {
return o.Copy()
}
func (o *Dummy) DeepCopy() *Dummy {
cpy := &Dummy{}
o.DeepCopyInto(cpy)
return cpy
}
func (o *Dummy) DeepCopyInto(dst *Dummy) {
dst.TypeMeta.APIVersion = o.TypeMeta.APIVersion
dst.TypeMeta.Kind = o.TypeMeta.Kind
o.ObjectMeta.DeepCopyInto(&dst.ObjectMeta)
o.Spec.DeepCopyInto(&dst.Spec)
o.Status.DeepCopyInto(&dst.Status)
}
// Interface compliance compile-time check
var _ resource.Object = &Dummy{}
// +k8s:openapi-gen=true
type DummyList struct {
metav1.TypeMeta `json:",inline" yaml:",inline"`
metav1.ListMeta `json:"metadata" yaml:"metadata"`
Items []Dummy `json:"items" yaml:"items"`
}
func (o *DummyList) DeepCopyObject() runtime.Object {
return o.Copy()
}
func (o *DummyList) Copy() resource.ListObject {
cpy := &DummyList{
TypeMeta: o.TypeMeta,
Items: make([]Dummy, len(o.Items)),
}
o.ListMeta.DeepCopyInto(&cpy.ListMeta)
for i := 0; i < len(o.Items); i++ {
if item, ok := o.Items[i].Copy().(*Dummy); ok {
cpy.Items[i] = *item
}
}
return cpy
}
func (o *DummyList) GetItems() []resource.Object {
items := make([]resource.Object, len(o.Items))
for i := 0; i < len(o.Items); i++ {
items[i] = &o.Items[i]
}
return items
}
func (o *DummyList) SetItems(items []resource.Object) {
o.Items = make([]Dummy, len(items))
for i := 0; i < len(items); i++ {
o.Items[i] = *items[i].(*Dummy)
}
}
func (o *DummyList) DeepCopy() *DummyList {
cpy := &DummyList{}
o.DeepCopyInto(cpy)
return cpy
}
func (o *DummyList) DeepCopyInto(dst *DummyList) {
resource.CopyObjectInto(dst, o)
}
// Interface compliance compile-time check
var _ resource.ListObject = &DummyList{}
// Copy methods for all subresource types
// DeepCopy creates a full deep copy of Spec
func (s *DummySpec) DeepCopy() *DummySpec {
cpy := &DummySpec{}
s.DeepCopyInto(cpy)
return cpy
}
// DeepCopyInto deep copies Spec into another Spec object
func (s *DummySpec) DeepCopyInto(dst *DummySpec) {
resource.CopyObjectInto(dst, s)
}
// DeepCopy creates a full deep copy of DummyStatus
func (s *DummyStatus) DeepCopy() *DummyStatus {
cpy := &DummyStatus{}
s.DeepCopyInto(cpy)
return cpy
}
// DeepCopyInto deep copies DummyStatus into another DummyStatus object
func (s *DummyStatus) DeepCopyInto(dst *DummyStatus) {
resource.CopyObjectInto(dst, s)
}

View File

@@ -0,0 +1,34 @@
//
// Code generated by grafana-app-sdk. DO NOT EDIT.
//
package v0alpha1
import (
"github.com/grafana/grafana-app-sdk/resource"
)
// schema is unexported to prevent accidental overwrites
var (
schemaDummy = resource.NewSimpleSchema("historian.alerting.grafana.app", "v0alpha1", &Dummy{}, &DummyList{}, resource.WithKind("Dummy"),
resource.WithPlural("dummys"), resource.WithScope(resource.NamespacedScope))
kindDummy = resource.Kind{
Schema: schemaDummy,
Codecs: map[resource.KindEncoding]resource.Codec{
resource.KindEncodingJSON: &DummyJSONCodec{},
},
}
)
// Kind returns a resource.Kind for this Schema with a JSON codec
func DummyKind() resource.Kind {
return kindDummy
}
// Schema returns a resource.SimpleSchema representation of Dummy
func DummySchema() *resource.SimpleSchema {
return schemaDummy
}
// Interface compliance checks
var _ resource.Schema = kindDummy

View File

@@ -0,0 +1,14 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
// Spec is the schema of our resource. The spec should include all the user-editable information for the kind.
// +k8s:openapi-gen=true
type DummySpec struct {
DummyField int64 `json:"dummyField"`
}
// NewDummySpec creates a new DummySpec object.
func NewDummySpec() *DummySpec {
return &DummySpec{}
}

View File

@@ -3,42 +3,42 @@
package v0alpha1
// +k8s:openapi-gen=true
type ReceiverstatusOperatorState struct {
type DummystatusOperatorState struct {
// lastEvaluation is the ResourceVersion last evaluated
LastEvaluation string `json:"lastEvaluation"`
// state describes the state of the lastEvaluation.
// It is limited to three possible states for machine evaluation.
State ReceiverStatusOperatorStateState `json:"state"`
State DummyStatusOperatorStateState `json:"state"`
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]interface{} `json:"details,omitempty"`
}
// NewReceiverstatusOperatorState creates a new ReceiverstatusOperatorState object.
func NewReceiverstatusOperatorState() *ReceiverstatusOperatorState {
return &ReceiverstatusOperatorState{}
// NewDummystatusOperatorState creates a new DummystatusOperatorState object.
func NewDummystatusOperatorState() *DummystatusOperatorState {
return &DummystatusOperatorState{}
}
// +k8s:openapi-gen=true
type ReceiverStatus struct {
type DummyStatus struct {
// operatorStates is a map of operator ID to operator state evaluations.
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]ReceiverstatusOperatorState `json:"operatorStates,omitempty"`
OperatorStates map[string]DummystatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}
// NewReceiverStatus creates a new ReceiverStatus object.
func NewReceiverStatus() *ReceiverStatus {
return &ReceiverStatus{}
// NewDummyStatus creates a new DummyStatus object.
func NewDummyStatus() *DummyStatus {
return &DummyStatus{}
}
// +k8s:openapi-gen=true
type ReceiverStatusOperatorStateState string
type DummyStatusOperatorStateState string
const (
ReceiverStatusOperatorStateStateSuccess ReceiverStatusOperatorStateState = "success"
ReceiverStatusOperatorStateStateInProgress ReceiverStatusOperatorStateState = "in_progress"
ReceiverStatusOperatorStateStateFailed ReceiverStatusOperatorStateState = "failed"
DummyStatusOperatorStateStateSuccess DummyStatusOperatorStateState = "success"
DummyStatusOperatorStateStateInProgress DummyStatusOperatorStateState = "in_progress"
DummyStatusOperatorStateStateFailed DummyStatusOperatorStateState = "failed"
)

View File

@@ -0,0 +1,15 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v0alpha1
// +k8s:openapi-gen=true
type GetAlertstatehistory struct {
Body map[string]interface{} `json:"body"`
}
// NewGetAlertstatehistory creates a new GetAlertstatehistory object.
func NewGetAlertstatehistory() *GetAlertstatehistory {
return &GetAlertstatehistory{
Body: map[string]interface{}{},
}
}

View File

@@ -1,3 +1,3 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
package v1beta1
package v0alpha1

View File

@@ -0,0 +1,490 @@
//
// This file is generated by grafana-app-sdk
// DO NOT EDIT
//
package apis
import (
"encoding/json"
"fmt"
"strings"
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/resource"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/kube-openapi/pkg/spec3"
"k8s.io/kube-openapi/pkg/validation/spec"
v0alpha1 "github.com/grafana/grafana/apps/alerting/historian/pkg/apis/alertinghistorian/v0alpha1"
)
var (
rawSchemaDummyv0alpha1 = []byte(`{"Dummy":{"properties":{"spec":{"$ref":"#/components/schemas/spec"},"status":{"$ref":"#/components/schemas/status"}},"required":["spec"]},"OperatorState":{"additionalProperties":false,"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"details contains any extra information that is operator-specific","type":"object"},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"spec":{"additionalProperties":false,"description":"Spec is the schema of our resource. The spec should include all the user-editable information for the kind.","properties":{"dummyField":{"type":"integer"}},"required":["dummyField"],"type":"object"},"status":{"additionalProperties":false,"properties":{"additionalFields":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"additionalFields is reserved for future use","type":"object"},"operatorStates":{"additionalProperties":{"$ref":"#/components/schemas/OperatorState"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"}},"type":"object"}}`)
versionSchemaDummyv0alpha1 app.VersionSchema
_ = json.Unmarshal(rawSchemaDummyv0alpha1, &versionSchemaDummyv0alpha1)
)
var appManifestData = app.ManifestData{
AppName: "alerting-historian",
Group: "historian.alerting.grafana.app",
PreferredVersion: "v0alpha1",
Versions: []app.ManifestVersion{
{
Name: "v0alpha1",
Served: true,
Kinds: []app.ManifestVersionKind{
{
Kind: "Dummy",
Plural: "Dummys",
Scope: "Namespaced",
Conversion: false,
Schema: &versionSchemaDummyv0alpha1,
},
},
Routes: app.ManifestVersionRoutes{
Namespaced: map[string]spec3.PathProps{
"/alertstate/history": {
Get: &spec3.Operation{
OperationProps: spec3.OperationProps{
OperationId: "getAlertstatehistory",
Responses: &spec3.Responses{
ResponsesProps: spec3.ResponsesProps{
Default: &spec3.Response{
ResponseProps: spec3.ResponseProps{
Description: "Default OK response",
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"body": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{},
},
},
},
},
},
},
},
},
Required: []string{
"body",
},
}},
}},
},
},
},
}},
},
},
},
"/notification/query": {
Post: &spec3.Operation{
OperationProps: spec3.OperationProps{
OperationId: "createNotificationquery",
RequestBody: &spec3.RequestBody{
RequestBodyProps: spec3.RequestBodyProps{
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"from": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
Description: "From is the starting timestamp for the query.",
},
},
"groupLabels": {
SchemaProps: spec.SchemaProps{
Description: "GroupLabels optionally filters the entries by matching group labels.",
Ref: spec.MustCreateRef("#/components/schemas/createNotificationqueryMatchers"),
},
},
"limit": {
SchemaProps: spec.SchemaProps{
Type: []string{"integer"},
Description: "Limit is the maximum number of entries to return.",
},
},
"outcome": {
SchemaProps: spec.SchemaProps{
Description: "Outcome optionally filters the entries to only either successful or failed attempts.",
Ref: spec.MustCreateRef("#/components/schemas/createNotificationqueryNotificationOutcome"),
},
},
"receiver": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "Receiver optionally filters the entries by receiver title (contact point).",
},
},
"ruleUID": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "RuleUID optionally filters the entries to a specific alert rule.",
},
},
"status": {
SchemaProps: spec.SchemaProps{
Description: "Status optionally filters the entries to only either firing or resolved.",
Ref: spec.MustCreateRef("#/components/schemas/createNotificationqueryNotificationStatus"),
},
},
"to": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
Description: "To is the starting timestamp for the query.",
},
},
},
}},
}},
},
}},
Responses: &spec3.Responses{
ResponsesProps: spec3.ResponsesProps{
Default: &spec3.Response{
ResponseProps: spec3.ResponseProps{
Description: "Default OK response",
Content: map[string]*spec3.MediaType{
"application/json": {
MediaTypeProps: spec3.MediaTypeProps{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"entries": {
SchemaProps: spec.SchemaProps{
Type: []string{"array"},
},
},
},
Required: []string{
"entries",
},
}},
}},
},
},
},
}},
},
},
},
},
Cluster: map[string]spec3.PathProps{},
Schemas: map[string]spec.Schema{
"createNotificationqueryMatcher": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"label": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
"type": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Enum: []interface{}{
"=",
"!=",
"=~",
"!~",
},
},
},
"value": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
Required: []string{
"type",
"label",
"value",
},
},
},
"createNotificationqueryMatchers": {
SchemaProps: spec.SchemaProps{
Type: []string{"array"},
},
},
"createNotificationqueryNotificationEntry": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"alerts": {
SchemaProps: spec.SchemaProps{
Type: []string{"array"},
Description: "Alerts are the alerts grouped into the notification.",
},
},
"duration": {
SchemaProps: spec.SchemaProps{
Type: []string{"integer"},
Description: "Duration is the length of time the notification attempt took in nanoseconds.",
},
},
"error": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "Error is the message returned by the contact point if delivery failed.",
},
},
"groupKey": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "GroupKey uniquely idenifies the dispatcher alert group.",
},
},
"groupLabels": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Description: "GroupLabels are the labels uniquely identifying the alert group within a route.",
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
},
},
"outcome": {
SchemaProps: spec.SchemaProps{
Description: "Outcome indicaes if the notificaion attempt was successful or if it failed.",
Ref: spec.MustCreateRef("#/components/schemas/createNotificationqueryNotificationOutcome"),
},
},
"pipelineTime": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
Description: "PipelineTime is the time at which the flush began.",
},
},
"receiver": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Description: "Receiver is the receiver (contact point) title.",
},
},
"retry": {
SchemaProps: spec.SchemaProps{
Type: []string{"boolean"},
Description: "Retry indicates if the attempt was a retried attempt.",
},
},
"status": {
SchemaProps: spec.SchemaProps{
Description: "Status indicates if the notification contains one or more firing alerts.",
Ref: spec.MustCreateRef("#/components/schemas/createNotificationqueryNotificationStatus"),
},
},
"timestamp": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
Description: "Timestamp is the time at which the notification attempt completed.",
},
},
},
Required: []string{
"timestamp",
"receiver",
"status",
"outcome",
"groupLabels",
"alerts",
"retry",
"duration",
"pipelineTime",
"groupKey",
},
},
},
"createNotificationqueryNotificationEntryAlert": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
Properties: map[string]spec.Schema{
"annotations": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
},
},
"endsAt": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
},
},
"labels": {
SchemaProps: spec.SchemaProps{
Type: []string{"object"},
AdditionalProperties: &spec.SchemaOrBool{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
},
},
"startsAt": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Format: "date-time",
},
},
"status": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
},
},
},
Required: []string{
"status",
"labels",
"annotations",
"startsAt",
"endsAt",
},
},
},
"createNotificationqueryNotificationOutcome": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Enum: []interface{}{
"success",
"error",
},
},
},
"createNotificationqueryNotificationStatus": {
SchemaProps: spec.SchemaProps{
Type: []string{"string"},
Enum: []interface{}{
"firing",
"resolved",
},
},
},
},
},
},
},
}
func LocalManifest() app.Manifest {
return app.NewEmbeddedManifest(appManifestData)
}
func RemoteManifest() app.Manifest {
return app.NewAPIServerManifest("alerting-historian")
}
var kindVersionToGoType = map[string]resource.Kind{
"Dummy/v0alpha1": v0alpha1.DummyKind(),
}
// ManifestGoTypeAssociator returns the associated resource.Kind instance for a given Kind and Version, if one exists.
// If there is no association for the provided Kind and Version, exists will return false.
func ManifestGoTypeAssociator(kind, version string) (goType resource.Kind, exists bool) {
goType, exists = kindVersionToGoType[fmt.Sprintf("%s/%s", kind, version)]
return goType, exists
}
var customRouteToGoResponseType = map[string]any{
"v0alpha1||<namespace>/alertstate/history|GET": v0alpha1.GetAlertstatehistory{},
"v0alpha1||<namespace>/notification/query|POST": v0alpha1.CreateNotificationquery{},
}
// ManifestCustomRouteResponsesAssociator returns the associated response go type for a given kind, version, custom route path, and method, if one exists.
// kind may be empty for custom routes which are not kind subroutes. Leading slashes are removed from subroute paths.
// If there is no association for the provided kind, version, custom route path, and method, exists will return false.
// Resource routes (those without a kind) should prefix their route with "<namespace>/" if the route is namespaced (otherwise the route is assumed to be cluster-scope)
func ManifestCustomRouteResponsesAssociator(kind, version, path, verb string) (goType any, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
goType, exists = customRouteToGoResponseType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
var customRouteToGoParamsType = map[string]runtime.Object{}
func ManifestCustomRouteQueryAssociator(kind, version, path, verb string) (goType runtime.Object, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
goType, exists = customRouteToGoParamsType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
var customRouteToGoRequestBodyType = map[string]any{
"v0alpha1||<namespace>/notification/query|POST": v0alpha1.CreateNotificationqueryRequestBody{},
}
func ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb string) (goType any, exists bool) {
if len(path) > 0 && path[0] == '/' {
path = path[1:]
}
goType, exists = customRouteToGoRequestBodyType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
return goType, exists
}
type GoTypeAssociator struct{}
func NewGoTypeAssociator() *GoTypeAssociator {
return &GoTypeAssociator{}
}
func (g *GoTypeAssociator) KindToGoType(kind, version string) (goType resource.Kind, exists bool) {
return ManifestGoTypeAssociator(kind, version)
}
func (g *GoTypeAssociator) CustomRouteReturnGoType(kind, version, path, verb string) (goType any, exists bool) {
return ManifestCustomRouteResponsesAssociator(kind, version, path, verb)
}
func (g *GoTypeAssociator) CustomRouteQueryGoType(kind, version, path, verb string) (goType runtime.Object, exists bool) {
return ManifestCustomRouteQueryAssociator(kind, version, path, verb)
}
func (g *GoTypeAssociator) CustomRouteRequestBodyGoType(kind, version, path, verb string) (goType any, exists bool) {
return ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb)
}

View File

@@ -0,0 +1,81 @@
package app
import (
"context"
"net/http"
"github.com/grafana/grafana-app-sdk/app"
"github.com/grafana/grafana-app-sdk/logging"
"github.com/grafana/grafana-app-sdk/simple"
"github.com/prometheus/client_golang/prometheus"
"go.opentelemetry.io/otel"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/grafana/grafana/apps/alerting/historian/pkg/apis/alertinghistorian/v0alpha1"
"github.com/grafana/grafana/apps/alerting/historian/pkg/app/config"
"github.com/grafana/grafana/apps/alerting/historian/pkg/app/notification"
)
func New(cfg app.Config) (app.App, error) {
reg := prometheus.DefaultRegisterer
tracer := otel.GetTracerProvider().Tracer("historian.alerting.app")
logger := logging.DefaultLogger.With("app", "historian.alerting.app")
runtimeConfig := cfg.SpecificConfig.(config.RuntimeConfig)
alertStateHandler := runtimeConfig.GetAlertStateHistoryHandler
if alertStateHandler == nil {
alertStateHandler = NewErrorHandler("no alert state handler")
}
notificationHandler := notification.New(runtimeConfig.Notification, reg, logger, tracer)
simpleConfig := simple.AppConfig{
Name: "alerting.historian",
KubeConfig: cfg.KubeConfig,
VersionedCustomRoutes: map[string]simple.AppVersionRouteHandlers{
"v0alpha1": {
{
Namespaced: true,
Path: "/alertstate/history",
Method: "GET",
}: alertStateHandler,
{
Namespaced: true,
Path: "/notification/query",
Method: "POST",
}: notificationHandler.QueryHandler,
},
},
// TODO: Remove when SDK is fixed.
ManagedKinds: []simple.AppManagedKind{
{
Kind: v0alpha1.DummyKind(),
},
},
}
a, err := simple.NewApp(simpleConfig)
if err != nil {
return nil, err
}
err = a.ValidateManifest(cfg.ManifestData)
if err != nil {
return nil, err
}
return a, nil
}
func NewErrorHandler(message string) simple.AppCustomRouteHandler {
return func(ctx context.Context, writer app.CustomRouteResponseWriter, request *app.CustomRouteRequest) error {
return &apierrors.StatusError{
ErrStatus: metav1.Status{
Status: metav1.StatusFailure,
Code: http.StatusUnprocessableEntity,
Message: message,
},
}
}
}

View File

@@ -0,0 +1,81 @@
package config
import (
"net/http"
"net/url"
"time"
"github.com/spf13/pflag"
"github.com/grafana/alerting/notify/historian/lokiclient"
"github.com/grafana/grafana-app-sdk/simple"
)
const (
lokiDefaultMaxQueryLength = 721 * time.Hour // 30d1h, matches the default value in Loki
lokiDefaultMaxQuerySize = 65536 // 64kb
)
type LokiConfig struct {
lokiclient.LokiConfig
Transport http.RoundTripper
}
type NotificationConfig struct {
Enabled bool
Loki LokiConfig
}
type RuntimeConfig struct {
GetAlertStateHistoryHandler simple.AppCustomRouteHandler
Notification NotificationConfig
}
func (n *NotificationConfig) AddFlagsWithPrefix(prefix string, flags *pflag.FlagSet) {
flags.BoolVar(&n.Enabled, prefix+".enabled", false, "Enable notification query endpoints")
addLokiFlags(&n.Loki.LokiConfig, prefix+".loki", flags)
}
func (r *RuntimeConfig) AddFlagsWithPrefix(prefix string, flags *pflag.FlagSet) {
r.Notification.AddFlagsWithPrefix(prefix+".notification", flags)
}
func (r *RuntimeConfig) AddFlags(flags *pflag.FlagSet) {
r.AddFlagsWithPrefix("alerting.historian", flags)
}
type urlVar struct {
u **url.URL
}
// String implements flag.Value
func (v urlVar) String() string {
if v.u == nil || *v.u == nil {
return ""
}
return (*v.u).Redacted()
}
// Set implements flag.Value
func (v urlVar) Set(s string) error {
u, err := url.Parse(s)
if err != nil {
return err
}
*v.u = u
return nil
}
// Type implements flag.Value
func (v urlVar) Type() string {
return "url"
}
func addLokiFlags(l *lokiclient.LokiConfig, prefix string, flags *pflag.FlagSet) {
flags.Var(urlVar{&l.ReadPathURL}, prefix+".read-url", "URL to Loki instance for performing queries")
flags.StringVar(&l.BasicAuthUser, prefix+".user", "", "Basic auth Username to authenticate to the Loki instance")
flags.StringVar(&l.BasicAuthPassword, prefix+".password", "", "Basic auth password to authenticate to the Loki instance")
flags.StringVar(&l.TenantID, prefix+".tenant-id", "", "Value to use for X-Scope-OrgID")
flags.DurationVar(&l.MaxQueryLength, prefix+".max-query-length", lokiDefaultMaxQueryLength, "Maximum allowed time range for queries")
flags.IntVar(&l.MaxQuerySize, prefix+".max-query-size", lokiDefaultMaxQuerySize, "Maximum allowed size of a query string passed to Loki")
}

View File

@@ -0,0 +1,99 @@
package config
import (
"net/url"
"testing"
"time"
"github.com/grafana/alerting/notify/historian/lokiclient"
"github.com/spf13/pflag"
"github.com/stretchr/testify/require"
)
func TestRuntimeConfig(t *testing.T) {
lokiURL := mustParseURL("http://localhost:3100")
tests := []struct {
name string
args []string
expected RuntimeConfig
}{
{
name: "default config",
args: []string{},
expected: RuntimeConfig{
Notification: NotificationConfig{
Enabled: false,
Loki: LokiConfig{
LokiConfig: lokiclient.LokiConfig{
ReadPathURL: nil,
MaxQueryLength: 721 * time.Hour,
MaxQuerySize: 65536,
},
},
},
},
},
{
name: "with notification enabled",
args: []string{"--alerting.historian.notification.enabled"},
expected: RuntimeConfig{
Notification: NotificationConfig{
Enabled: true,
Loki: LokiConfig{
LokiConfig: lokiclient.LokiConfig{
ReadPathURL: nil,
MaxQueryLength: 721 * time.Hour,
MaxQuerySize: 65536,
},
},
},
},
},
{
name: "with loki options",
args: []string{
"--alerting.historian.notification.loki.read-url=http://localhost:3100",
"--alerting.historian.notification.loki.user=foo",
"--alerting.historian.notification.loki.password=bar",
"--alerting.historian.notification.loki.tenant-id=baz",
},
expected: RuntimeConfig{
Notification: NotificationConfig{
Enabled: false,
Loki: LokiConfig{
LokiConfig: lokiclient.LokiConfig{
ReadPathURL: lokiURL,
BasicAuthUser: "foo",
BasicAuthPassword: "bar",
TenantID: "baz",
MaxQueryLength: 721 * time.Hour,
MaxQuerySize: 65536,
},
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg := &RuntimeConfig{}
flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
cfg.AddFlags(flags)
err := flags.Parse(tt.args)
require.NoError(t, err)
require.Equal(t, tt.expected, *cfg)
})
}
}
func mustParseURL(s string) *url.URL {
u, err := url.Parse(s)
if err != nil {
panic(err)
}
return u
}

View File

@@ -0,0 +1,62 @@
package logutil
import (
"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/grafana/grafana-app-sdk/logging"
)
func ToGoKitLogger(logger logging.Logger) log.Logger {
return &sdk2gkLogger{logger: logger}
}
type sdk2gkLogger struct {
logger logging.Logger
}
func (s *sdk2gkLogger) Log(keyvals ...interface{}) error {
var (
outMsg = ""
outLevel = interface{}(level.InfoValue())
outKeyvals = []interface{}{}
)
if len(keyvals) == 0 {
s.logger.Info("")
return nil
}
if len(keyvals)%2 == 1 {
keyvals = append(keyvals, nil)
}
for i := 0; i < len(keyvals); i += 2 {
k, v := keyvals[i], keyvals[i+1]
if keyvals[i] == "msg" {
outMsg = v.(string)
continue
}
if k == level.Key() {
outLevel = v
continue
}
outKeyvals = append(outKeyvals, k)
outKeyvals = append(outKeyvals, v)
}
switch outLevel {
case level.DebugValue():
s.logger.Debug(outMsg, outKeyvals...)
case level.InfoValue():
s.logger.Info(outMsg, outKeyvals...)
case level.WarnValue():
s.logger.Warn(outMsg, outKeyvals...)
case level.ErrorValue():
s.logger.Error(outMsg, outKeyvals...)
}
return nil
}

View File

@@ -0,0 +1,101 @@
package logutil
import (
"context"
"testing"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/grafana/grafana-app-sdk/logging"
"github.com/stretchr/testify/require"
)
type ent struct {
level string
msg string
kvs []any
}
type fakeLogger struct {
logs []ent
}
func (f *fakeLogger) Debug(msg string, args ...any) {
f.logs = append(f.logs, ent{"debug", msg, args})
}
func (f *fakeLogger) Info(msg string, args ...any) {
f.logs = append(f.logs, ent{"info", msg, args})
}
func (f *fakeLogger) Warn(msg string, args ...any) {
f.logs = append(f.logs, ent{"warn", msg, args})
}
func (f *fakeLogger) Error(msg string, args ...any) {
f.logs = append(f.logs, ent{"error", msg, args})
}
func (f *fakeLogger) With(args ...any) logging.Logger {
return nil
}
func (f *fakeLogger) WithContext(context.Context) logging.Logger {
return nil
}
func setup() (*fakeLogger, log.Logger) {
fake := &fakeLogger{}
return fake, ToGoKitLogger(fake)
}
func TestToGoKitLogger(t *testing.T) {
t.Run("debug / 1 args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo"))
require.Equal(t, "debug", fake.logs[0].level)
require.Equal(t, "hello world", fake.logs[0].msg)
require.Len(t, fake.logs[0].kvs, 2)
require.Equal(t, "foo", fake.logs[0].kvs[0])
require.Equal(t, "(MISSING)", fake.logs[0].kvs[1].(error).Error())
})
t.Run("debug / 2 args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo", "bar"))
require.Equal(t, []ent{{"debug", "hello world", []any{"foo", "bar"}}}, fake.logs)
})
t.Run("debug / 4 args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo", "bar", "baz", 1))
require.Equal(t, []ent{{"debug", "hello world", []any{"foo", "bar", "baz", 1}}}, fake.logs)
})
t.Run("debug / no args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Debug(gk).Log("msg", "hello world"))
require.Equal(t, []ent{{"debug", "hello world", []any{}}}, fake.logs)
})
t.Run("info / no args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Info(gk).Log("msg", "hello world"))
require.Equal(t, []ent{{"info", "hello world", []any{}}}, fake.logs)
})
t.Run("warn / no args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Warn(gk).Log("msg", "hello world"))
require.Equal(t, []ent{{"warn", "hello world", []any{}}}, fake.logs)
})
t.Run("error / no args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, level.Error(gk).Log("msg", "hello world"))
require.Equal(t, []ent{{"error", "hello world", []any{}}}, fake.logs)
})
t.Run("no level / no args", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, gk.Log("msg", "hello world"))
require.Equal(t, []ent{{"info", "hello world", []any{}}}, fake.logs)
})
t.Run("no level / 2 args / no msg", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, gk.Log("foo", "bar"))
require.Equal(t, []ent{{"info", "", []any{"foo", "bar"}}}, fake.logs)
})
t.Run("no level / no args / no msg", func(t *testing.T) {
fake, gk := setup()
require.NoError(t, gk.Log())
require.Equal(t, []ent{{"info", "", nil}}, fake.logs)
})
}

View File

@@ -0,0 +1,238 @@
package notification
import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
"regexp"
"sort"
"strings"
"time"
"github.com/grafana/alerting/notify/historian"
"github.com/grafana/alerting/notify/historian/lokiclient"
"github.com/grafana/dskit/instrument"
"github.com/grafana/grafana-app-sdk/logging"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"go.opentelemetry.io/otel/trace"
"github.com/grafana/grafana/apps/alerting/historian/pkg/apis/alertinghistorian/v0alpha1"
"github.com/grafana/grafana/apps/alerting/historian/pkg/app/config"
"github.com/grafana/grafana/apps/alerting/historian/pkg/app/logutil"
)
const (
LokiClientSpanName = "grafana.apps.alerting.historian.client"
defaultQueryRange = 6 * time.Hour
defaultLimit = 100
maxLimit = 1000
Namespace = "grafana"
Subsystem = "alerting"
)
var (
// ErrInvalidQuery is returned if the query is invalid.
ErrInvalidQuery = errors.New("invalid query")
validLabelKeyRegex = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$")
)
type lokiClient interface {
RangeQuery(ctx context.Context, logQL string, start, end, limit int64) (lokiclient.QueryRes, error)
}
type LokiReader struct {
client lokiClient
logger logging.Logger
}
func NewLokiReader(cfg config.LokiConfig, reg prometheus.Registerer, logger logging.Logger, tracer trace.Tracer) *LokiReader {
duration := instrument.NewHistogramCollector(promauto.With(reg).NewHistogramVec(prometheus.HistogramOpts{
Namespace: Namespace,
Subsystem: Subsystem,
Name: "notification_history_read_request_duration_seconds",
Help: "Histogram of read request durations to the notification history store.",
Buckets: instrument.DefBuckets,
}, instrument.HistogramCollectorBuckets))
requester := &http.Client{
Transport: cfg.Transport,
}
gkLogger := logutil.ToGoKitLogger(logger)
return &LokiReader{
client: lokiclient.NewLokiClient(cfg.LokiConfig, requester, nil, duration, gkLogger, tracer, LokiClientSpanName),
logger: logger,
}
}
// Query retrieves notification history entries from an external Loki instance.
func (h *LokiReader) Query(ctx context.Context, query Query) (QueryResult, error) {
logql, err := buildQuery(query)
if err != nil {
return QueryResult{}, err
}
now := time.Now().UTC()
from := now.Add(-defaultQueryRange)
if query.From != nil {
from = *query.From
}
to := now
if query.To != nil {
to = *query.To
}
limit := int64(defaultLimit)
if query.Limit != nil {
limit = *query.Limit
}
if limit > maxLimit {
return QueryResult{}, fmt.Errorf("%w: limit (%d) over maximum allowed (%d)", ErrInvalidQuery, limit, maxLimit)
}
entries, err := h.runQuery(ctx, logql, from, to, limit)
if err != nil {
return QueryResult{}, err
}
return QueryResult{
Entries: entries,
}, nil
}
// buildQuery creates the LogQL to perform the requested query.
func buildQuery(query Query) (string, error) {
selectors := []string{
fmt.Sprintf(`%s=%q`, historian.LabelFrom, historian.LabelFromValue),
}
if query.RuleUID != nil {
selectors = append(selectors,
fmt.Sprintf(`%s=%q`, historian.LabelRuleUID, *query.RuleUID))
}
logql := fmt.Sprintf(`{%s} | json`, strings.Join(selectors, `,`))
// Add receiver filter if specified.
if query.Receiver != nil && *query.Receiver != "" {
logql += fmt.Sprintf(` | receiver = %q`, *query.Receiver)
}
// Add status filter if specified.
if query.Status != nil && *query.Status != "" {
logql += fmt.Sprintf(` | status = %q`, *query.Status)
}
// Add group labels filter if specified.
if query.GroupLabels != nil {
for _, matcher := range *query.GroupLabels {
// Validate the matcher close to where it is used to form the query,
// to reduce the risk of introducing a query injection bug.
if !validLabelKeyRegex.MatchString(matcher.Label) {
return "", fmt.Errorf("%w: group label: %q", ErrInvalidQuery, matcher.Label)
}
switch matcher.Type {
case "=", "!=", "=~", "!~":
default:
return "", fmt.Errorf("%w: matcher type: %s", ErrInvalidQuery, matcher.Type)
}
logql += fmt.Sprintf(` | groupLabels_%s %s %q`, matcher.Label, matcher.Type, matcher.Value)
}
}
// Add outcome filter if specified.
if query.Outcome != nil && *query.Outcome != "" {
switch *query.Outcome {
case v0alpha1.CreateNotificationqueryRequestNotificationOutcomeSuccess:
logql += ` | error = ""`
case v0alpha1.CreateNotificationqueryRequestNotificationOutcomeError:
logql += ` | error != ""`
}
}
return logql, nil
}
// runQuery runs the query and collects results.
func (l *LokiReader) runQuery(ctx context.Context, logql string, from, to time.Time, limit int64) ([]Entry, error) {
entries := make([]Entry, 0)
r, err := l.client.RangeQuery(ctx, logql, from.UnixNano(), to.UnixNano(), limit)
if err != nil {
return nil, fmt.Errorf("loki range query: %w", err)
}
for _, stream := range r.Data.Result {
for _, s := range stream.Values {
entry, err := parseLokiEntry(s)
if err != nil {
l.logger.Warn("Ignoring notification history entry", "err", err)
continue
}
entries = append(entries, entry)
}
}
// We need to sort as results might be from a combination of streams.
sort.Slice(entries, func(i, j int) bool {
return entries[i].Timestamp.After(entries[j].Timestamp)
})
l.logger.Debug("Notification history query complete", "entries", len(entries))
return entries, nil
}
// parseLokiEntry unmarshals the JSON stored in the entry.
func parseLokiEntry(s lokiclient.Sample) (Entry, error) {
var lokiEntry historian.NotificationHistoryLokiEntry
err := json.Unmarshal([]byte(s.V), &lokiEntry)
if err != nil {
return Entry{}, fmt.Errorf("failed to unmarshal entry [%s]: %w", s.T, err)
}
if lokiEntry.SchemaVersion != 1 {
return Entry{}, fmt.Errorf("unsupported schema version [%s]: %d", s.T, lokiEntry.SchemaVersion)
}
outcome := OutcomeSuccess
var entryError *string
if lokiEntry.Error != "" {
outcome = OutcomeError
entryError = &lokiEntry.Error
}
groupLabels := lokiEntry.GroupLabels
if groupLabels == nil {
groupLabels = make(map[string]string)
}
alerts := make([]EntryAlert, len(lokiEntry.Alerts))
for i, a := range lokiEntry.Alerts {
alerts[i] = EntryAlert{
Status: a.Status,
Labels: a.Labels,
Annotations: a.Annotations,
StartsAt: a.StartsAt,
EndsAt: a.EndsAt,
}
}
return Entry{
Timestamp: s.T,
Receiver: lokiEntry.Receiver,
Status: Status(lokiEntry.Status),
Outcome: outcome,
GroupKey: lokiEntry.GroupKey,
GroupLabels: groupLabels,
Alerts: alerts,
Retry: lokiEntry.Retry,
Error: entryError,
Duration: lokiEntry.Duration,
PipelineTime: lokiEntry.PipelineTime,
}, nil
}

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