CI: set dry-run if `release/dry-run` label is set on `release-comms.yml` and set latest on github release if `latest` is set (#91089)
set dry-run and set latest on github release
(cherry picked from commit 4e84234424)
(cherry picked from commit 39df6fb2fa)
CI: fix changelog push error (#90971)
* add --set-upstream origin to release-pr workflow git push
* use a different branch name for the changelog workflow
* disable backport support for now
* remove backport condition
(cherry picked from commit 089a5710b6)
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
(cherry picked from commit 9f22e97ab6)
CI: changelog boolean type (#90948)
* bool -> boolean
* add missing type keys
* provide secrets in release-pr
* use permissions and built-in github token
(cherry picked from commit 14396048d7)
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
(cherry picked from commit 8a219d5d18)
TemplateSrv: Backportable version of 90808 (#90833)
TemplateSrv: Backportable version of 90808 (#90816)
* TemplateSrv: Add test case for SafeSerializableSceneObject
* Update dashboard data source to use scoped vars scene object valueOf
* 11.1.x Backportable version of 90808
* lint
(cherry picked from commit 2e5b41cbcb)
CI: For every release PR created, also push a changelog PR to main (#90698)
For every release PR created, also push a changelog PR to main
(cherry picked from commit 9232db2416)
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
Chore: update changelog workflow (#90608)
* try integrating
* pass tags
* change section order
* use better terminology
* one more attempt
* keep delimiters
* attempt to patch changelog
* quotes, bash quotes...
* use proper content file
* parens around date
* time for a pr
* first checkout, then create user
* add latest input
* git push
* use square brackets
* formatting
* update release-pr
* fix typo
* try sparse checkout
* fetch depth zero
* clean up after changelog generator
(cherry picked from commit f8b092aba6)
CI: replace publish image step with a much simpler one that supports LATEST (#90498)
* replace publish image step with a much simpler one that supports LATEST
(cherry picked from commit 6a2a6b0fbc)
Revert "Frontend: Use safe stringifier in parseBody" (#90522)
Revert "Frontend: Use safe stringifier in parseBody (#90047)"
This reverts commit 434f386982.
(cherry picked from commit 3559c5c297)
highlighting the part of the Grafana enterprise section so easir for … (#90177)
highlighting the part of the Grafana enterprise section so easir for users to find it
(cherry picked from commit 677d2a8b70)
Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
SoloPanel: Avoid fatal error when panelId correspond to a row (#90271)
(cherry picked from commit 51fab9adf4)
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
RBAC: List only the folders that the user has access to (#88599)
only check folder permissions when listing folders
(cherry picked from commit 095ca66d9f)
Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
CI: fix release pr condition (#90299)
* Release comms should only run when the source PR is
* Fix release-comms workflow condition
(cherry picked from commit a28db90dd5)
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
* Azure: Fix default subscription setting (#90185)
* Ensure default subscription is set
* Include some info for when the default subscription is required
* Rename settings mock
- Add mockDatasourceSettings function
* Add MonitorConfig test
* Revert "Rename settings mock"
- Avoid issues when backporting
* Remove description
* Remove required field
* Remove unused import
(cherry picked from commit bba26f8e13)
* Add react
---------
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
CI: Sync branch and tag after release (#89967)
* Added `workflow_call` event to allow other workflows to invoke the "Create or update GitHub release"
* Added `dry_run` to `github-release.yml`
* Added `latest` to `release-pr.yml` which will cause the release PR to add a `release/latest` label.
* Removed unnecessary github app creation from github-release workflow and just used permissions.
(cherry picked from commit 63e715f6a9)
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
Alerting: Support `utf8_strict_mode: false` in Mimir (#90092)
(cherry picked from commit 650616a404)
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
Tempo: Fix grpc streaming support over pdc-agent (#89883)
* Tempo: Fix grpc streaming support over pdc-agent
* Fix a spelling error and formatting
* Ignore lint issue for reasons listed in source code comment
---------
Co-authored-by: Joey Tawadrous <joey.tawadrous@grafana.com>
(cherry picked from commit d5b21f77aa)
Co-authored-by: Taylor Dean <taylor@makeshift.dev>
Alerting: Skip loading alert rules for dashboards when disabled (#89361)
(cherry picked from commit 781e394118)
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
Scenes: Repeat horizontally set the width to 24 even if repeat variable is not set (#89658)
(cherry picked from commit 6773f7f4ce)
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
NavToolbarActions: Make sure ToolbarActions are renrendered when needed (#89615)
(cherry picked from commit 96fda0d6ea)
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Notifications: Do not log email address in error message (#89314)
Do not log email address in error message
(cherry picked from commit c2c30c25ed)
Co-authored-by: William Wernert <william.wernert@grafana.com>
Scenes: Setting default_home_dashboard_path returns blank page and no controls (#89304)
(cherry picked from commit 3fdc66d284)
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
DashboardScene: Make Grafana usable when custom home dashboard is invalid (#89305)
* DashboardScene: Make Grafana usable when custom home dashboard is invalid
* Tests
* Remove console.error
(cherry picked from commit ae04580e5f)
Prometheus: Don't use match[] parameter if there is no metric (#89352)
don't use match[] parameter if there is no metric
(cherry picked from commit 76047d9365)
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
Scenes: Be able to show/hide dashboard controls in Kiosk mode (#88920)
(cherry picked from commit 0abe4fc709)
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
Analytics: Fix ApplicationInsights integration (#89299)
change ApplicationInsights backend to use SystemJS to load
(cherry picked from commit 7bb883e375)
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Fix typo in dashboard-variables destinations and also use Grafana Cloud docs if they exist (#89244)
Use ref URIs with the reference style links (#89204)
* Use ref URIs with the reference style links
If I remember correctly, the UI needs reference style links so it can substitute its own link destinations.
ref URIs work both inline and as the destination for reference style links.
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Remove unused ref URI
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Remove unused Data frames link
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit f5468542ba)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Added Grafana Play Links to Panel visualization docs (#88995)
* Update index.md on Node panels to Grafana Play link
* Update index.md add Traces docs link to Grafana Play
* Update index.md News documentation link to Grafana Play
* Update index.md Alert list documentation link to Grafana Play
* Update index.md Alert list fixed missing link
* Update index.md Fixed title
* Update index.md Trying code fix
* Ran prettier command
* Matched link text to dashboard titles
* Replaced URL with ref URI key
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit 404617b33d)
Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
Docs: Updates to the Grafana enterprise data source intro page (#89065)
removed a dupe, deprecated data source and cleaned up a page name
(cherry picked from commit 59fbc0d9e3)
Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>
Alerting: Fix rule storage to filter by group names using case-sensitive comparison (#88992)
* add test for the bug
* remove unused struct
* update db store to post process filters by group using go-lang's case-sensitive string comparison
--------
Co-authored-by: Alexander Weaver <weaver.alex.d@gmail.com>
(cherry picked from commit d4b0ac5973)
Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
DashboardScene: Fixes lack of re-render when updating field override properties (#88796)
* DashboardScene: Fixes lack of re-render when updating field override properties
* Added unit test
(cherry picked from commit db25886f9c)
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Transformations: Keep original `field.labels.name` when joining frames (#88873)
(cherry picked from commit 89a0bec208)
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
* Calculate row height
* Move things around
* Update getItemSize to use text bounding box
* Update types
* Cleanups and reminders
* Calculate line height
* Update line height calculation
* Remove debugging
* Add cell option editing
* Prettier
* Use field configured for text wrapping
* Add TODO
* Make sure column configuration is correct
* Update height heuristic and hover behavior
* Disable overflow on hover with text wrapping
* Update heuristic
* Clean things up
* Color background cell options
* Fix tests
* Prettier
* React deps
* Remove old hook dep
* Fix type errors
* Update label and description for editor
* Fix non-wrapped case
* Make sure color background works
* Prettier
* Address review comments
* fix prettier
* Add heuristic for field sizing
* Fix up logic
* Prettier
* Fix test
* Oh prettier 🙈
* Don't wrap text on non-string fields
* Add wrapping to color text cell
* Prettier
* Fix option not showing for auto cell type
* Move longest field guessing into function
* Clean things up
* Add tests
* Make sure text won't flake
* Prettier
* Remove spurious import
* Ignore any in this case
* Add alpha label
* Prettier
* Fix typecheck
* Fix crash when sampling when there are undefined records
* Update heuristic to take into account long strings
* Prettier
* Update scale factors
* Update field index selection
* Prettier
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
* feat: introduce exposable components and update the public APIs
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* tests: fix the tests for `usePluginComponent()`
I broke them when I wrapped the component with the PluginContextProvider which fetches the plugin metadata.
* fix: typo
---------
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* Auth: Implement org role mapping for google oauth provider
* Update docs
* Remove unused function
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
* do it
* set empty child version to parent version
* feat(plugins): use pluginId for loader cache keys
* feat(plugins): apply caching to all js and css files systemjs loads
* remove old code and add comment
* test(plugins): update systemjs hooks tests in line with better caching
* test(plugins): wip - comment out failing backend loader tests
* fix tests and improve comment
* Update public/app/features/plugins/loader/cache.test.ts
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
---------
Co-authored-by: Will Browne <will.browne@grafana.com>
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
* add version to time-interval models
* set time interval fingerprint as version
* update to check provided version
* delete to check if version is provided in query parameter 'version'
* update integration tests
* update specs
Assigns ownership of Alerting backend components to grafana/alerting-backend, due
to deprecation of the existing grafana/alerting-backend-product team.
* Support record struct in provisioning API
* Update api spec
* Use record field
* Restrict API endpoints following toggle
* Fix swagger spec
* Add recording rule validation to store validator
* return error early
* enable gzip between grafana and influxdb
* use json-iterator package for json operations
* revert gzip changes
* update test
* go mod tidy
go work sync
* Update types
* Mark datasource as supporting traces
* Add logic to transform exemplar query to traces query
* Render appropriate editor
* Run trace query for exemplars
* Refactor out common functions
- Add function to retrieve first/default subscription
* Add route for trace exemplars
* Update logic to appropriately query exemplars
* Update traces query builder
* Update instance test
* Remove unneeded import
* Set traces pseudo data source
* Replace deprecated function calls
* Add helper for setting default traces query
* Don't show resource field for exemplars query
* When resetting operation ID for exemplars set query to default
- Update tests
* Update query header to appropriately set the service value
* Fix response frame creation and update tests
* Correctly select resource
* Convert subscriptionsApiVersion to const
* Add feature toggle
* revert Select changes as we can handle it outside of the base select component
* update scenes
* update scenes properly
* revert changes to azure-monitor e2e tests
* Update QuerySuggestionItem.tsx
Adjusts the styling of the "no" button in the explainer feedback section to a standard secondary variant instead of the success styling
* run prettier for drone
---------
Co-authored-by: Brendan O'Handley <brendan.ohandley@grafana.com>
* Kick start your query: keep pipe operations in the original query
* QueryPatternsModal: define keep operations from the operations list
* QueryPatternsModal: resolve deprecation
* QueryPatternsModal: use the correct import
* QueryPatternsModal: use category instead of order rank
* QueryPatternsModal: add unit test case
* Chore: change button cta
* Remove role requirement for editing silence (instead handled by silence editor displaying error)
* Send query params for metadata/access control silence logic
* Add new access control types to enum
* Add folder-specific checks for silences
* Remove filtering in alert manager picker
* fix flakey rule viewer test and update permissions helper
* Use `returnTo` in rule viewer page
* Fix incorrect display of duration
* Clean up some mock server behaviour in rule details tests
* Tweak styles for silences alerts table
* Remove alertmanager picker from silences drawer
* Add error if user cannot edit a silence
* Show alert rule name in silences table and consume RBAC logic
* Update mocks to include RBAC access control logic
* Update silences tests
* Update silences type to include access control info
* Update comment for missing alertmanager
* Update mock handlers and query param logic
* Tweak query params again
* Update access control mock
* Revert AM picker fix as user may not have access to Grafana AM
* Swap ternary order
* Change text for no alert rule targeted
* Don't show error alert from RTKQ query and remove alert instance preview in case of error
* Add missing translations
* Fix test adding missing mock for getting alert rule
* Add missing translations in SilencesTable
* Add translations autogenerated files
* fix allowing edit silence in external alert manager
---------
Co-authored-by: Sonia Aguilar <soniaaguilarpeiron@gmail.com>
Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
- Adds a find endpoint to return dashboard bindings that match any of the scopes. For example /apis/scope.grafana.app/v0alpha1/namespaces/default/find/scope_dashboard_bindings?scope=s1&scope=s2
- Updates the ScopeNode find endpoint to a new path, /find/scope_node_children , makes the key "items" for all find endpoints (instead of mix of "found" and "items"), and makes the list item type a ScopeNode instead of its own type.
- Updates kubectl get commands to return more information about scopes, scopenodes, and scopedashboard bindings to display more fields in table output
---------
Signed-off-by: bergquist <carl.bergquist@gmail.com>
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Kyle Brandt <kyle@grafana.com>
Co-authored-by: Todd Treece <todd.treece@grafana.com>
* Conf: Add org_mapping and org_attribute_path to github and gitlab conf
* Gitlab: Implement org role mapping
* Update docs
---------
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* Alerting: Update grafana/alerting
* make tests pass by implementing yaml unmarshallers and deleting fields with omitempty in their yaml tags
* go mod tidy
* fix tests by implementing not calling GettableApiAlertingConfig.UnmarshalYAML from GettableApiAlertingConfig.UnmarshalJSON
* cleanup, reduce diff
* fix more tests
* update grafana/alerting to latest commit, delete global section from configs in tests
* bring back YAML unmarshaller for GettableApiAlertingConfig
* update alerting package dependency to point to main
* skip test for sns notifier
* feat: add search input and filters
* feat: add state management v0
* feat: update search view and add to trash page
* refactor: fix some errors
* feat: page population
* feat: fix error
* Run betterer checks locally
* Run i18n abstraction
* refactor: clean up after merging main
* refactor: clean up after merging main
* Run i18n abstraction
* refactor: remove browse view
* Placeholder commit with rule_uid change
* Add new filters to grafana rule state API
* Revert type change
* Split rule_group and rule_name params
* remove debug line
* Change how query params are parsed
* Comment
* Change devenv provision updateinterval to one hour
* Update bulk-dashboards and bulk-folders
* Clear bulk-folders before creating new ones
* Update devenv/bulk-folders/bulk-folders.sh
* Alerting docs: Specify Grafana alert rule evaluation
* Mention alerts can display the same evaluation timestamp
* Specify `concurrent` behavior in alert rule evaluation
* Include a minor `Evaluation strategies` section
* Grafana UI: stop input element of the react select component from overflowing the input container
* update snapshot since the css changed
---------
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* make sure that DS permissions get correctly cleaned up when a DS is deleted through provisioning
* don't attempt to delete a DS if it's not found
* fixes for tests
* fix ds tests
* rename DS service used by DS provisioner to BaseDataSourceService to avoid confusions with the full DS service
* Show queryVariable editor even if the variable does not support variables
* Fix VariableQueryRunner unit test, now takes into account the new function
* Docs: update with terraform version
* added the terraform version pinning
* formatting
* Update docs/sources/administration/api-keys/index.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* formatting
---------
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Cloud migration: create route to fetch cloud migration token
* implement gcomStub.ListTokens
* fix swagger for POST /cloudmigration/migration
* fix swagger for POST /cloudmigration/migration
* fix swagger for POST /cloudmigration/migration
* Folders: Optionally include fullpath in service responses
* Alerting: Export folder fullpath instead of title
* Escape separator in folder title
* Add support for provisiong alret rules into subfolders
* Use FolderService for creating folders during provisioning
* Export WithFullpath() folder service function
---------
Co-authored-by: Tania B <yalyna.ts@gmail.com>
Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
* AzureMonitor: get the list of azure clouds from the SDK instead of from a hard coded list
* add azure-sdk to yarn.lock
* merge legacy with custom options
* Normalize legacy cloud names
* Workaround: send new credential format to backend while we wait to migrate to the new format
* Lint fix
* resolveLegacyCloudName should not return undefined
* re-add undefined handling in resolveLegacyCloudName so that we fallback to getDefaultAzureCloud when not defined
---------
Co-authored-by: Jeremy Angel <jeremyangel@microsoft.com>
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Alerting: Add optional metadata to GET silence responses
- ruleMetadata: to request rule metadata.
- accesscontrol: to request access control metadata.
* Introduce preLogoutHooks in authn service
* Add gcom_logout_hook
* Config the api token from the Grafana config file
* Simplify
* Add tests for logout hook
* Clean up
* Update
* Address PR comment
* Fix
* Scopes: Select scope even without data retrieval
* Pass entire scope and not only the spec to Prometheus
* Enrich ScopeSpec that is sent to Prometheus
* add name to BE
---------
Co-authored-by: Kyle Brandt <kyle@grafana.com>
* Added Installation video index.md
* Update index.md adding video for Debian and Ubuntu installs
* Update index.md adding install video in macOS
* Update index.md adding video to install RHEL or Fedora
* Update index.md adding install video for SUSE
* Update index.md adding video for Windows installer
fix: in Components, `model.useState()`, instead of `model.state`
Generally, it is better practice. More succinct.
It could also eliminate subtle state bugs.
* Add custom attention state to dashboard
* Add attention state to DashboardGrid
* Remove old functionality
* Add attention state to keybindingSrv
* Create PanelAttentionService
* Add PanelAttentionService with scenes support
* Remove unused code
* Use viz panel key instead of VizPanel
* Add type assertion
* Add e2e test
* Update comments
* Use panel id for non-scenes use case
* Support undefined service use case
* Memoize singleton call
* Debounce mouseover
* Set panelAttention with appEvents
* Use AppEvents for Scenes
* Remove panelAttentionSrv
* Wait in e2e to handle debounce
* Move subscription to KeybindingSrv
* Remove imports and reset keyboardShortcuts from main
* Fix on* event handlers
* added config doc
* added content
* added new topic docs and made updates
* minor updates
* updates based on feedback
* ran prettier , made updates
* removed original doc, updates to topic docs
* removed old index doc
* fixed format issue
* Update docs/sources/administration/team-management/administering-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/administering-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/_index.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* edits based on feedback
* updates based on feedback
* improved some wording
* ran prettier
* minor correction
* added aliases
* Update docs/sources/administration/team-management/configure-grafana-teams.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* added contractions
* Removed .nx
---------
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Azure monitor: Basic Logs frontend (#85905)
* adds datasource level config for enabling basic logs
* add basiclogsquery type to query json
* add toggle between basic and analytics
* adds basic logs toggle from UI, blocks time picker to only dashboard if basic logs is selected
* add check to remove UI if alerting
* tests for logsmanagement component
* tests for logs query editor
* tests for time mangement control
* remove unused imports
* clears query whenever toggle changes from basic <-> analytics
* add test to account for clearning query
* Update public/app/plugins/datasource/azuremonitor/components/ConfigEditor/BasicLogsToggle.tsx
wording
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx
spelling
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx
spelling
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* update dependency list
* clear basic logs if resources change
* fix tests
---------
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Azure Monitor: Basic Logs modal acknowledgement (#86244)
* adds datasource level config for enabling basic logs
* add basiclogsquery type to query json
* add toggle between basic and analytics
* adds basic logs toggle from UI, blocks time picker to only dashboard if basic logs is selected
* add check to remove UI if alerting
* tests for logsmanagement component
* tests for logs query editor
* tests for time mangement control
* remove unused imports
* add confirm modal
* clears query whenever toggle changes from basic <-> analytics
* add test to account for clearning query
* adds modal acknowledgement for basic logs query
* tests for handling modal logic
* basic logs ack type
* Update public/app/plugins/datasource/azuremonitor/components/ConfigEditor/BasicLogsToggle.tsx
wording
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx
spelling
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx
spelling
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* update dependency list
* clear basic logs if resources change
* remove modal from config page
* remove basic logs query ack type
* add modal acknowledgement to toggle between basic and analytics
* clear query if resources change
* fix tests
* fix tests
* Update public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsManagement.tsx
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* fix tests
---------
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Azure Monitor: Basic Logs Backend (#87653)
* fix logic for showingBasicLogsToggle
* move to utils function and add basiclogsquery in apply template variable
* add backend safeguards for basiclogsqueries
* adds support for calling search or query apis based on whether it is basic logs or not
* add tests for utils
* initial test for basic logs query in the backend
* tests for basic logs
* remve comment
* simplify checks for basic logs
* adds fromAlert prop for azure monitor backend services
* adds fromAlert check fo basic logs
* fix working and empty tags
* add telemetry for basic logs
* remove import from grafana core package
* change fromAlert true in tests
* change the way tests catch errors
* Update pkg/tsdb/azuremonitor/loganalytics/utils.go
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update pkg/tsdb/azuremonitor/loganalytics/utils.go
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update pkg/tsdb/azuremonitor/loganalytics/utils.go
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Update pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* restructure code to only run basic logs checks if basiclogsflag is true
* data retention warning
* tests for calculate time range
* Simplify determining if request is from alerting
* Fix lint and bool check
* Fix tests
* clarify data retention
---------
Co-authored-by: Jocelyn <jcolladokuri@microsoft.com>
Co-authored-by: jcolladokuri <jocelyncollado52@gmail.com>
* Azure Monitor: Basic Logs data volume notification (#88009)
* frontend changes for data ingested warning
* initial logic for getResource
* payload processing
* create basicLogs usage function
* add utils for converting time and getting the data volume query for basic logs
* frontend updates for showing the data ingested for the given query
* frontend tests
* add check for when no dataIngested is returned
* remove backend.logger prints
* comment on what function does
* fix merge
* make resource URI regex case insensitive
* add support for workspace variables in basic logs flow
* add undefined check
* structure and add tests for variable support
* Update pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* add tracing for basic logs usage request
* clean up data volume query struct
* use async/await instead of callback
* fix parameters for getApiURL
* restrict time on usage query to 8 days max
* add time to dependency array to refetch basic logs usage
* move time check implementation to backend
* fix utils tests
---------
Co-authored-by: Jocelyn <jcolladokuri@microsoft.com>
Co-authored-by: jcolladokuri <jocelyncollado52@gmail.com>
---------
Co-authored-by: jcolladokuri <jcolladokuri@microsoft.com>
Co-authored-by: jcolladokuri <jocelyncollado52@gmail.com>
* Basic eval flow
* Wiring-up
* fix
* Extend todo
* Start with tests
* Include some relevant tests, skip ones that seem to have timing-based race conditions
* Some tests, touch up linter and todo
* Solve TODO
* Add tracing
* Tests to make sure an eval went through
* Wire up feature toggles
* Update pkg/services/ngalert/schedule/recording_rule.go
Co-authored-by: Steve Simpson <steve.simpson@grafana.com>
* Update pkg/services/ngalert/schedule/recording_rule_test.go
Co-authored-by: Steve Simpson <steve.simpson@grafana.com>
* Update pkg/services/ngalert/schedule/recording_rule_test.go
Co-authored-by: Steve Simpson <steve.simpson@grafana.com>
* Update pkg/services/ngalert/schedule/recording_rule_test.go
Co-authored-by: Steve Simpson <steve.simpson@grafana.com>
---------
Co-authored-by: Steve Simpson <steve.simpson@grafana.com>
* Alerting: Add single rule checks to alert rule access control
Modifies ruler api single rule read to no longer fetch entire groups and instead
use the new single rule ac check.
Simplifies provisioning api getAlertRuleAuthorized logic to always load a single
rule instead of conditionally loading the entire group when provisioning
permissions are not present.
* Swap out Has/AuthorizeAccessToRule for Has/AuthorizeAccessInFolder
* Also call storage on mode1. Add metrics
* Update comment
* Don't use compare function for now
* Remove very important space
* Improve code readability on modes 1 and 2
* Fix tests
* Return error from legacy write
* Renume useless defer
* Start adding logging for mode2
* Retrurn errors is storage read fails
* Finish adding latency metrics to mode2
* Emit kind to metrics instead
* Fix var name
* Return if legacy delete list fails
* Unify latency calls
* Fix get function
* NodeGraph: Use values from fixedX/fixedY column for layout
* Cleanup some code, typings and naming
* Add test
---------
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
* Prometheus: Update dependency to v0.52.0
* go work sync
* fix panics in tests
* go work sync
* prometheus v0.52.0
* handle errors
* Update pkg/services/ngalert/sender/sender_test.go
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
* Update pkg/services/ngalert/sender/sender_test.go
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
---------
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
* Extract returned object hydration into function
* Finish writing tests for utils func
* Lint
* Update pkg/apiserver/rest/dualwriter_mode2.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* Better var naming
* Remove duplicated logic
* Lint
* Fix test
* Lint
* Make type private
* Fix one more test
* Fix test
---------
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* docs(developer-guide): add development commands for building decoupled plugins
* docs(developer-guide): add subheading, tidy up tone
* Apply suggestions from code review
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* docs(developer-guide): plugins section to identify which plugins need additional cmds
---------
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* change select group headers to always be visible
* remove unnecessary SelectOptionGroup
* hacky change to work with virtualised lists
* undo this change
* add top border
* remove children from the category header
* don't virtualize story
* bit of renaming
* comments
* add new story for virtualized options
* LogRowMessage: strip new lines when wrapping is disabled
* LogRowMessage: prevent conflicts between failed json parsing and unwrapping
* LogRowMessage: expand multi-line unwrapped logs when opening details
* Add unit test
* Prettier
* chore: update comment
* Alerting: Wire up alertmanagerRemoteOnly feature toggle.
Though the mode isn't feature complete yet, it will be useful to have the
feature toggle wired up in order to start testing.
* Apply suggestions from code review
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
* Formatting
---------
Co-authored-by: Santiago <santiagohernandez.1997@gmail.com>
* POC preserve filters and group by when navigating between dashboards
* Save all variables and time range
* minor refactor
* Add feature toggle
* Update feature toggle usage
* Delete local storage item if nothing to preserve
* Structural changes
* Simplify restore params code
* Use session storage
* Add tests
* Merge fix
* Remove unused code
* And make it better, errrrrr
* Minor deduplication refactor
* last minor
* Alerting: Pass metrics Registerer into NewExternalAlertmanagerSender.
I will work on a separate change to export the metrics from Grafana, this
is a little more complicated.
* Typo
* Prometheus: get the list of azure clouds from the SDK instead of from a hard coded list
* Update yarn.lock
* Fix lint
---------
Co-authored-by: Jeremy Angel (from Dev Box) <jeremyangel@microsoft.com>
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
* Load custom clouds from config file
* Update docs
* Use the correct list of clouds, add test, fix error condition handling
* Remove on custom cloud from sample.ini and docs
* Remove unnecessary else block
* Use cached json instead of serializing with each request
* Update grafana-azure-sdk-go version to v2.0.4
* update configure-grafana entry for clouds_config
* fix lint errors
* fix lint errors
---------
Co-authored-by: Jeremy Angel (from Dev Box) <jeremyangel@microsoft.com>
* WIP
* Refactor and update how we display these fields in the form
* Add test for getTemplateOptions and udpate parseTemplates to handle minus simbol
* fix betterer
* Fix wrapper
* Create new usePreviewTemplate to be reused from TemplatePreview and TemplateContentAndPreview
* remove unnecessary check
* track interactions
* Include the whole content of the template in the preview
* Update parseTemplates function to return default templates
* handle nested templates in parseTemplates function
* Missing border fixed, whitespaces preserved and no empty space at the bottom
* remove unused styles and add a comment in test
* Add missing error in getPreviewResults
* fix styles for template selector containers
* Alerting: PR feedback to move default templates into RTKQ (#88172)
Move default templates to RTKQ API + constant
* move parseTemplates to a utils file and refactor last part of this function
* Keep selected options when loading exising input and when switching between tabs
* Update descritpion in tabs
* Fix not previewing when loading existing values
* Update text addressing Brenda's feedback
* Add test for matchesOnlyOneTemplate function
* Add minheight to viewer container and fix getContentFromOptions function
---------
Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
* Fix variable saving inconsistencies
* add tests
* for variable changes to be detected, save variables need to be true
* Fix for issue with buildNewDashboardSaveModel creating filter variable withouth filter property
* remove unused import
* Add test rule generator support for recording rules
* Remove accidental add
* Recording rules appear in GetRulesForScheduling
* A couple more tests, updates, count
* No need to capture rule defs
* Add validation to check for existence of dashboard before creation
* add service mock for FindDashboard
* update tests
* reorder function
* update logic change to bool
* update naming validate dashboard
* add tests
* update return val
* remove bool return val
* simplify return statement
* update test
* remove extra spacing
* update mock
* remove unncessary space
* Alerting: separate out silence auth service preconditions checks
Will be useful for subsequent PR that adds metadata to silence response
* Add silence read wildcard scope to precondition for read all silences
* Fix missing `alt` text in images
* Fix `canonical` setting in AlertManager docs
* Fix `.`(dot) position in hyperlinks due to a temporary styling issue
* Revert "Fix `canonical` setting in AlertManager docs"
This reverts commit 65354b3642.
* Renamed Manage variables page to Add variables
* Renamed Inspect variables page to Manage and inspect variables
* Updated H1 on Add variables
* Moved Manage variables content to from Add varibles page to Manage and inspect variables page and updated text to fit
* Updated link style to ref URIs in Manage and inspect variables
* remove unused action set code, refactor the existing code
* fix import ordering
* use a separate interface for permission expansion after all, to avoid circular dependencies
* add comments, fix a test
* Social: link to OrgRoleMapper
* OIDC: support Generic Oauth org to role mappings
Fixes: #73448
Signed-off-by: Mathieu Parent <math.parent@gmail.com>
* Handle when getAllOrgs fails in the org_role_mapper
* Add more tests
* OIDC: ensure orgs are evaluated from API when not from token
Signed-off-by: Mathieu Parent <math.parent@gmail.com>
* OIDC: ensure AutoAssignOrg is applied with OrgMapping without RoleAttributeStrict
Signed-off-by: Mathieu Parent <math.parent@gmail.com>
* Extend docs
* Fix test, lint
---------
Signed-off-by: Mathieu Parent <math.parent@gmail.com>
Co-authored-by: Mihaly Gyongyosi <mgyongyosi@users.noreply.github.com>
* Add skeleton implementation for mode reconciliation between 1 and 2
* Track mode for each dual writer
* Add test for setting dual writer
* Include context when setting dual writing mode
---------
Co-authored-by: Dan Cech <dcech@grafana.com>
* GetSignedInUser unexported (renamed to getSignedInUser)
* GetSignedInUserWithCacheCtx renamed to GetSignedInUser
* added a check for a nil cacheservice (as defensive programming / test convenience)
* Also call storage on mode1. Add metrics
* Update comment
* Don't use compare function for now
* Remove very important space
* Finish add logging in mode2.
Also call US in mode1 in a non blocking way
* Improve code readability on modes 1 and 2
* Fix tests
* Rename vars
* Lint
* Return error from legacy write
* Renume useless defer
* [REVIEW] improvements
* Pass kind instead of name
* Use kind instead of name in metrics
* Only call latency metrics once
* Return error on writes to legacystore in mode1
* Move accesssor logic into the goroutine as well
* Add shim rule implementation for recording rules
* Give ruleFactory access to the original rule definition
* Schedule shim implementation if the rule is a recording rule
* Fix or suppress linter
* Fix nolint
* Read path, main API
* Define record field for incoming requests
* Refactor several alerting specific validators into two paths
* Refactor validateCondition actually contain all the condition validation logic
* Move condition validation inside rule path
* Validators for recording rules
* Wire feature flag through to validators
* Test for accepting a valid recording rule
* Tests for negative case, no UID
* Test for ignoring alerting fields
* Build conditions based on recording rules as well
* Regenerate swagger docs
* Fix CRUD test to cover the right thing
* Re-generate swagger docs with backdated v0.30.2 version
* Regenerate base spec
* Regenerate ngalert specs
* Regenerate top level specs
* Comment and rename
* Return struct instead of modifying ref
* logic to expand action set to the underlying actions when permissions are fetched from the DB
* updates needed for dependency injection
* clean up some code, also deduplicate scopes when grouping scopes and actions
* expand on a comment
* rename a method
* fixed text and better formatting
* added examples of community and partners plugins
* added more clarity to apps plugin usage
* added and also fixed more
* added clarity to the server and org admin roles
* run prettier
* fixed some minor typos
* Apply suggestions from code review
thanks. looks good now-
Co-authored-by: David Harris <david.harris@grafana.com>
* Technical edit
* restorted the changes in panel and datasource examples as requested
* revert duplicated change
* Apply suggestions from code review
Thanks Jack for the suggestions. Looks good!!
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* added minor adjustment
* fixed typo
* added bash syntax
* revert changes
* added changes from PR 87168 for index.md file
* Delete docs/sources/shared/find-and-use-plugins.md
removed this file from the PR as was not intended to be part of this PR.
This PR is only for the Grafana OSS and not for the Grafana Cloud
* run prettier
* Apply suggestions from code review
Co-authored-by: David Harris <david.harris@grafana.com>
* Update docs/sources/administration/plugin-management/index.md
Co-authored-by: David Harris <david.harris@grafana.com>
* Update docs/sources/administration/plugin-management/index.md
Co-authored-by: David Harris <david.harris@grafana.com>
* added a small text fix
* added cloud tag in product labels
* run prettier
* Apply suggestions from code review
thanks for the review
Co-authored-by: Joseph Perez <45749060+josmperez@users.noreply.github.com>
* fixed typo for note section
* run prettier to fix
---------
Co-authored-by: David Harris <david.harris@grafana.com>
Co-authored-by: Joe Perez <joseph.perez@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Joseph Perez <45749060+josmperez@users.noreply.github.com>
* enabled skipped tests
* adjust to wait for loading indicator
* adjust typos
* adjust e2e workflow for test PR run
* restore workflow
* adjust workflow for test run
* restore workflow to sheduled runs
* Use deepEqual to ensure migratedQuery is only returned when query is unchanged
* Add selectors for query editors
* Add more tests for query editor component
* Clarifying comments
* Fix how state is set
* Simplify query editor loading and migration
* add subtle active disabled state + fix story
* make toggle disabled color when disabled
* add icon in checked state
* undo placement changes
* readd positioning changes
* remove extra css
* MultiSelect: Respect value passed to the component regardless of custom value being allowed or not
* reset input for test
---------
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
* chore(storybook): run yarn dlx storybook@latest upgrade
* chore(storybook): remove storybook/blocks patch
* chore(yarn): clean up storybook dependencies
* feat(storybook): migrate to v8 config via migration codemods
* refactor(storybook): update stories to use v8 types via codemod
* refactor(storybook): update stories to use preview-api instead of client-api
* refactor(storybook): replace mdx usage of ArgsTable with PureArgsTable
* refactor(storybook): migrate remaining mdx files to v8 storybook/blocks api
* refactor(storybook): clean up mdx imports and blocks component names
* chore(storybook): clean up typescript configuration
* fix(frontend): align types/react versions across monorepo so grafana ui can be built
* fix(storybook): pub back react-docgen-typescript and use ArgTypes so props tables work
* chore(storybook): patch blocks package to expose Preview component
* revert(storybook): revert changes related to using Canvas component in mdx files
* Storybook upgrade: Fix icon typing (#87793)
fix iconOptions typing
* refactor(storybook): prefer as const over asserting types
* revert(storybook): put back correct case in box.mdx
---------
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* Implement changes for new Scopes API
* Update from linkID to linkId
* Fixes
* Fix tests
* prom/scopes: change query model to recieve []ScopeSpec
* Move to basic backend service
---------
Co-authored-by: Kyle Brandt <kyle@grafana.com>
* Adds video embed for the Understanding Dashboards youtube video
* Moved video to Use dashboards page
---------
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
* preview of work so far
* stylistic improvements
* fix linters
* remove golden tests, they may cause the system to be too rigid to changes
* remove unnecessary code for golden tests
* remove white space mangling in Execute
* also handle output data, improve API, examples and docs
* add helper methods
* fix interface
* Tempo: Escape backslash in span name for promsql query
In promsql, backslashes in regexes must be doubly escaped for them to be
interpreted as a literal backslash character.
Fixes#79791
* Fix regex replace
---------
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
* WIP
* add configure irm componet and pass it to Nav
* add check if theres datasource for Alerts
* update incident steps links
* uncomment done property in the interface
* Fix not having data sources in store and removing warning using wrong Icon name type
* call incidents api in done step
* Show checked steps with an icon instead of a badge
* Implemnt check contact point ready in essentials
* Fix codeowners and prettify file
* Check if there is one oncall integration in at least one contact point
* Refactor
* Check for oncall integration being created
* Add the test oncall integration action
* Do not hide any card in irm page, and refactor
* Refactor: move hooks to a separate file
* Implement oncall chatops checks
* update incidents hook
* Show new irm page only on cloud and for admins
* fix prettier in irmhooks
* remove unused import
* fix prettier in irm hooks
* fix axios method
* Add progress bar on essentials
* Update texts and some styles
* Refactor
* fix api call
* fix check is plugin is installed
* fix async call
* fix lint
* Do not show check icon when done field is undefined in a step
* refactor
* Add test for Essentials
* check if incident plugin installed
* call incidents api to get steps
* add the new api to get config
* fix prettier
* memoize the api call
* fix lint
* add proper api call
* check if response is valid
* fix typo
* use state to save the values
* fix lint
* fix response schema
* fix prettier
* update incident steps copy
* udapte texts in respond tooltips
* Fix confiure IRM route check
* Fix logic for the data source check: check if there is a data source that is alerting compatible
* Use existing header prop in NavLandingPage instead of creating a new prop
* fix wrong updated file
* Update logic for default contact point check and update some links
* Update texts and show only one item for oncall integration with alerting checks
* Update texts following suggestions in the doc
* Fix getting default contact point and update oncall link for slack tab
* Update texts, buttons and checks following last meeting action items
* remove unnecessary component drawer
* Track interactions: user open or close essentials drawer
* Refactor
* remove unnecessary createMonitoringLogger for tracking irm events
* remove unnecessary style
* refactor
* refactor
* Add fallback links and labels for action buttons when step is done
* Update irm card styles
* remove extra space after progress bar numbers
* remove progress bar border
* Address pr review comments
* remove unnecessary AlertmanagerProvider
* fix logic behind default contact point check
* update test
* Address pr review comments part1
* add aria and properties role for Progressbar
* Reorganize hooks into separate folders/files for each app
* move done field to the step level
* Handle empty dropdown options
* Handle loading state
* Update tooltip for connecting alerting to oncall
* Use RTKQ for incidents
* handle loading for oncall hooks
* refactor getting configuration for each app
* fix incident rtkq query to be a query instead of mutation
* refactor: rename variable
* Address some nits in the review
---------
Co-authored-by: reemtariqq <reem.tariq@grafana.com>
* Add feature toggles for mode 2 and 3 playlist dual writing
* Make current mode customised based on kind
* Check feature flags when initialising dual writer
* Fix linting
* Refactor NewDualWriter
* Create basic feature toggle
* Rename context to reflect it contains query history and query library
* Update icons and variants
* Rename hooks
* Update tests
* Fix mock
* Add tracking
* Turn button into a toggle
* Make dropdown active as well
This is required to have better UI and an indication of selected state in split view
* Update Query Library icon
This is to make it consistent with the toolbar button
* Hide query history button when query library is available
This is to avoid confusing UX with 2 button triggering the drawer but with slightly different behavior
* Make the drawer bigger for query library
To avoid confusion for current users and test it internally a bit more it's behind a feature toggle. Bigger drawer may obstruct the view and add more friction in the UX.
* Fix tests
The test was failing because queryLibraryAvailable was set to true for tests. This change makes it more explicit what use case is being tested
* Remove active state underline from the dropdown
* Add basic types and api methods
This is just moved from the app. To be cleaned up and refactored later.
* Move API utils from Query Library app to Grafana packages
* Move API utils from Query Library app to Grafana packages
* Move API utils from Query Library app to Grafana packages
* Add basic table for query templates
* Add sorting
* Style cells
* Style table cells
* Allow closing Query Library drawer from the toolbar
* Remove Private Query toggle
It will be moved to the kebab
* Add empty state
* Remove variables detection for now
Just to simplify the PR, it's not needed for Explore yet.
* Simplify getting useDatasource.tsx
* Rename cell
* Move QueryTemplatesTable to a separate folder
* Use RTK Query to get list of query templates
* Clean up query templates table
* Simplify useDatasource hook
* Add a test
* Retrigger the build
* Remove unused code
* Small clean up
* Update import
* Add reduxjs/toolkit as a peer dependecy
* Revert "Add reduxjs/toolkit as a peer dependecy"
This reverts commit aa9da6e442.
* Update import
* Add reduxjs/toolkit as a peer dependecy
* Revert "Add reduxjs/toolkit as a peer dependecy"
This reverts commit 2e68a62ab6.
* Add @reduxjs/toolkit as peer dependency
* Add @reduxjs/toolkit as peer dependecy
* Move reactjs/toolkit to dev dependecies
* Minor clean up and use react-redux as a peer dependency
* Move query library code to core features
* Update code owners
* Update export
* Update exports
* Use Redux store instead of APIProvider
* Await for query templates to show during the test
* Add more explicit docs that the feature is experimental
---------
Co-authored-by: Kristina Durivage <kristina.durivage@grafana.com>
* Fix deleting rules when silencing/resuming rule from a panel alert tab
* fix test and return early when no group target is found
* address pr review comment
* Updated headings and to align with release life cycle stages and adding release info
* Update generated files
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Updated g11-preview pags for g11 release
* Added items to breaking changes guide
* Added and updated What's new content from latest Cloud file
* Updated link text
* Removed Azure Monitor item
* registers sql metrics for unified storage and removes single quotes from postgres connection string format
* uses db logger
* only register US sql metrics when connecting to another postgres or mysql db
* use engine
* GenAI: Fixes multiple calls to settings and health
* swap order of tests given new caching
---------
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
* wip
* aand finished
* remove console log
* use css for styling
* user boerder for solid as well
* misc fixes
* attempt css based approach
---------
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
* improve typings in opentsdb datasource
* couple of influx improvements
* couple more
* more
* more more more
* 3 more
* changes to variables/inspect/utils
* some graphite improvements
* Remove unneeded error check
* Refactor to reduce cyclomatic complexity
* Add util function for parsing resultformat
* Make use of util
* Remove unneeded types
* Move types to their own file
* Move getApiUrl to utils
* Move traces functions to separate file
- Add separate helper for building trace string queries
* Add helper for determining resources
* Add test for RetrieveResources
* Don't append twice
* Refactor tests
* Make GrpahNG focusable
* Move to VizLayout instead
* Update uPlot plugins for better keyboard support
* Remove unrelated changes
* different fix
---------
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
* [explore] lookup datasource by name when present in legacy compact URLs
* update unit test
* prettier fix
---------
Co-authored-by: Kristina Durivage <kristina.durivage@grafana.com>
* Reduce number of request fetching rules in the dashboard view using rtkq
* Fix UnifiedAlertStatesWorker work
* refactor ungroupRulesByFileName
* Address review comments and fix test
* fix DashboardQueryRunner test
* Fix tests
* Update AlertStatesDataLayer to use RTKQ
* Fix PanelAlertTabContent test
* Fix PanelAlertTabContent test after adding RTKQ
* fix test and address PR review comments
* Update useCombinedRuleNamespaces to have both dashboardUID and panelId as optional params and rename the hook
* Address review pr comment
* remove test about template variables
* Use poll interval in useCombinedRules
* set selected config type before save
* use effect once and move in mssql
* add to prom
* Update ConfigurationEditor.tsx
* Update ConfigurationEditor.tsx
* Delete public/app/plugins/datasource/mssql/configuration/ConfigurationEditor.tsx
* omadsfdsa
* remove unneeded assign
* Create recording rule fields in model
* Add migration
* Write to database, support in version table
* extend fingerprint
* Force fields to be empty on validate
* Another storage spot, tests for fingerprint
* Explicitly set defaults in provisioning API
* Tests for main API validation
* Add diff tests even though fields are unpopulated for now
* Use struct tag approach instead of FromDB/ToDB hooks as it better handles nulls when deserializing
* test for deser
* Backout RecordTo for now since it's not decided in the doc
* back out of migration too
* Drop datasourceref for now
* address linter complaints
* Try a single outer struct with all fields embedded
* MixedDataSource: Support multi value data source variable
* go work sync
* fix typo
* if it is not interpolated use the actual uid
* Update tests
* prettier
* go work sync
* add more unit test case
* Update tests to use scene variables
* merge main
* Update
---------
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* add action set resolver
* rename variables
* some fixes and some tests
* more tests
* more tests, and put action set storing behind a feature toggle
* undo change from cfg to feature mgmt - will cover it in a separate PR due to the amount of test changes
* fix dependency cycle, update some tests
* add one more test
* fix for feature toggle check not being set on test configs
* linting fixes
* check that action set name can be split nicely
* clean up tests by turning GetActionSetNames into a function
* undo accidental change
* test fix
* more test fixes
* Chore: Migrate to use buf for protobuf generation
* fix codeowners
* fixes after review
* docs/tooling for installing buf
* add back codeowners
* Update upgrading-dependencies.md
Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>
* sdk v0.229.0
---------
Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>
* I18n: Change verify-i18n script to use node_deb image with make in it
* remove swagger from i18n make
* make verify-i18n fail ci
* fix incorrect and unextracted nav translations
* fix more copy paste
* wip filtering
* Remove corresponding children from parentlessItem ref on register
* wip filtering
* Remove corresponding children from parentlessItem ref on register
* Highlighting filters
* OMG
* Handle updating highlight field inside context
* Toggling legend from the content outline
* Support multiple selects for log filters in content outline
* Remove commented out code
* Fix an issue with loki datasource; use same datastructure for logsVolume in Logs and LogVolume panel
* Fix registering logic
* cleanup
* Don't register outline items when having multiple log volume levels
* Remove checking mergeSingleChild logic because in context because ContentOutline does it
* Fix logic so it works for elasticsearch
* Better logic
* Add log color and sort
* Show items at full opacity
* Remove commented sort
* Do not highlight if all are selected, and highlight = 100% opacity, active = 30%
* dont auto collapse after filter unselect
* Remove console logs
* No partial opacity, add height for consistent display
---------
Co-authored-by: Piotr Jamroz <pm.jamroz@gmail.com>
Co-authored-by: Kristina Durivage <kristina.durivage@grafana.com>
* Remove different constructors and only use NewNamespaceID
* AdminUser: check typed namespace id
* Identity: Add convinient function to parse valid user id when type is either user or service account
* Annotations: Use typed namespace id instead
* update plugin install filter to show all by default
* make pretty
* remove aria-label on lock icon
* wip: attempt to fix overflow
* switch to stack, add aria label back for testing
* make pretty
* switch to TextLink
* remove learn more link from catalog
* add hover text
* docs: update plugin install to reflect state filter change
* Revert "docs: update plugin install to reflect state filter change"
This reverts commit 16222aee0b.
* Choose mode. Add log field on top level dualwriter
* Add logs
* Turn DualWriter into a full interface. Fix tests
* Lint
* Use struct for dualWriter interface
* Use struct
* Default should be legacyStore for all entities
* Fix test. Get rid of extra concrete type
* Remove comment
* Add comment
* Temp set dualwriter mode 2 for playlists while configs are not in place
* Add modes type + add comment on what each mode does
* Don't require watcher interface for now
* Use storage implementation on mode 2
* Update pkg/apiserver/rest/dualwriter_mode2.go
Co-authored-by: Todd Treece <360020+toddtreece@users.noreply.github.com>
* Pass log values to the context
* test
* Update pkg/apiserver/rest/dualwriter_mode3.go
Co-authored-by: Dan Cech <dcech@grafana.com>
---------
Co-authored-by: Todd Treece <360020+toddtreece@users.noreply.github.com>
Co-authored-by: Dan Cech <dcech@grafana.com>
* clean up error handling in postDashboard and remove UserDisplayDTO
* replace GetUserUID with GetUID and GetNamespacedUID, enforce namespace constant type
* lint fix
* lint fix
* more lint fixes
* Only let nodeGraph frames process through nodeGraph
* add metadata to test frames to be processed
* Revert "add metadata to test frames to be processed"
This reverts commit fc366a0ab4.
* Revert "Only let nodeGraph frames process through nodeGraph"
This reverts commit b8be50e219.
* Only send node graph frames to node graph logic
* remove unnecessary logic
* Loki: Add label values API selector to setting and use label_values API when selected
* remove CHANGELOG change
* add docs
* Support Loki 2.7+ only, so unconditionally use /labels API
* Correct doc for fetchLabels and fetchLabelValues functions
* Fixes after merge
* Do not encode query parameter twice
* return getLabelKeys in Completion Provider
* docs
* Add test for LabelParamEditor
* Update public/app/plugins/datasource/loki/LogContextProvider.test.ts
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* toHaveBeenCalledWith
---------
Co-authored-by: Matias Chomicki <matyax@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* added admonition and API info
* Update docs/sources/administration/roles-and-permissions/access-control/_index.md
---------
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Add OrgRoleMapper
* Address feedback, add more tests
* Prevent resetting assignments when global org mapping fails
* Provide a parsing function instead of recalculating the org_mapping on every mapping
* Introduce strict role parsing/mapping
* Introduce MappingConfiguration
* Handle other edge case
* Add tests
* lint
* Apply documentation update suggestions
* Apply GetDefaultOrgMapping suggestions from code review
* Apply suggestions for cleaning up unnecessary err in ParseOrgMappingSettings
* Apply suggestions from code review
* Address feedback suggestions
* Cleanup
* Reduce cognitive complexity of ParseOrgMappingSettings
---------
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
* Get custom cloud list from grafana-azure-sdk-go for frontend settings
* Remove getAzureClouds() and call CustomClouds() directly
* remove unused type
* fix: reloaded scene first step topScene
The top scene was not being initialized
when reloading trails, causing it to use
the top scene of whatever was selected
previously.
* fix: select new metric node not reloading right
On reloading trails, any metric node that
was 'green' with a undefined metric due to
clicking on the "select new metric" button,
was reloading with the metric of the step
directly before it (in index order).
* fix: opt-in to `useQueriesAsFilterForOptions`
With updating the scenes library, dashboards must now explicitly
opt in to `useQueriesAsFilterForOptions`.
* fix: loaded trails modified parent var on new step
This ensures that recently loaded trails won't have variable changes
which create new steps modify the previous step.
* Update Yarn to v4.2.1
* add new yarn version
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
Storage Server: avoid incorrect parsing of connection string
In storage server, a connection string is generated to connect to the
backing database. In case of Postgres, we were generating the string
like `"user=grafana pass= host=postgres.example port=4567"`.
This triggered an edge case in `pq` (the go postgres driver) to parse
`pass` to be equal to `host=postgres.example`, and host being reset to
default value.
Using single quotes in the connection string fixed this.
Signed-off-by: Prem Kumar <prem.saraswat@grafana.com>
Add reqAction to Prometheus routes
This should allow provisioned service accounts that do not have a role to use the /proxy endpoints for Prometheus. This
is desired for some integrations that need to query for labels or other data not part of /ds/query.
* Alerting: Implement GetStatus in the remote Alertmanager struct
* update tests
* fix tests, extract AlertmanagerConfig from PostableConfig
* get the remote AM config instead of the Grafana one from the remote AM
* pass grafana AM config in test
* return error in GetStatus instead of logging it (internal AM)
Fix link to values.yaml file
Linking to the "edit" URL fails if the reader doesn't have write access
to the repo: they'll be prompted to fork the repo or to sign in to
GitHub. Instead link to the "blob" URL which is accessible to all
readers.
* Add auth checks and test
* Check user is authorized to view rule and add tests
* Change naming
* Update Swagger params
* Update auth test and swagger gen
* Update swagger gen
* Change response to GettableExtendedRuleNode
* openapi3-gen
* Update tests with refactors models pkg
* Fix mode 2 List test
* Set origin timestamp during conversion to k8s resource
* Add instructions for updating a playlist
* Handle partial deletions of a collection in mode 2
* Create basic structure PanelDataQueriesTab unit test
* Add more test cases to the PanelDataQueriesTab test
* Update public/app/features/dashboard-scene/panel-edit/VizPanelManager.tsx
* fix(plugins): fetch strategy should always be used for css/json/wasm/html
* refactor(plugins): prefer checking for js file type rather than list of other file types
* moving folders to slog
* trying to fix the tests
* fix per-logger filters in slog
* allow using slog.Default()
* bring cfg back to keep the pr small
* fix tests
* back to the roots
* Added field overrides shared file
* Added link to overrides file in visualizations pages
* ihm/010524-field-override-shared-content/ run lint
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* Added data link options shared file and added file to relevant visualizations
* Updated some text and links in canvas
* Added shared file to xy chart
* Fixed list of visualizations using shared file
* Removed unneeded level offset
* Removed future tense
* Update data links description
* Updated wording
* Removed redundant sentence
* - Added migration to add a new collumn UID to both migration and migration_run tables.
- Added migration to set UID for records already existent in the database before adding a new column.
- Added UID field to CloudMigration and CloudMigrationRun dtos (model.go)
* Fix db migration
* Updating store and model
* Updating API to use UID
* fix typo
* update openapi specs and generated endpoints
* fix spec
* update openapi specs and generated endpoints
* Fixing db mapping
* Fix frontend
* fix migration
* remove migration uid from run fetch endpoint
* Revert "merge"
This reverts commit d654e4c530, reversing
changes made to 5fe0b483eb.
* manual merge
* rename some funcs for consistency
* make interfaces consistent
* validate uids
* update generated frontend api
* fix enterprise spec
* manually resolve api
* try again
* try yet again
* once more
---------
Co-authored-by: Josh Hunt <joshhunt@users.noreply.github.com>
Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
Co-authored-by: joshhunt <josh@trtr.co>
* Add origin keys to List request
* Check origin keys requirement in the sql entity server's List method
* Refactor mode 2 List
* Check origin keys before making Storage List call
---------
Co-authored-by: Dan Cech <dcech@grafana.com>
* Updated shared file name and added missing options
* Added legend options 1 shared file to relevant visualizations
* Updated shared file name and corrected options
* Added legend options 2 shared file to relevant visualizations
* Updated legend content for heatmap and pie chart
* Added where shared legend files are used in each file
* Moved intro text out of viz pages into legend options shared files
* Added reasoning to front matter of shared files
* Added reasoning to front matter of shared files
* Fixed version interpolation and added cloud links
* Updated links in shared files
* CloudWatch: Fix metric query with group by not being labelled in alerts
* just use one key for the labels
* not needed
* unused function
* add tests
* pr comments
* fetch dimensions to build labels for MetricQuery type queries
* pr comments
* group cache related tests and use fresh cache for non-cache related tests
* don't cache empty values
* Add mock method for getting a plugin
* Update tests to find "more" button via label
* Remove test for Silence action in rule details
* Unify alert rule actions to pull from same place
* Restore behaviour of only showing incident button when firing
* Fix identifier and pause permission/logic
* Remove TODO comment related to refactor
* Update snapshot for useAbilities
* Undo optional param
* Rename alert rule menu hook to component
* Refactor hook to component
* Rename Rule action buttons component
* Chore: update style syntax for RuleDetails
* Add tests for refactored alert rule menu
* Only re-fetch Grafana managed alerts after pausing/resuming
* Remove console log and check for extensions
* Improve share rule generation of GMA rules
* Rename component
* Update action
* Refactor plugins and fix tests
* lint
---------
Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com>
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
* Canvas: Connection original persistence check
* modify current connection state directly instead of copying and needing to call "onChange"
---------
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
This is not ideal! Preference would be to have a more robust mock server
that responds to the received silence and appends it to a stateful list for the test
and then resets afterwards
* Add failing tests for timezone handling
* Fix `DateTimePicker.tsx` timezone handling
- Resolves `onBlur` issue
- Resolve Calendar and TimeOfDay issues
- Update test to cover different timezone
* Handle `console.warn` in test
* Handle `console.warn` in test #2
* Better handling of invalid date
When parsing date string with `dateTime`, adding a second `formatInput` aids in both parsing the actual string and avoid `console.warn` when `moment` reverts to be using `Date`.
* add more test cases
* Ash/proposed changes (#86854)
* simplify
* only need this change
* formatting
* const > let
* add test to ensure calendar is always showing the matching day
* separate state
* undo story changes
* update util function comments
* fix for selecting date in the calendar
---------
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* Added value mappings shared file
* Fixed name of file
* Fixed list of visualizations using shared file
* Added shared file to visualizations
* Updated shared file and added to canvas
* Updated shared file intro text
* Removed future tense
TemplateSrv.replace takes an optional 'interpolations' argument which
records information about the variables which were found during the
interpolation. Until [this Scenes PR][scenes PR] this wasn't supported
by Scenes so the interpolations argument was being ignored if dashboard
scenes were enabled. This commit bumps the scenes version and passes
the interpolations array along to the scenes function.
[scenes PR]: https://github.com/grafana/scenes/pull/708
* fix: persistence trail detection, save on unload
- fixes detection on bookmarks and recents when current step isn't final
- now save current trail on browser close or reload (unload)
- refresh page or return to URL that corresponds to a recent trail will
resume that trail instead of creating a duplicate recent trail
- do not create a recent trail out of an empty starting trail
* fix: bookmarks status after making new step
- clone bookmark trail state to prevent it from being changed by user
- re-evaluate bookmark status after creating new step
* docs: toc and reference to provisioning
* Update docs/sources/administration/roles-and-permissions/access-control/manage-rbac-roles/index.md
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
---------
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Move alertmanager api silence code to separate files unchanged
* Replace with silence model instead interface
---------
Co-authored-by: Matt Jacobson <matthew.jacobson@grafana.com>
* Chore: Upgrade/fix deps after thema removal
* github.com/deepmap/oapi-codegen v1.14.0
* github.com/deepmap/oapi-codegen v1.15.0
* github.com/deepmap/oapi-codegen v1.16.0
* fix for dep used in enterprise
* github.com/deepmap/oapi-codegen/v2 v2.0.0
* oapi-codegen/v2 v2.1.0, kin-openapi v0.122.0, sdk
* keep kin-openapi at v0.122.0 and allow SDK to use v0.124.0
* remove github.com/deepmap/oapi-codegen v1 dep
* fix owner
* add back github.com/deepmap/oapi-codegen v1 dep
* upgrade github.com/influxdata/influxdb-client-go/v2 to get rid of deepmap/oapi-codegen
* migrate to oapi-codegen/runtime
* sdk
* sdk v0.227.0
* Alerting: Improve error when receiver used by rule is deleted
* Remove RuleUID from public error and data
* Improve fallback error in am config post
* Refactor to expand to time intervals
* Fix message on unchecked errors to be same as before
* [WIP]: Force lowercase login/email for user CRUD
* warn and remove use of userCaseInsensitiveLogin check
* remove log warning
* reimplementation of the caseinsensitive
* need to decide if we want the conflict check or not
* remvoved the tests for conflict user by getEmail, getLogin
* added tests for user lowercase migration
* wip: emails next
* tests for email lowercasing
* review comments
* optimized login and email lookup before migrating
* Use RoleType from org package
* Move to identity package and re-export from authn
* Replace usage of top level functions for identity
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
* Replaced shared tooltips file with text in xy chart
* Added tooltip info for heatmap
* Updated tooltip shared files, renamed one file, updated configure tooltips
* updated tooltip shared file paths
* Added tooltips shared files in relevant visualizations
* Added where shared file is used in tooltip-options-1
* Added where shared file is used in tooltip-options-2
* Added intro text and justifications to shared files
* Removed tooltips intro text from visualizations with shared files
* Added names of files to comments in shared files
* fix: interpolate "explore metrics" from panels
---------
Co-authored-by: Darren Janeczek <darren.janeczek@grafana.com>
* fix: remove support for legacy dashboard
- simplify code
- take advantage of scenes dashboard async and datasource api object
---------
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* DataTrails: Exploring alternatives to history issues
* incorporated unit tests from #86817 and #86741
---------
Co-authored-by: Darren Janeczek <darren.janeczek@grafana.com>
* Dashboards: Migrate from aria-label e2e selectors to data-testid
* more changes
* addPanelwidget
* Test: Update .betterer.results
* refactor: fix e2e tests
* refactor: fix failing test
* refactor: update plugin-e2e after adding selector changes to the packege
---------
Co-authored-by: Laura Benz <48948963+L-M-K-B@users.noreply.github.com>
Co-authored-by: Laura Benz <laura.benz@grafana.com>
* feat(plugins): introduce logic to selectively load fe plugins via script tags
* feat(plugins): extend cache to store isAngular flag. use isAngular in shouldFetch
* revert(plugins): remove unused prepareImport from SystemJSWithLoaderHooks type
* fix(plugins): cache[path] maybe undefined if not registered or invalidated
* Update public/app/features/plugins/plugin_loader.ts
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
---------
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
* measure scene load time
* Fix tests that fail due to performance not being the proper global performance object in jest
* add isScene parameter to tracking test
* make cfg private in sqlstore
* fix db init in tests
* fix case
* fix folder test init
* fix imports
* make another Cfg private
* remove another Cfg
* remove unused variable
* use store cfg, it has side-effects
* fix mutated cfg in tests
* Create basic feature toggle
* Rename context to reflect it contains query history and query library
* Update icons and variants
* Rename hooks
* Update tests
* Fix mock
* Add tracking
* Turn button into a toggle
* Make dropdown active as well
This is required to have better UI and an indication of selected state in split view
* Update Query Library icon
This is to make it consistent with the toolbar button
* Hide query history button when query library is available
This is to avoid confusing UX with 2 button triggering the drawer but with slightly different behavior
* Make the drawer bigger for query library
To avoid confusion for current users and test it internally a bit more it's behind a feature toggle. Bigger drawer may obstruct the view and add more friction in the UX.
* Fix tests
The test was failing because queryLibraryAvailable was set to true for tests. This change makes it more explicit what use case is being tested
* Remove active state underline from the dropdown
* Allow closing Query Library drawer from the toolbar
* Simplify dropdown design
* feat: add a reactive extension registry
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: add hooks to work with the reactive registry
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: start using the reactive registry
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "command palette" extension point to use the hook
* feat: update the "alerting" extension point to use the hooks
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "explore" extension point to use the hooks
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "datasources config" extension point to use the hooks
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "panel menu" extension point to use the hooks
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "pyroscope datasource" extension point to use the hooks
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* feat: update the "user profile page" extension point to use the hooks
* chore: update betterer
* fix: update the hooks to not re-render unnecessarily
* chore: remove the old `createPluginExtensionRegistry` impementation
* chore: add "TODO" for `PanelMenuBehaviour` extension point
* feat: update the return value of the hooks to contain a `{ isLoading }` param
* tests: add more tests for the usePluginExtensions() hook
* fix: exclude the cloud-home-app from being non-awaited
* refactor: use uuidv4() for random ID generation (for the registry object)
* fix: linting issue
* feat: use the hooks for the new alerting extension point
* feat: use `useMemo()` for `AlertInstanceAction` extension point context
---------
Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
* Fix issue
* Prettier
* codeincarnate/image-table-fix/ lint
* Make linter happy by using div with role of button + improve a11y
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
* Alerting: Implement SaveAndApplyConfiguration in the forked Alertmanager struct
* call SaveAndApplyConfig on the remote first, log errors for the internal
* add comments explaining why we ignore errors in the internal AM
* restore go.work.sum
This splits the request handlers into two functions, one which is the actual
handler and one which is independent from the Grafana `ReqContext` object. This
is to make it easier to reuse the implementation in other code.
Part of the refactoring changes the functions which get query parameters from
the request to operate on a `url.Values` instead of the request object.
The change also makes the code consistently use `req.Form` instead of a
combination of `req.URL.Query()` and `req.Form`, though I have left
`api_ruler` as-is to avoid this PR growing too large.
* Show list of labels on the alert rule form in a more visual way, and use a modal for managing them
* fix test
* Fix more tests
* Show orange badge when no labels are selected
* Remove unused datasource property in LabelsField
* Remove unused div and add comment
* Use button instead of icon for editing labels
* Use subform for labels
* Move logic fetching labels from different places in a separate hook
* Fix tests
* remove unused getLabelInput const in test
* Add ellispis and tooltip for long labels and move labels list in modal to the bottom
* Use text instead of badge when no using labels
* Fix tests after adding ellipsis and tooltip to the labels
* simplify styles
* Fix fetching values from gops when new key is used
* Address pr review comments
* Address pr review comments part2
* Fix tag on rtkq
* Remove color for no labels selected text
* Disable already used keys in the labels sub form
* Fix typo
* use the UseFieldArrayRemove type from react-hook-form
* Update some styles and text in the labels modal
* Address some review comments (nits)
* Address review comments part1
* Move logic getting labels in useCombinedLabels hook
---------
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
* implement SaveAndApplyConfig in the remote Alertmanager struct
* remove ID from CreateGrafanaAlertmanagerConfig call
* decrypt, test that we decrypt, refactor
* fix duplicated declaration in test
* rephrase comment, remove unnecessary conversion to slice of bytes
* fix test
* Alerting: Implement SaveAndApplyDefaultConfig in the forked Alertmanager (remote primary)
* log the error for the internal AM instead of returning it
* FE Sandbox: Fix worker post message not handling proxy objects correctly
* use expect error instead of ignore
* use assertion instead of ignore
* Fix formatting
* Render current MegaMenu link as `aria-current=page`
* Add overrides capability for mega menu links
* Pass pageNav into getActiveItem so we can use override capability
* Test MegaMenu special cases for starred & dashboards
* Test that overrides for megamenu util works correctly
* Alpha-sort megamenu overrides
* Refactor util for getting active item for megamenu
Update parameters to getActiveItem
Update tests for getActiveItem
* Fix test for starred dashboard and remove query param test
Query param case happens differently in real app and is fiddly to test here
* handle edge cases
* restore handling home page test
* fix dashboard settings
* handle starring properly
---------
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* Add timezone selector to Storybook toolbar
So that it's possible to preview how components that are using date functions, behave when timezone differs from browser/client.
* Re-order imports
* apply empty state in a bunch of places
* fix unit tests
* put alert back on top
* add data-testids so e2e tests keep working
* remove info boxes
* fix annotations empty state alignment with new maxWidth
* Add setting for changing shortlink expiration time
* Add docs, add better language
* put all the numbers in the duration 🤷
* 🙄
* update language to be correct and clear
* Add max limit and more documentation
This test has been skipped for a long time, so it doesn't work anymore. I've
fixed the test so it works again, but left some tests disabled which were
apparently flaky. If we see the other test cases flaking, we'll have to
disable it again.
Fixes:
- Use fake access control for most test cases, and real one for FGAC test cases.
- Check that "file" in API responses the full folder path, not folder title.
Currently the grafana cli plugin commands are not reacting to the --config parameter. This PR make it possible to use config to define the plugin endpoints via config as an alternative to providing the --repo flag.
* Simplify proxy dialer creation
- Set new dialer on connector
- Create MSSQL connector in a similar fashion to postgres
* Update test
* Fix lint
* More lint
* Use correct driver name
* Alerting: Consistently return Prometheus-style responses from rules APIs.
This commit is part refactor and part fix. The /rules API occasionally returns
error responses which are inconsistent with other error responses. This fixes
that, and adds a function to map from Prometheus error type and HTTP code.
* Fix integration tests
* Linter happiness
* Make linter more happy
* Fix up one more place returning non-Prometheus responses
* Alerting: Implement SaveAndApplyDefaultConfig in the remote Alertmanager struct
* send the hash of the encrypted configuration
* tests, default config hash in AM struct
* add missing default config to test
* restore build directory
* go work file...
* fix broken test
* remove unnecessary conversion to []byte
* go work again...
* make things work again with latest main branch changes
* update error messages in tests for decrypting config
Preparing these functions to be used by some other part of the codebase,
which does not have a `contextmodel.ReqContext`, only the normal request
structure (`url.Values`, etc). This is slightly messy because of how
Grafana allows url parameters to be in the URL or in the request body,
so we need to make sure to invoke the form parsing logic in `ReqContext`.
* Update @lezer/lr to v1.4.0
* Update @prometheus-io/lezer-promql to v0.37.0
* Update @prometheus-io/lezer-promql to v0.38.0
* Update @prometheus-io/lezer-promql to v0.39.0
* Update @prometheus-io/lezer-promql to v0.40.0
* add jest config
* update code
* fix code to pass "handles things" test
* fix retrieving labels
* fix code to pass "handles label values" test
* fix code to pass "simple binary comparison" test
* use BoolModifier
* add changed lines as comments
* fix for ambiguous query parsing tests
* resolve rebase conflict
* fix retrieving labels, aggregation with/out labels
* add error
* fix comment
* fix "reports error on parenthesis" unit test
* fix for "handles binary operation with vector matchers" test
* fix for "handles multiple binary scalar operations" test
* fix for "parses query without metric" test
* fix indentation and import style
* remove commented lines
* add todo items and comments
* remove dependency update from tempo datasource
* apply same changes in core prometheus frontend
* prettier
* add new test case
* use old version of lezer in the root package.json
* Revert "apply same changes in core prometheus frontend"
This reverts commit 83fd6ac7
* fix indentation
* use latest version of lezer-promql v0.51.2
* Update packages/grafana-prometheus/src/querybuilder/parsing.ts
Co-authored-by: Nick Richmond <5732000+NWRichmond@users.noreply.github.com>
* enable native histogram test
---------
Co-authored-by: Nick Richmond <5732000+NWRichmond@users.noreply.github.com>
* Alerting: Optimize rule status gathering APIs when a limit is applied.
The frontend very commonly calls the `/rules` API with `limit_alerts=16`. When
there are a very large number of alert instances present, this API is quite
slow to respond, and profiling suggests that a big part of the problem is
sorting the alerts by importance, in order to select the first 16.
This changes the application of the limit to use a more efficient heap-based
top-k algorithm. This maintains a slice of only the highest ranked items whilst
iterating the full set of alert instances, which substantially reduces the
number of comparisons needed. This is particularly effective, as the
`AlertsByImportance` comparison is quite complex.
I've included a benchmark to compare the new TopK function to the existing
Sort/limit strategy. It shows that for small limits, the new approach is
much faster, especially at high numbers of alerts, e.g.
100K alerts / limit 16: 1.91s vs 0.02s (-99%)
For situations where there is no effective limit, sorting is marginally faster,
therefore in the API implementation, if there is either a) no limit or b) no
effective limit, then we just sort the alerts as before. There is also a space
overhead using a heap which would matter for large limits.
* Remove commented test cases
* Make linter happy
* Alerting: Fix simplified routing custom group by override
Custom group by overrides for simplified routing were missing required fields
GroupBy and GroupByAll normally set during upstream Route validation.
This fix ensures those missing fields are applied to the generated routes.
* Inline GroupBy and GroupByAll initialization instead of normalize after
* Alerting docs: RBAC for enterprise and cloud
* rbac structure
* ran prettier
* updates to data source permissions
* adds tables for roles
* ran prettier
* adds examples for custom role
* ran prettier
* updates table
* typo fix
* ran prettier
* I18n: Support for Enterprise translations
* don't attempt to link to enterprise in tests
* move extract script to makefile to optionally support enterprise
* update references to old extract script
* update docs
* thank god for unit tests
* Update index.md on GeoMaps adding YouTube Video
Added the GeoMap YouTube video to the documentation
* Update docs/sources/panels-visualizations/visualizations/geomap/index.md
Totally agree, I tend to use those words and not realize :P
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* LogLabels: create specialized component for arrays of labels
* Logs: sort displayed fields when assigning to state
* LogsMetaRow: fix types and use specialized components
* LogLabels: show label and value
* LogsPanel: update common labels
* LogsMetaRow: use LogsLabelsList
* Update unit tests
* Formatting
* Update betterer
* Prettier
* Logs panel: update test
* LogLabels: add actual tooltip
* Logs: remove sorting of displayed fields
* Remove helper properties from the AM config object
* Make the omitTemporaryIdentifiers a pure function
* Add formValuesToCloudReceiver test
* Remove immer produce to prevent object freezing
* move run migration to the cloudmigrationimpl layer
* add migration run list logic down a layer
* remove useless comments
* pull cms calls into their own service
* Canvas: Fix division by zero
* Fix last add vertex control
* Apply fix to existing vertices
* Apply deltas to temporary paths
* Persist original source and target coorindates
* Add follow up TODO
* Update connection svg to handle originals
* Get rid of minimum constraints for deltas
* Apply persist coordinate system to vertex handlers
* Consolidate and rename selected value
* Update connection arcs to use new coordinates
* fix editor crashing with scenes
---------
Co-authored-by: Adela Almasan <adela.almasan@grafana.com>
* Add section and use Text component to get h2 for panel
* Remove heading when collapsible
* Make button text truncate
* Update test
* Remove labelledby as it is not needed anymore
* Use testid selectors in test
* Remove async
* Add update methods for the dual writer
* improve errors
* [WIP] add tests for the update method
* Move example package to its own package so it can be used by the rest package. Finish tests
* Add codeowners
* Use Pod as a dummy resource
* :int
* Lint
* [REVIEW] rename var
* [REVIEW] don't rely on legacy storage at all in mode4
* Update pkg/apiserver/rest/dualwriter_mode2.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* [REVIEW] improve comment
* Update pkg/apiserver/rest/dualwriter_mode1.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* [REVIEW] improve mode3
* Lint
* Move test files
* Update pkg/apiserver/rest/dualwriter_mode2.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* Lint
* Update pkg/apiserver/rest/dualwriter_mode4_test.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* Fix error
* Lint
* Update pkg/apiserver/rest/dualwriter_mode2.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* Don't set the flag to true as updatedObj creates an object in case it's not found
* Lint
* Lint
* Add tests on update
* Lint
---------
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
Co-authored-by: Dan Cech <dcech@grafana.com>
* IAM: fix many error messages in access-related code to provide more information
* Remove debug statement
* Refactor resourcepermissions package to use errutil
* Replace a few more errors with errutil and wrap errors found in users and teams services
* Apply diff of openAPI spec
* add default variant
* enhance story
* rename to "initial" + update docs
* default to showing a CTA
* use switch
* translations
* update and use LinkButton
* update default message
* rename "initial" to "nothing-here"
* update variant name to `call-to-action`
* i18n
* add CTA svg
* extract into its own component
sqlstore: improve recursive CTE support detection
Vitess returns a not supported error, not a parse error
Co-authored-by: Derek Perkins <derek@nozzle.io>
* WIP: add mocks for dual writer
* Test dualwriter mode1
* Re-add non implementation errors
* Use testify assert
* Write tests for mode2.
* Lint
* Remove comment
* Update pkg/apiserver/rest/dualwriter_mode2_test.go
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* [REVIEW improve readability and call fn legacy fn
* [REVIEW] rename mocks and setupFns
* [REVIEW add missing test case
* [REVIEW] add test case with getting object from storage and not legacy
* Add deleteCollection
* Test deleteCollection
* Rename file
---------
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
* Added landing page front structure
* Added description and overview content and card titles
* Added placeholder tile and work notes
* Finalized text and updated link type
* Updated panel overview tile link
* Alerting: Fix simplified routes '...' groupBy creating invalid routes
There were a few ways to go about this fix:
1. Modifying our copy of upstream validation to allow this
2. Modify our notification settings validation to prevent this
3. Normalize group by on save
4. Normalized group by on generate
Option 4. was chosen as the others have a mix of the following cons:
- Generated routes risk being incompatible with upstream/remote AM
- Awkward FE UX when using '...'
- Rule definition changing after save and potential pitfalls with TF
With option 4. generated routes stay compatible with external/remote AMs, FE
doesn't need to change as we allow mixed '...' and custom label groupBys, and
settings we save to db are the same ones requested.
In addition, it has the slight benefit of allowing us to hide the internal
implementation details of `alertname, grafana_folder` from the user in the
future, since we don't need to send them with every FE or TF request.
* Safer use of DefaultNotificationSettingsGroupBy
* Fix missed API tests
* only users with Grafana Admin role can grant/revoke Grafana Admin role
* check permissions to user amdin endpoints globally
* allow checking global permissions for service accounts
* use a middleware for checking whether the caller is Grafana Admin
* User: remove unused function
* User: Remove UpdatePermissions and support IsGrafanaAdmin flag in Update function instead
* User: Remove Disable function and use Update instead
* add history links for monaco completion provider folder
* add history links for monaco query field folder
* add history links for components folder
* add history links for configuration folder
* add history links for dashboard json folder
* add history links for gcopypaste folder
* add history link for variableMigration
* add history link for querybuilder/components/metrics-modal folder
* add history link for querybuilder/components/promqail folder
* add history links for querybuilder/components folder
* add history links for querybuilder/hooks folder
* add history links for querybuilder/shared folder
* add history links for querybuilder folder
* add history links for querycache folder
* add history links for src folder
* use frontend package and custom auth in module.ts
* remove files and fix import issues
* remove usePrometheusFrontendPackage
* remove extra files
* update betterer
* remove extra files after rebase
* fix betterer for rebase
* fix e2e flakiness
* add native histogram functions to code editor
* add native histogram function types for query builder
* add functions to query builder
* add test to show parsing breaks from code to builder
* add histogram_avg to code editor
* add histogram_avg to builder and make parity between package and core
* add functions to hard coded promql file for highlighting
* remove native histogram test so that it can be added in #85942
* remove functions from core prometheus js to prevent merge conflict in #86080
* use xit for test instead of removing it
* Added template from existing landing page
* Added dashboards content
* Fixed front matter
* Referenced existing icon to test
* Added test icon
* Edited text
* Fixed link formatting
* Finalized description and overview text
* Updated description'
* Updated tile text
* Updated docs/ref section
* Added panel overview page and updated panel editor page
* Finalized panel overview intro text and added links
* Added add panel section to overview and removed section from editor
* Fixed version interpolation syntax and updated Cloud link
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Fixed version interpolation syntax
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
---------
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Update dependency @types/react-calendar to v4
* remove @types/react-calendar since it's no longer used
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* install deps manually
* use ubuntu image
* regenerate drone file
* use node bookworm image
* get node major version from variable and wait for grafana server to be ready
* Add `Service. IsClientEnabled` and `Client.IsEnabled` functions
* Implement `IsEnabled` function for authn clients
* Implement `IsClientEnabled` function for authn services
* Change from h5 to Text component
* Fix goworksum error
* Add headings for contact points and notification policies
* Alert group h2
* Reset labels and move h2 to group by
---------
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
* copied files
* add copy of Pointer
* fix the API
* forward resample to the namespaced code
* moved the aligning-code to the parent
* call namespaced resample directly
* lint fix
* lint fix
* switch to plugin-sdk-go resample
* adjusted import path
* AuthN: Add NamespaceID struct. We should replace the usage of encoded namespaceID with this one
* AuthN: Add optional interface that clients can implement to be able to resolve identity for a namespace
* Authn: Implement IdentityResolverClient for api keys
* AuthN: use idenity resolvers
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
* added pkg/util/rinq package to handle queueing of notifications
* fix linters
* Fix typo in comment
Co-authored-by: Dan Cech <dcech@grafana.com>
* improve allocation strategy for Enqueue; remove unnecessary clearing of slice
* Update pkg/util/ringq/dyn_chan_bench_test.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* Update pkg/util/ringq/ringq.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* refactor to move stats and shrinking into Ring
* add missing error assertions in tests
* add missing error assertions in tests and linting issues
* simplify controller closed check
* improve encapsulation of internal state in Ring
* use (*Ring).Len for clarity instead of stats
---------
Co-authored-by: Dan Cech <dcech@grafana.com>
* Update index.md
* pie chart equivalent commit
* Updated titles to match dashboard title
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* Docs: add gague visualization Play link
* Fixed typo
* Updated title to match dashboard title
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* Update dependency @testing-library/dom to v10
* update @testing-library/react as well
* fix unit tests
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
Fixes so that auth middleware trace/span doesn't wrap the next handlers.
Allow tracing service name to be overridden in standalone apiserver.
Change k8s api tracing operation name to KubernetesAPI from
grafana-apiserver (which is the service name)
* Making versioncheck url rely on config instead of being hardcoded
* Update pkg/services/updatechecker/plugins.go
Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
* making the names a bit more generic and using url.url library
* fixing tests
* fixing linting
---------
Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
* Authn: Resolve authenticate by and auth id when fethcing signed in user
* Change logout client interface to only take Requester interface
* Session: Fetch external auth info when authenticating sessions
* Use authenticated by from identity
* Move call to get auth-info into session client and use GetAuthenticatedBy in various places
* fix some type assertions in loops
* some more cleanup
* some alerting fixes
* put comments in correct place to ignore rule
* couple more
* undo SilencesFilter changes
* Check source panel for updates in Dashboard DS panel
* Test
* made it better
* cleanup
* cleanup and tests
* fix failing tests
* find the correct dashboard query
* revert mixed check in dashboard behaviour
* Dashboard data source: Return error when used in mixed data source (#85765)
* MixedDS: Inform about dashboard ds not being supported
* lint fix
---------
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Alerting: Persist silence state immediately on Create/Delete
Persists the silence state to the kvstore immediately instead of waiting for the
next maintenance run. This is used after Create/Delete to prevent silences from
being lost when a new Alertmanager is started before the state has persisted.
This can happen, for example, in a rolling deployment scenario.
* Fix test that requires real data
* Don't error if silence state persist fails, maintenance will correct
* Add Get method in dual writer
* Update pkg/apiserver/rest/dualwriter_mode3.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* Actually run the tests
* no need for t.Run()
* Update pkg/apiserver/rest/dualwriter_mode3.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* Update pkg/apiserver/rest/dualwriter_mode3.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* Update pkg/apiserver/rest/dualwriter_test.go
Co-authored-by: Dan Cech <dcech@grafana.com>
* Log improvements
* Fix method name
---------
Co-authored-by: Dan Cech <dcech@grafana.com>
* WIP
* Use splitpanewrapper for drawer
* Get rich history pulling from multiple datasources
* highlight pane
* Fix datasource data handling
* create ds/explore map, move around ds lookup
* Handle no filters
* Fix tests and some errors
* Fix context menu issue
* (Poorly) enable scrolling, fix onClose to function
* Remove highlighting, use legacy key, fix casing
* fix filtering to handle non-simple data
* Fix linter, add translations
* Fixing tests~~
* Move to explore drawer and fix some more tests
* Kinda fix drawer stuff?
* Fix remaining card tests
* Fix test
* Fix tests
* Partially fix starred tab tests
* Fix integration tests
* Fix remaining tests 🤞
* Add a test and a clarifying comment behind a couple hooks
* Remove unused code
* Fix button styling and fix animation (but break width)
* Make Drawer using parent width (100%)
* Fix tests and some small catches
* Add tests for selectExploreDSMaps selector
---------
Co-authored-by: Piotr Jamroz <pm.jamroz@gmail.com>
* Revert "Revert "Add FolderUID for library elements" (#83776)"
This reverts commit 0dfdb2ae47.
* Fix bug, dashboard id and library element fodler_id are the corresponding values
Dashboard table hold both dahboards and tables
* extract genericService from RuleService just to reuse it later
* implement silence service
---------
Co-authored-by: William Wernert <william.wernert@grafana.com>
Co-authored-by: Matthew Jacobson <matthew.jacobson@grafana.com>
* text dump
* initial edits
* more edits
* added more info, made edits
* first draft
* removed some commented out content
* final edits
* made requested changes
* feature name change
* missed a metrics explore - fixed
* ran prettier
---------
Co-authored-by: lwandz13 <larissa.wandzura@grafana.com>
* Storage server runs own instrumentation server if its the sole target. Starts adding some sample metrics for now.
* adds metric for failed optimistic locks
* refactors metrics registration to own method on service for testability. Adds tests.
* Register sql storage server metrics from within the service
* fixes test
* troubleshooting drone test failures. Maybe timing when starting instrumentation server?
* Waits until instrumentation server has started. Updates tests.
* defer wont get called unless theres an error. removing.
* wait for instrumentation server to be running
* linter - close res body
* use port 3000 for metrics and removes test metric inc() call
* fixes test - updates port
* refactors module server to provide an instrumentation server module when there is no ALL or CORE target provided and running as single target
* make instrumentation server a dependency of all modules that do not run their own http server
* adds module server test
* adds tests for instrumentation service and removes old tests that aren't needed
* ignore error in test
* uses helper to start and run service
* when running wait on ctx done or http server err
* wait for http server
* removes println
* updates module server test to be integration test
* require no error in goroutine
* skips integration test when GRAFANA_TEST_DB not defined
* move http server start into start, verify returned content
* make test error when run fails
* try waiting longer and see if drone tests pass
* update integration test mysql creds to match drone
* go back to only waiting half second
* debug log drone mysql connection string
* use same db connection config as drone
* try using same hostname as drone
* cant use localhost as mysql hostname in drone tests. Need to parse it from the cfg db connection string
---------
Co-authored-by: Dan Cech <dcech@grafana.com>
* Re-order features and update intro in Grafana 11.0-preview What's new
* Removed title casing
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* support continue at specified resource version
* detect whether list continue pages need to use entity_history, remove BatchRead, expand selectQuery helper
* refactor continue token handling
* fix tests, increase history chunk size
* lint fix
* fix#81465 (FilterByValueTransformerEditor.tsx): Exclude-null now it's getting initialised properly by default
The default matcher of a new filter by value condition has been changed from greater to isNull. Added a file FilterByValueTransformerEditor.test.tsx with a test to confirm this change
* update tests and run linter
* filter-by-values-exclude-null/ update test definition
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* NodeGraphPanel: Fix case comparison for arc field colors
When a field has mixed case in the data frame, the options editor
offers it with mixed case as well, so the options will have the field
with mixed case as well, making the comparison in utils.ts
applyOptiosToFrames fail, leaving the arcs uncolored.
This version of the commit allows mismatched cases between field in
dataframe and options panel in case users were depending on this
behavior in their dashboards.
* Update comment
---------
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
* Alerting: Make retention period configurable for the notification log
* update sample.ini
* fix outdated comment (on disk -> kvstore)
* skip checking cyclomatic complexity for ReadUnifiedAlertingSettings
* Add email and email_verified to id token if identity is a user
* Add endpoint to trigger email verification for user
* Add function to clear stored id tokens and use it when email verification is completed
* E2C: Resources table refactor
* update swagger spec with enums
* use native resource item type, rather than our mock type
* unit tests for resources table
* update spec
* replace sqlstore with db interface in a few packages
* remove from stats
* remove sqlstore in admin test
* remove sqlstore from api plugin tests
* fix another createUser
* remove sqlstore in publicdashboards
* remove sqlstore from orgs
* clean up orguser test
* more clean up in sso
* clean up service accounts
* further cleanup
* more cleanup in accesscontrol
* last cleanup in accesscontrol
* clean up teams
* more removals
* split cfg from db in testenv
* few remaining fixes
* fix test with bus
* pass cfg for testing inside db as an option
* set query retries when no opts provided
* revert golden test data
* rebase and rollback
* Add feature toggle
* Add filters and group by variables by default to all new dashboards
* Nits
* Tests
* Rename feature toggle to newDashboardWithFiltersAndGroupBy
* Icon: aria hide icon, unless a label is set
* Update doc
* Remove weird auto import
* Fix fialing tests
* Add recommendation for Tooltip
* Consider more aria attributes to support Tooltip
* Handle tabIndex and aria-hidden case
* Add comment about aria-label
* Add applicability function to group to nested table
* codeincarnate/group-to-nested-cond/ run linter
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* E2C: Start connecting on-prem to real apis
* actually run the migration
* show resources
* basic dashboards resources
* show dashboard title
* remove console logs
* cleanup 1
* i18n
* disconnect
* i18n
* restore type
* use fixed format
* fix
* make substring and not substring transformer case insensitive
* timlevett/case-insensitive/ run linter
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* Update index.md Adding YouTube video link and description
Added a short description about the video and added the video to the page.
* Update docs/sources/panels-visualizations/visualizations/logs/index.md
Some edits went in. All nice :)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* Removed repetition
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
ci: fix missing go dependencies
```
> [go-builder 11/25] RUN go mod download:
0.303 go: cannot load module pkg/build/wire listed in go.work file: open pkg/build/wire/go.mod: no such file or directory
------
Dockerfile:64
--------------------
62 | COPY pkg/promlib/go.* pkg/promlib/
63 |
64 | >>> RUN go mod download
65 | RUN if [[ "$BINGO" = "true" ]]; then \
66 | go install github.com/bwplotka/bingo@latest && \
```
* Implement run migration endpoint
* Refactor RunMigration method into separate methods
* Save migration runs fix lint
* Minor changes
* Refactor how to use cms endpoint
* fix interface
* complete merge
* add individual items
* adds tracing to getMigration
* linter
* updated swagger definition with the latest changes
* CloudMigrations: Implement core API handlers for cloud migrations and migration runs (#85407)
* implement delete
* add auth token encryption
* implement token validation
* call token validation during migration creation
* implement get migration status
* implement list migration runs
* fix bug
* finish parse domain func
* fix urls
* fix typo
* fix encoding and decoding
* remove double decryption
* add missing slash
* fix id returned by create function
* inject missing services
* finish implementing (as far as I can tell right now) data migration and response handling
* comment out broken test, needs a rewrite
* add a few final touches
* get dashboard migration to work properly
* changed runMigration to a POST
* swagger
* swagger
* swagger
---------
Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
Co-authored-by: Michael Mandrus <41969079+mmandrus@users.noreply.github.com>
* DashboardScene: Fix explore to dashboard flow
* Tests
* Make sure dashboard is in edit mode when adding from explore
* Allow discarding changes when coming from explore
* Tests
* reenable ext-jwt-client
* fixup settings struct
* add user and service auth
* lint up
* add user auth to grafana ext
* fixes
* Populate token permissions
Co-authored-by: jguer <joao.guerreiro@grafana.com>
* fix tests
* fix lint
* small prealloc
* small prealloc
* use special namespace for access policies
* fix access policy auth
* fix tests
* fix uncalled settings expander
* add feature toggle
* small feedback fixes
* rename entitlements to permissions
* add authlibn
* allow viewing the signed in user info for non user namespace
* fix invalid namespacedID
* use authlib as verifier for tokens
* Update pkg/services/authn/clients/ext_jwt.go
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
* Update pkg/services/authn/clients/ext_jwt_test.go
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
* fix parameter names
* change asserts to normal package
* add rule for assert
* fix ownerships
* Local diff
* test and lint
* Fix test
* Fix ac test
* Fix pluginproxy test
* Revert testdata changes
* Force revert on test data
---------
Co-authored-by: gamab <gabriel.mabille@grafana.com>
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
* add deps and script
* add codegen rtk api clise for cloud migration
* rename all the mock exports to mock
* Reset changes to package.json and yarn.lock
* codeowners
* Update Yarn to v4.1.1
* add new yarn version
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* update language around query editor parsing issues
* add special handling for second function arguments in divideSeriesLists
* additional check for first argument as series(string) and not a function
* add function to static function to static service
* find email and login claims with jmespath
* rename configuration files
* Replace JWTClaims struct for map
* check for subclaims error
* indentation levels
* Highlight parent section when child is selected
* Fix context, add rotation to toggle button
* Merge single child logic; fix styling
* Fix collapsed logic, make elipsis work, reorganize for better readability;
* Add connector
* Tooltip placement
* Update tests so they test components the same way users would interact with them
* Clean up indendation levels
* Support collapsing logic for multiple section; highlight all items in a section of an active child - parent is active only when section is collapsed and child inside of it is active
* Simplify making ellipsis work
* Show tooltip if the text overflows in expanded mode
* The whole button container should have same background when section is expanded in mini view
* Fix a bug where root items were not being sorted by document position
* Update query order when query rows are changed through dragging and dropping
* Fix the issue where chaning the title of a query row would remove the query
* fix: conflict between browser history and trail history
- ensure the back button or url changes don't generate trail steps
- ensure label breakdown TextLinks which appear on the summary tab work in embedded mode
* Added YouTube video to index.md on Time Series
Added a brief description and the YouTube link for the Time Series video.
* Update index.md
Did quick fix
* Update index.md
Found double space, removed, hope PR goes through
* Update docs/sources/panels-visualizations/visualizations/time-series/index.md
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* don't iterate over first column as it is a time column already
* don't iterate over first column as it was handled earlier
* add more flexibility to run the commands
* Update pkg/tsdb/influxdb/influxql/converter/converter.go
Co-authored-by: Nick Richmond <5732000+NWRichmond@users.noreply.github.com>
---------
Co-authored-by: Nick Richmond <5732000+NWRichmond@users.noreply.github.com>
Terraform Issue: grafana/terraform-provider-grafana#1007
Nested routes should be allowed to inherit the contact point from the root (or direct parent) route but this fails in the provisioning API (it works in the UI)
* fix: remove global a tag styles inside tooltips
* corret inside / outside button references in toggletip test
* Remove code and pre styling rules from tooltipUtils
"Release: Updated versions in package to 11.1.0-pre"
Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
* Bench testing search user perm
* Add BenchmarkSearchUsersPermissions_1K_1K
* Clarify benchmark searches by action prefix
* Make MySQL more efficient
* Move all filter options
* Expand after assignments union
* update comments
* vendor latest wire into pkg/build
* use vendored wire in builds
* fix wire import path
* remove wire from bingo
* also support google/wire import
* make prettier happy
* change package in tess
* add debug walk for drone
* add wire_gen in tests
* remove debug walk
* restore imports
* add strategy and tests
* use settings provider service and remove multiple providers strategy
* Move SAML strategy to ssosettings service
* Update codeowners file
* reload from settings provider
* add saml as configurable provider
* Add new SAML strategy
* rename old saml settings interface
* update saml string references
* use OSS license
* validate saml provider depends on license for List
* add tests for list rendering including saml
* change the licensing validation to service init
* replace service struct for provider
* add feature toggle usePrometheusFrontendPackage
* add feature toggle logic to Prometheus module
* use config editor with package and remove configOverhaul feature toggle
* update betterer because we will be removing other files as we replace with files from @grafana/prometheus
* fix exemplar ds picker selector
* add more description to ts-ignore
* remove go.work.sum change
* copy go.work.sum from main
* update go.work.sum after talking with ismail
* put back the promlib entry
---------
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
* attempt at solving issue and resetting bounds to match panel content
* cleanup failed experiments
* add toggle for infinite pan - dont love naming but open to suggestions; clean up scene transform function
* add ability to "infinite" zoom (i.e. render more canvas via zooming out)
* slight refactor
* revert refactor as it broke things
* Added new connector functions and new shape elements
* Grouped basic elements, added element intro, moved element snapping info, and added subheadings for connectors section
* Copy edits and restructuring
* Add rotation
* Broke up sentence
* Added gif using midpoint controls
* ihm/180324-canvas-flowchart-features/ run linter
* Remove comment
* Removed extra line
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* allow users with regular actions access provisioning API paths
* update methods that read rules
skip new authorization logic if user CanReadAllRules to avoid performance impact on file-provisioning
update all methods to accept identity.Requester that contains all permissions and is required by access control.
* create deltas for single rul e
* update modify methods
skip new authorization logic if user CanWriteAllRules to avoid performance impact on file-provisioning
update all methods to accept identity.Requester that contains all permissions and is required by access control.
* implement RuleAccessControlService in provisioning
* update file provisioning user to have all permissions to bypass authz
* update provisioning API to return errutil errors correctly
---------
Co-authored-by: Alexander Weaver <weaver.alex.d@gmail.com>
* Canvas: Add corner radius option
* Update connection radius logic
* Simplify angle calcs
* Simplify math to be a bit more clear and efficient
* Add checks for hyperbola behavior
* Prevent arc calcs if no radius
* Add comments for SOME clarity
* Add some more clarity to comments
* Fix linter issue
* Check for segment overlap for first vertex
* Update public/app/plugins/panel/canvas/components/connections/ConnectionSVG.tsx
* Add comment for calc clarity
* Prometheus: remove scope dependency
temp workaround
* depguard
* comment
* remove rules since they need a newer version of golangci-lint
---------
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
* server: reload of grafana server certs when renewed without restart.
Signed-off-by: Rao, B V Chalapathi <b_v_chalapathi.rao@nokia.com>
* server: reload of grafana server certs when renewed without restart.
Signed-off-by: Rao, B V Chalapathi <b_v_chalapathi.rao@nokia.com>
* Update http_server.go
* Update docs/sources/setup-grafana/configure-grafana/_index.md
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* Update http_server.go
Address the comments
* Update docs/sources/setup-grafana/configure-grafana/_index.md
Co-authored-by: Dan Cech <dan@aussiedan.com>
* Update http_server.go
Align the spaces
* Update http_server.go
* Update http_server.go
* Update pkg/api/http_server.go
Co-authored-by: Dan Cech <dan@aussiedan.com>
---------
Signed-off-by: Rao, B V Chalapathi <b_v_chalapathi.rao@nokia.com>
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
Co-authored-by: Dan Cech <dan@aussiedan.com>
* add empty search state component
* extract translations
* nicer prop spreading
* actually expose component in grafana-ui
* use requestAnimationFrame
* add rollup-plugin-svg-import
* move to a single EmptyState component with variants
* update docs
* remove CTA
* add some more prop documentation
* just use 1 svg
* Alerting: Implement ApplyConfig for remote primary mode (forked AM)
* add TODO for saving the config hash in other config-related methods
* fix bad method receiver name (m -> am)
* tests
* add mutex
* remove sync loop
* feat: metadata for metric panels
* fix: missing import?
* fix: async await to get description first
- also add description to metric-name-only panels
* fix: change description, remove from main viz
* fix: remove import
* Enable nestedFolders by default
* Make nestedFolders GA
Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
* regenerate files
* also update docs
* skip failing test
---------
Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
* Chore: Remove unused dependenices in plugin client middlewares
* refactor logger middleware to remove cfg dependency
* hack to make tracing work in api group builders
* display teams to team reader if they also have the access to list team permissions
* fix a typo in the docs
* enable annotationPermissionUpdate by default
* update wording
* Added Configure tooltips page
* Added intro, description options and image
* Updated weight and removed passive voice
* Replaced list with table and updated non-configurable tooltips section
* Updated info about other tooltips
* Wording edits
* Apply suggestions from code review
* Fixed table
* Added hover value in color scheme info with image
* Canvas: Add direction options for connections
* Fix radio control to handle default
* Fix broken options from merge
* Remove unused comment
* Change category and capitalize options for arrow
* Consolidate marker start and end for connections
* Fix linter issue
* bump scenes
* Improved data layers
* DashboardScene: Allow transformations by topic
* Use stable version
* Mock grafana ds to avoid anno layers test failure
* Fix name change
---------
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Adds support for logs (specify level), metrics (enable metrics and Prometheus /metrics endpoint
and traces (jaeger or otlp) for standalone API server. This will allow any grafana core service
part of standalone apiserver to use logging, metrics and traces as normal.
* Created elements intro section, moved snapping and alignment content to intro, removed snapping and alightment heading
* Updated data links availability
* Remove element section changes
* test(jest): isolate script tests to prevent jest errors in grafana-server/tmp tests
* chore(codeowners): update so generate-transformations matches in docs and tests directory
* Move some thema code inside grafana
* Use new codegen instead of thema for core kinds
* Replace TS generator
* Use new generator for go types
* Remove thema from oapi generator
* Remove thema from generators
* Don't use kindsys/thema for core kinds
* Remove kindsys/thema from plugins
* Remove last thema related
* Remove most of cuectx and move utils_ts into codegen. It also deletes wire dependency
* Merge plugins generators
* Delete thema dependency 🎉
* Fix CODEOWNERS
* Fix package name
* Fix TS output names
* More path fixes
* Fix mod codeowners
* Use original plugin's name
* Remove kindsys dependency 🎉
* Modify oapi schema and create an apply function to fix elasticsearch errors
* cue.mod was deleted by mistake
* Fix TS panels
* sort imports
* Fixing elasticsearch output
* Downgrade oapi-codegen library
* Update output ts files
* More fixes
* Restore old elasticsearch generated file and skip its generation. Remove core imports into plugins
* More lint fixes
* Add codeowners
* restore embed.go file
* Fix embed.go
* feat(systemjs): move systemjs to grafana core and stop exporting from runtime
* feat(plugins): move systemjs to own file, update imports
* chore(plugins): call systemjs directly from window as ref can be undefined
* chore(plugins): make sure systemjs is imported before its shared dependencies
* chore(systemjs): move dependency to root package.json
* feat: add incomplete unit test
* refactor: add idea for unit test
* feat: create new e2e test
* feat: add some steps
* feat: add comment
* feat: complete prep work
* feat: complete clean up
* rebase
* feat: add more steps to test flow
* refactor: remove unit test
* refactor: clean up
* refactor: create a provisioned alert rule
* refactor: change location and content
* refactor: e2e test
* refactor: betterer
* refactor: move provisioned alert rule
* refactor: make provisioning file available remote
* refactor: clean up test
* refactor: move provisioned alert rule
* refactor: remove wait()
* feat: restructure first test and add more tests
* feat: add another provisioned alert rule
* feat: add a new test
* feat: complete new test
* refactor: replace data-testid in alert rules
* refactor: replace data-testid
* refactor: fix tests for drone
* refactor: fix third test after review
* refactor: fix last test
* temp
* refactor: improve some things
* refactor: adjust unit tests
* refactor: remove assertions for alert rule details view
* refactor: remove assertions
* refactor: add check for button text
* refactor: remove session storage
* refactor: apply changes from code review
* refactor: add codeowner
* refactor
* refactor
* refactor: clean up
* refactor: clean up
* refactor: clean up
* refactor: increase pa11y threshold for /alerting/list
* Canvas: Add vertex control to connections
* Add function for vertex conversion
* Add vertex interface
* Add future vertex handling
* Only show vertices when connection selected
* Add vertices to save model
* Apply select constraint to first midpoint
* Add some infrastructure for vertex edit
* Render vertex edit and capture events
* Save vertex edit on button release
* Handle adding new vertices
* Limit number of vertices to 10
* Handle zoom for vertex edit and creation
* Rename future to add
* Remove more references to future
* Remove unsued console log
* Clean up styles
* Add some clarity for path generation
* Add clarity to connections event handling
* Canvas: Add snapping to vertex edit
* Remove unused color styling
* Add horizontal and vertical snap for vertex edit
* Add snapping during vertex creation
* Hide vertex before removal
Make: Remove redundant `make go-gen` in .bra, build-go already calls this
Calling twice really slows down backend build time since wire gets called twice and that uses a few gigs of memory
* mssql: Add Kerberos/Windows AD auth
* need username for cache file
* account for no port in cc file
* add tests around constring
* remove un-needed port
* add docs
* remove comments
* move defer to same locale as where it begins
* fix linting and spelling
* fix gosec linter
* note lack of grafana cloud support
* require "folders:read" and "alert.rules:read" in all rules API requests (write and read).
* add check for permissions "folders:read" and "alert.rules:read" to AuthorizeAccessToRuleGroup and HasAccessToRuleGroup
* check only access to datasource in rule testing API
---------
Co-authored-by: William Wernert <william.wernert@grafana.com>
* E2E: Rewrite mysql tests to playwright
* Fix lint
* Add more selectors and address comments
* Scope locators when locating text
* Don't run it 20 times
* Update new-datasource-variable to assert mysql
* Update index.md added YouTube link to Table Panel
* Moved video and added placement note
* Update index.md adding video description
Added a description to the video. Feel free to edit if my syntax or writing needs improvement.
* Wording and style edits
* Wording fix
---------
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* Table: hacky poc for colored rows
* update
* Update options editor
* Refactor out styling
* Make sure option applies
* Start unifying coloring logic
* Support various options
* Cleanups
* Fix up hover behavior
* Update label
* Fix bug with sorting and make cleanups
* Ensure text color also applies to whole row
* New treatment for cell inspect
* Update cell inspect spacing
* codeincarnate/table-row-background-selected-riffs/ run linter
* Fix hover colors
* Fix coloring
* The other part of color application
* Another color fix
* codeincarnate/table-row-background-selected-riffs/ lint
* Update cell value inspect
* Prettier
* Update cell value inspect coloring
* Fix text coloring
* Update inspect style
* Linting and betterer
* Fix tests
* i18n
---------
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
* docs: initial updates to state timeline documentation
* docs: apply linting
* Apply suggestions from code review
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* docs: add feedback from PR review
* docs: apply linting
* Wording and formatting edits
* Fixed grammar
* Update docs/sources/panels-visualizations/visualizations/state-timeline/index.md
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* docs: add two examples for state timeline to show null values and two timestamps
* docs: add steps to configuring a state timeline
* docs: add state timeline video
* docs: add link to creating dashboards
* Changed link text and added version interpolation syntax
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* (WIP) Alerting: Decrypt secrets before sending configuration to the remote Alertmanager
* refactor, fix tests
* test decrypting secrets
* tidy up
* test SendConfiguration, quote keys, refactor tests
* make linter happy
* decrypt configuration before comparing
* copy configuration struct before decrypting
* reduce diff in TestCompareAndSendConfiguration
* clean up remote/alertmanager.go
* make linter happy
* avoid serializing into JSON to copy struct
* codeowners
* add the missing fields for sso providers
* remove fields array
* add the validate_hd field for google
* submit only fields defined on the provider
* fix unit tests
* add unit tests for the new fields/sections from the form
* add hosted_domain field for the google provider
* reorder fields in user mapping
* remove authStyle field from gitlab and okta
---------
Co-authored-by: Mihaly Gyongyosi <mgyongyosi@users.noreply.github.com>
* feat: integrate dashboard panels with metrics explore
- add dashboard panel menu items (in non-scenes dashboard) to open
`metric{filters}` entries detected from queries to launch
"metrics explorer" drawers for the selected `metric{filter}`
* fix: remove OpenEmbeddedTrailEvent
* fix: use modal manager dismiss capabilities instead
* initial start
* don't use getTagKeysProvider
* some cleanup
* undo kinds adjustment
* simplify
* remove async declaration
* add description and a couple of unit tests
* add transformSaveModelToScene test
* add tests for AdHocVariableForm
* add tests for AdHocFiltersVariableEditor
* update to defaultKeys
* fix snapshots
* update to 3.13.3
* Adds color and stroke-dasharray support for node graph edges
Adds support for providing color, highlighted color, and visual display of node graph edges as dashed lines via stroke-dasharray.
* Updates node graph documentation
* Updates documentation
Adds default for `highlightedColor`
* Update docs/sources/panels-visualizations/visualizations/node-graph/index.md
Co-authored-by: Fabrizio <135109076+fabrizio-grafana@users.noreply.github.com>
* Update packages/grafana-data/src/utils/nodeGraph.ts
Co-authored-by: Fabrizio <135109076+fabrizio-grafana@users.noreply.github.com>
* Update docs/sources/panels-visualizations/visualizations/node-graph/index.md
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* Removes highlightedColor; deprecates highlighted
Per [request](https://github.com/grafana/grafana/pull/83855#issuecomment-1999810826), deprecates `highlighted` in code and documentation, and removes `highlightedColor` as an additional property. `highlighted` will continue to be supported in its original state (makes the edge red), but is superseded if `color` is provided.
* Update types.ts
Missed a file in my last commit. Removes `highlightedColor` and deprecates `highlighted`.
* Add test scenario in test data source
---------
Co-authored-by: Fabrizio <135109076+fabrizio-grafana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
* fix: use cascader's clear button
* fix: remove the prefix filter from metric select
* fix: remove supporting code in metric select scene
- For the removed prefix filter
* fix: spacing
* feat: make it possible to specify prop types for component extensions
* Update packages/grafana-runtime/src/services/pluginExtensions/getPluginExtensions.ts
* chore: adapted test case
* chore: update betterer
* feat: update types for configureComponentExtension()
* fix: remove type specifics for `configureExtensionComponent`
* Update betterer config
---------
Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>
Co-authored-by: Darren Janeczek <darren.janeczek@grafana.com>
* getAllFields: refactor for improved performance
* LogRowMessageDisplayedFields: refactor line construction for performance
* AsyncIconButton: refactor to prevent infinite loops
Always show multi-select DataSource(DS) variables in the DS picker, and display a warning in the panel when a DataSource variable holds multiple values and is not being repeated.
---------
Co-authored-by: Alexandra Vargas <alexa1866@gmail.com>
Co-authored-by: Alexa V <239999+axelavargas@users.noreply.github.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* chore(input-datasource): delete bundled plugin for grafana 11
* chore(betterer): refresh results file
* chore(yarn): run dedupe to clean up deps
* chore(yarn): pin playwright to 1.41.2 to see if CI passes
* chore(yarn): pin playwright to 1.42.1
* add support for listing resource history
* make watch handle custom label selectors properly
* fix tests
* Apply suggestions from code review
Co-authored-by: Diego Augusto Molina <diegoaugustomolina@gmail.com>
* properly handle special characters in json label matcher
* tidy up
---------
Co-authored-by: Diego Augusto Molina <diegoaugustomolina@gmail.com>
* Unify how the version is shown in the UI
* use versionString in dashboard help bundles
* fix lint
* remove comment
* fix test types
* make test less flakey
* Canvas: Add vertex control to connections
* Add function for vertex conversion
* Add vertex interface
* Add future vertex handling
* Only show vertices when connection selected
* Add vertices to save model
* Apply select constraint to first midpoint
* Add some infrastructure for vertex edit
* Render vertex edit and capture events
* Save vertex edit on button release
* Handle adding new vertices
* Limit number of vertices to 10
* Handle zoom for vertex edit and creation
* Rename future to add
* Remove more references to future
* Remove unsued console log
* Clean up styles
* Add some clarity for path generation
* Add clarity to connections event handling
---------
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
* Fix wrong use of empty list in times field in the UI
* Add tooltip for disable switch
* Show disabled badge in mute timings
* Disable time ranges when disabling time interval in the UI
* PR review comments
* remove tooltip for the field as it does not register it correctly
* remove wrong code line
* Add comment
* Address PR review comments
* Add function to get the namespaced id
* Add function to resolve an identity through authn.Service from org and namespace id
* Switch to resolve identity for re-authenticate in another org
* bug: fix migration to account for duplicate entries
* refactoring to create test folder for user migrations
* fix migration log
* added the migration
* additional tests
* added extSrv tests
* Infinite Scroll: wait for users to reach the top before triggering new requests
* Prettier
* Infinite Scroll: control top scrolling via prop
* Prettier
* Folders: Allow listing folders with write permission
* Check for subfolder access if parent does not have
* Add test
* GetFolders: fix ordering
* Apply suggestion from code review
* ExtSvcAccounts: Fix External Service Accounts Login check
Co-authored-by: Karl Persson <kalle.persson@grafana.com>
* Remove service accounts assignments and permissions on delete
* Fix first set of tests
* Fix second batch of tests
* Fix third batch of tests
---------
Co-authored-by: Karl Persson <kalle.persson@grafana.com>
* Update template names
* Add verifier that we can use to start verify process
* Use userVerifier when verifying email on update
* Add tests
---------
Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
* pyroscope: adds ability to add context menu items
* moves things around
* removes console.log
* improvements
* Change the extra context button API shape
* Add test
* lint
---------
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
* PopoverMenu: change position to fixed
* PopoverMenu: close on empty selectionchange
* Popover Menu: do not let menu overflow the window dimensions
* Prettier
* Wip
* Wip
* Adapt to load external module
* build: remove cloudmonitoring from built_in_plugins, clean up webpack output
* chore(plugins): remove decoupled plugins from package.json deps
* chore(codeowners): update file for nx.json
* revert(webpack): put back path in config
* build(frontend): use nx to run prod builds of decoupled plugins with yarn build
* style(prometheus): run prettier-write to fix tsconfig.json
* style(backend): remove unused subFile.isDistDir
* revert(locales): remove formatting changes adding new line at end of files
* chore(webpack): clean up dev output
* build(nx): make grafana an nx project, bump lerna and nx
* build(plugin-configs): move cache directory to node_modules
* style(datasource-plugins): add eslint ignore for .gen.ts files
* chore(codeowners): add frontend-ops as owner of project.json
* build(webpack): add getDecoupledPlugins to automatically ignore when watching
* ci(drone): skip nx cache when building frontend packages
* style(ci): fix missing trailing comma
* Revert "style(ci): fix missing trailing comma"
This reverts commit 7520d41576.
* Revert "ci(drone): skip nx cache when building frontend packages"
This reverts commit 46938883ac.
* feat(zipkin): remove from grafana core bundle
* chore(npm): bump nx package to latest 18.0.8
* docs(dev-guide): add a note about what yarn start now builds
---------
Co-authored-by: Andres Martinez <andres.martinez@grafana.com>
* WIP - proof of concept
* Update pkg/tsdb/elasticsearch/client/client.go
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* update and add test
* lint
* Fix lint
* Bring back logging when creating client
---------
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* fix mergeSettings() in case the db contains empty strings
* use correct github urls in test
* overwrite only urls
* update comment for mergeSettings()
* add strategy and tests
* use settings provider service and remove multiple providers strategy
* update codeowners file
* reload from settings provider
DashboardScene: Make sure dashboard prompt is shown when navigating away from an edited dashboard
Co-authored-by: Oscar Kilhed <oscar.kilhed@grafana.com>
* Implement keep last state for state transitions
* Respect For duration when keeping state
* Only keep transition from recording an annotation
* Add keep last state option for nodata/error in UI
* bump plugin-e2e and fix failing test
* do not ignore failures
* generate trace on every test
* force test to fail for debugging purposes
* fix broken test
* regenerate drone file
* poc
* add logger, skip hook when user is not assigned to default org
* Add tests, move to hook folder
* docs
* Skip for OrgId < 1
* Address feedback
* Update docs/sources/setup-grafana/configure-grafana/_index.md
* lint
* Move the hook to org_sync.go
* Update pkg/services/authn/authnimpl/sync/org_sync.go
* Handle the case when GetUserOrgList returns error
---------
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
Co-authored-by: Karl Persson <kalle.persson@grafana.com>
* export Evaluation
* Export Evaluation
* Export RuleVersionAndPauseStatus
* export Eval, create interface
* Export update and add to interface
* Export Stop and Run and add to interface
* Registry and scheduler use rule by interface and not concrete type
* Update factory to use interface, update tests to work over public API rather than writing to channels directly
* Rename map in registry
* Rename getOrCreateInfo to not reference a specific implementation
* Genericize alertRuleInfoRegistry into ruleRegistry
* Rename alertRuleInfo to alertRule
* Comments on interface
* Update pkg/services/ngalert/schedule/schedule.go
Co-authored-by: Jean-Philippe Quéméner <JohnnyQQQQ@users.noreply.github.com>
---------
Co-authored-by: Jean-Philippe Quéméner <JohnnyQQQQ@users.noreply.github.com>
* wip
* Refactor find panel by key
* clean up lint, make isLoading optional
* change library panel so that the dashboard key is attached to the panel instead of the library panel
* do not reload everything when the library panel is already loaded
* Progress on library panel options in options pane
* We can skip building the edit scene until we have the library panel loaded
* undo changes to findLibraryPanelbyKey, changes not necessary when the panel has the findable id instead of the library panel
* fix undo
* make sure the save model gets the id from the panel and not the library panel
* remove non necessary links and data providers from dummy loading panel
* change library panel so that the dashboard key is attached to the panel instead of the library panel
* make sure the save model gets the id from the panel and not the library panel
* do not reload everything when the library panel is already loaded
* Fix merge issue
* Clean up
* lint cleanup
* wip saving
* working save
* use title from panel model
* move library panel api functions
* fix issue from merge
* Add confirm save modal. Update library panel to response from save request. Add library panel information box to panel options
* Better naming
* Remove library panel from viz panel state, use sourcePanel.parent instead. Fix edited by time formatting
* Add tests for editing library panels
* implement changed from review feedback
* minor refactor from feedback
* HelpModal: Make more accessible
* Remove console.log
* Handle custom keys for screen reader
* Rewrite using tables
* Increase gap
* Change order of help categories
* HelpModal: Add tabIndex and imrpove sr-only display
* Move files to prometheus-library
* refactor core prometheus to use prometheus-library
* modify client transport options
* mock
* have a type
* import aliases
* rename
* call the right method
* remove unrelated test from the library
* update codeowners
* go work sync
* update go.work.sum
* make swagger-clean && make openapi3-gen
* add promlib to makefile
* remove clilogger
* Export the function
* update unit test
* add prometheus_test.go
* fix mock type
* use mapUtil from grafana-plugin-sdk-go
* add animation for grot not found
* extract default interval out into constant
* improve relative path
* extract magic numbers out into constants + throttle properly
* better width/height definitions
* use consistent background + apply to PageNotFound as well
* increase gap in command palette empty state
* Revert "Update dependency @swc/core to v1.4.6"
This reverts commit 4d7220dbdf.
* chore(renovate): ignore swc/core for time being due to bugs in versions ~1.4.5
* separate context and threads for usage stats
* use constants
* ignore original context
* fix runMetricsFunc
* fix collector registration
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
* change background ctx
* fix test randomness
* Add traces to support bundle collector
* Remove unecessay span
* Add trace to usagestats api
* Close spans
* Mv trace to bundle
* Change span name
* use parent context
* fix runtime declare of stats
* Fix pointer dereference problem on usage stat func
Co-authored-by: Karl Persson <kalle.persson@grafana.com>
Co-authored-by: jguer <joao.guerreiro@grafana.com>
* fix broken support bundle tests by tracer
---------
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
Co-authored-by: gamab <gabriel.mabille@grafana.com>
Co-authored-by: Karl Persson <kalle.persson@grafana.com>
* DashboardScene: Implement playlist controls
* Mock the runtime config properly
* PlaylistSrv: with state you can subscribe to (#83828)
---------
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Remove jenny_ts_resources and use jenny_ts_types for all cases
* Unify TS generated files into one jenny
* Add missing imports to versioned files
* Update Parca plugin
* Fix loki
* Use LokiQuery
* Fix pyroscope tests
* Fix prettier
* 😒 fix default pyroscope value name
* Set the LokiQuery
* Update Elasticsearch and TestData
* Missed files from testdata
* Order imports
* Explore: Remove deprecated Form components from CorrelationTransformationAddModal.tsx
* Explore: Remove deprecated Form components from AddToDashboardForm.tsx
* Landmark: main
* Landmark: add header
* Submenu: Move conditional display up
* NewsPanel: use h3 as the article label
* Use title for article id
* Update test showing a false positive
* DashboardPage: Expect submenu to not be shown
* remove panel menu options that are dasbhoard editing activities when the dashboard is not in edit mode
* remove corresponding keybindings when not in edit mode
* add keyboard shortcuts but inactivate them when not in edit mode
* Add tests; fix tests
* hard disable for legacy alerting
* remove alerting section from configuration file
* update documentation to not refer to deleted section
* remove AlertingEnabled from usage in UA setting parsing
* Embed two visualization videos from Grafana for Beginners series
* Implementing Isabel's recommendation on second video placement.
* edited introductory sentence to the second video.
* Added line between text and video
---------
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
* AngularMigrate: Auto migrate graph to multiple panels
* add unit test, and histogram migration
* add new cases to existing angular migration gdev dashboard
* fix stat feature toggle handling so all panels dont turn into stat panels 😅; fix betterer
* Use same function when clicking manual migrate button
* Update
---------
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
* Remove kinds verification for kind-registry
* Read plugin's json information with json library instead of use thema binding
* Remove grafanaplugin unification
* Don't use kindsys for extract the slot name
* Fix IsGroup
* Remove all plugindef generation
* Refactor schema interfaces
* Pushed this change from a different branch by mistake...
* Create small plugin definition structure adding additional information for plugins registration
* Add some validation checks
* Delete unused code
* Fix imports lint
* Swagger: Re-generate the enterprise specification if enterprise is cloned successfully
* API change to trigger the swagger CI step execution
* Swagger: Silence logs
* add drawer for auth settings
* add StrongPasswordField component
* Add style to different behaviours
* update style for component
* add componenet to ChangePasswordForm
* pass the event handlers to the child component
* add style for label container
* expose strong password policy config option to front end
* enforce password validation with config option
* Regenerate openapidocs at 1.21.8 to match ci
* Adjust trigger to work on the actual outputted files
* Also put go.mod and go.sum in the triggers
* manually fix
* Make an arbitrary change rather than touching the trigger to force a run
* Drop all triggers - run all the time
* Print diff - taken from @papagian's PR
* Manual fixes to swagger doc
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* Alerting: Use Alertmanager types extracted into grafana/alerting
We're in the process of exporting all Alertmanager types into grafana/alerting so that they can be imported in the Mimir Alertmanager, without a neeed to import Grafana directly.
This change introduces type aliasing for all Alertmanager types based on their 1:1 copy that now live in grafana/alerting.
Signed-off-by: gotjosh <josue.abreu@gmail.com>
---------
Signed-off-by: gotjosh <josue.abreu@gmail.com>
* create rule factory for more complicated dep injection into rules
* Rules get direct access to metrics, logs, traces utilities, use factory in tests
* Use clock internal to rule
* Use sender, statemanager, evalfactory directly
* evalApplied and stopApplied
* use schedulableAlertRules behind interface
* loaded metrics reader
* 3 relevant config options
* Drop unused scheduler parameter
* Rename ruleRoutine to run
* Update READMED
* Handle long parameter lists
* remove dead branch
* disable_sanitize_html update
Added a note that states this configuration is not available for Grafana Cloud instances.
* Update docs/sources/setup-grafana/configure-grafana/_index.md
* Update docs/sources/setup-grafana/configure-grafana/_index.md
---------
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* add drawer for auth settings
* add auth drawer component
* include AuthDrawer component in auth providers page
* protect the feature as enterprise only
* add unit test
* remove custom scroll bars from Page component
* make flagged scroller the actual scrolling element,
* enable feature flag by default
* re-enable the scroll props in Page
* rename feature toggle
* fix css
* only update when deleted
* set .scrollbar-view on our scrolling wrapper
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* changed tags from oss to enterprise and cloud
* added Dashboard Panel example
* swapped the all-grafana-umbrella information to the correct page
* added minor visibility improvements in steps
* made some minor adjustments
* added minor improvements
* fixed a link
* updates links
* Apply suggestions from code review
thanks for the improved suggestions. looks more better
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* fixed links
* fixed Grafana Enterprise link
* run prettier
* fixed add a data source links
---------
Co-authored-by: Chris Moyer <chris.moyer@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Dashboards: Fix scroll position not being restored when leaving panel edit view
* remove mock from tests
* remove console log
* Remove my debugging stuff, and don't render grid if width is 0
* remove old comment (but retain old, probably unneeded css)
* rename ref
* fix it not actually working anymore!!!
* add e2e tests
* jsonnet, i guess
* add a middleware that appens headers for IP range AC to data source proxy requests
* update code
* add tests
* fix a mistake
* add logging
* refactor to reuse code
* small cleanup
* skip the plugins middleware if the header is already set
* skip the plugins middleware if the header is already set
* Updated index pages and added v10.4 breaking changes, upgrade guide, and what's new pages
* Added what's new entries
* Removed empty headings
* Fixed link
* Removed duplicate entry and fixed styling
* Removed breaking changes page and references to it
* Added intro text
* Docs: 10.4 technical note for alertingUpgradeDryrunOnStart (#83262)
* Docs: 10.4 technical note for alertingUpgradeDryrunOnStart
* Apply suggestions from code review
Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
* Address PR comments
* restarts -> starts
---------
Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
* Fixed spelling
* Added new entries to What's new
* reorder and add intro
* Added PagerDuty data source entry
* Added entries
* Added new entries
* Fixed formatting
* Fixed page weight and links
* Apply suggestion from review
Co-authored-by: Mitch Seaman <mjseaman@users.noreply.github.com>
* remove team lbac, move return to previous (#83921)
- Remove Team LBAC for Loki (it is Cloud only)
- Move Return to Previous into the Alerting section, since it only works for Alerting now
- Add a note that data sources are separate from Grafana but included for visibility
* Replaced manual note with admonition shortcode
* move Return to Previous out of Alerting section
* Added youtube links
* Commented out youtube videos and removed duplicate video embed
---------
Co-authored-by: Matthew Jacobson <matthew.jacobson@grafana.com>
Co-authored-by: Mitchel Seaman <mitchel.seaman@gmail.com>
Co-authored-by: Mitch Seaman <mjseaman@users.noreply.github.com>
* initial naive implementation
* Update pkg/services/store/entity/sqlstash/sql_storage_server.go
Co-authored-by: Igor Suleymanov <radiohead@users.noreply.github.com>
* tidy up
* add action column, batch watch events
* initial implementation of broadcast-based watcher
* fix up watch init
* remove batching, it just adds needless complexity
* use StreamWatcher
* make broadcaster generic
* add circular buffer to replay recent events to new watchers
* loop within poll until all events are read
* add index on entity_history.resource_version to support poller
* increment r.Since when we send events to consumer
* switch broadcaster and cache to use channels instead of mutexes
* cleanup
---------
Co-authored-by: Igor Suleymanov <radiohead@users.noreply.github.com>
* Update the component only when the response is fully generated
* Fix quick feedback action doesn't respond
* Fix history not displaying after the second click
* Fix the history that moves when regenerating
---------
Co-authored-by: Adela Almasan <88068998+adela-almasan@users.noreply.github.com>
* Add model to library panel inspect json
* Add missing information from library panel when inspecting its JSON
* minor refactor
* refactor inspect library panel model to show the model that was fetched from the api
* nit: improve comment
* fix library panel import path
---------
Co-authored-by: Alexandra Vargas <alexa1866@gmail.com>
Updates Grafana Alertmanager to work with new interface from grafana/alerting#161. This change stops passing user-defined templates to the Grafana Alertmanager by persisting them to disk and instead passes them by string.
* Add profile-traces intro material; update Pyroscope data source info
* Apply suggestions from code review
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Updates and file rename from review
* Add PYROSCOPE_VERSION
* Apply suggestions from code review
* Format tables
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Apply suggestions from code review
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jennifer Villa <jvilla2013@gmail.com>
* Apply suggestions from code review
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jennifer Villa <jvilla2013@gmail.com>
* Access control: Extend GetUserPermissions() to query permissions in specific org
* Use db query to fetch permissions in org
* refactor
* refactor
* use conditional join
* minor refactor
* Add test cases
* Search permissions correctly in OSS vs Enterprise
* Get permissions from memory
* Refactor
* remove unused func
* Add tests for GetUserPermissionsInOrg
* fix linter
* Fix up text wrapping
* Make sure there are basic cell styles
* codeincarnate/text-wrapping-hover-pt2/ run prettier
* Add comment for conditional
* Update condition
---------
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
This commit fixes a bug in the screenshot service where
[alerting].concurrent_render_limit was used instead of
[rendering].concurrent_render_request_limit, as in the
docs.
* Introduce environment.local_filesystem_available
* Only show TLS client cert, client key, client ca when local_filesystem_available is true
* Rename LocalFSAvailable to LocalFileSystemAvailable
* Add FolderUID in missing places for libraryelements
* Add migration for FolderUID in library elements table
* Add Folder UIDs tolibrary panels
* Adjust dashboard import with folder uid
* Fix lint
* Rename back FolderUID to UID
* Remove default
* Check if folderUID is nil
* Add unique indes on org_id,folder_uid,name and kind
* Update pkg/services/libraryelements/database.go
Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
* Fix folder integration test, with unique index on library elements
* Make folder uids nullable and rewrite migration query
* Use dashboard uid instead of folder_uid
* Adjust test
---------
Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
* fix LDAP users authenticated via auth proxy not being able to use ldap sync
* simplify id resolution at the cost of no fallthrough
* remove unused services
* remove unused cache key
* Add Save and enable and Disable button
* Change to use Dropdown, reorder buttons
* Improve UI
* Update public/app/features/auth-config/ProviderConfigForm.tsx
* Apply suggestions from code review
* Use Stack instead of separate Fields
---------
Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
* query OAuth info from a new instance
* add `hd` validation flag
* add `disable_hd_validation` to settings map
* update documentation
---------
Co-authored-by: Jo <joao.guerreiro@grafana.com>
* Use query as fallback when there's one series and no labels. Use "" as the fallback for empty label values. Stop using the `promLabels` value from the Tempo response
* Set refId to remove mentions of promLabels
* Add quotes around the string value, add space after comma separator
* Use name as refId when possible
* Moved view json panel content from configure panel options to panel inspect view
* Converted add title and description task to reference section
* Removed edit panel section
* Updated bullet list to match content
* Removed view json content to be integrated later
* Ran prettier
* Docs: Edit Configure panel options (#83439)
* Updated intro
* Updated intro, descriptions, and repeating panels task
* Reformatted sections of task and updated wording of LLM info
* Copy edits
* Added Cloud links and updated version syntax
* Fixed link
* Fixed formatting and removed vestigial sentence
* ValidateInterval doesn't need the entire config
* Validation no longer depends on entire folder now that we've dropped foldertitle from api
* Don't depend on entire config struct
* Export validate group
* wip
* tests + refactor ad panel func
* Add row functionality
* update row state only when there are children
* Add new row + copy paste panels
* Add library panel functionality
* tests
* PR mods
* reafctor + tests
* reafctor
* fix test
* refactor
* fix bug on cancelling lib widget
* dashboard now saves with lib panel widget
* add lib panels widget works in rows as well
* split add lib panel func to another PR
* Add library panel functionality
* Fix lib panel and lib widget placement in collapsed/uncollapsed rows
* refactor
* take panelKey into account when getting next panel id in dashboard
* fix tests
* removed myself from data sources, added to admin (IAM)
* Remove accidental changes
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Rewrite Technical documentation codeowners for readability and consistency
Now it is consistent with the comments at the head of the file, at
least for this section of the repo.
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Alerting: feat: support deleting rule groups in the provisioning API
Adds support for DELETE to the provisioning API's alert rule groups route, which allows deleting the rule group with a
single API call. Previously, groups were deleted by deleting rules one-by-one.
Fixes#81860
This change doesn't add any new paths to the API, only new methods.
---------
Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
* wip
* tests + refactor ad panel func
* Add row functionality
* update row state only when there are children
* Add new row + copy paste panels
* Add library panel functionality
* tests
* PR mods
* reafctor + tests
* reafctor
* fix test
* refactor
* fix bug on cancelling lib widget
* dashboard now saves with lib panel widget
* add lib panels widget works in rows as well
* split add lib panel func to another PR
* Add library panel functionality
* Add lib panel from empty dashboard page
* refactor
* take panelKey into account when getting next panel id in dashboard
* fix tests
* wip
* tests + refactor ad panel func
* Add row functionality
* update row state only when there are children
* Add new row + copy paste panels
* Add library panel functionality
* tests
* PR mods
* reafctor + tests
* reafctor
* fix test
* refactor
* fix bug on cancelling lib widget
* dashboard now saves with lib panel widget
* add lib panels widget works in rows as well
* split add lib panel func to another PR
* Add library panel functionality
* refactor
* take panelKey into account when getting next panel id in dashboard
* fix tests
* Use time_intervals instead of the deprecated mute_time_intervals in alert manager config
* don't send mute_time_intervals in the payload
* Add and update tests
* Fix usecase when having both fields in response from getting alert manager config
* Use mute_timings for grafana data source and both for cloud data source when deleting mute timing
* Use mute_timings for grafana data source and both for cloud data source when saving a new or existing alert rule
* Address first code review
* Address more review comments
* wip
* tests + refactor ad panel func
* Add row functionality
* update row state only when there are children
* Add new row + copy paste panels
* Add library panel functionality
* tests
* PR mods
* reafctor + tests
* reafctor
* fix test
* refactor
* fix bug on cancelling lib widget
* dashboard now saves with lib panel widget
* add lib panels widget works in rows as well
* split add lib panel func to another PR
* change library panel so that the dashboard key is attached to the panel instead of the library panel
* make sure the save model gets the id from the panel and not the library panel
* do not reload everything when the library panel is already loaded
* Fix merge issue
* Clean up
* Plugins: Angular deprecation: Wait for plugins to be inizialized before rendering AngularDeprecationNotice
* use then
* fix tests
* mockCleanUpDashboardAndVariables.mockReset();
* Handle plugin not found
* PR review feedback
* Add comment
* removed unnecessary return
* PR review feedback
* Use grafanaBootData
* Removed comments
* fix tests
* Use config for hideDeprecation as well
* Add node graph panel suggestion
* Update logic
* Add comment
* Check for correct fields
* Simplify logic
* Also check for viz type
* Remove extra logic on boolean
* RBAC: Remove team permissions on delete
* Remove unecessary deletes from store function
* Nit on mock
* Add test to the database
* Nit on comment
* Add another test to check that other permissions remain
* introduce new config section [unified_alerting.state_history.annotations] and deprecate settings in [alerting]
Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
* added the helm project
* added page metadata
* added the intro section
* fixed menuTitle
* added section i.e. Setting up the Grafana Helm repository
* added the deployment section
* finished the deploying grafana section
* completed access grafana section
* updating changes
* added persistent storage section
* added debugging section
* fixed typos
* fixed headings
* fixed numerious typos
* Apply suggestions from code review
looks good now !!
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* Apply suggestions from code review
Thanks for the changes. It looks much better now
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* fixed the suggested changes and fixed minor typos
* Apply suggestions from code review
thanks for the improvements. looks polished now!!
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
* fixed download link
* fixed typo
* final adjustments
* corrects spelling
* makes prettier
---------
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
Co-authored-by: Chris Moyer <chris.moyer@grafana.com>
* fix: indicate __ignore_usage__ for preview queries
* fix: further remove var that shouldn't be there
* refactor: move previewPanel code and add tests
* fix: use simpler `AdHocFiltersVariable` state
Co-authored-by: Andre Pereira <adrapereira@gmail.com>
---------
Co-authored-by: Andre Pereira <adrapereira@gmail.com>
* AuthN: Remove embedded oauth server
* Restore main
* go mod tidy
* Fix problem
* Remove permission intersection
* Fix test and lint
* Fix TestData test
* Revert to origin/main
* Update go.mod
* Update go.mod
* Update go.sum
fix: datatrails: start step is "metric select"
If restoring from a saved data trail, or URL,
the selection of metric becomes a second step.
The first step is always without a metric, and
displays the metric selection scene.
* Show empty state after removing last panel
* betterer
* Refactor isEmpty state update in DashboardScene.tsx
* don't need viewPanelScene check
* track isEmpty through a behavior
* Fix test
* Add test for empty state
* minor fix
* Refactor isEmpty check
* Don't use const
* clean up
* Removed view and delete overrides sections
* Added examples heading and moved examples down one heading level
* Added override rules section and removed rule definitions from task
* Added supported visualizations section and table and docs ref links
* Docs: edit Configure field overrides (#81834)
* Formatted note
* Added missing content and general edits
* Updated screenshots and examples and general edits
* Fix small formatting issues
* Fixed links
* Uploaded images to admin, updated image links, and removed local images
* Swapped figure shortcode for simple Markdown
* move autocomplete logic
* Tests
* Write to correct history
* Remove historyUpdatedAction and related code
* add helpful comments
* Add option to mute all errors/warnings for autocomplete
* Add back in legacy local storage query history for transition period
* Move params to an object for easier use and defaults
* Do not make time filter required
* fix tests
* change deprecation version and add issue number
* replace react-popper with floating-ui in Popover
* update HoverCard
* fix unit tests
* mock useTransitionStyles to ensure consistent unit test results
* add playwright test and plugin-e2e
* run tests in ci
* add ds config tests
* add panel edit tests
* add annotation test
* add variable edit page tests
* add explore page tests
* add panel plugin tests
* add readme
* remove comments
* fix broken test
* remove user.json
* remove newline in starlark
* fix lint issue
* ignore failure of playwright tests
* update code owners
* add detailed error messages in every expect
* update message frame
* fix link
* upload report to gcp
* echo url
* add playwright developer guide
* bump plugin-e2e
* add custom provisioning dir
* update plugin-e2e
* remove not used imports
* fix typo
* minor fixes
* use latest version of plugin-e2e
* fix broken link
* use latest plugin-e2e
* add feature toggle scenario verification tests
* bump version
* use auth file from package
* fix type error
* add panel data assertions
* rename parent dir and bump version
* fix codeowners
* reset files
* remove not used file
* update plugin-e2e
* separate tests per role
* pass prov dir
* skip using provisioning fixture
* wip
* fix permission test
* move to e2e dir
* fix path to readme
* post comment with report url
* format starlark
* post comment with report url
* post comment with report url
* fix token
* make test fail
* fix exit code
* bump version
* bump to latest plugin-e2e
* revert reporting message
* remove comments
* readding report comment
* change exit code
* format starlark
* force test to fail
* add new step that posts comment
* fix link
* use latest playwright image
* fix failing test
* format starlark
* remove unused fixture
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
---------
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* Update dependency webpack-dev-server to v5
* update webpack.hot config (is this even used anymore?)
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
* Add preservesUnits property to reducer registry items
* Hide units when appropriate
* Prettier
* some code cleanup
* Prevent error when no stat is selected.
---------
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
This commit adds basic support for time_intervals, as mute_time_intervals
is deprecated in Alertmanager and scheduled to be removed before 1.0.
It does not add support for time_intervals in API or file provisioning,
nor does it support exporting time intervals. This will be added in
later commits to keep the changes as simple as possible.
* chore(lerna): bump lerna to 8.x.x
* chore(lerna): run lerna repair command to update lerna.json
* ci(drone): use raw output (no quotes) when updating package.json version
* ci(drone): update config file
* Updated links to former manage dashboards content
* Removed links to manage dashboards and added export content to Sharing page
* Replaced grafana links with cloud docs links
* Removed trailing slash from link
* trigger CI
---------
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* chore(monaco): bump monaco-editor to latest version
* feat(codeeditor): use esm to load monaco editor
* revert(monaco): put back previous version
* feat(monaco): setup MonacoEnvironment when bootstrapping app
* feat(monaco): load monaco languages from registry as workers
* feat(webpack): clean up warnings, remove need to copy monaco into lib
* fix(plugins): wip - remove amd loader workaround in systemjs hooks
* chore(azure): clean up so QueryField passes typecheck
* test(jest): update config to fix failing tests due to missing monaco-editor
* test(jest): update config to work with monaco-editor and kusto
* test(jest): prevent message eventlistener in nodeGraph/layout.worker tripping up monaco tests
* test(plugins): wip - remove amd related tests from systemjs hooks
* test(alerting): prefer clearAllMocks to prevent monaco editor failing due to missing matchMedia
* test(parca): fix failing test due to undefined backendSrv
* chore: move monacoEnv to app/core
* test: increase testing-lib timeout to 2secs, fix parca test to assert dom element
* feat(plugins): share kusto via systemjs
* test(e2e): increase timeout for checking monaco editor in exemplars spec
* test(e2e): assert monaco has loaded by checking the spinner is gone and window.monaco exists
* test(e2e): check for monaco editor textarea
* test(e2e): check monaco editor is loaded before assertions
* test(e2e): add waitForMonacoToLoad util to reduce duplication
* test(e2e): fix failing mysql spec
* chore(jest): add comment to setupTests explaining need to incresae default timeout
* chore(nodegraph): improve comment in layout.worker.utils to better explain the need for file
* fix: sign in using auth_proxy with role a -> b -> a would end up with role b
* Update pkg/services/authn/clients/proxy.go
Co-authored-by: Karl Persson <kalle.persson92@gmail.com>
* Update pkg/services/authn/clients/proxy.go
Co-authored-by: Karl Persson <kalle.persson92@gmail.com>
* initial very very early stab at isolated state for nested folder picker
* more
* complete state rework. still need to do search
* tidy up some comments
* split api hook into seperate file, start to try and get search results back (its not working)
* Fix loading status
* Reset files
* cleanup
* fix tests
* return object
* restore hiding items
* restore
* restore
* remove those comments
* rename hooks
* rename hooks
* simplify selectors - thanks ash!!!
* more ci please?
* Chore: Replace Form component usage in EditDefaultPolicyForm.tsx
* Chore: Replace Form component usage in EditNotificationPolicyForm.tsx
* Remove ts-ignore
* add variable name validation
* adjust variable name validation logic
* move variable name validation logic to model
* add tests for onValidateVariableName
* extract variable name validation itest into separate describe
* Plugins: fix loading of modules which resolve to Promises
Prior to this commit we expected the default export of a plugin module
to be an object with a `plugin` field.
This is the case for the vast majority of plugins, but if a plugin uses
webpack's `asyncWebAssembly` feature then the default export will actually
be a promise which resolves to such an object.
This commit checks the result of the SystemJS import to make sure it has
a `plugin` field. If not, and if the `default` field looks like a Promise,
it recursively attempts to resolve the Promise until the object looks like
a plugin.
I think this may have broken with the SystemJS upgrade (#70068) because it used
to work without this change in Grafana 10.1, but it's difficult to say
for sure.
* Use Promise.resolve instead of await to clean up some logic
* Override systemJSPrototype.import instead of handling defaults inside importPluginModule
* Add comment to explain why we're overriding systemJS' import
Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
---------
Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
* Chore: Remove Form usage from NewFolderForm
* Chore: Remove Form usage from NewFolderForm
* Chore: Remove Form usage from NewFolderForm
* Replace HorizontalGroup with Stack
* add Default Values and launch prettier
"Release: Updated versions in package to 11.0.0-pre"
Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
* Use fixed `/docs/grafana-cloud/alerting-and-irm` URLs for cloud references
* Fix `docs/grafana-cloud/` data sources links
* Fix `docs/grafana-cloud/` Panel & Visualization links
* Fix `/docs/grafana-cloud/` link to Dashboard page
* Set root directory `docs/reference` for non-cloud pages
* Fix `admonition` cannot use a `docs/reference` relative link
* Update `doc-validator`
https://github.com/grafana/technical-documentation/releases/tag/doc-validator%2Fv4.1.0
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
* Loki: Pass time range variable in variable editor
* Remove not needed type
* Update
* Add tests, not re-run if type does not change
* Add range as dependency
* working except for links
* Make sure the links are present on the library panels
* add tests, add empty links before panel is loaded, refactor legacy representation
* Update
---------
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* use split scopes instead of substr in search v1
* tests, of course
* yet, some test helpers dont use split scopes
* another test helper to fix
* add permission.identifier to group by
* check if attribute is uid
* fix tests
* use SplitScope()
* fix more tests
Previously receivers were only validated before saving the alertmanager
configuration. This is a suboptimal experience for those upgrading with preview
as the failed channel upgrade will return an API error instead of being
summarized in the table.
2024-02-16 15:17:07 -05:00
6550 changed files with 281404 additions and 237583 deletions
- Notice to makers/users of custom data sources, there is a minor breaking change in 2.2 that
require an update to custom data sources for them to work in 2.2. [Read this doc](https://github.com/grafana/grafana/tree/master/docs/sources/datasources/plugin_api.md) for more on the
data source api change.
- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/master/public/app/plugins/PLUGIN_CHANGES.md)
- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/main/public/app/plugins/PLUGIN_CHANGES.md)
- The duplicate query function used in data source editors is changed, and moveMetricQuery function was renamed
@@ -198,7 +198,7 @@ slack channel (link to slack channel in readme).
### Breaking changes
- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/master/public/app/plugins/plugin_api.md) for more info.
- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/main/public/app/plugins/plugin_api.md) for more info.
- **InfluxDB 0.8.x** The data source for the old version of influxdb (0.8.x) is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3523](https://github.com/grafana/grafana/issues/3523)
- **KairosDB** The data source is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3524](https://github.com/grafana/grafana/issues/3524)
- **Templating**: Templating value formats (glob/regex/pipe etc) are now handled automatically and not specified by the user, this makes variable values possible to reuse in many contexts. It can in some edge cases break existing dashboards that have template variables that do not reload on dashboard load. To fix any issue just go into template variable options and update the variable (so it's values are reloaded.).
@@ -100,7 +100,7 @@ See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4-
## Tech
- **Go**: Grafana is now built using golang 1.9
- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/master/PLUGIN_DEV.md) for more details on how this can effect some plugins.
- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/main/PLUGIN_DEV.md) for more details on how this can effect some plugins.
@@ -1291,4 +1291,4 @@ repo on July 1st. Make sure you have switched to the new repo by then. The new r
- **Text Panel**: The text panel does no longer by default allow unsanitized HTML. [#4117](https://github.com/grafana/grafana/issues/4117). This means that if you have text panels with scripts tags they will no longer work as before. To enable unsafe javascript execution in text panels enable the settings `disable_sanitize_html` under the section `[panels]` in your Grafana ini file, or set env variable `GF_PANELS_DISABLE_SANITIZE_HTML=true`.
- **Dashboard**: Panel property `minSpan` replaced by `maxPerRow`. Dashboard migration will automatically migrate all dashboard panels using the `minSpan` property to the new `maxPerRow` property [#12991](https://github.com/grafana/grafana/pull/12991)
For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/master/CHANGELOG_ARCHIVE.md)
For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/main/CHANGELOG_ARCHIVE.md)
We have upgraded AngularJS from version 1.6.6 to 1.8.2. Due to this upgrade some old angular plugins might stop working and will require a small update. This is due to the deprecation and removal of pre-assigned bindings. So if your custom angular controllers expect component bindings in the controller constructor you need to move this code to an `$onInit` function. For more details on how to migrate AngularJS code open the [migration guide](https://docs.angularjs.org/guide/migration) and search for **pre-assigning bindings**.
In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/master/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736)
In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/main/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736)
### Deprecations
@@ -1288,8 +1288,8 @@ This option to group query variable values into groups by tags has been an exper
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.
- **Backend plugins**: Grafana now requires backend plugins to be signed, otherwise Grafana will not load/start them. This is an additional security measure to make sure backend plugin binaries and files haven't been tampered with. Refer to [Upgrade Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#upgrading-to-v7-0) for more information.
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
**Deprecation warnings**
@@ -1304,7 +1304,7 @@ Not just visualizing data from anywhere, in Grafana 7 you can transform it too.
Data transformations will provide a common set of data operations that were previously duplicated as custom features in many panels or data sources but are now an integral part of the Grafana data processing pipeline and something all data sources and panels can take advantage of.
In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/master/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value).
In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/main/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value).
**Transformations shipping in 7.0**
@@ -1414,7 +1414,7 @@ We have also extended the time zone options so you can select any of the standar
### Features / Enhancements
- **Docker**: Upgrade to Alpine 3.11. [#24056](https://github.com/grafana/grafana/pull/24056), [@aknuds1](https://github.com/aknuds1)
- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed)
- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed)
### Bug Fixes
@@ -1429,7 +1429,7 @@ We have also extended the time zone options so you can select any of the standar
- **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer).
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds.
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10.
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.
@@ -1484,8 +1484,8 @@ We have also extended the time zone options so you can select any of the standar
- **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer).
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds.
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10.
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.
// need to ignore emotion's `css` prop, see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md#rule-options
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example:7.4.3,7.4.3-preview or 7.4.3-preview1'
required:true
env:
YARN_ENABLE_IMMUTABLE_INSTALLS:false
push:
default:true
required:false
dry_run:
default:false
required:false
jobs:
main:
runs-on:ubuntu-latest
steps:
# This is a basic workflow to help you get started with Actions
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example:7.4.3,7.4.3-preview or 7.4.3-preview1'
dry_run:
type:boolean
required:false
default:false
description:When enabled, this workflow will print a preview instead of creating an actual post.
secrets:
GRAFANA_MISC_STATS_API_KEY:
required:true
GRAFANABOT_FORUM_KEY:
required:true
workflow_dispatch:
inputs:
version:
type:string
required:true
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example:7.4.3,7.4.3-preview or 7.4.3-preview1'
dry_run:
type:boolean
required:false
default:false
description:When enabled, this workflow will print a preview instead of creating an actual post.
{pkg="github.com/grafana/grafana/pkg",desc="apiserver is not allowed to import grafana core"}
]
files=[
"**/pkg/apiserver/*",
"**/pkg/apiserver/**/*"
]
[linters-settings.depguard.rules.apimachinery]
list-mode="lax"
allow=[
"github.com/grafana/grafana/pkg/apimachinery",
]
deny=[
{pkg="github.com/grafana/grafana/pkg",desc="apimachinery is not allowed to import grafana core"}
]
files=[
"**/pkg/apimachinery/*",
"**/pkg/apimachinery/**/*"
]
[linters-settings.depguard.rules.promlib]
list-mode="lax"# allow unless explicitely denied
deny=[
{pkg="github.com/grafana/grafana/pkg",desc="promlib is not allowed to import grafana core"}
]
allow=[
"github.com/grafana/grafana/pkg/promlib"
]
files=[
"**/pkg/promlib/*",
"**/pkg/promlib/**/*"
]
[linters-settings.gocritic]
@@ -74,6 +121,9 @@ enabled-checks = ["ruleguard"]
[linters-settings.gocritic.settings.ruleguard]
rules="pkg/ruleguard.rules.go"
[linters-settings.misspell]
ignore-words=["Unknwon","Creater"]
[linters-settings.nakedret]
max-func-lines=60
@@ -85,7 +135,7 @@ enable = [
"dogsled",
"errcheck",
# "gochecknoinits",
"goconst",
# "goconst",
# "gocritic", # Temporarily disabled on 2022-09-09, running into weird bug "ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?"
"goimports",
"goprintffuncname",
@@ -116,6 +166,7 @@ enable = [
[issues]
exclude-use-default=false
max-same-issues=0
# Enable when appropriate
# Poorly chosen identifier
@@ -141,6 +192,13 @@ text = "SA1019: http.CloseNotifier"
linters=["staticcheck"]
text="SA1019: strings.Title"
# go.opentelemetry.io/otel/exporters/jaeger" is deprecated: This module is no longer supported. OpenTelemetry dropped support for Jaeger exporter in July 2023.
# Jaeger officially accepts and recommends using OTLP.
# Use [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp] or [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc] instead.
@@ -173,7 +173,7 @@ Supermajority votes must be called explicitly in a separate thread on the approp
Votes may take the form of a single proposal, with the option to vote yes or no, or the form of multiple alternatives.
A vote on a single proposal is considered successful if at least two thirds of those eligible to vote vote in favor.
A vote on a single proposal is considered successful if at least two thirds of those eligible to vote in favor.
If there are multiple alternatives, members may vote for one or more alternatives, or vote “no” to object to all alternatives. A vote on multiple alternatives is considered decided in favor of one alternative if it has received the most votes in favor, and a vote from at least two thirds of those eligible to vote. Should no alternative reach this quorum, another vote on a reduced number of options may be called separately.
The main goal of issue triage is to categorize all incoming Grafana issues and make sure each issue has all basic information needed for anyone else to understand and be able to start working on it.
> **Note:** This information is for Grafana project Maintainers, Owners, and Admins. If you are a Contributor, then you will not be able to perform most of the tasks in this topic.
The core maintainers of the Grafana project are responsible for categorizing all incoming issues and delegating any critical or important issue to other maintainers. Currently one maintainer each week is responsible. Besides that part, triage provides an important way to contribute to an open source project.
Triage helps ensure issues resolve quickly by:
- Ensuring the issue's intent and purpose is conveyed precisely. This is necessary because it can be difficult for an issue to explain how an end user experiences a problem and what actions they took.
- Giving a contributor the information they need before they commit to resolving an issue.
- Lowering the issue count by preventing duplicate issues.
- Streamlining the development process by preventing duplicate discussions.
If you don't have the knowledge or time to code, consider helping with triage. The community will thank you for saving them time by spending some of yours.
## Simplified flowchart diagram of the issue triage process
<!-- https://textik.com/#610afa78553def29 -->
```
+-------------------+
| |
| new issue/ | +
| more info added |
| |
+---------|---------+
|
+-------------|-----------+
| |
NO +------- all info needed to ------+ YES
| | categorize the issue? | |
| | | |
| +-------------------------+ |
+------|-----------+ +------------|----------+
| | | |
| label: | | label: type/* |
| needs more info | | label: area/* |
| | | label: datasource/* |
+------------------+ | | |
+------------|----------+
|
+--------|-------+
| |
NO +---------- is duplicate? --------------------+ YES
| | | |
| +----------------+ |
| +----------------|---------------+
+------|-----+ | |
| | | add comment: |
NO +------------ can repro? ------------+ YES | |
| | | | | /duplicate of #<issue number> |
| +------------+ | | |
| | +--------------------------------+
+-------------|-------------+ |
| | +--------|---------+
| label: | | |
| triage/needs-confirmation | NO +-------- needs priority? ------+ YES
To get started with issue triage and finding issues that haven't been triaged you have two alternatives.
### Browse unlabeled issues
The easiest and straight forward way of getting started and finding issues that haven't been triaged is to browse [unlabeled issues](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+no%3Alabel) and starting from the bottom and working yourself to the top.
### Subscribe to all notifications
The more advanced, but recommended way is to subscribe to all notifications from this repository which means that all new issues, pull requests, comments and important status changes are sent to your configured email address. Read this [guide](https://help.github.com/en/articles/watching-and-unwatching-repositories#watching-a-single-repository) for help with setting this up.
It's highly recommended that you setup filters to automatically remove emails from the inbox and label/categorize them accordingly to make it easy for you to understand when you need to act upon a notification or where to look for finding issues that haven't been triaged etc.
Instructions for setting up filters in Gmail can be found [here](#setting-up-gmail-filters). Another alternative is to use [Trailer](https://github.com/ptsochantaris/trailer) or similar software.
## 2. Ensure the issue contains basic information
Before triaging an issue very far, make sure that the issue's author provided the standard issue information. This will help you make an educated recommendation on how to categorize the issue. The Grafana project utilizes [GitHub issue templates](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) to guide contributors to provide standard information that must be included for each type of template or type of issue.
### Standard issue information that must be included
Given a certain [issue template](https://github.com/grafana/grafana/issues/new/choose) have been used by the issue author or depending how the issue is perceived by the issue triage responsible, the following should help you understand what standard issue information that must be included.
#### Bug reports
Should explain what happened, what was expected and how to reproduce it together with any additional information that may help giving a complete picture of what happened such as screenshots, [query inspector](https://community.grafana.com/t/using-grafanas-query-inspector-to-troubleshoot-issues/2630) output and any environment related information that's applicable and/or maybe related to the reported problem:
- Grafana version:
- Data source type & version:
- OS Grafana is installed on:
- User OS & Browser:
- Grafana plugins:
- Others:
#### Enhancement requests
Prior to August, 2023, community-submitted feature requests were submitted as [Github discussions](https://github.com/grafana/grafana/discussions). These are now submitted using the [feature request issue template](https://github.com/grafana/grafana/issues/new?assignees=&labels=type%2Ffeature-request&projects=&template=1-feature_requests.md).
When submitting an enhancement request we ask that users focus on the problem they'd like to solve and why it’s a problem rather than focusing on the solution itself. To facilitate this the feature requests template includes the following:
- What would you like to be added?:
- Why is this needed (describe your use case and goals)\*\*?:
#### Accessibility issues
This is a mix between a bug report and enhancement request but focused on accessibility issues to help make Grafana improve keyboard navigation, screen-reader support and being accessible to everyone. The report should include relevant [WCAG criteria](https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0), if applicable.
Grafana Labs is dedicated to improving our graphical user interfaces and overall experience so that our product becomes usable and accessible for people with disabilities as well as anyone else. Learn more about Grafana's commitment to [A11y](https://grafana.com/accessibility/) (accessibility).
#### Support requests
In general, if the issue description and title is perceived as a question no more information is needed. See how to categorize these requests [here](#support-requests-1).
### Good practices
To make it easier for everyone to understand and find issues they're searching for it's suggested as a general rule of thumbs to:
- Make sure that issue titles are named to explain the subject of the issue, has a correct spelling and doesn't include irrelevant information and/or sensitive information.
- Make sure that issue descriptions doesn't include irrelevant information, information from template that haven't been filled out and/or sensitive information.
- Do your best effort to change title and description or request suggested changes by adding a comment.
> **Note:** Above rules is applicable to both new and existing issues of the Grafana project.
### Do you have all the information needed to categorize an issue?
Depending on the issue, you might not feel all this information is needed. Use your best judgement. If you cannot triage an issue using what its author provided, explain kindly to the author that they must provide the above information to clarify the problem. Label issue with `needs more info` and add any related `area/*` or `datasource/*` labels. Alternatively, use `bot/needs more info` label and the Grafana bot will request it for you.
If the author provides the standard information but you are still unable to triage the issue, request additional information. Do this kindly and politely because you are asking for more of the author's time.
If the author does not respond to the requested information within the timespan of a week, close the issue with a kind note stating that the author can request for the issue to be reopened when the necessary information is provided.
When you feel you have all the information needed you're ready to [categorizing the issue](#3-categorizing-an-issue).
If you receive a notification with additional information provided but you are not anymore on issue triage and you feel you do not have time to handle it, you should delegate it to the current person on issue triage.
## 3. Categorizing an issue
An issue can have multiple of the following labels. Typically, a properly categorized issue should at least have:
- One label identifying its type (`type/*`).
- One or multiple labels identifying the functional areas of interest or component (`area/*`) and/or data source (`datasource/*`), if applicable.
| `type/bug` | A feature isn't working as expected given design or documentation. |
| `type/feature-request` | Request for a new feature or enhancement. |
| `type/docs` | Documentation problem or enhancement. |
| `type/accessibility` | Accessibility problem or enhancement. |
| `type/question` | Issue is a question or is perceived as such. |
| `type/duplicate` | An existing issue of the same subject/request have already been reported. |
| `type/works-as-intended` | A reported bug works as intended/by design. |
| `type/build-packaging` | Build or packaging problem or enhancement. |
| `area/*` | Subject is related to a functional area of interest or component. |
| `datasource/*` | Subject is related to a core data source plugin. |
### Duplicate issues
Make sure it's not a duplicate by searching existing issues using related terms from the issue title and description. If you think you know there is an existing issue, but can't find it, please reach out to one of the maintainers and ask for help. If you identify that the issue is a duplicate of an existing issue:
1. Add a comment `/duplicate of #<issue number>`. GitHub will recognize this and add some additional context to the issue activity.
2. The Grafana bot will do the rest, adding the correct label and closing comment
3. Add `type/duplicate` label. Optionally add any related `area/*` or `datasource/*` labels.
### Bug reports
If it's not perfectly clear that it's an actual bug, quickly try to reproduce it.
**It's a bug/it can be reproduced:**
1. Add a comment describing detailed steps for how to reproduce it, if applicable.
2. Label the issue `type/bug` and at least one `area/*` or `datasource/*` label.
3. If you know that maintainers wont be able to put any resources into it for some time then label the issue with `help wanted` and optionally `beginner friendly` together with pointers on which code to update to fix the bug. This should signal to the community that we would appreciate any help we can get to resolve this.
4. Move on to [prioritizing the issue](#4-prioritization-of-issues).
**It can't be reproduced:**
1. Either [ask for more information](#2-ensure-the-issue-contains-basic-information) needed to investigate it more thoroughly.
2. Either [delegate further investigations](#investigation-of-issues) to someone else.
**It works as intended/by design:**
1. Kindly and politely add a comment explaining briefly why we think it works as intended and close the issue.
2. Label the issue `type/works-as-intended`.
### Enhancement/feature?
1. Label the issue `type/feature-request` and add at least one `area/*` or `datasource/*` label.
2. Make sure the submitter has justified why this feature requests is important.
### Documentation issue?
First, evaluate if the documentation makes sense to be included in the Grafana project:
- Is this something we want/can maintain as a project?
- Is this referring to usage of some specific integration/tool and in that case is that a popular use case in combination with Grafana?
- If unsure, kindly and politely add a comment explaining that we would need [upvotes](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments) to identify that lots of other users want/need this.
Second, label the issue `type/docs` and at least one `area/*` or `datasource/*` label.
**Minor typo/error/lack of information:**
There's a minor typo/error/lack of information that adds a lot of confusion for users and given the amount of work is a big win to make sure fixing it:
1. Either update the documentation yourself and open a pull request.
2. Either delegate the work to someone else by assigning that person to the issue and add the issue to next major/minor milestone.
**Major error/lack of information:**
1. Label the issue with `help wanted` and `beginner friendly`, if applicable, to signal that we find this important to fix and we would appreciate any help we can get from the community.
2. Move on to [prioritizing the issue](#4-prioritization-of-issues).
### Accessibility issues
1. Label the issue `type/accessibility` and at least one `area/*` or `datasource/*` label.
### Support requests
1. Kindly and politely direct the issue author to the [community site](https://community.grafana.com/) and explain that GitHub is mainly used for tracking bugs and feature requests. If possible, it's usually a good idea to add some pointers to the issue author's question.
2. Label the issue with `bot/question`. The Grafana bot will automatically close the issue, and it will add the type/question label for you.
## 4. Prioritization of issues
In general bugs and enhancement issues should be labeled with a priority.
This is the most difficult thing with triaging issues since it requires a lot of knowledge, context and experience before being able to think of and start feel comfortable adding a certain priority label.
The key here is asking for help and discuss issues to understand how more experienced project members think and reason. By doing that you learn more and eventually be more and more comfortable with prioritizing issues.
In case there is an uncertainty around the prioritization of an issue, please ask the maintainers for help.
| `priority/critical` | Highest priority. Must be actively worked on as someone's top priority right now. |
| `priority/support-subscription` | This is important for one or several customers having a paid Grafana support subscription. |
| `priority/important-soon` | Must be staffed and worked on either currently, or very soon, ideally in time for the next release. |
| `priority/important-longterm` | Important over the long term, but may not be staffed and/or may need multiple releases to complete. |
| `priority/nice-to-have` | It's a good idea, but not scheduled for any release. |
| `priority/awaiting-more-evidence` | Lowest priority. Possibly useful, but not yet enough interest in it. |
| `priority/unscheduled` | Something to look into before and to be discussed during the planning of the next (upcoming) major/minor stable release. |
**Critical bugs**
1. If a bug has been categorized and any of the following criteria apply, the bug should be labeled as critical and must be actively worked on as someone's top priority right now.
- Results in any data loss
- Critical security or performance issues
- Problem that makes a feature unusable
- Multiple users experience a severe problem affecting their business, users etc.
2. Label the issue `priority/critical`.
3. If applicable, label the issue `priority/support-subscription`.
4. Add the issue to the next upcoming patch release milestone. Create a new milestone if there are none.
5. Escalate the problem to the maintainers.
6. Assign or ask a maintainer for help assigning someone to make this issue their top priority right now.
**Important short-term**
1. Label the issue `priority/important-soon`.
2. If applicable, label the issue `priority/support-subscription`.
3. Add the issue to the next upcoming patch or major/minor stable release milestone. Ask maintainers for help if unsure if it's a patch or not. Create a new milestone if there are none.
4. Make sure to add the issue to a suitable backlog of a GitHub project and prioritize it or assign someone to work on it now or very soon.
5. Consider requesting [help from the community](#5-requesting-help-from-the-community), even though it may be problematic given a short amount of time until it should be released.
**Important long-term**
1. Label the issue `priority/important-longterm`.
2. Consider requesting [help from the community](#5-requesting-help-from-the-community).
**Nice to have**
1. Label the issue `priority/nice-to-have`.
2. Consider requesting [help from the community](#5-requesting-help-from-the-community).
**Not critical, but unsure?**
1. Label the issue `priority/unscheduled`.
2. Consider requesting [help from the community](#5-requesting-help-from-the-community).
## 5. Requesting help from the community
Depending on the issue and/or priority, it's always a good idea to consider signalling to the community that help from community is appreciated and needed in case an issue is not prioritized to be worked on by maintainers. Use your best judgement. In general, requesting help from the community means that a contribution has a good chance of getting accepted and merged.
In many cases the issue author or community as a whole is more suitable to contribute changes since they're experts in their domain. It's also quite common that someone has tried to get something to work using the documentation without success and made an effort to get it to work and/or reached out to the [community site](https://community.grafana.com/) to get the missing information. Particularly in these areas it's more likely that there exist experts in their own domain and it is usually a good idea to request help from contributors:
- Database setups
- Authentication like OAuth providers and LDAP setups
- Platform specific things
- Reverse proxy setups
- Alert notifiers
1. Kindly and politely add a comment to signal to users subscribed to updates of the issue.
- Explain that the issue would be nice to get resolved, but it isn't prioritized to work on by maintainers for an unforeseen future.
- If possible or applicable, try to help contributors getting starting by adding pointers and references to what code/files need to be changed and/or ideas of a good way to solve/implement the issue.
2. Label the issue with `help wanted`.
3. If applicable, label the issue with `beginner friendly` to denote that the issue is suitable for a beginner to work on.
4. If possible, try to estimate the amount of work by adding `effort/small`, `effort/medium` or `effort/large`.
## Investigation of issues
When an issue has all basic information provided, but the triage responsible haven't been able to reproduce the reported problem at a first glance, the issue is labeled [`triage/needs-confirmation`](https://github.com/grafana/grafana/labels/triage%2Fneeds-confirmation). Depending on the perceived severity and/or number of [upvotes](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments), the investigation will either be delegated to another maintainer for further investigation or put on hold until someone else (maintainer or contributor) picks it up and eventually starts investigating it.
Investigating issues can be a very time consuming task, especially for the maintainers, given the huge number of combinations of plugins, data sources, platforms, databases, browsers, tools, hardware, integrations, versions and cloud services, etc that are being used with Grafana. There is a certain number of combinations that are more common than others, and these are in general easier for maintainers to investigate.
For some other combinations it may not be possible at all for a maintainer to setup a proper test environment to investigate the issue. In these cases we really appreciate any help we can get from the community. Otherwise the issue is highly likely to be closed.
Even if you don't have the time or knowledge to investigate an issue we highly recommend that you [upvote](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments) the issue if you happen to have the same problem. If you have further details that may help investigating the issue please provide as much information as possible.
## Automation
We have some automation that triggers on comments or labels being added to issues. Many of these automated behaviors are defined in [commands.json](https://github.com/grafana/grafana/blob/main/.github/commands.json). Or in other [GitHub Actions](https://github.com/grafana/grafana/tree/main/.github/workflows)
[Read more on bot actions](https://github.com/grafana/grafana/blob/main/.github/bot.md)
## External PRs
Part of issue triage should also be triaging of external PRs. Main goal should be to make sure PRs from external contributors have an owner/reviewer and are not forgotten.
1. Check new external PRs which do not have a reviewer. You can easily search for pull requests made by external contributors by using the label: `pr/external` in your [query search](https://github.com/grafana/grafana/pulls?q=is%3Aopen+is%3Apr+label%3Apr%2Fexternal) Note: external PRs are automatically labeled with `pr/external` upon creation.
2. Check if there is a link to an existing issue. The link to a existing issue should be in the description section, underneath “Which issue(s) does this PR fix?:”.
3. If not and you know which issue it is solving, add the link yourself, otherwise ask the author to link the issue or create one.
4. Assign a reviewer based on who was handling the linked issue or what code or feature does the PR touches (look at who was the last to make changes there if all else fails).
## Appendix
### Setting up Gmail filters
If you're using Gmail it's highly recommended that you setup filters to automatically remove email from the inbox and label them accordingly to make it easy for you to understand when you need to act upon a notification or process all incoming issues that haven't been triaged.
This may be setup by personal preference, but here's a working configuration for reference.
1. Follow instructions in [gist](https://gist.github.com/marefr/9167c2e31466f6316c1cba118874e74f)
2. In Gmail, go to Settings -> Filters and Blocked Addresses
3. Import filters -> select xml file -> Open file
4. Review filters
5. Optional, Check Apply new filters to existing email
6. Create filters
This will give you a structure of labels in the sidebar similar to the following:
```
- Inbox
...
- GitHub (mine)
- activity
- assigned
- mentions
- GitHub (other)
- Grafana
```
- All notifications you’ll need to read/take action on show up as unread in GitHub (mine) and its sub-labels.
- All other notifications you don’t need to take action on show up as unread in GitHub (other) and its sub-labels
- This is convenient for issue triage and to follow the activity in the Grafana project.
Upgrading Go or Node.js requires making changes in many different files. See below for a list and explanation for each.
## Go
- Drone
-`grafana/build-container`
- Appveyor
- Dockerfile
## Node.js
- Drone
-`grafana/build-container`
- Appveyor
- Dockerfile
-`.github/workflows/publish.yml`
## Go dependencies
The Grafana project uses [Go modules](https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more) to manage dependencies on external packages. This requires a working Go environment with version 1.11 or greater installed.
To add or update a new dependency, use the `go get` command:
```bash
go get example.com/some/module/pkg
# Pick a specific version.
go get example.com/some/module/pkg@vX.Y.Z
```
Tidy up the `go.mod` and `go.sum` files:
```bash
go mod tidy
```
You have to commit the changes to `go.mod` and `go.sum` before submitting the pull request.
To understand what the actual dependencies of `grafana-server` are, one could run it with `-vv` flag. This might produce an output, different from `go.mod` contents and `-vv` option is the source of truth here. It lists the modules _compiled_ into the executable, while `go.mod` lists also test and weak transitive dependencies (modules, used in some package, which is not in use by itself). If you are interested in reporting a vulnerability in a dependency module - please consult `-vv` output, maybe the "dependency" is not a dependency as such.
### Upgrading dependencies
If you need to upgrade a direct or indirect dependency, you can do it like so, $MODULE being the dependency in question: `go get -u $MODULE`. The corresponding entry in go.mod should then have the version you specified; if it's an indirect dependency, the entry should have the `// indirect` comment. Follow this by executing `go mod tidy`, to ensure that go.mod and go.sum are up to date. If the indirect dependency turns out to not be used (transitively) by any of our packages, `go mod tidy` will actually strip it from go.mod. In that case, you can just ignore it since it isn't used in the end.
Main and release builds trigger test runs on Appveyors build environment so that tests will run on Windows.
#### Files:
-`appveyor.yml`
#### Dependencies
- nodejs
- golang
### Dockerfile
There is a Docker build for Grafana in the root of the project that allows anyone to build Grafana just using Docker.
#### Files
-`Dockerfile`
#### Dependencies
- nodejs
- golang
### Local developer environments
Please send out a notice in the grafana-dev slack channel when updating Go or Node.js to make it easier for everyone to update their local developer environments.
@@ -14,7 +14,7 @@ Team members and their access to repositories is maintained through [GitHub team
Examples of proposed changes are overarching architecture, component design, and specific code or graphical elements. Proposed changes SHOULD cover the big picture and intention, but individual parts SHOULD be split into the smallest possible changes. Changes SHOULD be based on and target the main branch. Depending on size of the proposed change, each change SHOULD be discussed, in increasing order of change size and complexity:
- Directly in a RR (Pull Request) - this MAY be done, but SHOULD not be the common case.
- Directly in a PR (Pull Request) - this MAY be done, but SHOULD not be the common case.
- Issue
- Developer mailing list
- Design document, shared via Google Docs, accessible to at least all team members.
@@ -44,7 +44,7 @@ Once a PR is approved as per above, any team member MAY merge the PR.
## Backporting a PR
Critical bug fixes needed for a previous minor release should be backported to the respective release branches after coordinating with the delivery team.
Please see the [contibution guide](./contribute/merge-pull-request.md#should-the-pull-request-be-backported) for further details.
Please see the [contribution guide](./contribute/merge-pull-request.md#should-the-pull-request-be-backported) for further details.
# For "mysql", use either "true", "false", or "skip-verify".
ssl_mode=disable
# For "postgres", use either "1" to enable or "0" to disable SNI
ssl_sni=
# Database drivers may support different transaction isolation levels.
# Currently, only "mysql" driver supports isolation levels.
# If the value is empty - driver's default isolation level is applied.
@@ -154,7 +168,10 @@ cache_mode = private
# For "sqlite3" only. Enable/disable Write-Ahead Logging, https://sqlite.org/wal.html. Default is false.
wal=false
# For "mysql" only if migrationLocking feature toggle is set. How many seconds to wait before failing to lock the database for the migrations, default is 0.
# For "mysql" and "postgres". Lock the database for the migrations, default is true.
migration_locking=true
# For "mysql" and "postgres" only if migrationLocking is set. How many seconds to wait before failing to lock the database for the migrations, default is 0.
locking_attempt_timeout_sec=0
# For "sqlite" only. How many times to retry query in case of database is locked failures. Default is 0 (disabled).
# Require email validation before sign up completes
verify_email_enabled=false
# Redirect to default OrgId after login
login_default_org_id=
# Background text for the user field on the login page
login_hint=email or username
password_hint=password
login_hint=
password_hint=
# Default UI theme ("dark" or "light" or "system")
default_theme=dark
@@ -496,6 +516,9 @@ editors_can_admin = false
# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes).
user_invite_max_lifetime_duration=24h
# The duration in time a verification email, used to update the email address of a user, remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 1h (1 hour).
verification_email_max_lifetime_duration=1h
# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
hidden_users=
@@ -552,10 +575,6 @@ oauth_auto_login = false
# OAuth state max age cookie duration in seconds. Defaults to 600 seconds.
oauth_state_cookie_max_age=600
# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins
# Deprecated, use skip_org_role_sync option for specific provider instead.
oauth_skip_org_role_update_sync=false
# limit of api_key seconds to live before expiration
# A customized list of Azure cloud settings and properties, used by data sources which need this information when run in non-standard azure environments
# When specified, this list will replace the default cloud list of AzureCloud, AzureChinaCloud, AzureUSGovernment and AzureGermanCloud
clouds_config=
# Specifies whether Grafana hosted in Azure service with Managed Identity configured (e.g. Azure Virtual Machines instance)
# If enabled, the managed identity can be used for authentication of Grafana in Azure services
# Disabled by default, needs to be explicitly enabled
# Disabled by default, needs to be explicitly enabled
user_identity_enabled=false
# Specifies whether user identity authentication fallback credentials should be enabled in data sources
# Enabling this allows data source creators to provide fallback credentials for backend initiated requests
# e.g. alerting, recorded queries etc.
# Enabled by default, needs to be explicitly disabled
# Will not have any effect if user identity is disabled above
user_identity_fallback_credentials_enabled=true
# Override token URL for Azure Active Directory
# By default is the same as token URL configured for AAD authentication settings
user_identity_token_url=
@@ -942,6 +981,11 @@ user_identity_client_id =
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
user_identity_client_secret=
# Allows the usage of a custom token request assertion when Grafana is behind an authentication proxy
# In most cases this will not need to be used. To enable this set the value to "username"
# The default is empty and any other value will not enable this functionality
username_assertion=
# Set the plugins that will receive Azure settings for each request (via plugin context)
# By default this will include all Grafana Labs owned Azure plugins, or those that make use of Azure settings (Azure Monitor, Azure Data Explorer, Prometheus, MSSQL).
# Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed when switching. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
# Enable the Alerting sub-system and interface.
enabled=
# Comma-separated list of organization IDs for which to disable unified alerting. Only supported if unified alerting is enabled.
# Listen address/hostname and port to receive unified alerting messages for other Grafana instances. The port is used for both TCP and UDP. It is assumed other Grafana instances are also running on the same port.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
ha_push_pull_interval=60s
# Enable or disable alerting rule execution. The alerting UI remains visible. This option has a legacy version in the `[alerting]` section that takes precedence.
# Enable or disable alerting rule execution. The alerting UI remains visible.
execute_alerts=true
# Alert evaluation timeout when fetching data from the datasource. This option has a legacy version in the `[alerting]` section that takes precedence.
# Alert evaluation timeout when fetching data from the datasource.
# The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
evaluation_timeout=30s
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1.
max_attempts=1
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence.
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
# Enable the legacy alerting sub-system and interface. If Unified Alerting is already enabled and you try to go back to legacy alerting, all data that is part of Unified Alerting will be deleted. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
enabled=
# Makes it possible to turn off alert execution but alerting UI is visible
execute_alerts=true
# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
error_or_timeout=alerting
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
nodata_or_nullvalues=no_data
# Alert notifications can include images, but rendering many images at the same time can overload the server
# This limit will protect the server from render overloading and make sure notifications are sent out quickly
concurrent_render_limit=5
# Default setting for alert calculation timeout. Default value is 30
evaluation_timeout_seconds=30
# Default setting for alert notification timeout. Default value is 30
notification_timeout_seconds=30
# Default setting for max attempts to sending alert notifications. Default value is 3
max_attempts=3
# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend
min_interval_seconds=1
# Configures for how long alert annotations are stored. Default is 0, which keeps them forever.
# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month).
max_annotation_age=
# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations.
# Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
@@ -1425,6 +1476,11 @@ concurrent_query_limit =
# Enable the Query history
enabled=true
#################################### Short Links #############################
[short_links]
# Short links which are never accessed will be deleted as cleanup. Time is in days. Default is 7 days. Max is 365. 0 means they will be deleted approximately every 10 minutes.
# For "mysql", use either "true", "false", or "skip-verify".
;ssl_mode = disable
# For "postgres", use either "1" to enable or "0" to disable SNI
;ssl_sni =
# Database drivers may support different transaction isolation levels.
# Currently, only "mysql" driver supports isolation levels.
# If the value is empty - driver's default isolation level is applied.
@@ -156,7 +160,10 @@
# For "sqlite3" only. Enable/disable Write-Ahead Logging, https://sqlite.org/wal.html. Default is false.
;wal = false
# For "mysql" only if migrationLocking feature toggle is set. How many seconds to wait before failing to lock the database for the migrations, default is 0.
# For "mysql" and "postgres" only. Lock the database for the migrations, default is true.
;migration_locking = true
# For "mysql" and "postgres" only. How many seconds to wait before failing to lock the database for the migrations, default is 0.
;locking_attempt_timeout_sec = 0
# For "sqlite" only. How many times to retry query in case of database is locked failures. Default is 0 (disabled).
@@ -376,8 +383,8 @@
# $NONCE in the template includes a random nonce.
# $ROOT_PATH is server.root_url without the protocol.
# Controls if old angular plugins are supported or not. This will be disabled by default in future release
;angular_support_enabled = true
# Controls if old angular plugins are supported or not.
;angular_support_enabled = false
# List of additional allowed URLs to pass by the CSRF check, separated by spaces. Suggested when authentication comes from an IdP.
;csrf_trusted_origins = example.com
@@ -449,6 +456,9 @@
# Require email validation before sign up completes
;verify_email_enabled = false
# Redirect to default OrgId after login
;login_default_org_id =
# Background text for the user field on the login page
;login_hint = email or username
;password_hint = password
@@ -476,6 +486,9 @@
# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes).
;user_invite_max_lifetime_duration = 24h
# The duration in time a verification email, used to update the email address of a user, remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 1h (1 hour).
;verification_email_max_lifetime_duration = 1h
# Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves.
; hidden_users =
@@ -533,10 +546,6 @@
# OAuth state max age cookie duration in seconds. Defaults to 600 seconds.
;oauth_state_cookie_max_age = 600
# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins
# Deprecated, use skip_org_role_sync option for specific provider instead.
;oauth_skip_org_role_update_sync = false
# limit of api_key seconds to live before expiration
# A customized list of Azure cloud settings and properties, used by data sources which need this information when run in non-standard azure environments
# When specified, this list will replace the default cloud list of AzureCloud, AzureChinaCloud, AzureUSGovernment and AzureGermanCloud
# By default is the same as token URL configured for AAD authentication settings
;user_identity_token_url =
@@ -869,6 +911,11 @@
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
;user_identity_client_secret =
# Allows the usage of a custom token request assertion when Grafana is behind an authentication proxy
# In most cases this will not need to be used. To enable this set the value to "username"
# The default is empty and any other value will not enable this functionality
;username_assertion =
# Set the plugins that will receive Azure settings for each request (via plugin context)
# By default this will include all Grafana Labs owned Azure plugins, or those that make use of Azure settings (Azure Monitor, Azure Data Explorer, Prometheus, MSSQL).
# Listen address/hostname and port to receive unified alerting messages for other Grafana instances. The port is used for both TCP and UDP. It is assumed other Grafana instances are also running on the same port. The default value is `0.0.0.0:9094`.
;ha_listen_address = "0.0.0.0:9094"
@@ -1112,17 +1195,17 @@
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
;ha_push_pull_interval = "60s"
# Enable or disable alerting rule execution. The alerting UI remains visible. This option has a legacy version in the `[alerting]` section that takes precedence.
# Enable or disable alerting rule execution. The alerting UI remains visible.
;execute_alerts = true
# Alert evaluation timeout when fetching data from the datasource. This option has a legacy version in the `[alerting]` section that takes precedence.
# Alert evaluation timeout when fetching data from the datasource.
# The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
;evaluation_timeout = 30s
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1.
;max_attempts = 1
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence.
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
;min_interval = 10s
@@ -1139,6 +1222,9 @@
# Rules will evaluate in sync.
;disable_jitter = false
# Retention period for Alertmanager notification log entries.
;notification_log_retention = 5d
[unified_alerting.reserved_labels]
# Comma-separated list of reserved labels added by the Grafana Alerting engine that should be disabled.
# For example: `disabled_labels=grafana_folder`
@@ -1189,54 +1275,25 @@
# Optional password for basic authentication on requests sent to Loki. Can be left blank.
; loki_basic_auth_password = "mypass"
# For "loki" only.
# Optional max query length for queries sent to Loki. Default is 721h which matches the default Loki value.
; loki_max_query_length = 360h
[unified_alerting.state_history.external_labels]
# Optional extra labels to attach to outbound state history records or log streams.
# Any number of label key-value-pairs can be provided.
; mylabelkey = mylabelvalue
[unified_alerting.upgrade]
# If set to true when upgrading from legacy alerting to Unified Alerting, grafana will first delete all existing
# Unified Alerting resources, thus re-upgrading all organizations from scratch. If false or unset, organizations that
# have previously upgraded will not lose their existing Unified Alerting data when switching between legacy and
# Unified Alerting. Should be kept false when not needed as it may cause unintended data-loss if left enabled.
The main goal of issue triage is to categorize all incoming Grafana issues and make sure each issue has all the essential information needed for anyone to understand and be able to start working on it.
> **Note:** This information is for Grafana project Maintainers, Owners, and Admins. If you are a Contributor, then you won't be able to perform most of the tasks in this topic.
The core maintainers of the Grafana project are responsible for categorizing all incoming issues and delegating any critical or important issue to other maintainers. Currently, one maintainer each week is responsible. Besides that part, triage provides an important way to contribute to an open source project.
## Simplified flowchart diagram of the issue triage process
<!-- https://textik.com/#610afa78553def29 -->
```
+-------------------+
| |
| new issue/ | +
| more info added |
| |
+---------|---------+
|
+-------------|-----------+
| |
NO +------- all info needed to ------+ YES
| | categorize the issue? | |
| | | |
| +-------------------------+ |
+------|-----------+ +------------|----------+
| | | |
| label: | | label: type/* |
| needs more info | | label: area/* |
| | | label: datasource/* |
+------------------+ | | |
+------------|----------+
|
+--------|-------+
| |
NO +---------- is duplicate? --------------------+ YES
| | | |
| +----------------+ |
| +----------------|---------------+
+------|-----+ | |
| | | add comment: |
NO +------------ can repro? ------------+ YES | |
| | | | | /duplicate of #<issue number> |
| +------------+ | | |
| | +--------------------------------+
+-------------|-------------+ |
| | +--------|---------+
| label: | | |
| triage/needs-confirmation | NO +-------- needs priority? ------+ YES
- Ensuring the issue's intent and purpose is conveyed precisely. This is necessary because it can be difficult for an issue to explain how an end user experiences a problem and what actions they took.
- Giving a contributor the information they need before they commit to resolving an issue.
- Lowering the issue count by preventing duplicate issues.
- Streamlining the development process by preventing duplicate discussions.
If you don't have the knowledge or time to code, consider helping with triage. The community will thank you for saving them time by spending some of yours.
### 1. Find uncategorized issues
To get started with issue triage and finding issues that haven't been triaged you have two alternatives.
#### Browse unlabeled issues
The easiest and most straightforward way of getting started and finding issues that haven't been triaged is to browse [unlabeled issues](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+no%3Alabel), and then work on them starting from the bottom to the top.
#### Subscribe to all notifications
The more advanced, but recommended way is to subscribe to all notifications from this repository which means that all new issues, pull requests, comments and important status changes are sent to your configured email address. Read this [guide](https://help.github.com/en/articles/watching-and-unwatching-repositories#watching-a-single-repository) for help with setting this up.
It's highly recommended that you set up filters to automatically remove emails from the inbox and label them accordingly. When issues are properly categorized you can easily understand when you need to act upon a notification or where to look to find issues that haven't been triaged.
Instructions for setting up filters in Gmail can be found [here](#setting-up-gmail-filters). Another alternative is to use [Trailer](https://github.com/ptsochantaris/trailer) or similar software.
### 2. Ensure the issue contains basic information
Before triaging an issue very far, make sure that the issue's author provided the standard information. This helps you make an educated recommendation on how to categorize the issue. The Grafana project uses [GitHub issue templates](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) to guide contributors to provide standard information that must be included for each type of template or type of issue.
#### Standard issue information that must be included
Grafana uses various [issue templates](https://github.com/grafana/grafana/issues/new/choose) to collect information from the issue reporter. The following list describes the standard information that is included.
##### Bug reports
Bug reports should explain what happened, what was expected, and how to reproduce it. Also, it should include additional information that may help giving a complete picture of what happened such as screenshots, [query inspector](https://community.grafana.com/t/using-grafanas-query-inspector-to-troubleshoot-issues/2630) output, and any relevant information about the environment. For example:
- Grafana version:
- Data source type & version:
- OS Grafana is installed on:
- User OS & Browser:
- Grafana plugins:
- Others:
##### Enhancement requests
> **Note:** Prior to August, 2023, community-submitted feature requests were submitted as [Github discussions](https://github.com/grafana/grafana/discussions). These are now submitted using the [feature request issue template](https://github.com/grafana/grafana/issues/new?assignees=&labels=type%2Ffeature-request&projects=&template=1-feature_requests.md).
When submitting an enhancement request we ask that users focus on the problem they'd like to solve and why it’s a problem rather than focusing on the solution itself. To facilitate these objectives, the feature requests template includes the following:
- What would you like to be added?:
- Why is this needed (describe your use case and goals)\*\*?:
##### Accessibility issues
This is a mix between a bug report and enhancement request but focused on accessibility issues to help make Grafana improve keyboard navigation, screen-reader support, and general accessibility. The report should include relevant [WCAG criteria](https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0), if applicable.
Grafana Labs is dedicated to improving our graphical user interfaces and overall experience so that our product becomes usable and accessible for people with disabilities as well as anyone else. Learn more about Grafana's commitment to [A11y](https://grafana.com/accessibility/) (accessibility).
##### Support requests
In general, if the issue description and title is perceived as a question no more information is needed. See how to categorize these requests [here](#support-requests-1).
#### Good practices
To make it easier for everyone to understand and find issues a good rule of thumbs is to:
- Make sure that issue titles are named to explain the subject of the issue, are spelled correctly, and don't include irrelevant or sensitive information.
- Make sure that issue descriptions don't include irrelevant information, information from a template that hasn't been filled out, or sensitive information.
- Do your best effort to change the title and description or request suggested changes by adding a comment.
#### Do you have all the information needed to categorize an issue?
Depending on the issue, you might not feel all this information is needed. Use your best judgement. If you cannot triage an issue using what its author provided, explain kindly to the author that they must provide the previously mentioned information to clarify the problem. Label issue with `needs more info` and add any related `area/*` or `datasource/*` labels. Alternatively, use `bot/needs more info` label and the Grafana bot will request it for you.
If the author provides the standard information, but you are still unable to triage the issue, request additional information. Do this kindly and politely because you are asking for more of the author's time.
If the author does not respond to the requested information within a week, close the issue with a kind note stating that the author can request for the issue to be reopened when the necessary information is provided.
When you feel you have all the information needed, then you're ready to [categorize the issue](#3-categorize-an-issue).
If you receive a notification with additional information provided, but you aren't on issue triage anymore and you feel you don't have time to handle it, you should delegate it to the current person on issue triage.
### 3. Categorize an issue
An issue can have multiple labels. Typically, a properly categorized issue should at least have these labels:
- One label identifying its type (`type/*`).
- One or multiple labels identifying the functional areas of interest or component (`area/*`) and/or data source (`datasource/*`), if applicable.
| `type/bug` | A feature isn't working as expected given design, or documentation. |
| `type/feature-request` | Request for a new feature, or enhancement. |
| `type/docs` | Documentation problem, or enhancement. |
| `type/accessibility` | Accessibility problem, or enhancement. |
| `type/question` | Issue is a question or is perceived as such. |
| `type/duplicate` | An existing issue of the same subject has already been reported. |
| `type/works-as-intended` | A reported bug works as intended (that is, by design). |
| `type/build-packaging` | Build or packaging problem, or enhancement. |
| `area/*` | Subject is related to a functional area of interest, or component. |
| `datasource/*` | Subject is related to a core data source plugin. |
#### Duplicate issues
Make sure it's not a duplicate by searching existing issues using related terms from the issue title and description. If you think you know there is an existing issue, but can't find it, please reach out to one of the maintainers and ask for help. If you identify that the issue is a duplicate of an existing issue:
1. Add a comment `/duplicate of #<issue number>`. GitHub will recognize this and add some additional context to the issue activity.
1. The Grafana bot will do the rest, adding the correct label and a closing comment.
1. Add the `type/duplicate` label. Optionally, you may add any related `area/*` or `datasource/*` labels.
#### Bug reports
If it's not perfectly clear that it's an actual bug, quickly try to reproduce it.
**It can be reproduced:**
1. Add a comment describing detailed steps for how to reproduce it, if applicable.
1. Label the issue `type/bug` and at least one `area/*` or `datasource/*` label.
1. If you know that maintainers won't be able to put any resources into it for some time then label the issue with `help wanted` and optionally `beginner friendly` together with pointers on which code to update to fix the bug. This should signal to the community that we would appreciate any help we can get to resolve this.
1. Move on to [prioritizing the issue](#4-prioritization-of-issues).
**It can't be reproduced:**
1. Either [ask for more information](#2-ensure-the-issue-contains-basic-information) needed to investigate it more thoroughly.
1. Either [delegate further investigations](#investigation-of-issues) to someone else.
**It works as intended (that is, by design):**
1. Kindly and politely add a comment explaining briefly why we think it works as intended and close the issue.
1. Label the issue `type/works-as-intended`.
#### Enhancement or feature request?
1. Label the issue `type/feature-request` and add at least one `area/*` or `datasource/*` label.
1. Make sure the submitter has justified why this feature requests is important.
#### Documentation issue?
First, evaluate if the documentation makes sense to be included in the Grafana project:
- Is this something we want and can maintain as a project?
- Is this referring to usage of some specific integration and in that case is that a popular use case in combination with Grafana?
- If unsure, kindly and politely add a comment explaining that we would need [upvotes](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments) to identify that lots of other users want or need this.
Second, label the issue `type/docs` and at least one `area/*` or `datasource/*` label.
**Minor typo/error/lack of information:**
There's a minor typo, error, or lack of information that adds a lot of confusion for users and is a big win to fix it:
1. Either update the documentation yourself and open a pull request.
1. Either delegate the work to someone else by assigning that person to the issue. Note that the milestone is automatically assigned and usually doesn't need to be manually edited.
**Major error/lack of information:**
1. Label the issue with `help wanted` and `beginner friendly`, if applicable, to signal that we find this important to fix and we would appreciate any help we can get from the community.
1. Move on to [prioritizing the issue](#4-prioritization-of-issues).
#### Accessibility issues
1. Label the issue `type/accessibility` and at least one `area/*` or `datasource/*` label.
#### Support requests
1. Kindly and politely direct the issue author to the [community site](https://community.grafana.com/) and explain that GitHub is mainly used for tracking bugs and feature requests. If possible, it's usually a good idea to add some pointers to the issue author's question.
1. Label the issue with `bot/question`. The Grafana bot will automatically close the issue, and it will add the type/question label for you.
### 4. Prioritization of issues
In general, bugs and enhancement issues should be labeled with a priority.
This is the most difficult thing with triaging issues since it requires a lot of knowledge, context and experience before it is possible to skillfully add a specific priority label.
The key here is to ask for help and discuss issues to understand how more experienced project members think and reason. By doing that you learn more and eventually be more and more comfortable with prioritizing issues.
In case there is an uncertainty around the prioritization of an issue, please ask the maintainers for help.
| `priority/critical` | Highest priority. Must be actively worked on as someone's top priority right now. |
| `priority/support-subscription` | This is important for one or several customers having a paid Grafana support subscription. |
| `priority/important-soon` | Must be staffed and worked on either currently, or very soon, ideally in time for the next release. |
| `priority/important-longterm` | Important over the long term, but may need multiple releases to complete. |
| `priority/nice-to-have` | It's a good idea, but not scheduled for any release. |
| `priority/awaiting-more-evidence` | Lowest priority. Possibly useful, but not yet enough interest in it. |
| `priority/unscheduled` | Something to look into before and to be discussed during the planning of the next major/minor stable release. |
**Critical bugs**
1. If a bug has been categorized and any of the following criteria apply, the bug should be labeled as critical and must be actively worked on as someone's top priority right now:
- Results in any data loss
- Critical security or performance issues
- Problem that makes a feature unusable
- Multiple users experience a severe problem affecting their business, user experience, and so on.
1. Label the issue `priority/critical`.
1. If applicable, label the issue `priority/support-subscription`.
1. Add the issue to the next upcoming patch release milestone. Create a new milestone if there are none.
1. Escalate the problem to the maintainers.
1. Assign or ask a maintainer for help assigning someone to make this issue their top priority right now.
**Important short-term**
1. Label the issue `priority/important-soon`.
1. If applicable, label the issue `priority/support-subscription`.
1. Add the issue to the next upcoming patch or major/minor stable release milestone. Ask maintainers for help if unsure if it's a patch or not. Create a new milestone if there are none.
1. Make sure to add the issue to a suitable backlog of a GitHub project and prioritize it or assign someone to work on it now or very soon.
1. Consider requesting [help from the community](#5-requesting-help-from-the-community), even though it may be problematic given a short amount of time until it should be released.
**Important long-term**
1. Label the issue `priority/important-longterm`.
1. Consider requesting [help from the community](#5-requesting-help-from-the-community).
**Nice to have**
1. Label the issue `priority/nice-to-have`.
1. Consider requesting [help from the community](#5-requesting-help-from-the-community).
**Not critical, but unsure?**
1. Label the issue `priority/unscheduled`.
1. Consider requesting [help from the community](#5-request-help-from-the-community).
### 5. Request help from the community
It's generally a good idea to consider signaling to the community that help is appreciated and needed in case an issue isn't prioritized to be worked on by maintainers. Use your best judgement. In general, requesting help from the community means that a contribution has a good chance of getting accepted and merged.
In many cases the issue author or community as a whole is more suitable to contribute changes since they're experts in their domain. It's also quite common that someone has tried to get something to work using the documentation without success, made an effort to get it to work, reached out to the [community site](https://community.grafana.com/) to get the missing information, or some combination of these things.
In certain areas there probably exist domain experts who may be able to help:
- Database setups
- Authentication like OAuth providers and LDAP setups
- Platform-specific things
- Reverse proxy setups
- Alert notifiers
1. Kindly and politely add a comment to signal to users subscribed to updates of the issue.
- Explain that the issue would be nice to get resolved, but it isn't prioritized to work on by maintainers for an unforeseen future.
- If possible or applicable, try to help contributors getting starting by adding pointers and references to what code needs to be changed. Note any suggests for good ways of solving or implementing the issue.
1. Label the issue with `help wanted`.
1. If applicable, label the issue with `beginner friendly` to denote that the issue is suitable for a beginner to work on.
1. If possible, try to estimate the amount of work by adding `effort/small`, `effort/medium` or `effort/large`.
### Investigation of issues
When an issue has all basic information provided, but the triage responsible hasn't been able to reproduce the reported problem at a first glance, the issue is labeled [`triage/needs-confirmation`](https://github.com/grafana/grafana/labels/triage%2Fneeds-confirmation). Depending on the perceived severity and/or number of [upvotes](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments), the investigation will either be delegated to another maintainer for further investigation or put on hold until someone else (maintainer or contributor) picks it up and eventually starts investigating it.
Investigating issues can be a very time consuming task, especially for the maintainers, given the huge number of combinations of plugins, data sources, platforms, databases, browsers, hardware, integrations, cloud services, and so on, that are used with Grafana. There are a certain number of combinations that are more common than others, and these are in general easier for maintainers to investigate.
For some other combinations it may not be possible at all for a maintainer to setup a proper test environment to investigate the issue. In these cases we really appreciate any help we can get from the community. Otherwise, the issue is highly likely to be closed.
Even if you don't have the time or knowledge to investigate an issue we highly recommend that you [upvote](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments) the issue if you happen to have the same problem. If you have further details that may help investigating the issue, please provide as much information as possible.
### Automation
We have some automation that triggers on comments or labels being added to issues. Many of these automated behaviors are defined in [commands.json](https://github.com/grafana/grafana/blob/main/.github/commands.json). Or in other [GitHub Actions](https://github.com/grafana/grafana/tree/main/.github/workflows)
To learn more about bot actions, refer to our [bot documentation](https://github.com/grafana/grafana/blob/main/.github/bot.md).
### External PRs
Part of issue triage should also be triaging of external PRs. The main goal should be to make sure PRs from external contributors have an owner and aren't forgotten.
1. Check new external PRs which don't have a reviewer. You can easily search for pull requests made by external contributors by using the label: `pr/external` in your [query search](https://github.com/grafana/grafana/pulls?q=is%3Aopen+is%3Apr+label%3Apr%2Fexternal) Note: external PRs are automatically labeled with `pr/external` upon creation.
1. Check if there is a link to an existing issue. The link to a existing issue should be in the description section, underneath “Which issue(s) does this PR fix?:”. If not, and you know which issue it is solving, add the link yourself. Otherwise, ask the author to link the issue or create one.
1. Assign a reviewer based on who was handling the linked issue or what code or feature the PR touches (if all else fails, look at who was the last to make changes).
### Appendix
#### Setting up Gmail filters
If you're using Gmail, a best practice is to set up filters to automatically remove emails from the inbox and label them to make it easy for you to understand when you need to act upon a notification. You should be able to promptly process all incoming issues that haven't been triaged.
This may be set up by personal preference, but here's a working configuration for reference:
1. Follow instructions in [gist](https://gist.github.com/marefr/9167c2e31466f6316c1cba118874e74f)
1. In Gmail, go to **Settings** -> **Filters and Blocked Addresses**.
1. On the menu, select **Import filters**, then select and open the XML file.
1. Review the filters.
1. Optional: Select **Apply new filters to existing email**.
1. Create filters.
This gives you a structure of labels in the sidebar similar to the following:
```
- Inbox
...
- GitHub (mine)
- activity
- assigned
- mentions
- GitHub (other)
- Grafana
```
- All notifications you’ll need to take action on should show up as unread in **GitHub (mine)** and its sub-labels.
- All notifications you don’t need to take action on show up as unread in **GitHub (other)** and its sub-labels.
This directory contains guides for contributors to the Grafana project.
We're excited that you're considering making a contribution to the Grafana project! This is the place to find guides for contributors to our open-source project.
These are some good resources to explore for developers:
- [Create a pull request](create-pull-request.md)
- [Contribute to our documentation](../contribute/documentation/README.md)
- [Developer guide](developer-guide.md)
- [Triage issues](triage-issues.md)
- [Merge a pull request](merge-pull-request.md)
- [Making changes to the CI pipeline](drone-pipeline.md)
- [Breaking changes in frontend APIs](./breaking-changes-guide/breaking-changes-guide.md)
The `style-guides` directory contains style guides for the Grafana software project and documentation.
Learn how to create great documentation and apps for Grafana:
- [Backend style guide](backend/style-guide.md) for how to style and format backend functionality and code.
- [Frontend style guide](style-guides/frontend.md) for how to style and format the user-facing functionality and code.
- [Redux framework](style-guides/redux.md) for designing the Grafana redux framework.
- [Themes style guide](style-guides/themes.md) for designing and updating Grafana themes.
- [Developer portal](https://grafana.com/developers/) - Find resources for creating apps and plugins to Grafana.
- [Contribute to our documentation](../contribute/documentation/README.md) - Learn how to write and style Grafana documentation.
Find style guides for the Grafana software project:
- [Backend style guide](backend/style-guide.md) - Learn how to style and format backend functionality and code.
- [Frontend style guide](style-guides/frontend.md) - Learn how to style and format the user-facing functionality and code.
- [Redux framework](style-guides/redux.md) - Design the Grafana Redux framework.
- [Themes style guide](style-guides/themes.md) - Design and update Grafana themes.
Upgrading Go or Node.js requires making changes in many different files. Refer to the following list for more information.
## Go
- Drone
-`grafana/build-container`
- Appveyor
- Dockerfile
## Node.js
- Drone
-`grafana/build-container`
- Appveyor
- Dockerfile
-`.github/workflows/publish.yml`
## Go dependencies
The Grafana project uses [Go modules](https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more) to manage dependencies on external packages. This requires a working Go environment with version 1.11 or later installed.
To add or update a new dependency, use the `go get` command:
```bash
go get example.com/some/module/pkg
# Pick a specific version.
go get example.com/some/module/pkg@vX.Y.Z
```
Tidy up the `go.mod` and `go.sum` files:
```bash
go mod tidy
```
You have to commit the changes to `go.mod` and `go.sum` before you submit the pull request.
To understand what the actual dependencies of `grafana-server` are, you can run it with the `-vv` flag. Note that this command might produce an output different from `go.mod` contents, and `-vv` option is the source of truth here. The output lists the modules _compiled_ into the executable, whereas `go.mod` lists also test and weak transitive dependencies (that is, modules, used in some packages, which aren't in use by itself). If you're interested in reporting a vulnerability in a dependency module, consult the `-vv` output, maybe the "dependency" isn't actually a dependency as such.
### Upgrading dependencies
If you need to upgrade a direct or indirect dependency, you can do it like so, where _`MODULE`_ is the dependency in question: `go get -u <MODULE>`. The corresponding entry in `go.mod` should then have the version you specified. If it's an indirect dependency, the entry should have the `// indirect` comment.
To do so, execute `go mod tidy` to ensure that `go.mod` and `go.sum` are updated. If the indirect dependency turns out to not be used (transitively) by any of our packages, `go mod tidy` actually strips it from `go.mod`. In that case, you can just ignore it because ultimately it isn't used.
Main and release builds trigger test runs on the Appveyors build environment so that tests will run on Windows.
#### Files:
-`appveyor.yml`
#### Dependencies
- nodejs
- golang
### Dockerfile
There is a Docker build for Grafana in the root of the project that allows anyone to build Grafana just using Docker.
#### Files
-`Dockerfile`
#### Dependencies
- nodejs
- golang
### Local developer environments
It is a good practice to send out a notice in the grafana-dev Slack channel when updating Go or Node.js to make it easier for everyone to update their local developer environments.
During development it's convenient to enable certain log level, e.g. debug, for certain loggers to minimize the generated log output and make it easier to find things. See [[log.filters]](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#filters) for information how to configure this.
During development, it's convenient to enable certain log level, e.g. debug, for certain loggers to minimize the generated log output and make it easier to find things. See [[log.filters]](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#filters) for information how to configure this.
It's also possible to configure multiple loggers:
@@ -194,12 +194,11 @@ func (s *MyService) Hello(ctx context.Context, name string) (string, error) {
if name == "" {
err := fmt.Errorf("name cannot be empty")
// sets the span’s status to Error to make the span tracking
// a failed operation as an error span.
span.SetStatus(codes.Error, "failed to check name")
// record err as an exception span event for this span
span.RecordError(err)
return "", err
// Use the helper functions tracing.Errorf or tracing.Error
// to set the span’s status to Error to make
// the span tracking a failed operation as an error span and
// record error as an exception span event for the provided span.
return "", tracing.Errorf(span, "failed to check name: %w", err)
@@ -33,7 +33,7 @@ Tests must use the standard library, `testing`. For assertions, prefer using [te
We have a [testsuite](https://github.com/grafana/grafana/tree/main/pkg/tests/testsuite) package which provides utilities for package-level setup and teardown.
Currently this is just used to ensure that test databases are correctly set up and torn down, but it also provides a place we can attach future tasks.
Currently, this is just used to ensure that test databases are correctly set up and torn down, but it also provides a place we can attach future tasks.
Each package SHOULD include a [TestMain](https://pkg.go.dev/testing#hdr-Main) function that calls `testsuite.Run(m)`:
Make sure to run `make drone` so that changes to `.star` files are reflected and `drone.yml` is generated.
Then, run `go mod tidy` and `go work sync`. Also run `make drone` so changes to `.star` files are reflected and `drone.yml` is updated.
### Additional files to change
- Take a look in `.github/workflows` folder for what `go` version is being used there in various workflows.
- Make sure to create a PR with the corresponding changes in `grafana/grafana-enterprise` repository.
## Updating the go.mod file
Please avoid updating the `go.mod` to the newest version unless really necessary. This ensures backwards compatibility and introduces less breaking changes. Always upgrade Go version in the runtime files above first, let them run for a couple of weeks and only then consider updating the `go.mod` file if necessary.
We're excited that you're considering making a contribution to the Grafana project! This document guides you through the process of creating a [pull request](https://help.github.com/en/articles/about-pull-requests/).
Every contribution to Grafana's software begins with a [pull request](https://help.github.com/en/articles/about-pull-requests/). This document guides you through the process of creating a PR.
## Before you begin
We know you're excited to create your first pull request. Before we get started, read these resources first:
-Learn how to start [Contributing to Grafana](/CONTRIBUTING.md).
-Get started [contributing to Grafana](/CONTRIBUTING.md).
- Make sure your code follows the relevant [style guides](/contribute/style-guides).
- It's recommended you [set up precommit hooks](/contribute/developer-guide.md) to auto-format when you commit
## Your first pull request
If this is your first time contributing to an open-source project on GitHub, make sure you read about [Creating a pull request](https://help.github.com/en/articles/creating-a-pull-request).
If this is your first time contributing to an open-source project on GitHub, make sure you read GitHub's article on [creating a pull request](https://help.github.com/en/articles/creating-a-pull-request).
To increase the chance of having your pull request accepted, make sure your pull request follows these guidelines:
- Title and description matches the implementation.
- Commits within the pull request follow the [Formatting guidelines](#Formatting-guidelines).
- Commits within the pull request follow the [formatting guidelines](#Formatting-guidelines).
- The pull request closes one related issue.
- The pull request contains necessary tests that verify the intended behavior.
- If your pull request has conflicts, rebase your branch onto the main branch.
@@ -27,7 +27,7 @@ If the pull request fixes a bug:
- The pull request description must include `Closes #<issue number>` or `Fixes #<issue number>`.
- To avoid regressions, the pull request should include tests that replicate the fixed bug.
## Frontend-specific guidelines
## Guidelines for frontend development
Pull requests for frontend contributions must:
@@ -42,76 +42,76 @@ Pull requests for Redux contributions must:
- Use the `actionCreatorFactory` and `reducerFactory` helpers instead of traditional switch statement reducers in Redux. Refer to [Redux framework](/contribute/style-guides/redux.md) for more details.
- Use `reducerTester` to test reducers. Refer to [Redux framework](/contribute/style-guides/redux.md) for more details.
- Not contain code that mutates state in reducers or thunks.
- Not contain code that accesses the reducers state slice directly. Instead, the code should use state selectors to access state.
- Not contain code that accesses the reducer's state slice directly. Instead, the code should use state selectors to access state.
Pull requests that add or modify unit tests that are written in Jest must adhere to these guidelines:
- Don't add snapshots tests. We are incrementally removing existing snapshot tests, we don't want more.
- If an existing unit test is written in Enzyme, migrate it to RTL (React Testing Library), unless you’re fixing a bug. Bug fixes usually shouldn't include any bigger refactoring, so it’s ok to skip migrating the test to RTL.
- Don't add snapshots tests. We are incrementally removing existing snapshot tests, and so we don't want more.
- If an existing unit test is written in Enzyme, migrate it to React Testing Library (RTL), unless you’re fixing a bug. Bug fixes usually shouldn't include any bigger refactoring, so it’s okay to skip migrating the test to RTL.
Pull requests that create new UI components or modify existing ones must adhere to the following accessibility guidelines:
- Use semantic HTML.
- Use ARIA roles, labels and other accessibility attributes correctly. Accessibility attributes should only be used when semantic HTML doesn't satisfy your use case.
- Use the [Grafana theme palette](/contribute/style-guides/themes.md) for styling. It contains colors with good contrast which aids accessibility.
- Use the [Grafana theme palette](/contribute/style-guides/themes.md) for styling. The palette contains colors with good contrast to aid accessibility.
- Use [RTL](https://testing-library.com/docs/dom-testing-library/api-accessibility/) for writing unit tests. It helps to create accessible components.
### Accessibility-specific guidelines
### Guidelines for accessibility
Pull requests that introduce accessibility(a11y) errors - please refer to the [accessibility guidelines](/contribute/style-guides/accessibility.md).
Before submitting pull requests that introduce accessibility(a11y) errors, refer to the [accessibility guidelines](/contribute/style-guides/accessibility.md).
### Betterer
We make use of a tool called [**Betterer**](https://phenomnomnominal.github.io/betterer/) in order to drive long-running code quality improvements. The intention is for this to be as unintrusive as possible, however there are some things to be aware of:
We make use of a tool called [**Betterer**](https://phenomnomnominal.github.io/betterer/) in order to drive long-running code quality improvements. Our intention is for this requirement to be as unintrusive as possible; however, there are some things to be aware of:
- **Betterer runs as a precommit hook**:
- You may see changes to the `.betterer.results` file automatically added to your commits.
- You may get an error when trying to commit something that decreases the overall code quality. You can either fix these errors or temporarily override the checks (e.g. to commit something that's a work in progress) by using`git commit --no-verify`. All errors will eventually have to be fixed before your code can be merged because...
- You may get an error when trying to commit something that decreases the overall code quality. You can either fix these errors or temporarily override the checks (for example, to commit something that's a work in progress). To do so, use`git commit --no-verify`. All errors will eventually have to be fixed before your code can be merged because...
- **Betterer also runs as part of our CI**:
- You may see the following error message in the CI: `Unexpected changes detected in these tests while running in CI mode`. To resolve, merge with the target branch (usually `main`).
- You may see merge conflicts for the `.betterer.results` file. To resolve, merge with the target branch (usually `main`) then run `yarn betterer:merge` and commit.
- You may see the following error message in the CI: `Unexpected changes detected in these tests while running in CI mode`. To resolve the error, merge with the target branch (usually `main`).
- You may see merge conflicts for the `.betterer.results` file. To resolve, merge with the target branch (usually `main`), and then run `yarn betterer:merge` and commit.
## Backend-specific guidelines
## Guidelines for backend development
Please refer to the [backend style guidelines](/contribute/backend/style-guide.md).
Refer to the [backend style guidelines](/contribute/backend/style-guide.md).
## Code review
Once you've created a pull request, the next step is to have someone review your change. A review is a learning opportunity for both the reviewer and the author of the pull request.
If you think a specific person needs to review your pull request, then you can tag them in the description or in a comment. Tag a user by typing the `@` symbol followed by their GitHub username.
If you think a specific person needs to review your pull request, then you can tag them in the description or in a comment. To tag a user on GitHub, go to Reviewers box on the Conversations page and enter the `@` symbol followed by their GitHub username.
We recommend that you read [How to do a code review](https://google.github.io/eng-practices/review/reviewer/) to learn more about code reviews.
## Formatting guidelines
A well-written pull request minimizes the time to get your change accepted. These guidelines help you write good commit messages and descriptions for your pull requests.
A well-written pull request minimizes the time to get your change accepted. The following guidelines help you to write good commit messages and descriptions for your pull requests.
### Commit message format
Grafana uses the guidelines for commit messages outlined in [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/), with the following additions:
Grafana uses the guidelines for commit messages outlined in the article [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/), with the following additions:
- Subject line must begin with the _area_ of the commit.
-A footer in the form of an optional [keyword and issue reference](https://help.github.com/en/articles/closing-issues-using-keywords).
-Footer in the form of an optional [keyword and issue reference](https://help.github.com/en/articles/closing-issues-using-keywords).
#### Area
The area should use upper camel case, e.g. UpperCamelCase.
The _area_ refers to a specific part of Grafana's codebase. It should be given in the upper camel case format. For example: UpperCamelCase.
Prefer using one of the following areas:
- **Build:** Change the build system, or external dependencies
- **Chore:** Change that don't affect functionality
- **Chore:** Change that doesn't affect functionality
- **Dashboard:** Change the Dashboard feature
- **Docs:** Change documentation
- **Explore:** Change the Explore feature
- **Plugins:** Change the ... plugin
- **Plugins:** Change a plugin
For changes to data sources, the area is the name of the data source. For example, AzureMonitor, Graphite, or Prometheus.
For changes to panels, the area is the name of the panel, suffixed with Panel. For example, GraphPanel, SinglestatPanel, or TablePanel.
**Examples**
**Examples of good commit messages**
-`Build: Support publishing MSI to grafana.com`
-`Explore: Add Live option for supported data sources`
@@ -124,17 +124,18 @@ If you're unsure, see the existing [changelog](https://github.com/grafana/grafan
The pull request title should be formatted according to `<Area>: <Summary>` (Both "Area" and "Summary" should start with a capital letter).
The Grafana team _squashes_ all commits into one when we accept a pull request. The title of the pull request becomes the subject line of the squashed commit message. We still encourage contributors to write informative commit messages, as they becomes a part of the Git commit body.
The Grafana team _squashes_ all commits into one when we accept a pull request. The title of the pull request becomes the subject line of the squashed commit message. We still encourage contributors to write informative commit messages, as they become a part of the Git commit body.
We use the pull request title when we generate change logs for releases. As such, we strive to make the title as informative as possible.
**Example:**
`Docs: Change url to URL in all documentation files`
## Configuration changes
If your PR includes configuration changes, all of the following files must be changed correspondingly:
If your pull request includes configuration changes, all the following files must be changed correspondingly:
We do our best to limit breaking changes and the deprecation of features to major releases. We always do our best **not** to introduce breaking changes in order to make upgrading Grafana as easy and reliable as possible. However, at times we have to introduce a breaking change by changing behavior or by removing a feature.
We do our best to limit breaking changes and the deprecation of features to major releases. We always do our best _not_ to introduce breaking changes in order to make upgrading Grafana as easy and reliable as possible. However, at times we have to introduce a breaking change by changing behavior or by removing a feature.
To minimize the negative effects of removing a feature we require a deprecation plan that includes:
To minimize the negative effects of removing a feature, we require a deprecation plan. A typical deprecation plan includes these features:
- Determine usage levels of the feature.
- Find alternative solutions and possible migration paths.
- Announce deprecation of the feature.
- Migrate users if possible
- Migrate users if possible.
- Give users time to adjust to the deprecation.
- Disable the feature by default.
- Remove the feature from the code base.
Depending on the size and importance of the feature this can be a design doc or an issue. We want this to be written communication for all parties so we know it's intentional and that did a reasonable attempt to avoid breaking changes unless needed. The size of the feature also means different notice times between Depreciation and disabling as well as disabling and removal. The actual duration will depend on releases of Grafana and the table below should be used as a guide.
We want the deprecation plan to be in the form of written communication for all parties so we know it's intentional and that a reasonable attempt was made to avoid breaking changes unnecessarily. Depending on the size and importance of the feature the plan can be a design doc or an issue.
Grafana employees can find more details in our internal docs.
> Grafana employees can find more details in our internal docs.
Additionally, the size of the feature requires different notice times between depreciation and disabling as well as disabling and removal. The actual duration will depend on releases of Grafana and the table below should be used as a guide.
## Grace period between announcement and disabling feature by default
@@ -8,8 +8,8 @@ Make sure you have the following dependencies installed before setting up your d
- [Git](https://git-scm.com/)
- [Go](https://golang.org/dl/) (see [go.mod](../go.mod#L3) for minimum required version)
- [Node.js (Long Term Support)](https://nodejs.org), with [corepack enabled](https://nodejs.org/api/corepack.html#enabling-the-feature)
- GCC (required for Cgo dependencies)
- [Node.js (Long Term Support)](https://nodejs.org), with [corepack enabled](https://nodejs.org/api/corepack.html#enabling-the-feature). See [.nvmrc](../.nvmrc) for supported version. We recommend that you use a version manager such as [nvm](https://github.com/nvm-sh/nvm), [fnm](https://github.com/Schniz/fnm), or similar.
-[GCC](https://gcc.gnu.org/) (required for Cgo] dependencies)
### macOS
@@ -33,60 +33,91 @@ We recommend using the Git command-line interface to download the source code fo
1. Open a terminal and run `git clone https://github.com/grafana/grafana.git`. This command downloads Grafana to a new `grafana` directory in your current directory.
1. Open the `grafana` directory in your favorite code editor.
For alternative ways of cloning the Grafana repository, please refer to [GitHub's cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository) documentation.
For alternative ways of cloning the Grafana repository, refer to [GitHub's documentation](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository).
**Warning:** Do not use `go get` to download Grafana. Recent versions of Go have added behavior which isn't compatible with the way the Grafana repository is structured.
> **Caution:** Do not use `go get` to download Grafana. Recent versions of Go have added behavior which isn't compatible with the way the Grafana repository is structured.
### Configure precommit hooks
We use pre-commit hooks (via [lefthook](https://github.com/evilmartians/lefthook)) to lint, fix, and format code as you commit your changes. Previously the Grafana repository automatically installed these hook when you did`yarn install`, but they are now optin for all contributors
We use pre-commit hooks (via [lefthook](https://github.com/evilmartians/lefthook)) to lint, fix, and format code as you commit your changes. Previously, the Grafana repository automatically installed these hook when you ran`yarn install`, but they are now opt-in for all contributors.
Install the lefthook precommit hooks with:
To install the precommit hooks:
```sh
make lefthook-install
```
To remove precommit hooks, run
To remove precommit hooks:
```sh
make lefthook-uninstall
```
> [!NOTE]
> Contributors working on the frontend are highly encouraged to install the precommit hooks, even if your IDE formats on save, so the `.betterer.results` file is kept up to sync.
> We strongly encourage contributors who work on the frontend to install the precommit hooks, even if your IDE formats on save. By doing so, the `.betterer.results` file is kept in sync.
## Build Grafana
Grafana consists of two components; the _frontend_, and the _backend_.
When building Grafana, be aware that it consists of two components:
- The _frontend_, and
- The _backend_.
### Frontend
Before we can build the frontend assets, we need to install the dependencies:
Before you can build the frontend assets, you need to install the related dependencies:
```
yarn install --immutable
```
> Troubleshooting: if you get the error `The remote archive doesn't match the expected checksum` for a dependency pulled from a link (e.g. `"tether-drop": "https://github.com/torkelo/drop"`): this is a temporary mismatch. To work around it (while someone corrects the issue), you can prefix your `yarn install --immutable` command with [`YARN_CHECKSUM_BEHAVIOR=update`](https://yarnpkg.com/advanced/error-codes#yn0018---cache_checksum_mismatch)
> If you get the error `The remote archive doesn't match the expected checksum` for a dependency pulled from a link (for example, `"tether-drop": "https://github.com/torkelo/drop"`): this is a temporary mismatch. To work around the error (while someone corrects the issue), you can prefix your `yarn install --immutable` command with [`YARN_CHECKSUM_BEHAVIOR=update`](https://yarnpkg.com/advanced/error-codes#yn0018---cache_checksum_mismatch).
After the command has finished, we can start building our source code:
After the command has finished, you can start building the source code:
```
yarn start
```
Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets every time you change the code.
This command generates SASS theme files, builds all external plugins, and then builds the frontend assets.
> Troubleshooting: if your first build works, but after pulling updates you see unexpected errors in the "Type-checking in progress..." stage, these can be caused by the [tsbuildinfo cache supporting incremental builds](https://www.typescriptlang.org/tsconfig#incremental). You can `rm tsconfig.tsbuildinfo` and re-try.
After `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets every time you change the code.
Next, we'll build & run the web server that will serve the frontend assets we just built.
> **Troubleshooting:** if your first build works, after pulling updates you may see unexpected errors in the "Type-checking in progress..." stage. These errors can be caused by the [tsbuildinfo cache supporting incremental builds](https://www.typescriptlang.org/tsconfig#incremental). In this case, you can enter `rm tsconfig.tsbuildinfo` and re-try.
#### Plugins
If you want to contribute to any of the plugins listed below (that are found within the `public/app/plugins` directory) they require running additional commands to watch and rebuild them.
- azuremonitor
- cloud-monitoring
- grafana-postgresql-datasource
- grafana-pyroscope-datasource
- grafana-testdata-datasource
- jaegar
- mysql
- parca
- tempo
- zipkin
To build and watch all these plugins you can run the following command. Note this can be quite resource intensive as it will start separate build processes for each plugin.
```
yarn plugin:build:dev
```
If, instead, you would like to build and watch a specific plugin you can run the following command. Make sure to substitute `<name_of_plugin>` with the plugins name field found in its package.json. e.g. `@grafana-plugins/tempo`.
```
yarn workspace <name_of_plugin> dev
```
Next, we'll explain how to build and run the web server that serves these frontend assets.
### Backend
Build and run the backend by running `make run` in the root directory of the repository. This command compiles the Go source code and starts a web server.
> Are you having problems with [too many open files](#troubleshooting)?
> **Troubleshooting:** Are you having problems with [too many open files](#troubleshooting)?
By default, you can access the web server at `http://localhost:3000/`.
@@ -98,14 +129,14 @@ Log in using the default credentials:
When you log in for the first time, Grafana asks you to change your password.
#### Building on Windows
#### Build on Windows
The Grafana backend includes SQLite which requires GCC to compile. So in order to compile Grafana on Windows you need to install GCC. We recommend [TDM-GCC](http://tdm-gcc.tdragon.net/download). Eventually, if you use [Scoop](https://scoop.sh), you can install GCC through that.
The Grafana backend includes SQLite, a database which requires GCC to compile. So in order to compile Grafana on Windows you need to install GCC. We recommend [TDM-GCC](http://tdm-gcc.tdragon.net/download). Eventually, if you use [Scoop](https://scoop.sh), you can install GCC through that.
You can build the back-end as follows:
1. Follow the [instructions](https://github.com/google/wire#installing) to install the Wire tool.
@@ -118,8 +149,9 @@ You can build the back-end as follows:
go run build.go build
```
The Grafana binaries will be inbin\\windows-amd64.
Alternately, if you wish to use the `make` command, install [Make for Windows](http://gnuwin32.sourceforge.net/packages/make.htm) and use it in a Unix shell (f.ex. Git Bash).
The Grafana binaries will be installed in `bin\\windows-amd64`.
Alternatively, if you are on Windows and want to use the `make` command, install [Make for Windows](http://gnuwin32.sourceforge.net/packages/make.htm) and use it in a UNIX shell (for example, Git Bash).
## Test Grafana
@@ -127,7 +159,7 @@ The test suite consists of three types of tests: _Frontend tests_, _backend test
### Run frontend tests
We use [jest](https://jestjs.io/) for our frontend tests. Run them using Yarn:
We use [Jest](https://jestjs.io/) for our frontend tests. Run them using Yarn:
```
yarn test
@@ -143,27 +175,29 @@ go test -v ./pkg/...
#### On Windows
Running the backend tests on Windows currently needs some tweaking, so use the build.go script:
Running the backend tests on Windows currently needs some tweaking, so use the `build.go` script:
```
go run build.go test
```
### Run SQLLite, PostgreSQL and MySQL integration tests
### Run SQLite, PostgreSQL and MySQL integration tests
By default grafana runs SQLite, to run test with SQLite
By default, grafana runs SQLite. To run test with SQLite:
```bash
go test -covermode=atomic -tags=integration ./pkg/...
```
To run PostgreSQL and MySQL integration tests locally, you need to start the docker blocks for MySQL and/or PostgreSQL test data sources by running `make devenv sources=mysql_tests,postgres_tests`. When your test data sources are running, you can execute integration tests by running:
To run PostgreSQL and MySQL integration tests locally, start the Docker blocks for test data sources for MySQL, PostgreSQL, or both, by running `make devenv sources=mysql_tests,postgres_tests`.
When your test data sources are running, you can execute integration tests by running for MySQL:
```bash
make test-go-integration-mysql
```
and/or
For PostgreSQL, you could run:
```bash
make test-go-integration-postgres
@@ -171,9 +205,11 @@ make test-go-integration-postgres
### Run end-to-end tests
The end to end tests in Grafana use [Cypress](https://www.cypress.io/) to run automated scripts in a headless Chromium browser. Read more about our [e2e framework](/contribute/style-guides/e2e.md).
Grafana uses [Cypress](https://www.cypress.io/) to end-to-end test core features. Core plugins use [Playwright](https://playwright.dev/) to run automated end-to-end tests. You can find more information on how to add end-to-end tests to your core plugin [in our end-to-end testing style guide](./style-guides/e2e-plugins.md)
To run the tests:
#### Run Cypress tests
To run all tests in a headless Chromium browser.
```
yarn e2e
@@ -197,13 +233,41 @@ To choose a single test to follow in the browser as it runs, use `yarn e2e:dev`
yarn e2e:dev
```
#### To run the Playwright tests:
**Note:** If you're using VS Code as your development editor, it's recommended to install the [Playwright test extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright). It allows you to run, debug and generate Playwright tests from within the editor. For more information about the extension and how to install it, refer to the [Playwright documentation](https://playwright.dev/docs/getting-started-vscode).
Each version of Playwright needs specific versions of browser binaries to operate. You need to use the Playwright CLI to install these browsers.
```
yarn playwright install chromium
```
To run all tests in a headless Chromium browser and display results in the terminal:
```
yarn e2e:playwright
```
For a better developer experience, open the Playwright UI where you can visually walk through each step of the test and see what was happening before, during, and after each step.
```
yarn e2e:playwright:ui
```
To open the HTML reporter for the last test run session:
```
yarn e2e:playwright:report
```
## Configure Grafana for development
The default configuration, `defaults.ini`, is located in the `conf` directory.
To override the default configuration, create a `custom.ini` file in the `conf` directory. You only need to add the options you wish to override.
Enable the development mode, by adding the following line in your `custom.ini`:
Enable the development mode by adding the following line in your `custom.ini`:
```
app_mode = development
@@ -233,7 +297,7 @@ make devenv sources=influxdb,loki
The script generates a Docker Compose file with the databases you specify as `sources`, and runs them in the background.
See the repository for all the [available data sources](/devenv/docker/blocks). Note that some data sources have specific Docker images for macOS, e.g.`nginx_proxy_mac`.
See the repository for all the [available data sources](/devenv/docker/blocks). Note that some data sources have specific Docker images for macOS; for example,`nginx_proxy_mac`.
## Build a Docker image
@@ -243,9 +307,9 @@ To build a Docker image, run:
make build-docker-full
```
The resulting image will be tagged as grafana/grafana:dev.
The resulting image will be tagged as `grafana/grafana:dev`.
**Note:** If you are using Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise, `grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
> **Note:** If you use Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise, `grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
## Troubleshooting
@@ -253,13 +317,13 @@ Are you having issues with setting up your environment? Here are some tips that
### IDE configuration
Configure your IDE to use the Typescript version from the Grafana repository. The version should match the Typescript version in the package.json file, and is typically at the path`node_modules/.bin/tsc`.
Configure your IDE to use the TypeScript version from the Grafana repository. The version should match the TypeScript version in the `package.json` file, and is typically located at `node_modules/.bin/tsc`.
Previously Grafana used Yarn PnP to install frontend dependencies, which required additional special IDE configuration. This is no longer the case. If you have custom paths in your IDE for ESLint, Prettier, or Typescript, you can now remove them and use the defaults from node_modules.
Previously, Grafana used Yarn PnP to install frontend dependencies, which required additional special IDE configuration. This is no longer the case. If you have custom paths in your IDE for ESLint, Prettier, or TypeScript, you can now remove them and use the defaults from `node_modules`.
### Too many open files when running `make run`
Depending on your environment, you may have to increase the maximum number of open files allowed. For the rest of this section, we will assume you are on a Unix like OS (e.g. Linux/macOS), where you can control the maximum number of open files through the [ulimit](https://ss64.com/bash/ulimit.html) shell command.
Depending on your environment, you may have to increase the maximum number of open files allowed. For the rest of this section, we will assume you are on a UNIX-like OS (for example, Linux or macOS), where you can control the maximum number of open files through the [ulimit](https://ss64.com/bash/ulimit.html) shell command.
Another alternative is to limit the files being watched. The directories that are watched for changes are listed in the `.bra.toml` file in the root directory.
To retain your `ulimit` configuration, i.e. so it will be remembered for future sessions, you need to commit it to your command line shell initialization file. Which file this will be depends on the shell you are using, here are some examples:
You can retain your `ulimit` configuration, that is, save it so it will be remembered for future sessions. To do this, commit it to your command line shell initialization file. Which file this is depends on the shell you are using. For example:
- zsh -> ~/.zshrc
- bash -> ~/.bashrc
@@ -300,11 +364,15 @@ For some people, typically using the bash shell, ulimit fails with an error simi
ulimit: open files: cannot modify limit: Operation not permitted
```
If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initialization files (~/.bashrc typically), if there's already aulimit command that you can tweak.
If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initialization files (`~/.bashrc`, typically), to see if there's already an `ulimit` command that you can tweak.
### Getting `AggregateError` when building frontend tests
If you encounter an `AggregateError` when building new tests, this is probably due to a call to our client [backend service](https://github.com/grafana/grafana/blob/main/public/app/core/services/backend_srv.ts) not being mocked. Our backend service anticipates multiple responses being returned and was built to return errors as an array. A test encountering errors from the service will group those errors as an `AggregateError` without breaking down the individual errors within. `backend_srv.processRequestError` is called once per error and is a great place to return information on what the individual errors might contain.
_Only people in the Grafana organization can make changes to the Drone pipeline_
> Only members of the Grafana organization can make changes to the Drone pipeline.
The Drone pipelines are built with [Starlark](https://github.com/bazelbuild/starlark), a language which is similar to Python. The Starlark files are located in [`scripts/drone`](https://github.com/grafana/grafana/tree/main/scripts/drone).
The Drone pipelines are built with [Starlark](https://github.com/bazelbuild/starlark), a similar language to Python. The Starlark files are located in [`scripts/drone`](https://github.com/grafana/grafana/tree/main/scripts/drone).
## Setup
## Drone setup
- Set environment variables `DRONE_SERVER` and `DRONE_TOKEN`, which can be found on your [Drone account](https://drone.grafana.net/account). These are used to verify that only Grafana employees can make changes to the pipelines.
- Install [buildifier](https://github.com/bazelbuild/buildtools/blob/master/buildifier/README.md), and use it to format the Starlark files you edit.
1. Set environment variables `DRONE_SERVER` and `DRONE_TOKEN` found in your [Drone account](https://drone.grafana.net/account). These environment variables are used to verify that only Grafana employees can make changes to the pipelines.
1. Install [buildifier](https://github.com/bazelbuild/buildtools/blob/master/buildifier/README.md), and use it to format the Starlark files you want to edit.
## Develop
## Drone development
- Open a PR where you can do test runs for your changes. If you need to experiment with secrets, create a PR in the [grafana-ci-sandbox repo](https://github.com/grafana/grafana-ci-sandbox), before opening a PR in the main repo.
- Run `make drone` after making changes to the Starlark files. This builds the `.drone.yml` file.
1. Open a pull request where you can do test runs for your changes. If you need to experiment with secrets, create a pull request in the [`grafana-ci-sandbox repo`](https://github.com/grafana/grafana-ci-sandbox) before opening a pull request in the main repo.
1. Run `make drone` after making changes to the Starlark files. This builds the `.drone.yml` file.
For further questions, reach out to the grafana-release-guild squad.
For further questions, reach out to the `grafana-release-guild` squad.
This guide helps you get started adding your feature behind a feature flagin Grafana.
This guide helps you to add your feature behind a _feature flag_, code that lets you enable or disable a feature without redeploying Grafana.
## Steps to adding a feature toggle
1. Define the feature toggle in [registry.go](../pkg/services/featuremgmt/registry.go). To see what each feature stage means, look at the comments [here](../pkg/services/featuremgmt/features.go). If you are a community member, use the [CODEOWNERS](../.github/CODEOWNERS) file to determine which team owns the package you are updating.
2. Run the go tests mentioned at the top of [this file](../pkg/services/featuremgmt/toggles_gen.go). This will generate all the additional files needed: `toggles_gen` for the backend, `grafana-data` for the frontend, and docs. You can run the test by running `go test ./pkg/services/featuremgmt/...`. This will say the tests failed the first time, but it will have generated the right code. If you re-run the tests, it will pass.
1. Define the feature toggle in [registry.go](../pkg/services/featuremgmt/registry.go). To see what each feature stage means, look at the [related comments](../pkg/services/featuremgmt/features.go). If you are a community member, use the [CODEOWNERS](../.github/CODEOWNERS) file to determine which team owns the package you are updating.
2. Run the Go tests mentioned at the top of [this file](../pkg/services/featuremgmt/toggles_gen.go). This generates all the additional files needed: `toggles_gen` for the backend, `grafana-data` for the frontend, and docs. To run the test, run`make gen-feature-toggles`.
## How to use it in the code
## How to use the toggle in your code
Once your feature toggle is defined, you can then wrap your feature around a check if the feature flag is enabled on that Grafana instance. Here are examples of how to do that:
Once your feature toggle is defined, you can then wrap your feature around a check if the feature flag is enabled on that Grafana instance.
Examples:
- [Backend](https://github.com/grafana/grafana/blob/feb2b5878b3e3ec551d64872c35edec2a0187812/pkg/services/authn/clients/session.go#L57): Use the `IsEnabled` function and pass in your feature toggle.
- [Frontend](https://github.com/grafana/grafana/blob/feb2b5878b3e3ec551d64872c35edec2a0187812/public/app/features/search/service/folders.ts#L14): Check the config for your feature toggle.
Grafana uses the [i18next](https://www.i18next.com/) framework for managing translating phrases in the Grafana frontend.
## tl;dr
## TL;DR
**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.
**Note:** We don't currently accept contributions for translations. Please don't submit pull requests translating `grafana.json` files - they will be rejected. We do accept contributions to mark up phrases for translation.
- Use `<Trans i18nKey="search-results.panel-link">Go to {{ pageTitle }}</Trans>` in code to add a translatable phrase
- Translations are stored in JSON files in `public/locales/{locale}/grafana.json`
- If a particular phrase is not available in the a language then it will fall back to English
- To update phrases in English, edit the default phrase in the component's source and then run `yarn i18n:extract`.
- The single source of truth for en-US (fallback language) is in grafana/grafana, the single source of truth for any translated language is Crowdin
- Use `<Trans i18nKey="search-results.panel-link">Go to {{ pageTitle }}</Trans>` in code to add a translatable phrase.
- Translations are stored in JSON files in `public/locales/{locale}/grafana.json`.
- If a particular phrase isn't available in a given language, then it will fall back to English.
- To update phrases in English, edit the default phrase in the component's source, and then run `make i18n-extract`.
- The single source of truth for `en-US` (fallback language) is in `grafana/grafana`, and the single source of truth for any translated language is Crowdin.
- To update phrases in any translated language, edit the phrase in Crowdin. Do not edit the `{locale}/grafana.json`
## How to add a new translation phrase
### JSX
1. For JSX children, use the `<Trans />` component from `app/core/internationalization` with the `i18nKey`, ensuring it conforms to the guidelines below, with the default english translation. e.g.
1. For JSX children, use the `<Trans />` component from `app/core/internationalization` with the `i18nKey`, ensuring it conforms to the following guidelines, with the default English translation. For example:
Prefer using `<Trans />` for JSX children, and `t()` for props and other javascript usage.
Prefer using `<Trans />` for JSX children, and `t()` for props and other JavaScript usage.
When translating in grafana-ui, use a relative path to import `<Trans />` and `t()` from `src/utils/i18n`.
When translating in `grafana-ui`, use a relative path to import `<Trans />` and `t()` from `src/utils/i18n`.
Note that our tooling must be able to statically analyse the code to extract the phrase, so the `i18nKey` can not be dynamic. e.g. the following will not work:
Note that our tooling must be able to statically analyze the code to extract the phrase, so the `i18nKey` can't be dynamic. For example: the following will not work:
2. Upon reload, the default English phrase will appear on the page.
2. Upon reload, the default English phrase appears on the page.
3. Before submitting your PR, run the `yarn i18n:extract` command to extract the messages you added into the `public/locales/en-US/grafana.json` file and make them available for translation.
**Note:** All other languages will receive their translations when they are ready to be downloaded from Crowdin.
3. Before submitting your PR, run the `make i18n-extract` command to extract the messages you added into the `public/locales/en-US/grafana.json` file and make them available for translation.
**Note:** All other languages receive their translations when they are ready to be downloaded from Crowdin.
### Plain JS usage
@@ -62,31 +62,40 @@ Interpolating phrases is a bit more verbose. Make sure the placeholders in the s
While the `t` function can technically be used outside of React functions (e.g, in actions/reducers), aim to keep all UI phrases within the React UI functions.
While the `t` function can technically be used outside of React functions (for example, in actions or reducers), aim to keep all UI phrases within the React UI functions.
## How to add a new language
1. Add new locale in Crowdin and download files to repo
1. Grafana OSS Crowdin project -> "dot dot dot" menu in top right -> Target languages
2. If Crowdin's locale code is different from our IETF language tag, add a custom mapping in Project Settings -> Language mapping
3.GH repo grafana/grafana -> Actions -> Choose `Crowdin Download Action` -> Run workflow -> Creates a PR automatically
2. Review the PR `I18n: Download translations from Crowdin`
3.Update `public/app/core/internationalization/constants.ts` (add new constant, and add to `LOCALES`) and add changes to the open PR
4. Approve and merge the PR
1. Add a new locale in Crowdin.
1. Go to the Grafana OSS Crowdin project.
2. In the top right, select the "dot dot dot" menu.
3.Under **Target languages**, add the language.
4. If Crowdin's locale code is different from our IETF language tag (such as Chinese Simplified), add a custom mapping in **Project Settings** -> **Language mapping**.
2.Sync the new (empty) language to the repo.
1. In Grafana's Github Actions, go to [Crowdin Download Action](https://github.com/grafana/grafana/actions/workflows/i18n-crowdin-download.yml).
2. From main, select **Run workflow**.
3. The workflow creates a PR with the new language files, which can be reviewed and merged.
3. Create a PR with the changes and merge when you are ready to release the new language (as a general rule, wait until we have translations for it).
4. In the Grafana Enterprise repo, update `src/public/locales/localeExtensions.ts`.
## How translations work in Grafana
Grafana uses the [i18next](https://www.i18next.com/) framework for managing translating phrases in the Grafana frontend. It:
- Marks up phrases within our code for extraction
- Extracts phrases into the default messages catalogue for translating in external systems
- Manages the user's locale and putting the translated phrases in the UI
- Marks up phrases within our code for extraction.
- Extracts phrases into the default messages catalog for translating in external systems.
- Manages the user's locale and puts the translated phrases in the UI.
Grafana will load the message catalogue JSON before the initial render.
Grafana loads the message catalog JSON before the initial render.
### Phrase ID naming convention
We set explicit IDs for phrases to make it easier to identify phrases out of context, and to track where they're used. IDs follow a naming scheme that includes _where_ the phrase is used. The exception is the rare case of single reoccuring words like "Cancel", but default to using a feature/phrase specific phrase.
We set explicit IDs for phrases to make it easier to identify phrases out of context, and to track where they're used.
IDs follow a naming scheme that includes _where_ the phrase is used. The exception is the rare case of a single reoccurring word like "Cancel", but the default is to use a feature-specific phrase.
Message IDs are made of _up to_ three segments in the format `feature.area.phrase`. For example:
@@ -100,11 +109,11 @@ For components used all over the site, use just two segments:
### I18next context
We rely on a global i18next singleton (that lives inside the i18next) for storing the i18next config/context.
We rely on a global i18next singleton (that lives inside the i18next) for storing the i18next configuration.
## Examples
See [i18next](https://www.i18next.com/) and [react-i18next](https://react.i18next.com/) documentation for more details.
Refer to the [i18next](https://www.i18next.com/) and [react-i18next](https://react.i18next.com/) documentation for more details.
### Basic usage
@@ -116,7 +125,7 @@ import { Trans } from 'app/core/internationalization';
<Transi18nKey="page.greeting">Hellouser!</Trans>;
```
To interpolate variables, include it as an object child. It's weird syntax, but Trans will do it's magic to make it work:
To interpolate a variable, include it as an object child. It's a weird syntax, but `Trans` will do its magic to make it work:
Variables must be strings (or, must support calling `.toString()`, which we almost never want).
Variables must be strings (or, must support calling `.toString()`, which we almost never want). For example:
```jsx
import{Trans}from'app/core/internationalization';
@@ -145,7 +154,7 @@ const userName = user.name;
### React components and HTML tags
Both HTML tags and React components can be included in a phase. The Trans function will handle interpolating it's children properly
Both HTML tags and React components can be included in a phase. The `Trans` function handles interpolating for its children.
```js
import{Trans}from"app/core/internationalization"
@@ -164,23 +173,23 @@ import { Trans } from "app/core/internationalization"
### Plurals
Plurals require special handling to make sure they can be translating according to the rules of each locale (which may be more complex that you think!). Use either the `<Trans />` component or the `t` function, with the `count` prop to provide a singular form.
Plurals require special handling to make sure they can be translated according to the rules of each locale (which may be more complex than you think). Use either the `<Trans />` component or the `t` function, with the `count` prop to provide a singular form. For example:
Once extracted with `yarn i18n:extract` you will need to manually edit the [English grafana.json message catalogue](../public/locales/en-US/grafana.json) to correct the plural forms. See the [react-i18next docs](https://react.i18next.com/latest/trans-component#plural) for more details.
Once extracted with `make i18n-extract` you need to manually edit the [English `grafana.json` message catalog](../public/locales/en-US/grafana.json) to correct the plural forms. Refer to the [react-i18next docs](https://react.i18next.com/latest/trans-component#plural) for more details.
```json
{
@@ -193,20 +202,19 @@ Once extracted with `yarn i18n:extract` you will need to manually edit the [Engl
## Feedback
**Please note:** This is only for proofreaders with permissions to Grafana OSS project on Crowdin.
**Note:** This is only for proofreaders with permissions to the Grafana OSS project on Crowdin.
To provide feedback on translations, sign into Crowdin and follow these steps:
1. Open the Grafana OSS project in Crowdin.
2.In the left-hand menu, click on the 'Dashboard' menu item.
3.A list of available languages appears under the 'Translations' section. Click on the one you want to comment on.
4. There is a table with the file structure in it:
1.On the left menu, click **Dashboard**. A list of available languages appears under the **Translations** section. Click the one you want to comment on.
1.There is a table with the file structure in it:
<br>
`grafana/main > public > locales > 'language denomination' > grafana.json`
<br>
Click on the `grafana.json` file.
5. In the left-hand section, click on the 'Search in file' input and search for the string that you want to comment on. You can search in English, as it is the default language, or in the language the string is translated to.
6. Once you have found the string, on the right hand side there is a 'Comments' section where you can send the feedback about the translation. Tag @Translated to be sure the team of linguists gets notified.
Click the `grafana.json` file.
1. In the left section, click the **Search in file** input. Search for the string that you want to comment on. You can search in English, as it's the default language, or in the language the string is translated into.
1. Once you have found the string, on the right hand side there is a **Comments** section where you can send your feedback about the translation. Tag `@Translated` to be sure the team of linguists gets notified.
When a pull request has been reviewed and approved by at least one person and all checks have passed it's time to merge the pull request.
When a pull request has been reviewed and approved by at least one person and all checks have passed, then it's time to merge the pull request.
## Who is expected to merge a pull request?
Maintainers are responsible for merging all pull requests. If a maintainer has opened a pull request the general rule is that the same maintainer merges the pull request. If a non-maintainer has opened a pull request it's suggested that one of the maintainers reviewing the pull request merges the pull request.
Maintainers are responsible for merging all pull requests. If a maintainer has opened a pull request, then the general rule is that the same maintainer merges the pull request. If a non-maintainer has opened a pull request, then it's suggested that one of the maintainers who reviews the pull request should merge the pull request.
## Checklist/summary
## Checklist of considerations
The following checklist/summary should give you a quick overview of what to ask/consider before merging a pull request.
Consider (and ask about) the items on the following checklist before merging a pull request:
-Reviewed and approved?
-All checks passed?
-Proper pull request title?
-Add to changelog/release notes?
-Needs backporting?
-Is it reviewed and approved?
-Have all checks passed?
-Does it have a proper pull request title?
-Does it need to be added to the changelog (release notes)?
-Does it need backporting?
## Before merge
Before actually merging a pull request there's a couple of things to take into consideration.
Before actually merging a pull request, consider the following things:
### Status checks
@@ -30,74 +30,73 @@ The pull request title should be formatted according to `<Area>: <Summary>` (Bot
Keep the summary short and understandable for the community as a whole.
All commits in a pull request are squashed when merged and the pull request title will be the default subject line of the squashed commit message. It's also used for [changelog/release notes](#include-in-changelog-and-release-notes).
All commits in a pull request are squashed when merged and the pull request title will be the default subject line of the squashed commit message. It's also used for the [changelog](#include-in-changelog-and-release-notes).
**Example:**
`Docs: Change url to URL in all documentation files`
See [formatting guidelines](create-pull-request.md#formatting-guidelines) for more information.
### Assign a milestone
### Assign a milestone (automated)
Several things in the Grafana release process requires at least pull requests to be in a milestone, for example [generating changelog/release notes](#include-in-changelog-and-release-notes).
The Grafana release process uses a bot to automatically assign pull requests to a milestone to make it easier for release managers to track changes. For example, [generating changelog (release note)](#include-in-changelog-and-release-notes) must be in a milestone.
This makes it easier to track what changes go into a certain release. Without this information, release managers have to go through git commits which is not an efficient process.
That being said, _you don't have to assign a milestone manually_ to a pull request. Instead, when it is merged and closed, a bot will then look for the most appropriate milestone and assign it to the pull request.
That being said, _you don't have to assign a milestone manually_ to a pull request.
Instead, when it is merged & closed then a bot will look for the most appropriate miletone and assign it to the pull request.
The bot-assigned milestone should always reflect the branch into which the pull request is merged. For example:
That milestone should always reflect the branch that the pull request is merged into.
For every major and minor release there is a milestone ending with `.x` (e.g. `10.0.x` for the 10.0.x releases).
Pull requests targeting `main` should use the `.x` milestone of the next minor (or major) version (you can find that version number inside the `package.json` file).
Backport pull requests should use the version of the target branch (e.g. `9.4.x` for the `v9.4.x` branch).
- For every major and minor release, there is a milestone ending with `.x` (for example, `10.0.x` for the 10.0.x releases).
- Pull requests targeting `main` use the `.x` milestone of the next minor (or major) version (you can find that version number inside the `package.json` file).
- Backport pull requests use the version of the target branch (for example, `9.4.x` for the `v9.4.x` branch).
### Include in changelog and release notes?
### What to include in changelog and release notes
At Grafana we generate the [changelog](https://github.com/grafana/grafana/blob/main/CHANGELOG.md) and [release notes](https://grafana.com/docs/grafana/latest/release-notes/) based on merged pull requests. Including changes in the changelog/release notes is very important to provide a somewhat complete picture of what changes a Grafana release actually includes.
At Grafana we generate the [changelog](https://github.com/grafana/grafana/blob/main/CHANGELOG.md) and [release notes](https://grafana.com/docs/grafana/latest/release-notes/) based on merged pull requests. Including changes in the changelog (release notes) is very important to provide a relatively complete picture of what changes a Grafana release actually includes.
There's a GitHub action available in the repository named [Update changelog](https://github.com/grafana/grafana/blob/main/.github/workflows/update-changelog.yml) that can manually be triggered to re-generate the changelog and release notes for any release.
There's a GitHub action available in the repository named [Update changelog](https://github.com/grafana/grafana/blob/main/.github/workflows/update-changelog.yml) that can be triggered manually to re-generate the changelog and release notes for any release.
Exactly what changes should be added to the changelog is hard to answer but here's some general guidance:
- Include any bug fix in general.
- Include any change that you think would be interesting for the community as a whole.
- Skip larger features divided in multiple pull requests since they might go into the release blog post/What's New article.
- Use your best judgement and/or ask other maintainers for advice.
- Including a change in error rather than skipping one that should have been there is better.
- Always keep [Format the pull request title](#format-the-pull-request-title) in mind.
- Skip larger features divided into multiple pull requests since they might go into the release's What's New article.
- Use your best judgement and, if you aren't sure, then ask other maintainers for advice.
- It's better to err on the side of inclusion. Introducing an unnecessary or duplicate change in the changelog is better than leaving out a change.
- Always keep the guidelines in [Format the pull request title](#format-the-pull-request-title) in mind.
An active decision to include change in changelog/release notes needs to be taken for every pull request. There's a pull request check named **Changelog Check** that will enforce this. By adding/removing labels on the pull request or updating the pull request title/description the check will be re-evaluated.
An active decision to include a change in the changelog needs to be taken for every pull request. There's a pull request check named **Changelog Check** that enforces this rule. By adding or removing labels on the pull request or updating the pull request title, description, or both, the check is re-evaluated.
#### Skip changelog
If you don't want to include your change in changelog/release notes you need to add a label named **no-changelog** to the pull request.
If you don't want to include your change in changelog, you need to add a label named **no-changelog** to the pull request.
#### Include in changelog/release notes
#### Include in changelog
To include a pull request in the changelog/release notes you need to add a label named `add to changelog` to the pull request. Then additional validation rules is checked:
To include a pull request in the changelog, add a label named `add to changelog` to the pull request. Then the following additional validation rules are checked:
- Title need to be formatted according to [Format the pull request title](#format-the-pull-request-title)
-Description needs to include a breaking change notice if change is labeled to be a breaking change, see Breaking changes below for more information.
- The title must be formatted according to [Format the pull request title](#format-the-pull-request-title)
-The description must include a breaking change notice if the change is labeled to be a breaking change. Refer to [Breaking changes](#breaking-changes) below for more information.
Not complying with above rules can make the **Changelog Check** fail with validation errors.
The changelog/release notes are divided into sections and here's a description of how you make a pull request show up in a certain section.
The changelog is divided into various sections. Here's how to make a description of a pull request show up in a certain section of the release notes:
**Features and enhancements:**
Labeled with `add to changelog` and any of the other section rules don't apply.
Label the pull request with `add to changelog` and any of the other section rules don't apply.
**Bug fixes:**
Labeled with `add to changelog` and either labeled with `type/bug` or the pull request title contains `fix` or `fixes`.
Label the pull request with `add to changelog` and either label with `type/bug` or the pull request title contains `fix` or `fixes`.
**Plugin development fixes & changes:**
**Plugin development fixes and changes:**
Labeled with `area/grafana/ui` or `area/grafana/runtime`.
Label the pull request with `area/grafana/ui` or `area/grafana/runtime`.
**Deprecations:**
In case the pull request introduces a deprecation you should document this. Label the pull request with `add to changelog` and use the following template at the end of the pull request description describing the deprecation change.
In case the pull request introduces a deprecation you should document this. Label the pull request with `add to changelog` and use the following template at the end of the pull request description to describe the deprecation change.
```md
# Deprecation notice
@@ -107,7 +106,7 @@ In case the pull request introduces a deprecation you should document this. Labe
**Breaking changes:**
In case the pull request introduces a breaking change you should document this. Label the pull request with `add to changelog` and `breaking change` and use the following template at the end of the pull request description describing the breaking change.
In case the pull request introduces a breaking change you should document this. Label the pull request with `add to changelog` and `breaking change` and use the following template at the end of the pull request description describing the breaking change:
```md
# Release notice breaking change
@@ -118,39 +117,44 @@ In case the pull request introduces a breaking change you should document this.
### Backporting
Backporting is the process of copying the pull request into the version branch of one or multiple previous releases.
This is a rare exception, should only be done for _critical bug fixes_, and involves the intervention of a Grafana Labs employee.
If your pull request fixes a critical bug and needs to be backported, add it to the "Critical Bug Release" form so the team can approve the backport and know that a release needs to be made. Specify the correct `backport vx.x` labels for the releases the fix needs to be backported to. Once approved, the backporting process will continue from there.
Backporting is a rare exception, should only be done for _critical bug fixes_, and involves the intervention of a Grafana Labs employee.
If your pull request fixes a critical bug and needs to be backported, add it to the "Critical Bug Release" form so the team can approve the backport and know that a release needs to be made. Specify the correct `backport vx.x` labels for the releases to which the fix needs to be backported. Once approved, the backporting process continues.
#### Required labels
To ensure that we don't backport pull requests that don't need to be backported, i.e. implement new features, and only backport pull requests that address bugs, have a product approval, or refer to docs changes, backport labels need to be followed by either:
We aim to ensure that we don't backport pull requests unnecessarily. The only scenarios for backporting are typically pull requests that address bugs, have a product approval, or refer to documentation changes.
-`type/bug` label: Pull requests which address bugs,
-`product-approved` label: Urgent fixes which need product approval, in order to get merged,
-`type/docs` label: Docs changes.
-`type/ci` label: Changes to the CI automation.
Backport labels need to be followed by either:
-`type/bug` label: Pull requests which address bugs
-`product-approved` label: Urgent fixes which need product approval, in order to get merged
-`type/docs` label: Docs changes
-`type/ci` label: Changes to the CI automation
> **Note:** You can still backport a pull request after it's been merged.
## Doing the actual merge
Time to actually merge the pull request changes. All commits in a pull request are squashed, hence the GitHub `Squash and merge` button is used to initialize the merge.
The best time to actually merge the pull request varies from case to case. All commits in a pull request are squashed.
This will present you with options allowing you to optionally change the commit message before merging. Please remember that developers might use the commit information when reviewing changes of files, doing git blame and resolving merge conflicts etc., trying to quickly figure out what the actual change was. But there's not really any best practices around this, the following is an attempt to bring some guidance.
You can change the commit message before merging. Please remember that developers might use the commit information for tasks like reviewing changes of files, doing Git blame, and resolving merge conflicts.
Do:
While there aren't formal best practices around this process, you can consider the following guidance:
- Make sure the pull request title is formatted properly before merging, this will automatically give you a good and short summary of the commit/change.
- Leave `Co-authored-by:` lines as is so that co-authors will be accounted for the contribution.
**Do:**
- Make sure the pull request title is formatted properly before merging. Doing so automatically gives you a good and short summary of the commit.
- Leave `Co-authored-by:` lines as is so that co-authors are credited for the contribution.
- Remove any commit information that doesn't bring any context to the change.
Consider:
**Consider:**
-Add any references to issues that the pull request fixes/closes/references to ease giving quick context to things. Doing this allows cross-reference between the commit and referenced issue(s).
-Keep any references to issues that the pull request fixes, closes, or references. Doing this allows cross-reference between the commit and referenced issue or issues.
Finalize the merge by clicking on the `Confirm squash and merge` button.
To finalize the merge, click the **Confirm squash and merge** button.
## After the merge
Make sure to close any referenced/related issues. It's recommended to assign the same milestone on the issues that the pull request fixes/closes, but not required.
Make sure to close any referenced or related issues. We recommend that you assign the same milestone on the issues that the pull request fixes or closes, but this isn't required.
@@ -22,4 +22,4 @@ The above commands use some utils scripts under [_\<repo-root>/e2e_](../../e2e)
## Test suites
All the integration tests are located at _\<repo-root>/e2e/suite\<x>/specs_. The page objects and reusable flows are in the [_\<repo-root>/packages/grafana-e2e_](../../packages/grafana-e2e) package.
All the integration tests are located at _\<repo-root>/e2e/suite\<x>/specs_.
Be sure that you've read the [generalized E2E document](e2e.md).
When end-to-end testing Grafana plugins, it's recommended to use the [`@grafana/plugin-e2e`](https://www.npmjs.com/package/@grafana/plugin-e2e?activeTab=readme) testing tool. `@grafana/plugin-e2e` extends [`@playwright/test`](https://playwright.dev/) capabilities with relevant fixtures, models, and expect matchers; enabling comprehensive end-to-end testing of Grafana plugins across multiple versions of Grafana. For information on how to get started with Plugin end-to-end testing and Playwright, checkout the [Get started](https://grafana.com/developers/plugin-tools/e2e-test-a-plugin/get-started) guide.
## Adding end-to-end tests for a core plugin
Playwright end-to-end tests for plugins should be added to the [`e2e/plugin-e2e`](https://github.com/grafana/grafana/tree/main/e2e/plugin-e2e) directory.
1. Add a new directory that has the name as your plugin [`here`](https://github.com/grafana/grafana/tree/main/e2e/plugin-e2e). This is where your plugin tests will be kept.
2. Playwright uses [projects](https://playwright.dev/docs/test-projects) to logically group tests together. All tests in a project share the same configuration.
In the [Playwright config file](https://github.com/grafana/grafana/blob/main/playwright.config.ts), add a new project item. Make sure the `name` and the `testDir` sub directory matches the name of the directory that contains your plugin tests.
Adding `'authenticate'` to the list of dependencies and specifying `'playwright/.auth/admin.json'` as storage state will ensure all tests in your project will start already authenticated as an admin user. If you wish to use a different role for and perhaps test RBAC for some of your tests, please refer to the plugin-e2e [documentation](https://grafana.com/developers/plugin-tools/e2e-test-a-plugin/use-authentication).
```ts
{
name: 'mysql',
testDir: path.join(testDirRoot, '/mysql'),
use: {
...devices['Desktop Chrome'],
storageState: 'playwright/.auth/admin.json',
},
dependencies: ['authenticate'],
},
```
3. Update the [CODEOWNERS](https://github.com/grafana/grafana/blob/main/.github/CODEOWNERS/#L315) file so that your team is owner of the tests in the directory you added in step 1.
## Commands
-`yarn test:e2e` will run [Grafana's E2E utility](../../packages/grafana-e2e) against an already running Grafana server.
-`yarn test:e2e:update` will run `test:e2e` but instead of asserting that screenshots match their expected fixtures, they'll be replaced with new ones.
- `yarn e2e:playwright` will run all Playwright tests. Optionally, you can provide the `--project mysql` argument to run tests in a certain project.
Your running Grafana instance can be targeted by setting the `CYPRESS_BASE_URL`, `CYPRESS_USERNAME` and `CYPRESS_PASSWORD` environment variableS:
The script above assumes you have Grafana running on `localhost:3000`. You may change this by providing environment variables.
Grafana Labs uses a minimal [homegrown solution](../../packages/grafana-e2e) built on top of [Cypress](https://cypress.io) for its end-to-end (E2E) tests.
Grafana Labs uses a minimal [homegrown solution](../../e2e/utils/index.ts) built on top of [Cypress](https://cypress.io) for its end-to-end (E2E) tests.
Important notes:
- We generally store all element identifiers ([CSS selectors](https://mdn.io/docs/Web/CSS/CSS_Selectors)) within the framework for reuse and maintainability.
- We generally do not use stubs or mocks as to fully simulate a real user.
- Cypress' promises [do not behave as you'd expect](https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Mixing-Async-and-Sync-code).
- [Testing core Grafana](e2e-core.md) is slightly different than [testing plugins](e2e-plugins.md).
- [Testing core Grafana](e2e-core.md) is different than [testing plugins](e2e-plugins.md) - core Grafana uses Cypress whereas plugins use [Playwright test](https://playwright.dev/).
Use hook useStyles2(getStyles) to memoize the styles generation and try to avoid passing props to the the getStyles function and instead compose classes using emotion cx function.
Use hook useStyles2(getStyles) to memoize the styles generation and try to avoid passing props to the getStyles function and instead compose classes using emotion cx function.
#### Use `ALL_CAPS` for constants.
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.