Compare commits

...

688 Commits

Author SHA1 Message Date
Taewoo K. c57667e448 feat: Add atlassian statuspage (#91769)
* add atlassian statuspage

* fix test

(cherry picked from commit ec7a247674)
2024-08-21 15:27:20 +01:00
Todd Treece 3b02f5a93d Chore: Update names of DisabledPostStartHooks (#91767)
(cherry picked from commit 5972dd0b59)
2024-08-21 15:27:16 +01:00
Mitch Seaman e95dbe21f4 Docs: add Zoom to Reporting docs (#90219)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 8525943699)
2024-08-21 15:27:11 +01:00
Todd Treece 8a6751f616 Chore: Revert drone go workspace change to tests (#91762)
(cherry picked from commit 30c3f5b66a)
2024-08-21 15:27:07 +01:00
Andreas Christou 7589578074 Bump grafana-azure-sdk-go and related dependencies (#91124)
* Bump Azure SDK and related dependencies

* Update go.mods

* update-workspace

* Update go files

(cherry picked from commit 24c9aad5bb)
2024-08-21 15:27:02 +01:00
Andreas Christou dfa13c06a5 OpenTSDB: Fix test (#91761)
Fix test

(cherry picked from commit ee18c64453)
2024-08-21 15:26:54 +01:00
Ryan McKinley bd9d1872d7 Auth: Use claims.AuthInfo in requester (#91739)
(cherry picked from commit 243c0935fc)
2024-08-21 15:26:50 +01:00
Andreas Christou e5496c6e87 AzureMonitor: Add authproxy as supported user auth method (#91754)
Add authproxy as supported user auth method

(cherry picked from commit d52626be3f)
2024-08-21 15:26:45 +01:00
Andreas Christou a8f3f70789 OpenTSDB: Fix data frame construction (#90991)
* Update type and frame construction

* Update tests

* Keep dataField name as value

(cherry picked from commit 06509712ec)
2024-08-21 15:26:40 +01:00
Yuri Tseretyan b552409f4d Alerting: Support for optimistic concurrency in priovisioning Tempate API (#91195)
* support optimistic concurrency in template service

* update request handler to get version from query parameter

* return not found if a new template is set with version

* update PUT api to set version

* update documentation + for mute timings

---------

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
(cherry picked from commit 1108a00668)
2024-08-21 15:26:34 +01:00
Isabel Matwawana abe92df6cb Docs: added pagination information for state timeline (#91749)
(cherry picked from commit d20510a1db)
2024-08-21 15:26:29 +01:00
Agni Bhattacharyya 8ad9b65500 Auth: Skip email extraction when api url is not present (#91699)
* Auth: Skip email extraction when api url is not present

* fix lint: reduce cyclomatic complexity

(cherry picked from commit be32630de5)
2024-08-21 15:26:24 +01:00
Karl Persson ffb75d0ae5 Identity: remove GetTypedID (#91745)
(cherry picked from commit bcfb66b416)
2024-08-21 15:26:18 +01:00
Todd Treece 3ee78bdcf5 Chore: Fix requires_buildifier typo (#91747)
(cherry picked from commit 6061fdc8b9)
2024-08-21 15:26:13 +01:00
Michael Mandrus 72df1cf53d CloudMigrations: Misc cleanup before codefreeze (#91725)
* fix retry logic

* slight adjustments

* fix disconnect and connect events

* Update pkg/services/cloudmigration/cloudmigrationimpl/snapshot_mgmt.go

Co-authored-by: Matheus Macabu <macabu@users.noreply.github.com>

---------

Co-authored-by: Matheus Macabu <macabu@users.noreply.github.com>
(cherry picked from commit eee3a75b8b)
2024-08-21 15:26:07 +01:00
Todd Treece 086bda787c Chore: Update tests to use go-workspace script (#91746)
(cherry picked from commit 13703de67e)
2024-08-21 15:25:25 +01:00
Todd Treece e08a2c934f Chore: Use golanglint-ci-includes script in Makefile (#91742)
(cherry picked from commit 27545e3da4)
2024-08-21 15:25:20 +01:00
lean.dev bf6e7876ce CloudMigration: Removes snapshot and resources when deleting a session (#91548)
(cherry picked from commit e20c7342a9)
2024-08-21 15:25:15 +01:00
Alexander Zobnin a2142367c9 Zanzana: Evaluate dashboard and folder permissions (#91539)
* Zanzana: basic folder permissions checks

* Fix managed permissions for teams

* fix sync batch size

* add dashboards actions translations

* migrate folder tree

* migrate dashboard folders

* remove action sets from schema

* Adding more dashboard and folder-related permissions

* refactor

* Correctly translate dashboard permissions in folders

* fix dashboard parent permissions

(cherry picked from commit 1cc438a56c)
2024-08-21 15:25:10 +01:00
Ivan Ortega Alba 0347a0e7c4 Scenes: Upgrade to v5.7.4 (#91741)
(cherry picked from commit 423d198d77)
2024-08-21 15:25:04 +01:00
grafana-pr-automation[bot] 424c4e4a7c I18n: Download translations from Crowdin (#91737)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 0077dd09ae)
2024-08-21 15:25:00 +01:00
Todd Treece e8e1cd074e Chore: Add dataplaneAggregator feature toggle (#91715)
(cherry picked from commit 122e291134)
2024-08-21 15:24:54 +01:00
Todd Treece 323783da7e Semconv: Add k8s.dataplaneservice.name (#91714)
(cherry picked from commit c5c206d8a6)
2024-08-21 15:24:49 +01:00
Kevin Putera bcf8827b00 StateTimeline: Add pagination support (#89586)
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
(cherry picked from commit 01fc31069f)
2024-08-21 15:24:40 +01:00
Todd Treece 526bbc015e Chore: Fix go workspace update script (#91720)
(cherry picked from commit 970a6e71ba)
2024-08-21 15:24:35 +01:00
Alexander Akhmetov 814b4bd116 Fix links to the What's new page in the PR template (#91672)
(cherry picked from commit f4d2e064f4)
2024-08-21 15:24:29 +01:00
Todd Treece 23d3a06152 Chore: Add go workspace scripts (#91707)
(cherry picked from commit 7f155b2b6f)
2024-08-21 15:24:07 +01:00
Kristin Laemmert 67f00aaec4 experiment: use read replica for Get and Find Dashboards (#91706)
(cherry picked from commit 54177ca619)
2024-08-21 15:24:00 +01:00
Todd Treece 41a910cead Chore: Remove depguard rule skip in apiserver (#91705)
(cherry picked from commit f463d622d0)
2024-08-21 15:23:54 +01:00
Kristin Laemmert f4b646da29 QuotaService: refactor to use ReplDB for Get queries (#91333)
* Feature (quota service): Use ReplDB for quota service Gets

This adds the replDB to the quota service, as well as some more test helper functions to simplify updating tests. My intent is that the helper functions can be removed when this is fully rolled out (or not) and we're consistently using the ReplDB interface (or not!)

* test updates

(cherry picked from commit 299c142f6a)
2024-08-21 15:23:47 +01:00
Nathan Marrs 32c95a1a70 Canvas: Fix selection box glitch when adding certain elements (#91654)
* fix selecto glitch when adding certain elements

* minor doc updates

(cherry picked from commit 787abccfbc)
2024-08-21 15:23:38 +01:00
Andreas Christou 806c524578 Bump whats new url 2024-08-21 14:09:36 +01:00
Andreas Christou 94c7ec09ba Set version to 11.2.0 (#143) 2024-08-21 14:01:54 +01:00
Todd Treece b4126d3bce Chore: Update k8s.io dependencies (#91692) 2024-08-08 18:39:44 +03:00
Jack Baldry d1deef29ff Move Explore Metrics to a directory for mounting (#91696) 2024-08-08 16:00:38 +01:00
Adela Almasan 9001b2e0ee Datalinks: UX update (#91657) 2024-08-08 09:17:09 -05:00
Mihai Doarna 925fd26d14 LDAP: Update ldap config comments with TLS info (#91636)
update ldap config comments with TLS info
2024-08-08 17:01:22 +03:00
Andriy 08d9cb095a feat: add drone datasource to the plugins list (#91671) 2024-08-08 16:44:22 +03:00
Tim Mulqueen f3769d1ab0 add netlify to plugin list (#91684)
* add netlify to plugin list

* Update public/app/features/datasources/state/buildCategories.ts

Co-authored-by: Andriy <andriy.urbanas@grafana.com>

---------

Co-authored-by: Andriy <andriy.urbanas@grafana.com>
2024-08-08 15:25:53 +02:00
Mihai Doarna 37f198d5e8 LDAP: Add guide on how to configure LDAP with TLS (#91686)
add guide on how to configure LDAP with TLS
2024-08-08 15:29:00 +03:00
Alexander Zobnin 0e5d7633f7 Access Control: Make it possible to exclude role grants (#91647) 2024-08-08 14:11:17 +02:00
Staton Hysell 89ee970ec3 Chore: Correct viz title casing to sentence casing (#91638)
* Update module.tsx

Corrected the options: Render Count, Data Changed Count, and Schema Changed Count to have the correct sentence casing to match the rest of the product

* Live viz update

Correct type case error on "Show Message" to "Show message"

* Trend viz case correction

Corrected case of Trend viz from "X Axis" and "X Field" to "X axis" and "X field"
2024-08-08 08:04:42 -04:00
grafana-pr-automation[bot] e2a3f78504 I18n: Download translations from Crowdin (#91677)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 13:33:56 +03:00
Josh Hunt 83d8fde5be E2C: Post success toast when migration finishes (#91640) 2024-08-08 11:18:37 +01:00
renovate[bot] 2a67367777 Update dependency type-fest to v4.23.0 (#91675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 13:03:30 +03:00
renovate[bot] ebc7355284 Update dependency eslint-plugin-jest to v28.8.0 (#91668)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 10:33:43 +01:00
Hugo Kiyodi Oshiro bf24454007 Plugins: Fix levitate detailed report and improve error treatment (#91617) 2024-08-08 11:20:58 +02:00
renovate[bot] 875fdb18b4 Update dependency knip to v5.27.2 2024-08-08 09:13:58 +00:00
renovate[bot] 1150ab5377 Update dependency ts-jest to v29.2.4 (#91644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 11:25:45 +03:00
Ashley Harrison 1bca86c8d5 E2C: use TextLink component for consistency (#91642)
use TextLink component for consistency
2024-08-08 09:10:20 +01:00
Jo 8ddc0344d0 Docs: Add warning on UUIDs not being available before 10.2.0 (#91372)
* add warning on UUIDs not being available before 10.2.0

* Update docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-08-08 09:19:27 +02:00
Borja Garrido a083ec9ff5 Transformations: Add variable support to select groupingToMatrix (#88551) 2024-08-08 05:59:03 +03:00
Beto Muniz a8b2a75dab GOps: Setup FullStory in the IRM configuration tracker (#90442)
* GOps: Setup support FullStory in the IRM configuration tracker

* fix: improve fs-unmask class application

* fix: remove extrtag as requested in PR review

* fix: revert extratag removed since it affects UI alignment

* fix: wrap text with trans component as betterer ask

* fix: update extraction
2024-08-07 18:08:13 -03:00
renovate[bot] 5917e1c6d6 Update dependency stylelint to v16.8.1 (#91641)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 19:31:19 +03:00
renovate[bot] b78856596e Update dependency react-zoom-pan-pinch to v3.6.1 (#91639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 19:10:05 +03:00
Gilles De Mey d312e2aacf Alerting: Swap useAsync return signature params (#91634) 2024-08-07 17:58:07 +02:00
renovate[bot] 9cfcc16d1a Update dependency eslint-plugin-jest to v28.7.0 (#91637)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 16:48:32 +01:00
renovate[bot] d5848384f8 Update dependency core-js to v3.38.0 (#91633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 16:11:22 +01:00
renovate[bot] 4d24b124f7 Update dependency @playwright/test to v1.46.0 (#91625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 15:15:01 +01:00
Nathan Vērzemnieks f19a0ce452 Cloudwatch: Clear cached PDC transport when PDC is disabled (#91357)
Cloudwatch: clear cached PDC transport when PDC is disabled
2024-08-07 16:11:56 +02:00
Joey Orlando cb540a28bd Plugins: add IRM plugin to "Alerts & IRM" left-hand navigation group (#91423)
add IRM plugin to "Alerts & IRM" left-hand navigation group
2024-08-07 09:44:43 -04:00
Señor Performo - Leandro Melendez 886985bdba docs: added missing panel options to node graph docs (#91511)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-08-07 09:43:01 -04:00
renovate[bot] f0d0fa901a Update dependency @floating-ui/react to v0.26.22 (#91622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 14:05:58 +01:00
renovate[bot] 7ccf79aa62 Update dependency marked-mangle to v1.1.9 2024-08-07 12:37:07 +00:00
Kristin Laemmert a117b090cf chore: preallocate slices where we have a good idea of requirements (#91596)
* chore: preallocate slices where we have a good idea of requirements

* pr feedback
2024-08-07 08:34:52 -04:00
renovate[bot] 9b652612bd Update dependency knip to v5.27.1 2024-08-07 11:45:17 +00:00
renovate[bot] f384759ad1 Update dependency @types/yargs to v17.0.33 2024-08-07 11:19:34 +00:00
renovate[bot] a33d122485 Update Yarn to v4.4.0 (#91595)
* Update Yarn to v4.4.0

* 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>
2024-08-07 12:48:56 +02:00
Ryan McKinley 9e116d13a5 K8s/Dashboards: Fix dashboard list and add tests (#91523) 2024-08-07 13:43:13 +03:00
Ashley Harrison e8d5d5fbff Storybook: Fix Input story (#91564)
fix type + prefix/suffix
2024-08-07 11:05:20 +01:00
Tom Ratcliffe 3ec2084c23 Alerting: Remove all but one usage of TestProvider within test code (#91542) 2024-08-07 10:58:58 +01:00
Konrad Lalik 9c5a91009b Alerting: Add useNotificationTemplates hook to abstract away templates loading (#91468)
* Add useNotificationTemplates hook to abstract away templates loading

* Add useUpdateNotificationTemplate hook to abstract away updating logic

* Add useDeleteNotificationTemplate hook to abstract away deletiong logic

* Fix and update templatestable tests

* Remove old code

* Improve error handling

* Remove obsolete test

* Fix and improve tests

* Adjust code style

* Update test snapshot, remove redirects in hooks

* Remove unused code, add provenance none handling, fix redirect url

* Improve provisioning state handling
2024-08-07 11:50:07 +02:00
Charandas cf5e49dbb8 build: semconv recently got its own go.mod (#91560) 2024-08-06 16:39:21 -07:00
lean.dev b5e32b31b1 Grafana: Enables use of encrypted certificates with password for https (#91418) 2024-08-06 19:18:32 -03:00
Leon Sorokin 1b6362a807 TimeSeries: Use original frames for creating data links (#91598) 2024-08-06 14:20:24 -05:00
Karl Persson d93f5bab83 RemoteCache: remove count method (#91581)
* remove count method

* remove count from remote cache

---------

Co-authored-by: jguer <me@jguer.space>
2024-08-06 19:21:00 +02:00
Andre Pereira d84fd94936 Tempo: Add migration to enable TraceQL streaming for Tempo datasources (#91340)
* Add migration to enable TraceQL streaming for Tempo datasources

* lint

* Always run migration but exit early if feature flag is disabled

* Require feature toggle OR datasource config to enable streaming
2024-08-06 18:09:06 +01:00
Kim Nylander ce14d79064 [DOC] Add Streaming doc for Tempo data source (#91432)
Co-authored-by: Jennifer Villa <jvilla2013@gmail.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-08-06 18:00:16 +01:00
renovate[bot] 61434b245c Update dependency rudder-sdk-js to v2.48.15 2024-08-06 16:40:17 +00:00
Michael Mandrus 6cd0971dc6 CloudMigration: Show warning message for successfully migrated non-core data sources (#91545)
* minor performance improvement

* apply a warning to any non-core plugins that successfully migrate

* commit frontend wip while I refactor some stuff

* update api

* repurpose error dialog to be a generic details dialog

* whitespace

* add unit test

* fixes from testing

* fix migration summary

* add comment

* fix localization stuff

* fix backend test

* reduce number of queries to the db

* some PR feedback

* whitespace
2024-08-06 19:35:10 +03:00
Yuri Tseretyan ee78bb653f Alerting: Log rule evaluation error in scheduler (#91585) 2024-08-06 19:27:02 +03:00
renovate[bot] f4073e6b8e Update dependency postcss to v8.4.41 2024-08-06 16:19:35 +00:00
Michael Mandrus 14c2e4631a CloudMigrations: Update preview banner text (#91561)
* add link to docs page

* add link to docs

* a word
2024-08-06 19:16:43 +03:00
Adela Almasan e91f16fc46 Datalinks: UX improvements (#91352) 2024-08-06 19:10:37 +03:00
renovate[bot] 9456535567 Update dependency lerna to v8.1.8 2024-08-06 15:54:50 +00:00
owensmallwood 2387798719 Unified Storage: Propagate traces from the apiserver grpc client (#91226) 2024-08-06 09:52:11 -06:00
renovate[bot] 133bb110dc Update dependency autoprefixer to v10.4.20 2024-08-06 14:41:55 +00:00
Tom Ratcliffe 2eae30aeff Alerting: Add jest-dom eslint recommended rules (#91576) 2024-08-06 15:39:46 +01:00
renovate[bot] b7def88db6 Update dependency @msagl/parser to v1.1.20 2024-08-06 14:16:22 +00:00
renovate[bot] e2fe649f7b Update dependency @msagl/core to v1.1.20 2024-08-06 13:37:40 +00:00
renovate[bot] 0dbfeb0c6e Update dependency @floating-ui/react to v0.26.21 (#91572)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 15:28:05 +03:00
renovate[bot] 255a1f6ae4 Update dependency react-hook-form to v7.52.2 (#91482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 13:06:02 +01:00
Tom Ratcliffe 2be2f8a214 Alerting: Tidy up k8s utilities/constants (#91571) 2024-08-06 14:57:43 +03:00
Tom Ratcliffe b4a23e097a Alerting: Add types to react hook form usage register method (#91566) 2024-08-06 12:29:01 +01:00
Hugo Kiyodi Oshiro 0c4e02ba14 Plugins: Add filters by update available (#91526) 2024-08-06 12:16:49 +02:00
Ashley Harrison 2e3f48a49d Navigation: Fix browse dashboards/scenes dashboards when bodyScrolling is enabled (#91479)
set explicit height (not min-height) so everything works in safari
2024-08-06 09:51:31 +01:00
Will Browne 9300c1bbea Plugins: Update CLI check if plugin is already installed (#91213)
* check if plugin installed

* undo remove initial vers check

* still attempt deps
2024-08-06 09:21:40 +01:00
Ihor Yeromin da291998cf Revert "Calcs: Update diff percent to be a percent" (#91563)
Revert "Calcs: Update diff percent to be a percent (#90533)"

This reverts commit 5e21898294.
2024-08-06 11:03:01 +03:00
Jeff Levin d4916207a0 chore(tracing): add tracing for frontend and db session (#91509)
This PR adds instrumentation for loading frontend SPA along with select methods in the dashboard service, and cleans up span handling in sqlstore.

---------

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2024-08-05 17:17:39 -08:00
Charandas abbfc15563 K8s e2e tests: adds e2e package and 10 year certs (#91557) 2024-08-06 03:29:36 +03:00
Kristin Laemmert b6de9e9d3c search v2: pre-allocate dashboardQueryResult slice capacity for performance (#91536)
* search v2: pre-allocate dashboardQueryResult slice for performance
* use limit parameter for starting slice size
2024-08-05 13:54:57 -04:00
Matthew Jacobson 53cfdf0ef8 Alerting: Remove option to return settings from api/v1/receivers and restrict provisioning action access (#90861)
* Remove provisioning action access to v1/receivers api

* Separate ListOnly functionality to its own method without decryption
2024-08-05 11:49:23 -04:00
Michael Mandrus 4d23382497 Caching: Handle memcached reconnects (#91498)
* update library version

* update tls memcached feature toggle

* update to latest version

* updae gomemcache version
2024-08-05 11:21:11 -04:00
Ihor dc9dfb4c4b Typo fix in Templates documentation (#91348)
fix typo
2024-08-05 16:54:48 +02:00
Pepe Cano 114d87bf61 Alerting docs: Update Alerting provisioning HTTP API (#91493)
* Remove `Consumes` info

* Remove `top-level` content negotiation/Produces

* Remove `Version Information`

* Better distinguish between Grafana and Data source managed alerts

* Add note for Enterprise RBAC permissions

* Minor changes for clarity

* Add examples

* Minor copy change

* Update docs/sources/shared/alerts/alerting_provisioning.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update docs/sources/shared/alerts/alerting_provisioning.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update docs/sources/shared/alerts/alerting_provisioning.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

---------

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-08-05 16:47:48 +02:00
Todd Treece 9a2c9647ee Chore: Add storage submodule to lint & test config (#91529) 2024-08-05 17:30:14 +03:00
AvivGuiser 93aa5a56ad Alerting: Use stable identifier of a group,contact point,mute timing when export to HCL (#90917)
---------

Signed-off-by: Aviv Guiser <avivguiser@gmail.com>
2024-08-05 09:56:17 -04:00
Tom Ratcliffe 338b318bf4 Alerting: Use alerting API server for contact points list (#91073) 2024-08-05 16:01:48 +03:00
Ryan McKinley a223c46506 APIServer: Make TableConverter part of ResourceInfo (#91520) 2024-08-05 15:38:12 +03:00
Ryan McKinley f885cc7d9c Chore: Update swagger ui (4.3.0 to 5.17.14) (#91219) 2024-08-05 14:59:24 +03:00
Tom Ratcliffe 734af2ea9f Alerting: Enable "dot-notation" rule (#91497) 2024-08-05 12:06:17 +01:00
Tom Ratcliffe 500ae2ff1e Alerting: Enable "prefer-const" rule (#91495) 2024-08-05 11:37:48 +03:00
Tom Ratcliffe e771500487 Alerting: Enable "no-unused-props" rule (#91492) 2024-08-05 09:18:38 +01:00
Kim Nylander 647f162fe0 [DOC] Add canonical URL to Explore Metrtics (#91501) 2024-08-05 08:34:40 +01:00
brendamuir e7a9a9c161 Alerting docs: fixes alt text errors (#91336) 2024-08-05 09:18:36 +02:00
Todd Treece 8c43b9ec2f Semconv: Change keys to private constants (#91508) 2024-08-02 16:13:00 -04:00
Matthew Jacobson a397bca02e Alerting: Fix panic with nil annotations & Nodata=alerting/ok/keep (#91506) 2024-08-02 22:15:57 +03:00
Yuri Tseretyan 96f7f0f486 Alerting: Use Unstructured type for settings of K8s model Integration + code owners (#91430)
* remove nonnamespaced paths
* use common.Unstructed for Intergration.Settings
* update codeowners to include alerting
* fix json name of secure fields to start with lower case
2024-08-02 20:02:58 +03:00
Vardan Torosyan 1747cd1747 [Auth] Enable cloudRBACRoles feature toggle for self-serve (#91036)
Enable cloudRBACRoles feature toggle for self-serve
2024-08-02 16:47:00 +02:00
Alexander Weaver 72ecde5045 Alerting: Make orgID a direct arg of writer interface (#91422)
make orgID a direct arg of writer interface
2024-08-02 09:37:28 -05:00
Leonor Oliveira 6f6a06435d Remove unified_storage_mode reference in the grafana repo (#91481) 2024-08-02 15:40:05 +02:00
Josh Hunt c070b39dae E2C: Add a 'supported types' disclosure to the bottom of the resources table (#91475) 2024-08-02 14:17:14 +01:00
Todd Treece 5376a2eb93 Chore: Add semconv package (#91408) 2024-08-02 08:35:18 -04:00
Alexa V 0145b0fe70 Dashboard: Chore - Remove rudderstack events from panel menu and toolbar (#91376)
* Chore: Remove rudderstack events from panel interactions, and toolbar in dashboards

- dashboards_panelheader_menu
- dashboards_panelheader_description_displayed
- dashboards_toolbar_actions_clicked

* Add back some toolbar events: sharing, settings, favourites, and add

* restore ShareButton
2024-08-02 13:30:47 +02:00
grafana-pr-automation[bot] 44ed331239 I18n: Download translations from Crowdin (#91474)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-02 11:47:03 +01:00
renovate[bot] 4de68e3774 Update dependency eslint-plugin-jsdoc to v48.11.0 (#91473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 12:44:01 +02:00
Josh Hunt 4fd014eae9 Chore: Update i18next parser to 9.0.1 (#91478) 2024-08-02 13:39:30 +03:00
renovate[bot] 670132ead8 Update dependency @types/node to v20.14.14 2024-08-02 09:56:04 +00:00
Josh Hunt e55b438f14 E2C: Reduce UI poll interval and make configurable (#91386)
* E2C: Reduce UI poll interval and make configurable

* fix default
2024-08-02 10:46:41 +01:00
Josh Hunt a89435aeab I18n: Require Trans i18nKey prop (#91399)
* I18n: Require Trans i18nKey prop

* fix lint errors
2024-08-02 10:46:27 +01:00
Claudiu Dragalina-Paraipan e2435f92f1 [authn]: add GetIDClaims() to Requester (#91387)
* authn: add GetIDClaims() to Requester

Co-Authored-By: Gabriel MABILLE <gamab@users.noreply.github.com>

* authn: update StaticRequester

Co-Authored-By: Gabriel MABILLE <gamab@users.noreply.github.com>

* update auth/idtest/mock

Co-Authored-By: Gabriel MABILLE <gamab@users.noreply.github.com>

* Fix test

Co-authored-by: Claudiu Dragalina-Paraipan <claudiu.dragalina@grafana.com>

---------

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
Co-authored-by: gamab <gabriel.mabille@grafana.com>
2024-08-02 12:36:02 +03:00
renovate[bot] a940bb87be Update dependency msw to v2.3.5 2024-08-02 09:32:44 +00:00
Tom Ratcliffe 1d96cd8ed9 Alerting: Use cloud notifier types for metadata on Cloud AMs (#91054) 2024-08-02 10:30:39 +01:00
Ashley Harrison ce8f5b5e1a Navigation: Fix <Portal> when bodyScrolling is enabled (#91335)
fix portal when bodyScrolling is enabled
2024-08-02 10:29:51 +01:00
renovate[bot] 25b65d96c7 Update dependency browserslist to v4.23.3 2024-08-02 08:38:53 +00:00
renovate[bot] 7d06a17038 Update dependency @grafana/faro-web-tracing to v1.9.0 (#91406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 09:16:10 +01:00
minuchi d03aad8b2c Docs: Update subtitle in Loki datasource documentation to fix link issue (#91454) 2024-08-02 08:51:27 +01:00
Gabriel MABILLE 8988e04044 RBAC: Add permission registry (#91247)
* RBAC: Permission registry

* Populate permission registry

* Wire

* conflic_user_cmd

* Update pkg/services/accesscontrol/permreg/permreg_test.go

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>

* PR feedback

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>

* Remove ToDo, tackle in subsequent PR

---------

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
2024-08-02 09:32:06 +02:00
Ryan McKinley 391284bb33 Storage: Improve (some) error handling (#91373) 2024-08-02 10:27:10 +03:00
Nathan Marrs b63694d75f XYChart: Promote to generally available (#91417) 2024-08-01 16:54:36 -07:00
Isabel Matwawana 21e40908fe Docs: time series overall edit (#91220)
Co-authored-by: Nathan Marrs  <nathanielmarrs@gmail.com>
Co-authored-by: Nathan Marrs <nathanielmarrs@gmail.com>
2024-08-01 16:58:53 -04:00
Leon Sorokin 7c0ee6ebe4 Heatmap: Skip null values instead of treating as 0 (#91424) 2024-08-01 15:40:43 -05:00
Larissa Wandzura 6efd52eac8 Docs: Updates to Traces in Explore doc (#90774)
Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com>
Co-authored-by: Haris Rozajac <58232930+harisrozajac@users.noreply.github.com>
2024-08-01 13:54:00 -05:00
Alexander Akhmetov 3952f627eb Alerting: Parse secret fields case-insensitively when creating or updating a contact point (#90968)
* Alerting: Handle case-insensitive secret fields in contact point settings
2024-08-01 19:03:47 +02:00
Yuri Tseretyan e231211234 Alerting: Fix permissions for prometheus rule endpoints (#91409) 2024-08-01 13:01:00 -04:00
Alyssa (Bull) Joyner c0f01c30c8 Add CockroachDB as an enterprise data source (#90860) 2024-08-01 10:59:40 -06:00
Joao Silva dbb64b3ff0 Icons: Cache Bookmark icons (#91332) 2024-08-01 17:27:44 +01:00
William Wernert a1ee84f757 Alerting: Remove duplicate tracing middleware from prom writer (#91353)
Remove duplicate tracing middleware from prom writer
2024-08-01 11:57:14 -04:00
Ieva 2e2ddc5c42 Folders: Allow folder editors and admins to create subfolders without any additional permissions (#91215)
* separate permissions for root level folder creation and subfolder creation

* fix tests

* fix tests

* fix tests

* frontend fix

* Update pkg/api/accesscontrol.go

Co-authored-by: Eric Leijonmarck <eric.leijonmarck@gmail.com>

* fix frontend when action sets are disabled

---------

Co-authored-by: Eric Leijonmarck <eric.leijonmarck@gmail.com>
2024-08-01 18:20:38 +03:00
renovate[bot] 85e2ea2488 Update dependency @grafana/faro-web-sdk to v1.9.0 (#91403)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 18:07:34 +03:00
renovate[bot] cd4aaab848 Update dependency @grafana/faro-web-sdk to v1.9.0 (#91400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 15:48:46 +01:00
renovate[bot] 882cb70bdf Update dependency @grafana/faro-core to v1.9.0 (#91398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 17:07:32 +03:00
Andrej Ocenas 04d8f0f063 Runtime: Add provider and access hook for location service (#90759) 2024-08-01 15:59:20 +02:00
Brendan O'Handley e39a131110 Prometheus: Add group function to aggregations (#91363)
add group function to aggregations
2024-08-01 08:58:12 -05:00
renovate[bot] ad7b532932 Update dependency @grafana/scenes to v5.7.3 2024-08-01 13:47:47 +00:00
grafana-pr-automation[bot] fb4a4d62c3 I18n: Download translations from Crowdin (#91397)
New Crowdin translations by GitHub Action

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-01 16:44:41 +03:00
Tom Ratcliffe 17067824fb Alerting: Conditionally use k8s API for simplified routing contact points selector (#90901) 2024-08-01 14:41:40 +01:00
Gabriel MABILLE c76d1e04e8 Authz: Fix on-prem grpc authentication (#91341)
* Authz: Fix on-prem grpc authentication

Co-authored-by: Claudiu Dragalina-Paraipan <claudiu.dragalina@grafana.com>

* Remove noAuth override

---------

Co-authored-by: Claudiu Dragalina-Paraipan <claudiu.dragalina@grafana.com>
2024-08-01 16:30:13 +03:00
renovate[bot] d8245966a4 Update dependency rc-cascader to v3.27.0 (#91396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 16:25:47 +03:00
Josh Hunt 024e839aae Chore: Fix Crowdin Download action failing consistently (#91394) 2024-08-01 14:25:33 +01:00
Leonor Oliveira fb9903ed7c Allow to watch from the dual writer (#91375)
* Allow to watch from the dual writer

* Remove comments

* Lint
2024-08-01 15:09:51 +02:00
Alexander Akhmetov a32854549c Alerting: Support median in reduce expressions (#91119)
* Alerting: support median in reduce expressions
2024-08-01 15:04:17 +02:00
Ashley Harrison 66bfb31d8e Tooltip: Handle case where document.body is the scrolling element (#91385)
* handle case where body is the scrolling element

* use instanceof Node instead
2024-08-01 13:34:23 +01:00
renovate[bot] 2cccde932c Update dependency knip to v5.27.0 (#91392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 15:23:04 +03:00
Ashley Harrison 7a9a34629b tidy up styles + fix docked menu overlaying popovers (#91380) 2024-08-01 13:16:45 +01:00
renovate[bot] aa6e9379bf Update dependency i18next to v23.12.2 (#91383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 15:12:30 +03:00
Josh Hunt a547b38643 Docs: Update defaults.ini for new faro option (#91384) 2024-08-01 13:54:39 +03:00
jackyin d11f8c7bc3 Plugins: Ensure grafana cli can install multiple plugin dependencies (#91230)
* fix cli can only install one dep

* handle error
2024-08-01 11:47:11 +01:00
renovate[bot] 796f2994f9 Update dependency eslint-plugin-jsx-a11y to v6.9.0 (#91374)
* Update dependency eslint-plugin-jsx-a11y to v6.9.0

* ignore new violation and add comment to fix

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2024-08-01 13:34:02 +03:00
renovate[bot] bda56de7d6 Update dependency html-loader to v5.1.0 (#91381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 13:31:31 +03:00
renovate[bot] 596c08e8f4 Update dependency eslint-plugin-react to v7.35.0 (#91378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 11:11:09 +01:00
renovate[bot] 6cda2f67de Update dependency eslint-plugin-jsdoc to v48.10.2 (#91370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 11:46:59 +03:00
renovate[bot] 0590a42895 Update dependency eslint-plugin-jest to v28.6.0 (#91343)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 09:28:51 +01:00
Georges Chaudy 36c2e0cfae unifiedStorage: sort by namespace/name ASC (#91314)
* unified: sort by key asc

* sort by key

* keep tests commented
2024-08-01 08:27:01 +00:00
Kim Nylander a77ff98d3f Update traces to metrics doc (#90916) 2024-08-01 08:38:47 +01:00
Dominik Prokop 14c4bb6f87 TemplateSrv: Add test case for SafeSerializableSceneObject (#90808)
* TemplateSrv: Add test case for SafeSerializableSceneObject

* Update dashboard data source to use scoped vars scene object valueOf
2024-08-01 09:38:15 +02:00
renovate[bot] 9e3fd443f2 Update dependency esbuild-loader to v4.2.2 (#91338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 09:36:52 +02:00
Drew Slobodnjak e6531d0ecd Table: Fix negative numbers during rtl styling (#91347)
* Table: fix negative numbers during rtl styling

* revert field config unit check as it is no longer needed with fix implemented in this PR

---------

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2024-07-31 15:28:24 -07:00
Isabella Siu 19585c9491 CloudWatch: Update grafana-aws-sdk for updated metrics (#91364) 2024-07-31 17:40:08 -04:00
Todd Treece e890279dcf Chore: Add go work sync to workspace update (#91360) 2024-08-01 00:06:05 +03:00
Charandas a3d3f9a1e4 Revert "Identity: Remove id token from extra info (#91169)" (#91350)
This reverts commit 10170cb839.
2024-07-31 21:27:46 +03:00
Haris Rozajac e81fa0e4c5 Explore: Check for RBAC permissions when hitting query history endpoints (#91156)
* Check for RBAC permissions when hitting query history endpoints; extract checking logic into a middleware

* Fix lint errors

* Fix test

* Use permissions for patch path; rename callback handler
2024-07-31 12:10:52 -06:00
renovate[bot] eef07aedc8 Update dependency esbuild-plugin-browserslist to ^0.14.0 (#91342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 17:08:18 +01:00
renovate[bot] 7570ea8c4f Update babel monorepo (#91079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 16:32:58 +01:00
Josh Hunt ff774e210c E2C: Show snapshot error status (#91214)
* wip getError fn

* Create show errors from all API requests

* suppress error toasts from all e2c endpoints

* require error severity
2024-07-31 16:04:40 +01:00
Josh Hunt bffcb9de89 E2C: Fix old snapshot showing when reconnecting (#91274) 2024-07-31 15:40:55 +01:00
Victor Marin 24d2fad921 Fix long datalinks to fit in panel options editor (#91203)
fix long datalinks to fit in panel options editor
2024-07-31 17:26:50 +03:00
Sergej-Vlasov 1897de68d4 DashboardGridItem: Add placeholder option when repeat panel options are empty (#91149)
* add placeholder option for repeat panel with empty options

* add tests and update to scenes canary

* adjust tests to not fail on expected console.error
2024-07-31 17:08:29 +03:00
Tom Ratcliffe 6c64d1d443 Alerting: Consume k8s Time Intervals API (#90094) 2024-07-31 16:59:15 +03:00
Sonia Aguilar d080a91e8a Alerting: Refactor createUrl and createAbsoluteUrl (#90667)
* Refactor url creatUrl and add tests

* update createUrl to createRelativeUrl in GrafanaRules.tsx

* Add slash if not present in createAbsoluteUrl

* Use template type forcing url parameter to start with slash instead of adding slash if not present

* address review comment
2024-07-31 15:30:35 +02:00
renovate[bot] 230416cbb4 Update dependency @tanstack/react-virtual to v3.8.4 (#91287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 16:28:06 +03:00
lean.dev 235f223aef CloudMigrations: Fix typo in trace name (#91261) 2024-07-31 10:24:40 -03:00
Tobias Skarhed e8c30c86f0 Frontend: Support tracing with Faro (#91237)
Move code from previous PR
2024-07-31 15:13:05 +02:00
colin-stuart 057c04ed9d IDToken: Add current user's DisplayName to the ID token (#90992)
Set claims.Rest.DisplayName from the IDService
2024-07-31 09:11:37 -04:00
renovate[bot] f58dd70c2b Update dependency @react-awesome-query-builder/ui to v6.6.2 (#91257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 14:07:57 +01:00
renovate[bot] 856d6b9c9e Update dependency @react-types/shared to v3.24.1 (#91258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 14:07:26 +01:00
Joao Silva 85d0e17dc4 Bookmarks: Store URLs instead of ids (#91121) 2024-07-31 13:56:39 +01:00
Tom Ratcliffe 562380079f Alerting: Chore - remove unused alerting upgradeApi (#91250) 2024-07-31 12:57:48 +01:00
Esteban Beltran 782b725d87 Plugins Catalog: Display Request data source and view roadmap links (#91175)
* Add roadmap links to connection tab

* move to its own component

* add roadmaplinks to the catalog browse page

* use trans for text

* Change TextLink to accept ReactNode

* use Space component

* Add translations
2024-07-31 13:12:16 +02:00
Sven Grossmann 14db32cc9f Loki: Add option to issue forward queries (#91181)
* Loki: Add option to issue forward queries

* Loki: Fix spelling of "backward"/"forward"
2024-07-31 12:53:59 +02:00
renovate[bot] b2314dfb55 Update dependency @playwright/test to v1.45.3 (#91248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 11:29:26 +01:00
antonio 9e64f51485 alerting: add link to killercoda sandbox in the alerting get started tutorial (#91238)
alerting:fix killercoda link to get started tutorial
2024-07-31 12:11:11 +02:00
Joao Silva b99d635e30 Bookmarks: Add field for pinNavItems toggle to grafana_navigation_item_clicked interaction (#91184) 2024-07-31 11:07:24 +01:00
Joao Silva 57323e1104 Preferences: Keep navbar preferences when saving from Preferences screen (#91197) 2024-07-31 11:07:08 +01:00
renovate[bot] 7cda6b5245 Update dependency @grafana/plugin-e2e to v1.6.1 (#91246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 11:06:01 +01:00
Alex Khomenko acbf02cd2f Navigation: Redirect org users to admin users (#91051) 2024-07-31 11:49:14 +02:00
renovate[bot] ad8e317987 Update dependency @grafana/faro-web-sdk to v1.8.2 (#91244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 10:40:50 +01:00
Ryan McKinley f804b0baa3 Storage: Return an iterator from backend List (#91185) 2024-07-31 12:05:59 +03:00
Ivan Ortega Alba dd9172e738 Scenes: Upgrade to v5.7.2 (#91241) 2024-07-31 12:02:43 +03:00
renovate[bot] e5cf0bd220 Update dependency @grafana/faro-web-sdk to v1.8.2 (#91191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 11:57:39 +03:00
Ieva 702fc3477d RBAC: Fix folder move check when action sets are disabled (#91200)
fox folder move check when action sets are disabled
2024-07-31 09:49:09 +01:00
Alexander Zobnin 44f5db5609 RolePicker: Reload org users after role update (#91201) 2024-07-31 11:46:51 +03:00
Tobias Skarhed ff54333881 Combobox: Add clear and reset onBlur (#90943)
* Add clear and reset onBlur

* use selectItem

* Use downshift hooks instead

* Fix Clear bug and extract i18n

* Remove useMemo from story

* Add loading state to many options story

* Set fallback to null

* Fix unused import

* Use onBlur and pass it to Downshift instead
2024-07-31 10:37:09 +02:00
renovate[bot] a5795ad66e Update dependency @grafana/faro-core to v1.8.2 (#91099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 09:18:38 +01:00
Giuseppe Guerra 95f340738c Angular deprecation: Disable dynamic angular inspector if CheckForPluginUpdates is false (#91194)
* Angular deprecation: Disable dynamic angular inspector if CheckForPluginUpdates is false

* Add tests

* add type checks for dynamic service
2024-07-31 10:10:12 +02:00
Ryan McKinley 160fe2a3a4 Storage: Remove entity store (#91233) 2024-07-31 09:25:39 +03:00
Ryan McKinley 10170cb839 Identity: Remove id token from extra info (#91169) 2024-07-31 09:14:13 +03:00
Ryan McKinley 68f1a0619d Snapshots: Remove deprecated option snapshot_remove_expired (#91231) 2024-07-31 08:47:15 +03:00
Nathan Marrs fc1139e51a Transformations: Promote format string as generally available (#91161) 2024-07-31 05:10:07 +03:00
Diego Augusto Molina 30d4a4249c Storage: Disable Resource Server integration tests to unblock pipelines (#91216)
disable integration tests to unblock pipelines until we find the issue
2024-07-30 21:39:33 -03:00
Nathan Marrs 0423c67495 Transformations: Promote add field from calc stat function cumulative and window calcs as generally available (#91160) 2024-07-31 03:30:24 +03:00
Nathan Marrs a71dfd3109 Canvas: Support template variables in base URL of actions (#91227) 2024-07-30 17:21:57 -07:00
Nathan Marrs 0a34b51055 Transformation: Add variable support for filter by value regex matcher (#90926)
* add support for template vars in filter by value transformation for regex matcher

* less code is more code

* add test to confirm interpolation works for regex

* suggestions input for regex editor

---------

Co-authored-by: Adela Almasan <adela.almasan@grafana.com>
2024-07-31 02:15:44 +03:00
Yuri Tseretyan 537f1fb857 Alerting: Fix persisting result fingerprint that is used by recovery threshold (#91224)
* fix persister to save result fingerprint

* revert change

* fmt
2024-07-30 18:07:13 -04:00
Lucy Chen f96eed5abf Sharing Redesign: Add missing i18n translation (#90775)
add i18n translations
2024-07-30 15:39:32 -04:00
Kristina 783ff71560 Explore: Allow saving to Query Library from query row (#89381)
* wip

* Add save functionality to query row

* add success conditional

* move around translations

* Add translations

* Add key to fix test

* Add key to the right spot

* define specific save button

* WIP - Use RowActionComponents to add action without modifying the core component

* Only add component once on render

* Move logic to main explore page

* Add keyed render actions to prevent redundancy, use this to add keyed action

* Overcome the forces of dayquil to attempt to make actual sense

* Add scoped actions to query action component

* Spaces not allowed in generateName
2024-07-30 13:56:44 -05:00
Sven Grossmann e7156e7e60 Logs: Remove grafana_explore_logs_log_details_clicked event (#91171) 2024-07-30 20:12:30 +02:00
Sven Grossmann 270b01f883 Logs: Remove grafana_explore_logs_result_displayed event (#91172) 2024-07-30 20:12:12 +02:00
owensmallwood 2362e79e4e Unified Storage: Configure client to use tls=preferred (#91162)
* optionally set tls=preferred in the mysql connection string from env var
2024-07-30 11:24:28 -06:00
Nihal 9ad9b4989b Alerting: Include a list of ref_Id and aggregated datasource UIDs to alerts when state reason is NoData (#88819)
* include a list of ref_Id and datasource UID to alerts when state reason is NoData. 

---------

Signed-off-by: Syed Nihal <syed.nihal@nokia.com>
2024-07-30 12:55:59 -04:00
Kristin Laemmert ac0b4bb34d refactor replCfg to look more like plugins/plugin config (#91142)
* refactor replCfg to look more like plugins/plugin config
* validateReplicaConfigs must handle inconsistencies in type names due to the WithHooks suffix
2024-07-30 12:09:56 -04:00
Alexander Weaver 4c71cadd5f Alerting: Detach condition validator from condition evaluator (#91150)
* Detach validator from evaluator

* Drop unnecessary interface and type
2024-07-30 10:55:37 -05:00
Claudiu Dragalina-Paraipan cf55ac5813 authz: set authzv1.ReadResponse.Found (#91212)
Co-authored-by: Gabriel MABILLE <gabriel.mabille@grafana.com>
2024-07-30 18:26:54 +03:00
github-actions[bot] 66b1a219f4 Alerting: Update Swagger spec (#79850)
* chore: update alerting swagger spec
* update public swagger

---------

Co-authored-by: rwwiv <rwwiv@users.noreply.github.com>
Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
2024-07-30 18:17:23 +03:00
Yuri Tseretyan 2023821100 Alerting: update Loki backend of state history to batch requests by folder (#89865)
* refactor `selectorString` and remove Selector struct

* move code from selector string to BuildLogQuery

* batch requests by folder UID

* update historian annotation store to handle multiple queries

* sort folder uids to make consistent queries

* add logs to loki http

* log batch size but not content. content is logged by the client
2024-07-30 11:07:10 -04:00
Claudiu Dragalina-Paraipan 05ab4cdd1f [authz]: use authlib client (#91205)
authz: use authlib client

Co-authored-by: Gabriel MABILLE <gabriel.mabille@grafana.com>
2024-07-30 17:49:46 +03:00
Kevin Minehart bee678da94 CI: Fix drone docker publish (#91204)
* $debug -> $$debug

* use bash instead of sh

* Update publish_images.star

* Install bash in the docker/docker image

* buildifier
2024-07-30 15:44:04 +01:00
Georges Chaudy 68dd311337 ResourceStore: remove the entity bridge (#90995) 2024-07-30 16:29:25 +02:00
antonio 896f4889b6 2024 07 killercoda tutorial for alerting (#90875)
* alerting/tutorials:killercoda

* changed asset

* alerting: add killercoda to get started tutorial

* applied suggestions

* all pretty, no pity
2024-07-30 15:58:44 +02:00
Georges Chaudy 901f7f1529 unifiedStorage: fix flaky integration test (#91199)
unified: fix flaky integration test
2024-07-30 16:55:51 +03:00
Isabella Siu c68feecb6e CloudWatch: Add errorsource for QueryData (#91085) 2024-07-30 09:55:01 -04:00
Michael Mandrus 3e138449bb CloudMigrations: Fix bugs found during local testing (#91163)
* send dashboard commands instead of dashboards

* move status updates before goroutine to ensure frontend polls

* fix syncing issues between snapshot state and resources

* make sessionUid a requirement for modifying snapshots

* move the function I meant to move earlier

* remove accidental commit

* another accidental commit

* verify UpdateSnapshot is called with sessionUid

* revert

* pass in session uid everywhere

* forgot to save

* fix unit test

* fix typo

* tiny tweak
2024-07-30 09:02:41 -04:00
João Calisto 0a561d22fb CI: Add new RRC pipeline (#90731)
* CI: Add new RRC pipeline
2024-07-30 14:01:10 +01:00
Egor ad770cf1e5 Jaeger: Fix calling of search query with the correct time range (#90320)
* Jaeger: call search query with query range (#88156)

* Update test

---------

Co-authored-by: Ivana Huckova <ivana.huckova@gmail.com>
2024-07-30 15:27:22 +03:00
Tom Ratcliffe 6fcf594b32 Alerting: Add eslint testing-library plugin dependency and create separate ESLint config (#91052) 2024-07-30 15:16:54 +03:00
renovate[bot] e3842df675 Update dependency @types/node to v20.14.13 2024-07-30 11:57:59 +00:00
renovate[bot] 22ad5395d5 Update dependency @reduxjs/toolkit to v2.2.7 2024-07-30 11:35:34 +00:00
Tom Ratcliffe e877b82af7 Chore: Update imports from RTKQ (#91182) 2024-07-30 12:10:18 +01:00
Will Browne fa49fe3331 Plugins: Use bundle instead of individual plugin during construct step (#91140)
* work off bundle instead of individual plugin

* Remove children

Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>

* Remove children ref

Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>

* fix assign

* end early

* unset children

---------

Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>
2024-07-30 11:24:37 +01:00
Ryan McKinley da65825c5f Storage: Consolidate error handling (#91167) 2024-07-30 10:16:16 +00:00
kay delaney b80e16075f Scenes/Dashboards: Fix issue where changes in panel height weren't saved (#91125)
* Scenes/Dashboards: Fix issue where changes in panel height weren't saved
2024-07-30 12:34:30 +03:00
Joao Silva 35315f43fe Pin Nav Items: Don't show icon for items without id (#91141) 2024-07-30 10:33:52 +01:00
renovate[bot] de5932a2ab Update dependency @grafana/scenes to v5.7.0 (#90896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 10:29:44 +01:00
Vardan Torosyan e20f8c566d RBAC sync: Fix removal of roles which need to be added (#91152)
* RBAC sync: Fix removal of roles which need to be added

* Optimize code

* cleanup: appease the linter

---------

Co-authored-by: Victor Cinaglia <victor@grafana.com>
2024-07-30 09:00:47 +02:00
Ryan McKinley 728150bdbd Identity: extend k8s user.Info (#90937) 2024-07-30 08:27:23 +03:00
Señor Performo - Leandro Melendez efda5a3ef2 docs: Added sub header, description for video link (#91083)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-29 17:42:37 -04:00
ismail simsek 2536049ffd Chore: Remove MetricCategoryCascader from Explore Metrics (#91039)
remove MetricCategoryCascader
2024-07-29 22:51:52 +02:00
Yuri Tseretyan 8323b688c6 Alerting: Improve logging in scheduler and states (#91003)
* handle metadata map nil

* remove double context

* clean up logging in scheduler

* do not reuse loggers from previous ticks

* log the dropped tick

* log tick instead of ticknum

* replace with processing tick logs

* log sending notifications

* update logging in persister to fetch context

* logs to historian

moved them upstream to be able to log when store is overridden
2024-07-29 16:01:48 -04:00
Yuri Tseretyan 1b4b1af9b7 Alerting: Receiver API to use same logic for calculating UID as backend serivce (#91153)
use same logic for calculating uID as backend serivce
2024-07-29 15:55:49 -04:00
Georges Chaudy 7ad37ff4e4 UnifiedStorage: ensure list from history works across all 3 database backends (#91134)
* Ensure List is sorted by resource version DESC

* Ensure List is sorted by resource version DESC

* fix list in the past for postgres
2024-07-29 13:49:54 -06:00
Matthew Jacobson 62f67e38b8 Alerting: Implement receiver auth service (#90857) 2024-07-29 15:49:10 -04:00
Gabriel MABILLE b982259950 RBAC: Default to plugins.app:access for plugin includes (#90969)
* Default to app access for includes

* Check plugin type
2024-07-29 20:56:09 +02:00
Yuri Tseretyan 34dbfefc86 Alerting: Template service to check for provenance status of update\delete (#90688) 2024-07-29 14:10:03 -04:00
lean.dev d8555019f1 CloudMigrations: Fix migration in docker (#91147) 2024-07-29 15:00:43 -03:00
Michael Mandrus a6088e4ee4 CloudMigrations: Improvements to backend (#91012)
* E2C: Add stat rollup to MigrationSummary

* fix report event url

* open form in new page

* sort folders by heirarchy

* undo accidental commit

* remove another commit

* make folder sorting dynamic

---------

Co-authored-by: joshhunt <josh@trtr.co>
2024-07-29 17:55:22 +00:00
Tom Ratcliffe 9d639278f4 Alerting: Refactor simplified routing contact points hook (#90762) 2024-07-29 19:22:31 +03:00
Joseph Perez 24c64fdffa Docs: Edit of contribute to docs guide (part 8 of doc improvement project) (#90405)
* Docs: Edit of contribute to docs guide (part 8 of doc improvement project)

* Fix open source

* Modify bullets

* Change final sentence

* Fix final sentence
2024-07-29 08:49:41 -07:00
Josh Hunt 1a7c965f7d E2C: Fix rebuild snapshot not showing while pending upload (#91077)
* E2C: Fix rebuild snapshot not showing while pending upload

* fix unable to make snapshot after disconnect/reconnect

* fix wrap on migration summary
2024-07-29 18:27:31 +03:00
brendamuir 218cf45ec0 Docs: adds alerting redis link to grafana config docs (#91112)
* Docs: adds alerting redis link to grafana config docs

* Update docs/sources/setup-grafana/configure-grafana/_index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-07-29 16:46:15 +02:00
Kristin Laemmert af19f039b6 Chore (sqlstore): add validation and testing for repl config (#90683)
* add some validation and testing for repl cf
* connection strings are secrets
2024-07-29 10:32:56 -04:00
Georges Chaudy d12cd4280c unifiedStorage: name can be length 1 (#91126)
* fix: name can be len 1

* fix: name can be len 1

* fix: name can be len 1
2024-07-29 15:54:52 +02:00
Joseph Perez eee66882ef Docs: Edit of files in the backend contributor guide (part 7 of doc quality improvement project) (#89974)
* Docs: Edit of multiple files in the backend contributor guide (part 7 of doc quality improvement project)

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/package-hierarchy.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/package-hierarchy.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/services.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/services.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/services.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/package-hierarchy.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/services.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Fix for active voice

* Update contribute/backend/instrumentation.md

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Update contribute/backend/instrumentation.md

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>

* Fix from review

* Update contribute/backend/services.md

* Update contribute/backend/services.md

* Spelling of wire

* Prettier fixes

* Minor fix

---------

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>
2024-07-29 06:06:50 -07:00
Leonor Oliveira 8345af928c [Dual writer] Read kind value passed as dualwriter's argument (#91113)
* Include kind on the dualwriter to be used on metrics

* Use kind as argument

* Skip dual writer in mode4
2024-07-29 13:57:44 +02:00
Tom Ratcliffe 604c99f137 Alerting: Don't show success message after updating AM config (#90934) 2024-07-29 12:02:34 +01:00
Andre Pereira 733807f963 Tempo: Show search streaming status in query options (#90726)
* Show whether search streaming is enabled in query options

* Fix tests

* Address comments
2024-07-29 11:58:01 +01:00
Ida Štambuk 57331eb898 Docs: Update docs with Metric Insights builder cross-account feature (#91069)
---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-07-29 12:24:04 +02:00
Ida Štambuk ec3dc74080 Features: Release Cloudwatch Metric Insights cross-account querying to public preview (#91066) 2024-07-29 12:23:46 +02:00
Will Browne 1b3fa8c47f Plugins: Hide version information when plugin is managed (#88065)
* first pass

* fixup

* fix linter issues

* fix API test

* update naming

* rework

* update var name

* empty check

* prettier

* fix test

* fix lint
2024-07-29 11:18:43 +01:00
Ieva e2ee7f06eb RBAC: Prevent role picker from disappearing when many roles are selected (#91065)
make the container of selected roles scrollable
2024-07-29 11:17:55 +01:00
Gilles De Mey 746e2eeee6 Alerting: Add validation for path separators in the rule group edit modal (#90887)
Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
2024-07-29 11:59:15 +02:00
Joao Silva c694c97651 Bookmarks: Make the button accessible (#91037) 2024-07-29 10:31:26 +01:00
Alex Khomenko 47fb116989 Paginate migrated resources (#91055)
* E2C: Add snapshot table pagination

* Fix default page number

* Update defaults

* Reduce page size to 50, correctly calculate number of pages

---------

Co-authored-by: joshhunt <josh@trtr.co>
2024-07-29 10:21:04 +01:00
Piotr Jamróz 8d98c9eba7 Explore: Pass the dataframes along with the time range of the data (#90594)
* Explore: Pass the dataframes along with the time range of the data (#90259)

* Use data time range for rendering instead of selected range from the picker

* Update CustomContainer to use data time range

* Update test

(cherry picked from commit 58285e37a2)

* Memoize visible range passed to LogsVolumePanel

* Ensure onHiddenSeriesChanged is called only when hidden frames change
2024-07-29 12:07:06 +03:00
Leonor Oliveira 6a1e835f12 Get kind from runtime.Object. Unify metric names (#91041)
* Normalize name labels

* Access kind

* Read kind from the runtime object instead from the options object

* use kind from object on create
2024-07-29 09:58:48 +02:00
Taylor C a7679b5f8d (Docs) Updates RBAC actions for Adaptive Metrics (#90907) 2024-07-28 08:34:20 +01:00
Kevin Minehart 2ffdc2d5b0 CI: Fix release-pr call in releases (#91088)
* Fix release-pr call in releases

* Remove backport arg

* set TARGET to v_target
2024-07-26 17:20:36 -06:00
Kevin Minehart 4e84234424 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
2024-07-27 02:14:36 +03:00
Matthew Jacobson a1f0b599a7 Alerting: Refactor receiver_svc and provisioning config store into legacy_storage package (#90856)
* Add more receivers api tests

* Move provisioning config store to new legacy_storage package
2024-07-26 17:45:33 -04:00
Drew Slobodnjak 0edb0c5c4f Canvas: Always show rotation in layout editor (#90571)
* Canvas: Always display rotation in layout editor

* Simplify condition

* Set default rotation from options if null
2024-07-26 14:37:07 -07:00
Yuri Tseretyan 6b0d20c96a Alerting: time interval service to support addressing intervals by Base64 encoded name (#90563)
* rename to getMuteTimingByName

* add UID to api model of MuteTiming

* update GetMuteTiming to search by UID

* update UpdateMuteTiming to support search by UID

* update DeleteMuteTiming to support uid

* make sure UID is populated

* update usages

* use base64 url-safe, no padding encoding for UID
2024-07-26 16:43:40 -04:00
Victor Marin 2ab746ae76 Disallow edit for panels in repeated rows (#90967) 2024-07-26 23:11:05 +03:00
Juan Cabanas 397dfaf679 ShareDrawer: Share link panel (#90549) 2024-07-26 17:04:34 -03:00
Leon Sorokin 90349b21f7 VizTooltip: Hide on page scroll even if anchored (#91084) 2024-07-26 22:27:49 +03:00
renovate[bot] 1503c82ae9 Update dependency underscore to v1.13.7 2024-07-26 17:05:18 +00:00
renovate[bot] ef1d96c19a Update dependency postcss to v8.4.40 2024-07-26 16:30:37 +00:00
renovate[bot] 9a376d64c8 Update dependency downshift to v9.0.7 2024-07-26 16:05:44 +00:00
Alexander Weaver b7220b532e Alerting: Fix bug where patching recording rule queries wouldn't apply (#91011)
* the fix

* tests
2024-07-26 11:02:54 -05:00
Josh Hunt d7e85354d1 E2C: Improvements to workflow (#91045)
* E2C: Improvements to workflow

* no eslint comment

* i18n

* i18n:

* lint
2024-07-26 16:56:03 +01:00
renovate[bot] 8e006fedda Update dependency @grafana/experimental to v1.7.13 2024-07-26 15:42:50 +00:00
renovate[bot] 3383e2f6b9 Update dependency @grafana/aws-sdk to v0.4.1 (#90898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 18:03:44 +03:00
Yuri Tseretyan 534549e491 Alerting: Update documentation for MS Teams integration (#90610)
---------

Co-authored-by: Alyssa Wada <101596687+alyssawada@users.noreply.github.com>
2024-07-26 10:59:58 -04:00
grafana-delivery-bot[bot] d50bad8fee Release: update changelog for 11.1.3 (#91058)
* Update changelog

* Update CHANGELOG.md

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
2024-07-26 14:17:52 +00:00
Ryan McKinley ec6c6bd6c3 Identity: Add read-only identity apiserver (#90418) 2024-07-26 17:09:08 +03:00
Ryan McKinley be7b1ce2df Chore: Replace appcontext.User(ctx) with identity.GetRequester(ctx) (#91030) 2024-07-26 16:39:23 +03:00
Tobias Skarhed ddd38afa57 SCSS: Fix mixed declarations deprecation (#91048)
Fix scss deprecation
2024-07-26 15:51:28 +03:00
Ida Štambuk 67f0d04744 Cloudwatch: Add account Id in groupBy options for Metric Insights cross-account (#90906) 2024-07-26 14:20:39 +02:00
Georges Chaudy e4ed000d05 ResourceStore: Fix sql List (#91043)
* fix resource list

* ensure we get the resource version without FOR SHARE
2024-07-26 13:56:24 +02:00
Sonia Aguilar 8423d06988 Alerting: Implement UI for grafana-managed recording rules (#90360)
* Implement UI for grafana-managed recording rules

* use undefined for the duration instead of null , for recording rules

* Fix tests

* add tests

* Add pause functionality for grafana recording rules

* update translations

* remove obsolete snapshot

* use createUrl instead of renderUrl

* refactor

* Add validation for grafana recording rule name

* create util functions for rule types and add record field in mock function

* add util isDatatSourceManagedRuleByType

* refactor

* Add metric field in alert rule form

* fix alert name component

* update width for alert name and metric

* fix test

* add validation back to cloud recording rules name

* Alerting: Recording rules PR review (#90654)

Update type helper methods

* add slash in createUrl

* fix baseurl in the returnTo

* nits

* Add metric on expanded row in the alert list view

* nits
Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>

* update snapshot

---------

Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
2024-07-26 13:52:22 +02:00
Michael Mandrus c0af387766 CloudMigrations: Add a default feedback url (#91018)
add default url
2024-07-26 11:26:18 +01:00
Michael Mandrus 8627385132 CloudMigrations: Open feedback link in a few tab (#91014)
open feedback link in a new tab
2024-07-26 11:26:07 +01:00
Sven Grossmann f5b4fc58e3 Loki: Also replace step with vars (#91031) 2024-07-26 11:55:04 +02:00
brendamuir f66149807d Alerting docs: adds history view docs (#91033)
* Alerting docs: adds history view docs

* ran prettier
2024-07-26 11:51:08 +02:00
Josh Hunt 17bd302ef2 E2C: Add stat rollup to MigrationSummary (#90970)
Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
2024-07-26 09:52:59 +01:00
Kevin Minehart a19a9903bf CI: Fix release-comms regex (#91024)
Fix release-comms regex
2024-07-26 08:18:22 +02:00
grafana-delivery-bot[bot] 190256ee2f Release: update changelog for 11.0.2 (#91022)
* Update changelog

* prettier

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Minehart <kmineh0151@gmail.com>
2024-07-25 23:50:03 +00:00
grafana-delivery-bot[bot] 5aac6e6056 Release: update changelog for 10.4.6 (#91016)
* Update changelog

* prettier:write

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Minehart <kmineh0151@gmail.com>
2024-07-25 23:22:13 +00:00
Kevin Minehart 7e4b7f73e7 CI: use main instead of my branch in release-pr.yml (#91004)
use main instead of my branch
2024-07-26 00:35:20 +03:00
ismail simsek 8dd6bfef3c Explore Metrics: Update history breadcrumb tooltips (#90825)
* add history handler

* move them into functions

* handle adding new history steps

* handle time history by respecting the timezone

* remove commented code

* no type casting

* add unit tests

* add colons and a new type metric_page

* remove console

* fix unit tests
2024-07-25 23:27:41 +02:00
Kevin Minehart 2fe506d502 CI: fix release pr target (#90999)
* use inputs.target as checkout ref, and `main` for all reused actions.
2024-07-25 16:14:29 -05:00
grafana-delivery-bot[bot] 3137410f3f Release: update changelog for 11.1.1 (#90997)
* Update changelog

* Update CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Minehart <5140827+kminehart@users.noreply.github.com>
2024-07-25 21:03:29 +00:00
Kristin Laemmert daedb358dd chore (replstore): fix registration with multiple sql drivers, again (#90990)
* replstore: fix registration with multiple sql drivers, again
* only compile regex once
2024-07-25 15:13:36 -04:00
Diego Augusto Molina 9852513c65 Release Pipeline: [RPM pkg verification] Fix linefeeds converted to literal backslash-n sequences (#90989)
fix lf converted to literal backslash-n sequence
2024-07-25 15:31:17 -03:00
Joseph Perez 3df7a854e6 Docs: Edit of 4 files in contribute/style-guides (part 9 of doc quality improvement project) (#90705)
* Docs: Edit of 4 files in contribute/style-guides

* Respond to review question

* Fix unordered list

* Update contribute/style-guides/e2e-core.md

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

* Update contribute/style-guides/e2e-core.md

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

* Update contribute/style-guides/e2e-core.md

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

* Fix title

* Prettier fixes

---------

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
2024-07-25 11:14:19 -07:00
lnnt 3c405e8b1f Update version of docker-compose.yaml (#90539)
* Update version of docker-compose.yaml

* Update index.md
2024-07-25 12:28:30 -05:00
Kevin Minehart 089a5710b6 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
2024-07-25 19:42:41 +03:00
Georges Chaudy 4baca6947d ResourceServer: make the resource store the default unified storage backend (#90899)
* make the resource store the default unified storage backend

* add integration tests

* fix test non passing

* Update pkg/storage/unified/sql/test/integration_test.go

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>

* lint

* fix tests

* fix no rows

---------

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2024-07-25 18:17:39 +02:00
Kavindu Nilshan 0b822478b6 Resolved the issue stated in issue #90426. (#90465)
* Resolved the issue stated in issue #90426.

* Method created to get the length of the url.

* Applied the length logic and intentional fall through in switch.

* Changed the way length calculated

Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com>

* Remove un-used method getUrlLength

* Refactoring

---------

Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com>
2024-07-25 10:06:23 -06:00
Kevin Minehart d4304b59ec CI: fix changelog repo null (#90960)
* give secrets when running changelog action

* i guess secrets don't have types
2024-07-25 18:36:03 +03:00
Josh Hunt 7e6e76f4ff E2C: Show rebuild snapshot button (#90941)
* E2C: Show rebuild snapshot button

* i18n

* Update public/app/features/migrate-to-cloud/onprem/Page.tsx

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

---------

Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
2024-07-25 18:03:59 +03:00
Kevin Minehart 14396048d7 CI: changelog boolean type (#90948)
* bool -> boolean

* add missing type keys

* provide secrets in release-pr

* use permissions and built-in github token
2024-07-25 09:52:15 -05:00
Kevin Minehart c326d865c5 RBAC: Allow plugins to use scoped actions (#90946)
Co-authored-by: gamab <gabriel.mabille@grafana.com>
2024-07-25 17:22:42 +03:00
Diego Augusto Molina 95000f9fc8 fix data race in GetWebAssets (#90939) 2024-07-25 11:14:40 -03:00
Adela Almasan 0a870e6a88 Canvas: Element data links refactor (#90636)
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
2024-07-25 07:13:21 -05:00
Josh Hunt d3061ab61a E2C: Display Pending status for resources (#90935) 2024-07-25 12:38:11 +01:00
Adam Yeats 3ce1a5b0ca AzureMonitor: Fix out of bounds error when accessing metricNamespaceArray and resourceNameArray in buildResourceURI (#89222)
Fix out of range error when accessing metricNamespaceArray in buildResourceURI
2024-07-25 11:19:15 +01:00
Ryan McKinley 9db3bc926e Identity: Rename "namespace" to "type" in the requester interface (#90567) 2024-07-25 12:52:14 +03:00
Alex Khomenko 8cdf5ee824 E2C: Add Public Preview banner (#90922)
* E2C: Add public preview message

* Read feedback URL from the settings

* Translate strings

* Add missing translation

* Add missing translation[2]
2024-07-25 12:44:49 +03:00
Laura Fernández 944cc87f65 Combobox: Styling for dropdown (#90140)
* Add getSelectStyles

* Modify combobox styles

* Fix option with description styles

* Add highlightedIndex

* Undo estimateSize changes

* Create getComboboxStyles

* Add floating ui to Combobox

* Use elements to apply existing refs

* Delete width on styles

* Fix menu styling

* Update packages/grafana-ui/src/components/Combobox/Combobox.tsx

Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>

* Changes suggested in reviews

* Delete container styles

* Delete container styles

* Add calculated height to ul element

* Show all options in the many options story

* Replace deprecated code

* Remove console.log

* Fix ts error

* Fix ts error

* Fix val is mull error

* Fix ts error

* Add comment in the code

* Modify the comment

---------

Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
2024-07-25 11:17:23 +02:00
Ida Štambuk 0d1fbc485f Cloudwatch: Add support for adding account id to sql query (#90880) 2024-07-25 11:00:50 +02:00
Sven Grossmann 94dd4105e2 Loki: Allow alert headers to be forwarded (#90890)
* Loki: Allow alert headers to be forwarded

* Loki: fix tests

---------

Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
2024-07-25 07:39:34 +02:00
Michael Mandrus dc355331a6 CloudMigrations: Store encryption key in unified secrets table (#90908)
* store encryption key in unified secrets table

* fix local dev mode

* make metadata more realistic

* fix tests

* fix sql queries against postgres

* fix stats endpoint
2024-07-25 06:34:25 +03:00
Larissa Wandzura 49c756d774 Docs: Updated the Logs in Explore doc (#90671)
* updates and language clarification

* fixed screenshot under logs nav

* removed gerund from title

* ran prettier

* removed trace integration file from PR

* Update docs/sources/explore/logs-integration.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/explore/logs-integration.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/explore/logs-integration.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/explore/logs-integration.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Discard changes to docs/sources/explore/trace-integration.md

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-07-24 13:10:30 -05:00
Brendan O'Handley e0d0322036 Prometheus: Deprecation message for SigV4 in core Prom (#90250)
* add deprecation message for SigV4 in core Prom

* remove extra things

* change name to Amazon Prometheus

* update AMP name
2024-07-24 12:27:10 -05:00
Señor Performo - Leandro Melendez fd39017153 docs: Updates to GeoMap panel doc (#90769)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-24 13:14:35 -04:00
Sven Grossmann cca9dee702 Loki: Remove instant query type from Log queries (#90137)
* Loki: Prevent log queries to run as `instant` query

* Loki: add tests

* Loki: only overwrite instant queries

* Loki: fix tests

* Loki: fix tests
2024-07-24 18:37:34 +02:00
Ieva 9bb2cf4968 RBAC: Allow omitting default permissions when a new resource is created (#90720)
* Cfg: Move rbac settings to own struct

* Cfg: Add setting to control if resource should generate managed permissions when created

* Dashboards: Check if we should generate default permissions when dashboard is created

* Folders: Check if we should generate default permissions when folder is created

* Datasource: Check if we should generate default permissions when datasource is created

* ServiceAccount: Check if we should generate default permissions when service account is created

* Cfg: Add option to specify resources for wich we should default seed

* ManagedPermissions: Move providers to their own files

* Dashboards: Default seed all possible managed permissions if configured

* Folders: Default seed all possible managed permissions if configured

* Cfg: Remove service account from list

* RBAC: Move utility function

* remove managed permission settings from the config file examples, change the setting names

* remove ini file changes from the PR

* fix setting reading

* fix linting errors

* fix tests

* fix wildcard role seeding

---------

Co-authored-by: Karl Persson <kalle.persson@grafana.com>
Co-authored-by: jguer <me@jguer.space>
2024-07-24 19:31:26 +03:00
Vardan Torosyan 82236976ae Add support ticket fixed roles to cloud role sync (#90864)
* Add support ticket fixed roles to cloud role sync

* Adding tests

* Fix the linter
2024-07-24 17:58:21 +02:00
Dominik Prokop f1c3c55983 Bump scenes to 5.6.2 (#90893) 2024-07-24 14:21:58 +01:00
renovate[bot] 21b45f5789 Update dependency rudder-sdk-js to v2.48.14 2024-07-24 13:13:04 +00:00
Jo 93a979d46d Auth: Fix grafana-auth-app menu not being displayed (#90882)
Auth: Fix grafana-auth-app menu not being displayed if user only has access to cloud access policies
2024-07-24 15:10:19 +02:00
renovate[bot] e5ff5e65df Update dependency @react-types/overlays to v3.8.9 (#90889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 12:45:08 +00:00
Santiago b79b38f02c Alertmanager: Support limits for silences (#90826)
* Alertmanager: support limits for silences

* update grafana/alerting to latest main
2024-07-24 14:22:29 +02:00
renovate[bot] 7180f8a7d1 Update dependency @react-types/menu to v3.9.11 2024-07-24 12:11:54 +00:00
Leonor Oliveira ec343f276f Dual writer: mode 4 (#90581)
* Itroduce watcher and mode4

* Logging

* Mode4 should be initialized from the dual writer for observability

* Comment watch while it's not implemented

* Lint

* Use mode log when dual writer is initiated

* Use error from logger
2024-07-24 14:10:10 +02:00
renovate[bot] 701e715662 Update dependency @react-types/button to v3.9.6 2024-07-24 11:46:02 +00:00
Ashley Harrison d8711beac5 Chore: Migrate dashdiff styles to emotion globals (#90818)
* migrate dashdiff styles to emotion globals

* fix colors
2024-07-24 12:43:52 +01:00
Joey a9aadf2aa0 Update code owners for data sources transferred to big tent squad (#90877)
Update codeowners for data sources transferred to big tent squad
2024-07-24 11:19:55 +01:00
brendamuir 745eb60775 Alerting docs: updates icon on landing page (#90881)
* Alerting docs: updates icon on landing page

* adds svg
2024-07-24 12:13:12 +02:00
Todd Treece d2467bb088 Chore: Fix dev profiling (#90866) 2024-07-24 06:12:45 -04:00
renovate[bot] 5be7cfca69 Update React Aria 2024-07-24 10:56:08 +01:00
Sven Grossmann 80b2e793ab Loki: Remove unnecessary featuremgmt (#90874)
Loki: Remove unnecessary featuremgmt
2024-07-24 11:00:41 +02:00
renovate[bot] 92d0a40f70 Update Yarn to v4.3.1 (#90871)
* Update Yarn to v4.3.1

* add yarn 4.3.1

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2024-07-24 11:46:53 +03:00
Ashley Harrison 6df9fda298 Navigation: Tweak app height when bodyScrolling is enabled (#90828)
use vh instead of svh
2024-07-24 09:04:24 +01:00
Leonor Oliveira 67b74e1e8a Dual writer: mode 3 (#90045)
* Dual writer: mode 3

* Add integration tests for playlits in mode 3

* Remove todo

* Update pkg/apiserver/rest/dualwriter_mode3.go

Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>

* Admin: Fixes an issue where user accounts could not be enabled (#88117)

Fix: unable to enable user

* [REVIEW] FInish mode 3 and add tests

* Improve logging

* Update dependencies

* Update pkg/apiserver/rest/dualwriter_mode3_test.go

Co-authored-by: maicon <maiconscosta@gmail.com>

* remove test assertion

* Use mode log when dual writer is initiated

---------

Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
Co-authored-by: gonvee <gonvee@qq.com>
Co-authored-by: maicon <maiconscosta@gmail.com>
2024-07-24 09:28:14 +02:00
Hugo Kiyodi Oshiro 5e3a5b355e Plugins: Disable install controls for provisioned plugin in cloud (#90479) 2024-07-24 08:36:15 +02:00
owensmallwood 8fd2245ce6 Grafana: Skip US tests breaking enterprise for now (#90869)
* skip US tests breaking enterprise for now

* skips rest of tests
2024-07-23 16:08:47 -06:00
renovate[bot] d93c83a6dc Update dependency msw to v2.3.4 2024-07-23 22:06:06 +00:00
renovate[bot] 671f278ee1 Update dependency @types/node to v20.14.12 2024-07-23 19:21:07 +00:00
renovate[bot] cfe8a5121a Update dependency yaml to v2.4.5 2024-07-23 18:29:00 +00:00
renovate[bot] b85700e386 Update dependency semver to v7.6.3 2024-07-23 17:34:17 +00:00
Adam Simpson a7d37d4ed5 azuremonitor: add labels for single resource query (#90832)
* azuremonitor: add labels for single resource query

* fix tests
2024-07-23 13:31:44 -04:00
renovate[bot] d30f8a01cc Update dependency sass to v1.77.8 2024-07-23 17:13:23 +00:00
ismail simsek 87b2494872 Explore Metrics: Implement grouping with metric prefixes (#89481)
* add groop as a local dependency

* update layout

* nested layout with panels

* fix the height of the rows

* copy groop library into grafana/grafana

* Don't create a new scene everytime metrics refreshed

* Add display option dropdown

* handle different layout options in buildLayout

* add select component props

* unify scene body creation

* handle other display cases in refreshMetricNames

* set a new body when display format is different

* handle nestedScene population

* show nested groups

* handle panel display

* add tabs view

* populate tabs view

* show selected tab group

* show display options before metric search

* populate prefix filter layout

* only switch layout for nested-rows display option

* Update public/app/features/trails/groop/parser.ts

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>

* Update public/app/features/trails/groop/parser.ts

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>

* Update public/app/features/trails/MetricSelect/MetricSelectScene.tsx

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>

* Update public/app/features/trails/MetricSelect/MetricSelectScene.tsx

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>

* Remove tab view

* generate groups async

* Remove unnecessary parts

* Refactor

* implement urlSync

* update keys

* introduce interaction

* ui updates

* chore: revert some auto formatting to clarify comments

* chore: revert some auto formatting to clarify comments

* rename

* add tooltip

* add styles

* update unit tests

* make i18n-extract

* update unit test

---------

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>
Co-authored-by: Darren Janeczek <darren.janeczek@grafana.com>
2024-07-23 18:23:28 +02:00
renovate[bot] d2b78931a1 Update dependency rudder-sdk-js to v2.48.13 2024-07-23 16:09:22 +00:00
Ieva c2e0952553 Folders: Improve folder move permission checks (#90588)
* check that a user doesn't have higher plugin access on the destination folder than they have on the source folder when moving folders

* Update pkg/services/folder/folderimpl/folder_test.go

---------

Co-authored-by: Jo <joao.guerreiro@grafana.com>
2024-07-23 17:07:27 +01:00
renovate[bot] 546d9991fa Update dependency react-use to v17.5.1 2024-07-23 15:42:41 +00:00
Larissa Wandzura 8285f11f04 Docs: Updates to the Query management in Explore page (#90541)
Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
2024-07-23 09:55:57 -05:00
renovate[bot] d107f928b9 Update dependency msw to v2.3.3 2024-07-23 14:54:11 +00:00
renovate[bot] b6e8a320ce Update dependency rc-tree to v5.8.8 2024-07-23 14:32:59 +00:00
Dominik Prokop 2e5b41cbcb 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
2024-07-23 16:02:20 +02:00
Ashley Harrison 219f4776a2 run prettier 2024-07-23 14:45:54 +01:00
renovate[bot] 486815606c Update dependency prettier to v3.3.3 2024-07-23 14:45:54 +01:00
Julien Duchesne 25f0c70022 OpenAPI: Document the /api/health endpoint (#88203)
Document `/api/health` with OpenAPI
To do so, the response build had to be re-implemented as a struct
2024-07-23 09:41:03 -04:00
Dominik Prokop 89945b1bc2 Revert "TemplateSrv: Backportable version of 90808 (#90816)" (#90831)
This reverts commit 6849a6b86b.
2024-07-23 16:28:15 +03:00
Dave Henderson a59c9525c1 notifications: Fix flaky SMTP tests (#90801)
Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
2024-07-23 08:22:00 -04:00
Vickie Chen a1182b119e Chore: Remove deprecated layout components from Plugins Platform (#88523)
* Chore: Remove deprecated layout components from Plugins Platform

Resolves #86878

* Chore: Use `Box` instead of `div`
2024-07-23 14:16:26 +02:00
Dominik Prokop 6849a6b86b 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
2024-07-23 14:05:24 +02:00
Alex Khomenko 8966083132 Pin Nav Items: Add tracking for pinned items clicks (#90803)
* Pin Nav Items: Add tracking for pinned items clicks

* Update id

* Simplify onClick logic
2024-07-23 14:58:50 +03:00
renovate[bot] 888417c01b Update dependency postcss to v8.4.39 2024-07-23 11:54:17 +00:00
Victor Marin 01e161c5b1 DashboardScenes: TemplateSrv should return timeRange from scenes if context found (#90735)
* templateSrv should return timeRange from scenes if context found

* add test

* prettier

* test
2024-07-23 14:50:49 +03:00
renovate[bot] d75475ae03 Update dependency ol-ext to v4.0.21 2024-07-23 11:32:31 +00:00
renovate[bot] c42b6fa925 Update dependency msw to v2.3.2 2024-07-23 10:33:15 +00:00
Andreas Christou 32a3012a20 Graphite: Ensure all Graphite query references are interpolated (#90566)
Ensure Graphite query references are interpolated
2024-07-23 11:31:45 +01:00
ektasorathia 4779d8417d Tracing: Add regex support for span filters (#89885)
* Tracing: Add regex support for span filters

* Update SpanFilters test

* Modify placeholder

---------

Co-authored-by: Ekta Sorathia <esorathia@ebay.com>
Co-authored-by: Joey Tawadrous <joey.tawadrous@grafana.com>
2024-07-23 11:10:54 +01:00
Ashley Harrison 80f201026f Chore: Migrate _dashboard SCSS styles to emotion (#90604)
migrate dashboard.scss styles to emotion
2024-07-23 11:02:18 +01:00
renovate[bot] e5a0117bb8 Update dependency marked-mangle to v1.1.8 2024-07-23 09:59:48 +00:00
renovate[bot] 66c4dff17e Update dependency @react-types/overlays to v3.8.8 2024-07-23 09:31:01 +00:00
Alexa V 474ea9615d Dashboard Scene: Make Variables non-sticky on mobile (#90755)
* Make variables not sticky on mobile

* Removes scrollable body

* Remove unused CSS

* Remove unnecessary cx

---------

Co-authored-by: Ivan Ortega <ivanortegaalba@gmail.com>
2024-07-23 11:28:16 +02:00
renovate[bot] b580cee96b Update dependency @react-types/menu to v3.9.10 2024-07-23 09:05:04 +00:00
Ashley Harrison 8f9dc4a923 Navigation: move bodyScrolling to be public preview (#90811)
move bodyScrolling to be publicPreview
2024-07-23 10:02:06 +01:00
renovate[bot] 6dcf974543 Update dependency @react-types/button to v3.9.5 2024-07-23 08:30:42 +00:00
renovate[bot] 999aff5458 Update React Aria (#90760)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-23 09:07:47 +01:00
Michael Mandrus 8e3e64460b CloudMigrations: Change onPremToCloudMigrations feature toggle to public preview (#90757)
* update feature toggle stage

* a word

* update docs
2024-07-23 03:30:51 +03:00
Nathan Marrs 3b9c6da4eb Table: Fix cell units (#90799) 2024-07-22 15:41:51 -07:00
Leon Sorokin 06a5c970c4 VizTooltip: Wrap labels to new lines when > ~50% screen width (#90798) 2024-07-22 15:52:36 -05:00
William Wernert 45f298120e Alerting: Return error when writing recorded metrics instead of default writing NaN (#90743)
* Return error instead of default writing NaN
2024-07-22 15:47:02 -04:00
Sarah Zinger f1b4964b24 Update the elastic search workflow to go to aws datasources squad (#90768) 2024-07-22 14:22:29 -04:00
Kim Nylander edb7ecef70 [DOC] Update span filters doc for Tempo data source (#90771) 2024-07-22 13:10:31 -05:00
Victor Marin 771933bd74 Move panel plugin change logic into scenes (#90535)
* wip

* move logic into vizPanel

* add tests

* bump scenes

* set pluginId synchronously for component rerenders in table view

* fix bugs around table view

* fix

* fix

* use panelPlugin meta straight from config

* fix

* fix

* fix
2024-07-22 20:26:52 +03:00
Jean-Philippe Quéméner bf09d8f615 chore(tests): skip flaky test (#90763) 2024-07-22 21:18:05 +04:00
Diego Augusto Molina 399d77a0fd Resource server improvements and fixes (#90715)
* cleanup dependencies and improve list method
* Improve Resource Server API, remove unnecessary dependencies
* Reduce the API footprint of ResourceDBInterface and its implementation
* Improve LifecycleHooks to use context
* Improve testing
* reduce API size and improve code
* sqltemplate: add DialectForDriver func and improve naming
* improve lifecycle API
* many small fixes after adding more tests
2024-07-22 20:08:30 +03:00
Nikolaos Pothitos 5f367f05dc Docs: Remove duplicate row (chore) (#90710) 2024-07-22 12:55:07 -04:00
Sarah Zinger 863f9a5e88 Update codeowners for elastic search (#90734) 2024-07-22 11:46:28 -04:00
renovate[bot] 3ce0e30358 Update dependency lerna to v8.1.7 2024-07-22 15:44:49 +00:00
renovate[bot] 61e408ab93 Update dependency immutable to v4.3.7 2024-07-22 15:22:13 +00:00
Kevin Minehart 9a3672c2bb CI: post changelog to forum in release-comms (#90742)
* post changelog to forum in post-release workflow
2024-07-22 18:00:37 +03:00
renovate[bot] 5391d77623 Update dependency eslint-scope to v8.0.2 2024-07-22 14:40:09 +00:00
Bruno 8d8f2ba587 Cloud migration: encryption key is a byte slice (#90739)
* Cloud migrations: include metadata returned by CMS in the index file

* Cloud migrations: make EncryptionKey a []byte in structs

* test
2024-07-22 11:25:12 -03:00
renovate[bot] 7fdf992dab Update dependency dompurify to v3.1.6 2024-07-22 14:19:41 +00:00
renovate[bot] fdf5ed98d8 Update dependency chrome-remote-interface to v0.33.2 (#90741)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-22 16:50:34 +03:00
renovate[bot] 2ebd4237f6 Update dependency chance to v1.1.12 2024-07-22 13:29:52 +00:00
Ashley Harrison dc30858e9d Select: Fix scrolling virtualized menu on mobile (#90724)
pass select-menu innerRef to virtualized list
2024-07-22 14:27:50 +01:00
Ashley Harrison 95589ed091 Navigation: Add tab title to breadcrumbs (#89102)
* show active child in breadcrumb

* use activeChild url

* only add tab title if not first tab

* handle scenes settings breadcrumbs

* fix breadcrumbs on starred dashboard settings

* display separate crumb
2024-07-22 14:27:05 +01:00
Bruno 07685646a3 Cloud migrations: include metadata returned by CMS in the index file (#90658) 2024-07-22 10:11:57 -03:00
Georges Chaudy b2766ece5e Resource store sql backend watch (#90480)
* Squashed commit of the following:

commit 3ae9aea0fdc5eef70e16e0ba26f817ca1883ebc9
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 17 23:21:07 2024 +0200

    Add group and resource to ListOptions

commit 638441a656d4098343fd72f1942c5845fb50f536
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 17 22:25:35 2024 +0200

    poll for resources independently

commit 4c4c88e2d6b69a589a03fc4ea3b287ef557d67a0
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 17 17:39:10 2024 +0200

    Update pkg/storage/unified/sql/data/resource_history_poll.sql

    Co-authored-by: Dan Cech <dcech@grafana.com>

commit 67f42dbfcaa6b92056c7e6e25f21e870b7fa08e6
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 17 16:01:13 2024 +0200

    Update pkg/storage/unified/sql/backend.go

    Co-authored-by: Dan Cech <dcech@grafana.com>

commit e869e829d07d6fce6f79f18679680d32fa9491f5
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 17 16:01:06 2024 +0200

    Update pkg/storage/unified/sql/backend.go

    Co-authored-by: Dan Cech <dcech@grafana.com>

commit 6e498c0cd7434007649fd8de30a7d17e1c425c42
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 16 16:47:35 2024 +0200

    Add watch working for multiple resources

commit 0da775e521
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 16 11:14:55 2024 +0200

    indent

commit e15d1d060c
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 15 14:41:15 2024 +0200

    reindent sql

commit a64f88b0ea
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Fri Jul 12 18:32:13 2024 +0200

    Update pkg/storage/unified/sql/backend.go

    Co-authored-by: Dan Cech <dcech@grafana.com>

commit dd383150bf
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Wed Jul 10 10:45:56 2024 +0200

    lint

commit ccf12406a6
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 9 15:25:54 2024 -0700

    merge main

commit 2b4b9f66d3
Merge: df72a61a52 079f0715aa
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 9 15:12:51 2024 -0700

    merge main

commit df72a61a52
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 9 15:06:32 2024 -0700

    clearnup against smaller upstream

commit 12257d9dfe
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 9 15:03:50 2024 -0700

    clearnup against smaller upstream

commit 07b804457e
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 9 21:41:30 2024 +0200

    listAtRevision should always use the token from the RV if present

commit 1fc1dd0914
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 9 19:45:44 2024 +0200

    Update pkg/storage/unified/sql/backend.go

commit 2207ef10de
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 9 19:44:35 2024 +0200

    Update pkg/storage/unified/sql/queries_test.go

commit 36d9099d1a
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 9 15:57:55 2024 +0200

    lint

commit 37e0745d7a
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Tue Jul 9 12:26:49 2024 +0200

    Fix missing rows.Close()

commit a6538fa8df
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 23:54:33 2024 +0200

    add resource_history_list test

commit e8214869de
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 23:51:14 2024 +0200

    add resource_history_list test

commit f6b32c94bd
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 23:42:46 2024 +0200

    improve tests for pagination

commit d305f1baf4
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 22:57:11 2024 +0200

    Add pagination

commit c8f516fc55
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 21:55:25 2024 +0200

    pagination first page

commit f3c554e668
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 12:16:16 2024 +0200

    watch

commit 68a0cf5d81
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 12:12:09 2024 +0200

    remove testdataJSON

commit d98da81a42
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 11:49:05 2024 +0200

    move sqltemplate

commit 80bf285216
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 10:49:25 2024 +0200

    watch from head

commit 396979bcf6
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 10:19:01 2024 +0200

    Cleanup

commit 26a2f947e8
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 10:04:13 2024 +0200

    basic list

commit 4275a01bc2
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 00:54:33 2024 +0200

    add watch

commit 75c25a527d
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 8 00:51:40 2024 +0200

    add watch

commit 774ae238cb
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Sun Jul 7 21:49:44 2024 +0200

    Implement SQL store

commit 95ffa3486b
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 20:30:42 2024 -0700

    cleanup

commit ab591cf4d1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 20:25:12 2024 -0700

    cleanup

commit aa4901e206
Merge: 36f7610097 40cb4ac30f
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 20:16:34 2024 -0700

    merge upstream

commit 40cb4ac30f
Merge: 8f4b3062d6 fe201b6bb2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 20:02:04 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store-bridge

commit 8f4b3062d6
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 19:23:40 2024 -0700

    fix lint

commit 428b90c14b
Merge: 9e5b88c6dd edc1f50c4e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 18:46:30 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store-bridge

commit 9e5b88c6dd
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 15:56:28 2024 -0700

    add field selectors

commit 8dd8bc85a6
Merge: 59a142095f de06762852
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 15:44:27 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store-bridge

commit 59a142095f
Merge: 53f16521a7 f70f60efd0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 14:45:35 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store-bridge

commit 53f16521a7
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 14:45:25 2024 -0700

    add doc.go

commit 9fa906ab80
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 14:45:14 2024 -0700

    add doc.go

commit 22d3f163df
Merge: d09979b332 411bab6d44
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 13:55:27 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store-bridge

commit d09979b332
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 13:55:12 2024 -0700

    check for deleted

commit ddcbc753d3
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 13:38:16 2024 -0700

    fix tabs to spaces

commit 2a4fedb6ee
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 10:58:43 2024 -0700

    remove sort parsing

commit e728b12ec0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 10:56:22 2024 -0700

    remove watch tests -- key func complications

commit dc163d10cc
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jul 3 08:59:09 2024 -0700

    add resource store abstraction

commit 36f7610097
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 21:37:01 2024 -0700

    using basic storage engine

commit 26ef342b7e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 21:24:53 2024 -0700

    renamed to basic

commit ddb5f125f0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 18:21:59 2024 -0700

    add sqlobj basic implementation

commit 6a08224725
Merge: 04d57a99e5 5b6edc96d9
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 17:47:36 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store

commit 04d57a99e5
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:47:02 2024 -0700

    merge main

commit 33917141f0
Merge: 924c42f707 2a1b620c38
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:45:45 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store

commit 924c42f707
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:37:35 2024 -0700

    make list preparelist

commit 0db0e13248
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:37:28 2024 -0700

    make list preparelist

commit a3d9f8aab2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:08:42 2024 -0700

    remove eventID

commit 8c1f60aa8b
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 14:08:34 2024 -0700

    remove eventID

commit abacd9aef2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 07:36:07 2024 -0700

    split off blob store services

commit ddae2b4969
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jul 2 07:23:53 2024 -0700

    rename search service to index service

commit a984a4e4f9
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 17:03:23 2024 -0700

    more lint

commit b25e735c02
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 16:04:53 2024 -0700

    frontend refactors

commit 1fb97cf417
Merge: fe8a05c648 c3b5cabb14
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 15:02:34 2024 -0700

    minor lint fixes

commit fe8a05c648
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 08:12:28 2024 -0700

    minor lint fixes

commit 9f2aae1c48
Merge: ece478e12d 86466aec61
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 08:03:18 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store

commit ece478e12d
Merge: f472e95f92 55ba32bda7
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jul 1 01:41:29 2024 -0700

    Merge remote-tracking branch 'origin/main' into resource-store

commit f472e95f92
Author: Andres Martinez Gotor <andres.martinez@grafana.com>
Date:   Mon Jul 1 09:31:05 2024 +0200

    Adapt docs/sources/developers/plugins/plugin.schema.json codeowners (#89832)

commit 8674d705ea
Author: Sebastian Hiebl <bastidest@mailbox.org>
Date:   Sat Jun 29 01:13:34 2024 +0200

    TimeSeries: Expose option for "Bar width factor" (#77338)

    Co-authored-by: Leon Sorokin <leeoniya@gmail.com>

commit 52d476db05
Author: Leon Sorokin <leeoniya@gmail.com>
Date:   Thu Jun 27 18:58:49 2024 -0500

    Table: Don't error if first frame is field-less (empty response) (#89867)

commit cc5b4d6a94
Author: Simon Podlipsky <simon@podlipsky.net>
Date:   Fri Jun 28 00:53:43 2024 +0300

    Dockerfile: Fix go deps (#89857)

    Add missing deps

commit 7c86705b9b
Author: Adela Almasan <88068998+adela-almasan@users.noreply.github.com>
Date:   Thu Jun 27 15:49:20 2024 -0600

    VizTooltip: Hide tooltip options from when tooltip is hidden (#89864)

commit aa9299c4d7
Author: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Date:   Thu Jun 27 17:16:57 2024 -0400

    Docs: Add tooltip options to histogram v11.2 (#89863)

    Co-authored-by: Adela Almasan <88068998+adela-almasan@users.noreply.github.com>

commit f90168f500
Author: Nathan Marrs <nathanielmarrs@gmail.com>
Date:   Thu Jun 27 14:43:10 2024 -0600

    Chore: Lint json files in .github directory (#89861)

commit 0f65c06cfe
Author: Nathan Marrs <nathanielmarrs@gmail.com>
Date:   Thu Jun 27 14:22:15 2024 -0600

    Chore: Update DataViz github automation (#89852)

commit 058538287f
Author: Lucy Chen <140550297+lucychen-grafana@users.noreply.github.com>
Date:   Thu Jun 27 15:36:23 2024 -0400

    ShareModal: Export options (JSON) (#87082)

    * Adding new export button

    * Create Export as JSON drawer

    * update scene drawer and add css

    * update css

    * Update ExportAsJson to be regular react component

    * add tests to export menu and button

    * add tests

    * prettier and lint

    * fix translations

    * update translation

    * Apply suggestions from code review

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

    * delete extra file

    * Update to use SceneObject

    * add spinner

    * Rename ExportAsJSON.tsx to ExportAsJson.tsx

    * update i18n

    * Upate texts

    * small fixes from code review

    * add space

    * i18n

    * fix build issues

    * changes from review feedback

    * update test

    * update test

    ---------

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

commit 79092ebc6a
Author: Juan Cabanas <juan.cabanas@grafana.com>
Date:   Thu Jun 27 14:30:33 2024 -0300

    ShareDrawer: Schedule Report (#89802)

commit d842178c6a
Author: linoman <2051016+linoman@users.noreply.github.com>
Date:   Thu Jun 27 18:29:16 2024 +0200

    SAML: Add Azure AD configuration for SAML integration (#89767)

    * Add Azure AD configuration for SAML integration

commit 920756f797
Author: Ashley Harrison <ashley.harrison@grafana.com>
Date:   Thu Jun 27 16:43:43 2024 +0100

    Storybook: Add basic e2e verification test (#89779)

    * add very basic tests to verify storybook builds correctly

    * add storybook step to drone

    * reorder steps

    * drone tweaks

    * don't need host since it's set in env

    * don't need to wait

    * format build.star and readd wait

    * install netcat in CI

    * do a yarn install here to get correct bindings

    * refactoring to hopefully work better in CI

    * add wait-on

    * add verbose logging

    * localhost?

    * more logging

    * specify storybook host

    * ...

    * back to grafana-server

    * does this work? 🤔

    * run storybook e2e test after rgm-package so the backround process is running for less time

    * split into separate step

    * format

commit a760dad1e3
Author: Ivan Ortega Alba <ivanortegaalba@gmail.com>
Date:   Thu Jun 27 17:26:38 2024 +0200

    VizPanelManager: Adapt color palete after plugin change (#89790)

    * VizPanelManager: Adapt color palete after plugin change

    * Upgrade scenes

    * Remove broken code

    * Upgrade scenes version

    * linter

commit c8ce20a807
Author: Ida Štambuk <ida.stambuk@grafana.com>
Date:   Thu Jun 27 17:10:28 2024 +0200

    Cloudwatch: Round up endTime in GetMetricData to next minute (#89341)

    * Add cloudWatchRoundUpEndTime feature toggle

commit 17ebc9614b
Author: Kristina <kristina.durivage@grafana.com>
Date:   Thu Jun 27 09:46:49 2024 -0500

    Explore / Query Library : Show user data (#88258)

    * Add basic button for adding a query template

    * Add hook to create a template

    * Handle notifications

    * Add tags to invalidate cache

    * Generate translations

    * Updates types

    * Add tests

    * Simplify code

    * Add user to type

    * Add a better default title

    * bring in piotrs pr and try to add user data

    * Move out of metadata (reserved in k8s) and make new values exportable

    * Show user data

    * Fix bad merge

    * WIP

    * Add annotation data to FE

    * add (failing) test

    * Fix types and test

    * Cleanup

    * Enhance user data and send to component for display

    * Fix type

    * Fix expected values

    * fix betterer

    * Fix test

    * Remove user lookup

    * testing slug usage for api

    * Revert "testing slug usage for api"

    This reverts commit cc4556c3b7.

    * change types, display userid if login isnt returned

    * Simply display whatever is in property

    * skip test on removed logic

    * Try waiting for query to finish before eval

    * Revert "Try waiting for query to finish before eval"

    This reverts commit 6220cabd17.

    * Handle attribute not existing when storage type is file

    ---------

    Co-authored-by: Piotr Jamroz <pm.jamroz@gmail.com>

commit 91895e4835
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Thu Jun 27 17:43:59 2024 +0300

    Chore(deps): Bump github.com/alicebob/miniredis/v2 from 2.30.1 to 2.33.0 (#88588)

    Bumps [github.com/alicebob/miniredis/v2](https://github.com/alicebob/miniredis) from 2.30.1 to 2.33.0.
    - [Release notes](https://github.com/alicebob/miniredis/releases)
    - [Changelog](https://github.com/alicebob/miniredis/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/alicebob/miniredis/compare/v2.30.1...v2.33.0)

    ---
    updated-dependencies:
    - dependency-name: github.com/alicebob/miniredis/v2
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...

    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

commit ed6c948db0
Author: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Date:   Thu Jun 27 14:17:21 2024 +0100

    Dashboards: Change datemath parse logic so parsed dates always take timezone into account (#88182)

    * Dashboards: Change datemath parse logic so parsed dates always take timezone into account

commit 523d999414
Author: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com>
Date:   Thu Jun 27 14:00:42 2024 +0200

    Alerting: Use runtime data source for getting events from alert state history in the bar chart (#89307)

    * Use runtime data source for getting events from alert state history in the bar chart

    * extract translations

    * refactor

    * More refactor

    * Update events limit

    * Add info icon with tooltip info for label querying filter

    * Add translations

    * Create new useRuleHistoryRecords hook skipping extraction of common labels as they are not used

    * Fix test

    * update limit value for the events in the api to 5000

    * Use state for rows key

    * remove React import

    * Address review comments

    * Address review comments

    * run prettier

    * Remove duplicated handlers

commit c3337c39b1
Author: Laura Benz <48948963+L-M-K-B@users.noreply.github.com>
Date:   Thu Jun 27 14:00:12 2024 +0200

    RestoreDashboards: Add search (#89692)

    * feat: add search

    * feat: run i18n extraction

    * refactor: styling issue for smaller screen sizes

commit 06084f0ed1
Author: Alexander Zobnin <alexanderzobnin@gmail.com>
Date:   Thu Jun 27 13:57:06 2024 +0200

    Zanzana: Initial schema loading (#89492)

    * Zanzana: Dummy schema loading

    * Load authorzation model for client

    ---------

    Co-authored-by: Karl Persson <kalle.persson@grafana.com>

commit ddea4ba8b2
Author: ismail simsek <ismailsimsek09@gmail.com>
Date:   Thu Jun 27 13:33:35 2024 +0200

    Chore: Remove CancelablePromise (#89564)

    * Remove CancelablePromise.ts as it wasn't used in anywhere

    * Move cancelable-promise to the place where it is used

commit 177747ecda
Author: Jack Westbrook <jack.westbrook@gmail.com>
Date:   Thu Jun 27 12:42:42 2024 +0200

    Grafana/data: Remove barrel files part 1 (#89556)

    * chore(grafana-data): remove dataframe barrel file and update all imports and exports

    * chore(grafana-data): remove field barrel file and update imports n exports

    * chore(grafana-data): remove utils barrel file and update imports and exports

    * chore(grafana-data): remove tranformations barrel file and update imports n exports

    * chore(grafana-data): remove imports from root index.ts

    * chore(grafana-data): remove valueFormats barrel file and update imports n exports

    * chore(grafana-data): don't import from root barrel file

commit c3b16639bc
Author: Ashley Harrison <ashley.harrison@grafana.com>
Date:   Thu Jun 27 11:15:15 2024 +0100

    Keybinds E2E: simplify keybinds e2e even further (#89819)

    simplify keybinds e2e even further

commit 8b7a891db4
Author: AHeinlein <AHeinlein@users.noreply.github.com>
Date:   Thu Jun 27 12:07:30 2024 +0200

    Docs: Update LDAP doc for debug view (#89522)

    Update LDAP doc

    LDAP debug view does not work with single bind since there is no way to bind to the LDAP server and perform the search.

commit cb31a1b6ff
Author: Tom Ratcliffe <tom.ratcliffe@grafana.com>
Date:   Thu Jun 27 10:33:40 2024 +0100

    Alerting: Update warning message for Telegram parse_mode and default to empty value (#89630)

commit 3ef048cdd7
Author: Sergej-Vlasov <37613182+Sergej-Vlasov@users.noreply.github.com>
Date:   Thu Jun 27 12:06:07 2024 +0300

    DashboardScenes: Disable flaky new-datasource-variable e2e test (#89817)

    disable flaky new-datasource-variable e2e test

commit e09c1c7515
Author: brendamuir <100768211+brendamuir@users.noreply.github.com>
Date:   Thu Jun 27 10:10:34 2024 +0200

    Alerting docs: adds silence RBAC 11.1 (#89176)

    * Alerting docs: adds silence RBAC 11.1

    * ran prettier

    * Improve docs with new rule-specific silence RBAC information

    * Apply suggestions from code review

    Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

    * Apply suggestions from code review

    Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

    * prettier

    ---------

    Co-authored-by: Matt Jacobson <matthew.jacobson@grafana.com>
    Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

commit 1aeceb9d9a
Author: Alexander Akhmetov <me@alx.cx>
Date:   Thu Jun 27 09:45:15 2024 +0200

    Alerting: Add setting for maximum allowed rule evaluation results (#89468)

    * Alerting: Add setting for maximum allowed rule evaluation results

    Added a new configuration setting `quota.alerting_rule_evaluation_results` to set the maximum number of alert rule evaluation results per rule. If the limit is exceeded, the evaluation will result in an error.

commit e96b1c0b42
Author: Georges Chaudy <chaudyg@gmail.com>
Date:   Mon Jul 1 10:32:37 2024 +0200

    Add unified-next-grpc (#89891)

commit afe0848d16
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 13:11:10 2024 +0300

    history UI

commit 2fab168fb1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 12:08:46 2024 +0300

    history UI

commit 1043efe3db
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 11:26:42 2024 +0300

    rename to legacy

commit d452e53ce3
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 10:53:08 2024 +0300

    avoid key from context

commit 19496ceed5
Merge: b71329a8c3 be1414b36b
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 10:19:58 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit b71329a8c3
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 10:09:59 2024 +0300

    history in resource package

commit 37c6b56e4e
Merge: 80fa46b225 9056ff73f6
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 08:49:46 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 80fa46b225
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 08:49:24 2024 +0300

    history from SQL query

commit 4d49cc3118
Merge: 999cd506c0 ed13959e33
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 07:35:23 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 999cd506c0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 01:20:29 2024 +0300

    now with dashboard history

commit 7345ece8ef
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 27 00:10:30 2024 +0300

    with dashboard service

commit 86a7064334
Merge: f68390bebf ba4f2713c5
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 26 16:04:23 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit f68390bebf
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 26 16:04:08 2024 +0300

    not rest.Storage

commit cfc192a2b5
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 26 12:53:57 2024 +0300

    more utils

commit 197a837e1e
Merge: 44a134f72b 4651506319
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 26 08:48:10 2024 +0300

    merge main

commit 44a134f72b
Merge: bac63d0edb f5d9c247d9
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Mon Jun 24 20:55:15 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit bac63d0edb
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 17:39:19 2024 +0300

    remove old comment

commit 37edc450a7
Merge: af38567ea5 b62f8c0f19
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 17:38:20 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit af38567ea5
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 14:55:40 2024 +0300

    remove unimplemented functions

commit ec925bab80
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 14:53:23 2024 +0300

    has a watch bridge... but not working

commit b771d38d78
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 11:13:35 2024 +0300

    with build changes

commit 37c2dade15
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 09:58:38 2024 +0300

    writing to SQL

commit bb7d6d44cd
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 09:24:44 2024 +0300

    with setup flags

commit c2c9449629
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 09:09:01 2024 +0300

    working

commit d67f83a1f3
Merge: b07c4e4210 61a102274d
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 07:49:24 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit b07c4e4210
Merge: 09741a3f49 b075926202
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 21 00:52:10 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 09741a3f49
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 23:05:13 2024 +0300

    merge main

commit 8a6d2e9b6e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 22:50:08 2024 +0300

    merge main

commit 63ebf7b12e
Merge: 75d5ad465e 5e95c1bdf8
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 22:34:38 2024 +0300

    merge main

commit 75d5ad465e
Merge: 83df3bdec8 d988f5c3b0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 22:26:33 2024 +0300

    merge main

commit 83df3bdec8
Merge: a115bb6214 27e800768e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 18:07:48 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit a115bb6214
Merge: c17140f263 13e069b5af
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 20 17:05:36 2024 +0300

    merge main

commit c17140f263
Merge: 3a6e7dc3f0 5d328983a1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 19 22:59:26 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 3a6e7dc3f0
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 19 22:09:33 2024 +0300

    go mod tidy

commit 040f392018
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 19 22:01:10 2024 +0300

    Storage: Add cdk blob support to ResourceStore (#89408)

commit 3e85f87db6
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 19 15:15:37 2024 +0300

    Storage(NG): Move message and operation from protobuf to annotations (#89359)

commit 0b29ca5eac
Merge: 0717e39ec2 b3907ca5ec
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 19 14:57:21 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 0717e39ec2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 22:27:16 2024 +0300

    K8s: Rename origin.key to origin.hash (#89337)

commit 4b4afa1fa7
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 21:19:21 2024 +0300

    more cleanup

commit 9f6709c167
Merge: 7e171702f4 b0c043de5f
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 21:17:30 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 7e171702f4
Merge: 760848d203 890482052a
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 16:08:30 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 760848d203
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 16:07:55 2024 +0300

    Storage (resource): Mutate object in storage, not k8s (#89331)

commit 5e4fa5d735
Merge: 4cde5bd59f ea7f6ea32f
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 08:44:04 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 4cde5bd59f
Merge: 549ecfe053 5f83fdef2c
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 18 07:27:05 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 549ecfe053
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Sat Jun 15 00:49:06 2024 +0300

    lint fix

commit 1a5de75c34
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Sat Jun 15 00:42:19 2024 +0300

    lint fix

commit 31a05d5666
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Sat Jun 15 00:26:45 2024 +0300

    hack hack hack... but working from kubectl

commit 2f64556cf1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 23:34:04 2024 +0300

    almost... but stuck on requester

commit c1b786c718
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 23:10:59 2024 +0300

    cleanup

commit d8abf8d851
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 22:53:10 2024 +0300

    entity bridge

commit d5f3038421
Merge: df9baddf53 8491e02caf
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 21:48:25 2024 +0300

    merge main

commit df9baddf53
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 21:44:33 2024 +0300

    move test files

commit 617dd1b40e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 21:30:41 2024 +0300

    add basic list

commit 8108e90fe2
Merge: ef3a601109 15c81b2a8b
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 17:42:18 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit ef3a601109
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 17:42:15 2024 +0300

    update the event type messages

commit 55d1e8ad1d
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 17:41:16 2024 +0300

    update the event type messages

commit a01f8dd099
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 16:52:17 2024 +0300

    remove rv from key and update watch signature

commit e78a5122ce
Merge: 504d84b8b2 90c3d74955
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 16:19:53 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 504d84b8b2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 15:21:28 2024 +0300

    with storage wrapper

commit 4fa60b6546
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 15:21:17 2024 +0300

    with storage wrapper

commit d97d59ab38
Merge: f66768c67d 2dd44e2f58
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 14:55:52 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit f66768c67d
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 14:24:36 2024 +0300

    now with a base server implementation

commit 4a41f7d0dd
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 14:24:26 2024 +0300

    now with a base server implementation

commit 68003738fd
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 11:28:15 2024 +0300

    use partial object metadata

commit fc82089987
Merge: 9478befbcd dd3c3b5857
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 10:57:16 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 9478befbcd
Merge: 19481990d1 2173429ce2
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 09:08:14 2024 +0300

    merge main

commit 19481990d1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 09:06:44 2024 +0300

    merge main

commit 29714d87fe
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 02:12:35 2024 +0300

    use a path hash for the blob table

commit 382d5d4e01
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Fri Jun 14 02:04:21 2024 +0300

    add fs based store

commit 15b958b2d1
Merge: a03a978eb4 e2f65dda0c
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 22:56:34 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit a03a978eb4
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 22:37:29 2024 +0300

    maybe happier

commit 79aed54c2c
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 22:12:55 2024 +0300

    more body prep

commit 1540c98fe1
Merge: f54af3d371 9d3a4e236d
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 21:19:51 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit f54af3d371
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 20:12:53 2024 +0300

    sum cleanup

commit a0f682b315
Merge: 2197a0e5e8 eb535e163d
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 20:05:01 2024 +0300

    merge main

commit 2197a0e5e8
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 16:02:06 2024 +0300

    update workspace

commit b696b6a32a
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 15:53:06 2024 +0300

    update go.mod

commit 8f44e1a349
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 15:49:41 2024 +0300

    lint fixes

commit c1798320d2
Merge: b44333730f afcb5a855c
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 14:27:42 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit b44333730f
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 14:26:57 2024 +0300

    now with basic test

commit f481f11d3a
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 09:11:10 2024 +0300

    change tree structure

commit e7c15b0e96
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 08:42:00 2024 +0300

    merged main and moved folder structure

commit 09e8605f14
Merge: 40829d645c 99d8025829
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 07:14:54 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 40829d645c
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Thu Jun 13 07:08:54 2024 +0300

    include client wrapper

commit 1857690bd0
Merge: c9c18717f5 ed400f0bbf
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 22:02:53 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit c9c18717f5
Merge: ad79d44db8 3ae95a6eb1
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 15:26:12 2024 +0300

    packaging

commit ad79d44db8
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 14:44:21 2024 +0300

    adding package

commit f8a2a83d59
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 14:44:18 2024 +0300

    adding package

commit 7b6e4d5da4
Merge: 16471fa057 58f7032b39
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 14:21:41 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 16471fa057
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 13:02:06 2024 +0300

    now with event setup

commit d83aa7f865
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 02:44:49 2024 +0300

    is_current

commit df148ca9ea
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 02:21:05 2024 +0300

    use reflection

commit 0118c7666a
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 02:20:47 2024 +0300

    use reflection

commit 5c91e52922
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 02:15:05 2024 +0300

    get metadata with reflection

commit af86293d87
Merge: 4dc3d0ee7f 465efbf802
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 00:48:13 2024 +0300

    Merge remote-tracking branch 'origin/main' into resource-store

commit 4dc3d0ee7f
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 00:34:40 2024 +0300

    update

commit 835879aa7a
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Wed Jun 12 00:29:52 2024 +0300

    revert hash key issues

commit ac39953d0e
Author: Ryan McKinley <ryantxu@gmail.com>
Date:   Tue Jun 11 23:01:40 2024 +0300

    basic queries

* remove old file
2024-07-22 16:07:12 +03:00
Ida Štambuk 5b17cd93c5 Cloudwatch: Remove awsDatasourcesNewFormStyling feature toggle (#90128)
* Remove toggle from cloudwatch plugin

* Remove feature toggle from registry

---------

Co-authored-by: Kevin Yu <kevinwcyu@users.noreply.github.com>
2024-07-22 14:48:17 +02:00
renovate[bot] b7379b7b51 Update dependency @grafana/scenes to v5.6.1 2024-07-22 12:47:31 +00:00
renovate[bot] aed52d2cf5 Update dependency chance to v1.1.12 2024-07-22 12:27:23 +00:00
Galen Kistler 6fa25df37f Loki: Fix ad hoc filters adding stream selectors to stream selectors and line filters (#90626)
* fix: fix case where we are adding stream selectors to both stream selectors and line filters

---------

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-07-22 07:25:52 -05:00
renovate[bot] 8aecf9bd0d Update dependency centrifuge to v5.2.2 2024-07-22 12:05:46 +00:00
jackyin 5e21898294 Calcs: Update diff percent to be a percent (#90533)
diff per unexpected results
2024-07-22 14:03:11 +02:00
Sonia Aguilar d0eaf4e484 Alerting: Disable simplified routing when internal alert manager is disabled (#90648)
* Disable simplified routing when internal alert manager is disabled

* address pr review comments

* add test

* remove unnecessary mocks
2024-07-22 13:09:11 +02:00
renovate[bot] 296b14b360 Update dependency @floating-ui/react to v0.26.20 (#90723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-22 14:07:38 +03:00
renovate[bot] 1b3ddf77d9 Update dependency @welldone-software/why-did-you-render to v8.0.3 2024-07-22 10:46:18 +00:00
Joao Silva 546f4aa700 Navigation: Show list of pinned items on MegaMenu (#90280)
* Navigation: Show list of pinned ites on the navigation

* Rename section to 'Bookmarks'

* Internationalization

* Rename everything to bookmarks

* Update public/app/core/reducers/navBarTree.ts

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

* Ignore empty message as well

* Dont update navigation if there is an error patching

---------

Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com>
2024-07-22 11:43:40 +01:00
Gabriel MABILLE 38ac0f3506 UserTable: Remove sorting on licensed role (#90718) 2024-07-22 12:41:57 +03:00
renovate[bot] a18f72e415 Update dependency @types/react-resizable to v3.0.8 2024-07-22 08:34:01 +00:00
Ieva 4c7d8c8cdd RBAC: Refactor RBAC plugin interface code (#90679)
move plugin RBAC registration ifaces to pluginsintegrations
2024-07-22 09:31:36 +01:00
renovate[bot] 63cc01fe80 Update dependency @types/node to v20.14.11 2024-07-22 07:57:16 +00:00
Tom Ratcliffe 4e364ea043 Alerting: Split out contact points components to separate files (#90605) 2024-07-22 10:54:13 +03:00
Piotr Jamróz 042c239a56 Query History: Enable query history test (#90597)
* Enable query history test

* Fix time range in the test
2024-07-22 09:22:41 +02:00
Michael Mandrus ee90cd3031 CloudMigrations: Send local events to gms during the migration process (#90637)
* add gms client function

* add timeout config for endpoint

* report events to gms

* fix lint error

* clean up report calls and make sure reports all have local ids

* extra validation

* improve error logging and fix url
2024-07-20 07:02:31 +03:00
dependabot[bot] 1c5ed0da4d Bump aquasecurity/trivy-action from 0.22.0 to 0.24.0 (#90254)
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.22.0 to 0.24.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](https://github.com/aquasecurity/trivy-action/compare/0.22.0...0.24.0)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-19 23:20:53 +00:00
Kevin Minehart 9232db2416 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
2024-07-19 16:54:59 -05:00
Kristina a0268a9ad2 Query History: Prevent viewers from accessing (#88735)
* Add permissions check for viewer without viewers_can_edit

* Add test

* fix lint

* Add role checks on other handlers

* Linter and fix Go issue

* Fix conflict

* Remove invalid way of testing for error
2024-07-19 14:44:58 -05:00
Lucy Chen 98c197e6cc Sharing Redesign: Export as JSON add toast message (#90021)
* add successful toast message and autoclose drawer

* i18n

* remove autoclose
2024-07-19 15:05:40 -04:00
Darren Janeczek ce70cf18b9 Explore Metrics: small little code fixes (#90627)
* fix: does not need to be exported

* fix: about time we remove this
2024-07-19 14:59:56 -04:00
Isabel Matwawana c10dba5c63 Docs: Replaces Agent with Alloy (#90674)
Co-authored-by: Clayton Cornell <131809008+clayton-cornell@users.noreply.github.com>
2024-07-19 14:51:51 -04:00
Evan faf8a724a6 Clarify that data source request reports are not for bugs or support requests (#90661)
Co-authored-by: David Harris <david.harris@grafana.com>
2024-07-19 20:07:08 +02:00
renovate[bot] f259f99485 Update dependency @types/lodash to v4.17.7 2024-07-19 17:40:32 +00:00
Stephanie Hingtgen 3fcc7f412b Loki Datasource: Fix getting the feature toggles in MT mode (#90684) 2024-07-19 20:37:46 +03:00
Serge Zaitsev f8b092aba6 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
2024-07-19 18:27:59 +02:00
renovate[bot] 8f54e3bfb7 Update dependency @types/d3-force to v3.0.10 2024-07-19 16:13:15 +00:00
renovate[bot] 18deed4fb7 Update dependency @types/babel__preset-env to v7.9.7 2024-07-19 15:40:43 +00:00
Eric Leijonmarck 248af65f9c Actionsets: Add ability for plugins to add actions for core actionsets (i.e. folders:edit) (#88776)
* initial commit

* Action sets stored
remove the dependancy for actionsets
got the actionsets registered
storing the permissions

* fix golanglinting

* remove unused struct field

* wip

* actionset registry for a plugin from the actionsetservice

* update to make declareactionset the primary way of plugin registration and modification

* declare actually extends actionsets

* tests fixed

* tests skipped

* skip tests

* skip tests

* skip tests

* skip tests

* change to warning instead

* remove step from pipeline to see if it fails due to plugin not registering

* reintroduce step but remove features dependancy

* add back the tests that were failing

* remove comments and another skip test

* fix a comment and remove unneeded changes

* fix and clean up, put the behaviour behind a feature toggle

* clean up

* fixing tests

* hard-code allowed action sets for plugins

* Apply suggestions from code review

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

* small cleanup

---------

Co-authored-by: IevaVasiljeva <ieva.vasiljeva@grafana.com>
Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
2024-07-19 16:16:23 +01:00
AvivGuiser 96c3e9c550 Alerting: Use stable identifier of a group when export to HCL (#90196)
* change the rule-group to be hashed when exporting to HCL

Signed-off-by: Aviv Guiser <avivguiser@gmail.com>

---------

Signed-off-by: Aviv Guiser <avivguiser@gmail.com>
2024-07-19 18:13:26 +03:00
Tom Ratcliffe a61cd94a70 Alerting: Tidy up contact points/misc other tests' mock server behaviour (#90469) 2024-07-19 16:11:48 +01:00
renovate[bot] c5775b3778 Update dependency @swc/helpers to v0.5.12 (#90670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 17:50:47 +03:00
renovate[bot] 21d1669bfc Update dependency @reduxjs/toolkit to v2.2.6 2024-07-19 14:29:02 +00:00
Matias Chomicki 66fb4d5f1a Combine responses: add support for frames with repeated field names (#90650)
* Combine responses: add support for frames with repeated field names

* Formatting
2024-07-19 14:26:06 +00:00
renovate[bot] 892d5d1b20 Update dependency @opentelemetry/semantic-conventions to v1.25.1 2024-07-19 13:56:31 +00:00
Isabel Matwawana 8c4c3103df Docs: added heading identifiers (#90564) 2024-07-19 09:40:01 -04:00
renovate[bot] 31d6689348 Update dependency @manypkg/get-packages to v2.2.2 2024-07-19 13:34:31 +00:00
renovate[bot] c217cd7c85 Update dependency @grafana/lezer-traceql to v0.0.18 (#90657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 16:10:31 +03:00
Dominik Prokop ec9e28567d Use SafeSerializableSceneObject in TemplateSrv (#90272)
* Test

* Opaque object

* Update scenes tentatively

* Betterer

* Fix dashboard data source

* Fix dashboard data source test

* Scenes bump

* Cleanup

* Ivan's feedback
2024-07-19 14:51:01 +02:00
renovate[bot] 093f4cea70 Update dependency @grafana/lezer-logql to v0.2.6 (#90655)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 15:48:24 +03:00
Ashley Harrison c4570ecfdc Chore: Tweaks to support React 19 (#90653)
changes needed for react 19, mostly don't spread key
2024-07-19 13:40:02 +01:00
renovate[bot] ec432fa314 Update dependency @floating-ui/react to v0.26.19 (#90614)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 13:26:07 +01:00
Adela Almasan 0e4c9a2e36 Transformations: Fix filterByValue interpolation (#90631) 2024-07-19 07:21:41 -05:00
Jack Westbrook 893efb045b Grafana/ui: Fix types not being installed for consumers (#90463)
fix(grafana-ui): make sure exported types are available for consumers
2024-07-19 14:08:34 +02:00
Tom Ratcliffe 7829fced94 Alerting: Hide edit/view rule buttons according to deleting/creating state (#90375) 2024-07-19 09:55:12 +00:00
Sonia Aguilar dbc755925d Alerting: Track central ash interactions (#90330)
* Track central ash interactions

* refactor
2024-07-19 11:11:29 +02:00
Nathan Vērzemnieks f8c43d0bf3 Elasticsearch: Decouple backend from infra/tracing (#90528) 2024-07-19 09:26:10 +02:00
Nathan Vērzemnieks 9caa8151d8 Elasticsearch: Decouple backend from infra/log (#90527) 2024-07-19 08:51:18 +02:00
Nathan Vērzemnieks 269d54c984 Elasticsearch: Decouple backend from infra/http (#90408) 2024-07-19 08:01:41 +02:00
Dave Henderson 05b66aac5f notifications: Fix confused trace spans in SMTP client (#90559)
Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
2024-07-18 23:20:40 -04:00
Alexander Weaver 418b077c59 Alerting: Integration testing for recording rules including writes (#90390)
* Add success case and tests for writer using metrics

* Use testable version of clock

* Assert a specific series was written

* Fix linter

* Fix manually constructed writer
2024-07-18 17:14:49 -05:00
Dave Henderson f446096eb1 chore(deps): Upgrade openapi dep, remove replace directive (#90609)
Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
2024-07-18 14:42:18 -04:00
Alexander Weaver 0e269db8a9 Alerting: Expose recordingWriter on ngalert (#90573)
Expose recordingWriter on ngalert
2024-07-18 13:24:06 -05:00
Michael Mandrus 71a97b925a CloudMigrations: Add and fix logging (#90616)
* add logs so we can see how long async processes take

* fix a bunch of error logs:

* fix logs again
2024-07-18 21:16:56 +03:00
Isabel Matwawana e3150b4eb8 Docs: Refactor time series page - part 1 (#90098)
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2024-07-18 13:19:06 -04:00
renovate[bot] 4de007d7b8 Update dependency @cypress/webpack-preprocessor to v6.0.2 2024-07-18 16:58:22 +00:00
Michael Mandrus 17228e5794 CloudMigrations: Handle cancelation during snapshot building and upload (#90612)
implement cancelation during upload and building
2024-07-18 12:55:27 -04:00
Adela Almasan 61d8910a5b Transformations: Fix filterByValue being applied to the wrong series (#90512) 2024-07-18 11:03:41 -05:00
Kevin Minehart 6a2a6b0fbc 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
2024-07-18 10:53:47 -05:00
Michael Mandrus a43a538976 CloudMigrations: Fix issues discovered during end to end testing (#90562)
* improve error handling a retries during async operations

* fix use of contexts

* updates to how we call the folder api

* fix urls for gms

* more progress on the folder issue

* fix folders

* refactor for readability
2024-07-18 18:34:28 +03:00
Hugo Kiyodi Oshiro 5c966fd400 Plugins: Add logs to for plugin management actions (#90587)
* Plugins: Add logs to for plugin management actions

---------

Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>
2024-07-18 17:19:36 +02:00
Georges Chaudy 08c611c68b ResourceServer: Resource store sql backend (#90170) 2024-07-18 08:03:18 -07:00
Ryan McKinley bb40fb342a Chore: go mod tidy + sum cleanup (#90576) 2024-07-18 07:48:21 -07:00
Ryan McKinley 6e39f24588 Storage: Update storage.Interface for backend (#90382) 2024-07-18 07:47:47 -07:00
Yuri Tseretyan 09e10ae9e0 Alerting: Update State history API Open API documentation (#89795) 2024-07-18 10:37:05 -04:00
Ivan Ortega Alba f4c8a9ac1f QueryEditor: Break with Scenes because the default query is not empty string (#90583)
* Scenes: Upgrade to v5.4.1

- QueryVariable: Query is empty string by default [#837](https://github.com/grafana/scenes/pull/837) ([@ivanortegaalba](https://github.com/ivanortegaalba))
- fix(lazyloader): fix trying to run inexistent callbacks [#833](https://github.com/grafana/scenes/pull/833) ([@svennergr](https://github.com/svennergr))

* Adapt tests
2024-07-18 16:29:50 +03:00
kay delaney 5afb1c6ce0 Scenes: Save height as itemHeight for repeat panels (#90487) 2024-07-18 14:01:50 +01:00
Señor Performo - Leandro Melendez 19706bab61 docs: added video to gauge panel doc (#90484)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-18 08:39:47 -04:00
Kristin Laemmert 27b52b1507 ReplStore: Add support for round robin load balancing between multiple read replicas (#90530)
* ReplStore: Add support for multiple replicas and round-robin load balancing

* add check for zero-length repls list
2024-07-18 08:20:28 -04:00
Isabel Matwawana 2d152b7ec1 Docs: replace broken link (#90570) 2024-07-18 08:09:53 -04:00
renovate[bot] d61dbae7fe Update babel monorepo 2024-07-18 12:01:07 +00:00
Josh Hunt 0a6f9aa3cb Chore: Remove Chore issue template (#90592) 2024-07-18 14:58:11 +03:00
Josh Hunt 9a06510490 E2C: Delete cloud migration token (#90548) 2024-07-18 12:38:20 +01:00
ismail simsek f8645f73ea Prometheus: Improve expanding ruleIs with identifier label checking (#90336)
* define rule mapping type

* introduce a new mapping type

* add type comments

* add identifier check

* remove tests from wrong file

* add tests to the right file

* define function body

* unit tests and logic for getQueryLabelsForRuleName

* update logic of getRecordingRuleIdentifierIdx

* update logic and tests getRecordingRuleIdentifierIdx

* fix unit tests

* fix tests

* update how we return the options

* update message

* update type

* update expandRecordingRules unit tests

* remove identifier from end result

* fix unit tests once more

* remove fix action from expand rules warning

* remove generic type

* update warning text

* betterer
2024-07-18 13:17:33 +02:00
Josh Hunt 32232e44d2 E2C: Get Cloud Token status (#90525)
* E2C: Get Cloud Token status

* remove console.log
2024-07-18 09:48:06 +01:00
Josh Hunt fefd3faef4 Chore: Remove unnecessary issue templates (#90482) 2024-07-18 08:35:32 +00:00
Andrew Hackmann 41ae376aa4 Influxdb: Fix toMetricFindValue function (#90514)
Improved toMetricFindValue to be quicker
2024-07-18 01:16:07 +03:00
Alexander Weaver 88ed77e7e8 Alerting: More graceful handling of NoData in recording rules (#90312)
* Handle NoData as its own case

* Debug

* Scalars parseable by CollectionReader

* fix linter

* Orgit add pkg/*git add pkg/* not and
2024-07-17 15:24:03 -05:00
Yuri Tseretyan c3b9c9b239 Alerting: Send information about alert rule to data source in headers (#90344)
* add support of metadata to condition and adding it to request headers
* support for additional metadata when condition is built
* add additionall context to conditions: source and folder title
* add version
* use percent-encoding for header values
2024-07-17 22:55:12 +03:00
Ryan McKinley b825700343 Chore: Skip flakey search test (#90553) 2024-07-17 21:14:59 +03:00
Kristina 044380493e Revert "Explore: Pass the dataframes along with the time range of the data" (#90551)
Revert "Explore: Pass the dataframes along with the time range of the data (#…"

This reverts commit 58285e37a2.
2024-07-17 12:58:07 -05:00
Ryan McKinley f409f8c169 K8s/Dashboards: Implement dashboards as StorageBackend (#90295) 2024-07-17 10:49:23 -07:00
Artur Wierzbicki 9459e29775 Chore: change owner for pkg/services/queryhistory (#90550)
change owner for query history
2024-07-17 20:47:08 +03:00
Kristina 6eb695b258 Explore: Add setting for default time offset (#90401)
* Add setting for explore for a different time offset

* fix linter

* Add validation for duration value
2024-07-17 11:47:49 -05:00
Drew Slobodnjak 1fc57d8fd5 Transformations: Fix null for reduceSeriesToRows (#90508)
* Transformations: Fix null for reduceSeriesToRows

* Add tests with null data frames
2024-07-17 09:25:46 -07:00
Ivan Ortega Alba bc2cdd82dc DataSourcePicker: Create new data source does not work for subpath (#90536) 2024-07-17 19:23:08 +03:00
Jean-Philippe Quéméner 283280f329 fix(querier): use most specific timerange available (#90540)
* fix(querier): use most specific timerange available

* return zero values
2024-07-17 20:22:45 +04:00
Michael Mandrus 9b7e9d992b CloudMigrations: Query GMS for a presigned upload url at upload time (#90505)
query GMS for an upload url at upload time
2024-07-17 11:53:21 -04:00
Yuri Tseretyan 970cafa20f Alerting: Time interval Delete API to check for usages in alert rules (#90500)
* Check if a time interval is used in alert rules before deleting it
* Add time interval to parameters of ListAlertRulesQuery and ListNotificationSettings of DbStore

== Refacorings == 
* refactor isMuteTimeInUse to accept a single route
* update getMuteTiming to not return err
* update delete to get the mute timing from config first
2024-07-17 10:53:54 -04:00
Tom Ratcliffe 79df1b1e10 Alerting: Remove some unused mock server methods (#90432)
Remove some unused mock server methods
2024-07-17 16:50:25 +02:00
Tom Ratcliffe 919bc47dba Alerting: Move alertmanager warning to consistent place within notification policies (#90521)
Move alertmanager warning to consistent place within notification policies
2024-07-17 16:46:00 +02:00
Sonia Aguilar 42c29cac0b Alerting: Use Runbook URL label everywhere and add validation in the alert rule… (#90523)
* Use Runbook URL label everywhere and add validation in the alert rule form for it

* remove validation in alert rule form and render link on detail view only when its a valid url
2024-07-17 16:40:17 +02:00
Ryan McKinley 07c2d886fa Storage: prepare in resource bytes in storage.Interface, not the backend (#90513)
* prepare in k8s

* prepare in k8s

* prepare in k8s

* simplify event creation

* decode the inputs
2024-07-17 07:40:03 -07:00
Andreas Christou 2616366a0a Prometheus: Reintroduce Azure audience override feature flag (#90339)
* Re-add feature flag with deprecation note

* Hide the field in frontend if ff disabled

* Block scope overriding if ff is disabled in backend

- Update promlib to forward logger to extendOptions
- Add warning
- Update tests

* Default toggle to true for now

* Update description

* Update prom tests

* Fix lint
2024-07-17 15:09:55 +01:00
lean.dev 7839903fef CloudMigrations: Sets default grafana domain to prod (#90526) 2024-07-17 10:48:23 -03:00
Ashley Harrison 334657e1cb Navigation: Move scroll behaviour to body (#89921)
* initial attempt at body scrolling

* fix login layout

* minor fixes

* "fix" some fixed position stuff

* remember scroll position in dashboard page

* fix unit tests

* expose chrome header height in runtime and fix connections sticky header

* fix panel edit in scenes

* fix unit tests

* make useChromeHeaderHeight backwards compatible, fix plugin details double scrollbar

* fix sticky behaviour in explore metrics

* handle when undefined

* deprecate scrollRef/scrollTop

* fix extra overflow on firefox
2024-07-17 13:48:47 +01:00
Alex Khomenko ad6cf2ce4d Restore dashboards: Design review (#90468)
* Update singular case

* More copy & count fixes

* Translate success messages

* Update message

* Split no-deleted message
2024-07-17 15:00:46 +03:00
Ivan Ortega Alba 3559c5c297 Revert "Frontend: Use safe stringifier in parseBody" (#90522)
Revert "Frontend: Use safe stringifier in parseBody (#90047)"

This reverts commit 434f386982.
2024-07-17 14:00:01 +03:00
Joanna 8f376a302b UI: Align the icon in the Alert (#90461)
* UI: Align the `icon` in the `Alert`

* feat: align icon with one line text

* chore: prettier imports fix

* chore: revert imports

* feat: remove alignSelf & position the icon

* chore: clean up
2024-07-17 11:48:57 +01:00
Esteban Beltran fa2506300f Plugins: Update plugin.json schema to correctly validate version ranges and single digit versions (#90517) 2024-07-17 11:20:25 +02:00
Piotr Jamróz 58285e37a2 Explore: Pass the dataframes along with the time range of the data (#90259)
* Use data time range for rendering instead of selected range from the picker

* Update CustomContainer to use data time range

* Update test
2024-07-17 11:05:09 +02:00
Edvard Falkskär c41f3394a4 InteractiveTable: Add initial sort prop (#89937) 2024-07-17 09:37:30 +01:00
Dafydd 14cd98d7fb Update ephemeral instances workflow (#90428)
* use custom action from ephemeral workflow repo

* update codeowners

* delete obsolete workflow
2024-07-17 09:18:50 +01:00
Joey 995425f022 Tempo: Only generate query for query history if there are filters (#90471)
* Only generate query if there are filters

* Move check
2024-07-17 09:15:41 +01:00
Gabriel MABILLE ff90bf0ca4 Docs: Update basic roles permissions using curl (#90485)
* Docs: Update basic roles permissions using curl

* Fix comments

* Remove localhost
2024-07-17 09:15:36 +02:00
antonio 2186676f55 alerting:docs>google chat (#90257)
* alerting:docs>google chat

* pretty

* weight

* changed weight

* typo
2024-07-17 08:22:47 +02:00
Serge Zaitsev f5da9edbba Chore: Remove unused method in db.DB (#90433)
* remove unused method

* clean up tests
2024-07-17 08:17:23 +02:00
Isabel Matwawana c13002ee8c Docs: make heading fix in content.ts file (#90473) 2024-07-16 18:25:29 -07:00
Adela Almasan 200eb4f774 Canvas: Fix data links migration (#90504) 2024-07-16 15:56:21 -05:00
Michael Mandrus 83b309c724 CloudMigrations: Don't migrate dashboards that are soft-deleted (#90454)
* skip dashboards that are soft-deleted while building snapshots

* add unit test
2024-07-16 22:33:11 +03:00
Haris Rozajac 8e4ec47114 Explore: Docs for logs pinning and filtering in content outline (#90281)
* Docs for logs pinning and filtering

* Note about log volume histogram

* Update docs/sources/explore/_index.md

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>

* Update docs/sources/explore/_index.md

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>

* Update docs/sources/explore/_index.md

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>

---------

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>
2024-07-16 13:24:06 -06:00
Andrew Hackmann 319a874033 MSSQL: Password auth for Azure AD (#89746)
* Password auth for Azure AD

* rename auth fields

* add azure flag for client password cred enabled

* prettier

* rename flag

* Update go.mod

* Update public/app/plugins/datasource/mssql/azureauth/AzureCredentialsForm.tsx

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>

* Apply suggestions from code review

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>

* update package

* go mod

* prettier

* remove password

* gowork

* remove unused env test

* linter

---------

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-07-16 14:08:51 -05:00
Galen Kistler ac21fa8e18 Table: Update selected row color (#90364)
* chore: update table highlighted row color
2024-07-16 13:44:55 -05:00
Usman Ahmad 677d2a8b70 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
2024-07-16 20:16:23 +02:00
Galen Kistler bb52c340cc Scrollbar: fix scrollTo being called on stale reference (#90346)
* fix: fix scrollTo being called on stale reference
2024-07-16 11:34:29 -05:00
Drew Slobodnjak 4de34ac246 Table: Fix justifyContent with cellLink overflow (#90353)
* Table: Fix justifyContent with cellLink overflow

* Add textAlign to fix failing test
2024-07-16 09:26:06 -07:00
renovate[bot] 4ef6ff7c44 Update dependency @grafana/scenes to v5.4.0 (#90490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-16 19:02:32 +03:00
Michael Mandrus 6585ed16e5 Chore: Fix CloudMigration unit tests (#90489)
remove parallel tests for things that deal with the database
2024-07-16 18:50:22 +03:00
Ryan McKinley f3f9cc2e92 Scopes: Avoid dots in example names (#90460) 2024-07-16 18:30:36 +03:00
kay delaney e7f9d592f0 Revert "Scenes: Fixes issue with panel repeat height calculation (#90221)" (#90478)
This reverts commit 5cab595f45.
2024-07-16 17:19:51 +02:00
Ryan McKinley 030188831d Storage: Use Error property for error handling rather than Status (#90416)
replace status with error
2024-07-16 07:43:15 -07:00
maicon 93221f12da Unified Storage: Fix Compare method (#90455)
* Unified Storage: Fix Compare method

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

---------

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
2024-07-16 11:36:21 -03:00
Lucy Chen 1c031277af Share Drawer: Make adding menu items dynamic (#90245)
make menu dynamic
2024-07-16 10:20:26 -04:00
Matthew Jacobson b7f422b68d Alerting: Receiver API Get+List+Delete (#90384) 2024-07-16 10:02:16 -04:00
Señor Performo - Leandro Melendez efdb08ed8c docs: updated table panel visualization (#90310)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-16 09:48:59 -04:00
Summer 599f05c5af Chore: increase lint timeout (#90276) 2024-07-16 09:44:43 -04:00
Matias Chomicki 8547148623 Combine responses: do not combine frames with different names (#90464) 2024-07-16 16:34:08 +03:00
Nathan Marrs 1ee9df8ac6 Docs: Update group to nested tables transformation header to match naming in UI (#90458) 2024-07-16 09:31:17 -04:00
Kat Yang 881d9c0b83 Fix: Display unit in Overview Tab (#90002)
* fix: display metric name suffix instead of unknown

* chore: add documentation comment; remove unecessary text

* fix: create helper function getUnitFromMetric()

* refactor: make getUnitFromMetric() not use getUnit, return null if unable to identify unit

* test: add test for getUnitFromMetric()

* chore: add documentation comments to functions that get unit

* chore: add comment for tests

* chore: fix imports

* fix: display  if unable to determine metric

* Update public/app/features/trails/ActionTabs/MetricOverviewScene.tsx

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

* fix: update the translation files for drone

---------

Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
2024-07-16 09:16:55 -04:00
Haris Rozajac 51afb2e484 Make content outline visible and in expanded mode by default (#90283)
* Make content outline visible and in expanded mode by default

* Clean up unused args

* Save content outline visibility in local storage

* Add test

* Expanded state relies on local storage;
2024-07-16 07:15:30 -06:00
Michael Mandrus 6ff21726b7 CloudMigrations: Query GMS for snapshot status with a results offset (#90453)
* query GMS for status with an offset

* remove unused state
2024-07-16 09:04:21 -04:00
Piotr Jamróz f14ba32ea6 Query Library: Use current namespace when calling API (#90423)
* Use the current namespace

* Enable PeakQ API

* Enable PeakQ API when Query API is enabled

* Enable PeakQ API when Query API & Query Library are enabled
2024-07-16 11:50:38 +02:00
Piotr Jamróz 6750e881e3 Query History: Use a search index on new queries to filter in mixed data sources (#88979)
* Add search index table

* Stab a test

* Add more tests

* Add basic index

* Switch to UID and add a test for the index

* Improve tests coverage

* Remove redundant whitespaces

* Load all data source APIs when query history is loaded

* Fix column type

* Fix migration

* Clean-up the index

* Fix linting

* Fix migrations

* Fix migrations

* Fix migrations

* Rename index to details
2024-07-16 11:47:21 +02:00
Piotr Jamróz 6d9b8225aa Query Library: Use a tooltip to show full query (#90425)
Use a tooltip to show full query
2024-07-16 09:58:31 +02:00
Tobias Skarhed 4c9cb63823 PanelShortcuts: Set attention onMouseEnter (#90435)
Add onMouseEnter to PanelChrome
2024-07-16 09:03:38 +02:00
Haris Rozajac 118597d80f Explore-Query Library: Close drawer when clicking on Run query (#90404)
Close drawer when clicking on Run query
2024-07-15 15:43:22 -06:00
Yuri Tseretyan 9c05b30489 Chore: Add more logs and tracing to hysteresis flows (#90369) 2024-07-15 13:38:20 -04:00
Andriy 3c95f0d2a5 feat: add adobe analytics and cloudflare to the enterprise plugins list (#90222) 2024-07-15 18:57:56 +02:00
Darren Janeczek 698f8e2589 ExploreMetrics: disable route if disabled (or missing permissions) (#90278)
* fix: ExploreMetrics require `datasources:explore`

* fix: don't allow routing to explore/metrics if not enabled
2024-07-15 17:35:20 +02:00
Josh Hunt 8f4b76a3de RestoreDashboards: Hide restore/delete actions when no items are selected (#90431)
* RecentlyDeleted: Only show actions when items selected

* RestoreDashboards: Hide actions when no items are selected
2024-07-15 15:38:31 +01:00
Isabel Matwawana 5416444484 Docs: Update dashboard URL variables docs (#90395)
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
2024-07-15 09:36:10 -04:00
Michael Mandrus 542a1bf3ac CloudMigrations: Query Grafana Migration Status for status while the snapshot is in the cloud (#90314)
* implement querying gms for snapshot status

* add some documentation

* provide snapshot resources after snapshot is created

* add rate limiting to backend

* fix compilation error

* fix typo

* add unit tests

* finish merge

* lint

* swagger gen

* more testing

* remove duplicate test

* address a couple PR comments

* update switch statement to a map

* add timeouts to gms client through the http client

* remove extra whitespace

* put method back where it was so the PR is less confusing

* fix tests

* add todo

* fix final unit test
2024-07-15 09:22:57 -04:00
Joey 5beaae8561 FlameGraph: Remove flameGraphItemCollapsing feature toggle (#90190)
Remove feature toggle
2024-07-15 13:45:41 +01:00
Laura Benz 29ac7fd3c4 RestoreDashboards: Improved Empty and Loading states (#89825)
* fix: empty state blocking page completely

* refactor: replace epmty state implementation

* refactor: first step to fix flickering

* refactor: fix TS errors and add translations

* refactor

* tidy up search emptyState default value

* other wip

* clean up

* undo change we made to ssm

* remove log

* comment

* move empty state into seperate file

* remove log

* undo change:

---------

Co-authored-by: joshhunt <josh@trtr.co>
2024-07-15 13:45:33 +03:00
Laura Fernández cd6f018c95 RestoreDashboards: Add event tracking (#90321) 2024-07-15 12:00:29 +02:00
Sonia Aguilar 73336362a8 Alerting: Fix silencing from policy instances (#90417)
Fix silencing from policy instances
2024-07-15 11:27:46 +02:00
Andrej Ocenas aabb4286e3 Correlations: Fix wrong target data source name in the form (#90340) 2024-07-15 11:27:32 +02:00
Ivan Ortega Alba 51fab9adf4 SoloPanel: Avoid fatal error when panelId correspond to a row (#90271) 2024-07-15 10:29:26 +02:00
Fabrizio 612ebf5508 Dynatrace: Add to list of DS with custom label logic (#90258) 2024-07-15 10:18:54 +02:00
Tom Ratcliffe 0547a9ed88 Alerting: Remove unneeded uses of setBackendSrv in alerting tests (#90380) 2024-07-15 09:09:24 +01:00
Joseph Perez c77015b329 Docs: Fix broken links resulting from plugin-tools site reorganization (#90391)
* Docs: Fix broken links resulting from plugin-tools site reorganization

* Fix additional link

* Update docs/sources/whatsnew/whats-new-in-v7-0.md

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

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-13 10:59:27 -07:00
Joseph Perez 0ecff76600 Docs: Edit of several Backend topics (part 5 of doc quality project) (#89073)
* Edit of several Backend topics (part 5 of doc quality project)

* Proofread of files

* Prettier fix

* Update contribute/backend/upgrading-dependencies.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/README.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/README.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update contribute/backend/recommended-practices.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Rename doc filenames with gerunds

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-07-13 10:37:47 -07:00
Georges Chaudy ff7c0edd64 ResourceServer: Update twice should return an ErrOptimisticLockingFailed (#90378)
Update twice should return an ErrOptimisticLockingFailed
2024-07-12 23:01:24 +00:00
Señor Performo - Leandro Melendez 216d99439b docs: updated logs panel visualization (#90352)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-12 16:47:23 -04:00
Señor Performo - Leandro Melendez ef624c78be docs: updated time series panel visualization (#90345)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-12 16:06:01 -04:00
Isabella Siu 9a8be1785a CloudWatch: Fix raw queries with dimensions set (#90348) 2024-07-12 14:24:09 -04:00
Santiago e097ffc771 Alerting: Update grafana/alerting dependency (#90365)
* update grafana/alerting to latest main
* update alertmanager to  66ec17e3aa45
2024-07-12 14:05:17 -04:00
Alexander Weaver b3d863c11e Expr: Make math expression scalars compliant with dataplane contract (#90350)
* Specify frame type for scalars arbitrarily

* Update alerting tests which assert on entire dataframe fields
2024-07-12 12:52:19 -05:00
Haris Rozajac e0416cc0f8 DashGPT: Disable GenAI title and description buttons for empty dashboards (#90341)
* Disable genai title and description buttons when dashboard doesn't have at least one panel with a title or description

* Fix test

* Additional tooltip tests

* address pr feedback

* Fix test: Use const for panel title

---------

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2024-07-12 11:49:12 -06:00
Adela Almasan 9bc68562d4 Canvas: Element level data links (#89079) 2024-07-12 12:02:49 -05:00
Jev Forsberg d781ec2daa Automation: Verify DEB and RPM packages (#90146)
* baldm0mma/verify_aptyum/ add verify_linux_packages_step

* baldm0mma/verify_aptyum/ add name and image

* baldm0mma/verify_aptyum/ add commands

* baldm0mma/verify_aptyum/ add test pipeline

* baldm0mma/verify_aptyum/ update deps for verify_linux_packages_step

* baldm0mma/verify_aptyum/ update ubuntu image

* baldm0mma/verify_aptyum/ add rockylinux9 image

* baldm0mma/verify_aptyum/ update to verify_linux_DEB_packages_step naming

* baldm0mma/verify_aptyum/ add verify_linux_RPM_packages_step

* baldm0mma/verify_aptyum/ update commands for RPM check

* baldm0mma/verify_aptyum/ update test pipeline

* baldm0mma/verify_aptyum/ update annos

* baldm0mma/verify_aptyum/ update annos

* baldm0mma/verify_aptyum/ update args

* baldm0mma/verify_aptyum/ add arg to verify_linux_RPM_packages_step

* baldm0mma/verify_aptyum/ update oss_steps

* baldm0mma/verify_aptyum/ update deps args

* baldm0mma/verify_aptyum/ update sec hash

* baldm0mma/verify_aptyum/ make format-drone

* baldm0mma/verify_aptyum/ update sec hash

* baldm0mma/verify_aptyum/ update drone

* baldm0mma/verify_aptyum/ update function styles

* baldm0mma/verify_aptyum/ revert changes

* baldm0mma/verify_aptyum/ make drone

* baldm0mma/verify_aptyum/ redirect install logs

* baldm0mma/verify_aptyum/ restructure args

* baldm0mma/verify_aptyum/ update verify_linux_DEB_packages_step

* baldm0mma/verify_aptyum/ make format drone

* baldm0mma/verify_aptyum/ update verify_linux_RPM_packages_step

* baldm0mma/verify_aptyum/ add retry_command

* baldm0mma/verify_aptyum/ make drone

* baldm0mma/verify_aptyum/ update attempts to 10 minutes

* baldm0mma/verify_aptyum/ handle is_preview

* baldm0mma/verify_aptyum/ add doc strings to satisfy starlark linter

* baldm0mma/verify_aptyum/ revert is_preview

* baldm0mma/verify_aptyum/ update to rpm repo download

* baldm0mma/verify_aptyum/ add back logging for rpm

* baldm0mma/verify_aptyum/ revert to working

* baldm0mma/verify_aptyum/ update to use RPM repo

* baldm0mma/verify_aptyum/ remove redirect for logging

* baldm0mma/verify_aptyum/ rem gpg check

* baldm0mma/verify_aptyum/ fromat drone

* baldm0mma/verify_aptyum/ rem comment

* baldm0mma/verify_aptyum/ add single comment on timing
2024-07-12 10:54:03 -06:00
Matthew Jacobson ba800692c6 Alerting: Persist AlertInstance ResolvedAt & LastSentAt (#89135)
* Alerting: Persist AlertInstance ResolvedAt & LastSentAt

* Fix test

* Modify existing tests

* Fix merge conflicts from nullable LastSentAt & ResolvedAt
2024-07-12 12:26:58 -04:00
Agnès Toulet e1f030592f Chore: Fix Go deps file (#90379)
* Chore: Fix Go deps file

* Update go.work.sum
2024-07-12 18:54:06 +03:00
Ashley Harrison c13f804ef9 Storybook: Fix missing favorite and grafana icons (#90376)
ignore "fa fa-spinner" properly
2024-07-12 18:49:23 +03:00
Matthew Jacobson b7767c79e7 Alerting: Fix contact point export 500 error and notifications/receivers missing settings (#90342)
* Regression test

* Fix 500 error when exporting redacted receivers

* Fix tests to check permissions
2024-07-12 11:42:22 -04:00
Tom Ratcliffe 5d8ca38b9b Alerting: Fix Recording Rules creation issues (#90362) 2024-07-12 15:52:45 +01:00
Kristin Laemmert 8a6107cd35 DashboardStore: Use ReplDB and get dashboard quotas from the ReadReplica (#90235)
* Use ReplDB in dashboard store and update all fixtures - no other changes

* just moving dashboard counts for now

* find the missing test fixture
2024-07-12 10:47:49 -04:00
Gilles De Mey e64ef2245c Alerting: Re-organise rule group hooks (#90368) 2024-07-12 16:33:37 +02:00
Galen Kistler 8400b54a53 Table: Fix state bug with initialRowIndex (#90308)
* fix: fix state bug

---------

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2024-07-12 09:14:47 -05:00
Brendan O'Handley da2962418d Explore metrics: Use state for variables to fix labels loading bug (#90017)
* use variable state for loading labels

* UI fix for missing metadata fields

* remove extra space

* add <Trans> for betterer

* import Trans from core, this will need to be addressed when we externalize explore metrics

* make i18n-extract for drone
2024-07-12 08:57:00 -05:00
Ashley Harrison a6f9336ea1 Chore: SCSS cleanup (#90366)
* migrate _type styles

* migrate queryEditor styles
2024-07-12 14:47:12 +01:00
Galen Kistler 1367d5d721 Logs: Add log line to content outline when clicking on datalinks (#90207)
* feat: add bg color to pinned logs, pin logs when opening datalinks
2024-07-12 08:14:53 -05:00
Dominik Prokop 2d35b11323 DashboardScene: Add rows keyboard shortcuts (#90275)
* DashboardScene: Add rows keyboard shortcuts

* e2e test
2024-07-12 15:13:22 +02:00
Todd Treece 3a51260ef9 K8s: Add file store tests (#90151) 2024-07-12 08:54:00 -04:00
Ashley Harrison 8d858b1a82 Chore: Migrate more SCSS (#90224)
* tidy up alerts scss

* clean up alerting page rules

* remove mixins
2024-07-12 13:49:59 +01:00
Todd Treece 66a384247c Storage: Fix list in mode 4 (#90354) 2024-07-12 08:20:13 -04:00
Ezequiel Victorero d3a75a42a0 Chore: Update swagger docs (#90154) 2024-07-12 09:08:44 -03:00
Josh Hunt 03311f6c6c I18n: Memoize formatDate/formatDuration methods because they're prett… (#90338)
I18n: Memoize formatDate/formatDuration methods because they're pretty slow!!
2024-07-12 10:38:47 +01:00
Ashley Harrison b321dc7280 Chore: Migrate from react-beautiful-dnd to @hello-pangea/dnd (#90328)
* migrate from react-beautiful-dnd to @hello-pangea/dnd

* revert comment
2024-07-12 10:23:29 +01:00
gonvee b9f2e883b0 Admin: Fixes an issue where user accounts could not be enabled (#88117)
Fix: unable to enable user
2024-07-12 12:19:32 +03:00
Aaron Godin 7e767e40a9 IAM: Fix logic for enabling a user (#90309)
fix: correct logic on enabling a disabled user account
2024-07-12 10:54:27 +02:00
Charandas 4abb4d1662 ExtJwt: don't log verify errors as they spam for grafana-agent (#90351)
* ExtJwt: don't log verify errors as they spam for grafana-agent

* remove dead code

* revert unintended change

* revert unintended change
2024-07-11 18:23:43 -07:00
Ryan McKinley d2bc4f3255 DualWrite: Cleanup and centralize the dual write creation (#90013) 2024-07-11 23:23:31 +03:00
O Yves Chan 4b5b599982 Azure: Add new Azure infrastructure dashboards (#88869)
* add azure infra dashboards

* ran yarn prettier:write
2024-07-11 21:10:13 +01:00
Alexander Weaver 111ebd4fb2 Alerting: Create integration testing infra for recording rules (#90306)
* Create some integration testing infra for RRs

* whoops

* Require no error in responding

* fix linter

* Panic, no need to pass testing around

* Extend status test
2024-07-11 14:59:52 -05:00
Alexander Weaver ab32183e18 Alerting: Track recording rule health and last eval info ephemerally (#90247)
* Track health and last eval info

* Read method for status

* Minor tests
2024-07-11 14:05:09 -05:00
Gilles De Mey 6874202dfa Alerting: Implement "rename / move / update" for useProduceNewRuleGroup (#89706) 2024-07-11 20:12:19 +03:00
Tom Ratcliffe f140594cf1 Alerting: Make whitespace more visible on labels (#90223) 2024-07-11 17:33:27 +01:00
Leonor Oliveira d0afa60feb Remove unused metric (#90327) 2024-07-11 15:31:37 +02:00
Santiago 3bb861b9f0 Alerting: Remove empty/namespace labels when sending alerts to the remote Alertmanager (#90284)
* Alerting: Remove empty/namespace labels when sending alerts to the remote Alertmanager

* update tests

* fix typo in comment
2024-07-11 15:20:12 +02:00
Nihal c1d9e793be Metrics: Fix internal metrics endpoint not accessible from browser if basic auth is enabled (#86904)
* add WWW-Authenticate header in the http response of /metrics endpoint in case of wrong basic auth credentials

Signed-off-by: Syed Nihal <syed.nihal@nokia.com>

* added change log for the change fixing the issue https://github.com/grafana/grafana/issues/86902

Signed-off-by: Syed Nihal <syed.nihal@nokia.com>

* Update CHANGELOG.md

---------

Signed-off-by: Syed Nihal <syed.nihal@nokia.com>
2024-07-11 14:55:48 +02:00
Bruno 420ff1d07b Cloud migration: upload snapshot files using presigned url (#90273)
* Cloud migration: upload snapshot files using presigned url

* log error if index file cannot be closed

* log error if file cannot be closed in uploadUsingPresignedURL
2024-07-11 09:32:02 -03:00
Misi 69c5fa8361 IDToken: Add current user's Username and UID to the ID token (#90240)
* Set claims.Rest.Login from the IDService

* Add UID to the ID token
2024-07-11 14:25:30 +02:00
Leonor Oliveira b75276c641 Fix outcome metric (#90322) 2024-07-11 13:50:20 +02:00
Pepe Cano d7c844b5b6 Alerting UX: copy changes in Groups view (#90173)
* UI and help copy changes in Alerting Groups view

* Alerting Groups view: change subtitle

* Rename Alerting page title: `Groups` to `Active notifications`

* Update pseudo-local

* update betterer

* Extract translation through `make i18n-extract`
2024-07-11 13:33:41 +02:00
Mihai Doarna 944a3a9818 Auth: Temporarily remove LDAP from UI until its config page is ready (#90323)
temporarily remove LDAP from UI until its config page is ready
2024-07-11 13:54:17 +03:00
Mihai Doarna bbd1611265 SSO: Register LDAP service if LDAP is enabled in SSO settings (#90228)
register LDAP service if LDAP is enabled in SSO settings
2024-07-11 13:53:43 +03:00
Piotr Jamróz b09798c3fa Explore: Fix new-old-new query history bug (#90214)
* Remove cancelActiveListeners() and delay()

* Wait for handle history to resolve

* Do not sync from URL when state changes

---------

Co-authored-by: harisrozajac <haris.rozajac12@gmail.com>
2024-07-11 12:37:47 +02:00
Alex Khomenko 62494248e3 Restore dashboards: Add RBAC (#90270)
* Restore dashboards: Add RBAC

* Add check to navtree

* Prevent non-admins from searching deleted dbs

* Add check to the route

* Cleanup

* Update translations

* Update API permissions

* Correct permissions

* Update warning message

* Update translation

* Return 401 for deleted query without admin role
2024-07-11 13:20:04 +03:00
Sonia Aguilar c76b490c57 Alerting: Central alert history part4 (#90088)
* Implement EventDetails for expanded rows and pagination on the events list

* Add test for getPanelDataForRule function

* prettier

* refactor EventState component

* create interfaces for props

* Add missing translations

* Update some comments

* Add plus button in alertrulename , to add it into the filter

* Add plus button to add filters from the list labels and alert name

* Add clear labels filter button

* run prettier

* fix RBAC checks

* Update AlertLabels onLabelClick functionality

* add limit=0 in useCombinedRule call

* Add filter by state

* remove plus button in labels

* Fix state filter

* Add filter by previous state

* fix some errors after solving conflicts

* Add comments and remove some type assertions

* Update the number of transitions calculation to be for each instance

* Add tests for state filters

* remove type assertion

* Address review comments

* Update returnTo prop in alert list view url

* Update translations

* address review comments

* prettier

* update cursor to pointer

* Address Deyan review comments

* address review pr comments from Deyan

* fix label styles

* Visualize expanded row as a state graph and address some pr review comments

* Add warning when limit of events is reached and rename onClickLabel

* Update texts

* Fix translations

* Update some Labels in the expanded states visualization

* move getPanelDataForRule to a separate file

* Add header to the list of events

* Move HistoryErrorMessage to a separate file

* remove getPanelDataForRule function and test

* add comment

* fitler by instance label results shown inthe state chart

* remove defaults.ini changes

* fix having single event on time state chart

---------

Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
2024-07-11 12:09:52 +02:00
David Harris 92ada4eb7c chore: add new data source request template (#86912)
* chore: add new data source request template

* Update 6-data_source_request.yaml

Add placeholder text for Use case field

* Update .github/ISSUE_TEMPLATE/6-data_source_request.yaml

Co-authored-by: Mitch Seaman <mjseaman@users.noreply.github.com>

---------

Co-authored-by: Mitch Seaman <mjseaman@users.noreply.github.com>
2024-07-11 10:55:12 +01:00
Agnès Toulet fb8e98bcc9 PDF: Add go dependency (#89949)
Chore: Add Enterprise library
2024-07-11 11:50:40 +02:00
Laura Benz 8031ef1aac Dashboard settings: Refactor delete modals (#90279)
* refactor: add translatable elements and confirmation text

* refactor: add translatable element

* refactor: add translatable element

* refactor: run i18n extraction

* refactor: add translatable elements
2024-07-11 11:47:28 +02:00
Andre Pereira 4eb09789c1 Tempo: Virtualize tags select to improve performance (#90269)
* Virtualize tags select to improve performance

* Fix tests

* Fix tests

* Fix tests
2024-07-11 10:45:20 +01:00
Hugo Kiyodi Oshiro 0a1b9f94d5 Plugins: Improve levitate / breaking changes report in grafana/grafana (#89822)
* Plugins: Add gcloud auth and usage to levitate workflow

---------

Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
2024-07-11 11:38:43 +02:00
Charandas 57e2a56876 K8s: fix tracer init by moving Config() above it (#90311) 2024-07-11 00:57:58 +03:00
Kevin Minehart a28db90dd5 CI: fix release pr condition (#90299)
* Release comms should only run when the source PR is

* Fix release-comms workflow condition
2024-07-10 23:17:19 +03:00
Adela Almasan 8989ac4a0c Canvas: Improved tooltip (#90162)
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
2024-07-10 14:52:15 -05:00
Stephanie Hingtgen bb187ce4b1 K8s: Match status codes from single tenant (#90153)
Co-authored-by: Jean-Philippe Quémémer <jeanphilippe.quemener@grafana.com>
2024-07-10 20:48:02 +02:00
Larissa Wandzura 936b3a7a5d Docs: Updated the Query inspector page (#90249)
Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
2024-07-10 13:44:31 -05:00
Kevin Minehart f411d85749 CI: remove missing dependency from workflow action (#90285)
remove missing dep from workflow action
2024-07-10 13:03:49 -05:00
Nathan Marrs 3ca7976ee5 Transformations: Promote group to nested table as generally available (#90253) 2024-07-10 10:08:41 -07:00
Ryan McKinley 2bb66209ca Chore: make protobuf (#90282) 2024-07-10 19:19:21 +03:00
Marcus Efraimsson 2cf3a4d9ee API Server: Override k8s api server profile contention flag with custom ones (#90238)
Upgrades sdk ro v0.238.0
2024-07-10 17:27:51 +02:00
Serge Zaitsev 117390e88d Chore: Add package.json to changelog github action (#90267)
add package.json
2024-07-10 15:43:58 +02:00
Michael Mandrus 317da43a84 CloudMigration: Provide a stats rollup in the GetSnapshot response (#90252)
* order session list descending

* add snapshot status method to store

* query stats while retrieving snapshot

* return stats in dto

* swagger

* fix tests

* commit results of bingo get

* fix swagger

* minor improvement

* fix typo

* forgot a file
2024-07-10 08:46:38 -04:00
Andre Pereira a3dfc894f7 Tempo: Require streaming to be enabled (#90264)
Revert previous change
2024-07-10 12:02:30 +01:00
Serge Zaitsev c5f903f6dd Chore: Add changelog github action (#90183)
* add changelog github action

* tabs vs spaces

* better disable release, even in draft

* add codeowners
2024-07-10 12:32:06 +02:00
Andreas Christou bba26f8e13 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
2024-07-10 11:26:49 +01:00
Giuseppe Guerra 9216a3df7d Plugins: Remove datasourceQueryMultiStatus feature toggle (#90191)
* Remove datasourceQueryMultiStatus feature toggle

* PR review suggestion
2024-07-10 11:15:10 +02:00
Misi 4e03ca5c1c Auth: Remove role_attribute_path from Azure AD config UI (#90227)
Remove role_attribute_path from Azure AD config UI
2024-07-10 10:12:02 +02:00
Michael Mandrus 021a9400ab Chore: Commit results of bingo get (#90256)
commit results of bingo get
2024-07-10 10:36:59 +03:00
Ryan McKinley 079f0715aa ResourceServer: Add resource server protobuf and wrapper (#90007) 2024-07-09 15:08:13 -07:00
Davidson Francis 05ce16cf7b Docs: Fix link to send report API (#90242)
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-07-09 17:08:43 -04:00
Andreas Christou 3db2badae5 GCP: Update GKE monitoring dashboard (#90091)
Update GKE dashboard
2024-07-09 14:56:14 -04:00
Kim Nylander 2b907c0a2d [DOC] Fix broken links in profiles and traces content (#90237) 2024-07-09 18:17:43 +01:00
Esteban Beltran 1269e50042 Chore: Fix flaky frontend e2e tests with the explore page (#90184)
* Chore: Fix flaky frontend e2e tests with the explore page

* Use selector

* Add checks to scenes tests

* simplify code
2024-07-09 18:56:11 +02:00
Fabrizio 13be47f903 Tempo: Add toggle for streaming (#88685)
* first implementation

* Linting

* Fix tests

* Trigger CI

* Renaming

* Linting

* Trigger CI

* Fix tests

* Add live test for streaming

* Trigger CI

* Chores

* Fix broken test

* Chores

* Improve tests

* Linting

* Address PR comments

* Renaming

* Add info alert

* Linting

* Linting

* Check also feature toggle

* Fix tests

* Added link to streaming config section and updated copy

* Require streaming to be specifically disabled

---------

Co-authored-by: André Pereira <adrapereira@gmail.com>
2024-07-09 17:44:19 +01:00
Marcus Efraimsson fc8a5cf468 Profiling: Enhance configuration and docs (#90048)
Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2024-07-09 17:48:16 +02:00
Haris Rozajac 8a6e92c0c9 Explore: Interaction tracking for logs pinning and filtering in content outline (#90213)
* Add interaction tracking

* Move reportInteraction out of scrollIntoView to improve readability

* move activateFilter logic inside handleItemClicked
2024-07-09 08:17:50 -07:00
kay delaney 434f386982 Frontend: Use safe stringifier in parseBody (#90047)
* Frontend: Use safe stringifier in parseBody

Closes #88064
2024-07-09 16:15:59 +01:00
kay delaney 5cab595f45 Scenes: Fixes issue with panel repeat height calculation (#90221)
* Scenes: Fixes issue with panel repeat height calculation
2024-07-09 16:03:32 +01:00
Will Browne 343d6f8a0c Plugins: Support > 1 levels of plugin dependencies (#90174)
* do it

* prevent loops

* change to sync.Map
2024-07-09 15:46:30 +01:00
Gilles De Mey 4f3fb83b0a Alerting: Refactor PromQL-style matcher parsing (#90129)
Co-authored-by: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com>
2024-07-09 17:02:08 +03:00
Jack Baldry daf7e64c0a Fix broken link (#90216) 2024-07-09 15:02:01 +01:00
Alex Khomenko b3fa2821cc Pin nav items: Instrument user events (#90212)
* Pin nav items: Instrument user events

* Send item path
2024-07-09 16:16:11 +03:00
Marcus Efraimsson c8af659f02 Plugins: Enhanced plugin instrumentation (#90199)
* Plugins: Enhanced plugin instrumentation

* use backend.CallResourceResponseSenderFunc

* sdk v0.237.0

* support admission control

* cover all handlers in log and metrics middlewares

* fix after review
2024-07-09 15:03:46 +02:00
ismail simsek 2a4a73e03d Explore Metrics: Save and restore the breakdown layout view from LocalStorage (#90202)
* save and restore the breakdown layout view from localstorage

* Update public/app/features/trails/MetricScene.tsx

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>

* add type guard

* remove unused import

---------

Co-authored-by: Darren Janeczek <38694490+darrenjaneczek@users.noreply.github.com>
2024-07-09 14:22:11 +02:00
Arati R ecadd99456 SearchV2: Support soft deletion (#90217)
* soft delete
* Fix bench test
 Co-authored-by:  Bruno Abrantes <bruno@brunoabrantes.com>
* Add integration test for soft deletion

---------

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2024-07-09 14:17:27 +02:00
Galen Kistler 20181425e4 Table: Prevent runtime error when resizing columns with onColumnResize (#89862)
fix: prevent runtime error when resizing columns
2024-07-09 07:08:35 -05:00
Ashley Harrison 8444c7760c Chore: Remove deprecated SCSS styles (#90187)
clean up infobox styles
2024-07-09 12:53:43 +01:00
ismail simsek 7f020dce05 Chore: Fix scrolling issue after selecting a metric with a lot of labels (#90195)
remove minHeight
2024-07-09 13:32:32 +02:00
Gilles De Mey b7910ade97 Alerting: Allow future relative time (#89405) 2024-07-09 13:18:24 +02:00
Jack Westbrook d8137083d9 Grafana/data: Remove barrel files part 3 (#90001)
* chore(grafana-data): remove monac and theme barrel files, clean up imports and exports

* chore(grafana-data): remove query barrel file and update imports / exports

* chore(grafana-data): remove text and events barrel files, update imports n exports

* chore(alerting): fix grafana/data imports pointing to nested barrel files

* chore(grafana-data): delete unused text/index.ts

* chore(grafana-data): fix broken text import paths
2024-07-09 10:07:33 +02:00
linoman 82d8ca03b3 Update SAML UI docs to set up Azure AD (#90193)
* Update SAML UI docs to set up Azure AD
2024-07-09 09:43:43 +02:00
Charandas 3eef9b3397 Requester/authn: check the interface for nil value to avoid false positives (#90210) 2024-07-09 02:30:03 +03:00
Yuri Tseretyan 5ae5fa3a7a Alerting: Support field selectors in time interval API (#90022)
* fix kind of TimeInterval
* register custom fields for selectors
* support field selectors in legacy storage
* support selectors in storage

===== Misc
* refactor conversions to build in one place
* hide implementation of provenance status behind accessors to use the key in selectors
* fix provenance error
2024-07-08 22:45:30 +03:00
Kevin Minehart 63e715f6a9 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.
2024-07-08 14:32:28 -05:00
Charandas c210617735 K8s: use contexthandler in standalone handler chain (#90102) 2024-07-08 12:22:10 -07:00
Alexander Weaver 3b6a8775bb Alerting: Fix stale values associated with states that have gone to NoData, unify values calculation (#89807)
* Unify values

* Fix with latest changes on main

* Fix up NaN test

* Keep refIDs with -1 as value

* Test that refIDs are preserved on Normal to Error transition

* Alerting to err test too

* Add a blurb to docs about this behavior
2024-07-08 12:30:23 -05:00
Timur Olzhabayev f763f2085b Feat: Extending report interaction with static context that can be appended to all interaction events (#88927)
* Extending report interaction with static context that can be appended to all requests
2024-07-08 16:37:45 +02:00
Will Browne cff9ecbd6d Plugins: Ensure plugin dependency field in plugin.json does not require version (#90142)
non required + pattern
2024-07-08 15:28:52 +01:00
Kristin Laemmert 77a4869fca accesscontrol service read replica (#89963)
* accesscontrol service read replica
* now using the ReplDB interface
* ReadReplica for GetUser
2024-07-08 10:00:13 -04:00
Serge Zaitsev e9876749d4 Chore: Add retry option to curl (#90179)
add retry option to curl
2024-07-08 15:47:31 +02:00
Fabrizio c42dd6e920 Tempo: Run go get (#89335)
* Run `go get`

* Run `go work sync`

* Update go.work.sum

---------

Co-authored-by: André Pereira <adrapereira@gmail.com>
2024-07-08 14:01:38 +01:00
Pepe Cano 1398f905af Alerting UX: update descriptions for alerting notification fields (#89187)
* Change a bit existing descriptions for Notification fields
aligning them with the updated documentation

* revert `betterrer.results`

* Update public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/notification-policies/EditNotificationPolicyForm.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/notification-policies/routeTimingsFields.ts

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/notification-policies/routeTimingsFields.ts

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/notification-policies/routeTimingsFields.ts

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/rule-editor/NotificationsStep.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/rule-editor/NotificationsStep.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update public/app/features/alerting/unified/components/rule-editor/alert-rule-form/simplifiedRouting/route-settings/RouteSettings.tsx

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* update betterer

---------

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
2024-07-08 13:14:19 +02:00
Andres Martinez Gotor 2b7338f8b6 Add optional APIVersion to DatasourceRef (#90076) 2024-07-08 13:12:56 +02:00
Alex Khomenko 96cdce7f72 FilterList: Separate ItemRenderer (#90112)
* FilterList: Separate ItemRenderer

* Extend props

* Codeformat
2024-07-08 14:05:43 +03:00
Andres Martinez Gotor 61b95783d5 UpdateDatasource: Add apiVersion if enabled (#90038) 2024-07-08 13:02:48 +02:00
Josh Hunt 06de37e6cd GrafanaUI: Allow wrap prop on Stack to be a boolean (#90145) 2024-07-08 11:50:51 +01:00
Sarah Zinger 2a80ec9104 Docs: Add line about installing corepack in developer guide (#89250)
Add line about installing corepack
2024-07-08 12:38:41 +02:00
Alex Khomenko c1ec327b74 FilterList: Improve "No values" display (#90032)
* FilterList: Improve "No values" display

* Switch to ternary
2024-07-08 13:27:34 +03:00
1968 changed files with 79579 additions and 42001 deletions
+44 -116
View File
@@ -451,9 +451,8 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"]
[0, 0, 0, "Do not use any type assertions.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"]
],
"packages/grafana-prometheus/src/language_provider.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@@ -515,7 +514,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
],
"packages/grafana-runtime/src/services/LocationService.ts:5381": [
"packages/grafana-runtime/src/services/LocationService.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
@@ -534,7 +533,8 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"]
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"]
],
"packages/grafana-runtime/src/services/pluginExtensions/getPluginExtensions.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -601,7 +601,8 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksListItem.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -1664,8 +1665,7 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/components/alert-groups/AlertDetails.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/alerting/unified/components/alert-groups/AlertGroup.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -1683,11 +1683,15 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "1"]
],
"public/app/features/alerting/unified/components/alert-groups/AlertStateFilter.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"]
],
"public/app/features/alerting/unified/components/alert-groups/GroupBy.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "Do not use any type assertions.", "2"]
],
"public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -1702,21 +1706,10 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "9"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "10"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "11"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "12"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "13"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "14"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"]
],
"public/app/features/alerting/unified/components/contact-points/components/ContactPointsFilter.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -1764,10 +1757,6 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/components/extensions/AlertInstanceExtensionPointMenu.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`app/features/explore/extensions/ToolbarExtensionPointMenu\`)", "0"]
],
"public/app/features/alerting/unified/components/mute-timings/MuteTimingForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeInterval.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
@@ -1778,8 +1767,7 @@ exports[`better eslint`] = {
],
"public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/alerting/unified/components/notification-policies/ContactPointSelector.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -2053,8 +2041,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "9"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "10"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "11"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "12"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "13"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "12"]
],
"public/app/features/alerting/unified/components/rule-editor/PreviewRule.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -2288,9 +2275,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"]
],
"public/app/features/alerting/unified/components/rules/GrafanaRules.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -2336,10 +2321,7 @@ exports[`better eslint`] = {
],
"public/app/features/alerting/unified/components/rules/RuleState.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/alerting/unified/components/rules/RuleStats.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -2919,7 +2901,9 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"]
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
[0, 0, 0, "Unexpected any. Specify a different type.", "14"]
],
"public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
@@ -3171,15 +3155,6 @@ exports[`better eslint`] = {
"public/app/features/dashboard/components/DashboardSettings/index.ts:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./DashboardSettings\`)", "0"]
],
"public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"]
],
"public/app/features/dashboard/components/GenAI/GenAIHistory.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
@@ -3410,9 +3385,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/dashboard/containers/SoloPanelPage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/dashboard/dashgrid/PanelStateWrapper.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
@@ -3973,10 +3946,6 @@ exports[`better eslint`] = {
"public/app/features/explore/QueryLibrary/QueryTemplatesTable/QueryDescriptionCell.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/explore/RichHistory/RichHistoryAddToLibraryForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/explore/RichHistory/RichHistoryCard.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"],
@@ -4466,9 +4435,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"]
],
"public/app/features/gops/configuration-tracker/components/ConfigCard.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/gops/configuration-tracker/components/ConfigureIRM.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
@@ -4576,10 +4542,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Styles should be written using objects.", "4"],
[0, 0, 0, "Styles should be written using objects.", "5"]
],
"public/app/features/live/LiveConnectionWarning.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"]
],
"public/app/features/live/centrifuge/LiveDataStream.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
@@ -4772,10 +4734,9 @@ exports[`better eslint`] = {
],
"public/app/features/migrate-to-cloud/onprem/NameCell.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/migrate-to-cloud/onprem/Page.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"]
],
"public/app/features/notifications/StoredNotifications.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
@@ -4903,17 +4864,13 @@ exports[`better eslint`] = {
[0, 0, 0, "Styles should be written using objects.", "0"]
],
"public/app/features/plugins/admin/components/InstallControls/ExternallyManagedButton.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"]
],
"public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"]
],
"public/app/features/plugins/admin/components/InstallControls/InstallControlsWarning.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
@@ -4923,18 +4880,15 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "9"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "10"],
[0, 0, 0, "Styles should be written using objects.", "11"]
[0, 0, 0, "Styles should be written using objects.", "10"]
],
"public/app/features/plugins/admin/components/InstallControls/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./InstallControlsWarning\`)", "0"],
[0, 0, 0, "Do not re-export imported variable (\`./InstallControlsButton\`)", "1"]
],
"public/app/features/plugins/admin/components/PluginActions.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
[0, 0, 0, "\'VerticalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "Styles should be written using objects.", "3"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"]
],
"public/app/features/plugins/admin/components/PluginDashboards.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -4971,15 +4925,11 @@ exports[`better eslint`] = {
[0, 0, 0, "Styles should be written using objects.", "1"]
],
"public/app/features/plugins/admin/components/PluginDetailsPage.tsx:5381": [
[0, 0, 0, "\'Layout\' import from \'@grafana/ui/src/components/Layout/Layout\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
[0, 0, 0, "Styles should be written using objects.", "2"],
[0, 0, 0, "Styles should be written using objects.", "3"],
[0, 0, 0, "Styles should be written using objects.", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "8"]
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"]
],
"public/app/features/plugins/admin/components/PluginDetailsSignature.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -4988,9 +4938,6 @@ exports[`better eslint`] = {
"public/app/features/plugins/admin/components/PluginListItem.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/plugins/admin/components/PluginListItemBadges.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"]
],
"public/app/features/plugins/admin/components/PluginSignatureDetailsBadge.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
@@ -5053,9 +5000,8 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/plugins/components/PluginsErrorsInfo.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"]
],
"public/app/features/plugins/datasource_srv.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
@@ -5239,9 +5185,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"]
],
"public/app/features/search/page/components/ActionRow.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"],
[0, 0, 0, "Styles should be written using objects.", "2"]
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/search/page/components/SearchResultsTable.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
@@ -5477,15 +5421,6 @@ exports[`better eslint`] = {
"public/app/features/trails/ActionTabs/BreakdownScene.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"]
],
"public/app/features/trails/ActionTabs/MetricOverviewScene.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with <Trans />", "6"]
],
"public/app/features/trails/ActionTabs/utils.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
@@ -6161,6 +6096,9 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"]
],
"public/app/plugins/datasource/dashboard/datasource.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/plugins/datasource/dashboard/index.ts:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./runSharedRequest\`)", "0"],
[0, 0, 0, "Do not re-export imported variable (\`./DashboardQueryEditor\`)", "1"],
@@ -7386,9 +7324,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"]
],
"public/app/types/teams.ts:5381": [
[0, 0, 0, "Do not re-export imported variable (\`TeamDTO\`)", "0"]
],
"public/app/types/unified-alerting-dto.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
],
@@ -7921,9 +7856,6 @@ exports[`no gf-form usage`] = {
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
"public/app/plugins/datasource/cloudwatch/components/ConfigEditor/ConfigEditor.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
"public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
@@ -7939,10 +7871,6 @@ exports[`no gf-form usage`] = {
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
"public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LogGroupsField.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
"public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
+3 -5
View File
@@ -53,11 +53,9 @@ $(LEFTHOOK): $(BINGO_DIR)/lefthook.mod
@echo "(re)installing $(GOBIN)/lefthook-v1.4.8"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=lefthook.mod -o=$(GOBIN)/lefthook-v1.4.8 "github.com/evilmartians/lefthook"
# swagger 0.30.5 isn't compatibile with go 1.22 yet so pinning to a specific commit until there's a new release
# https://github.com/go-swagger/go-swagger/issues/3070
SWAGGER := $(GOBIN)/swagger-db51e79a0e37c572d8b59ae0c58bf2bbbbe53285
SWAGGER := $(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37
$(SWAGGER): $(BINGO_DIR)/swagger.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
@echo "(re)installing $(GOBIN)/swagger-db51e79a0e37c572d8b59ae0c58bf2bbbbe53285"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-db51e79a0e37c572d8b59ae0c58bf2bbbbe53285 "github.com/go-swagger/go-swagger/cmd/swagger"
@echo "(re)installing $(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37 "github.com/go-swagger/go-swagger/cmd/swagger"
+2
View File
@@ -46,6 +46,7 @@ github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w=
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
@@ -878,6 +879,7 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+553
View File
@@ -2,6 +2,39 @@
4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs=
4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc=
4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/4meepo/tagalign v1.3.3 h1:ZsOxcwGD/jP4U/aw7qeWu58i7dwYemfy5Y+IF1ACoNw=
github.com/4meepo/tagalign v1.3.3/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE=
github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8=
@@ -22,10 +55,12 @@ github.com/Antonboom/testifylint v1.3.0 h1:UiqrddKs1W3YK8R0TUuWwrVKlVAnS07DTUVWW
github.com/Antonboom/testifylint v1.3.0/go.mod h1:NV0hTlteCkViPW9mSR4wEMfwp+Hs1T3dY60bkvSfhpM=
github.com/Antonboom/testifylint v1.3.1 h1:Uam4q1Q+2b6H7gvk9RQFw6jyVDdpzIirFOOrbs14eG4=
github.com/Antonboom/testifylint v1.3.1/go.mod h1:NV0hTlteCkViPW9mSR4wEMfwp+Hs1T3dY60bkvSfhpM=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Crocmagnon/fatcontext v0.2.2 h1:OrFlsDdOj9hW/oBEJBNSuH7QWf+E9WPVHw+x52bXVbk=
github.com/Crocmagnon/fatcontext v0.2.2/go.mod h1:WSn/c/+MMNiD8Pri0ahRj0o9jVpeowzavOQplBJw6u0=
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
@@ -40,6 +75,11 @@ github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJP
github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ=
github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c=
github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg=
github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU=
github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
@@ -50,6 +90,8 @@ github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8ger
github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU=
github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s=
github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY=
@@ -72,26 +114,39 @@ github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyy
github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50=
github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4=
github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/ckaznocha/intrange v0.1.0 h1:ZiGBhvrdsKpoEfzh9CjBfDSZof6QB0ORY5tXasUtiew=
github.com/ckaznocha/intrange v0.1.0/go.mod h1:Vwa9Ekex2BrEQMg6zlrWwbs/FtYw7eS5838Q7UjK7TQ=
github.com/ckaznocha/intrange v0.1.2 h1:3Y4JAxcMntgb/wABQ6e8Q8leMd26JbX2790lIss9MTI=
github.com/ckaznocha/intrange v0.1.2/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo=
github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc=
github.com/daixiang0/gci v0.12.3 h1:yOZI7VAxAGPQmkb1eqt5g/11SUlwoat1fSblGLmdiQc=
github.com/daixiang0/gci v0.12.3/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI=
github.com/daixiang0/gci v0.13.4 h1:61UGkmpoAcxHM2hhNkZEf5SzwQtWJXTSws7jaPyqwlw=
github.com/daixiang0/gci v0.13.4/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8=
github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
@@ -116,16 +171,29 @@ github.com/go-critic/go-critic v0.11.2 h1:81xH/2muBphEgPtcwH1p6QD+KzXl2tMSi3hXjB
github.com/go-critic/go-critic v0.11.2/go.mod h1:OePaicfjsf+KPy33yq4gzv6CO7TEQ9Rom6ns1KsJnl8=
github.com/go-critic/go-critic v0.11.4 h1:O7kGOCx0NDIni4czrkRIXTnit0mkyKOCePh3My6OyEU=
github.com/go-critic/go-critic v0.11.4/go.mod h1:2QAdo4iuLik5S9YG0rT4wcZ8QxwHYkrr6/2MWAiv/vc=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8=
github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU=
github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s=
github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw=
github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4=
github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ=
github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw=
github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY=
github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco=
github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4=
github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA=
github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA=
github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw=
github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ=
github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
@@ -140,6 +208,34 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
@@ -168,26 +264,61 @@ github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAz
github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k=
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs=
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc=
github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q=
github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM=
github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70=
github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak=
github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk=
github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A=
github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M=
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jgautheron/goconst v1.7.0 h1:cEqH+YBKLsECnRSd4F4TK5ri8t/aXtt/qoL0Ft252B0=
github.com/jgautheron/goconst v1.7.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk=
@@ -200,6 +331,15 @@ github.com/jjti/go-spancheck v0.5.3 h1:vfq4s2IB8T3HvbpiwDTYgVPj1Ze/ZSXrTtaZRTc7C
github.com/jjti/go-spancheck v0.5.3/go.mod h1:eQdOX1k3T+nAKvZDyLC3Eby0La4dZ+I19iOl5NzSPFE=
github.com/jjti/go-spancheck v0.6.1 h1:ZK/wE5Kyi1VX3PJpUO2oEgeoI4FWOUm7Shb2Gbv5obI=
github.com/jjti/go-spancheck v0.6.1/go.mod h1:vF1QkOO159prdo6mHRxak2CpzDpHAfKiPUDP/NeRnX8=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY=
github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0=
github.com/karamaru-alpha/copyloopvar v1.0.8 h1:gieLARwuByhEMxRwM3GRS/juJqFbLraftXIKDDNJ50Q=
@@ -208,10 +348,17 @@ github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym
github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k=
github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0=
github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8=
github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg=
github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg=
github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs=
github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I=
github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs=
@@ -242,8 +389,10 @@ github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1r
github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc=
github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE=
github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
@@ -256,8 +405,15 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA=
github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE=
github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg=
@@ -270,11 +426,20 @@ github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbn
github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo=
github.com/pelletier/go-toml/v2 v2.2.0/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/polyfloyd/go-errorlint v1.4.8 h1:jiEjKDH33ouFktyez7sckv6pHWif9B7SuS8cutDXFHw=
@@ -283,12 +448,26 @@ github.com/polyfloyd/go-errorlint v1.5.1 h1:5gHxDjLyyWij7fhfrjYNNlHsUNQeyx0LFQKU
github.com/polyfloyd/go-errorlint v1.5.1/go.mod h1:sH1QC1pxxi0fFecsVIzBmxtrgd9IF/SkJpA6wqyKAJs=
github.com/polyfloyd/go-errorlint v1.5.2 h1:SJhVik3Umsjh7mte1vE0fVZ5T1gznasQG3PV7U5xFdA=
github.com/polyfloyd/go-errorlint v1.5.2/go.mod h1:sH1QC1pxxi0fFecsVIzBmxtrgd9IF/SkJpA6wqyKAJs=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs=
@@ -301,6 +480,8 @@ github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryancurrah/gomodguard v1.3.1 h1:fH+fUg+ngsQO0ruZXXHnA/2aNllWA1whly4a6UvyzGE=
github.com/ryancurrah/gomodguard v1.3.1/go.mod h1:DGFHzEhi6iJ0oIDfMuo3TgrS+L9gZvrEfmjjuelnRU0=
github.com/ryancurrah/gomodguard v1.3.2 h1:CuG27ulzEB1Gu5Dk5gP8PFxSOZ3ptSdP5iI/3IXxM18=
@@ -323,6 +504,11 @@ github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9 h1:rnO6Zp1YMQ
github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9/go.mod h1:dg7lPlu/xK/Ut9SedURCoZbVCR4yC7fM65DtH9/CDHs=
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU=
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE=
@@ -349,14 +535,30 @@ github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YE
github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc=
github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8=
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk=
github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM=
github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
github.com/tetafro/godot v1.4.16 h1:4ChfhveiNLk4NveAZ9Pu2AN8QZ2nkUGFuadM9lrr5D0=
github.com/tetafro/godot v1.4.16/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M=
@@ -385,6 +587,13 @@ github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5Jsjqto
github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4=
github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw=
github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
gitlab.com/bosi/decorder v0.4.1 h1:VdsdfxhstabyhZovHafFw+9eJ6eU0d2CkFNJcZz/NU4=
gitlab.com/bosi/decorder v0.4.1/go.mod h1:jecSqWUew6Yle1pCr2eLWTensJMmsxHsBwt+PVbkAqA=
gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo=
@@ -399,6 +608,11 @@ go-simpler.org/sloglint v0.7.0 h1:rMZRxD9MbaGoRFobIOicMxZzum7AXNFDlez6xxJs5V4=
go-simpler.org/sloglint v0.7.0/go.mod h1:g9SXiSWY0JJh4LS39/Q0GxzP/QX2cVcbTOYhDpXrJEs=
go-simpler.org/sloglint v0.7.1 h1:qlGLiqHbN5islOxjeLXoPtUdZXb669RW+BDQ+xOSNoU=
go-simpler.org/sloglint v0.7.1/go.mod h1:OlaVDRh/FKKd4X4sIMbsz8st97vomydceL146Fthh/c=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
@@ -407,44 +621,380 @@ go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8=
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs=
honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0=
mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo=
@@ -455,3 +1005,6 @@ mvdan.cc/unparam v0.0.0-20240427195214-063aff900ca1 h1:Nykk7fggxChwLK4rUPYESzeIw
mvdan.cc/unparam v0.0.0-20240427195214-063aff900ca1/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI=
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U=
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+2 -2
View File
@@ -2,7 +2,7 @@
init_cmds = [
["GO_BUILD_DEV=1", "make", "build-go"],
["make", "gen-jsonnet"],
["./bin/grafana", "server", "-profile", "-profile-addr=127.0.0.1", "-profile-port=6000", "-packaging=dev", "cfg:app_mode=development"]
["./bin/grafana", "server", "-profile", "-profile-addr=0.0.0.0", "-profile-port=6000", "-profile-block-rate=1", "-profile-mutex-rate=5", "-packaging=dev", "cfg:app_mode=development"]
]
watch_all = true
follow_symlinks = true
@@ -18,5 +18,5 @@ build_delay = 1500
cmds = [
["GO_BUILD_DEV=1", "make", "build-go"],
["make", "gen-jsonnet"],
["./bin/grafana", "server", "-profile", "-profile-addr=127.0.0.1", "-profile-port=6000", "-packaging=dev", "cfg:app_mode=development"]
["./bin/grafana", "server", "-profile", "-profile-addr=0.0.0.0", "-profile-port=6000", "-profile-block-rate=1", "-profile-mutex-rate=5", "-packaging=dev", "cfg:app_mode=development"]
]
+2
View File
@@ -17,6 +17,7 @@ load(
"publish_npm_pipelines",
"publish_packages_pipeline",
)
load("scripts/drone/events/rrc-patch.star", "rrc_patch_pipelines")
load(
"scripts/drone/pipelines/ci_images.star",
"publish_ci_windows_test_image_pipeline",
@@ -39,6 +40,7 @@ def main(_ctx):
return (
pr_pipelines() +
main_pipelines() +
rrc_patch_pipelines() +
publish_image_pipelines_public() +
publish_artifacts_pipelines("public") +
publish_npm_pipelines() +
+936 -43
View File
File diff suppressed because it is too large Load Diff
+12 -1
View File
@@ -1,7 +1,18 @@
{
"extends": ["@grafana/eslint-config", "plugin:react/jsx-runtime"],
"root": true,
"plugins": ["@emotion", "lodash", "jest", "import", "jsx-a11y", "@grafana", "no-barrel-files"],
"plugins": [
"@emotion",
"lodash",
"jest",
"import",
"jsx-a11y",
"@grafana",
"no-barrel-files",
// Included so betterer doesn't fail when processing all files,
// as other parts of the code use testing-library plugin
"testing-library",
],
"settings": {
"import/internal-regex": "^(app/)|(@grafana)",
"import/external-module-folders": ["node_modules", ".yarn"],
+19 -13
View File
@@ -69,11 +69,13 @@
/.golangci.toml @grafana/grafana-backend-group
/build.go @grafana/grafana-backend-services-squad
/scripts/modowners/ @grafana/grafana-backend-services-squad
/scripts/go-workspace @grafana/grafana-app-platform-squad
/hack/ @grafana/grafana-app-platform-squad
/apps/alerting/ @grafana/alerting-backend
/pkg/api/ @grafana/grafana-backend-group
/pkg/apis/ @grafana/grafana-app-platform-squad
/pkg/apis/alerting_notifications @grafana/grafana-app-platform-squad @grafana/alerting-backend @grafana/alerting-frontend
/pkg/bus/ @grafana/grafana-search-and-storage
/pkg/cmd/ @grafana/grafana-backend-group
/pkg/cmd/grafana/apiserver @grafana/grafana-app-platform-squad
@@ -87,7 +89,6 @@
/pkg/events/ @grafana/grafana-backend-group
/pkg/extensions/ @grafana/grafana-backend-group
/pkg/ifaces/ @grafana/grafana-backend-group
/pkg/infra/appcontext/ @grafana/grafana-backend-group
/pkg/infra/db/ @grafana/grafana-backend-group
/pkg/infra/localcache/ @grafana/grafana-backend-group
/pkg/infra/log/ @grafana/grafana-backend-group
@@ -102,6 +103,7 @@
/pkg/middleware/ @grafana/grafana-backend-group
/pkg/mocks/ @grafana/grafana-backend-group
/pkg/models/ @grafana/grafana-backend-group
/pkg/semconv/ @grafana/grafana-backend-group
/pkg/server/ @grafana/grafana-backend-group
/pkg/apiserver @grafana/grafana-app-platform-squad
/pkg/apimachinery @grafana/grafana-app-platform-squad
@@ -130,7 +132,7 @@
/pkg/services/preference/ @grafana/grafana-backend-group
/pkg/services/provisioning/ @grafana/grafana-search-and-storage
/pkg/services/query/ @grafana/grafana-app-platform-squad
/pkg/services/queryhistory/ @grafana/grafana-app-platform-squad
/pkg/services/queryhistory/ @grafana/explore-squad
/pkg/services/quota/ @grafana/grafana-search-and-storage
/pkg/services/screenshot/ @grafana/grafana-backend-group
/pkg/services/search/ @grafana/grafana-search-and-storage
@@ -150,6 +152,7 @@
/pkg/setting/ @grafana/grafana-backend-services-squad
/pkg/tests/ @grafana/grafana-backend-services-squad
/pkg/tests/apis/ @grafana/grafana-app-platform-squad
/pkg/tests/apis/alerting @grafana/grafana-app-platform-squad @grafana/alerting-backend
/pkg/tests/api/correlations/ @grafana/explore-squad
/pkg/tsdb/grafanads/ @grafana/grafana-backend-group
/pkg/tsdb/opentsdb/ @grafana/partner-datasources
@@ -165,7 +168,7 @@
# Logs code, developers environment
/devenv/docker/blocks/loki* @grafana/observability-logs
/devenv/docker/blocks/elastic* @grafana/observability-logs
/devenv/docker/blocks/elastic* @grafana/aws-datasources
/devenv/docker/blocks/self-instrumentation* @grafana/observability-metrics
/devenv/bulk-dashboards/ @grafana/dashboards-squad
@@ -187,7 +190,7 @@
/devenv/docker/blocks/graphite1/ @grafana/partner-datasources
/devenv/docker/blocks/influxdb/ @grafana/partner-datasources
/devenv/docker/blocks/influxdb1/ @grafana/partner-datasources
/devenv/docker/blocks/jaeger/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/jaeger/ @grafana/oss-big-tent
/devenv/docker/blocks/maildev/ @grafana/alerting-frontend
/devenv/docker/blocks/mariadb/ @grafana/oss-big-tent
/devenv/docker/blocks/memcached/ @grafana/grafana-backend-group
@@ -212,7 +215,7 @@
/devenv/docker/blocks/smtp/ @bergquist
/devenv/docker/blocks/tempo/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/traefik/ @mckn
/devenv/docker/blocks/zipkin/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/zipkin/ @grafana/oss-big-tent
/devenv/docker/blocks/webdav/ @grafana/alerting-backend
/devenv/docker/buildcontainer/ @bergquist
/devenv/docker/compose_header.yml @grafana/grafana-backend-services-squad
@@ -253,11 +256,11 @@
# Observability backend code
/pkg/tsdb/prometheus/ @grafana/observability-metrics
/pkg/tsdb/elasticsearch/ @grafana/observability-logs
/pkg/tsdb/elasticsearch/ @grafana/aws-datasources
/pkg/tsdb/loki/ @grafana/observability-logs
/pkg/tsdb/tempo/ @grafana/observability-traces-and-profiling
/pkg/tsdb/grafana-pyroscope-datasource/ @grafana/observability-traces-and-profiling
/pkg/tsdb/parca/ @grafana/observability-traces-and-profiling
/pkg/tsdb/parca/ @grafana/oss-big-tent
# OSS Big Tent backend code
/pkg/tsdb/mysql/ @grafana/oss-big-tent
@@ -551,6 +554,7 @@ playwright.config.ts @grafana/plugins-platform-frontend
/scripts/generate-rtk-apis.ts @grafana/grafana-frontend-platform
/scripts/generate-alerting-rtk-apis.ts @grafana/alerting-frontend
/scripts/levitate-parse-json-report.js @grafana/plugins-platform-frontend
/scripts/levitate-show-affected-plugins.js @grafana/plugins-platform-frontend
/scripts/codemods/explicit-barrel-imports.cjs @grafana/frontend-ops
/scripts/**/generate-transformations* @grafana/dataviz-squad
@@ -571,13 +575,13 @@ playwright.config.ts @grafana/plugins-platform-frontend
# Core datasources
/public/app/plugins/datasource/dashboard/ @grafana/dashboards-squad
/public/app/plugins/datasource/cloudwatch/ @grafana/aws-datasources
/public/app/plugins/datasource/elasticsearch/ @grafana/observability-logs
/public/app/plugins/datasource/elasticsearch/ @grafana/aws-datasources
/public/app/plugins/datasource/grafana/ @grafana/grafana-frontend-platform
/public/app/plugins/datasource/grafana-testdata-datasource/ @grafana/plugins-platform-frontend
/public/app/plugins/datasource/azuremonitor/ @grafana/partner-datasources
/public/app/plugins/datasource/graphite/ @grafana/partner-datasources
/public/app/plugins/datasource/influxdb/ @grafana/partner-datasources
/public/app/plugins/datasource/jaeger/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/jaeger/ @grafana/oss-big-tent
/public/app/plugins/datasource/loki/ @grafana/observability-logs
/public/app/plugins/datasource/mixed/ @grafana/dashboards-squad
/public/app/plugins/datasource/mssql/ @grafana/partner-datasources
@@ -586,10 +590,10 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/plugins/datasource/grafana-postgresql-datasource/ @grafana/oss-big-tent
/public/app/plugins/datasource/prometheus/ @grafana/observability-metrics
/public/app/plugins/datasource/cloud-monitoring/ @grafana/partner-datasources
/public/app/plugins/datasource/zipkin/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/zipkin/ @grafana/oss-big-tent
/public/app/plugins/datasource/tempo/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/grafana-pyroscope-datasource/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/parca/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/parca/ @grafana/oss-big-tent
/public/app/plugins/datasource/alertmanager/ @grafana/alerting-squad
# Grafana Sharing Squad
@@ -650,6 +654,7 @@ embed.go @grafana/grafana-as-code
/pkg/kinds/ @grafana/grafana-as-code
/pkg/registry/ @grafana/grafana-as-code
/pkg/registry/apis/ @grafana/grafana-app-platform-squad
/pkg/registry/apis/alerting @grafana/grafana-app-platform-squad @grafana/alerting-backend
/pkg/codegen/ @grafana/grafana-as-code
/pkg/codegen/generators @grafana/grafana-as-code
/pkg/kinds/*/*_gen.go @grafana/grafana-as-code
@@ -710,8 +715,7 @@ embed.go @grafana/grafana-as-code
/.github/workflows/publish-kinds-release.yml @grafana/platform-cat
/.github/workflows/verify-kinds.yml @grafana/platform-cat
/.github/workflows/dashboards-issue-add-label.yml @grafana/dashboards-squad
/.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-operator-experience-squad
/.github/workflows/ephemeral-instances-pr-opened-closed.yml @grafana/grafana-operator-experience-squad
/.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-backend-services-squad
/.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-release-guild
/.github/workflows/core-plugins-build-and-release.yml @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
/.github/workflows/i18n-crowdin-upload.yml @grafana/grafana-frontend-platform
@@ -720,6 +724,8 @@ embed.go @grafana/grafana-as-code
/.github/workflows/run-scenes-e2e.yml @grafana/dashboards-squad
/.github/workflows/go_lint.yml @grafana/grafana-backend-services-squad
/.github/workflows/trivy-scan.yml @grafana/grafana-backend-services-squad
/.github/workflows/changelog.yml @zserge
/.github/workflows/actions/changelog @zserge
# Generated files not requiring owner approval
/packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot
@@ -0,0 +1,45 @@
---
name: New data source request
description: Raise a request for a new data source plugin
title: "[New Data Source]: <name-of-service>"
labels:
- area/datasource,type/new-plugin-request
body:
- type: markdown
attributes:
value: |
Thank you for requesting a new data source plugin!
We greatly appreciate feedback from our community about which new data sources would be beneficial.
Grafana Labs regularly reviews these requests and uses them to inform our prioritization. Note: we cannot offer any guarantees on whether we or our community will build a given data source.
Please check our [roadmap](https://github.com/orgs/grafana/projects/619?pane=info) for existing requests and subscribe to stay informed of our plans. If no request exists, please fill out the following information.
Please do not request support or file bug reports and feature requests for existing plugins here.
- For support, please use the community support resources [here](https://grafana.com/help/).
- Please consider the `New Bug Report` or `Feature Requests` [issue templates](https://github.com/grafana/grafana/issues/new/choose) for other requests.
- type: textarea
id: background
attributes:
label: Background
description: Tell us about the service you would like to see integrated as a data source
placeholder: ACME_DB is an open source time-series database that is used by many organizations to store their metrics data. It is a popular choice for monitoring and observability.
validations:
required: true
- type: textarea
id: use_case
attributes:
label: Use case
description: Describe any key requirements or data you would need surfaced, ideally including why they are useful for you.
placeholder: My team uses ACME_DB as the application database to monitor our produciton workloads, so we'd like to alert on it and visualize ACME_DB data next to our logs and traces in Grafana.
validations:
required: true
- type: checkboxes
attributes:
label: Contribution
description: If you are interested in creating the data source yourself and contributing to the [plugin catalog](https://grafana.com/grafana/plugins/), please fill in the following
options:
- label: Are you looking to create the plugin?
- label: Are you affiliated with the project/product the data source integrates with?
- label: Does the plugin integrate with a commercial product?
@@ -1,39 +0,0 @@
---
name: '@grafana/ui component request'
about: Suggest a component for the @grafana/ui package
labels: 'area/grafana/ui'
---
<!--
By using this template you will make it easier for us to make sure that documentation and implementation stays up to date for every component in @grafana/ui
Thank you!
-->
**Why is this component needed**:
<!-- Explain your use case -->
___
- [ ] Is/could it be used in more than one place in Grafana?
**Where is/could it be used?**:
___
- [ ] Post screenshots possible.
- [ ] It has a single use case.
- [ ] It is/could be used in multiple places.
**Implementation** (Checklist meant for the person implementing the component)
- [ ] Component has a story in Storybook.
- [ ] Props and naming follows [our style guide](https://github.com/grafana/grafana/blob/main/contribute/style-guides/frontend.md).
- [ ] It is extendable (rest props are spread, styles with className work, and so on).
- [ ] Uses [theme for spacing, colors, and so on](https://github.com/grafana/grafana/blob/main/contribute/style-guides/themes.md).
- [ ] Works with both light and dark theme.
**Documentation**
- [ ] Properties are documented.
- [ ] Use cases are described.
- [ ] Code examples for the different use cases.
- [ ] Dos and don'ts.
- [ ] Styling guidelines, specific color usage (if applicable).
-43
View File
@@ -1,43 +0,0 @@
name: UX design issue
description: Create an issue for delivering wireframes, mockups or other design solutions.
title: "UX: "
labels: ["type/ux"]
body:
- type: textarea
id: background
attributes:
label: "Background / Why we're doing this"
description: Describe the problem and background of the issue. This could include research insights that inform the design changes, unmet user needs, or other usability issues.
placeholder: Add UI improvements to make Grafana Alerting alert creation easier based on usability test results.
validations:
required: true
- type: dropdown
attributes:
label: Is there existing research for this?
description: Please link research results or insights in the Background section if you have any. If no research was conducted, you might want to consider usability testing your design later.
options: [
"Yes, I have linked it",
"No research yet"
]
validations:
required: true
- type: textarea
id: problems-or-tasks
attributes:
label: Problems or tasks
description: Describe problems the new design should solve or tasks the user needs to complete.
placeholder:
value: |
- A problem we're trying to solve
- A task the user needs to accomplish
- …
validations:
required: false
- type: textarea
attributes:
label: Deliverables
description: Add a checklist of deliverables here. You can later add links to each deliverable.
value: |
- Figma mockup
- Miro board
- …
-17
View File
@@ -1,17 +0,0 @@
---
name: Chore
about: Create an issue for a chore needing completion
labels: 'type: chore'
---
<!--
Please use this template to create your chore issue. You can use this template if you spot an out-of-date README, discover a misspelling, or happen upon a deeply nested 7-layer for-loop that could be better handled another way. Please use this template for your non-bug related fixes/updates/refactors.
- Questions should be posted to: https://community.grafana.com
- Use query inspector to troubleshoot issues: https://bit.ly/2XNF6YS
- How to record and attach gif: https://bit.ly/2Mi8T6K
-->
**What is the chore?**:
**Is there anything else we need to know?**:
@@ -1,65 +0,0 @@
---
name: Saga contribution template
description: Contribute to the design system.
title: "Saga: "
labels:
- area/grafana/ui, design-system
body:
- type: markdown
attributes:
value: |
By using this template, you help expand our component and pattern solutions within the design system and let others reuse your work! You can contribute bug or design defect fixes, component, and pattern enhancements, or even net-new components! This template brings visibility to the great work everyone already does and in turn helps reduce duplicate efforts.
Thank you!
- type: checkboxes
attributes:
label: What type of contribution is this?
description: null
options:
- label: Fix - bug, design defect, typo, documentation conciseness
- label: Unification - combining similar components/patterns into a single
solution
- label: Proposal - net-new component, additions, variants
validations:
required: true
- type: textarea
id: background
attributes:
label: Why is this needed?
description: Explain the use case and where it can be used.
placeholder: null
validations:
required: true
- type: textarea
id: use_case
attributes:
label: Where is this or where can it be used?
description: Explain the current/future use case, be sure to include areas of impact
placeholder: null
validations:
required: true
- type: textarea
attributes:
label: Deliverables
description: Add a checklist of deliverables here. You can later add links to
each deliverable.
value: |
- Figma mockup
- Storybook story
- …
- type: checkboxes
attributes:
label: Contribution guiding principles
description: Use this checklist of guiding principles to ensure your
contribution makes Grafana a better product
options:
- label: Universal - not specific to a single product feature; able to be used
product-wide
- label: Accessible - inclusive to all types of users and assistive tools
- label: Flexible - thoughtfully built and designed to solve various
configurations and situations
- label: Coherent - follows existing visual styling and patterns
- label: Defined - documented clearly and concisely for ease of understanding
- label: Distinct - solves a unique gap or problem that cannot be solved with
current solutions
validations:
required: false
+1 -1
View File
@@ -47,4 +47,4 @@ Fixes #
Please check that:
- [ ] It works as expected from a user's perspective.
- [ ] If this is a pre-GA feature, it is behind a feature toggle.
- [ ] The docs are updated, and if this is a [notable improvement](https://grafana.com/docs/writers-toolkit/writing-guide/contribute-release-notes/#how-to-determine-if-content-belongs-in-a-whats-new-document), it's added to our [What's New](https://grafana.com/docs/writers-toolkit/writing-guide/contribute-release-notes/) doc.
- [ ] The docs are updated, and if this is a [notable improvement](https://grafana.com/docs/writers-toolkit/contribute/release-notes/#how-to-determine-if-content-belongs-in-whats-new), it's added to our [What's New](https://grafana.com/docs/writers-toolkit/contribute/release-notes/) doc.
+1 -1
View File
@@ -168,7 +168,7 @@
"name": "datasource/Elasticsearch",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/203"
"url": "https://github.com/orgs/grafana/projects/97"
}
},
{
@@ -0,0 +1,22 @@
name: Changelog generator
description: Generates and publishes a changelog for the given release version
inputs:
target:
description: Target tag, branch or commit hash for the changelog
required: true
previous:
description: Previous tag, branch or commit hash to start changelog from
required: false
github_token:
description: GitHub token with read/write access to all necessary repositories
required: true
output_file:
description: A file to store resulting changelog markdown
required: false
outputs:
changelog:
description: Changelog contents between the two given versions in Markdown format
runs:
using: 'node20'
main: 'index.js'
@@ -0,0 +1,319 @@
import { appendFileSync, writeFileSync } from 'fs';
import { exec as execCallback } from 'node:child_process';
import { promisify } from 'node:util';
//
// Github Action core utils: logging (notice + debug log levels), must escape
// newlines and percent signs
//
const escapeData = (s) => s.replace(/%/g, '%25').replace(/\r/g, '%0D').replace(/\n/g, '%0A');
const LOG = (msg) => console.log(`::notice::${escapeData(msg)}`);
//
// Semver utils: parse, compare, sort etc (using official regexp)
// https://regex101.com/r/Ly7O1x/3/
//
const semverRegExp =
/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
const semverParse = (tag) => {
const m = tag.match(semverRegExp);
if (!m) {
return;
}
const [_, major, minor, patch, prerelease] = m;
return [+major, +minor, +patch, prerelease, tag];
};
// semverCompare takes two parsed semver tags and comparest them more or less
// according to the semver specs
const semverCompare = (a, b) => {
for (let i = 0; i < 3; i++) {
if (a[i] !== b[i]) {
return a[i] < b[i] ? 1 : -1;
}
}
if (a[3] !== b[3]) {
return a[3] < b[3] ? 1 : -1;
}
return 0;
};
// Using `git tag -l` output find the tag (version) that goes semantically
// right before the given version. This might not work correctly with some
// pre-release versions, which is why it's possible to pass previous version
// into this action explicitly to avoid this step.
const getPreviousVersion = async (version) => {
const exec = promisify(execCallback);
const { stdout } = await exec('git tag -l');
const prev = stdout
.split('\n')
.map(semverParse)
.filter((tag) => tag)
.sort(semverCompare)
.find((tag) => semverCompare(tag, semverParse(version)) > 0);
if (!prev) {
throw `Could not find previous git tag for ${version}`;
}
return prev[4];
};
// A helper for Github GraphQL API endpoint
const graphql = async (ghtoken, query, variables) => {
const { env } = process;
const results = await fetch('https://api.github.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${ghtoken}`,
},
body: JSON.stringify({ query, variables }),
});
const { data } = await results.json();
return data;
};
// Using Github GraphQL API find the timestamp for the given tag/commit hash.
// This is required for PR listing, because Github API only takes date/time as
// a "since" parameter while listing. Currently there is no way to provide two
// "commitish" items and get a list of PRs in between them.
const getCommitishDate = async (name, owner, target) => {
const result = await graphql(
ghtoken,
`
query getCommitDate($owner: String!, $name: String!, $target: String!) {
repository(owner: $owner, name: $name) {
object(expression: $target) {
... on Commit {
committedDate
}
}
}
}
`,
{ name, owner, target }
);
return result.repository.object.committedDate;
};
// Using Github GraphQL API get a list of PRs between the two "commitish" items.
// This resoves the "since" item's timestamp first and iterates over all PRs
// till "target" using naïve pagination.
const getHistory = async (name, owner, target, sinceDate) => {
LOG(`Fetching ${owner}/${name} PRs since ${sinceDate} till ${target}`);
const query = `
query findCommitsWithAssociatedPullRequests(
$name: String!
$owner: String!
$target: String!
$sinceDate: GitTimestamp
$cursor: String
) {
repository(name: $name, owner: $owner) {
object(expression: $target) {
... on Commit {
history(first: 50, since: $sinceDate, after: $cursor) {
totalCount
pageInfo {
hasNextPage
endCursor
}
nodes {
id
associatedPullRequests(first: 1) {
nodes {
title
number
labels(first: 10) {
nodes {
name
}
}
commits(first: 1) {
nodes {
commit {
author {
user {
login
}
}
}
}
}
}
}
}
}
}
}
}
}`;
let cursor;
let nodes = [];
for (;;) {
const result = await graphql(ghtoken, query, {
name,
owner,
target,
sinceDate,
cursor,
});
LOG(`GraphQL: ${JSON.stringify(result)}`);
nodes = [...nodes, ...result.repository.object.history.nodes];
const { hasNextPage, endCursor } = result.repository.object.history.pageInfo;
if (!hasNextPage) {
break;
}
cursor = endCursor;
}
return nodes;
};
// The main function for this action: given two "commitish" items it gets a
// list of PRs between them and filters/groups the PRs by category (bugfix,
// feature, deprecation, breaking change and plugin fixes/enhancements).
//
// PR grouping relies on Github labels only, not on the PR contents.
const getChangeLogItems = async (name, owner, sinceDate, to) => {
// check if a node contains a certain label
const hasLabel = ({ labels }, label) => labels.nodes.some(({ name }) => name === label);
// get all the PRs between the two "commitish" items
const history = await getHistory(name, owner, to, sinceDate);
const items = history.flatMap((node) => {
// discard PRs without a "changelog" label
const changes = node.associatedPullRequests.nodes.filter((PR) => hasLabel(PR, 'add to changelog'));
if (changes.length === 0) {
return [];
}
const item = changes[0];
const { number, url, labels } = item;
const title = item.title.replace(/^\[[^\]]+\]:?\s*/, '');
// for changelog PRs try to find a suitable category.
// Note that we can not detect "deprecation notices" like that
// as there is no suitable label yet.
const isBug = /fix/i.test(title) || hasLabel({ labels }, 'type/bug');
const isBreaking = hasLabel({ labels }, 'breaking change');
const isPlugin =
hasLabel({ labels }, 'area/grafana/ui') ||
hasLabel({ labels }, 'area/grafana/toolkit') ||
hasLabel({ labels }, 'area/grafana/runtime');
const author = item.commits.nodes[0].commit.author.user.login;
return {
repo: name,
number,
title,
author,
isBug,
isPlugin,
isBreaking,
};
});
return items;
};
// ======================================================
// GENERATE CHANGELOG
// ======================================================
LOG(`Changelog action started`);
const ghtoken = process.env.GITHUB_TOKEN || process.env.INPUT_GITHUB_TOKEN;
if (!ghtoken) {
throw 'GITHUB_TOKEN is not set and "github_token" input is empty';
}
const target = process.argv[2] || process.env.INPUT_TARGET;
LOG(`Target tag/branch/commit: ${target}`);
const previous = process.argv[3] || process.env.INPUT_PREVIOUS || (await getPreviousVersion(target));
LOG(`Previous tag/commit: ${previous}`);
const sinceDate = await getCommitishDate('grafana', 'grafana', previous);
LOG(`Previous tag/commit timestamp: ${sinceDate}`);
// Get all changelog items from Grafana OSS
const oss = await getChangeLogItems('grafana', 'grafana', sinceDate, target);
// Get all changelog items from Grafana Enterprise
const entr = await getChangeLogItems('grafana-enterprise', 'grafana', sinceDate, target);
LOG(`Found OSS PRs: ${oss.length}`);
LOG(`Found Enterprise PRs: ${entr.length}`);
// Sort PRs and categorise them into sections
const changelog = [...oss, ...entr]
.sort((a, b) => (a.title < b.title ? -1 : 1))
.reduce(
(changelog, item) => {
if (item.isPlugin) {
changelog.plugins.push(item);
} else if (item.isBug) {
changelog.bugfixes.push(item);
} else if (item.isBreaking) {
changelog.breaking.push(item);
} else {
changelog.features.push(item);
}
return changelog;
},
{
breaking: [],
plugins: [],
bugfixes: [],
features: [],
}
);
// Convert PR numbers to Github links
const pullRequestLink = (n) => `[#${n}](https://github.com/grafana/grafana/pull/${n})`;
// Convert Github user IDs to Github links
const userLink = (u) => `[@${u}](https://github.com/${u})`;
// Now that we have a changelog - we can render some markdown as an output
const markdown = (changelog) => {
// This convers a list of changelog items into a markdown section with a list of titles/links
const section = (title, items) =>
items.length === 0
? ''
: `### ${title}
${items
.map(
(item) =>
`- ${item.title.replace(/^([^:]*:)/gm, '**$1**')} ${
item.repo === 'grafana-enterprise'
? '(Enterprise)'
: `${pullRequestLink(item.number)}, ${userLink(item.author)}`
}`
)
.join('\n')}
`;
// Render all present sections for the given changelog
return `${section('Features and enhancements', changelog.features)}
${section('Bug fixes', changelog.bugfixes)}
${section('Breaking changes', changelog.breaking)}
${section('Plugin development fixes & changes', changelog.plugins)}
`;
};
const md = markdown(changelog);
// Print changelog, mostly for debugging
LOG(`Resulting markdown: ${md}`);
// Save changelog as an output for this action
if (process.env.GITHUB_OUTPUT) {
LOG(`Output to ${process.env.GITHUB_OUTPUT}`);
appendFileSync(process.env.GITHUB_OUTPUT, `changelog<<EOF\n${escapeData(md)}\nEOF`);
} else {
LOG('GITHUB_OUTPUT is not set');
}
// Save changelog as an output file (if requested)
if (process.env.INPUT_OUTPUT_FILE) {
LOG(`Output to ${process.env.INPUT_OUTPUT_FILE}`);
writeFileSync(process.env.INPUT_OUTPUT_FILE, md);
}
@@ -0,0 +1,6 @@
{
"name": "changelog",
"main": "index.js",
"type": "module",
"description": "changelog generator"
}
+130
View File
@@ -0,0 +1,130 @@
name: Generate changelog
on:
workflow_call:
inputs:
version:
type: string
required: true
description: 'Target release version (semver, git tag, branch or commit)'
target:
required: true
type: string
description: 'The base branch that these changes are being merged into'
dry_run:
required: false
default: false
type: boolean
latest:
required: false
default: false
type: boolean
secrets:
GRAFANA_DELIVERY_BOT_APP_ID:
required: true
GRAFANA_DELIVERY_BOT_APP_PEM:
required: true
workflow_dispatch:
inputs:
version:
type: string
required: true
description: 'Target release version (semver, git tag, branch or commit)'
target:
required: true
type: string
description: 'The base branch that these changes are being merged into'
dry_run:
required: false
default: false
type: boolean
latest:
required: false
default: false
type: boolean
permissions:
contents: write
pull-requests: write
jobs:
main:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: "Checkout Grafana repo"
uses: "actions/checkout@v4"
with:
ref: main
sparse-checkout: |
.github/workflows
CHANGELOG.md
fetch-depth: 0
fetch-tags: true
- name: "Configure git user"
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true
- name: "Create branch"
run: git checkout -b "changelog/${{ github.run_id }}/${{ inputs.version }}"
- name: "Generate changelog"
id: changelog
uses: ./.github/workflows/actions/changelog
with:
github_token: ${{ steps.generate_token.outputs.token }}
target: v${{ inputs.version }}
output_file: changelog_items.md
- name: "Patch CHANGELOG.md"
run: |
# Prepare CHANGELOG.md content with version delimiters
(
echo
echo "# ${{ inputs.version}} ($(date '+%F'))"
echo
cat changelog_items.md
) > CHANGELOG.part
# Check if a version exists in the changelog
if grep -q "<!-- ${{ inputs.version}} START" CHANGELOG.md ; then
# Replace the content between START and END delimiters
echo "Version ${{ inputs.version }} is found in the CHANGELOG.md, patching contents..."
sed -i -e '/${{ inputs.version }} START/,/${{ inputs.version }} END/{//!d;}' \
-e '/${{ inputs.version }} START/r CHANGELOG.part' CHANGELOG.md
else
# Prepend changelog part to the main changelog file
echo "Version ${{ inputs.version }} not found in the CHANGELOG.md"
(
echo "<!-- ${{ inputs.version }} START -->"
cat CHANGELOG.part
echo "<!-- ${{ inputs.version }} END -->"
cat CHANGELOG.md
) > CHANGELOG.tmp
mv CHANGELOG.tmp CHANGELOG.md
fi
git diff CHANGELOG.md
git add CHANGELOG.md
- name: "Commit changelog changes"
run: git commit --allow-empty -m "Update changelog" CHANGELOG.md
- name: "git push"
if: ${{ inputs.dry_run }} != true
run: git push
- name: "Create changelog PR"
run: >
gh pr create \
--dry-run=${{ inputs.dry_run }} \
--label "no-backport" \
--label "no-changelog" \
-B "${{ inputs.target }}" \
--title "Release: update changelog for ${{ inputs.version }}" \
--body "Changelog changes for release ${{ inputs.version }}"
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
+28 -7
View File
@@ -1,25 +1,46 @@
name: Create community release post
on:
workflow_call:
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.
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.
permissions:
contents: read
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Run community-release (manually invoked)
uses: grafana/grafana-github-actions-go/community-release@main
with:
token: ${{ steps.generate_token.outputs.token }}
token: ${{ secrets.GITHUB_TOKEN }}
version: ${{ inputs.version }}
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
community_api_key: ${{ secrets.GRAFANABOT_FORUM_KEY }}
community_api_username: grafanabot
dry_run: ${{ inputs.dry_run }}
@@ -8,7 +8,6 @@ on:
- 'packages/**'
branches:
- 'main'
workflow_dispatch:
jobs:
buildPR:
@@ -111,6 +110,9 @@ jobs:
needs: ['buildPR', 'buildBase']
env:
GITHUB_STEP_NUMBER: 8
permissions:
contents: 'read'
id-token: 'write'
steps:
- uses: actions/checkout@v4
@@ -134,6 +136,29 @@ jobs:
- name: Unzip artifact from base
run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip
- id: 'auth'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: ${{ secrets.WIF_PROVIDER }}
service_account: ${{ secrets.LEVITATE_SA }}
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v2'
with:
version: '>= 363.0.0'
project_id: 'grafanalabs-global'
install_components: 'bq'
# This step is needed to generate a detailed levitate report
- name: Set up gcloud project
run: |
unset CLOUDSDK_CORE_PROJECT
unset GCLOUD_PROJECT
unset GCP_PROJECT
unset GOOGLE_CLOUD_PROJECT
gcloud config set project grafanalabs-global
- name: Get link for the Github Action job
id: job
uses: actions/github-script@v6
@@ -1,14 +1,12 @@
name: 'Ephemeral instances: PR comment'
name: 'Ephemeral instances'
on:
issue_comment:
types: [created]
pull_request:
types: [closed]
jobs:
config:
if: github.event.sender.type == 'User' &&
github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/deploy-to-hg')
runs-on:
labels: ubuntu-latest-8-cores
runs-on: "ubuntu-latest"
outputs:
has-secrets: ${{ steps.check.outputs.has-secrets }}
steps:
@@ -30,9 +28,7 @@ jobs:
handle-pull-request-event:
needs: config
if: needs.config.outputs.has-secrets &&
github.event.sender.type == 'User' &&
github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/deploy-to-hg')
${{ github.event.issue.pull_request && (startsWith(github.event.comment.body, '/deploy-to-hg') || github.event.action == 'closed') }}
runs-on:
labels: ubuntu-latest-8-cores
continue-on-error: true
@@ -52,34 +48,14 @@ jobs:
ref: main
path: ephemeral
- name: Setup Go
uses: actions/setup-go@v4
- name: build and deploy ephemeral instance
uses: ./ephemeral
with:
go-version-file: ephemeral/go.mod
- name: Get latest grafana version number
run: |
# if package.json contains e.g. 11.0.0-pre, this writes 11.0.0 to version.txt
curl https://raw.githubusercontent.com/grafana/grafana/main/package.json | jq -r .version | grep -o '^[0-9\.]*' > version.txt
- name: Run action
env:
GITHUB_EVENT: ${{ toJson(github.event)}}
run: |
# Create a prerelease version number using the latest version from the package.json in the grafana repo.
export GRAFANA_VERSION="$(cat version.txt)"
echo "${GRAFANA_VERSION}"
cd $GITHUB_WORKSPACE/ephemeral/src
go run . \
-GITHUB_TOKEN="${{ steps.generate_token.outputs.token }}" \
-GITHUB_WORKFLOW_RUN_ID="${{ github.run_id }}" \
-GITHUB_EVENT="$GITHUB_EVENT" \
-GITHUB_TRIGGERING_ACTOR="${{ github.triggering_actor }}" \
-GCOM_HOST="${{ secrets.EI_GCOM_HOST }}" \
-GCOM_TOKEN="${{ secrets.EI_GCOM_TOKEN }}" \
-HOSTED_GRAFANA_IMAGE_TAG="$GRAFANA_VERSION-ephemeral-oss-${{ github.event.issue.number}}-${{ github.run_number }}-${{ github.run_attempt }}" \
-REGISTRY="${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}" \
-GRAFANA_VERSION="$GRAFANA_VERSION" \
-GCP_SERVICE_ACCOUNT_KEY_BASE64="${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}" \
-EPHEMERAL_ORG_ID="${{ secrets.EI_EPHEMERAL_ORG_ID }}" || true
github-token: ${{ steps.generate_token.outputs.token }}
gcom-host: ${{ secrets.EI_GCOM_HOST }}
gcom-token: ${{ secrets.EI_GCOM_TOKEN }}
registry: "${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}"
gcp-service-account-key: "${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}"
ephemeral-org-id: "${{ secrets.EI_EPHEMERAL_ORG_ID }}"
oss-or-enterprise: oss
verbose: true
@@ -1,77 +0,0 @@
name: 'Ephemeral instances: PR opened/closed'
on:
pull_request:
types: [opened, reopened, closed]
jobs:
config:
runs-on: "ubuntu-latest"
outputs:
has-secrets: ${{ steps.check.outputs.has-secrets }}
steps:
- name: "Check for secrets"
id: check
shell: bash
run: |
if [ -n "${{ (secrets.EI_APP_ID != '' &&
secrets.EI_APP_PRIVATE_KEY != '' &&
secrets.EI_GCOM_HOST != '' &&
secrets.EI_GCOM_TOKEN != '' &&
secrets.EI_EPHEMERAL_INSTANCES_REGISTRY != '' &&
secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 != '' &&
secrets.EI_EPHEMERAL_ORG_ID != ''
) || '' }}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
handle-pull-request-event:
needs: config
if: needs.config.outputs.has-secrets
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Generate a GitHub app installation token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.EI_APP_ID }}
private_key: ${{ secrets.EI_APP_PRIVATE_KEY }}
- name: Checkout ephemeral instances repository
uses: actions/checkout@v4
with:
repository: grafana/ephemeral-grafana-instances-github-action
token: ${{ steps.generate_token.outputs.token }}
ref: main
path: ephemeral
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version-file: ephemeral/go.mod
- name: Get latest grafana version number
run: |
# if package.json contains e.g. 11.0.0-pre, this writes 11.0.0 to version.txt
curl https://raw.githubusercontent.com/grafana/grafana/main/package.json | jq -r .version | grep -o '^[0-9\.]*' > version.txt
- name: Run action
env:
GITHUB_EVENT: ${{ toJson(github.event)}}
run: |
# Create a prerelease version number using the latest version from the package.json in the grafana repo.
export GRAFANA_VERSION="$(cat version.txt)"
echo "${GRAFANA_VERSION}"
cd $GITHUB_WORKSPACE/ephemeral/src
go run . \
-GITHUB_TOKEN="${{ steps.generate_token.outputs.token }}" \
-GITHUB_WORKFLOW_RUN_ID="${{ github.run_id }}" \
-GITHUB_EVENT="$GITHUB_EVENT" \
-GITHUB_TRIGGERING_ACTOR="${{ github.triggering_actor }}" \
-GCOM_HOST="${{ secrets.EI_GCOM_HOST }}" \
-GCOM_TOKEN="${{ secrets.EI_GCOM_TOKEN }}" \
-HOSTED_GRAFANA_IMAGE_TAG="unused" \
-REGISTRY="${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}" \
-GRAFANA_VERSION="$GRAFANA_VERSION" \
-GCP_SERVICE_ACCOUNT_KEY_BASE64="${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}" \
-EPHEMERAL_ORG_ID="${{ secrets.EI_EPHEMERAL_ORG_ID }}" || true
+28 -7
View File
@@ -1,27 +1,48 @@
name: Create or update GitHub release
on:
workflow_call:
inputs:
version:
required: true
description: Needs to match, exactly, the name of a milestone (NO v prefix)
type: string
latest:
required: false
default: false
description: Mark this release as latest (`1`) or not (`0`, default)
type: string
dry_run:
required: false
default: false
type: boolean
workflow_dispatch:
inputs:
version:
required: true
description: Needs to match, exactly, the name of a milestone (NO v prefix)
type: string
latest:
required: false
description: Mark this release as latest (`1`) or not (`0`, default)
type: string
dry_run:
required: false
default: false
type: boolean
permissions:
# contents: write allows the action(s) to create github releases
contents: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Create GitHub release (manually invoked)
uses: grafana/grafana-github-actions-go/github-release@main
with:
token: ${{ steps.generate_token.outputs.token }}
token: ${{ secrets.GITHUB_TOKEN }}
version: ${{ inputs.version }}
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
latest: ${{ inputs.latest }}
dry_run: ${{ inputs.dry_run }}
+1 -1
View File
@@ -27,6 +27,6 @@ jobs:
with:
version: v1.59.1
args: |
--config .golangci.toml --max-same-issues=0 --max-issues-per-linter=0 --verbose ./pkg/... ./pkg/apiserver/... ./pkg/apimachinery/... ./pkg/promlib/...
--config .golangci.toml --max-same-issues=0 --max-issues-per-linter=0 --verbose $(./scripts/go-workspace/golangci-lint-includes.sh)
skip-cache: true
install-mode: binary
@@ -19,7 +19,6 @@ jobs:
ref: ${{ github.head_ref }}
- name: Generate token
if: steps.crowdin-download.outputs.pull_request_url
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
@@ -110,7 +109,6 @@ jobs:
}
}
}
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
+60 -23
View File
@@ -10,32 +10,69 @@ on:
default: true
version:
required: true
latest:
type: bool
default: false
pull_request:
types:
- closed
- closed
branches:
- 'main'
- 'v*.*.*'
- 'main'
- 'v*.*.*'
jobs:
post_release:
name: Post-release comms
setup:
if: ${{ github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/')) }}
name: Setup and establish latest
outputs:
version: ${{ steps.output.outputs.version }}
dry_run: ${{ steps.output.outputs.dry_run }}
latest: ${{ steps.output.outputs.latest }}
runs-on: ubuntu-latest
steps:
- if: github.event_name == 'workflow_dispatch'
run: |
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
echo "DRY_RUN=${{ inputs.dry_run }}" >> $GITHUB_ENV
- if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/')
run: |
echo "VERSION=$(echo ${{ github.head_ref }} | sed -e 's/release\///g')" >> $GITHUB_ENV
echo "DRY_RUN=false" >> $GITHUB_ENV
- run: |
echo "push-grafana-tag ${VERSION} (dry run: ${DRY_RUN})"
- run: |
echo "post changelog to forums for ${VERSION} (dry run: ${DRY_RUN})"
- run: |
echo "create github release for tag ${VERSION} (dry run: ${DRY_RUN})"
- run: |
echo "publish docs for ${VERSION} (dry run: ${DRY_RUN})"
- run: |
echo "announce on slack that ${VERSION} has been released (dry run: ${DRY_RUN})"
- if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
echo setting up GITHUB_ENV for ${{ github.event_name }}
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
echo "DRY_RUN=${{ inputs.dry_run }}" >> $GITHUB_ENV
echo "LATEST=${{ inputs.latest }}" >> $GITHUB_ENV
- if: ${{ github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/') }}
run: |
echo "VERSION=$(echo ${{ github.head_ref }} | sed -e 's/release\/.*\///g')" >> $GITHUB_ENV
echo "DRY_RUN=${{ contains(github.event.pull_request.labels.*.name, 'release/dry-run') }}" >> $GITHUB_ENV
echo "LATEST=${{ contains(github.event.pull_request.labels.*.name, 'release/latest') }}" >> $GITHUB_ENV
- id: output
run: |
echo "dry_run: $DRY_RUN"
echo "latest: $LATEST"
echo "version: $VERSION"
echo "dry_run=$DRY_RUN" >> "$GITHUB_OUTPUT"
echo "latest=$LATEST" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
post_changelog_on_forum:
needs: setup
uses: ./.github/workflows/community-release.yml
secrets:
GRAFANA_MISC_STATS_API_KEY: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
GRAFANABOT_FORUM_KEY: ${{ secrets.GRAFANABOT_FORUM_KEY }}
with:
version: ${{ needs.setup.outputs.version }}
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
create_github_release:
# a github release requires a git tag
# The github-release action retrieves the changelog using the /repos/grafana/grafana/contents/CHANGELOG.md API
# endpoint.
needs: setup
uses: ./.github/workflows/github-release.yml
with:
version: ${{ needs.setup.outputs.version }}
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
latest: ${{ needs.setup.outputs.latest }}
post_on_slack:
needs: setup
runs-on: ubuntu-latest
steps:
- run: |
echo announce on slack that ${{ needs.setup.outputs.version }} has been released
echo dry run: ${{ needs.setup.outputs.dry_run }}
+102 -14
View File
@@ -23,15 +23,34 @@ on:
dry_run:
required: false
default: false
type: bool
type: boolean
latest:
required: false
default: false
type: boolean
permissions:
contents: write
pull-requests: write
jobs:
push-changelog-to-main:
name: Create PR to main to update the changelog
uses: ./.github/workflows/changelog.yml
with:
version: ${{ inputs.version }}
latest: ${{ inputs.latest }}
dry_run: ${{ inputs.dry_run }}
target: main
secrets:
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
create-prs:
name: Create Release PR
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: Generate token
- name: Generate bot token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
@@ -39,35 +58,104 @@ jobs:
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Checkout Grafana
uses: actions/checkout@v4
with:
ref: ${{ inputs.target }}
fetch-depth: 0
fetch-tags: true
- name: Checkout Grafana (main)
uses: actions/checkout@v4
with:
ref: main
fetch-depth: '0'
fetch-tags: 'false'
path: .grafana-main
- name: Configure git user
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true
- name: Create branch
run: git checkout -b "release/${{ github.run_id }}/${{ inputs.version }}"
- name: Generate changelog
run: git commit --allow-empty -m "Update changelog placeholder"
- name: Update package.json versions
uses: ./pkg/build/actions/bump-version
id: changelog
uses: ./.grafana-main/.github/workflows/actions/changelog
with:
version: ${{ inputs.version }}
- name: add package.json changes
github_token: ${{ steps.generate_token.outputs.token }}
target: v${{ inputs.version }}
output_file: changelog_items.md
- name: Patch CHANGELOG.md
run: |
git add .
# Prepare CHANGELOG.md content with version delimiters
(
echo
echo "# ${{ inputs.version}} ($(date '+%F'))"
echo
cat changelog_items.md
) > CHANGELOG.part
# Check if a version exists in the changelog
if grep -q "<!-- ${{ inputs.version}} START" CHANGELOG.md ; then
# Replace the content between START and END delimiters
echo "Version ${{ inputs.version }} is found in the CHANGELOG.md, patching contents..."
sed -i -e '/${{ inputs.version }} START/,/${{ inputs.version }} END/{//!d;}' \
-e '/${{ inputs.version }} START/r CHANGELOG.part' CHANGELOG.md
else
# Prepend changelog part to the main changelog file
echo "Version ${{ inputs.version }} not found in the CHANGELOG.md"
(
echo "<!-- ${{ inputs.version }} START -->"
cat CHANGELOG.part
echo "<!-- ${{ inputs.version }} END -->"
cat CHANGELOG.md
) > CHANGELOG.tmp
mv CHANGELOG.tmp CHANGELOG.md
fi
rm -f CHANGELOG.part changelog_items.md
git diff CHANGELOG.md
- name: Commit CHANGELOG.md changes
run: git add CHANGELOG.md && git commit --allow-empty -m "Update changelog" CHANGELOG.md
- name: Update package.json versions
uses: ./.grafana-main/pkg/build/actions/bump-version
with:
version: 'patch'
- name: Add package.json changes
run: |
git add package.json lerna.json yarn.lock packages public
git commit -m "Update version to ${{ inputs.version }}"
- name: git push
- name: Git push
if: ${{ inputs.dry_run }} != true
run: git push
run: git push --set-upstream origin release/${{ github.run_id }}/${{ inputs.version }}
- name: Create PR without backports
if: "${{ inputs.backport == '' }}"
run: >
gh pr create --dry-run=${{ inputs.dry_run }} -B "${{ inputs.target }}" --title "Release: ${{ inputs.version }}" --body "These code changes must be merged after a release is complete"
gh pr create \
$( [ "x${{ inputs.latest }}" == "xtrue" ] && printf %s '-l "release/latest"') \
-l "no-changelog" \
--dry-run=${{ inputs.dry_run }} \
-B "${{ inputs.target }}" \
--title "Release: ${{ inputs.version }}" \
--body "These code changes must be merged after a release is complete"
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create PR with backports
if: "${{ inputs.backport != '' }}"
run: >
gh pr create -l "backport ${{ inputs.backport }}" -l "product-approved" --dry-run=${{ inputs.dry_run }} -B "${{ inputs.target }}" --title "Release: ${{ inputs.version }}" --body "These code changes must be merged after a release is complete"
gh pr create \
$( [ "x${{ inputs.latest }}" == "xtrue" ] && printf %s '-l "release/latest"') \
-l "product-approved" \
-l "no-changelog" \
--dry-run=${{ inputs.dry_run }} \
-B "${{ inputs.target }}" \
--title "Release: ${{ inputs.version }}" \
--body "These code changes must be merged after a release is complete"
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+2 -2
View File
@@ -16,7 +16,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner (table output)
uses: aquasecurity/trivy-action@0.22.0
uses: aquasecurity/trivy-action@0.24.0
with:
# scan the filesystem, rather than building a Docker image prior - the
# downside is we won't catch dependencies that are only installed in the
@@ -33,7 +33,7 @@ jobs:
# for the PR check, ignore JS-related issues
skip-files: 'yarn.lock,package.json'
- name: Run Trivy vulnerability scanner (SARIF)
uses: aquasecurity/trivy-action@0.22.0
uses: aquasecurity/trivy-action@0.24.0
with:
scan-type: 'fs'
scanners: 'vuln'
+1
View File
@@ -87,6 +87,7 @@ example-apiserver/
/devenv/docker/blocks/tempo/tempo-data/
/devenv/docker/ha-test-unified-alerting/logs/webhook/dumps/
/devenv/docker/ha-test-unified-alerting/logs/webhook/webhook-listener.log
/devenv/docker/blocks/auth/openldap/certs/
conf/custom.ini
+1 -1
View File
@@ -1,5 +1,5 @@
[run]
timeout = "10m"
timeout = "20m"
concurrency = 10
[linters-settings.exhaustive]
-894
View File
File diff suppressed because one or more lines are too long
+925
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -26,7 +26,7 @@ plugins:
- path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs
spec: 'https://mskelton.dev/yarn-outdated/v2'
yarnPath: .yarn/releases/yarn-4.2.2.cjs
yarnPath: .yarn/releases/yarn-4.4.0.cjs
# Uncomment the following lines if you want to use Verdaccio local npm registry. Read more at packages/README.md
#npmScopes:
# grafana:
+57
View File
@@ -1,3 +1,60 @@
<!-- 11.1.3 START -->
# 11.1.3 (2024-07-26)
### Bug fixes
- **RBAC**: Allow plugins to use scoped actions [#90946](https://github.com/grafana/grafana/pull/90946), [@gamab](https://github.com/gamab)
<!-- 11.1.3 END -->
<!-- 11.0.2 START -->
# 11.0.2 (2024-07-25)
### Features and enhancements
- **Alerting:** Update grafana/alerting to c340765c985a12603bbdfcd10576ddfdbf9dc284 [#90388](https://github.com/grafana/grafana/pull/90388), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Prometheus:** Reintroduce Azure audience override feature flag [#90558](https://github.com/grafana/grafana/pull/90558), [@aangelisc](https://github.com/aangelisc)
### Bug fixes
- **Alerting:** Skip loading alert rules for dashboards when disabled [#89904](https://github.com/grafana/grafana/pull/89904), [@gillesdemey](https://github.com/gillesdemey)
- **Folders:** Improve folder move permission checks [#90849](https://github.com/grafana/grafana/pull/90849), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
- **Folders:** Improve folder move permission checks [#90849](https://github.com/grafana/grafana/pull/90849), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
- **Folders:** Improve folder move permission checks [#90849](https://github.com/grafana/grafana/pull/90849), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
<!-- 11.0.2 END -->
<!-- 10.4.6 START -->
# 10.4.6 (2024-07-25)
### Features and enhancements
- **Alerting:** Update grafana/alerting to ce0d024b67ea714b06d0f5309025466f50e381ef [#90389](https://github.com/grafana/grafana/pull/90389), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Prometheus:** Reintroduce Azure audience override feature flag [#90557](https://github.com/grafana/grafana/pull/90557), [@aangelisc](https://github.com/aangelisc)
### Bug fixes
- **Alerting:** Fix panic in provisioning filter contacts by unknown name [#90440](https://github.com/grafana/grafana/pull/90440), [@JacobsonMT](https://github.com/JacobsonMT)
- **Alerting:** Skip loading alert rules for dashboards when disabled [v10.4.x] [#90331](https://github.com/grafana/grafana/pull/90331), [@gillesdemey](https://github.com/gillesdemey)
- **Echo:** Suppress errors from frontend-metrics API call failing [#89498](https://github.com/grafana/grafana/pull/89498), [@joshhunt](https://github.com/joshhunt)
<!-- 10.4.6 END -->
<!-- 11.1.1 START -->
# 11.1.1 (2024-07-25)
### Bug fixes
- **Alerting:** Skip fetching alerts for unsaved dashboards [#90074](https://github.com/grafana/grafana/pull/90074), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Skip loading alert rules for dashboards when disabled [#89905](https://github.com/grafana/grafana/pull/89905), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Support `utf8_strict_mode: false` in Mimir [#90148](https://github.com/grafana/grafana/pull/90148), [@gillesdemey](https://github.com/gillesdemey)
- **Scenes:** Fixes issue with panel repeat height calculation [#90232](https://github.com/grafana/grafana/pull/90232), [@kaydelaney](https://github.com/kaydelaney)
- **Table Panel:** Fix Image hover without datalinks [#89922](https://github.com/grafana/grafana/pull/89922), [@codeincarnate](https://github.com/codeincarnate)
- **Tempo:** Fix grpc streaming support over pdc-agent [#90055](https://github.com/grafana/grafana/pull/90055), [@taylor-s-dean](https://github.com/taylor-s-dean)
- **RBAC**: Allow plugins to use scoped actions [#90946](https://github.com/grafana/grafana/pull/90946), [@gamab](https://github.com/gamab)
<!-- 11.1.1 END -->
<!-- 11.1.0 START -->
# 11.1.0 (2024-06-21)
+1
View File
@@ -61,6 +61,7 @@ COPY pkg/build/go.* pkg/build/
COPY pkg/build/wire/go.* pkg/build/wire/
COPY pkg/promlib/go.* pkg/promlib/
COPY pkg/storage/unified/resource/go.* pkg/storage/unified/resource/
COPY pkg/semconv/go.* pkg/semconv/
RUN go mod download
RUN if [[ "$BINGO" = "true" ]]; then \
+9 -9
View File
@@ -7,10 +7,10 @@ WIRE_TAGS = "oss"
-include local/Makefile
include .bingo/Variables.mk
GO = go
GO_VERSION = 1.22.4
GO_FILES ?= ./pkg/... ./pkg/apiserver/... ./pkg/apimachinery/... ./pkg/promlib/...
GO_LINT_FILES ?= $(shell ./scripts/go-workspace/golangci-lint-includes.sh)
GO_TEST_FILES ?= $(shell ./scripts/go-workspace/test-includes.sh)
SH_FILES ?= $(shell find ./scripts -name *.sh)
GO_RACE := $(shell [ -n "$(GO_RACE)" -o -e ".go-race-enabled-locally" ] && echo 1 )
GO_RACE_FLAG := $(if $(GO_RACE),-race)
@@ -172,10 +172,10 @@ gen-jsonnet:
.PHONY: update-workspace
update-workspace:
@echo "updating workspace"
$(GO) mod download
bash scripts/go-workspace/update-workspace.sh
.PHONY: build-go
build-go: update-workspace gen-go ## Build all Go binaries.
build-go: gen-go update-workspace ## Build all Go binaries.
@echo "build go files"
$(GO) run build.go $(GO_BUILD_FLAGS) build
@@ -236,7 +236,7 @@ test-go: test-go-unit test-go-integration
.PHONY: test-go-unit
test-go-unit: ## Run unit tests for backend with flags.
@echo "test backend unit tests"
go list -f '{{.Dir}}/...' -m | xargs \
printf '$(GO_TEST_FILES)' | xargs \
$(GO) test $(GO_RACE_FLAG) -short -covermode=atomic -timeout=30m
.PHONY: test-go-integration
@@ -290,10 +290,10 @@ golangci-lint: $(GOLANGCI_LINT)
@echo "lint via golangci-lint"
$(GOLANGCI_LINT) run \
--config .golangci.toml \
$(GO_FILES)
$(GO_LINT_FILES)
.PHONY: lint-go
lint-go: golangci-lint ## Run all code checks for backend. You can use GO_FILES to specify exact files to check
lint-go: golangci-lint ## Run all code checks for backend. You can use GO_LINT_FILES to specify exact files to check
# with disabled SC1071 we are ignored some TCL,Expect `/usr/bin/env expect` scripts
.PHONY: shellcheck
@@ -382,10 +382,10 @@ devenv-mysql:
protobuf: ## Compile protobuf definitions
bash scripts/protobuf-check.sh
go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.4.0
buf generate pkg/plugins/backendplugin/pluginextensionv2 --template pkg/plugins/backendplugin/pluginextensionv2/buf.gen.yaml
buf generate pkg/plugins/backendplugin/secretsmanagerplugin --template pkg/plugins/backendplugin/secretsmanagerplugin/buf.gen.yaml
buf generate pkg/services/store/entity --template pkg/services/store/entity/buf.gen.yaml
buf generate pkg/storage/unified/resource --template pkg/storage/unified/resource/buf.gen.yaml
.PHONY: clean
clean: ## Clean up intermediate build artifacts.
+35 -5
View File
@@ -65,6 +65,7 @@ enable_gzip = false
# https certs & key file
cert_file =
cert_key =
cert_pass =
# Certificates file watch interval
certs_watch_interval =
@@ -312,6 +313,9 @@ application_insights_endpoint_url =
# Controls if the UI contains any links to user feedback forms
feedback_links_enabled = true
# Static context that is being added to analytics events
reporting_static_context =
#################################### Security ############################
[security]
# disable creation of admin user on first start of grafana
@@ -425,9 +429,6 @@ external_snapshot_name = Publish to snapshots.raintank.io
# creating and deleting snapshots.
public_mode = false
# remove expired snapshot
snapshot_remove_expired = true
#################################### Dashboards ##################
[dashboards]
@@ -994,6 +995,10 @@ username_assertion =
# 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).
forward_settings_to_plugins = grafana-azure-monitor-datasource, prometheus, grafana-azure-data-explorer-datasource, mssql
# Specifies whether Entra password auth can be used for the MSSQL data source
# Disabled by default, needs to be explicitly enabled
azure_entra_password_credentials_enabled = false
#################################### Role-based Access Control ###########
[rbac]
# If enabled, cache permissions in a in memory cache
@@ -1112,6 +1117,9 @@ instrumentations_console_enabled = false
# Should webvitals instrumentation be enabled, only affects Grafana Javascript Agent
instrumentations_webvitals_enabled = false
# Should tracing instrumentation be enabled, only affects Grafana Javascript Agent
instrumentations_tracing_enabled = false
# level of internal logging for debugging Grafana Javascript Agent.
# possible values are: 0 = OFF, 1 = ERROR, 2 = WARN, 3 = INFO, 4 = VERBOSE
# more details: https://github.com/grafana/faro-web-sdk/blob/v1.3.7/docs/sources/tutorials/quick-start-browser.md#how-to-activate-debugging
@@ -1192,6 +1200,12 @@ admin_config_poll_interval = 60s
# 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.
alertmanager_config_poll_interval = 60s
# Maximum number of active and pending silences that a tenant can have at once. Default: 0 (no limit).
alertmanager_max_silences_count =
# Maximum silence size in bytes. Default: 0 (no limit).
alertmanager_max_silence_size_bytes =
# Set to true when using redis in cluster mode.
ha_redis_cluster_mode_enabled = false
@@ -1490,6 +1504,9 @@ max_annotations_to_keep =
# Enable the Explore section
enabled = true
# set the default offset for the time picker
defaultTimeOffset = 1h
#################################### Help #############################
[help]
# Enable the Help section
@@ -1931,6 +1948,14 @@ is_target = false
gcom_api_token = ""
# How long to wait for a request sent to gms to start a snapshot to complete
start_snapshot_timeout = 5s
# How long to wait for a request sent to gms to validate a key to complete
validate_key_timeout = 5s
# How long to wait for a request sent to gms to get a snapshot status to complete
get_snapshot_status_timeout = 5s
# How long to wait for a request sent to gms to create a presigned upload url
create_upload_url_timeout = 5s
# How long to wait for a request sent to gms to report an event
report_event_timeout = 5s
# How long to wait for a request to fetch an instance to complete
fetch_instance_timeout = 5s
# How long to wait for a request to create an access policy to complete
@@ -1940,6 +1965,11 @@ fetch_access_policy_timeout = 5s
# How long to wait for a request to create to delete an access policy to complete
delete_access_policy_timeout = 5s
# The domain name used to access cms
domain = grafana-dev.net
domain = grafana.net
# Folder used to store snapshot files. Defaults to the home dir
snapshot_folder = ""
snapshot_folder = ""
# Link to form to give feedback on the feature
feedback_url = https://docs.google.com/forms/d/e/1FAIpQLSeEE33vhbSpR8A8S1A1ocZ1ByVRRwiRl1GZr2FSrEer_tSa8w/viewform?usp=sf_link
# How frequently should the frontend UI poll for changes while resources are migrating
frontend_poll_interval = 2s
+3 -2
View File
@@ -11,10 +11,11 @@ port = 389
use_ssl = false
# If set to true, use LDAP with STARTTLS instead of LDAPS
start_tls = false
# The value of an accepted TLS cipher. By default, this value is empty. Example value: ["TLS_AES_256_GCM_SHA384"])
# The value of an accepted TLS cipher. By default, this value is empty. Example value: ["TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"])
# For a complete list of supported ciphers and TLS versions, refer to: https://go.dev/src/crypto/tls/cipher_suites.go
# Starting with Grafana v11.0 only ciphers with ECDHE support are accepted for TLS 1.2 connections.
tls_ciphers = []
# This is the minimum TLS version allowed. By default, this value is empty. Accepted values are: TLS1.1, TLS1.2, TLS1.3.
# This is the minimum TLS version allowed. By default, this value is empty. Accepted values are: TLS1.1 (only for Grafana v10.4 or older), TLS1.2, TLS1.3.
min_tls_version = ""
# set to true if you want to skip ssl cert validation
ssl_skip_verify = false
+53 -3
View File
@@ -67,6 +67,9 @@
;cert_file =
;cert_key =
# optional password to be used to decrypt key file
;cert_pass =
# Certificates file watch interval
;certs_watch_interval =
@@ -309,6 +312,9 @@
# Controls if the UI contains any links to user feedback forms
;feedback_links_enabled = true
# Static context that is being added to analytics events
;reporting_static_context = grafanaInstance=12, os=linux
#################################### Security ####################################
[security]
# disable creation of admin user on first start of grafana
@@ -428,9 +434,6 @@
# creating and deleting snapshots.
;public_mode = false
# remove expired snapshot
;snapshot_remove_expired = true
#################################### Dashboards ##################
[dashboards]
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
@@ -981,6 +984,10 @@
# 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).
;forward_settings_to_plugins = grafana-azure-monitor-datasource, prometheus, grafana-azure-data-explorer-datasource, mssql
# Specifies whether Entra password auth can be used for the MSSQL data source
# Disabled by default, needs to be explicitly enabled
;azure_entra_password_credentials_enabled = false
#################################### Role-based Access Control ###########
[rbac]
;permission_cache = true
@@ -1103,6 +1110,9 @@
# Should webvitals instrumentation be enabled, only affects Grafana Javascript Agent
;instrumentations_webvitals_enabled = false
# Should tracing instrumentation be enabled, only affects Grafana Javascript Agent
;instrumentations_tracing_enabled = false
# Api Key, only applies to Grafana Javascript Agent provider
;api_key = testApiKey
@@ -1178,6 +1188,13 @@
# 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.
;alertmanager_config_poll_interval = 60s
# Maximum number of active and pending silences that a tenant can have at once. Default: 0 (no limit).
;alertmanager_max_silences_count =
# Maximum silence size in bytes. Default: 0 (no limit).
;alertmanager_max_silence_size_bytes =
# Set to true when using redis in cluster mode.
;ha_redis_cluster_mode_enabled = false
@@ -1855,3 +1872,36 @@ timeout = 30s
[public_dashboards]
# Set to false to disable public dashboards
;enabled = true
###################################### Cloud Migration ######################################
[cloud_migration]
# Set to true to enable target-side migration UI
;is_target = false
# Token used to send requests to grafana com
;gcom_api_token = ""
# How long to wait for a request sent to gms to start a snapshot to complete
;start_snapshot_timeout = 5s
# How long to wait for a request sent to gms to validate a key to complete
;validate_key_timeout = 5s
# How long to wait for a request sent to gms to get a snapshot status to complete
;get_snapshot_status_timeout = 5s
# How long to wait for a request sent to gms to create a presigned upload url
;create_upload_url_timeout = 5s
# How long to wait for a request sent to gms to report an event
;report_event_timeout = 5s
# How long to wait for a request to fetch an instance to complete
;fetch_instance_timeout = 5s
# How long to wait for a request to create an access policy to complete
;create_access_policy_timeout = 5s
# How long to wait for a request to create to fetch an access policy to complete
;fetch_access_policy_timeout = 5s
# How long to wait for a request to create to delete an access policy to complete
;delete_access_policy_timeout = 5s
# The domain name used to access cms
;domain = grafana-dev.net
# Folder used to store snapshot files. Defaults to the home dir
;snapshot_folder = ""
# Link to form to give feedback on the feature
;feedback_url = ""
# How frequently should the frontend UI poll for changes while resources are migrating
;frontend_poll_interval = 2s
+15 -14
View File
@@ -1,13 +1,16 @@
# Backend
First read the [backend style guide](/contribute/backend/style-guide.md)
to get a sense for how we work to ensure that the Grafana codebase is
consistent and accessible. The rest of the backend contributor
documentation is more relevant to reviewers and contributors looking to
make larger changes.
The contribution guidelines for Grafana backend developers contain a lot of information for anyone who wants to contribute to our open source project.
But you don't necessarily have to read all of it, so long as you read what is most relevant to you.
For anyone reviewing code for Grafana's backend, a basic understanding
of content of the following files is expected:
## Guidelines everyone should read
We recommend that all contributors read the [backend style guide](/contribute/backend/style-guide.md) to get a sense for how we try to ensure that the Grafana codebase is consistent and accessible.
The rest of the backend contributor documentation tends to be more relevant to reviewers and contributors who want to make changes of greater size or quantity.
## Guidelines specifically for backend developers
For anyone who reviews code for the Grafana backend, get a basic understanding of the content of the following files:
- [Currently recommended practices](/contribute/backend/recommended-practices.md)
- [Services](/contribute/backend/services.md)
@@ -15,13 +18,11 @@ of content of the following files is expected:
- [Database](/contribute/backend/database.md)
- [HTTP API](/pkg/api/README.md)
Reviewers who review large changes should additionally make a habit out
of familiarizing themselves with the content of
## Guidelines for contributors who make or review large changes to the backend
If you want to make or review large changes to the backend, be sure to habitually familiarize yourself with the entire contents of
[/contribute/backend](/contribute/backend) from time to time.
## Dependency management
## Guidelines for dependency management
Refer to:
- [UPGRADING_DEPENDENCIES.md](https://github.com/grafana/grafana/blob/main/UPGRADING_DEPENDENCIES.md)
- [Upgrading dependencies](/contribute/backend/upgrading-dependencies.md)
If you work with a dependency that requires an upgrade, refer to [Upgrading dependencies](/contribute/backend/upgrading-dependencies.md).
+70 -68
View File
@@ -1,6 +1,6 @@
# Instrumenting Grafana
Guidance, conventions and best practices for instrumenting Grafana using logs, metrics and traces.
This guide provides conventions and best practices for instrumenting Grafana using logs, metrics, and traces.
## Logs
@@ -8,7 +8,7 @@ Logs are files that record events, warnings and errors as they occur within a so
### Usage
Use the [pkg/infra/log](/pkg/infra/log/) package to create a named structured logger. Example:
Use the [pkg/infra/log](/pkg/infra/log/) package to create a named, structured logger. Example:
```go
import (
@@ -26,38 +26,38 @@ logger.Error("Error msg", "error", fmt.Errorf("BOOM"))
### Naming conventions
Name the logger using lowercase characters, e.g. `log.New("my-logger")` using snake_case or kebab-case styling.
Name the logger using lowercase characters, for example, `log.New("my-logger")` using snake_case or kebab-case styling.
Prefix the logger name with an area name when using different loggers across a feature or related packages, e.g. `log.New("plugin.loader")` and `log.New("plugin.client")`.
Prefix the logger name with an area name when using different loggers across a feature or related packages; for example, `log.New("plugin.loader")` and `log.New("plugin.client")`.
Start the log message with a capital letter, e.g. `logger.Info("Hello world")` instead of `logger.Info("hello world")`. The log message should be an identifier for the log entry, avoid parameterization in favor of key-value pairs for additional data.
Start the log message with a capital letter, for example, `logger.Info("Hello world")` instead of `logger.Info("hello world")`. The log message should be an identifier for the log entry. Avoid parameterization in favor of key-value pairs for additional data.
Prefer using camelCase style when naming log keys, e.g. _remoteAddr_, to be consistent with Go identifiers.
To be consistent with Go identifiers, prefer using camelCase style when naming log keys; for example, `remoteAddr`.
Use the key _error_ when logging Go errors, e.g. `logger.Error("Something failed", "error", fmt.Errorf("BOOM"))`.
Use the key `Error` when logging Go errors; for example, `logger.Error("Something failed", "error", fmt.Errorf("BOOM"))`.
### Validate and sanitize input coming from user input
If log messages or key/value pairs originates from user input they **should** be validated and sanitized.
If log messages or key/value pairs originate from user input they should be validated and sanitized.
Be **careful** to not expose any sensitive information in log messages e.g. secrets, credentials etc. It's especially easy to do by mistake when including a struct as value.
Be careful not to expose any sensitive information in log messages; for example, secrets and credentials. It's easy to do this by mistake if you include a struct as a value.
### Log levels
When to use which log level?
When should you use each log level?
- **Debug:** Informational messages of high frequency and/or less-important messages during normal operations.
- **Info:** Informational messages of low frequency and/or important messages.
- **Warning:** Should in normal cases not be used/needed. If used should be actionable.
- **Error:** Error messages indicating some operation failed (with an error) and the program didn't have a way of handle the error.
- **Debug:** Informational messages of high frequency, less-important messages during normal operations, or both.
- **Info:** Informational messages of low frequency, important messages, or both.
- **Warning:** Use warning messages sparingly. If used, messages should be actionable.
- **Error:** Error messages indicating some operation failed (with an error) and the program didn't have a way to handle the error.
### Contextual logging
Use a contextual logger to include additional key/value pairs attached to `context.Context`, e.g. `traceID`, to allow correlating logs with traces and/or correlate logs with a common identifier.
Use a contextual logger to include additional key/value pairs attached to `context.Context`. For example, a `traceID`, used to allow correlating logs with traces, correlate logs with a common identifier, either or both.
You must [Enable tracing in Grafana](#2-enable-tracing-in-grafana) to get a traceID
You must [Enable tracing in Grafana](#2-enable-tracing-in-grafana) to get a `traceID`.
Example:
For example:
```go
import (
@@ -80,9 +80,9 @@ func doSomething(ctx context.Context) {
### Enable certain log levels for certain loggers
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.
You can enable certain log levels during development to make logging easier. For example, you can enable `debug` to allow certain loggers to minimize the generated log output and makes it easier to find things. Refer to [[log.filters]](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#filters) for information on how to to set different levels for specific loggers.
It's also possible to configure multiple loggers:
You can also configure multiple loggers. For example:
```ini
[log]
@@ -114,41 +114,41 @@ There are many possible types of metrics that can be tracked. One popular method
### Naming conventions
Use the namespace _grafana_ as that would prefix any defined metric names with `grafana_`. This will make it clear for operators that any metric named `grafana_*` belongs to Grafana.
Use the namespace `grafana` to prefix any defined metric names with `grafana_`. This prefix makes it clear for operators that any metric named `grafana_*` belongs to Grafana.
Use snake*case style when naming metrics, e.g. \_http_request_duration_seconds* instead of _httpRequestDurationSeconds_.
Use snake_case style when naming metrics; for example, `http_request_duration_seconds` instead of `httpRequestDurationSeconds`.
Use snake*case style when naming labels, e.g. \_status_code* instead of _statusCode_.
Use snake_case style when naming labels; for example, `status_code` instead of `statusCode`.
If metric type is a _counter_, name it with a `_total` suffix, e.g. _http_requests_total_.
If a metric type is a counter, name it with a `_total` suffix; for example, `http_requests_total`.
If metric type is a _histogram_ and you're measuring duration, name it with a `_<unit>` suffix, e.g. _http_request_duration_seconds_.
If a metric type is a histogram and you're measuring duration, name it with a `_<unit>` suffix; for example, `http_request_duration_seconds`.
If metric type is a _gauge_, name it to denote it's a value that can increase and decrease , e.g. _http_request_in_flight_.
If a metric type is a gauge, name it to denote that it's a value that can increase and decrease; for example, `http_request_in_flight`.
### Label values and high cardinality
Be careful with what label values you add/accept. Using/allowing too many label values could result in [high cardinality problems](https://grafana.com/blog/2022/02/15/what-are-cardinality-spikes-and-why-do-they-matter/).
Be careful with what label values you accept or add. Using or allowing too many label values could result in [high cardinality problems](https://grafana.com/blog/2022/02/15/what-are-cardinality-spikes-and-why-do-they-matter/).
If label values originates from user input they **should** be validated. Use `metricutil.SanitizeLabelName(<label value>`) from _pkg/infra/metrics/metricutil_ package to sanitize label names. Very **important** to only allow a pre-defined set of labels to minimize the risk of high cardinality problems.
If label values originate from user input they should be validated. Use `metricutil.SanitizeLabelName(<label value>)` from the `pkg/infra/metrics/metricutil` package to sanitize label names.
Be **careful** to not expose any sensitive information in label values, e.g. secrets, credentials etc.
> **Important:** Only allow a pre-defined set of labels to minimize the risk of high cardinality problems. Be careful not to expose any sensitive information in label values such as secrets and credentials.
### Guarantee the existence of metrics
If you want to guarantee the existence of metrics before any observations has happened there's a couple of helper methods available in the _pkg/infra/metrics/metricutil_ package.
To guarantee the existence of metrics before any observations have happened, you can use the helper methods available in the `pkg/infra/metrics/metricutil` package.
### How to collect and visualize metrics locally
1. Ensure you have Docker installed and running on your machine
1. Start Prometheus
1. Ensure you have Docker installed and running on your machine.
1. Start Prometheus.
```bash
make devenv sources=prometheus
```
1. Run Grafana, and create a Prometheus datasource if you do not have one yet. Set the server URL to `http://localhost:9090`, enable basic auth, and type in the same auth you have for local Grafana
1. Use Grafana Explore or dashboards to query any exported Grafana metrics. You can also view them at http://localhost:3000/metrics
1. Run Grafana, and then create a Prometheus data source if you do not have one yet. Set the server URL to `http://localhost:9090`, enable basic authentication, and enter the same authentication you have for local Grafana.
1. Use Grafana Explore or dashboards to query any exported Grafana metrics. You can also view them at `http://localhost:3000/metrics`.
## Traces
@@ -156,9 +156,9 @@ A distributed trace is data that tracks an application request as it flows throu
### Usage
Grafana uses [OpenTelemetry](https://opentelemetry.io/) for distributed tracing. There's an interface `Tracer` in the _pkg/infra/tracing_ package that implements the [OpenTelemetry Tracer interface](go.opentelemetry.io/otel/trace), which you can use to create traces and spans. To get a hold of a `Tracer` you would need to get it injected as dependency into your service, see [Services](services.md) for more details. For more information, see https://opentelemetry.io/docs/instrumentation/go/manual/.
Grafana uses [OpenTelemetry](https://opentelemetry.io/) for distributed tracing. There's an interface `Tracer` in the `pkg/infra/tracing` package that implements the [OpenTelemetry Tracer interface](go.opentelemetry.io/otel/trace), which you can use to create traces and spans. To access `Tracer` you need to get it injected as a dependency of your service. Refer to [Services](services.md) for more details. For more information, you may also refer to [The OpenTelemetry documentation](https://opentelemetry.io/docs/instrumentation/go/manual/).
Example:
For example:
```go
import (
@@ -183,7 +183,7 @@ func (s *MyService) Hello(ctx context.Context, name string) (string, error) {
ctx, span := s.tracer.Start(ctx, "MyService.Hello", trace.WithAttributes(
attribute.String("my_attribute", "val"),
))
// this make sure the span is marked as finished when this
// make sure the span is marked as finished when this
// method ends to allow the span to be flushed and sent to
// storage backend.
defer span.End()
@@ -197,7 +197,7 @@ func (s *MyService) Hello(ctx context.Context, name string) (string, error) {
// Use the helper functions tracing.Errorf or tracing.Error
// to set the spans 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.
// record the error as an exception span event for the provided span.
return "", tracing.Errorf(span, "failed to check name: %w", err)
}
@@ -219,35 +219,37 @@ func (s *MyService) Hello(ctx context.Context, name string) (string, error) {
Span names should follow the [guidelines from OpenTelemetry](https://opentelemetry.io/docs/reference/specification/trace/api/#span).
| Span Name | Guidance |
| ----------------------- | -------------------------------------------------------- |
| get | Too general |
| get_account/42 | Too specific |
| get_account | Good, and account_id=42 would make a nice Span attribute |
| get_account/{accountId} | Also good (using the “HTTP route”) |
| Span Name | Guidance |
| ------------------------- | ---------------------------------------------------------- |
| `get` | Too general |
| `get_account/42` | Too specific |
| `get_account` | Good, and `account_id=42` would make a nice Span attribute |
| `get_account/{accountId}` | Also good (using the “HTTP route”) |
Span attribute and span event attributes should follow the [Attribute naming specification from OpenTelemetry](https://opentelemetry.io/docs/reference/specification/common/attribute-naming/). Good attribute key examples:
Span attribute and span event attributes should follow the [attribute naming specification from OpenTelemetry](https://opentelemetry.io/docs/reference/specification/common/attribute-naming/).
- service.version
- http.status_code
These are a few examples of good attributes:
See [Trace semantic conventions from OpenTelemetry](https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/) for additional conventions regarding well-known protocols and operations.
- `service.version`
- `http.status_code`
Refer to [trace semantic conventions from OpenTelemetry](https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/) for additional conventions regarding well-known protocols and operations.
### Span names and high cardinality
Be careful with what span names you add/accept. Using/allowing too many span names could result in high cardinality problems.
Be careful with what span names you add or accept. Using or allowing too many span names can result in high cardinality problems.
### Validate and sanitize input coming from user input
If span names, attribute or event values originates from user input they **should** be validated and sanitized. It's very **important** to only allow a pre-defined set of span names to minimize the risk of high cardinality problems.
If span names, attribute values, or event values originate from user input, they should be validated and sanitized. It's very important to only allow a pre-defined set of span names to minimize the risk of high cardinality problems.
Be **careful** to not expose any sensitive information in span names, attribute or event values, e.g. secrets, credentials etc.
Be careful to not expose any sensitive information in span names, attribute or event values; for example, secrets, credentials, and so on.
### Span attributes
Consider using `attributes.<Type>("<key>", <value>)` in favor of `attributes.Key("<key>").<Type>(<value>)` since it requires less characters and thereby reads easier.
Consider using `attributes.<Type>("<key>", <value>)` instead of `attributes.Key("<key>").<Type>(<value>)` since it requires fewer characters and is easier to read.
Example:
For example:
```go
attribute.String("datasource_name", proxy.ds.Name)
@@ -261,29 +263,29 @@ attribute.Key("org_id").Int64(proxy.ctx.SignedInUser.OrgID)
### How to collect, visualize and query traces (and correlate logs with traces) locally
#### 1. Start Jaeger
1. Start Jaeger
```bash
make devenv sources=jaeger
```
```bash
make devenv sources=jaeger
```
#### 2. Enable tracing in Grafana
1. Enable tracing in Grafana
To enable tracing in Grafana, you must set the address in your config.ini file
To enable tracing in Grafana, you must set the address in your `config.ini` file:
```ini
[tracing.opentelemetry.jaeger]
address = http://localhost:14268/api/traces
```
```ini
[tracing.opentelemetry.jaeger]
address = http://localhost:14268/api/traces
```
#### 3. Search/browse collected logs and traces in Grafana Explore
1. Search/browse collected logs and traces in Grafana Explore
You need provisioned gdev-jaeger and gdev-loki datasources, see [developer dashboard and data sources](https://github.com/grafana/grafana/tree/main/devenv#developer-dashboards-and-data-sources) for setup instructions.
You need provisioned `gdev-jaeger` and `gdev-loki` data sources. Refer to [developer dashboard and data sources](https://github.com/grafana/grafana/tree/main/devenv#developer-dashboards-and-data-sources) for set up instructions.
Open Grafana explore and select gdev-loki datasource and use the query `{filename="/var/log/grafana/grafana.log"} | logfmt`.
Open Grafana explore and select the `gdev-loki` data source and use the query `{filename="/var/log/grafana/grafana.log"} | logfmt`.
You can then inspect any log message that includes a `traceID` and from there click on `gdev-jaeger` to split view and inspect the trace in question.
You can then inspect any log message that includes a `traceID` and from there click `gdev-jaeger` to split the view and inspect the trace in question.
#### 4. Search/browse collected traces in Jaeger UI
1. Search or browse collected traces in Jaeger UI
You can open http://localhost:16686 to use the Jaeger UI for browsing and searching traces.
You can open `http://localhost:16686` to use the Jaeger UI for browsing and searching traces.
+38 -43
View File
@@ -9,18 +9,18 @@ inspiration for the way we organize packages.
## Principles of how to structure a service in Grafana
[](services.md)
To learn how to structure a Grafana service, refer to [our documentation](services.md).
### Domain types and interfaces should be in local "root" packages
Let's say you're creating a _tea pot_ service, place everything another
Let's say you're creating a "tea pot" service. You should place everything another
service needs to interact with the tea pot service in
_pkg/services/teapot_, choosing a name according to
[Go's package naming conventions](https://go.dev/blog/package-names).
`pkg/services/teapot`. Choose a name according to the
[Go package naming conventions](https://go.dev/blog/package-names).
Typically, you'd have one or more interfaces that your service provides
in the root package along with any types, errors, and other constants
that makes sense for another service interacting with this service to
Typically, you have one or more interfaces that your service provides
in the root package. Also, you should have any types, errors, and other constants
that makes sense for another service to interact with the tea pot service to
use.
Avoid depending on other services when structuring the root package to
@@ -28,37 +28,34 @@ reduce the risk of running into circular dependencies.
### Sub-packages should depend on roots, not the other way around
Small-to-medium sized packages should be able to have only a single
Small to medium-sized packages should be able to have only a single
sub-package containing the implementation of the service. By moving the
implementation into a separate package we reduce the risk of triggering
circular dependencies (in Go, circular dependencies are evaluated per
package and this structure logically moves it to be per type or function
declaration).
circular dependencies.
Large packages may need utilize multiple sub-packages at the discretion
> **Note:** In Go, circular dependencies are evaluated per package, and this structure logically moves it to be per type or function declaration.
Large packages may need to utilize multiple sub-packages at the discretion
of the implementor. Keep interfaces and domain types to the root
package.
### Try to name sub-packages for project wide uniqueness
### Try to name sub-packages for project-wide uniqueness
Prefix sub-packages with the service name or an abbreviation of the
service name (whichever is more appropriate) to provide an ideally
unique package name. This allows `teaimpl` to be distinguished from
`coffeeimpl` without the need for package aliases, and encourages the
use of the same name to reference your package throughout the codebase.
Prefix sub-packages with the service name or an abbreviation of the service name, whichever is more appropriate, to provide a unique package name.
This allows `teaimpl` to be distinguished from `coffeeimpl` without the need for package aliases, and encourages the use of the same name to reference your package throughout the codebase.
### A well-behaving service provides test doubles for itself
Other services may depend on your service, and it's good practice to
provide means for those services to set up a test instance of the
dependency as needed. Refer to
[Google Testing's Testing on the Toilet: Know Your Test Doubles](https://testing.googleblog.com/2013/07/testing-on-toilet-know-your-test-doubles.html) for a brief
dependency as needed. Refer to Google's
[Testing on the Toilet: Know Your Test Doubles](https://testing.googleblog.com/2013/07/testing-on-toilet-know-your-test-doubles.html) for a brief
explanation of how we semantically aim to differentiate fakes, mocks,
and stubs within our codebase.
Place test doubles in a sub-package to your root package named
`<servicename>test` or `<service-abbreviation>test`, such that the `teapot` service may have the
`teapottest` or `teatest`
`teapottest` or `teatest`.
A stub or mock may be sufficient if the service is not a dependency of a
lot of services or if it's called primarily for side effects so that a
@@ -70,34 +67,32 @@ regular service without the need of complicated setup.
### Separate store and logic
When building a new service, data validation, manipulation, scheduled
events and so forth should be collected in a service implementation that
is built to be agnostic about its store.
When building a new service, collect data validation, manipulation, scheduled
events, and so forth, in a service implementation. This implementation should
be built so that it is agnostic about its store.
The storage should be an interface that is not directly called from
outside the service and should be kept to a minimum complexity to
provide the functionality necessary for the service.
A litmus test to reduce the complexity of the storage interface is
whether an in-memory implementation is a feasible test double to build
to test the service.
Use a simple litmus test to determine whether an in-memory implementation is a feasible test-double to assess the service. This will reduce the complexity of the storage interface.
### Outside the service root
Some parts of the service definition remains outside the
service directory and reflects the legacy package hierarchy.
As of June 2022, the parts that remain outside the service are:
Some parts of the service definition remain outside the
service directory and reflect the legacy package hierarchy.
As of June 2022, the parts that remain outside the service are migrations and API endpoints.
#### Migrations
`pkg/services/sqlstore/migrations` contains all migrations for SQL
databases, for all services (not including Grafana Enterprise).
The `pkg/services/sqlstore/migrations` package contains all migrations for SQL
databases for all Grafana services except for Grafana Enterprise.
Migrations are written per the [database.md](database.md#migrations) document.
#### API endpoints
`pkg/api/api.go` contains the endpoint definitions for the most of
Grafana HTTP API (not including Grafana Enterprise).
The `pkg/api/api.go` package contains the endpoint definitions for the most of
Grafana HTTP API except for Grafana Enterprise.
## Practical example
@@ -170,16 +165,16 @@ func (s *sqlStore) Delete(ctx.Context, root.DeleteLetterCommand) error { … }
## Legacy package hierarchy
> **Note:** A lot of services still adhere to the legacy model as outlined below. While it is ok to
> **Note:** Many services still adhere to the legacy model as outlined below. While it is okay to
> extend existing services based on the legacy model, you are _strongly_ encouraged to structure any
> new services or major refactorings using the new package layout.
Grafana has long used a package-by-layer layout where domain types
are placed in **pkg/models**, all SQL logic in **pkg/services/sqlstore**,
are placed in `pkg/models`, all SQL logic in `pkg/services/sqlstore`,
and so forth.
This is an example of how the _tea pot_ service could be structured
throughout the codebase in the legacy model.
This is an example of how the tea pot service could be structured
throughout the codebase in the legacy model:
- _pkg/_
- _api/_
@@ -205,13 +200,13 @@ throughout the codebase in the legacy model.
for the service.
The implementation of legacy services varies widely from service to
service, some or more of these files may be missing and there may be
service. Some of these files, perhaps many, may be missing and there may be
more files related to a service than those listed here.
Some legacy services providing infrastructure will also take care of the
Some legacy services that provide infrastructure also take care of the
integration with several domains. The cleanup service both
provides the infrastructure to occasionally run cleanup scripts and
defines the cleanup scripts. Ideally, this would be migrated
to only handle the scheduling and synchronization of clean up jobs.
The logic for the individual jobs would be placed with a service that is
defines the cleanup scripts. Ideally, the service should be migrated
to only handle the scheduling and synchronization of cleanup jobs.
The logic for the individual jobs should be placed with a service that is
related to whatever is being cleaned up.
+73 -91
View File
@@ -1,169 +1,151 @@
# Currently recommended practices
We occasionally identify patterns that are either useful or harmful that
we'll want to introduce or remove from the codebase. When the complexity
or importance of introducing or removing such a pattern is sufficiently
high, we'll document it here to provide an addressable local
'currently recommended practice'. By collecting these practices in a
single place, we're able to reference them and make it easier to have a
shared understanding of how to write idiomatic code for the Grafana
backend.
Grafana Labs occasionally identifies patterns that may be useful or harmful so that we can introduce or remove from the codebase.
When the complexity or importance of introducing or removing such idiomatic patterns is sufficiently high, we document it on this page to provide a reference. Because the relevance of these practices may vary over time, we call them _currently recommended practices_.
## Large-scale refactoring
Large-scale refactoring based on a new recommended practice is a
delicate matter, and most of the time it's better to introduce the new
delicate matter. It's usually better to introduce the new
way incrementally over multiple releases and over time to balance the
want to introduce new useful patterns and the need to keep Grafana
desire to introduce new useful patterns with the need to keep Grafana
stable. It's also easier to review and revert smaller chunks of changes,
reducing the risk of complications.
| State | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Proposed | The practice has been proposed and been positively received by the Grafana team. Following the proposal is a discretionary choice for developers. |
| Ongoing, active | The practice is actively being worked on. New code should adhere to the practice where at all possible. |
| Ongoing, passive | There is no immediate active work on refactoring old code. New code should adhere to the practice where at all possible. |
| Completed | The work has been done and there is no, or negligible, legacy code left that need refactoring. New code must adhere to the practice. |
| Abandoned | The practice has no longer any active ongoing work and new code don't need to comply with the practice described. |
## States of refactoring
Refer to the following table to identify important categories of refactoring.
| State | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Proposed | This is an optional practice that has been proposed and received positively by the Grafana team. Follow this proposal as you choose. |
| Ongoing, active | The practice is actively being worked on. New code should adhere to the practice whenever possible. |
| Ongoing, passive | There's no immediate active work on refactoring old code. New code should adhere to the practice whenever possible. |
| Completed | The work has been done and there is no, or negligible, legacy code left that needs refactoring. New code must adhere to the practice. |
| Abandoned | The practice doesn't have any active ongoing work and new code doesn't need to comply with the practice described. |
## 1 - Idiomatic Grafana code should be idiomatic Go code
**Status:** Ongoing, passive.
It'll be easier for contributors to start contributing to Grafana if our
It's easier for contributors to start contributing to Grafana if our
code is easily understandable. When there isn't a more specific Grafana
recommended practice, we recommend following the practices as put forth
recommended practice, we recommend that you follow the practices as put forth
by the Go project for development of Go code or the Go compiler itself
when applicable.
as appropriate.
The first resource we recommend everyone developing Grafana's backend to
skim is "[Effective Go](https://golang.org/doc/effective_go.html)",
which isn't updated to reflect more recent changes since Go was
initially released but remain a good source for understanding the
general differences between Go and other languages.
Firstly, best practice is the online book [_Effective Go_](https://golang.org/doc/effective_go.html), which isn't updated to reflect more recent changes since Go was initially released, but which remains a good source for understanding the general differences between Go and other languages.
Secondly, the guidelines for [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments)
for the Go compiler can mostly be applied directly to the Grafana
codebase. There are idiosyncrasies in Grafana such as interfaces living
closer to its declaration than to its users for services and don't
enforce documentation of public declarations (prioritize high coverage
of documentation aimed at end-users over documenting internals in the
backend).
Secondly, the guidelines for [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) for the Go compiler can mostly be applied directly to the Grafana codebase.
There are idiosyncrasies in Grafana, such as interfaces living closer to their declarations than to their users for services, and the documentation doesn't enforce public declarations.
Instead, the documentation prioritizes high coverage aimed at end-users over documenting internals in the backend.
- [Effective Go](https://golang.org/doc/effective_go.html)
- [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments)
- [_Effective Go_](https://golang.org/doc/effective_go.html).
- [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments).
## 100 - Global state
**State:** Ongoing, passive.
Global state makes testing and debugging software harder, and it's something we want to avoid when possible. Unfortunately, there is quite a lot of global state in Grafana.
Global state makes testing and debugging software harder, and it's something we want to avoid whenever possible.
We want to migrate away from this by using
[Wire](https://github.com/google/wire) and dependency injection to pack
Unfortunately, there's quite a lot of global state in Grafana.
We want to migrate away from this state by using
[Wire](https://github.com/google/wire) and dependency injection to pack code.
## 101 - Limit the use of the init() function
## 101 - Limit use of the init() function
**State:** Ongoing, passive.
Only use the init() function to register services/implementations.
Don't use the `init()` function for any purpose other than registering services or implementations.
## 102 - Settings refactoring
## 102 - Refactor settings
**State:** Ongoing, passive.
The plan is to move all settings to from package level vars in settings package to the [setting.Cfg](https://github.com/grafana/grafana/blob/df917663e6f358a076ed3daa9b199412e95c11f4/pkg/setting/setting.go#L210) struct. To access the settings, services and components can inject this setting.Cfg struct:
We plan to move all settings from package-level vars in the settings package to the [`setting.Cfg`](https://github.com/grafana/grafana/blob/df917663e6f358a076ed3daa9b199412e95c11f4/pkg/setting/setting.go#L210) struct. To access the settings, services and components can inject `setting.Cfg`:
- [Cfg struct](https://github.com/grafana/grafana/blob/df917663e6f358a076ed3daa9b199412e95c11f4/pkg/setting/setting.go#L210)
- [Injection example](https://github.com/grafana/grafana/blob/c9773e55b234b7637ea97b671161cd856a1d3d69/pkg/services/cleanup/cleanup.go#L34)
- [`Cfg` struct](https://github.com/grafana/grafana/blob/df917663e6f358a076ed3daa9b199412e95c11f4/pkg/setting/setting.go#L210)
- [Injection](https://github.com/grafana/grafana/blob/c9773e55b234b7637ea97b671161cd856a1d3d69/pkg/services/cleanup/cleanup.go#L34)
## 103 - Reduce the use of GoConvey
## 103 - Reduce use of GoConvey
**State:** Completed.
We want to migrate away from using GoConvey. Instead, we want to use
stdlib testing with [testify](https://github.com/stretchr/testify),
because it's the most common approach in the Go community, and we think
it will be easier for new contributors. Read more about how we want to
write tests in the [style guide](/contribute/backend/style-guide.md).
We encourage you to migrate away from using GoConvey.
Instead, we suggest the use of `stdlib` testing with [testify](https://github.com/stretchr/testify), because it's the most common approach in the Go community, and we think it will be easier for new contributors.
To learn more about how we want to write tests, refer to the [backend style guide](/contribute/backend/style-guide.md).
## 104 - Refactor SqlStore
**State:** Completed.
The `sqlstore` handlers all use a global xorm engine variable. Refactor them to use the `SqlStore` instance.
The `sqlstore` handlers all use a global `xorm` engine variable. Refactor them to use the `SqlStore` instance.
## 105 - Avoid global HTTP handler functions
**State:** Ongoing, passive.
Refactor HTTP handlers so that the handler methods are on the HttpServer instance or a more detailed handler struct. E.g (AuthHandler). This ensures they get access to HttpServer service dependencies (and Cfg object) and can avoid global state.
Refactor HTTP handlers so that the handler methods are on the `HttpServer` instance or a more detailed handler struct. For example, `AuthHandler`.
Doing so ensures that the handler methods get access to `HttpServer` service dependencies (and its `Cfg` object), so that global state may be avoided.
## 106 - Date comparison
## 106 - Compare dates
**State:** Ongoing, passive.
Store newly introduced date columns in the database as epoch based
integers (i.e. unix timestamps) if they require date comparison. This
permits a unified approach for comparing dates against all the supported
databases instead of handling dates differently for each database. Also,
by comparing epoch based integers, we no longer need error pruning
transformations to and from other time zones.
Store newly introduced date columns in the database as epoch-based integers (that is, Unix timestamps) if they require date comparison.
This permits you to have a unified approach for comparing dates against all the supported databases instead of needing to handle dates differently for each database.
Also, when you compare epoch-based integers you no longer need error-pruning transformations to and from other time zones.
## 107 - Avoid use of the simplejson package
## 107 - Avoid the `simplejson` package
**State:** Ongoing, passive
Use of the `simplejson` package (`pkg/components/simplejson`) in place
of types (Go structs) results in code that is difficult to maintain.
Don't use the `simplejson` package (`pkg/components/simplejson`) instead of types (that is, Go structs) because this results in code that is difficult to maintain.
Instead, create types for objects and use the Go standard library's
[`encoding/json`](https://golang.org/pkg/encoding/json/) package.
## 108 - Provisionable\*
## 108 - Enable provisioning
**State:** Abandoned: Grafana's file based refactoring is limited to work natively only on on-premise installations of Grafana. We're looking at enhancing the use of the API to enable provisioning for all Grafana instances.
**State:** Abandoned: The file-based refactoring of Grafana is limited to work natively only on on-premise installations of Grafana.
We want to enhance the use of the API to enable provisioning for all Grafana instances in the future.
All new features that require state should be possible to configure using config files. For example:
All new features that require state should be able to configure Grafana using configuration files.
For example:
- [Data sources](https://github.com/grafana/grafana/tree/main/pkg/services/provisioning/datasources)
- [Alert notifiers](https://github.com/grafana/grafana/tree/main/pkg/services/provisioning/notifiers)
- [Dashboards](https://github.com/grafana/grafana/tree/main/pkg/services/provisioning/dashboards)
Today it's only possible to provision data sources and dashboards but this is something we want to support all over Grafana.
Today it's only possible to provision data sources and dashboards, but we want to support it throughout Grafana in the future.
### 109 - Use context.Context "everywhere"
### 109 - Use `context.Context`
**State:** Completed.
The package [context](https://golang.org/pkg/context/) should be used
and propagated through all the layers of the code. For example the
`context.Context` of an incoming API request should be propagated to any
other layers being used such as the bus, service and database layers.
Utility functions/methods normally doesn't need `context.Context`.
To follow Go best practices, any function/method that receives a
[`context.Context` argument should receive it as its first parameter](https://github.com/golang/go/wiki/CodeReviewComments#contexts).
You should use and propagate the package [`context`](https://golang.org/pkg/context/) through all the layers of your code.
For example, the `context.Context` of an incoming API request should be propagated to any other layers being used, such as the bus, service layer, and database layer.
Utility functions and methods normally don't need `context.Context`.
To follow Go best practices, any function or method that receives a
`context.Context` argument should receive it as its [first parameter](https://github.com/golang/go/wiki/CodeReviewComments#contexts).
To be able to solve certain problems and/or implement and support
certain features making sure that `context.Context` is passed down
through all layers of the code is vital. Being able to provide
contextual information for the full life-cycle of an API request allows
us to use contextual logging, provide contextual information about the
authenticated user, create multiple spans for a distributed trace of
service calls and database queries etc.
We encourage you to make sure that `context.Context` is passed down through all layers of your code.
When you provide contextual information for the full life cycle of an API request, Grafana can use contextual logging. It also provides contextual information about the
authenticated user, and it creates multiple spans for a distributed trace of service calls, database queries, and so on.
Code should use `context.TODO` when it's unclear which Context to use,
or it is not yet available (because the surrounding function has not yet
been extended to accept a `context.Context` argument).
Code should use `context.TODO` whenever it's unclear which `Context` to use,
or if it isn't yet available because the surrounding function hasn't yet
been extended to accept a `context.Context` argument. For more details, refer to the documentation:
More details in [Services](/contribute/backend/services.md), [Communication](/contribute/backend/communication.md) and [Database](/contribute/backend/database.md).
[Original design doc](https://docs.google.com/document/d/1ebUhUVXU8FlShezsN-C64T0dOoo-DaC9_r-c8gB2XEU/edit#).
- [Services](/contribute/backend/services.md)
- [Communication](/contribute/backend/communication.md)
- [Database](/contribute/backend/database.md)
## 110 - Move API error handling to service layer
**State:** Ongoing, passive.
All errors returned from Grafana's services should carry a status and
the information necessary to provide a structured end-user facing
message that the frontend can display and internationalize for
end-users.
All errors returned from services in Grafana should carry a status and
the information necessary to provide a structured message that faces the end-user. Structured messages can be displayed on the frontend and may be [internationalized](../internationalization.md).
More details in [Errors](/contribute/backend/errors.md).
To learn more, refer to [Errors](/contribute/backend/errors.md).
+18 -18
View File
@@ -1,14 +1,14 @@
# Services
A Grafana _service_ encapsulates and exposes application logic to the rest of the application, through a set of related operations.
A Grafana _service_ encapsulates and exposes application logic to the rest of the application through a set of related operations.
Grafana uses [Wire](https://github.com/google/wire), which is a code generation tool that automates connecting components using [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection). Dependencies between components are represented in Wire as function parameters, encouraging explicit initialization instead of global variables.
Grafana uses [Wire](https://github.com/google/wire), which is a code generation tool that automates connecting components using [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection). Wire represents dependencies between components as function parameters, which encourages explicit initialization instead of global variables.
Even though the services in Grafana do different things, they share a number of patterns. To better understand how a service works, let's build one from scratch!
Before a service can start communicating with the rest of Grafana, it needs to be registered with Wire, see `ProvideService` factory function/method in the service example below and how it's being referenced in the wire.go example below.
Before a service can start communicating with the rest of Grafana, it needs to be registered with Wire. Refer to the `ProvideService` factory method in the following service example and note how it's being referenced in the `wire.go` example.
When Wire is run, it inspects the parameters of `ProvideService` and makes sure that all its dependencies have been wired up and initialized properly.
When you run Wire, it inspects the parameters of `ProvideService` and makes sure that all its dependencies have been wired up and initialized properly.
**Service example:**
@@ -49,16 +49,16 @@ func (s *Service) init() error {
// IsDisabled returns true if the service is disabled.
//
// Satisfies the registry.CanBeDisabled interface which will guarantee
// that Run() is not called if the service is disabled.
// Satisfies the registry.CanBeDisabled interface that guarantees
// that Run() isn't called if the service is disabled.
func (s *Service) IsDisabled() bool {
return !s.cfg.IsServiceEnabled()
}
// Run runs the service in the background.
//
// Satisfies the registry.BackgroundService interface which will
// guarantee that the service can be registered as a background service.
// Satisfies the registry.BackgroundService interface which
// guarantees that the service can be registered as a background service.
func (s *Service) Run(ctx context.Context) error {
// background service logic...
<-ctx.Done()
@@ -109,30 +109,30 @@ func InitializeForTest(cla setting.CommandLineArgs, opts Options, apiOpts api.Se
A background service runs in the background of the lifecycle between Grafana startup and shutdown. To run your service in the background, it must satisfy the `registry.BackgroundService` interface. Pass it through to the `NewBackgroundServiceRegistry` call in the [ProvideBackgroundServiceRegistry](/pkg/registry/backgroundsvcs/background_services.go) function to register it.
You can see an example implementation above of the Run method.
For an example of the `Run` method, see the previous example.
## Disabled services
If you want to guarantee that a background service is not run by Grafana when certain criteria are met/service is disabled, your service must satisfy the `registry.CanBeDisabled` interface. When the `service.IsDisabled` method returns true, Grafana will not call the `service.Run` method.
If you want to guarantee that a background service is not run by Grafana when certain criteria are met, or if a service is disabled, your service must satisfy the `registry.CanBeDisabled` interface. When the `service.IsDisabled` method returns `true`, Grafana won't call the `service.Run` method.
If you want to run certain initialization code whether service is disabled or not, you need to handle this in the service factory method.
You can see an example implementation above of the `IsDisabled` method and custom initialization code when the service is disabled.
For an example of the `IsDisabled` method and custom initialization code when the service is disabled, see the previous implementation code.
## Run Wire / generate code
## Run Wire (generate code)
Running `make run` calls `make gen-go` on the first run. `gen-go` in turn calls the wire binary and generates the code in [wire_gen.go](/pkg/server/wire_gen.go) and [wire_gen.go](/pkg/cmd/grafana-cli/runner/wire_gen.go). The wire binary is installed using [bingo](https://github.com/bwplotka/bingo) which downloads and installs all the tools needed, including the Wire binary at the specified version.
Running `make run` calls `make gen-go` on the first run. The `gen-go` in turn calls the Wire binary and generates the code in [`wire_gen.go`](/pkg/server/wire_gen.go) and [`wire_gen.go`](/pkg/cmd/grafana-cli/runner/wire_gen.go). The Wire binary is installed using [`bingo`](https://github.com/bwplotka/bingo) which downloads and installs all the tools needed, including the Wire binary at the specified version.
## OSS vs Enterprise
## OSS vs. Enterprise
Grafana OSS and Grafana Enterprise share code and dependencies. Grafana Enterprise overrides or extends certain OSS services.
There's a [wireexts_oss.go](/pkg/server/wireexts_oss.go) that has the `wireinject` and `oss` build tags as requirements. Here services that might have other implementations, e.g. Grafana Enterprise, can be registered.
There's a [`wireexts_oss.go`](/pkg/server/wireexts_oss.go) that has the `wireinject` and `oss` build tags as requirements. Here you can register services that might have other implementations, for example, Grafana Enterprise.
Similarly, there's a wireexts_enterprise.go file in the Enterprise source code repository where other service implementations can be overridden/be registered.
Similarly, there's a `wireexts_enterprise.go` file in the Enterprise source code repository where you can override or register other service implementations.
To extend an OSS background service, create a specific background interface for that type and inject that type to [ProvideBackgroundServiceRegistry](/pkg/registry/backgroundsvcs/background_services.go) instead of the concrete type. Then add a wire binding for that interface in [wireexts_oss.go](/pkg/server/wireexts_oss.go) and in the enterprise wireexts file.
To extend an OSS background service, create a specific background interface for that type and inject that type to [`ProvideBackgroundServiceRegistry`](/pkg/registry/backgroundsvcs/background_services.go) instead of the concrete type. Next, add a Wire binding for that interface in [`wireexts_oss.go`](/pkg/server/wireexts_oss.go) and in the enterprise `wireexts` file.
## Methods
Any public method of a service should take `context.Context` as its first argument. If the method calls the bus, other services or the database the context should be propagated, if possible.
Any public method of a service should take `context.Context` as its first argument. If the method calls the bus, it will propagate other services or the database context, if possible.
+50 -52
View File
@@ -1,71 +1,69 @@
# Support bundles
Support bundles are a way to collect all the information needed to debug a problem.
They are generated from the support bundle menu in the UI under the Help section.
Support bundles comprehensively collect the information needed for debugging. Specifically, support bundles function as an archive that contains one file per collector that is selected by the user.
The support bundle is an archive that contains one file per collector selected by
the user.
Generally, collectors are functions in the backend that collect information about the service in which they are running. Services can register collectors during their initialization.
Collectors are functions in the backend that collect information about the service they are running in.
Services can register collectors during their initialization.
## Find the support bundle information
## Adding a new support bundle collector
Support bundles are generated from information located in the Grafana UI's online documentation. Under **Help**, select the **Support bundle** menu.
To add a new support bundle collector, you need to follow these steps,
we'll use the usage stats service as an example:
## Add a new support bundle collector
To add a new support bundle collector, follow these steps which use the usage stats service as an example. For example:
1. Import the support bundles registry in the service's `ProvideService` function:
```go
type UsageStats struct {
...
}
```go
type UsageStats struct {
...
}
func ProvideService(
...
bundleRegistry supportbundles.Service, // Bundle registry
) (*UsageStats, error)
```
func ProvideService(
...
bundleRegistry supportbundles.Service, // Bundle registry
) (*UsageStats, error)
```
2. `make gen-go` will then be able to wire the registry to the service.
After importing the support bundle, run `make gen-go` to wire the registry to the service.
3. Implement the collector
1. Implement the collector. For example:
```go
func (uss *UsageStats) supportBundleCollector() supportbundles.Collector {
return supportbundles.Collector{
UID: "usage-stats", // unique ID for the collector
DisplayName: "Usage statistics", // display name for the collector in the UI
Description: "Usage statistics of the Grafana instance", // description for the collector in the UI
IncludedByDefault: false, // whether the collector is included by default in the support bundle and can't be deselected. Most times you want this to be false.
Default: false, // whether the collector is selected by default in the support bundle. User can still deselect it.
// Function that will actually collect the file during the support bundle generation.
Fn: func(ctx context.Context) (*supportbundles.SupportItem, error) {
// Add your service's logic to collect the information you need
// In this example we are collecting the usage stats and marshalling them to JSON
// This helps us get information about the usage of the Grafana instance
report, err := uss.GetUsageReport(context.Background())
if err != nil {
return nil, err
}
```go
func (uss *UsageStats) supportBundleCollector() supportbundles.Collector {
return supportbundles.Collector{
UID: "usage-stats", // Unique ID for the collector
DisplayName: "Usage statistics", // Display name for the collector in the UI
Description: "Usage statistics of the Grafana instance", // Description for the collector in the UI
IncludedByDefault: false, // Indicates whether the collector is included by default in the support bundle and can't be deselected. Usually you want this to be false.
Default: false, // Indicates whether the collector is selected by default in the support bundle. User can still deselect it.
// Function that will actually collect the file during the support bundle generation.
Fn: func(ctx context.Context) (*supportbundles.SupportItem, error) {
// Add your service's logic to collect the information you need
// In this example we collect the usage stats and place them appropriately in JSON
// This helps us get information about the usage of the Grafana instance
report, err := uss.GetUsageReport(context.Background())
if err != nil {
return nil, err
}
data, err := json.Marshal(report)
if err != nil {
return nil, err
}
data, err := json.Marshal(report)
if err != nil {
return nil, err
}
return &supportbundles.SupportItem{
// filename of the file in the archive
// can be any extension. (most common is .json and .md)
Filename: "usage-stats.json",
FileBytes: data, // []byte of the file
}, nil
},
}
}
```
return &supportbundles.SupportItem{
// Filename of the file in the archive
// Can be any extension (most commonly, .json and .md).
Filename: "usage-stats.json",
FileBytes: data, // []byte of the file
}, nil
},
}
}
```
4. Register the collector in the service's `ProvideService` function:
1. Register the collector in the service's `ProvideService` function. For example:
```go
func ProvideService(
@@ -0,0 +1,26 @@
# Upgrade dependencies
We recommend the practices in this documentation when upgrading the various backend dependencies of Grafana.
## Protocol buffers (protobufs)
Use the most recent stable version of the [protobuf library](http://github.com/golang/protobuf) in Grafana and the plugin SDK.
Additionally, you typically want to upgrade your protobuf compiler toolchain and re-compile the protobuf files.
> **Note:** You need Buf CLI installed and available in your path. For instructions, refer to the [Buf Docs documentation](https://buf.build/docs/installation).
After you've installed Buf CLI, re-compile the protobuf files in Grafana and the plugin SDK. Use this code:
```shell
cd $GRAFANA
make protobuf
cd $GRAFANA_PLUGIN_SDK_GO
mage protobuf
```
After upgrading the protobuf dependency in Grafana and the plugin SDK, it is a best practice to test that your code still works before creating your PR. Specifically:
- Test a plugin built with upgraded SDK on upgraded Grafana
- Test a plugin built with non-upgraded SDK on upgraded Grafana
- Test a plugin built with upgraded SDK on non-upgraded Grafana
+26
View File
@@ -0,0 +1,26 @@
# Upgrade Go version
We recommend the practices outlined in this documentation when you upgrade Go for use in Grafana development.
## Example PR
Refer to the following PR for an example of how to perform a Go upgrade:
- [PR ##79329](https://github.com/grafana/grafana/pull/79329)
## Main areas to update
Change at least the following parts of Go and related files:
- [`go.mod`](/go.mod#L3)
- [`go.work`](/go.work#L1)
- [`scripts/drone/variables.star`](/scripts/drone/variables.star#L6)
- [`Makefile`](/Makefile#L12)
- [`Dockerfile`](/Dockerfile#L6)
Then, run `go mod tidy` and `go work sync`. Also, run `make drone` so changes reflect the updates to `.star` and `drone.yml` files.
### Additional files to change
- Look in the `.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 the `grafana/grafana-enterprise` repository.
@@ -1,26 +0,0 @@
# Upgrading dependencies
Notes on upgrading various backend dependencies.
## Protobuf
When upgrading the [protobuf](http://github.com/golang/protobuf) library in Grafana and the plugin SDK,
you typically also want to upgrade your protobuf compiler toolchain and re-compile protobuf files.
**Note:** You need Buf CLI installed and availabile in your path, see https://buf.build/docs/installation for instructions.
Re-compile protobuf files in grafana and the plugin SDK:
```shell
cd $GRAFANA
make protobuf
cd $GRAFANA_PLUGIN_SDK_GO
mage protobuf
```
After upgrading the protobuf dependency in Grafana and the plugin SDK, it might be wise to test that things still work,
before making corresponding PRs:
- Test a plugin built with upgraded SDK on upgraded Grafana
- Test a plugin built with non-upgraded SDK on upgraded Grafana
- Test a plugin built with upgraded SDK on non-upgraded Grafana
@@ -1,20 +0,0 @@
# Upgrading Go Version
Notes on upgrading Go version.
Example PR: https://github.com/grafana/grafana/pull/79329
## The main areas that need to change during the upgrade are:
- [`go.mod`](/go.mod#L3)
- [`go.work`](/go.work#L1)
- [`scripts/drone/variables.star`](/scripts/drone/variables.star#L6)
- [`Makefile`](/Makefile#L12)
- [`Dockerfile`](/Dockerfile#L6)
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.
+1
View File
@@ -19,6 +19,7 @@ We recommend using [Homebrew](https://brew.sh/) for installing any missing depen
brew install git
brew install go
brew install node@20
brew install corepack
corepack enable
```
+10 -3
View File
@@ -1,7 +1,14 @@
# Contribute to our documentation
Welcome. We're glad you're here to help make our technical documentation even better.
Welcome! We're glad you're here.
For our style guide and writing guidelines, see [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/).
[Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) is an open source project intended to empower both internal and external contributors to help make our technical documentation even better.
If you're interested in contributing to the Writers' Toolkit, refer to the [Writers' Toolkit](https://github.com/grafana/writers-toolkit) repository.
Go to [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) for the following resources:
- **Contribution guidelines** - Learn how can you contribute to Grafana Labs documentation.
- **Structure guidelines** - Learn how to organize and structure our documentation.
- **Writing and style guide** - Guidelines that cover aspects of content such as style, tooling, workflows, markdown syntax, and more.
- **Build and review guide** - Instructions for testing, linting, validating, and backporting our documentation.
If you're interested in contributing to our documentation, go to the [grafana/writers-toolkit repository](https://github.com/grafana/writers-toolkit) for relevant resources.
+26 -30
View File
@@ -1,24 +1,20 @@
# Accessibility at Grafana
# Develop for accessibility at Grafana
At Grafana we pay special attention to accessibility and that's why it's important that all components are written with it in
mind.
The goal of this document is to list best practices and recommendations when it comes to writing accessible components.
At Grafana we pay special attention to accessibility (a11y) and that's why it's important that all components are written with it in mind. This document contains some best practices for writing accessible components.
### grafana/ui components
Some grafana/ui components have specific mechanisms built-in that make it easier to write accessible components.
Some `grafana/ui` components have specific built-in mechanisms that make it easier to write accessible components.
#### Form elements
One of the important accessibility considerations when working with form elements is to make sure form controls are
properly labelled. For that a `label` element has to be associated with the respective form control. One way to
do that is to provide `for` attribute to the label that matches the `id` attribute of the form control.
One of the important accessibility considerations when working with form elements is to make sure form controls are properly labelled.
For example, a `label` element should be associated with the respective form control.
One way to do that is to provide a `for` attribute to the label that matches the `id` attribute of the form control.
The form components from grafana/ui provide an easier way to achieve that. The form elements, used inside `Field`
components, will get the `label` properly associated with them given that the element has `id` (in case of `Select` the prop is `inputId`) specified.
The form components from `grafana/ui` provide an easier way to achieve that. The form elements, used inside `Field` components, get the `label` properly associated with them. This is appropriate because the element has a specified `id` (in case of `Select`, the prop is `inputId`).
As an example, this code
For example:
```tsx
<Field label="Name">
@@ -26,7 +22,7 @@ As an example, this code
</Field>
```
will be rendered as (simplified)
In the previous example, the code is rendered as:
```html
<div>
@@ -35,18 +31,19 @@ will be rendered as (simplified)
</div>
```
As long as the form element has a unique `id` attribute specified, it will be automatically accessible when rendered.
As long as the form element has a unique `id` attribute specified, it's automatically accessible when rendered.
### Writing tests with accessibility in mind
### Write tests with accessibility in mind
We use [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) (RTL) for writing unit tests.
We use the [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) (RTL) for writing unit tests.
The library is built with accessibility in mind and makes it easier to ensure the written code is accessible to all users.
When querying DOM elements with RTL prefer using `*ByRole` queries as they resemble closely how the users interact
with the page - both using mouse/visual display and assistive technologies.
As a rule of thumb, if code is written with the accessibility concerns in
mind, `*ByRole` queries will be sufficient in most of the cases. There are certainly exceptions here, as not all the elements have defined [ARIA role](https://www.w3.org/TR/html-aria/#docconformance).
As an example, for this code
When querying DOM elements with RTL, you should prefer using `*ByRole` queries as they resemble closely how the users interact with the page. These queries use mouse and visual displays and assistive technologies.
As a rule of thumb, when code is written with accessibility concerns in
mind, `*ByRole` queries are sufficient in most cases. However, there are exceptions because not all the elements have defined [ARIA roles](https://www.w3.org/TR/html-aria/#docconformance).
For example:
```tsx
<Field label="Username">
@@ -54,7 +51,7 @@ As an example, for this code
</Field>
```
the test could case be as follows
In the previous example, the test case is the following code:
```tsx
it('has username set', () => {
@@ -62,16 +59,15 @@ it('has username set', () => {
});
```
Input with type `text` (default type value) has a role of `textbox` and the `name` option is not the name attribute
given to the input elements but their [accessible name](https://www.tpgi.com/what-is-an-accessible-name/), which in this case is the text content of the associated with input label.
Input with type `text` (that is, the default type value) has a role of `textbox`. Also, the `name` option isn't the name attribute given to the input elements, but their [accessible name](https://www.tpgi.com/what-is-an-accessible-name/). The accessible name in this case is the text content associated with the input label.
### Pull requests that introduce accessibility(a11y) errors:
### Pull requests that introduce accessibility errors:
We use [pa11y-ci](https://github.com/pa11y/pa11y-ci) to collect accessibility errors on [some URLs in the project](https://github.com/grafana/grafana/issues/36555), threshold errors are specified per URL.
We use [pa11y-ci](https://github.com/pa11y/pa11y-ci) to collect accessibility errors on [some URLs in the project](https://github.com/grafana/grafana/issues/36555). The thresholds of accessibility errors are specified per URL.
If the contribution introduces new a11y errors, our continuous integration will fail, preventing you to merge to the main branch. In those cases there are two alternatives for moving forward:
If the contribution introduces new a11y errors, our continuous integration will fail, preventing you from merging to the main branch. In those cases there are two alternatives for moving forward:
- Check the error log on the pipeline step `test-a11y-frontend-pr`, identify what was the error, and fix it.
- Locally run the command `yarn test:accessibility-report` that generates an HTML accessibility report, then go to the URL that contains your change, identify the error, and fix it. Keep in mind, a local e2e Grafana instance is going to be running on `http://localhost:3001`.
- Check the error log on the pipeline step `test-a11y-frontend-pr`, identify the nature of the error, and then fix it.
- Locally run the command `yarn test:accessibility-report` that generates an HTML accessibility report, and then go to the URL that contains your change. On this URL, identify the error, and then fix it. Keep in mind that a local end-to-end Grafana instance is going to be running on `http://localhost:3001`.
You can also prevent introducing a11y errors by installing an a11y plugin in your browser, for example, axe DevTools, Accessibility Insights for Web among others.
You can also avoid introducing accessibility errors by installing an a11y plugin in your browser. For example, you could use axe DevTools or Accessibility Insights for Web, among others.
+31 -39
View File
@@ -1,45 +1,36 @@
# Guidelines for code comments in grafana-\* packages
# Guidelines for code comments in Grafana packages
This document aims to give you some recommendation on how to add code comments to the exported code in the grafana packages.
## Table of Contents
1. [Add package description](#add-package-description)
1. [Set stability of an API](#set-stability-of-an-api)
1. [Deprecate an API](#deprecate-an-api)
1. [Specify parameters](#specify-parameters)
1. [Set return values](#set-return-values)
---
This guide provides recommendations for adding code comments in `grafana-\*` packages.
## Add package description
Each package has an overview explaining the overall responsibility and usage of the package.
You can document this description with [`@packageDocumentation`](https://api-extractor.com/pages/tsdoc/tag_packagedocumentation/) tag.
Use the [`@packageDocumentation`](https://api-extractor.com/pages/tsdoc/tag_packagedocumentation/) tag to document the package.
Add this tag to the `<packageRoot>/src/index.ts` entry file to have one place for the package description.
Add the `@packageDocumentation` tag to the `<packageRoot>/src/index.ts` entry file to have one place for the package description.
## Set stability of an API
All `exported` apis from the package should have a release tag to indicate its stability.
Add a release tag to all exported APIs from the package to indicate its stability.
- [`@alpha`](https://api-extractor.com/pages/tsdoc/tag_alpha/) - early draft of api and will probably change.
- [`@beta`](https://api-extractor.com/pages/tsdoc/tag_beta/) - close to being stable but might change.
- [`@public`](https://api-extractor.com/pages/tsdoc/tag_public/) - ready for usage in production.
- [`@internal`](https://api-extractor.com/pages/tsdoc/tag_internal/) - for internal use only.
- [`@alpha`](https://api-extractor.com/pages/tsdoc/tag_alpha/) - denotes an early draft of API that will probably change.
- [`@beta`](https://api-extractor.com/pages/tsdoc/tag_beta/) - denotes that the API is close to being stable but might change.
- [`@public`](https://api-extractor.com/pages/tsdoc/tag_public/) - denotes that the API is ready for usage in production.
- [`@internal`](https://api-extractor.com/pages/tsdoc/tag_internal/) - denotes that the API is for internal use only.
### Main stability of APIs
### Indicate main stability of APIs
Add a tag to mark the stability of the whole exported `class/interface/function/type` etc.
To indicate the main stability of APIs:
Please place the `release tag` at the bottom of the comment to make it consistent among files and easier to read.
- Add a tag to mark the stability of the whole exported `class/interface/function/type`, and other interfaces.
- Place the release tag at the bottom of the comment to make it consistent among files and easier to read.
**Do:**
````typescript
/**
* Will help to create DataFrame objects and handle
* Helps to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
@@ -54,11 +45,11 @@ export class DataFrameFactory {
}
````
**Don't**
**Don't:**
````typescript
/**
* Will help to create DataFrame objects and handle
* Helps to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @public
@@ -72,17 +63,18 @@ export class DataFrameFactory {
}
````
### Partial stability of APIs
### Indicate partial stability of APIs
Add the main stability of the API at the top according to [Main stability of API](#main-stability-of-api).
To indicate the partial stability of APIs:
Then override the non-stable parts of the API with the proper [release tag](#release-tags). This should also be place at the bottom of the comment block.
1. Add the main stability of the API at the top according to [Main stability of API](#indicate-main-stability-of-apis).
1. Override the non-stable parts of the API with the proper release tag. This tag should also be placed at the bottom of the comment block.
**Do:**
````typescript
/**
* Will help to create DataFrame objects and handle
* Helps to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
@@ -102,11 +94,11 @@ export class DataFrameFactory {
}
````
**Don't**
**Don't:**
````typescript
/**
* Will help to create DataFrame objects and handle
* Helps to create DataFrame objects and handle
* the heavy lifting of creating a complex object.
*
* @example
@@ -131,7 +123,7 @@ export class DataFrameFactory {
If you want to mark an API as deprecated to signal that this API will be removed in the future, then add the [`@deprecated`](https://api-extractor.com/pages/tsdoc/tag_deprecated/) tag.
If applicable add a reason why the API is deprecated directly after the `@deprecated tag`.
If applicable, add a reason why the API is deprecated directly after the `@deprecated tag`.
## Specify parameters
@@ -143,7 +135,7 @@ This attribute can be skipped if the type provided by `typescript` and the funct
```typescript
/**
* Will help to create a resource resolver depending
* Helps to create a resource resolver depending
* on the current execution context.
*
* @param context - The current execution context.
@@ -162,7 +154,7 @@ export const factory = (context: Context): IResolver => {
```typescript
/**
* Will compare two numbers to see if they are equal to each others.
* Compares two numbers to see if they are equal to each other.
*
* @param x - The first number
* @param y - The second number
@@ -175,15 +167,15 @@ export const isEqual = (x: number, y: number): boolean => {
## Set return values
If you want to specify the return value from a function you can use the [`@returns`](https://api-extractor.com/pages/tsdoc/tag_returns/) tag.
To specify the return value from a function, you can use the [`@returns`](https://api-extractor.com/pages/tsdoc/tag_returns/) tag.
This attribute can be skipped if the type provided by `typescript` and the function comment or the function name is enough to explain what the function returns.
You can skip this attribute if the type provided by `typescript` and the function comment or the function name is enough to explain what the function returns.
**Do:**
```typescript
/**
* Will help to create a resource resolver depending
* Helps to create a resource resolver depending
* on the current execution context.
*
* @param context - The current execution context.
@@ -198,11 +190,11 @@ export const factory = (context: Context): IResolver => {
};
```
**Don't**
**Don't:**
```typescript
/**
* Will compare two numbers to see if they are equal to each others.
* Compares two numbers to see if they are equal to each other.
*
* @returns true if values are equal
* @public
+10 -10
View File
@@ -1,12 +1,12 @@
# End-to-End Tests for core Grafana
# End-to-end tests for core Grafana
This document is specific to the [Grafana repository](https://github.com/grafana/grafana). Be sure that you've read the [generalized E2E document](e2e.md).
This guide explains how to conduct end-to-end tests for the [Grafana repository](https://github.com/grafana/grafana). Ensure that you've read the [generalized E2E document](e2e.md).
## Commands
- `yarn e2e` Creates an isolated `grafana-server` home under _\<repo-root>/e2e/tmp_ with provisioned data sources and dashboards. This copies locally build binary and frontend assets from your repo root so you need to have a built backend and frontend for this to run locally. The server starts on port 3001 so it does not conflict with your normal dev server.
- `yarn e2e:debug` Same as above but runs the tests in chrome and does not shutdown after completion.
- `yarn e2e:dev` Same as above but does not run any tests on startup. It lets you pick a test first.
- `yarn e2e`: Creates an isolated `grafana-server` home under `\<repo-root>/e2e/tmp` with provisioned data sources and dashboards. This makes a local copy of the build binary and frontend assets from your repository root so you need to have a built backend and frontend. The server starts on port `3001` so it does not conflict with your normal dev server.
- `yarn e2e:debug`: Same as previous but runs the tests in Chrome and doesn't shut down after completion.
- `yarn e2e:dev`: Same as previous but does not run any tests on startup. It lets you pick a test first.
If you already have a Grafana instance running, you can provide a specific URL by setting the `BASE_URL` environment variable:
@@ -14,12 +14,12 @@ If you already have a Grafana instance running, you can provide a specific URL b
BASE_URL=http://172.0.10.2:3333 yarn e2e
```
The above commands use some utils scripts under [_\<repo-root>/e2e_](../../e2e) that can also be used for more control.
The previous commands use some `utils` scripts under [_\<repo-root>/e2e_](../../e2e) that you can also use for more control.
- `./scripts/grafana-server/start-server` This creates a fresh new grafana server working dir, setup's config and starts the server. It will also kill any previously started server that is still running using pid file at _\<repo-root>/scripts/grafana-server/tmp/pid_.
- `./scripts/grafana-server/wait-for-grafana` waits for `$HOST` and `$PORT` to be available. Per default localhost and 3001.
- `./e2e/run-suite <debug|dev|noarg>` Starts cypress in different modes.
- `./scripts/grafana-server/start-server`: This creates a new Grafana server working directory, sets up configuration. and starts the server. It also kills any previously started server that is still running using the `pid` file at `\<repo-root>/scripts/grafana-server/tmp/pid`.
- `./scripts/grafana-server/wait-for-grafana`: waits for `$HOST` and `$PORT` to be available. Per default `localhost` and `3001`.
- `./e2e/run-suite <debug|dev|noarg>`: Starts Cypress in different modes.
## Test suites
All the integration tests are located at _\<repo-root>/e2e/suite\<x>/specs_.
You can find integration tests at `\<repo-root>/e2e/suite\<x>/specs`.
+47 -35
View File
@@ -1,23 +1,25 @@
# Theming Grafana
# Work with Grafana themes
## Overview
**Themes are implemented in Typescript.** That's because our goal is to share variables between Grafana TypeScript and [Sass](https://sass-lang.com/) code. Theme definitions are located in the following files:
Themes in Grafana are implemented in TypeScript. We chose the TypeScript language in part because it shares variables between Grafana TypeScript and [Sass](https://sass-lang.com/) code.
Theme definitions are located in the following files:
- [packages/grafana-data/src/themes/createTheme.ts](../../packages/grafana-data/src/themes/createTheme.ts)
- [packages/grafana-data/src/themes/createColors.ts](../../packages/grafana-data/src/themes/createColors.ts)
## Usage
This section provides usage guidelines.
This section provides usage guidelines for themes.
### Using themes in React components
### Use themes in React components
Here's how to use Grafana themes in React components.
The following section describes how to use Grafana themes in React components.
#### useStyles2 hook
#### The useStyles2 hook
`useStyles2` memoizes the function and provides access to the theme.
The `useStyles2` hook memoizes the function and provides access to the theme.
```tsx
import { FC } from 'react';
@@ -38,6 +40,8 @@ const getStyles = (theme: GrafanaTheme2) =>
#### Get the theme object
Use code similar to the following to give your component access to the theme variables:
```tsx
import { FC } from 'react';
import { useTheme2 } from '@grafana/ui';
@@ -49,12 +53,22 @@ const Foo: FC<FooProps> = () => {
};
```
## Picking the right variable
## Select a variable
This section explains how to select the correct variables in your theme.
### The rich color object and the state colors
The theme.colors object has 6 rich color objects for `primary`, `secondary`, `info`, `success`, `warning` and `error`. These all
have the same sub colors that have different use cases.
The `theme.colors` object has six rich color objects:
- `primary`
- `secondary`
- `info`
- `success`
- `warning`
- `error`
All these objects use the same secondary colors which are associated with different use cases.
| Property | When to use |
| ------------ | ---------------------------------------------------------- |
@@ -66,9 +80,9 @@ have the same sub colors that have different use cases.
Example use cases:
- Want a `red` background? Use `theme.colors.error.main`
- Want `green` text? Use `theme.colors.success.text`
- Want text to be visible when placed inside a background that uses `theme.colors.error.main` then use `theme.colors.error.contrastText`.
- Want a red background? Use `theme.colors.error.main`.
- Want green text? Use `theme.colors.success.text`.
- Want text to be visible when placed inside a background that uses `theme.colors.error.main`? Use `theme.colors.error.contrastText`.
### Text colors
@@ -76,17 +90,17 @@ Example use cases:
| ----------------------------- | ------------------------------------------------------------------------------ |
| theme.colors.text.primary | The default text color |
| theme.colors.text.secondary | Text color for things that should be a bit less prominent |
| theme.colors.text.disabled | Text color for disabled / faint things |
| theme.colors.text.disabled | Text color for disabled or faint things |
| theme.colors.text.link | Text link color |
| theme.colors.text.maxContrast | Maximum contrast (absolute white in dark theme, absolute black in white theme) |
### Background colors
| Property | When to use |
| --------------------------------- | ------------------------------------------------------------------------------------------------- |
| theme.colors.background.canvas | Think dashboard background. A background surface for panels and panes that use primary background |
| theme.colors.background.primary | The default content background for content panes and panels |
| theme.colors.background.secondary | For cards and other surfaces that need to stand out when placed on top of the primary background |
| Property | When to use |
| --------------------------------- | ------------------------------------------------------------------------------------------------ |
| theme.colors.background.canvas | Dashboard background. A background surface for panels and panes that use primary background |
| theme.colors.background.primary | The default content background for content panes and panels |
| theme.colors.background.secondary | For cards and other surfaces that need to stand out when placed on top of the primary background |
### Borders
@@ -121,9 +135,11 @@ Example use cases:
### Typography
For font family, font sizes and line heights use the variables under `theme.typography`.
To customize font family, font sizes, and line heights, use the variables under `theme.typography`.
#### Using `ThemeContext` directly
#### Set the context directly
Use `ThemeContext` like this:
```tsx
import { ThemeContext } from '@grafana/data';
@@ -131,9 +147,9 @@ import { ThemeContext } from '@grafana/data';
<ThemeContext.Consumer>{(theme) => <Foo theme={theme} />}</ThemeContext.Consumer>;
```
#### Using `withTheme` higher-order component (HOC)
#### Use `withTheme` higher-order component
With this method your component will be automatically wrapped in `ThemeContext.Consumer` and provided with current theme via `theme` prop. Components used with `withTheme` must implement the `Themeable` interface.
With this method your component will be automatically wrapped in `ThemeContext.Consumer` and provided with current theme via the `theme` prop. Components used with `withTheme` must implement the `Themeable` interface.
```ts
import { ThemeContext, Themeable } from '@grafana/ui';
@@ -145,10 +161,9 @@ const Foo: React.FunctionComponent<FooProps> = () => ...
export default withTheme2(Foo);
```
### Using theme in tests
### Use a theme in tests
If you need to pass a theme object to a function under test just import `createTheme` and call it without
any arguments.
If you need to pass a theme object to a function that you are testing, then import `createTheme` and call it without any arguments. For example:
```tsx
import { createTheme } from '@grafana/data';
@@ -161,17 +176,14 @@ describe('MyComponent', () => {
});
```
## FAQ
### Modify Sass variables
This section provides insight into frequently-asked questions.
If you need to modify the Sass variable files, we recommend that you migrate the styles to [Emotion](https://emotion.sh/docs/introduction).
### How can I modify Sass variable files?
For the following variables to apply, you need to run this `yarn dev` task:
**If possible, migrate styles to Emotion**
- `[_variables|_variables.dark|_variables.light].generated.scss`: These files must be referenced in the main Sass files for Sass variables to be available.
> For the following to apply you need to run `yarn dev` task.
If you need to modify the Sass variable files, be sure to update the files that end with `.tmpl.ts` and not the `.generated.scss` files.
`[_variables|_variables.dark|_variables.light].generated.scss` files are the ones that are referenced in the main Sass files for Sass variables to be available. **These files are automatically generated and should never be modified by hand!**
If you need to modify the sass variable files be sure to update the files that end with `.tmpl.ts` and
not the `.generated.scss` files.
> **Important:** These variable files are automatically generated and should never be modified by hand.
+39 -1
View File
@@ -53,4 +53,42 @@ The default configuration between Grafana and the OpenLDAP container is configur
- admins
- ldap-posix-admin
- no groups
- ldap-posix
- ldap-posix
## Configure LDAP with TLS
After the `openldap` container has been deployed, you have to copy the CA from the docker container:
```bash
# get the container ID
docker ps
docker cp CONTAINER-ID:"/container/service/:ssl-tools/assets/default-ca/default-ca.pem" devenv/docker/blocks/auth/openldap/certs
```
To configure TLS you need the following lines in the .toml file under the `[[servers]]` section:
```ini
tls_ciphers = ["TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"]
min_tls_version = "TLS1.2"
ssl_skip_verify = true
root_ca_cert = "devenv/docker/blocks/auth/openldap/certs/default-ca.pem"
client_cert = "devenv/docker/blocks/auth/openldap/certs/ldap.crt"
client_key = "devenv/docker/blocks/auth/openldap/certs/ldap.key"
```
For simplicity, the same private key is shared between the server and the client. To generate your own private keys and certificates please follow this guide: https://enlook.wordpress.com/2015/09/30/howto-generate-certificate-for-openldap-and-using-it-for-certificate-authentication/.
- To connect over LDAPS include this config:
```ini
port = 636
use_ssl = true
start_tls = false
```
- To connect with STARTTLS use this config:
```ini
port = 389
use_ssl = true
start_tls = true
```
@@ -6,9 +6,14 @@
LDAP_DOMAIN: grafana.org
LDAP_ADMIN_PASSWORD: grafana
LDAP_SEED_INTERNAL_LDIF_PATH: /tmp/smt/
LDAP_TLS_CRT_FILENAME: ldap.crt
LDAP_TLS_KEY_FILENAME: ldap.key
LDAP_TLS_CA_CRT_FILENAME: ca.crt
LDAP_TLS_CIPHER_SUITE: SECURE256:+SECURE128:-VERS-TLS-ALL:+VERS-TLS1.2:-RSA:-DHE-DSS:-CAMELLIA-128-CBC:-CAMELLIA-256-CBC
ports:
- 389:389
- 636:636
restart: unless-stopped
volumes:
- ./docker/blocks/auth/openldap/prepopulate/:/tmp/smt/
- ./docker/blocks/auth/openldap/certs/:/container/service/slapd/assets/certs/
@@ -47,7 +47,7 @@ pyroscope.write "default" {
pyroscope.scrape "default" {
targets = [
{"__address__" = "host.docker.internal:6060", "service_name"="grafana"},
{"__address__" = "host.docker.internal:6000", "service_name"="grafana"},
]
forward_to = [pyroscope.write.default.receiver]
@@ -78,7 +78,7 @@ You can assign data source permissions to users, service accounts, teams, and ro
When you enable query and resource caching, Grafana temporarily stores the results of data source queries and resource requests. When you or another user submit the same query or resource request again, the results will come back from the cache instead of from the data source.
When using Grafana, a query pertains to a request for data frames to be modified or displayed. A resource relates to any HTTP requests made by a plugin, such as the Amazon Timestream plugin requesting a list of available databases from AWS. For more information on data source queries and resources, please see the developers page on [backend plugins](/developers/plugin-tools/introduction/backend-plugins).
When using Grafana, a query pertains to a request for data frames to be modified or displayed. A resource relates to any HTTP requests made by a plugin, such as the Amazon Timestream plugin requesting a list of available databases from AWS. For more information on data source queries and resources, please see the developers page on [backend plugins](https://grafana.com/developers/plugin-tools/key-concepts/backend-plugins/).
The caching feature works for **all** backend data sources. You can enable the cache globally in Grafana's [configuration]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}), and configure a cache duration (also called Time to Live, or TTL) for each data source individually.
@@ -113,7 +113,7 @@ Query caching works for Grafana's [built-in data sources]({{< relref "../../data
To verify that a data source works with query caching, follow the [instructions below](#enable-and-configure-query-caching) to **Enable and Configure query caching**. If caching is enabled in Grafana but the Caching tab is not visible for the given data source, then query caching is not available for that data source.
{{% admonition type="note" %}}
Some data sources, such as Elasticsearch, Prometheus, and Loki, cache queries themselves, so Grafana _query_ caching does not significantly improve performance. However, _resource_ caching may help. See the developers page on [plugin resources](/developers/plugin-tools/introduction/backend-plugins) for details.
Some data sources, such as Elasticsearch, Prometheus, and Loki, cache queries themselves, so Grafana _query_ caching does not significantly improve performance. However, _resource_ caching may help. Refer to [plugin resources](https://grafana.com/developers/plugin-tools/key-concepts/backend-plugins/) for details.
{{% /admonition %}}
### Enable and configure query caching
@@ -42,4 +42,4 @@ We recommend that you remove all permissions for roles and teams that are not re
1. Navigate to Data Source Permissions
- Go to the permissions tab of the newly created Loki data source. Here, you'll find the Team LBAC rules section.
For more information on how to setup Team LBAC rules for a Loki data source, [Add Team LBAC rules]({{< relref "./../create-teamlbac-rules/" >}}).
For more information on how to setup Team LBAC rules for a Loki data source, refer to [Create Team LBAC rules for the Loki data source](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/administration/data-source-management/teamlbac/create-teamlbac-rules/).
@@ -205,6 +205,23 @@ The following list contains role-based access control actions used by Grafana On
| `grafana-oncall-app.other-settings:read` | n/a | Read OnCall settings. |
| `grafana-oncall-app.other-settings:write` | n/a | Edit OnCall settings. |
### Grafana Adaptive Metrics action definitions
The following list contains role-based access control actions used by Grafana Adaptive Metrics.
| Action | Applicable scope | Description |
| ---------------------------------------------------- | ---------------- | ----------------------------------------------------- |
| `grafanaadaptivemetricsapp.plugin:access` | n/a | Access the Adaptive Metrics plugin in Grafana Cloud. |
| `grafanaadaptivemetricsapp.config:read` | n/a | Read the Adaptive Metrics app configuration. |
| `grafanaadaptivemetricsapp.config:write` | n/a | Update the Adaptive Metrics app configuration. |
| `grafanaadaptivemetricsapp.recommendations:read` | n/a | Read aggregation recommendations. |
| `grafanaadaptivemetricsapp.recommendations:apply` | n/a | Apply aggregation recommendations. |
| `grafanaadaptivemetricsapp.rules:read` | n/a | Read aggregation rules. |
| `grafanaadaptivemetricsapp.rules:write` | n/a | Create aggregation rules. |
| `grafanaadaptivemetricsapp.rules:delete` | n/a | Delete aggregation rules. |
| `grafanaadaptivemetricsapp.exemptions:read` | n/a | Read recommendation exemptions. |
| `grafanaadaptivemetricsapp.exemptions:write` | n/a | Create, update, and delete recommendation exemptions. |
## Scope definitions
The following list contains role-based access control scopes.
@@ -170,29 +170,43 @@ curl --location --request POST '<grafana_url>/api/access-control/roles/' \
By default, only a Grafana Server Admin can create and manage custom roles. If you want your `Editors` to do the same, [update the `Editor` basic role permissions]({{< ref "./manage-rbac-roles.md#update-basic-role-permissions" >}}). There are two ways to achieve this:
- Add the `fixed:roles:writer` role permissions to the `basic:editor` role using the `role > from` list of your provisioning file:
- Add the following permissions to the `basic:editor` role, using provisioning or the [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}):
```yaml
apiVersion: 2
| action | scope |
| -------------- | --------------------------- |
| `roles:read` | `roles:*` |
| `roles:write` | `permissions:type:delegate` |
| `roles:delete` | `permissions:type:delegate` |
roles:
- name: 'basic:editor'
global: true
version: 3
from:
- name: 'basic:editor'
global: true
- name: 'fixed:roles:writer'
global: true
```
As an example, here is a small bash script that fetches the role, modifies it using `jq` and updates it:
- Or add the following permissions to the `basic:editor` role, using provisioning or the [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}):
```bash
# Fetch the role, modify it to add the desired permissions and increment its version
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' \
-X GET '<grafana_url>/api/access-control/roles/basic_editor' | \
jq 'del(.created)| del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq '.permissions += [{"action": "roles:read", "scope": "roles:*"}, {"action": "roles:write", "scope": "permissions:type:delegate"}, {"action": "roles:delete", "scope": "permissions:type:delegate"}]' > /tmp/basic_editor.json
| action | scope |
| -------------- | --------------------------- |
| `roles:read` | `roles:*` |
| `roles:write` | `permissions:type:delegate` |
| `roles:delete` | `permissions:type:delegate` |
# Update the role
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' -H 'Content-Type: application/json' \
-X PUT-d @/tmp/basic_editor.json '<grafana_url>/api/access-control/roles/basic_editor'
```
- Or add the `fixed:roles:writer` role permissions to the `basic:editor` role using the `role > from` list of your provisioning file:
```yaml
apiVersion: 2
roles:
- name: 'basic:editor'
global: true
version: 3
from:
- name: 'basic:editor'
global: true
- name: 'fixed:roles:writer'
global: true
```
> **Note:** Any user or service account with the ability to modify roles can only create, update, or delete roles with permissions they have been granted. For example, a user with the `Editor` role would be able to create and manage roles only with the permissions they have or with a subset of them.
@@ -200,32 +214,46 @@ roles:
If you want your `Viewers` to create reports, [update the `Viewer` basic role permissions]({{< ref "./manage-rbac-roles.md#update-basic-role-permissions" >}}). There are two ways to achieve this:
- Add the `fixed:reports:writer` role permissions to the `basic:viewer` role using the `role > from` list of your provisioning file:
```yaml
apiVersion: 2
roles:
- name: 'basic:viewer'
global: true
version: 3
from:
- name: 'basic:viewer'
global: true
- name: 'fixed:reports:writer'
global: true
```
> **Note:** The `fixed:reports:writer` role assigns more permissions than just creating reports. For more information about fixed role permission assignments, refer to [Fixed role definitions]({{< relref "./rbac-fixed-basic-role-definitions/#fixed-role-definitions" >}}).
- Add the following permissions to the `basic:viewer` role, using provisioning or the [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}):
| Action | Scope |
| ---------------- | ------------------------------- |
| `reports:create` | n/a |
| `reports:write` | `reports:*` <br> `reports:id:*` |
| `reports:read` | `reports:*` |
| `reports:send` | `reports:*` |
| Action | Scope |
| ---------------- | ------------------------------- |
| `reports:create` | n/a |
| `reports:write` | `reports:*` <br> `reports:id:*` |
| `reports:read` | `reports:*` |
| `reports:send` | `reports:*` |
As an example, here is a small bash script that fetches the role, modifies it using `jq` and updates it:
```bash
# Fetch the role, modify it to add the desired permissions and increment its version
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' \
-X GET '<grafana_url>/api/access-control/roles/basic_viewer' | \
jq 'del(.created)| del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq '.permissions += [{"action": "reports:create"}, {"action": "reports:read", "scope": "reports:*"}, {"action": "reports:write", "scope": "reports:*"}, {"action": "reports:send", "scope": "reports:*"}]' > /tmp/basic_viewer.json
# Update the role
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' -H 'Content-Type: application/json' \
-X PUT-d @/tmp/basic_viewer.json '<grafana_url>/api/access-control/roles/basic_viewer'
```
- Or add the `fixed:reports:writer` role permissions to the `basic:viewer` role using the `role > from` list of your provisioning file:
```yaml
apiVersion: 2
roles:
- name: 'basic:viewer'
global: true
version: 3
from:
- name: 'basic:viewer'
global: true
- name: 'fixed:reports:writer'
global: true
```
> **Note:** The `fixed:reports:writer` role assigns more permissions than just creating reports. For more information about fixed role permission assignments, refer to [Fixed role definitions]({{< relref "./rbac-fixed-basic-role-definitions/#fixed-role-definitions" >}}).
### Prevent a Grafana Admin from creating and inviting users
@@ -239,27 +267,41 @@ The permissions to remove are:
There are two ways to achieve this:
- Use the `role > from` list and `permission > state` option of your provisioning file:
- Use [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}).
```yaml
apiVersion: 2
As an example, here is a small bash script that fetches the role, modifies it using `jq` and updates it:
roles:
- name: 'basic:editor'
global: true
version: 3
from:
- name: 'basic:editor'
global: true
permissions:
- action: 'users:create'
state: 'absent'
- action: 'org.users:add'
scope: 'users:*'
state: 'absent'
```
```bash
# Fetch the role, modify it to remove the undesired permissions and increment its version
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' \
-X GET '<grafana_url>/api/access-control/roles/basic_grafana_admin' | \
jq 'del(.created)| del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq 'del(.permissions[] | select (.action == "users:create")) | del(.permissions[] | select (.action == "org.users:add" and .scope == "users:*"))' > /tmp/basic_grafana_admin.json
- Or use [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}).
# Update the role
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' -H 'Content-Type: application/json' \
-X PUT-d @/tmp/basic_grafana_admin.json '<grafana_url>/api/access-control/roles/basic_grafana_admin'
```
- Or use the `role > from` list and `permission > state` option of your provisioning file:
```yaml
apiVersion: 2
roles:
- name: 'basic:grafana_admin'
global: true
version: 3
from:
- name: 'basic:grafana_admin'
global: true
permissions:
- action: 'users:create'
state: 'absent'
- action: 'org.users:add'
scope: 'users:*'
state: 'absent'
```
### Prevent Viewers from accessing an App Plugin
@@ -287,29 +329,44 @@ If you want to revoke their access to the On Call App plugin, you need to:
Here are two ways to achieve this:
- Use the `role > from` list and `permission > state` option of your provisioning file:
- Use [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}).
```yaml
---
apiVersion: 2
As an example, here is a small bash script that fetches the role, modifies it using `jq` and updates it:
roles:
- name: 'basic:viewer'
version: 8
global: true
from:
- name: 'basic:viewer'
global: true
permissions:
- action: 'plugins.app:access'
scope: 'plugins:*'
state: 'absent'
- action: 'plugins.app:access'
scope: 'plugins:id:kentik-connect-app'
state: 'present'
```
```bash
# Fetch the role, modify it to remove the undesired permissions, add the new permission and increment its version
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' \
-X GET '<grafana_url>/api/access-control/roles/basic_viewer' | \
jq 'del(.created)| del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq 'del(.permissions[] | select (.action == "plugins.app:access" and .scope == "plugins:*"))' | \
jq '.permissions += [{"action": "plugins.app:access", "scope": "plugins:id:kentik-connect-app"}]' > /tmp/basic_viewer.json
- Or use [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}).
# Update the role
curl -H 'Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt' -H 'Content-Type: application/json' \
-X PUT-d @/tmp/basic_viewer.json '<grafana_url>/api/access-control/roles/basic_viewer'
```
- Or use the `role > from` list and `permission > state` option of your provisioning file:
```yaml
---
apiVersion: 2
roles:
- name: 'basic:viewer'
version: 8
global: true
from:
- name: 'basic:viewer'
global: true
permissions:
- action: 'plugins.app:access'
scope: 'plugins:*'
state: 'absent'
- action: 'plugins.app:access'
scope: 'plugins:id:kentik-connect-app'
state: 'present'
```
### Manage user permissions through teams
@@ -36,6 +36,12 @@ The following tables list permissions associated with basic and fixed roles.
The following table has the existing built-in fixed role definitions. Other fixed roles might be added by plugins installed in Grafana.
The UUID presented here can be used as an identifier for [Terraform provisioning](../rbac-terraform-provisioning).
{{< admonition type="caution" >}}
These UUIDs won't be available if your instance was created before Grafana v10.2.0.
To learn how to use the roles API to determine the role UUIDs, refer to [Manage RBAC roles](/docs/grafana/<GRAFANA_VERSION>/administration/roles-and-permissions/access-control/manage-rbac-roles/).
{{< /admonition >}}
| Fixed role | UUID | Permissions | Description |
| -------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fixed:alerting:reader` | `fixed_O2oP1_uBFozI2i93klAkcvEWR30` | All permissions from `fixed:alerting.rules:reader` <br>`fixed:alerting.instances:reader`<br>`fixed:alerting.notifications:reader` | Read-only permissions for all Grafana, Mimir, Loki and Alertmanager alert rules\*, alerts, contact points, and notification policies.[\*](#alerting-roles) |
+1 -1
View File
@@ -16,7 +16,7 @@ weight: 114
hero:
title: Grafana Alerting
level: 1
image: /media/docs/alerting/alerting-bell-icon.png
image: /media/docs/grafana-cloud/alerting-and-irm/grafana-icon-alerting.svg
width: 100
height: 100
description: Grafana Alerting allows you to learn about problems in your systems moments after they occur.
@@ -269,6 +269,8 @@ You can also configure the alert instance state when its evaluation returns an e
| Normal | Sets alert instance state to `Normal`. |
| Keep Last State | Maintains the alert instance in its last state. Useful for mitigating temporary issues, refer to [Keep last state](ref:keep-last-state). |
When you configure the No data or Error behavior to `Alerting` or `Normal`, Grafana will attempt to keep a stable set of fields under notification `Values`. If your query returns no data or an error, Grafana re-uses the latest known set of fields in `Values`, but will use `-1` in place of the measured value.
## Create alerts from panels
Create alerts from any panel type. This means you can reuse the queries in the panel and create alerts based on them.
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Discord
title: Configure Discord for Alerting
weight: 300
weight: 10
---
# Configure Discord for Alerting
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Email
title: Configure email for Alerting
weight: 300
weight: 20
---
# Configure email for Alerting
@@ -0,0 +1,57 @@
---
canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/integrations/configure-google-chat/
description: Configure the Google Chat integration to receive notifications when your alerts are firing
keywords:
- grafana
- alerting
- Google Chat
- integration
labels:
products:
- cloud
- enterprise
- oss
menuTitle: Google Chat
title: Configure Google Chat for Alerting
weight: 30
---
# Configure Google Chat for Alerting
Use the Grafana Alerting - Google Chat integration to receive alert notifications in your Google Chat space when your Grafana alert rules are triggered and resolved.
## Before you begin
Create a Webhook to enable Grafana to send alert notifications to a Google Chat space.
To create a Webhook in Google Chat space, complete the following steps.
1. Follow the steps in [Google's Chat app guide](https://developers.google.com/workspace/chat/quickstart/webhooks#create_a_webhook).
1. Copy the Webhook URL.
## Procedure
To create your Google Chat integration in Grafana Alerting, complete the following steps.
1. Navigate to **Alerts & IRM** -> **Alerting** -> **Contact points**.
1. Click **+ Add contact point**.
1. Enter a contact point name.
1. From the Integration list, select **Google Chat**.
1. In the **URL** field, paste in your Webhook URL.
1. Click **Test** to check that your integration works.
A test alert notification should be sent to the Google Chat space that you associated with the Webhook.
1. Click **Save contact point**.
## Next steps
The Google Chat contact point is ready to receive alert notifications.
To add this contact point to your alert, complete the following steps.
1. In Grafana, navigate to **Alerting** > **Alert rules**.
1. Edit or create a new alert rule.
1. Scroll down to the **Configure labels and notifications** section.
1. Under **Notifications** click **Select contact point**.
1. From the drop-down menu, select the previously created contact point.
1. Click **Save rule and exit**.
@@ -18,7 +18,7 @@ labels:
- oss
menuTitle: Grafana OnCall
title: Configure Grafana OnCall for Alerting
weight: 300
weight: 40
---
# Configure Grafana OnCall for Alerting
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Opsgenie
title: Configure Opsgenie for Alerting
weight: 300
weight: 60
---
# Configure Opsgenie for Alerting
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Slack
title: Configure Slack for Alerting
weight: 300
weight: 80
refs:
nested-policy:
- pattern: /docs/grafana/
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Microsoft Teams
title: Configure Microsoft Teams for Alerting
weight: 300
weight: 50
---
# Configure Microsoft Teams for Alerting
@@ -22,15 +22,16 @@ Use the Grafana Alerting - Microsoft Teams integration to receive notifications
## Before you begin
To set up Microsoft Teams for integration with Grafana Alerting, you need to create an incoming Webhook. This allows Grafana to send alert notifications to Microsoft Teams channels.
To set up Microsoft Teams for integration with Grafana Alerting, create a new workflow that accepts Webhook requests. This allows Grafana to send alert notifications to Microsoft Teams channels.
### Create an incoming Webhook in Microsoft Teams
### Create a workflow in Microsoft Teams
1. To add an incoming Webhook to a Teams channel, follow the steps in the [Create an Incoming Webhook guide](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet#create-an-incoming-webhook).
1. To create a new workflow, follow the steps in [Create flows in Microsoft Teams](https://learn.microsoft.com/en-us/power-automate/teams/teams-app-create).
1. Microsoft provides a template library. You can use the template **Post to a channel when a webhook request is received**.
1. At the end of workflow creation wizard, copy the URL that is provided.
Note: The steps to create incoming Webhooks may vary depending on the version of Microsoft Teams you are using. You can switch between the "New Teams" and "Classic Teams" tabs to view the relevant instructions for your version.
1. Copy the Webhook URL.
**Note**
If you chose a private channel for the target of the workflow, you need to edit workflow before using it. Expand the step "Send each adaptive card", and then expand action "Post your own adaptive card as the Flow bot to a channel". Change "Post as" to User, and save the workflow.
## Procedure
@@ -57,3 +58,7 @@ To add this contact point to your alert, complete the following steps.
1. Under Notifications click **Select contact point**.
1. From the drop-down menu, select the previously created contact point.
1. **Click Save rule and exit**.
## Troubleshooting
- If Grafana reports that notification was sent successfully but it was not delivered to the channel, check the workflow's run history. You can find it in the workflow details page.
@@ -13,7 +13,7 @@ labels:
- oss
menuTitle: Telegram
title: Configure Telegram for Alerting
weight: 300
weight: 90
---
# Configure Telegram for Alerting
@@ -14,7 +14,7 @@ labels:
- oss
menuTitle: PagerDuty
title: Configure PagerDuty for Alerting
weight: 400
weight: 70
---
# Configure PagerDuty for Alerting
@@ -21,7 +21,7 @@ labels:
- oss
menuTitle: Webhook notifier
title: Configure the webhook notifier for Alerting
weight: 200
weight: 100
---
# Configure the webhook notifier for Alerting
@@ -68,7 +68,7 @@ Examples of labels are `server=server1` or `team=backend`. Each alert rule can h
For example, an alert instance might have the label set `{alertname="High CPU usage",server="server1"}` while another alert instance might have the label set `{alertname="High CPU usage",server="server2"}`. These are two separate alert instances because although their `alertname` labels are the same, their `server` labels are different.
{{< figure alt="Image shows an example of an alert instance and its labels" src="/static/img/docs/alerting/unified/multi-dimensional-alert.png" >}}
{{< figure alt="Image shows an example of an alert instance and the labels used on the alert instance." src="/static/img/docs/alerting/unified/multi-dimensional-alert.png" >}}
Labels are a fundamental component of alerting:
@@ -131,7 +131,7 @@ Notification templates represent the alternative approach to templating designed
Here is an example of a notification template:
```go
{ define "alerts.message" -}}
{{ define "alerts.message" -}}
{{ if .Alerts.Firing -}}
{{ len .Alerts.Firing }} firing alert(s)
{{ template "alerts.summarize" .Alerts.Firing }}
@@ -33,11 +33,6 @@ refs:
destination: /docs/grafana/<GRAFANA_VERSION>/alerting/fundamentals/alert-rule-evaluation/state-and-health/#alert-instance-state
- pattern: /docs/grafana-cloud/
destination: /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rule-evaluation/state-and-health/#alert-instance-state
alert-rule-health:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/alerting/fundamentals/alert-rule-evaluation/state-and-health/#alert-rule-health
- pattern: /docs/grafana-cloud/
destination: /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rule-evaluation/state-and-health/#alert-rule-health
---
# View alert state and history
@@ -54,9 +49,42 @@ To view the state and health of your alert rules:
1. Click **Alert rules** to view the list of existing alerts.
1. Click an alert rule to view its state, health, and state history.
## View state history
## View state history using the History page
Use the State history view to get insight into how your alert instances behave over time. View information on when a state change occurred, what the previous state was, the current state, any other alert instances that changed their state at the same time as well as what the query value was that triggered the change.
View a history of all alert events generated by your Grafana-managed alert rules from one centralized page. This helps you see patterns in your alerts over time, observe trends, make predictions, and even debug alerts that might be firing too often.
An alert event is displayed each time an alert instance changes its state over a period of time. All alert events are displayed regardless of whether silences or mute timings are set, so youll see a complete set of your data history even if youre not necessarily being notified.
{{% admonition type="note" %}}
For Grafana Enterprise and OSS users:
To try out the new alert history page, enable the `alertingCentralAlertHistory` feature toggle and configure [Loki annotations](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/alerting/set-up/configure-alert-state-history/).
Users can only see the history and transitions of alert rules they have access to (RBAC).
{{% /admonition %}}
To access the History view, complete the following steps.
1. Navigate to **Alerts & IRM** -> **Alerting** -> History.
An Alert Events chart shows your alert activity within a specific time frame. Each alert event represents an alert instance that changed its state at a particular point in time. The history of the data is displayed over a period of time.
1. Filter by labels either by entering a label or clicking a label of an instance in the list of events.
1. Filter by current state and previous state by selecting a state from the drop-down or by clicking the states from the list of events.
Zoom in by dragging on the chart or use the time picker.
{{% admonition type="note" %}}
If you exceed the 5000 alerts limit, you may see data missing from the chart. To see complete results, narrow the time frame.
{{% /admonition %}}
1. Under the chart, there is a list of events. Each event represents a state change on an alert instance. Expand a row to see the number of transitions for the alert instance, a state graph, and the value in the transition.
1. Click the alert rule name to jump to the History tab in the Alert Rule view.
## View state history using the State history view
Use the State history view to get insight into how your individual alert instances behave over time.
View information on when a state change occurred, what the previous state was, the current state, any other alert instances that changed their state at the same time as well as what the query value was that triggered the change.
{{% admonition type="note" %}}
Open source users must [configure alert state history](/docs/grafana/latest/alerting/set-up/configure-alert-state-history/) in order to be able to access the view.
@@ -83,5 +111,3 @@ To access the State history view, complete the following steps.
The value shown for each instance is for each part of the expression that was evaluated.
1. Click the labels to filter and narrow down the results.
{{< figure src="/media/docs/alerting/state-history.png" max-width="750px" >}}
@@ -81,7 +81,7 @@ Grafana legacy alerting (dashboard alerts) has been deprecated since Grafana v9.
#### Migration path
The new Grafana Alerting was introduced in Grafana 8 and is a superset of legacy alerting. Learn how to migrate your alerts in the [Upgrade Alerting documentation]({{< relref "./v10.4/alerting/set-up/migrating-alerts/" >}}).
The new Grafana Alerting was introduced in Grafana 8 and is a superset of legacy alerting. Learn how to migrate your alerts in the [Upgrade Alerting documentation](https://grafana.com/docs/grafana/v10.4/alerting/set-up/migrating-alerts/).
### API keys are migrating to service accounts
@@ -17,7 +17,7 @@ title: Dashboard URL variables
description: Use variables in dashboard URLs to add more context to your links
weight: 250
refs:
add-ad-hoc-filters:
ad-hoc-filters:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/variables/add-template-variables/#add-ad-hoc-filters
- pattern: /docs/grafana-cloud/
@@ -27,12 +27,7 @@ refs:
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/build-dashboards/manage-dashboard-links/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana-cloud/visualizations/dashboards/build-dashboards/manage-dashboard-links/
linking-overview:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/build-dashboards/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana-cloud/visualizations/dashboards/build-dashboards/
template-and-variables:
variables:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/variables/
- pattern: /docs/grafana-cloud/
@@ -41,22 +36,37 @@ refs:
# Dashboard URL variables
Grafana can apply variable values passed as query parameters in dashboard URLs.
For more information, refer to [Manage dashboard links](ref:manage-dashboard-links) and [Templates and variables](ref:template-and-variables).
Dashboard URL [variables](ref:variables) allow you to provide more context when you share a dashboard URL.
## Passing variables as query parameters
For example, you could share a basic URL to your dashboard that looks like this:
Grafana interprets query string parameters prefixed with `var-` as variables in the given dashboard.
```
https://${your-domain}/path/to/your/dashboard
```
For example, in this URL:
This allows someone to navigate to the dashboard, but doesn't provide any helpful context that might be available.
Instead, you can add dashboard variables, passed as query parameters in the dashboard URL, to provide a URL like this:
```
https://${your-domain}/path/to/your/dashboard?var-example=value
```
The query parameter `var-example=value` represents the dashboard variable `example` with a value of `value`.
This allows you to provide added context to the dashboard when someone navigates to it.
### Passing multiple values for a variable
## Variables as query parameters
Grafana interprets query string parameters prefixed with `var-` as variables in the given dashboard.
For example:
```
https://${your-domain}/path/to/your/dashboard?var-example=value
```
In this URL, the query parameter `var-example=value` represents the dashboard variable `example` with a value of `value`.
### Multiple values for a variable
To pass multiple values, repeat the variable parameter once for each value:
@@ -68,34 +78,38 @@ Grafana interprets `var-example=value1&var-example=value2` as the dashboard vari
### Example
This example in [Grafana Play](https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h) passes the variable `server` with multiple values, and the variables `app` and `interval` with a single value each.
[This dashboard in Grafana Play](https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h) passes the variable `server` with multiple values, and the variables `app` and `interval` with a single value each.
## Adding variables to dashboard links
## Ad hoc filters
Grafana can add variables to dashboard links when you generate them from a dashboard's settings. For more information and steps to add variables, refer to [Manage dashboard links](ref:manage-dashboard-links).
Ad hoc filters apply key/value filters to all metric queries that use the specified data source. For more information, refer to [Add ad hoc filters](ref:ad-hoc-filters).
## Passing ad hoc filters
To pass an ad hoc filter as a query parameter, use the variable syntax to pass the ad hoc filter variable. Then provide the key, operator, and value as a pipe-separated list.
Ad hoc filters apply key/value filters to all metric queries that use a specified data source. For more information, refer to [Add ad hoc filters](ref:add-ad-hoc-filters).
To pass an ad hoc filter as a query parameter, use the variable syntax to pass the ad hoc filter variable, and also provide the key, the operator as the value, and the value as a pipe-separated list.
For example, in this URL:
For example:
```
https://${your-domain}/path/to/your/dashboard?var-adhoc=example_key|=|example_value
```
The query parameter `var-adhoc=key|=|value` applies the ad hoc filter configured as the `adhoc` dashboard variable using the `example_key` key, the `=` operator, and the `example_value` value.
In this URL, the query parameter `var-adhoc=key|=|value` applies the ad hoc filter configured as the `adhoc` dashboard variable using the `example_key` key, the `=` operator, and the `example_value` value.
{{% admonition type="note" %}}
When sharing URLs with ad hoc filters, remember to encode the URL. In the above example, replace the pipes (`|`) with `%7C` and the equality operator (`=`) with `%3D`.
{{% /admonition %}}
{{< admonition type="note" >}}
When sharing URLs with ad hoc filters, remember to encode the URL. In the preceding example, replace the pipes (`|`) with `%7C` and the equality operator (`=`) with `%3D`.
{{< /admonition >}}
### Example
[This example in Grafana Play](https://play.grafana.org/d/000000002/influxdb-templated?orgId=1&var-datacenter=America&var-host=All&var-summarize=1m&var-adhoc=datacenter%7C%3D%7CAmerica) passes the ad hoc filter variable `adhoc` with the filter value `datacenter = America`.
[This dashboard in Grafana Play](https://play.grafana.org/d/000000002/influxdb-templated?orgId=1&var-datacenter=America&var-host=All&var-summarize=1m&var-adhoc=datacenter%7C%3D%7CAmerica) passes the ad hoc filter variable `adhoc` with the filter value `datacenter = America`.
## Controlling time range using the URL
## Time range control using the URL
To set a dashboard's time range, use the `from`, `to`, `time`, and `time.window` query parameters. Because these are not variables, they do not require the `var-` prefix. For more information, see the [Linking overview](ref:linking-overview).
{{< docs/shared lookup="dashboards/time-range-URLs.md" source="grafana" version="<GRAFANA_VERSION>" >}}
## Variables in dashboard links
When you create dashboard links the dashboard settings, you can have current dashboard variables included in the link by selecting that option:
{{< figure src="/media/docs/grafana/dashboards/screenshot-dashboard-link-variables-11.1.png" max-width="500px" alt="Dashboard link page with variables option selected" >}}
For steps to add variables to dashboard links, refer to [Manage dashboard links](ref:manage-dashboard-links).
@@ -76,9 +76,9 @@ refs:
destination: /docs/grafana-cloud/visualizations/dashboards/use-dashboards/#set-dashboard-time-range
send-report:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/
destination: /docs/grafana/<GRAFANA_VERSION>/developers/http_api/reporting/#send-a-report
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/
destination: /docs/grafana-cloud/developer-resources/api-reference/http-api/reporting/#send-a-report
smtp:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/setup-grafana/configure-grafana/#smtp
@@ -129,6 +129,7 @@ Only organization administrators can create reports by default. You can customiz
- If you selected the PDF format option:
- Select an orientation for the report: **Portrait** or **Landscape**.
- Select a layout for the generated report: **Simple** or **Grid**. The simple layout renders each panel as full-width across the PDF. The grid layout renders the PDF with the same panel arrangement and width as the source dashboard.
- Select a zoom level for the report. Zoom in to enlarge text in your PDF, or zoom out to see more data (like table columns) per panel.
- Click **Preview PDF** to view a rendered PDF with the options you selected.
1. Schedule report.
- Enter scheduling information. Options vary depending on the frequency selected.
@@ -264,8 +264,4 @@ Selecting the **Auto** interval schedules a refresh based on the query time rang
### Control the time range using a URL
You can control the time range of a dashboard by providing the following query parameters in the dashboard URL:
- `from`: Defines the lower limit of the time range, specified in `ms`, `epoch`, or [relative time](#relative-time-range)
- `to`: Defines the upper limit of the time range, specified in `ms`, `epoch`, or [relative time](#relative-time-range)
- `time` and `time.window`: Defines a time range from `time-time.window/2` to `time+time.window/2`. Both parameters should be specified in `ms`. For example `?time=1500000000000&time.window=10000` results in 10s time range from 1499999995000 to 1500000005000
{{< docs/shared lookup="dashboards/time-range-URLs.md" source="grafana" version="<GRAFANA_VERSION>" >}}
@@ -253,7 +253,9 @@ To enable cross-account observability, complete the following steps:
1. Add [two API actions]({{< relref "../../aws-cloudwatch#cross-account-observability-permissions" >}}) to the IAM policy attached to the role/user running the plugin.
Cross-account querying is available in the plugin through the `Logs` mode and the `Metric search` mode. Once you have it configured correctly, you'll see a "Monitoring account" badge displayed in the query editor header.
Cross-account querying is available in the plugin through the **Logs**, **Metric search**, and **Metric Insights** modes.
After you have it configured, you'll see a **Monitoring account** badge in the query editor header.
To support cross-account query building in the **Metric Insight** builder mode, the `cloudwatchMetricInsightsCrossAccount` feature toggle should be enabled.
{{< figure src="/static/img/docs/cloudwatch/cloudwatch-monitoring-badge-9.3.0.png" max-width="1200px" caption="Monitoring account badge" >}}
+1 -1
View File
@@ -76,7 +76,7 @@ Once you've added the Loki data source, you can [configure it](#configure-the-da
To troubleshoot configuration and other issues, check the log file located at `/var/log/grafana/grafana.log` on Unix systems, or in `<grafana_install_dir>/data/log` on other platforms and manual installations.
{{% /admonition %}}
## Provision the Loki data source
## Provision the data source
You can define and configure the data source in YAML files as part of Grafana's provisioning system.
For more information about provisioning, and for available configuration options, refer to [Provisioning Grafana](ref:provisioning-data-sources).
@@ -250,7 +250,7 @@ The resulting table panel:
If you set the **Format** setting in the query editor to **Time series**, then the query must have a column named `time` that returns either a SQL datetime or any numeric datatype representing Unix epoch in seconds.
Result sets of time series queries must also be sorted by time for panels to properly visualize the result.
A time series query result is returned in a [wide data frame format](/developers/plugin-tools/introduction/data-frames#wide-format).
A time series query result is returned in a [wide data frame format](https://grafana.com/developers/plugin-tools/key-concepts/data-frames#wide-format).
Any column except time or of type string transforms into value fields in the data frame query result.
Any string column transforms into field labels in the data frame query result.
+1 -1
View File
@@ -352,7 +352,7 @@ The examples in this section query the following table:
If the `Format as` query option is set to `Time Series` then the query must have a column named time that returns either a SQL datetime or any numeric datatype representing Unix epoch in seconds. In addition, result sets of time series queries must be sorted by time for panels to properly visualize the result.
A time series query result is returned in a [wide data frame format](https://grafana.com/developers/plugin-tools/introduction/data-frames#wide-format). Any column except time or of type string transforms into value fields in the data frame query result. Any string column transforms into field labels in the data frame query result.
A time series query result is returned in a [wide data frame format](https://grafana.com/developers/plugin-tools/key-concepts/data-frames#wide-format). Any column except time or of type string transforms into value fields in the data frame query result. Any string column transforms into field labels in the data frame query result.
> For backward compatibility, there's an exception to the above rule for queries that return three columns including a string column named metric. Instead of transforming the metric column into field labels, it becomes the field name, and then the series name is formatted as the value of the metric column. See the example with the metric column below.
+1 -1
View File
@@ -280,7 +280,7 @@ The resulting table panel:
If you set Format as to _Time series_, then the query must have a column named time that returns either a SQL datetime or any numeric datatype representing Unix epoch in seconds. In addition, result sets of time series queries must be sorted by time for panels to properly visualize the result.
A time series query result is returned in a [wide data frame format](https://grafana.com/developers/plugin-tools/introduction/data-frames#wide-format). Any column except time or of type string transforms into value fields in the data frame query result. Any string column transforms into field labels in the data frame query result.
A time series query result is returned in a [wide data frame format](https://grafana.com/developers/plugin-tools/key-concepts/data-frames#wide-format). Any column except time or of type string transforms into value fields in the data frame query result. Any string column transforms into field labels in the data frame query result.
> For backward compatibility, there's an exception to the above rule for queries that return three columns including a string column named metric. Instead of transforming the metric column into field labels, it becomes the field name, and then the series name is formatted as the value of the metric column. See the example with the metric column below.
+10 -10
View File
@@ -21,24 +21,24 @@ weight: 1150
refs:
flame-graph:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/panels-visualizations/visualizations/flame-graph/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/panels-visualizations/visualizations/flame-graph/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/panels-visualizations/visualizations/flame-graph/
destination: https://grafana.com/docs/grafana-cloud/visualizations/panels-visualizations/visualizations/flame-graph/
configure-tempo-data-source:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/datasources/tempo/configure-tempo-data-source/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/datasources/tempo/configure-tempo-data-source/
- pattern: /docs/grafana-cloud/
destination: docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source/
destination: https://grafana.com/docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source/
explore:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/explore/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/explore/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/explore/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/explore/
provisioning-data-sources:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/administration/provisioning/#datasources
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/administration/provisioning/#datasources
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/administration/provisioning/#datasources
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/administration/provisioning/#datasources
---
# Grafana Pyroscope data source
@@ -73,9 +73,9 @@ For more information, refer to the [Traces to profile section](ref:configure-tem
{{< youtube id="AG8VzfFMLxo" >}}
## Provision the Grafana Pyroscope data source
## Provision the Pyroscope data source
You can modify the Grafana configuration files to provision the Grafana Pyroscope data source.
You can modify the Grafana configuration files to provision the Pyroscope data source.
To learn more, and to view the available provisioning settings, refer to [provisioning documentation](ref:provisioning-data-sources).
Here is an example configuration:
+6 -6
View File
@@ -31,22 +31,22 @@ refs:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/panels-visualizations/visualizations/node-graph/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/panels-visualizations/visualizations/node-graph/
destination: https://grafana.com/docs/grafana-cloud/visualizations/panels-visualizations/visualizations/node-graph/
configure-tempo-data-source:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/datasources/tempo/configure-tempo-data-source/#provision-the-data-source
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/datasources/tempo/configure-tempo-data-source/#provision-the-data-source
- pattern: /docs/grafana-cloud/
destination: docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source/#provision-the-data-source
destination: https://grafana.com/docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source/
exemplars:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/fundamentals/exemplars/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/fundamentals/exemplars/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/fundamentals/exemplars/
destination: https://grafana.com/docs/grafana/<GRAFANA_VERSION>/fundamentals/exemplars/
variable-syntax:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/variables/variable-syntax/
- pattern: /docs/grafana-cloud/
destination: /docs/grafana/<GRAFANA_VERSION>/dashboards/variables/variable-syntax/
destination: https://grafana.com/docs/grafana-cloud/visualizations/dashboards/variables/variable-syntax/
explore-trace-integration:
- pattern: /docs/grafana/
destination: /docs/grafana/<GRAFANA_VERSION>/explore/trace-integration/
@@ -58,6 +58,8 @@ refs:
# Configure the Tempo data source
The Tempo data source sets how Grafana connects to your Tempo database and lets you configure features and integrations with other telemetry signals.
To configure basic settings for the Tempo data source, complete the following steps:
1. Click **Connections** in the left-side menu.
@@ -72,7 +74,7 @@ To configure basic settings for the Tempo data source, complete the following st
| **Name** | Sets the name you use to refer to the data source in panels and queries. |
| **Default** | Sets the data source that's pre-selected for new panels. |
| **URL** | Sets the URL of the Tempo instance, such as `http://tempo`. |
| **Basic Auth** | Enables basic authentication to the Tempo data source. |
| **Basic Auth** | Enables authentication to the Tempo data source. |
| **User** | Sets the user name for basic authentication. |
| **Password** | Sets the password for basic authentication. |
@@ -82,11 +84,38 @@ This video explains how to add data sources, including Loki, Tempo, and Mimir, t
{{< youtube id="cqHO0oYW6Ic" start="298" >}}
## Streaming
<!-- The traceQLStreaming toggle will be deprecated in Grafana 11.2 and removed in 11.3. -->
Streaming enables TraceQL query results to be displayed as they become available. Without streaming, no results are displayed until all results have returned.
{{< docs/public-preview product="TraceQL streaming results" >}}
### Requirements
To use streaming, you need to:
- Be running Tempo version 2.2 or newer, or Grafana Enterprise Traces (GET) version 2.2 or newer, or be using Grafana Cloud Traces.
- For self-managed Tempo or GET instances: If your Tempo or GET instance is behind a load balancer or proxy that doesn't supporting gRPC or HTTP2, streaming may not work and should be disabled.
### Activate streaming
For streaming to work for a particular Tempo data source, set your Grafana's `traceQLStreaming` [feature toggle](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/feature-toggles/) to true and set **Streaming** to enabled in your Tempo data source configuration.
![Streaming section in Tempo data source](/media/docs/grafana/data-sources/tempo-data-source-streaming-v11.2.png)
If you are using Grafana Cloud, the `traceQLStreaming` feature toggle is already set to `true` by default.
If the Tempo data source is set to allow streaming but the `traceQLStreaming` feature toggle is set to `false` in Grafana, no streaming will occur.
If the data source has streaming disabled and `traceQLStreaming` is set to `true`, no streaming will happen for that data source.
## Trace to logs
![Trace to logs settings](/media/docs/tempo/tempo-trace-to-logs-9-4.png)
The **Trace to logs** setting configures [trace to logs](ref:explore-trace-integration) that's available when you integrate Grafana with Tempo.
The **Trace to logs** setting configures the [trace to logs feature](ref:explore-trace-integration) that is available when you integrate Grafana with Tempo.
![Trace to logs settings](/media/docs/tempo/tempo-trace-to-logs-9-4.png)
There are two ways to configure the trace to logs feature:
@@ -100,8 +129,9 @@ There are two ways to configure the trace to logs feature:
You can also click **Open advanced data source picker** to see more options, including adding a data source.
1. Set start and end time shift. As the logs timestamps may not exactly match the timestamps of the spans in trace it may be necessary to search in larger or shifted time range to find the desired logs.
1. Select which tags to use in the logs query. The tags you configure must be present in the span's attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful, for example, if the tag has dots in the name and the target data source does not allow using dots in labels. In that case, you can for example remap `http.status` (the span attribute) to `http_status` (the data source field). "Data source" in this context can refer to Loki, or another log data source.
1. Optionally switch on the **Filter by trace ID** and/or **Filter by span ID** setting to further filter the logs if your logs consistently contain trace or span IDs.
1. Select which tags to use in the logs query.
The tags you configure must be present in the span's attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful, for example, if the tag has dots in the name and the target data source does not allow using dots in labels. In that case, you can for example remap `http.status` (the span attribute) to `http_status` (the data source field). "Data source" in this context can refer to Loki, or another log data source.
1. Optional: If your logs consistently trace or span IDs, you can use one or both of the **Filter by trace ID** and **Filter by span ID** settings.
### Configure a custom query
@@ -141,19 +171,33 @@ There are two ways to configure the trace to metrics feature:
- Use a basic configuration with a default query, or
- Configure one or more custom queries where you can use a [template language](ref:variable-syntax) to interpolate variables from the trace or span.
### Simple config
Refer to the Trace to metrics configuration options section to learn about the available options.
### Set up a simple configuration
To use a simple configuration, follow these steps:
1. Select a metrics data source from the **Data source** drop-down.
1. Optional: Change **Span start time shift** and **Span end time shift**. You can change one or both of these settings. The default start time shift is -2 minutes and 2 minutes for end time shift.
1. Optional: Choose any tags to use in the query. If left blank, the default values of `cluster`, `hostname`, `namespace`, `pod`, `service.name` and `service.namespace` are used.
The tags you configure must be present in the spans attributes or resources for a trace to metrics span link to appear. You can optionally configure a new name for the tag. This is useful for example if the tag has dots in the name and the target data source doesn't allow using dots in labels. In that case you can for example remap `service.name` to `service_name`.
1. Do not select **Add query**.
1. Don't select **Add query**.
1. Select **Save and Test**.
### Custom queries
### Set up custom queries
To use custom queries, you need to configure the tags youd like to include in the linked queries.
For each tag, the key is the span attribute name.
In cases where the attribute name would result in an invalid metrics query or doesnt exactly match the desired label name, you can enter the label name as the second value.
For example, you could map the attribute `k8s.pod` to the label `pod`.
You can interpolate the configured tags using the `$__tags` keyword.
For example, when you configure the query `requests_total{$__tags}` with the tags `k8s.pod=pod` and `cluster`, it results in `requests_total{pod="nginx-554b9", cluster="us-east-1"}`.
The label values are dynamically inserted based on the span attributes values.
You can link to any metric youd like, but metrics for span durations, counts, and errors filtered by service or span are a great starting point.
To use custom queries with the configuration, follow these steps:
@@ -174,7 +218,7 @@ To use custom queries with the configuration, follow these steps:
1. Select **Save and Test**.
### Configure trace to metrics
### Trace to metrics configuration options
| Setting name | Description |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -193,7 +237,8 @@ To use custom queries with the configuration, follow these steps:
## Custom query variables
To use a variable in your trace to logs, metrics or profiles you need to wrap it in `${}`. For example, `${__span.name}`.
To use a variable in your trace to logs, metrics, or profiles, you need to wrap it in `${}`.
For example, `${__span.name}`.
| Variable name | Description |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -72,7 +72,7 @@ You use the Service Graph to detect performance issues; track increases in error
## Display the Service Graph
1. [Configure Grafana Agent](/docs/tempo/latest/configuration/grafana-agent/) or [Tempo or GET](/docs/tempo/latest/metrics-generator/service_graphs/#tempo) to generate Service Graph data.
1. [Configure Grafana Alloy](https://grafana.com/docs/tempo/latest/configuration/grafana-alloy/) or [Tempo or GET](https://grafana.com/docs/tempo/latest/metrics-generator/service_graphs/#tempo) to generate Service Graph data.
1. Link a Prometheus data source in the Tempo data source's [Service Graph]({{< relref "./configure-tempo-data-source#configure-service-graph" >}}) settings.
1. Navigate to [Explore](ref:explore).
1. Select the Tempo data source.
+29 -3
View File
@@ -61,7 +61,12 @@ refs:
destination: /docs/grafana/<GRAFANA_VERSION>/administration/data-source-management/
---
# Span Filters
# Span filters
When working with traces, especially those comprising a vast number of spans, pinpointing specific spans of interest can be a daunting task.
This is where span filtering comes in.
Located above the trace view, span filters allow you to refine the spans displayed based on specific criteria.
Whether youre looking to identify spans from a certain service, those exceeding a particular duration, or spans tagged with specific attributes, span filtering streamlines the process.
Using span filters, you can filter your spans in the trace timeline viewer. The more filters you add, the more specific are the filtered spans.
@@ -74,6 +79,27 @@ You can add one or more of the following filters:
- Duration
- Tags (which include tags, process tags, and log fields)
To only show the spans you have matched, select the `Show matches only` toggle.
{{< youtube id="VP2XV3IIc80" >}}
<!-- Adding these in case they are needed. -->
## Use span filters
You can access span filters from within the trace view. You can add one or more filters.
The more filters you add, the more specific data that you are filtering.
1. Expand a trace to view individual spans.
1. Select a span to view the span details.
1. Select **Span Filters** to display the available filters.
![Locate span filters in trace view](/media/docs/grafana/data-sources/tempo-span-filters-find.gif)
Query results in the span view update as you select filters.
### Show matches only
For a more focused view, the **Show matches only** toggle ensures only the spans meeting your criteria are displayed. This is particularly useful when sifting through thousands of spans, allowing you to zero in on those that truly matter.
For instance, if youre keen on understanding why a specific request is lagging, or if youre on the hunt for spans without a certain tag, span filtering is your go-to tool.
It even lets you search for spans based on specific tag keys, like cluster.
### Remove a filter
To remove a filter, select the **X** next to the line item.
@@ -53,7 +53,7 @@ Content-Type: application/json
`PUT /api/user/preferences`
**Example Request**:
```http
PUT /api/user/preferences HTTP/1.1
Accept: application/json
@@ -142,7 +142,7 @@ Content-Type: application/json
Update one or more preferences without modifying the others.
`PATCH /api/org/preferences`
**Example Request**:
```http
@@ -170,7 +170,7 @@
"grafanaDependency": {
"type": "string",
"description": "Required Grafana version for this plugin. Validated using https://github.com/npm/node-semver.",
"pattern": "^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x]+)(\\.[0-9x]+))?(\\-[0-9]+)?$"
"pattern": "^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)?(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x\\*]+)?(\\.[0-9x\\*]+)?)?$"
},
"plugins": {
"type": "array",
@@ -179,7 +179,7 @@
"items": {
"type": "object",
"description": "Plugin dependency. Used to display information about plugin dependencies in the Grafana UI.",
"required": ["id", "name", "type", "version"],
"required": ["id", "name", "type"],
"properties": {
"id": {
"type": "string",
@@ -193,7 +193,8 @@
"type": "string"
},
"version": {
"type": "string"
"type": "string",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
}
}
}
@@ -337,10 +338,10 @@
},
"routes": {
"type": "array",
"description": "For data source plugins. Proxy routes used for plugin authentication and adding headers to HTTP requests made by the plugin. For more information, refer to [Authentication for data source plugins](/developers/plugin-tools/create-a-plugin/extend-a-plugin/add-authentication-for-data-source-plugins).",
"description": "For data source plugins. Proxy routes used for plugin authentication and adding headers to HTTP requests made by the plugin. For more information, refer to [Authentication for data source plugins](https://grafana.com/developers/plugin-tools/how-to-guides/data-source-plugins/add-authentication-for-data-source-plugins).",
"items": {
"type": "object",
"description": "For data source plugins. Proxy routes used for plugin authentication and adding headers to HTTP requests made by the plugin. For more information, refer to [Authentication for data source plugins](/developers/plugin-tools/create-a-plugin/extend-a-plugin/add-authentication-for-data-source-plugins).",
"description": "For data source plugins. Proxy routes used for plugin authentication and adding headers to HTTP requests made by the plugin. For more information, refer to [Authentication for data source plugins](https://grafana.com/developers/plugin-tools/how-to-guides/data-source-plugins/add-authentication-for-data-source-plugins).",
"additionalProperties": false,
"properties": {
"path": {
+18
View File
@@ -87,6 +87,24 @@ To open the content outline:
You can then click on any panel icon in the content outline to navigate to that panel.
### Filter logs in content outline
When using Explore with logs, you can filter the logs in the content outline. You can filter by log level, which is currently supported for Elasticsearch and Loki data sources. To select multiple filters, press Command-click on a Mac or Ctrl+Click in Windows.
{{% admonition type="note" %}}
Log levels only show if the datasource supports the log volume histogram and contains multiple levels. Additionally, the query to the data source may have to format the log lines to see the levels. For example, in Loki, the `logfmt` parser commonly will display log levels.
{{% /admonition %}}
{{< figure src="/media/docs/grafana/explore/screenshot-explore-content-outline-logs-filtering-11.2.png" max-width= "950px" caption="Screenshot of Explore content outline logs filtering" >}}
### Pin logs to content outline
When using Explore with logs, you can pin logs to content outline by hovering over a log in the logs panel and clicking on the _Pin to content outline_ icon in the log row menu.
{{< figure src="/media/docs/grafana/explore/screenshot-explore-content-outline-logs-pinning-11.2.png" max-width= "450px" caption="Screenshot of Explore content outline logs pinning" >}}
Clicking on a pinned log opens the [log context modal](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/explore/logs-integration/#log-context), showing the log highlighted in context with other logs. From here, you can also open the log in split mode to preserve the time range in the left pane while having the time range specific to that log in the right pane.
## Share Explore URLs
When using Explore, the URL in the browser address bar updates as you make changes to the queries. You can share or bookmark this URL.
+54 -64
View File
@@ -1,97 +1,87 @@
---
description: Learn more about the Query inspector in Grafana Explore.
labels:
products:
- cloud
- enterprise
- oss
title: Inspector in Explore
weight: 400
keywords:
- Explore
title: Query inspector in Explore
weight: 40
---
# Inspector in Explore
# Query inspector in Explore
The inspector helps you understand and troubleshoot your queries. You can inspect the raw data, export that data to a comma-separated values (CSV) file, export log results in TXT format, and view query requests.
The Query inspector in Grafana Explore gives you detailed statistics regarding your query, which helps you understand and troubleshoot issues with your queries. Query inspector also lets you inspect raw data, export data to a comma-separated values (CSV) file, export log results in TXT format, and view query requests.
## Inspector UI
## Query inspector UI
The inspector has following tabs:
- **Stats tab -** Shows how long your query takes and how much it returns.
- **Query tab -** Shows you the requests to the server sent when Grafana queries the data source.
- **JSON tab -** Allows you to view and copy the data JSON and data frame structure JSON.
- **Data tab -** Shows the raw data returned by the query.
- **Error tab -** Shows the error. Only visible when query returns error.
## Inspector tasks
You can perform a variety of tasks in the Explore inspector.
### Open the Inspector
To open Query inspector:
1. Go to the Explore page.
1. Run the query you would like to inspect.
1. Click the **Inspector** button.
1. Click **Query inspector**.
The inspector pane opens on the bottom of the screen.
The Query inspector pane opens on the bottom of the Explore page, where you see the following tabs:
### Inspect raw query results
- **Stats tab -** Shows statistics regarding the query, including the amount of time it takes to run the query, data processing time and the amount of data returned.
- **Query tab -** Provides raw request and response data and time when Grafana queries the data source.
- **JSON tab -** Allows you to view and copy the JSON data and the JSON data frame structure.
- **Data tab -** Shows the raw data returned by the query. You can download the information to a CSV file.
- **Error tab -** Shows any errors. _Only visible if the query returns an error._
You can view raw query results, that is the data returned by the query in a table.
## Query inspector Stats tab
In the **Inspector** tab, click the **Data** tab.
You can inspect query performance in the **Stats tab**, which displays statistics that tell you how long your query takes, how many queries you send, the number of rows returned and trace IDs. This information can help you troubleshoot your queries, especially if any of the numbers are unexpectedly high or low.
For multiple queries or for queries multiple nodes, there are additional options.
1. Open the inspector.
1. Click the **Stats tab**.
- **Show data frame:** Select the result set data you want to view.
- **Series joined by time:** View the raw data from all of your queries at once, one result set per column. You can click a column heading to sort the data.
Statistics display in read-only format.
### Download raw query results as CSV
## Query inspector Query tab
Grafana generates a CSV file in your default browser download location. You can open it in the viewer of your choice.
View raw request and response in the Query tab.
1. In the **Inspector** tab, get raw query results by following the instructions [described in Inspect raw query results](#inspect-raw-query-results).
1. Refine query settings until you can see the raw data that you want to export.
1. Click **Download CSV**.
1. Open the Query inspector and click the **Query tab**.
1. Click **Refresh**.
In order to download a CSV file specifically formatted for Excel, expand **Data options** and then enable the **Download for Excel** toggle before you click the **Download CSV** option.
Grafana sends the query to the server and displays the result. You can drill down on specific portions of the query, expand or collapse all of it. Click **Copy to clipboard** to copy the data to use in other applications.
## Query inspector JSON tab
View data results as JSON and as data frame JSON models in the **JSON tab**.
1. Open the Query inspector and click the **JSON tab**.
1. Choose one of the following options from the **Select source** dropdown menu:
- **Panel data -** Displays a JSON object representing the data retrieved by the visualization from Explore.
- **DataFrame JSON (from query) -** Displays the raw data result set without transformations and field configuration applied.
## Query inspector Data tab
View, inspect and download raw query results in the **Data tab**.
1. Open the Query inspector and click the **Data** tab.
1. Click **Data options** to to view options under **Show data frame**.
1. Select a data results set from the dropdown menu.
1. For multiple queries or for queries multiple nodes, you can select **Series joined by time** from the dropdown to view the raw data from all of your queries at once, one result set per column. You can click any column heading to sort the data.
1. Toggle **Formatted data** to match the format in the panel.
1. Toggle **Download for Excel** to download a CSV file specifically formatted for Excel.
1. To download the results to a CSV file click **Download CSV** in the upper right of the Query inspector pane.
### Download log results as TXT
Grafana generates a TXT file in your default browser download location. You can open it in the viewer of your choice.
Based on the type of data source (Loki, for example), or when logs are present in the results set, Grafana generates a TXT file of log raw data results in your default browser download location. You can open it in the viewer of your choice.
1. Open the inspector.
1. Inspect the log query results as described above.
1. Click **Query inspector**.
1. Click the **Data tab** to view log query results.
1. Click **Download logs**.
### Download trace results
Based on the data source type, Grafana generates a JSON file for the trace results in one of the supported formats: Jaeger, Zipkin, or OTLP formats.
Based on the data source type (Tempo, for example), Grafana generates a JSON file for trace results in one of these supported formats: Jaeger, Zipkin, or OTLP.
1. Open the inspector.
1. Inspect the trace query results [as described above](#inspect-raw-query-results).
1. Click **Query inspector**.
1. Click the **Data tab** to view traces results.
1. Click **Download traces**.
### Inspect query performance
The Stats tab displays statistics that tell you how long your query takes, how many queries you send, and the number of rows returned. This information can help you troubleshoot your queries, especially if any of the numbers are unexpectedly high or low.
1. Open the inspector.
1. Navigate to the **Stats** tab.
Statistics are displayed in read-only format.
### View JSON model
You can explore and export data as well as data frame JSON models.
1. In the Inspector panel, click the **JSON** tab.
1. From the Select source dropdown, choose one of the following options:
- **Data -** Displays a JSON object representing the data that was returned to Explore.
- **DataFrame structure -** Displays the raw result set.
1. You can expand or collapse portions of the JSON to view separate sections. You can also click the **Copy to clipboard** option to copy JSON body and paste it into another application.
### View raw request and response to data source
1. Open the panel inspector and then click the **Query** tab.
1. Click **Refresh**.
Grafana sends the query to the server and displays the result. You can drill down on specific portions of the query, expand or collapse all of it, or copy the data to the clipboard to use in other applications.
@@ -6,7 +6,8 @@ labels:
- oss
title: Explore Metrics
aliases:
description: This topic describes the Explore Metrics feature
canonical: https://grafana.com/docs/grafana/latest/explore/explore-metrics/
description: Explore Metrics lets you browse Prometheus-compatible metrics using an intuitive, queryless experience.
weight: 200
---

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