The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
Go to file
Tom Ratcliffe fc51ec70ba
Alerting: Add manage permissions UI logic for Contact Points (#92885)
* Add showPolicies prop

* Add manage permissions component for easier reuse within alerting

* Add method for checking whether to show access control within alerting

* Remove accidental console.log from main

* Tweak styling for contact point width and add manage permissions drawer

* Improve typing for access control type response

* Add basic test for manage permissions on contact points list

* Only show manage permissions if grafana AM and alertingApiServer is enabled

* Update i18n

* Add test utils for turning features on and back off

* Add access control handlers

* Update tests with new util

* Pass AM in and add tests

* Receiver OSS resource permissions

There is a complication that is not fully addressed: Viewer defaults to read:*
and Editor defaults to read+write+delete:*

This is different to other resource permissions where non-admin are not granted
any global permissions and instead access is handled solely by resource-specific
permissions that are populated on create and removed on delete.

This allows them to easily remove permission to view or edit a single resource
from basic roles.

The reason this is tricky here is that we have multiple APIs that can
create/delete receivers: config api, provisioning api, and k8s receivers api.
Config api in particular is not well-equipped to determine when creates/deletes
are happening and thus ensuring that the proper resource-specific permissions
are created/deleted is finicky.

We would also have to create a migration to populate resource-specific
permissions for all current receivers. This migration would need to be reset so
it can run again if the flag is disabled.

* Add access control permissions

* Pass in contact point ID to receivers form

* Temporarily remove access control check for contact points

* Include access control metadata in k8s receiver List & Get

GET: Always included.
LIST: Included by adding a label selector with value `grafana.com/accessControl`

* Include new permissions for contact points navbar

* Fix receiver creator fixed role to not give global read

* Include in-use metadata in k8s receiver List & Get

GET: Always included.
LIST: Included by adding a label selector with value `grafana.com/inUse`

* Add receiver creator permission to receiver writer

* Add receiver creator permission to navbar

* Always allow listing receivers, don't return 403

* Remove receiver read precondition from receiver create

Otherwise, Creator role will not be able to create their first receiver

* Update routes permissions

* Add further support for RBAC in contact points

* Update routes permissions

* Update contact points header logic

* Back out test feature toggle refactor

Not working atm, not sure why

* Tidy up imports

* Update mock permissions

* Revert more test changes

* Update i18n

* Sync inuse metadata pr

* Add back canAdmin permissions after main merge

* Split out check for policies navtree item

* Tidy up utils and imports and fix rules in use

* Fix contact point tests and act warnings

* Add missing ReceiverPermissionAdmin after merge conflict

* Move contact points permissions

* Only show contact points filter when permissions are correct

* Move to constants

* Fallback to empty array and remove labelSelectors (not needed)

* Allow `toAbility` to take multiple actions

* Show builtin alertmanager if contact points permission

* Add empty state and hide templates if missing permissions

* Translations

* Tidy up mock data

* Fix tests and templates permission

* Update message for unused contact points

* Don't return 403 when user lists receivers and has access to none

* Fix receiver create not adding empty uid permissions

* Move SetDefaultPermissions to ReceiverPermissionService

* Have SetDefaultPermissions use uid from string

Fixes circular dependency

* Add FakeReceiverPermissionsService and fix test wiring

* Implement resource permission handling in provisioning API and renames

Create: Sets to default permissions
Delete: Removes permissions
Update: If receiver name is modified and the new name doesn't exist, it copies
the permissions from the old receiver to the newly created one. If old receiver
is now empty, it removes the old permissions as well.

* Split contact point permissions checks for read/modify

* Generalise getting annotation values from k8s entities

* Proxy RouteDeleteAlertingConfig through MultiOrgAlertmanager

* Cleanup permissions on config api reset and restore

* Cleanup permissions on config api POST

note this is still not available with feature flag enabled

* Gate the permission manager behind FF until initial migration is added

* Sync changes from config api PR

* Switch to named export

* Revert unnecessary changes

* Revert Filter auth change and implement in k8s api only

* Don't allow new scoped permissions to give access without FF

Prevents complications around mixed support for the scoped permissions causing
oddities in the UI.

* Fix integration tests to account for list permission change

* Move to `permissions` file

* Add additional tests for contact points

* Fix redirect for viewer on edit page

* Combine alerting test utils and move to new file location

* Allow new permissions to access provisioning export paths with FF

* Always allow exporting if its grafana flavoured

* Fix logic for showing auto generated policies

* Fix delete logic for contact point only referenced by a rule

* Suppress warning message when renaming a contact point

* Clear team and role perm cache on receiver rename

Prevents temporarily broken UI permissions after rename when a user's source of
elevated permissions comes from a cached team or basic role permission.

* Debug log failed cache clear on CopyPermissions

---------

Co-authored-by: Matt Jacobson <matthew.jacobson@grafana.com>
2024-09-27 19:56:32 +01:00
.bingo Chore: Bump Go to 1.23.0 (#92105) 2024-08-21 11:40:42 -04:00
.changelog-archive Update links to default Grafana branch (#83025) 2024-02-29 17:08:45 +02:00
.github Chore: update ownership of grafana live FE code (#93823) 2024-09-27 11:43:02 +01:00
.husky Chore: Remove colours from old husky cleanup pre-commit hook (#73395) 2023-08-18 13:10:18 +00:00
.vim Chore: Upgrade yarn and editor sdks (#42847) 2021-12-08 14:40:24 +01:00
.vscode Ensure running server from VSCode enables dev mode (#88986) 2024-06-10 10:30:03 -05:00
.yarn Update Yarn to v4.5.0 (#93626) 2024-09-24 14:03:04 +03:00
apps Alerting: Notifications Templates API (#91349) 2024-09-25 09:31:57 -04:00
conf OAuth: Add custom unauthorized message option in configuration (#93717) 2024-09-27 12:11:27 +02:00
contribute Docs: Fix broken links in contribute/**/*.md (#92182) 2024-09-12 15:51:30 +03:00
cue.mod Introduce "scuemata" system for CUE-based specification of Grafana objects (#32527) 2021-04-08 01:11:11 -07:00
devenv AngularMigration: Migrate series Graph to BarGauge (#92609) 2024-09-25 00:42:59 +03:00
docs Tidying up the Grafana setup documentation (#93860) 2024-09-27 15:57:38 +00:00
e2e Prometheus: Fix e2e selector by using "data-test-id" instead of "id" (#93736) 2024-09-25 15:29:19 +02:00
emails Refactor: Email verification (#84393) 2024-03-14 13:25:28 +01:00
grafana-mixin DashboardSchema: Remove old unused legacy props style and timepicker.enable (#73879) 2023-08-28 12:18:17 +02:00
hack Chore: Bump Go to 1.23.1 (#93007) 2024-09-06 20:58:50 +03:00
kinds Dashboard Scene: Fix snapshots not displaying variables values (#88967) 2024-08-20 17:05:12 +02:00
local Packaging: Dockerfile copy local folder (#64766) 2023-03-14 14:44:11 -05:00
packages Legend: Render legend threshold colors (#92838) 2024-09-27 17:02:03 +02:00
packaging Docker: Fix renderer plugin in custom Dockerfile (#88223) 2024-05-30 10:27:26 +02:00
pkg Alerting: Add manage permissions UI logic for Contact Points (#92885) 2024-09-27 19:56:32 +01:00
plugins-bundled Chore: Delete Input Datasource (#83163) 2024-03-18 09:48:19 +01:00
public Alerting: Add manage permissions UI logic for Contact Points (#92885) 2024-09-27 19:56:32 +01:00
scripts CI: Bump alpine version (#93865) 2024-09-26 20:50:28 -05:00
tools Image Rendering: Remove PhantomJS support (#23460) 2020-04-15 22:17:41 +02:00
.betterer.results Alerting: Add manage permissions UI logic for Contact Points (#92885) 2024-09-27 19:56:32 +01:00
.betterer.results.json Table Panel: Move inspector into drawer component (#88196) 2024-05-30 03:33:05 +07:00
.betterer.ts Chore: Type improvements (#93267) 2024-09-13 09:50:55 +01:00
.bra.toml Chore: Switch dev profiling address to 127.0.0.1:6000 (#91916) 2024-08-18 13:45:55 -04:00
.browserslistrc Babel: Target more modern browsers, updates browserlistrc (#32573) 2021-04-01 10:32:00 +02:00
.dockerignore copy .github folder into golang build container since we rely on codeowners (#62122) 2023-01-25 10:31:16 -05:00
.drone.star CI: Add new RRC pipeline (#90731) 2024-07-30 14:01:10 +01:00
.drone.yml CI: Bump alpine version (#93865) 2024-09-26 20:50:28 -05:00
.editorconfig Chore: Enable PR testing in Drone (#26189) 2020-07-10 16:09:21 +02:00
.eslintignore E2E: Add support for building test plugins (#91873) 2024-08-23 09:00:03 +02:00
.eslintrc Alerting: Add eslint testing-library plugin dependency and create separate ESLint config (#91052) 2024-07-30 15:16:54 +03:00
.gitattributes CRLF (#28822) 2020-11-05 17:20:40 +01:00
.gitignore Chore: Remove MSW worker from source control and rely on installation instead (#93268) 2024-09-12 16:03:50 +03:00
.golangci.toml Revert read replica POC (#93551) 2024-09-25 15:21:39 -08:00
.levignore.js Adds levitate levignore configuration file to prevent breaking change notifications from expected typescript symbols (#74371) 2023-09-05 15:00:13 +02:00
.nvmrc Chore: Update to node 20 (#76097) 2023-10-26 09:34:50 +02:00
.nxignore Alerting/Chore: Mock API (MSW) in browser (#89223) 2024-09-04 10:22:03 +01:00
.pa11yci-pr.conf.js Pa11y: Decrease error thresholds for PRs (#85178) 2024-03-27 12:29:54 +01:00
.pa11yci.conf.js Login: Improve accessibility of Login form (#78652) 2023-11-28 10:22:20 +00:00
.prettierignore Alerting/Chore: Mock API (MSW) in browser (#89223) 2024-09-04 10:22:03 +01:00
.prettierrc.js Toolkit: Remove deprecated plugin:build (#67485) 2023-04-28 14:33:16 +02:00
.trivyignore CI: Add Trivy GitHub Action (#88987) 2024-06-10 16:53:48 -04:00
.yarnrc.yml Update Yarn to v4.5.0 (#93626) 2024-09-24 14:03:04 +03:00
build.go Chore: move build command to importable package (#38726) 2021-09-03 11:24:21 -05:00
CHANGELOG.md Release: update changelog for 11.2.1 (#93835) 2024-09-26 16:06:40 +01:00
CODE_OF_CONDUCT.md Fixing typos (#70487) 2023-06-22 09:43:38 +01:00
CONTRIBUTING.md Docs: Fix link to developing plugins (#75816) 2023-10-03 09:57:53 -05:00
crowdin.yml I18n: Fix path for Crowdin upload (#81733) 2024-02-05 13:33:37 +01:00
cypress.config.js E2E: Add SMTP tester (#88392) 2024-06-18 14:32:19 +02:00
Dockerfile Playlists: Migrate to App SDK codegen (#93246) 2024-09-13 16:27:40 -04:00
embed.go Core: Remove thema and kindsys dependencies (#84499) 2024-03-21 11:11:29 +01:00
go.mod Alerting: Fix Slack notification errors when using bad title template (#93771) 2024-09-26 12:58:58 -03:00
go.sum Alerting: Fix Slack notification errors when using bad title template (#93771) 2024-09-26 12:58:58 -03:00
go.work Playlists: Migrate to App SDK codegen (#93246) 2024-09-13 16:27:40 -04:00
go.work.sum Alerting: Fix Slack notification errors when using bad title template (#93771) 2024-09-26 12:58:58 -03:00
GOVERNANCE.md Сorrection of spelling errors (#83565) 2024-03-01 11:00:15 +01:00
HALL_OF_FAME.md Docs: Update HALL_OF_FAME.md (#79775) 2024-02-26 15:04:58 +01:00
jest.config.js NodeGraph: Add msagl and the layered layout code (#88375) 2024-05-28 17:04:03 +02:00
latest.json Release: Deprecate latest.json and replace with api call to grafana.com (#80537) 2024-01-16 11:19:32 +00:00
lefthook.rc Chore: Replace Husky/Lint-staged with Lefthook (#66608) 2023-08-17 09:56:52 +00:00
lefthook.yml Chore: Remove i18n psuedo precommit hook (#86840) 2024-04-24 13:08:19 +02:00
lerna.json Release: Bump version to 11.3.0-pre (#91863) 2024-08-14 18:34:14 -03:00
LICENSE Re-license Grafana to AGPLv3 (#33184) 2021-04-20 19:03:30 +02:00
LICENSING.md Grafana packages: Remove E2E workspace (#86416) 2024-04-25 07:12:43 +02:00
MAINTAINERS.md Update codeowners (#73159) 2023-09-28 11:31:26 -07:00
Makefile Chore: Add update-workspace to build-go deps (#93386) 2024-09-17 12:47:00 +03:00
NOTICE.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
nx.json Chore: Bump Nx to 18.1.x (#85185) 2024-03-28 09:36:35 +01:00
package.json Update emotion monorepo (#93914) 2024-09-27 15:16:12 +01:00
playwright.config.ts Plugin Extensions: E2E test addLink and legacy APIs (#92394) 2024-08-26 16:01:32 +02:00
project.json Build: Set Nx inputs for theme-generate (#84761) 2024-05-22 17:07:50 +02:00
README.md Docs: Invert logo color for dark theme in README (#76012) 2023-11-07 09:54:12 +00:00
ROADMAP.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
SECURITY.md Docs: Update SECURITY.md (#67985) 2023-06-21 07:34:42 +01:00
stylelint.config.js Update dependency stylelint to v16 (#83252) 2024-02-23 11:56:38 +02:00
SUPPORT.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
tsconfig.json Swagger: Add a custom swagger/api page (#91785) 2024-08-14 09:03:00 +03:00
WORKFLOW.md Minor correction done in WORKFLOW.md (#80505) 2024-04-12 17:56:10 +02:00
yarn.lock Update dependency @faker-js/faker to v9 (#93917) 2024-09-27 15:35:15 +01:00

Grafana Logo (Light) Grafana Logo (Dark)

The open-source platform for monitoring and observability

License Drone Go Report Card

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data-driven culture:

  • Visualizations: Fast and flexible client side graphs with a multitude of options. Panel plugins offer many different ways to visualize metrics and logs.
  • Dynamic Dashboards: Create dynamic & reusable dashboards with template variables that appear as dropdowns at the top of the dashboard.
  • Explore Metrics: Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side.
  • Explore Logs: Experience the magic of switching from metrics to logs with preserved label filters. Quickly search through all your logs or streaming them live.
  • Alerting: Visually define alert rules for your most important metrics. Grafana will continuously evaluate and send notifications to systems like Slack, PagerDuty, VictorOps, OpsGenie.
  • Mixed Data Sources: Mix different data sources in the same graph! You can specify a data source on a per-query basis. This works for even custom datasources.

Get started

Unsure if Grafana is for you? Watch Grafana in action on play.grafana.org!

Documentation

The Grafana documentation is available at grafana.com/docs.

Contributing

If you're interested in contributing to the Grafana project:

Get involved

This project is tested with BrowserStack

License

Grafana is distributed under AGPL-3.0-only. For Apache-2.0 exceptions, see LICENSING.md.