* 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
* 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.
* 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
* 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
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.
* 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
* Update docs
* Remove 406 response since now it is converted
* fix linter
---------
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
* 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>
* 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
[App Platform] Use the app-sdk's apiserver.KubernetesGenericAPIServer in the serverWrapper to ensure that any extra logic for handling WebServices is used.
* 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>