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.
* 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.
* 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>
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
* 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
* 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>
* 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
* 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
* 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>
* 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
* 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
* 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
* 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
* 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
* 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>
* 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
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.
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
* 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
* 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>
* 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>
* 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
* 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
* 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
* 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>
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>
* 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
* Provisioning: Show configured and last used branches
* Remove unused var
* Add hooks
* Extract branch logic
* remove type assertion
* fix tests
* Memoize descriptions
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.
* Render UNSAFE hidden dashboard controls
* Remove unused imports
* Extract to function and write test
* Remove unnecessary context from test
* Remove exclamation
* 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
* 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
* Something is working
* Progress
* Update
* Update
* Update
* Some new unit tests
* Fix
* time shift fix
* Update
* Always show hidden toggle
* Update
* 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
* 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
* 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
* SaveProvisionedDashboardForm: Show preview banner when pushing to non-configured existing branch
* useProvisionedRequestHandler: use ref to prevent handler triggered twice
* 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
* 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>
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.
* 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
* [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>
- 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>
* 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
* 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
* 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.
* 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
* 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>
* 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
* wip
* wip
* wip
(cherry picked from commit 8cedf25892)
* Search seems to be working, the validation is still wip
* Use keyword.Name analyzer for Filterable fields
* Only string fields should be indexed with keyword analyzer
* Change search query for email and login fields to use term query
* Remove unnecessary Exact from the resource protobuf definitions
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Add legacy search support to the API
* Tests for legacy search, validate and integration tests for user
* Lint
* Add snapshot tests to userDocumentBuilder
* Address CodeQL issues
* Improvements, handle Mode2, tests should pass
* Change default limit from 0 to 1 for requests
* Cleanup
* Add fixme
* Update pkg/registry/apis/iam/register.go
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
* Update pkg/registry/apis/iam/user/legacy_search.go
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Stephanie Hingtgen <stephanie.hingtgen@grafana.com>
* implement the update method for team bindings
* fix lint error
* add integration tests
* add integration test for non existing team binding
* try to fix lint error
As part of migrating Grafana's authorization system to Zanzana (OpenFGA), we need to ensure that role permissions defined in the IAM API are automatically synced to the authorization backend. Without this sync, roles created through the API would not be enforced by Zanzana, creating an inconsistency between defined permissions and actual authorization decisions.
This is a critical piece of the dual-write pattern during the migration to Zanzana, ensuring that:
Role permissions are immediately available for authorization checks
The legacy RBAC system and new Zanzana system remain in sync
Users experience consistent permission enforcement regardless of which backend is queried
safe to revert
* Skip informers if Provisioning disable controllers is enabled
* Hydrate requester correctly for Grafana Live
* revert to old code because eventualRestConfig provider issues
---------
Co-authored-by: Charandas Batra <charandas.batra@grafana.com>
* Coverage: Add some DX improvements to by codeowner script
* Potential fix for code scanning alert no. 3796: Shell command built from environment values
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* Potential fix for code scanning alert no. 3797: Shell command built from environment values
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* fix package.json and yarn lock
* reorder imports
* fix issue for frontend-platform: exclude files in any /test/ dir
* wip
* add ora spinner for codeowners manifest step
* cleanup
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* fix: SQLite truncate with retry/backoff on busy/locked errors
* fix: use retryer package for retrying SQLite TruncateDBTables
* fix: use dskit/backoff package to return last error
* fix: do not log number of attempts
* go get github.com/grafana/grafana-plugin-sdk-go@v0.281.0
* make update-workspace
* updated failing unit test
* disable deprecation warnings
* datasources: allow underscore-prefixed local time range
* updated go.work.sum
* [APIServer] Add the method RegisterAPIInstaller to the APIRegistrar interface, and implement it in the builder. This allows new installer-based apps to register themselves in enterprise.
* Rename RegisterAPIInstaller to RegisterAppInstaller
* NewGauge: Fix segmented gauge with min value != 0
* update gdev dashboard to exercise case
* update gdev dashboard with panel to exercise
* update
---------
Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
This is because MySQL doesn't support storing of NaN valuels, and therefore go-mysql-server isn't going to either.
Float fields/columns are always mapped to be nullable now, otherwise we would have to replace NaN/Inf with 0.
Hide error notifications in kiosk mode on dashboards
Suppress error alerts when dashboard is viewed in kiosk mode
Kiosk mode is typically used for TV displays without interaction
Other notification types (success, warning, info) remain visible
---------
Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
* Redirect to first available dashboard on select
* Check currently active url before redirecting
* Expand currently selected group on selection
* Add unit test
* Test group expansion on URL change
* Don't expand any group if the active item is already in an expanded one
* Mock dashboardsService better
* Fix linitng issue
* Add and remove subscrioption based on open state
* Extract scope navigation utils
* Fix import order
* Fix import path
* Add redirection tests to ScopesSelectorService
* Fix import order
* add check for prom dep auth check in grafana advisor
* remove non prom DS
* clean up and add grafana docs links
* lint
* tests
* Apply suggestions from code review
Co-authored-by: Andres Martinez Gotor <andres.martinez@grafana.com>
* Thank you for your great feedback @andresmgot
* caching now resets on refresh. also check if plugin is installed
* remove unused errors
* add steps back sigh
* make naming clearer
---------
Co-authored-by: Andres Martinez Gotor <andres.martinez@grafana.com>
Dashboard Migration: Fix v38 table panel overrides migration when defaults.custom is missing
The v38 migration was incorrectly skipping field config overrides processing
when fieldConfig.defaults.custom didn't exist. This caused custom.displayMode
properties in overrides to not be migrated to the new custom.cellOptions format.
The fix ensures migrateOverrides is always called for table panels, regardless
of whether defaults.custom exists.
Added comprehensive unit test covering this edge case to prevent regression.
Issue discovered through comprehensive migration testing infrastructure.
Fix v16 grid position calculation for fractional spans
Match frontend span-to-width conversion logic by flooring span first,
then multiplying by width factor, instead of multiplying first then flooring.
This fixes dashboard layout inconsistencies where panels with fractional
spans (e.g. 5.929860088365242) would have different widths between
backend and frontend migration paths.
- Backend old: Math.floor(5.93 * 2) = Math.floor(11.86) = 11
- Backend new: Math.floor(5.93) * 2 = 5 * 2 = 10 (matches frontend)
Includes comprehensive unit test to prevent regression.
* community contributions: update developers/contribute.md
* fix links
* guidance on comm channels
* changed order in no code contrib
* modifed help wanted label
* community: detail tech contributions section
* detailed tech contribution sections
* changed items in step by step
* modified list items
* formated sections
* added section for issues
* format-sections
* added-link
* prettier
* added guidance on comm channels
* Update CONTRIBUTING.md
Added "making technical contributions, with or without code" section in the introductory part to improve the flow of information
* header and link to github
* all pretty no pity
* Update CONTRIBUTING.md
Fixed formatting to avoid Prettier issues again
* changed order of items
* added links
* Update CONTRIBUTING.md
Co-authored-by: Simon Prickett <simon@crudworks.org>
* Update CONTRIBUTING.md
Co-authored-by: Simon Prickett <simon@crudworks.org>
* Update CONTRIBUTING.md
Co-authored-by: Simon Prickett <simon@crudworks.org>
* Update CONTRIBUTING.md
Co-authored-by: Simon Prickett <simon@crudworks.org>
* removed ordered list
---------
Co-authored-by: ewamag <eva.magiera@gmail.com>
Co-authored-by: Simon Prickett <simon@crudworks.org>
- **Fix:** Fix redirection after login when Grafana is served from subpath [#111069](https://github.com/grafana/grafana/pull/111069), [@mgyongyosi](https://github.com/mgyongyosi)
- **FlameGraph:** Ensure total is only counted once for recursive function calls [#111606](https://github.com/grafana/grafana/pull/111606), [@simonswine](https://github.com/simonswine)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111849](https://github.com/grafana/grafana/pull/111849), [@bradleypettit](https://github.com/bradleypettit)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111769](https://github.com/grafana/grafana/pull/111769), [@wbrowne](https://github.com/wbrowne)
- **Table:** Backport the Safari 26 fixes to 12.2.1 [#111906](https://github.com/grafana/grafana/pull/111906), [@fastfrwrd](https://github.com/fastfrwrd)
- **Go:** Update to 1.25.3 [#112362](https://github.com/grafana/grafana/pull/112362), [@macabu](https://github.com/macabu)
- **Table:** Avoid thrown error due to internal React issue [#111945](https://github.com/grafana/grafana/pull/111945), [@fastfrwrd](https://github.com/fastfrwrd)
### Bug fixes
- **Auth:** Fix render user OAuth passthrough [#112097](https://github.com/grafana/grafana/pull/112097), [@mgyongyosi](https://github.com/mgyongyosi)
- **FlameGraph:** Ensure total is only counted once for recursive function calls [#111605](https://github.com/grafana/grafana/pull/111605), [@simonswine](https://github.com/simonswine)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111848](https://github.com/grafana/grafana/pull/111848), [@bradleypettit](https://github.com/bradleypettit)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111767](https://github.com/grafana/grafana/pull/111767), [@wbrowne](https://github.com/wbrowne)
- **Go:** Update to 1.25.3 [#112364](https://github.com/grafana/grafana/pull/112364), [@macabu](https://github.com/macabu)
### Bug fixes
- **Auth:** Fix render user OAuth passthrough [#112096](https://github.com/grafana/grafana/pull/112096), [@mgyongyosi](https://github.com/mgyongyosi)
- **FlameGraph:** Ensure total is only counted once for recursive function calls [#111604](https://github.com/grafana/grafana/pull/111604), [@simonswine](https://github.com/simonswine)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111847](https://github.com/grafana/grafana/pull/111847), [@bradleypettit](https://github.com/bradleypettit)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111766](https://github.com/grafana/grafana/pull/111766), [@wbrowne](https://github.com/wbrowne)
<!-- 12.0.6 END -->
<!-- 11.6.7 START -->
# 11.6.7 (2025-10-21)
### Features and enhancements
- **Analytics:** Apply proper batching to Loki exports and add configurable settings (Enterprise)
- **Go:** Update to 1.25.3 [#112365](https://github.com/grafana/grafana/pull/112365), [@macabu](https://github.com/macabu)
### Bug fixes
- **Auth:** Fix render user OAuth passthrough [#112094](https://github.com/grafana/grafana/pull/112094), [@mgyongyosi](https://github.com/mgyongyosi)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111846](https://github.com/grafana/grafana/pull/111846), [@bradleypettit](https://github.com/bradleypettit)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111801](https://github.com/grafana/grafana/pull/111801), [@wbrowne](https://github.com/wbrowne)
- **URLParams:** Stringify true values as key=true always (fixes issues with variables with true value) [#112045](https://github.com/grafana/grafana/pull/112045), [@torkelo](https://github.com/torkelo)
- **Go:** Update to 1.25.3 [#112366](https://github.com/grafana/grafana/pull/112366), [@macabu](https://github.com/macabu)
### Bug fixes
- **Auth:** Fix render user OAuth passthrough [#112093](https://github.com/grafana/grafana/pull/112093), [@mgyongyosi](https://github.com/mgyongyosi)
- **LDAP Authentication:** Fix URL to propagate username context as parameter [#111845](https://github.com/grafana/grafana/pull/111845), [@bradleypettit](https://github.com/bradleypettit)
- **Plugins:** Dependencies do not inherit parent URL for preinstall [#111802](https://github.com/grafana/grafana/pull/111802), [@wbrowne](https://github.com/wbrowne)
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- it’s 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.
Whether you're a new contributer or a seasoned veteran we hope these resources help you connect with the community:
> **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.
Interact and be heard:
Whether you're a new contributor or a seasoned veteran, we hope these resources help you connect with the community.
- Forums: Do you have a problem, question, or curiosity? Visit our [forums](https://gra.fan/fromgithubtoforums) for a reservoir of knowledge- submit your own questions and answers!
- Meetups: Craving in-person connections without the long journeys? [Join your local Grafana & Friends meetup group](https://gra.fan/githubtomeetup)!
-Community Slack: Eager for real-time connections with fellow users? Begin a conversation on [Slack](https://gra.fan/githubtoslack).
Learn:
-YouTube: From getting started to exploring newer projects like Pyroscope and Beyla, the [Grafana YouTube channel](https://gra.fan/githubtoyoutube) has what you need to get started!
- Meetups: Join a [group near you](https://gra.fan/githubtomeetup) to learn from local experts and ask questions in real time.
Share your story:
- Meetups and blogs: We’d love to feature your OSS Grafana Labs use case or story at an upcoming Grafana & Friends meetup or on the Grafana blog! Submit your idea [here](https://gra.fan/githubtocca) and we’ll connect with you on next steps if accepted.
#### Interact and be heard
-**Forums:** Do you have a problem, question, or curiosity? Visit our [forums](https://gra.fan/fromgithubtoforums) for a reservoir of knowledge, submit your own questions and answers!
- **Meetups:** Craving in-person connections without the long journeys? [Join your local Grafana & Friends meetup group](https://gra.fan/githubtomeetup)!
-**Community Slack:** Eager for real-time connections with fellow users? Begin a conversation on [Slack](https://gra.fan/githubtoslack).
#### Learn
- **YouTube:** From getting started to exploring newer projects like Pyroscope and Beyla, the [Grafana YouTube channel](https://gra.fan/githubtoyoutube) has what you need to get started!
- **Meetups:** Join a [group near you](https://gra.fan/githubtomeetup) to learn from local experts and ask questions in real time.
#### Make technical contributions
- You can make technical contributions with or without code. Scroll down to see how!
#### Share your story
- **Meetups and blogs:** We’d love to feature your OSS Grafana Labs use case or story at an upcoming Grafana & Friends meetup or on the Grafana blog! Submit your idea [here](https://gra.fan/githubtocca), and we’ll connect with you on next steps if accepted.
## Choose the right channel
Use the right place to ask questions, report problems, and propose changes.
- **[GitHub issues](https://github.com/grafana/grafana/issues) and [pull requests](https://github.com/grafana/grafana/pulls)**: Use for reproducible bugs in core Grafana and maintained plugins, small and actionable feature requests, and code or docs changes via pull requests. Avoid general “how do I” questions. For security issues, follow the [security policy](https://github.com/grafana/grafana/security/policy).
- **Grafana community forums**: Use for questions, troubleshooting, best practices, plugin development Q&A, and early idea discussion. Forums create a searchable public knowledge base that helps others with the same problems and questions. Start here if you are unsure: [Grafana community forums](https://community.grafana.com/).
- **Grafana Community Slack**: Use for quick, time-sensitive chats and networking. Do not rely on Slack for complex troubleshooting or decisions. Share outcomes back to a forum topic or GitHub issue/PR to keep a public record: [Grafana Community Slack](https://slack.grafana.com).
- **Not sure where to start?** Start with a forum topic. Maintainers and community members will redirect you if a GitHub issue or pull request is more appropriate.
## Make technical contributions
We welcome your technical contributions! Here are some examples:
We welcome your technical contributions! You can contribute in several ways:
- Contribute to the Grafana codebase- check out these [help-wanted issues](<(https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)>)
- Develop community [plugins](https://grafana.com/developers/plugin-tools)
**Please note:** We do not currently accept contributions for translations. Please do not submit pull requests translating grafana.json files - they will be rejected. We do accept contributions to mark up phrases for translation. See [Internationalization](contribute/internationalization.md).
**What you will need:**
### Your first contribution
- Follow our [developer guide](contribute/developer-guide.md) to set up your environment.
- Adhere to our [frontend](contribute/style-guides/frontend.md) and [backend](contribute/backend/style-guide.md) style guides.
- Write or update tests ([testing guide](contribute/style-guides/testing.md)).
Unsure where to begin contributing to Grafana? Start by browsing issues labeled `beginner friendly` or `help wanted`.
**Step-by-step:**
- [Beginner-friendly](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22beginner+friendly%22) issues are generally straightforward to complete.
- [Help wanted](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) issues are problems we would like the community to help us with regardless of complexity.
1. Browse all [issues](https://github.com/grafana/grafana/issues) to find something to work on. You can also filter by [help wanted](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).
1. Prepare a clear, descriptive pull request ([how-to guide](contribute/create-pull-request.md)).
1. Ensure you include and run the appropriate tests as part of your pull request.
1. Commit and push your changes. If you encounter merge conflicts, you may rebase your branch onto the main branch.
If you're looking to make a code change, see how to set up your environment for [local development](contribute/developer-guide.md).
### Develop a Plugin
When you're ready to contribute, it's time to [create a pull request](/contribute/create-pull-request.md).
Grafana plugins let you extend the platform with new data sources, panels, and more. This is a great way to share your ideas and make a real impact on the Grafana ecosystem.
### Develop a plugin
**Step-by-step:**
Developing a Grafana plugin is a fantastic way to share your unique ideas with the community, extend the platform’s capabilities, and make a real impact on how people visualize and understand their data. Check out our guide to creating [plugins](https://grafana.com/developers/plugin-tools)
1. Read the [plugin development guide](https://grafana.com/developers/plugin-tools) to choose your plugin type and set up your environment.
2. Scaffold your plugin using the recommended tools.
3. Develop and test your plugin locally.
4. Follow best practices for code style, testing, and documentation.
5. Publish your plugin or submit it for review as described in the guide.
### Report bugs
### Contribute without code
You can help even if you don't write code:
- Report a bug with the [bug report template](https://github.com/grafana/grafana/issues/new?template=0-bug-report.yaml) and include steps to reproduce.
- Submit a [feature request](https://github.com/grafana/grafana/issues/new?template=1-feature_requests.md) to propose improvements.
- Improve our docs with the [documentation contribution guide](https://github.com/grafana/grafana/blob/main/contribute/documentation).
- Help with [issue triage](https://github.com/grafana/grafana/blob/main/contribute/triage-issues.md) by reviewing, labeling, and clarifying open issues.
- Report security vulnerabilities following our [security policy](https://github.com/grafana/grafana/security/policy).
**Please note:** We do not currently accept contributions for translations. Please do not submit pull requests translating `grafana.json` files - they will be rejected. We do accept contributions to mark up phrases for translation. See [Internationalization](contribute/internationalization.md).
#### Reporting issues
Before submitting a new issue, try to make sure someone hasn't already reported the problem. Look through the [existing issues](https://github.com/grafana/grafana/issues) for similar issues.
@@ -59,11 +92,11 @@ For data visualization issues:
- Query results from the inspect drawer (data tab & query inspector)
- Panel settings can be extracted in the panel inspect drawer JSON tab
For a dashboard related issues:
For dashboard related issues:
- Dashboard JSON can be found in the dashboard settings JSON model view
- Dashboard JSON can be found in the dashboard settings JSON model view. You can [send the panel JSON model](https://grafana.com/docs/grafana/latest/troubleshooting/send-panel-to-grafana-support/) to Grafana Labs Technical Support and request help with troubleshooting your issue.
For authentication and alerting Grafana server logs are useful.
For authentication and alerting, Grafana server logs are useful.
### Triage issues
@@ -75,7 +108,7 @@ Read more about the ways you can [Triage issues](/contribute/triage-issues.md).
If you believe you've found a security vulnerability, please read our [security policy](https://github.com/grafana/grafana/security/policy) for more details on reporting.
### Suggest enhancements
### 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).
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:
Create tests for your check and its steps to ensure they work as expected. Test both successful and failure scenarios.
## Running the Standalone Mode
To run the standalone mode, you can use the `make run` command. This will start the advisor app in standalone mode, which means it will not be running in a Kubernetes cluster.
```bash
make etcd # Start etcd in a docker container
make run # Start the advisor app in standalone mode
```
This will start the advisor app on port 7445. You can then access the advisor app at `http://localhost:7445`.
To see some sample checks, you can run the following command:
```bash
make create-checks
```
Then you can see list in the URL: `http://localhost:7445/apis/advisor.grafana.app/v0alpha1/namespaces/stacks-1/checks`
To delete all checks, you can run the following command:
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"}}`)
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"}}`)
@@ -57,6 +61,11 @@ var appManifestData = app.ManifestData{
Schema:&versionSchemaCheckTypev0alpha1,
},
},
Routes:app.ManifestVersionRoutes{
Namespaced:map[string]spec3.PathProps{},
Cluster:map[string]spec3.PathProps{},
Schemas:map[string]spec.Schema{},
},
},
},
}
@@ -86,6 +95,7 @@ var customRouteToGoResponseType = map[string]any{}
// 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)
return"Check if Prometheus data sources are using deprecated authentication methods (Azure auth and SigV4)"
}
func(s*promDepAuthStep)Resolution()string{
returnfmt.Sprintf("Enable the feature toggle for 'prometheusTypeMigration'. If this feature toggle is already enabled, make sure that 'Azure Monitor Managed Service for Prometheus' and/or 'Amazon Managed Service for Prometheus' plugins are installed. If the data source is provisioned, edit data source type in the provisioning file to use '%s' or '%s'.",datasources.DS_AMAZON_PROMETHEUS,datasources.DS_AZURE_PROMETHEUS)
fmt.Sprintf("Datasource %s (UID: %s) is of type %s but it's using a deprecated authentication method so it should be migrated",dataSource.Name,dataSource.UID,dataSource.Type),
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.