Compare commits
19 Commits
v11.4.x
...
release-11
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
696f41a7c2 | ||
|
|
c8f8c81e1c | ||
|
|
13945ba51b | ||
|
|
8229a4c073 | ||
|
|
bf3be6309a | ||
|
|
5c316a5113 | ||
|
|
0c2af5a880 | ||
|
|
a3a4c2565a | ||
|
|
2451837fb8 | ||
|
|
27251b44fc | ||
|
|
38ae17fbc3 | ||
|
|
bc6beda11e | ||
|
|
dff8f508d5 | ||
|
|
08f66dd50c | ||
|
|
e9f564277f | ||
|
|
ef65865de0 | ||
|
|
33cf9d6cd4 | ||
|
|
10b95276ae | ||
|
|
54db7b0992 |
106
.drone.yml
106
.drone.yml
@@ -18,7 +18,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd
|
||||
@@ -69,7 +69,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- go install github.com/bazelbuild/buildtools/buildifier@latest
|
||||
@@ -112,7 +112,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -170,7 +170,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -307,7 +307,7 @@ steps:
|
||||
path: /github-app
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -414,7 +414,7 @@ steps:
|
||||
path: /github-app
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -503,7 +503,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd
|
||||
@@ -625,11 +625,11 @@ steps:
|
||||
path: /github-app
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -689,12 +689,14 @@ steps:
|
||||
token:
|
||||
from_secret: drone_token
|
||||
- commands:
|
||||
- docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --version
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --uninstall 'qemu-*'
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --install all
|
||||
- /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64
|
||||
-a targz:grafana:linux/arm/v7 -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu
|
||||
-a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7
|
||||
-a docker:grafana:linux/arm/v7:ubuntu --go-version=1.23.5 --yarn-cache=$$YARN_CACHE_FOLDER
|
||||
--build-id=$$DRONE_BUILD_NUMBER --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.20.5
|
||||
--build-id=$$DRONE_BUILD_NUMBER --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.20.6
|
||||
--tag-format='{{ .version_base }}-{{ .buildID }}-{{ .arch }}' --ubuntu-tag-format='{{
|
||||
.version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' --verify='false' --grafana-dir=$$PWD
|
||||
> packages.txt
|
||||
@@ -751,7 +753,7 @@ steps:
|
||||
GF_APP_MODE: development
|
||||
GF_SERVER_HTTP_PORT: "3001"
|
||||
GF_SERVER_ROUTER_LOGGING: "1"
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: grafana-server
|
||||
- commands:
|
||||
- ./bin/build e2e-tests --port 3001 --suite dashboards-suite
|
||||
@@ -1092,7 +1094,7 @@ steps:
|
||||
path: /github-app
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -1105,7 +1107,7 @@ steps:
|
||||
name: compile-build-cmd
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -1296,7 +1298,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -1676,7 +1678,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -1747,7 +1749,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -1805,7 +1807,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -1871,7 +1873,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -1951,7 +1953,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd
|
||||
@@ -2017,7 +2019,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -2091,11 +2093,11 @@ steps:
|
||||
path: /github-app
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -2154,12 +2156,14 @@ steps:
|
||||
image: node:20.9.0-alpine
|
||||
name: build-frontend-packages
|
||||
- commands:
|
||||
- docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --version
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --uninstall 'qemu-*'
|
||||
- docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --install all
|
||||
- /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64
|
||||
-a targz:grafana:linux/arm/v7 -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu
|
||||
-a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7
|
||||
-a docker:grafana:linux/arm/v7:ubuntu --go-version=1.23.5 --yarn-cache=$$YARN_CACHE_FOLDER
|
||||
--build-id=$$DRONE_BUILD_NUMBER --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.20.5
|
||||
--build-id=$$DRONE_BUILD_NUMBER --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.20.6
|
||||
--tag-format='{{ .version_base }}-{{ .buildID }}-{{ .arch }}' --ubuntu-tag-format='{{
|
||||
.version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' --verify='false' --grafana-dir=$$PWD
|
||||
> packages.txt
|
||||
@@ -2220,7 +2224,7 @@ steps:
|
||||
GF_APP_MODE: development
|
||||
GF_SERVER_HTTP_PORT: "3001"
|
||||
GF_SERVER_ROUTER_LOGGING: "1"
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: grafana-server
|
||||
- commands:
|
||||
- ./bin/build e2e-tests --port 3001 --suite dashboards-suite
|
||||
@@ -2635,7 +2639,7 @@ services:
|
||||
steps:
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -2648,7 +2652,7 @@ steps:
|
||||
name: compile-build-cmd
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -2918,7 +2922,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -2974,7 +2978,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -3038,7 +3042,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -3116,7 +3120,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd
|
||||
@@ -3219,7 +3223,7 @@ services:
|
||||
steps:
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -3232,7 +3236,7 @@ steps:
|
||||
name: compile-build-cmd
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -3460,11 +3464,11 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -3592,11 +3596,11 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
@@ -4081,7 +4085,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4156,7 +4160,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4318,7 +4322,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4420,7 +4424,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- yarn install --immutable || yarn install --immutable
|
||||
@@ -4474,7 +4478,7 @@ services: []
|
||||
steps:
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -4555,7 +4559,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4699,7 +4703,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4826,7 +4830,7 @@ steps:
|
||||
environment:
|
||||
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
|
||||
from_secret: dagger_token
|
||||
ALPINE_BASE: alpine:3.20.5
|
||||
ALPINE_BASE: alpine:3.20.6
|
||||
CDN_DESTINATION:
|
||||
from_secret: rgm_cdn_destination
|
||||
DESTINATION:
|
||||
@@ -4970,13 +4974,13 @@ services:
|
||||
steps:
|
||||
- commands:
|
||||
- mkdir -p bin
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
|
||||
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.2/grabpl
|
||||
- chmod +x bin/grabpl
|
||||
image: byrnedo/alpine-curl:0.1.8
|
||||
name: grabpl
|
||||
- commands:
|
||||
- echo $DRONE_RUNNER_NAME
|
||||
image: alpine:3.20.5
|
||||
image: alpine:3.20.6
|
||||
name: identify-runner
|
||||
- commands:
|
||||
- '# It is required that code generated from Thema/CUE be committed and in sync
|
||||
@@ -5425,7 +5429,7 @@ steps:
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM node:20-bookworm
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM google/cloud-sdk:431.0.0
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/grafana-ci-deploy:1.3.3
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.20.5
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.20.6
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM ubuntu:22.04
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM byrnedo/alpine-curl:0.1.8
|
||||
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM plugins/slack
|
||||
@@ -5464,7 +5468,7 @@ steps:
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL node:20-bookworm
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL google/cloud-sdk:431.0.0
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL grafana/grafana-ci-deploy:1.3.3
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.20.5
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.20.6
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL ubuntu:22.04
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL byrnedo/alpine-curl:0.1.8
|
||||
- trivy --exit-code 1 --severity HIGH,CRITICAL plugins/slack
|
||||
@@ -5729,6 +5733,6 @@ kind: secret
|
||||
name: gcr_credentials
|
||||
---
|
||||
kind: signature
|
||||
hmac: 16489caa870a3645e21569481281c5d114af0c5ff48b519e86da36189bd57606
|
||||
hmac: 7210382290a72f0ce411fd3f463d72c2dd9a1b062c7238cad35908bf2cca1794
|
||||
|
||||
...
|
||||
|
||||
14
.github/CODEOWNERS
vendored
14
.github/CODEOWNERS
vendored
@@ -695,12 +695,14 @@ embed.go @grafana/grafana-as-code
|
||||
/.github/renovate.json5 @grafana/frontend-ops
|
||||
/.github/teams.yml @armandgrillet
|
||||
/.github/workflows/alerting-swagger-gen.yml @grafana/alerting-backend
|
||||
/.github/workflows/auto-milestone.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/backport.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/bump-version.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/close-milestone.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/release-pr.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/release-comms.yml @grafana/grafana-release-guild
|
||||
/.github/workflows/auto-milestone.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/backport.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/bump-version.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/close-milestone.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/release-pr.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/release-comms.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/migrate-prs.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/create-next-release-branch.yml @grafana/grafana-developer-enablement-squad
|
||||
/.github/workflows/codeowners-validator.yml @tolzhabayev
|
||||
/.github/workflows/codeql-analysis.yml @DanCech
|
||||
/.github/workflows/commands.yml @torkelo
|
||||
|
||||
15
.github/workflows/backport.yml
vendored
15
.github/workflows/backport.yml
vendored
@@ -10,24 +10,19 @@ jobs:
|
||||
if: github.repository == 'grafana/grafana'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Actions
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: "grafana/grafana-github-actions"
|
||||
path: ./actions
|
||||
ref: main
|
||||
- name: Install Actions
|
||||
run: npm install --production --prefix ./actions
|
||||
- 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 }}
|
||||
- run: git config --global user.email '132647405+grafana-delivery-bot[bot]@users.noreply.github.com'
|
||||
- run: git config --global user.name 'grafana-delivery-bot[bot]'
|
||||
- run: git remote set-url origin "https://grafana-delivery-bot:${{ steps.generate_token.outputs.token }}@github.com/grafana/grafana.git"
|
||||
- name: Run backport
|
||||
uses: ./actions/backport
|
||||
uses: grafana/grafana-github-actions-go/backport@main
|
||||
with:
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
labelsToAdd: "backport"
|
||||
title: "[{{base}}] {{originalTitle}}"
|
||||
|
||||
53
.github/workflows/create-next-release-branch.yml
vendored
Normal file
53
.github/workflows/create-next-release-branch.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
name: Create next release branch
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
ownerRepo:
|
||||
type: string
|
||||
description: Owner/repo of the repository where the branch is created (e.g. 'grafana/grafana')
|
||||
required: true
|
||||
source:
|
||||
description: The release branch to increment (eg providing `release-11.2.3` will result in `release-11.2.4` being created)
|
||||
type: string
|
||||
required: true
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID:
|
||||
required: true
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM:
|
||||
required: true
|
||||
outputs:
|
||||
branch:
|
||||
description: The new branch that was created
|
||||
value: ${{ jobs.main.outputs.branch }}
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ownerRepo:
|
||||
description: Owner/repo of the repository where the branch is created (e.g. 'grafana/grafana')
|
||||
source:
|
||||
description: The release branch to increment (eg providing `release-11.2.3` will result in `release-11.2.4` being created)
|
||||
type: string
|
||||
required: true
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID:
|
||||
required: true
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM:
|
||||
required: true
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
branch: ${{ steps.branch.outputs.branch }}
|
||||
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 release branch
|
||||
id: branch
|
||||
uses: grafana/grafana-github-actions-go/bump-release@main
|
||||
with:
|
||||
ownerRepo: ${{ inputs.ownerRepo }}
|
||||
source: ${{ inputs.source }}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
@@ -11,6 +11,7 @@ on:
|
||||
branches:
|
||||
- "main"
|
||||
- "v*.*.*"
|
||||
- "release-*.*.*"
|
||||
|
||||
# This is run before the pull request has been merged, so we'll run against the src branch
|
||||
jobs:
|
||||
|
||||
60
.github/workflows/migrate-prs.yml
vendored
Normal file
60
.github/workflows/migrate-prs.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
name: Migrate open PRs
|
||||
# Migrate open PRs from a superseded release branch to the current release branch and notify authors
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
from:
|
||||
description: 'The base branch to check for open PRs'
|
||||
required: true
|
||||
type: string
|
||||
to:
|
||||
description: 'The base branch to migrate open PRs to'
|
||||
required: true
|
||||
type: string
|
||||
ownerRepo:
|
||||
description: Owner/repo of the repository where the branch is created (e.g. 'grafana/grafana')
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID:
|
||||
required: true
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM:
|
||||
required: true
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
from:
|
||||
description: 'The base branch to check for open PRs'
|
||||
required: true
|
||||
type: string
|
||||
to:
|
||||
description: 'The base branch to migrate open PRs to'
|
||||
required: true
|
||||
type: string
|
||||
ownerRepo:
|
||||
description: Owner/repo of the repository where the branch is created (e.g. 'grafana/grafana')
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID:
|
||||
required: true
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM:
|
||||
required: true
|
||||
|
||||
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: Migrate PRs
|
||||
uses: grafana/grafana-github-actions-go/migrate-open-prs@main
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
ownerRepo: ${{ inputs.ownerRepo }}
|
||||
from: ${{ inputs.from }}
|
||||
to: ${{ inputs.to }}
|
||||
binary_release_tag: 'dev'
|
||||
@@ -3,7 +3,7 @@ name: publish-technical-documentation-release
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v[0-9]+.[0-9]+.x
|
||||
- release-[0-9]+.[0-9]+.[0-9]+
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
paths:
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
- uses: grafana/writers-toolkit/publish-technical-documentation-release@publish-technical-documentation-release/v2
|
||||
with:
|
||||
release_tag_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
||||
release_branch_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.x$"
|
||||
release_branch_with_patch_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
||||
release_branch_regexp: "^release-(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
||||
release_branch_with_patch_regexp: "^release-(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
||||
website_directory: content/docs/grafana
|
||||
version_suffix: ""
|
||||
|
||||
48
.github/workflows/release-comms.yml
vendored
48
.github/workflows/release-comms.yml
vendored
@@ -19,7 +19,7 @@ on:
|
||||
- closed
|
||||
branches:
|
||||
- 'main'
|
||||
- 'v*.*.*'
|
||||
- 'release-*.*.*'
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
@@ -27,6 +27,7 @@ jobs:
|
||||
name: Setup and establish latest
|
||||
outputs:
|
||||
version: ${{ steps.output.outputs.version }}
|
||||
release_branch: ${{ steps.output.outputs.release_branch }}
|
||||
dry_run: ${{ steps.output.outputs.dry_run }}
|
||||
latest: ${{ steps.output.outputs.latest }}
|
||||
runs-on: ubuntu-latest
|
||||
@@ -49,9 +50,54 @@ jobs:
|
||||
echo "latest: $LATEST"
|
||||
echo "version: $VERSION"
|
||||
|
||||
echo "release_branch=$(echo $VERSION | sed -s 's/^v/release-/g')" >> "$GITHUB_OUTPUT"
|
||||
echo "dry_run=$DRY_RUN" >> "$GITHUB_OUTPUT"
|
||||
echo "latest=$LATEST" >> "$GITHUB_OUTPUT"
|
||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||
create_next_release_branch_grafana:
|
||||
name: Create next release branch (Grafana)
|
||||
needs: setup
|
||||
uses: ./.github/workflows/create-next-release-branch.yml
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
with:
|
||||
ownerRepo: 'grafana/grafana'
|
||||
source: ${{ needs.setup.outputs.release_branch }}
|
||||
create_next_release_branch_enterprise:
|
||||
name: Create next release branch (Grafana Enterprise)
|
||||
needs: setup
|
||||
uses: ./.github/workflows/create-next-release-branch.yml
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
with:
|
||||
ownerRepo: 'grafana/grafana-enterprise'
|
||||
source: ${{ needs.setup.outputs.release_branch }}
|
||||
migrate_prs_grafana:
|
||||
needs:
|
||||
- setup
|
||||
- create_next_release_branch_grafana
|
||||
uses: ./.github/workflows/migrate-prs.yml
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
with:
|
||||
ownerRepo: 'grafana/grafana'
|
||||
from: ${{ needs.setup.outputs.release_branch }}
|
||||
to: ${{ needs.create_next_release_branch_grafana.outputs.branch }}
|
||||
migrate_prs_enterprise:
|
||||
needs:
|
||||
- setup
|
||||
- create_next_release_branch_enterprise
|
||||
uses: ./.github/workflows/migrate-prs.yml
|
||||
secrets:
|
||||
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
with:
|
||||
ownerRepo: 'grafana/grafana-enterprise'
|
||||
from: ${{ needs.setup.outputs.release_branch }}
|
||||
to: ${{ needs.create_next_release_branch_enterprise.outputs.branch }}
|
||||
post_changelog_on_forum:
|
||||
needs: setup
|
||||
uses: ./.github/workflows/community-release.yml
|
||||
|
||||
18
.github/workflows/release-pr.yml
vendored
18
.github/workflows/release-pr.yml
vendored
@@ -4,7 +4,7 @@
|
||||
# Please refrain from including any processes that do not result in code changes in this workflow. Instead, they should
|
||||
# either be triggered in the release promotion process or in the release comms process (that is triggered by merging
|
||||
# this PR).
|
||||
name: Complete a Grafana release
|
||||
name: Grafana Release PR
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
@@ -19,7 +19,7 @@ on:
|
||||
target:
|
||||
required: true
|
||||
type: string
|
||||
description: The base branch that these changes are being merged into
|
||||
description: The release branch pattern (eg v9.5.x) that these changes are being merged into
|
||||
backport:
|
||||
required: false
|
||||
type: string
|
||||
@@ -61,10 +61,17 @@ jobs:
|
||||
with:
|
||||
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
- name: Get release branch
|
||||
id: branch
|
||||
uses: grafana/grafana-github-actions-go/latest-release-branch@main
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
ownerRepo: 'grafana/grafana'
|
||||
pattern: ${{ inputs.target }}
|
||||
- name: Checkout Grafana
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.target }}
|
||||
ref: ${{ steps.branch.outputs.branch }}
|
||||
fetch-depth: 0
|
||||
fetch-tags: true
|
||||
- name: Checkout Grafana (main)
|
||||
@@ -124,7 +131,6 @@ jobs:
|
||||
rm -f CHANGELOG.part changelog_items.md
|
||||
|
||||
git diff CHANGELOG.md
|
||||
|
||||
- name: "Prettify CHANGELOG.md"
|
||||
run: npx prettier --write CHANGELOG.md
|
||||
- name: Commit CHANGELOG.md changes
|
||||
@@ -151,7 +157,7 @@ jobs:
|
||||
$( [ "x${{ inputs.latest }}" == "xtrue" ] && printf %s '-l "release/latest"') \
|
||||
-l "no-changelog" \
|
||||
--dry-run=${{ inputs.dry_run }} \
|
||||
-B "${{ inputs.target }}" \
|
||||
-B "${{ steps.branch.outputs.branch }}" \
|
||||
--title "Release: ${{ inputs.version }}" \
|
||||
--body "These code changes must be merged after a release is complete"
|
||||
env:
|
||||
@@ -165,7 +171,7 @@ jobs:
|
||||
-l "product-approved" \
|
||||
-l "no-changelog" \
|
||||
--dry-run=${{ inputs.dry_run }} \
|
||||
-B "${{ inputs.target }}" \
|
||||
-B "${{ steps.branch.outputs.branch }}" \
|
||||
--title "Release: ${{ inputs.version }}" \
|
||||
--body "These code changes must be merged after a release is complete"
|
||||
env:
|
||||
|
||||
18
CHANGELOG.md
18
CHANGELOG.md
@@ -1,3 +1,21 @@
|
||||
<!-- 11.4.2 START -->
|
||||
|
||||
# 11.4.2 (2025-02-18)
|
||||
|
||||
### Features and enhancements
|
||||
|
||||
- **Docker:** Use our own glibc 2.40 binaries [#99924](https://github.com/grafana/grafana/pull/99924), [@DanCech](https://github.com/DanCech)
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- **Auth:** Fix redirect with JWT auth URL login [#100494](https://github.com/grafana/grafana/pull/100494), [@mgyongyosi](https://github.com/mgyongyosi)
|
||||
- **AuthN:** Refetch user on "ErrUserAlreadyExists" [#100585](https://github.com/grafana/grafana/pull/100585), [@kalleep](https://github.com/kalleep)
|
||||
- **Azure:** Correctly set application insights resource values [#99598](https://github.com/grafana/grafana/pull/99598), [@aangelisc](https://github.com/aangelisc)
|
||||
- **Dashboards:** Bring back scripted dashboards [#100629](https://github.com/grafana/grafana/pull/100629), [@dprokop](https://github.com/dprokop)
|
||||
- **Plugin Metrics:** Eliminate data race in plugin metrics middleware [#100077](https://github.com/grafana/grafana/pull/100077), [@clord](https://github.com/clord)
|
||||
- **RBAC:** Don't check folder access if `annotationPermissionUpdate` FT is enabled [#100116](https://github.com/grafana/grafana/pull/100116), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
|
||||
|
||||
<!-- 11.4.2 END -->
|
||||
<!-- 11.4.1 START -->
|
||||
|
||||
# 11.4.1 (2025-01-28)
|
||||
|
||||
@@ -156,7 +156,8 @@ RUN if grep -i -q alpine /etc/issue && [ `arch` = "x86_64" ]; then \
|
||||
usr/glibc-compat/lib/libdl.so.2 \
|
||||
usr/glibc-compat/lib/libm.so.6 \
|
||||
usr/glibc-compat/lib/libpthread.so.0 \
|
||||
usr/glibc-compat/lib/librt.so.1 && \
|
||||
usr/glibc-compat/lib/librt.so.1 \
|
||||
usr/glibc-compat/lib/libresolv.so.2 && \
|
||||
mkdir /lib64 && \
|
||||
ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /lib64; \
|
||||
fi
|
||||
|
||||
@@ -272,6 +272,10 @@ Path to the certificate file (if `protocol` is set to `https` or `h2`).
|
||||
|
||||
Path to the certificate key file (if `protocol` is set to `https` or `h2`).
|
||||
|
||||
### cert_pass
|
||||
|
||||
Optional. Password to decrypt encrypted certificates.
|
||||
|
||||
### certs_watch_interval
|
||||
|
||||
Controls whether `cert_key` and `cert_file` are periodically watched for changes.
|
||||
|
||||
@@ -18,9 +18,9 @@ This topic explains how to install Grafana dependencies, install Grafana on Linu
|
||||
|
||||
There are multiple ways to install Grafana: using the Grafana Labs APT repository, by downloading a `.deb` package, or by downloading a binary `.tar.gz` file. Choose only one of the methods below that best suits your needs.
|
||||
|
||||
{{% admonition type="note" %}}
|
||||
{{< admonition type="note" >}}
|
||||
If you install via the `.deb` package or `.tar.gz` file, then you must manually update Grafana for each new version.
|
||||
{{% /admonition %}}
|
||||
{{< /admonition >}}
|
||||
|
||||
The following video demonstrates how to install Grafana on Debian and Ubuntu as outlined in this document:
|
||||
|
||||
@@ -37,9 +37,9 @@ If you install from the APT repository, Grafana automatically updates when you r
|
||||
| Grafana OSS | grafana | `https://apt.grafana.com stable main` |
|
||||
| Grafana OSS (Beta) | grafana | `https://apt.grafana.com beta main` |
|
||||
|
||||
{{% admonition type="note" %}}
|
||||
{{< admonition type="note" >}}
|
||||
Grafana Enterprise is the recommended and default edition. It is available for free and includes all the features of the OSS edition. You can also upgrade to the [full Enterprise feature set](/products/enterprise/?utm_source=grafana-install-page), which has support for [Enterprise plugins](/grafana/plugins/?enterprise=1&utcm_source=grafana-install-page).
|
||||
{{% /admonition %}}
|
||||
{{< /admonition >}}
|
||||
|
||||
Complete the following steps to install Grafana from the APT repository:
|
||||
|
||||
@@ -89,11 +89,11 @@ Complete the following steps to install Grafana from the APT repository:
|
||||
sudo apt-get install grafana-enterprise
|
||||
```
|
||||
|
||||
## Install Grafana using a deb package or as a standalone binary
|
||||
## Install Grafana using a deb package
|
||||
|
||||
If you choose not to install Grafana using APT, you can download and install Grafana using the deb package or as a standalone binary.
|
||||
If you install Grafana manually using the deb package, then you must manually update Grafana for each new version.
|
||||
|
||||
Complete the following steps to install Grafana using DEB or the standalone binaries:
|
||||
Complete the following steps to install Grafana using a deb package:
|
||||
|
||||
1. Navigate to the [Grafana download page](/grafana/download).
|
||||
1. Select the Grafana version you want to install.
|
||||
@@ -105,6 +105,80 @@ Complete the following steps to install Grafana using DEB or the standalone bina
|
||||
1. Depending on which system you are running, click the **Linux** or **ARM** tab on the [download page](/grafana/download).
|
||||
1. Copy and paste the code from the [download page](/grafana/download) into your command line and run.
|
||||
|
||||
## Install Grafana as a standalone binary
|
||||
|
||||
Complete the following steps to install Grafana using the standalone binaries:
|
||||
|
||||
1. Navigate to the [Grafana download page](/grafana/download).
|
||||
1. Select the Grafana version you want to install.
|
||||
- The most recent Grafana version is selected by default.
|
||||
- The **Version** field displays only tagged releases. If you want to install a nightly build, click **Nightly Builds** and then select a version.
|
||||
1. Select an **Edition**.
|
||||
- **Enterprise:** This is the recommended version. It is functionally identical to the open source version but includes features you can unlock with a license if you so choose.
|
||||
- **Open Source:** This version is functionally identical to the Enterprise version, but you will need to download the Enterprise version if you want Enterprise features.
|
||||
1. Depending on which system you are running, click the **Linux** or **ARM** tab on the [download page](/grafana/download).
|
||||
1. Copy and paste the code from the [download page](/grafana/download) page into your command line and run.
|
||||
1. Create a user account for Grafana on your system:
|
||||
|
||||
```shell
|
||||
sudo useradd -r -s /bin/false grafana
|
||||
```
|
||||
|
||||
1. Move the unpacked binary to `/usr/local/grafana`:
|
||||
|
||||
```shell
|
||||
sudo mv <DOWNLOAD PATH> /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Create a Grafana server systemd unit file:
|
||||
|
||||
```shell
|
||||
sudo touch /etc/systemd/system/grafana-server.service
|
||||
```
|
||||
|
||||
1. Add the following to the unit file in a text editor of your choice:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Grafana Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=grafana
|
||||
Group=users
|
||||
ExecStart=/usr/local/grafana/bin/grafana server --config=/usr/local/grafana/conf/grafana.ini --homepath=/usr/local/grafana
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
1. Use the binary to manually start the Grafana server:
|
||||
|
||||
```shell
|
||||
/usr/local/grafana/bin/grafana-server --homepath /usr/local/grafana
|
||||
```
|
||||
|
||||
{{< admonition type="note" >}}
|
||||
Manually invoking the binary in this step automatically creates the `/usr/local/grafana/data` directory, which needs to be created and configured before the installation can be considered complete.
|
||||
{{< /admonition >}}
|
||||
|
||||
1. Press `CTRL+C` to stop the Grafana server.
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users again to apply the ownership to the newly created `/usr/local/grafana/data` directory:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. [Configure the Grafana server to start at boot time using systemd](https://grafana.com/docs/grafana/latest/setup-grafana/start-restart-grafana/#configure-the-grafana-server-to-start-at-boot-using-systemd).
|
||||
|
||||
## Uninstall on Debian or Ubuntu
|
||||
|
||||
Complete any of the following steps to uninstall Grafana.
|
||||
|
||||
@@ -32,15 +32,15 @@ If you install from the RPM repository, then Grafana is automatically updated ev
|
||||
| Grafana OSS | grafana | `https://rpm.grafana.com` |
|
||||
| Grafana OSS (Beta) | grafana | `https://rpm-beta.grafana.com` |
|
||||
|
||||
{{% admonition type="note" %}}
|
||||
{{< admonition type="note" >}}
|
||||
Grafana Enterprise is the recommended and default edition. It is available for free and includes all the features of the OSS edition. You can also upgrade to the [full Enterprise feature set](/products/enterprise/?utm_source=grafana-install-page), which has support for [Enterprise plugins](/grafana/plugins/?enterprise=1&utcm_source=grafana-install-page).
|
||||
{{% /admonition %}}
|
||||
{{< /admonition >}}
|
||||
|
||||
To install Grafana from the RPM repository, complete the following steps:
|
||||
|
||||
{{% admonition type="note" %}}
|
||||
{{< admonition type="note" >}}
|
||||
If you wish to install beta versions of Grafana, substitute the repository URL for the beta URL listed above.
|
||||
{{% /admonition %}}
|
||||
{{< /admonition >}}
|
||||
|
||||
1. Import the GPG key:
|
||||
|
||||
@@ -96,6 +96,8 @@ If you install Grafana manually using YUM or RPM, then you must manually update
|
||||
|
||||
## Install Grafana as a standalone binary
|
||||
|
||||
If you install Grafana manually using the standalone binaries, then you must manually update Grafana for each new version.
|
||||
|
||||
Complete the following steps to install Grafana using the standalone binaries:
|
||||
|
||||
1. Navigate to the [Grafana download page](/grafana/download).
|
||||
@@ -103,10 +105,70 @@ Complete the following steps to install Grafana using the standalone binaries:
|
||||
- The most recent Grafana version is selected by default.
|
||||
- The **Version** field displays only tagged releases. If you want to install a nightly build, click **Nightly Builds** and then select a version.
|
||||
1. Select an **Edition**.
|
||||
- **Enterprise:** This is the recommended version. It is functionally identical to the open-source version but includes features you can unlock with a license if you so choose.
|
||||
- **Enterprise:** This is the recommended version. It is functionally identical to the open source version but includes features you can unlock with a license if you so choose.
|
||||
- **Open Source:** This version is functionally identical to the Enterprise version, but you will need to download the Enterprise version if you want Enterprise features.
|
||||
1. Depending on which system you are running, click the **Linux** or **ARM** tab on the [download page](/grafana/download).
|
||||
1. Copy and paste the code from the [download page](/grafana/download) page into your command line and run.
|
||||
1. Create a user account for Grafana on your system:
|
||||
|
||||
```shell
|
||||
sudo useradd -r -s /bin/false grafana
|
||||
```
|
||||
|
||||
1. Move the unpacked binary to `/usr/local/grafana`:
|
||||
|
||||
```shell
|
||||
sudo mv <DOWNLOAD PATH> /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Create a Grafana server systemd unit file:
|
||||
|
||||
```shell
|
||||
sudo touch /etc/systemd/system/grafana-server.service
|
||||
```
|
||||
|
||||
1. Add the following to the unit file in a text editor of your choice:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Grafana Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=grafana
|
||||
Group=users
|
||||
ExecStart=/usr/local/grafana/bin/grafana server --config=/usr/local/grafana/conf/grafana.ini --homepath=/usr/local/grafana
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
1. Use the binary to manually start the Grafana server:
|
||||
|
||||
```shell
|
||||
/usr/local/grafana/bin/grafana-server --homepath /usr/local/grafana
|
||||
```
|
||||
|
||||
{{< admonition type="note" >}}
|
||||
Manually invoking the binary in this step automatically creates the `/usr/local/grafana/data` directory, which needs to be created and configured before the installation can be considered complete.
|
||||
{{< /admonition >}}
|
||||
|
||||
1. Press `CTRL+C` to stop the Grafana server.
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users again to apply the ownership to the newly created `/usr/local/grafana/data` directory:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. [Configure the Grafana server to start at boot time using systemd]({{< relref "../../start-restart-grafana#configure-the-grafana-server-to-start-at-boot-using-systemd" >}}).
|
||||
|
||||
## Uninstall on RHEL or Fedora
|
||||
|
||||
|
||||
@@ -30,9 +30,9 @@ If you install from the RPM repository, then Grafana is automatically updated ev
|
||||
| Grafana Enterprise | grafana-enterprise | `https://rpm.grafana.com` |
|
||||
| Grafana OSS | grafana | `https://rpm.grafana.com` |
|
||||
|
||||
{{% admonition type="note" %}}
|
||||
{{< admonition type="note" >}}
|
||||
Grafana Enterprise is the recommended and default edition. It is available for free and includes all the features of the OSS edition. You can also upgrade to the [full Enterprise feature set](/products/enterprise/?utm_source=grafana-install-page), which has support for [Enterprise plugins](/grafana/plugins/?enterprise=1&utcm_source=grafana-install-page).
|
||||
{{% /admonition %}}
|
||||
{{< /admonition >}}
|
||||
|
||||
To install Grafana using the RPM repository, complete the following steps:
|
||||
|
||||
@@ -84,6 +84,8 @@ If you install Grafana manually using RPM, then you must manually update Grafana
|
||||
|
||||
## Install Grafana as a standalone binary
|
||||
|
||||
If you install Grafana manually using the standalone binaries, then you must manually update Grafana for each new version.
|
||||
|
||||
Complete the following steps to install Grafana using the standalone binaries:
|
||||
|
||||
1. Navigate to the [Grafana download page](/grafana/download).
|
||||
@@ -91,10 +93,70 @@ Complete the following steps to install Grafana using the standalone binaries:
|
||||
- The most recent Grafana version is selected by default.
|
||||
- The **Version** field displays only tagged releases. If you want to install a nightly build, click **Nightly Builds** and then select a version.
|
||||
1. Select an **Edition**.
|
||||
- **Enterprise:** This is the recommended version. It is functionally identical to the open-source version but includes features you can unlock with a license if you so choose.
|
||||
- **Enterprise:** This is the recommended version. It is functionally identical to the open source version but includes features you can unlock with a license if you so choose.
|
||||
- **Open Source:** This version is functionally identical to the Enterprise version, but you will need to download the Enterprise version if you want Enterprise features.
|
||||
1. Depending on which system you are running, click the **Linux** or **ARM** tab on the [download page](/grafana/download).
|
||||
1. Copy and paste the code from the [download page](/grafana/download) into your command line and run.
|
||||
1. Create a user account for Grafana on your system:
|
||||
|
||||
```shell
|
||||
sudo useradd -r -s /bin/false grafana
|
||||
```
|
||||
|
||||
1. Move the unpacked binary to `/usr/local/grafana`:
|
||||
|
||||
```shell
|
||||
sudo mv <DOWNLOAD PATH> /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. Create a Grafana server systemd unit file:
|
||||
|
||||
```shell
|
||||
sudo touch /etc/systemd/system/grafana-server.service
|
||||
```
|
||||
|
||||
1. Add the following to the unit file in a text editor of your choice:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Grafana Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=grafana
|
||||
Group=users
|
||||
ExecStart=/usr/local/grafana/bin/grafana server --config=/usr/local/grafana/conf/grafana.ini --homepath=/usr/local/grafana
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
1. Use the binary to manually start the Grafana server:
|
||||
|
||||
```shell
|
||||
/usr/local/grafana/bin/grafana-server --homepath /usr/local/grafana
|
||||
```
|
||||
|
||||
{{< admonition type="note" >}}
|
||||
Manually invoking the binary in this step automatically creates the `/usr/local/grafana/data` directory, which needs to be created and configured before the installation can be considered complete.
|
||||
{{< /admonition >}}
|
||||
|
||||
1. Press `CTRL+C` to stop the Grafana server.
|
||||
1. Change the owner of `/usr/local/grafana` to Grafana users again to apply the ownership to the newly created `/usr/local/grafana/data` directory:
|
||||
|
||||
```shell
|
||||
sudo chown -R grafana:users /usr/local/grafana
|
||||
```
|
||||
|
||||
1. [Configure the Grafana server to start at boot time using systemd](https://grafana.com/docs/grafana/latest/setup-grafana/start-restart-grafana/#configure-the-grafana-server-to-start-at-boot-using-systemd).
|
||||
|
||||
## Uninstall on SUSE or openSUSE
|
||||
|
||||
|
||||
@@ -244,6 +244,8 @@ To configure Grafana HTTPS and restart Grafana, complete the following steps.
|
||||
|
||||
> **Note**: The standard port for SSL traffic is 443, which you can use instead of Grafana's default port 3000. This change might require additional operating system privileges or configuration to bind to lower-numbered privileged ports.
|
||||
|
||||
1. Optional. From Grafana v11.2, edit the `cert_pass` configuration option with the decryption password if you are using encrypted certificates.
|
||||
|
||||
1. [Restart the Grafana server]({{< relref "./start-restart-grafana#linux" >}}) using `systemd`, `init.d`, or the binary as appropriate for your environment.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@test-plugins/extensions-test-app",
|
||||
"version": "1.0.0",
|
||||
"version": "11.4.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "webpack -c ./webpack.config.ts --env production",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"npmClient": "yarn",
|
||||
"version": "11.4.2"
|
||||
"version": "11.4.3"
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"private": true,
|
||||
"name": "grafana",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"repository": "github:grafana/grafana",
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production nx exec --verbose -- webpack --config scripts/webpack/webpack.prod.js",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/data",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana Data Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
@@ -36,7 +36,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@braintree/sanitize-url": "7.0.1",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@types/d3-interpolate": "^3.0.0",
|
||||
"@types/string-hash": "1.1.3",
|
||||
"d3-interpolate": "3.0.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/e2e-selectors",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana End-to-End Test Selectors Library",
|
||||
"keywords": [
|
||||
"cli",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@grafana/eslint-plugin",
|
||||
"description": "ESLint rules for use within the Grafana repo. Not suitable (or supported) for external use.",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"main": "./index.cjs",
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/flamegraph",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana flamegraph visualization component",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -44,8 +44,8 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"@leeoniya/ufuzzy": "1.0.14",
|
||||
"d3": "^7.8.5",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@grafana/saga-icons",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"private": true,
|
||||
"description": "Icons for Grafana",
|
||||
"author": "Grafana Labs",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"name": "@grafana/o11y-ds-frontend",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Library to manage traces in Grafana.",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
@@ -18,12 +18,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"react-select": "5.8.1",
|
||||
"react-use": "17.5.1",
|
||||
"rxjs": "7.8.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana/plugin-configs",
|
||||
"description": "Shared dependencies and files for core plugins",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "AGPL-3.0-only",
|
||||
"name": "@grafana/prometheus",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana Prometheus Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
@@ -38,12 +38,12 @@
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@floating-ui/react": "0.26.24",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/faro-web-sdk": "1.10.2",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"@hello-pangea/dnd": "16.6.0",
|
||||
"@leeoniya/ufuzzy": "1.0.14",
|
||||
"@lezer/common": "1.2.2",
|
||||
@@ -76,7 +76,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@emotion/eslint-plugin": "11.12.0",
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/tsconfig": "^2.0.0",
|
||||
"@rollup/plugin-image": "3.0.3",
|
||||
"@rollup/plugin-node-resolve": "15.3.0",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/runtime",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana Runtime Library",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -37,11 +37,11 @@
|
||||
"postpack": "mv package.json.bak package.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/faro-web-sdk": "^1.3.6",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"history": "4.10.1",
|
||||
"lodash": "4.17.21",
|
||||
"rxjs": "7.8.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/schema",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana Schema Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
limit: number;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip, common.OptionsWithTextFormatting {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.SingleStatBaseOptions {
|
||||
displayMode: common.BarGaugeDisplayMode;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export enum VizDisplayMode {
|
||||
Candles = 'candles',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export enum HorizontalConstraint {
|
||||
Center = 'center',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface MetricStat {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
selectedSeries: number;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export type UpdateConfig = {
|
||||
render: boolean,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export type BucketAggregation = (DateHistogram | Histogram | Terms | Filters | GeoHashGrid | Nested);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.SingleStatBaseOptions {
|
||||
minVizHeight: number;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
basemap: ui.MapLayerOptions;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
/**
|
||||
* Controls the color mode of the heatmap
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
dedupStrategy: common.LogsDedupStrategy;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export enum QueryEditorMode {
|
||||
Builder = 'builder',
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface ArcOption {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
/**
|
||||
* Select the pie chart display style.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.SingleStatBaseOptions {
|
||||
colorMode: common.BigValueColorMode;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export enum TextMode {
|
||||
Code = 'code',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
export interface Options extends common.OptionsWithTimezones {
|
||||
legend: common.VizLegendOptions;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
/**
|
||||
* Identical to timeseries... except it does not have timezone settings
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "11.4.2";
|
||||
export const pluginVersion = "11.4.3";
|
||||
|
||||
/**
|
||||
* Auto is "table" in the UI
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"private": true,
|
||||
"name": "@grafana/sql",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/grafana/grafana.git",
|
||||
@@ -15,11 +15,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"@react-awesome-query-builder/ui": "6.6.3",
|
||||
"immutable": "4.3.7",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/ui",
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"description": "Grafana Components Library",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -51,10 +51,10 @@
|
||||
"@emotion/react": "11.13.3",
|
||||
"@emotion/serialize": "1.3.2",
|
||||
"@floating-ui/react": "0.26.24",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/faro-web-sdk": "^1.3.6",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@hello-pangea/dnd": "16.6.0",
|
||||
"@leeoniya/ufuzzy": "1.0.14",
|
||||
"@monaco-editor/react": "4.6.0",
|
||||
|
||||
@@ -26,12 +26,13 @@ func (lw *logWrapper) Println(v ...any) {
|
||||
lw.logger.Info("graphite metric bridge", v...)
|
||||
}
|
||||
|
||||
func ProvideService(cfg *setting.Cfg, reg prometheus.Registerer) (*InternalMetricsService, error) {
|
||||
func ProvideService(cfg *setting.Cfg, reg prometheus.Registerer, gatherer prometheus.Gatherer) (*InternalMetricsService, error) {
|
||||
initMetricVars(reg)
|
||||
initFrontendMetrics(reg)
|
||||
|
||||
s := &InternalMetricsService{
|
||||
Cfg: cfg,
|
||||
Cfg: cfg,
|
||||
gatherer: gatherer,
|
||||
}
|
||||
return s, s.readSettings()
|
||||
}
|
||||
@@ -41,6 +42,7 @@ type InternalMetricsService struct {
|
||||
|
||||
intervalSeconds int64
|
||||
graphiteCfg *graphitebridge.Config
|
||||
gatherer prometheus.Gatherer
|
||||
}
|
||||
|
||||
func (im *InternalMetricsService) Run(ctx context.Context) error {
|
||||
|
||||
@@ -5,8 +5,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/metrics/graphitebridge"
|
||||
)
|
||||
|
||||
@@ -40,7 +38,7 @@ func (im *InternalMetricsService) parseGraphiteSettings() error {
|
||||
URL: address,
|
||||
Prefix: graphiteSection.Key("prefix").MustString("prod.grafana.%(instance_name)s"),
|
||||
CountersAsDelta: true,
|
||||
Gatherer: prometheus.DefaultGatherer,
|
||||
Gatherer: im.gatherer,
|
||||
Interval: time.Duration(im.intervalSeconds) * time.Second,
|
||||
Timeout: 10 * time.Second,
|
||||
Logger: &logWrapper{logger: metricsLogger},
|
||||
|
||||
@@ -78,10 +78,17 @@ type keySetJWKS struct {
|
||||
}
|
||||
|
||||
func NewAzureADProvider(info *social.OAuthInfo, cfg *setting.Cfg, orgRoleMapper *OrgRoleMapper, ssoSettings ssosettings.Service, features featuremgmt.FeatureToggles, cache remotecache.CacheStorage) *SocialAzureAD {
|
||||
s := newSocialBase(social.AzureADProviderName, orgRoleMapper, info, features, cfg)
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(info.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.AzureADProviderName, "error", err)
|
||||
}
|
||||
|
||||
provider := &SocialAzureAD{
|
||||
SocialBase: newSocialBase(social.AzureADProviderName, orgRoleMapper, info, features, cfg),
|
||||
SocialBase: s,
|
||||
cache: cache,
|
||||
allowedOrganizations: util.SplitString(info.Extra[allowedOrganizationsKey]),
|
||||
allowedOrganizations: allowedOrganizations,
|
||||
forceUseGraphAPI: MustBool(info.Extra[forceUseGraphAPIKey], ExtraAzureADSettingKeys[forceUseGraphAPIKey].DefaultValue.(bool)),
|
||||
}
|
||||
|
||||
@@ -169,7 +176,7 @@ func (s *SocialAzureAD) UserInfo(ctx context.Context, client *http.Client, token
|
||||
}
|
||||
|
||||
func (s *SocialAzureAD) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.AzureADProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
@@ -183,7 +190,12 @@ func (s *SocialAzureAD) Reload(ctx context.Context, settings ssoModels.SSOSettin
|
||||
appendUniqueScope(s.Config, social.OfflineAccessScope)
|
||||
}
|
||||
|
||||
s.allowedOrganizations = util.SplitString(newInfo.Extra[allowedOrganizationsKey])
|
||||
allowedOrganizations, err := util.SplitStringWithError(newInfo.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.AzureADProviderName, "error", err)
|
||||
}
|
||||
|
||||
s.allowedOrganizations = allowedOrganizations
|
||||
s.forceUseGraphAPI = MustBool(newInfo.Extra[forceUseGraphAPIKey], false)
|
||||
|
||||
return nil
|
||||
|
||||
@@ -2,6 +2,7 @@ package connectors
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -13,6 +14,7 @@ import (
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"golang.org/x/oauth2"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/login/social"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
@@ -155,9 +157,25 @@ func MustBool(value any, defaultValue bool) bool {
|
||||
return result
|
||||
}
|
||||
|
||||
// CreateOAuthInfoFromKeyValuesWithLogging creates an OAuthInfo struct from a map[string]any using mapstructure
|
||||
// it puts all extra key values into OAuthInfo's Extra map.
|
||||
// It logs as errors any parsing errors that are not critical
|
||||
func CreateOAuthInfoFromKeyValuesWithLogging(l log.Logger, provider string, settingsKV map[string]any) (*social.OAuthInfo, error) {
|
||||
parsingWarns := []error{}
|
||||
info, err := createOAuthInfoFromKeyValues(settingsKV, &parsingWarns)
|
||||
if len(parsingWarns) > 0 {
|
||||
l.Error("Invalid auth configuration setting", "error", errors.Join(parsingWarns...), "provider", provider)
|
||||
}
|
||||
return info, err
|
||||
}
|
||||
|
||||
// CreateOAuthInfoFromKeyValues creates an OAuthInfo struct from a map[string]any using mapstructure
|
||||
// it puts all extra key values into OAuthInfo's Extra map
|
||||
func CreateOAuthInfoFromKeyValues(settingsKV map[string]any) (*social.OAuthInfo, error) {
|
||||
return createOAuthInfoFromKeyValues(settingsKV, nil)
|
||||
}
|
||||
|
||||
func createOAuthInfoFromKeyValues(settingsKV map[string]any, parsingWarns *[]error) (*social.OAuthInfo, error) {
|
||||
emptyStrToSliceDecodeHook := func(from reflect.Type, to reflect.Type, data any) (any, error) {
|
||||
if from.Kind() == reflect.String && to.Kind() == reflect.Slice {
|
||||
strData, ok := data.(string)
|
||||
@@ -168,7 +186,12 @@ func CreateOAuthInfoFromKeyValues(settingsKV map[string]any) (*social.OAuthInfo,
|
||||
if strData == "" {
|
||||
return []string{}, nil
|
||||
}
|
||||
return util.SplitString(strData), nil
|
||||
|
||||
splitStr, err := util.SplitStringWithError(strData)
|
||||
if err != nil && parsingWarns != nil {
|
||||
*parsingWarns = append(*parsingWarns, err)
|
||||
}
|
||||
return splitStr, nil
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -53,6 +53,18 @@ type SocialGenericOAuth struct {
|
||||
}
|
||||
|
||||
func NewGenericOAuthProvider(info *social.OAuthInfo, cfg *setting.Cfg, orgRoleMapper *OrgRoleMapper, ssoSettings ssosettings.Service, features featuremgmt.FeatureToggles) *SocialGenericOAuth {
|
||||
s := newSocialBase(social.GenericOAuthProviderName, orgRoleMapper, info, features, cfg)
|
||||
|
||||
teamIds, err := util.SplitStringWithError(info.Extra[teamIdsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", teamIdsKey, "provider", social.GenericOAuthProviderName, "error", err)
|
||||
}
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(info.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GenericOAuthProviderName, "error", err)
|
||||
}
|
||||
|
||||
provider := &SocialGenericOAuth{
|
||||
SocialBase: newSocialBase(social.GenericOAuthProviderName, orgRoleMapper, info, features, cfg),
|
||||
teamsUrl: info.TeamsUrl,
|
||||
@@ -63,8 +75,8 @@ func NewGenericOAuthProvider(info *social.OAuthInfo, cfg *setting.Cfg, orgRoleMa
|
||||
loginAttributePath: info.Extra[loginAttributePathKey],
|
||||
idTokenAttributeName: info.Extra[idTokenAttributeNameKey],
|
||||
teamIdsAttributePath: info.TeamIdsAttributePath,
|
||||
teamIds: util.SplitString(info.Extra[teamIdsKey]),
|
||||
allowedOrganizations: util.SplitString(info.Extra[allowedOrganizationsKey]),
|
||||
teamIds: teamIds,
|
||||
allowedOrganizations: allowedOrganizations,
|
||||
}
|
||||
|
||||
if features.IsEnabledGlobally(featuremgmt.FlagSsoSettingsApi) {
|
||||
@@ -118,7 +130,7 @@ func validateTeamsUrlWhenNotEmpty(info *social.OAuthInfo, requester identity.Req
|
||||
}
|
||||
|
||||
func (s *SocialGenericOAuth) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.GenericOAuthProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
@@ -128,6 +140,15 @@ func (s *SocialGenericOAuth) Reload(ctx context.Context, settings ssoModels.SSOS
|
||||
|
||||
s.updateInfo(ctx, social.GenericOAuthProviderName, newInfo)
|
||||
|
||||
teamIds, err := util.SplitStringWithError(newInfo.Extra[teamIdsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", teamIdsKey, "provider", social.GenericOAuthProviderName, "error", err)
|
||||
}
|
||||
allowedOrganizations, err := util.SplitStringWithError(newInfo.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GenericOAuthProviderName, "error", err)
|
||||
}
|
||||
|
||||
s.teamsUrl = newInfo.TeamsUrl
|
||||
s.emailAttributeName = newInfo.EmailAttributeName
|
||||
s.emailAttributePath = newInfo.EmailAttributePath
|
||||
@@ -136,8 +157,8 @@ func (s *SocialGenericOAuth) Reload(ctx context.Context, settings ssoModels.SSOS
|
||||
s.loginAttributePath = newInfo.Extra[loginAttributePathKey]
|
||||
s.idTokenAttributeName = newInfo.Extra[idTokenAttributeNameKey]
|
||||
s.teamIdsAttributePath = newInfo.TeamIdsAttributePath
|
||||
s.teamIds = util.SplitString(newInfo.Extra[teamIdsKey])
|
||||
s.allowedOrganizations = util.SplitString(newInfo.Extra[allowedOrganizationsKey])
|
||||
s.teamIds = teamIds
|
||||
s.allowedOrganizations = allowedOrganizations
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -62,13 +62,23 @@ var (
|
||||
)
|
||||
|
||||
func NewGitHubProvider(info *social.OAuthInfo, cfg *setting.Cfg, orgRoleMapper *OrgRoleMapper, ssoSettings ssosettings.Service, features featuremgmt.FeatureToggles) *SocialGithub {
|
||||
teamIdsSplitted := util.SplitString(info.Extra[teamIdsKey])
|
||||
s := newSocialBase(social.GitHubProviderName, orgRoleMapper, info, features, cfg)
|
||||
|
||||
teamIdsSplitted, err := util.SplitStringWithError(info.Extra[teamIdsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", teamIdsKey, "provider", social.GitHubProviderName, "error", err)
|
||||
}
|
||||
teamIds := mustInts(teamIdsSplitted)
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(info.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GitHubProviderName, "error", err)
|
||||
}
|
||||
|
||||
provider := &SocialGithub{
|
||||
SocialBase: newSocialBase(social.GitHubProviderName, orgRoleMapper, info, features, cfg),
|
||||
SocialBase: s,
|
||||
teamIds: teamIds,
|
||||
allowedOrganizations: util.SplitString(info.Extra[allowedOrganizationsKey]),
|
||||
allowedOrganizations: allowedOrganizations,
|
||||
}
|
||||
|
||||
if len(teamIdsSplitted) != len(teamIds) {
|
||||
@@ -117,14 +127,22 @@ func teamIdsNumbersValidator(info *social.OAuthInfo, requester identity.Requeste
|
||||
}
|
||||
|
||||
func (s *SocialGithub) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.GitHubProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
|
||||
teamIdsSplitted := util.SplitString(newInfo.Extra[teamIdsKey])
|
||||
teamIdsSplitted, err := util.SplitStringWithError(newInfo.Extra[teamIdsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", teamIdsKey, "provider", social.GitHubProviderName, "error", err)
|
||||
}
|
||||
teamIds := mustInts(teamIdsSplitted)
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(newInfo.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GitHubProviderName, "error", err)
|
||||
}
|
||||
|
||||
if len(teamIdsSplitted) != len(teamIds) {
|
||||
s.log.Warn("Failed to parse team ids. Team ids must be a list of numbers.", "teamIds", teamIdsSplitted)
|
||||
}
|
||||
@@ -135,7 +153,7 @@ func (s *SocialGithub) Reload(ctx context.Context, settings ssoModels.SSOSetting
|
||||
s.updateInfo(ctx, social.GitHubProviderName, newInfo)
|
||||
|
||||
s.teamIds = teamIds
|
||||
s.allowedOrganizations = util.SplitString(newInfo.Extra[allowedOrganizationsKey])
|
||||
s.allowedOrganizations = allowedOrganizations
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ func (s *SocialGitlab) Validate(ctx context.Context, newSettings ssoModels.SSOSe
|
||||
}
|
||||
|
||||
func (s *SocialGitlab) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.GitlabProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ func (s *SocialGoogle) Validate(ctx context.Context, newSettings ssoModels.SSOSe
|
||||
}
|
||||
|
||||
func (s *SocialGoogle) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.GoogleProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
|
||||
@@ -36,15 +36,22 @@ type OrgRecord struct {
|
||||
}
|
||||
|
||||
func NewGrafanaComProvider(info *social.OAuthInfo, cfg *setting.Cfg, orgRoleMapper *OrgRoleMapper, ssoSettings ssosettings.Service, features featuremgmt.FeatureToggles) *SocialGrafanaCom {
|
||||
s := newSocialBase(social.GrafanaComProviderName, orgRoleMapper, info, features, cfg)
|
||||
|
||||
// Override necessary settings
|
||||
info.AuthUrl = cfg.GrafanaComURL + "/oauth2/authorize"
|
||||
info.TokenUrl = cfg.GrafanaComURL + "/api/oauth2/token"
|
||||
info.AuthStyle = "inheader"
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(info.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GrafanaComProviderName, "error", err)
|
||||
}
|
||||
|
||||
provider := &SocialGrafanaCom{
|
||||
SocialBase: newSocialBase(social.GrafanaComProviderName, orgRoleMapper, info, features, cfg),
|
||||
SocialBase: s,
|
||||
url: cfg.GrafanaComURL,
|
||||
allowedOrganizations: util.SplitString(info.Extra[allowedOrganizationsKey]),
|
||||
allowedOrganizations: allowedOrganizations,
|
||||
}
|
||||
|
||||
if features.IsEnabledGlobally(featuremgmt.FlagSsoSettingsApi) {
|
||||
@@ -77,11 +84,16 @@ func (s *SocialGrafanaCom) Validate(ctx context.Context, newSettings ssoModels.S
|
||||
}
|
||||
|
||||
func (s *SocialGrafanaCom) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.GrafanaComProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
|
||||
allowedOrganizations, err := util.SplitStringWithError(newInfo.Extra[allowedOrganizationsKey])
|
||||
if err != nil {
|
||||
s.log.Error("Invalid auth configuration setting", "config", allowedOrganizationsKey, "provider", social.GrafanaComProviderName, "error", err)
|
||||
}
|
||||
|
||||
// Override necessary settings
|
||||
newInfo.AuthUrl = s.cfg.GrafanaComURL + "/oauth2/authorize"
|
||||
newInfo.TokenUrl = s.cfg.GrafanaComURL + "/api/oauth2/token"
|
||||
@@ -93,7 +105,7 @@ func (s *SocialGrafanaCom) Reload(ctx context.Context, settings ssoModels.SSOSet
|
||||
s.updateInfo(ctx, social.GrafanaComProviderName, newInfo)
|
||||
|
||||
s.url = s.cfg.GrafanaComURL
|
||||
s.allowedOrganizations = util.SplitString(newInfo.Extra[allowedOrganizationsKey])
|
||||
s.allowedOrganizations = allowedOrganizations
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ func (s *SocialOkta) Validate(ctx context.Context, newSettings ssoModels.SSOSett
|
||||
}
|
||||
|
||||
func (s *SocialOkta) Reload(ctx context.Context, settings ssoModels.SSOSettings) error {
|
||||
newInfo, err := CreateOAuthInfoFromKeyValues(settings.Settings)
|
||||
newInfo, err := CreateOAuthInfoFromKeyValuesWithLogging(s.log, social.OktaProviderName, settings.Settings)
|
||||
if err != nil {
|
||||
return ssosettings.ErrInvalidSettings.Errorf("SSO settings map cannot be converted to OAuthInfo: %v", err)
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ func ProvideService(cfg *setting.Cfg,
|
||||
continue
|
||||
}
|
||||
|
||||
info, err := connectors.CreateOAuthInfoFromKeyValues(ssoSetting.Settings)
|
||||
info, err := connectors.CreateOAuthInfoFromKeyValuesWithLogging(ss.log, ssoSetting.Provider, ssoSetting.Settings)
|
||||
if err != nil {
|
||||
ss.log.Error("Failed to create OAuthInfo for provider", "error", err, "provider", ssoSetting.Provider)
|
||||
continue
|
||||
@@ -85,7 +85,7 @@ func ProvideService(cfg *setting.Cfg,
|
||||
|
||||
settingsKVs := convertIniSectionToMap(sec)
|
||||
|
||||
info, err := connectors.CreateOAuthInfoFromKeyValues(settingsKVs)
|
||||
info, err := connectors.CreateOAuthInfoFromKeyValuesWithLogging(ss.log, name, settingsKVs)
|
||||
if err != nil {
|
||||
ss.log.Error("Failed to create OAuthInfo for provider", "error", err, "provider", name)
|
||||
continue
|
||||
|
||||
@@ -81,29 +81,38 @@ func (s *UserSync) SyncUserHook(ctx context.Context, id *authn.Identity, _ *auth
|
||||
}
|
||||
|
||||
// Does user exist in the database?
|
||||
usr, userAuth, errUserInDB := s.getUser(ctx, id)
|
||||
if errUserInDB != nil && !errors.Is(errUserInDB, user.ErrUserNotFound) {
|
||||
s.log.FromContext(ctx).Error("Failed to fetch user", "error", errUserInDB, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
usr, userAuth, err := s.getUser(ctx, id)
|
||||
if err != nil && !errors.Is(err, user.ErrUserNotFound) {
|
||||
s.log.FromContext(ctx).Error("Failed to fetch user", "error", err, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
return errSyncUserInternal.Errorf("unable to retrieve user")
|
||||
}
|
||||
|
||||
if errors.Is(errUserInDB, user.ErrUserNotFound) {
|
||||
if errors.Is(err, user.ErrUserNotFound) {
|
||||
if !id.ClientParams.AllowSignUp {
|
||||
s.log.FromContext(ctx).Warn("Failed to create user, signup is not allowed for module", "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
return errUserSignupDisabled.Errorf("%w", errSignupNotAllowed)
|
||||
}
|
||||
|
||||
// create user
|
||||
var errCreate error
|
||||
usr, errCreate = s.createUser(ctx, id)
|
||||
if errCreate != nil {
|
||||
s.log.FromContext(ctx).Error("Failed to create user", "error", errCreate, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
return errSyncUserInternal.Errorf("unable to create user: %w", errCreate)
|
||||
usr, err = s.createUser(ctx, id)
|
||||
|
||||
// There is a possibility for a race condition when creating a user. Most clients will probably not hit this
|
||||
// case but others will. The one we have seen this issue for is auth proxy. First time a new user loads grafana
|
||||
// several requests can get "user.ErrUserNotFound" at the same time but only one of the request will be allowed
|
||||
// to actually create the user, resulting in all other requests getting "user.ErrUserAlreadyExists". So we can
|
||||
// just try to fetch the user one more to make the other request work.
|
||||
if errors.Is(err, user.ErrUserAlreadyExists) {
|
||||
usr, _, err = s.getUser(ctx, id)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
s.log.FromContext(ctx).Error("Failed to create user", "error", err, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
return errSyncUserInternal.Errorf("unable to create user: %w", err)
|
||||
}
|
||||
} else {
|
||||
// update user
|
||||
if errUpdate := s.updateUserAttributes(ctx, usr, id, userAuth); errUpdate != nil {
|
||||
s.log.FromContext(ctx).Error("Failed to update user", "error", errUpdate, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
if err := s.updateUserAttributes(ctx, usr, id, userAuth); err != nil {
|
||||
s.log.FromContext(ctx).Error("Failed to update user", "error", err, "auth_module", id.AuthenticatedBy, "auth_id", id.AuthID)
|
||||
return errSyncUserInternal.Errorf("unable to update user")
|
||||
}
|
||||
}
|
||||
@@ -297,6 +306,7 @@ func (s *UserSync) updateUserAttributes(ctx context.Context, usr *user.User, id
|
||||
func (s *UserSync) createUser(ctx context.Context, id *authn.Identity) (*user.User, error) {
|
||||
ctx, span := s.tracer.Start(ctx, "user.sync.createUser")
|
||||
defer span.End()
|
||||
|
||||
// FIXME(jguer): this should be done in the user service
|
||||
// quota check: we can have quotas on both global and org level
|
||||
// therefore we need to query check quota for both user and org services
|
||||
@@ -316,19 +326,18 @@ func (s *UserSync) createUser(ctx context.Context, id *authn.Identity) (*user.Us
|
||||
isAdmin = *id.IsGrafanaAdmin
|
||||
}
|
||||
|
||||
usr, errCreateUser := s.userService.Create(ctx, &user.CreateUserCommand{
|
||||
usr, err := s.userService.Create(ctx, &user.CreateUserCommand{
|
||||
Login: id.Login,
|
||||
Email: id.Email,
|
||||
Name: id.Name,
|
||||
IsAdmin: isAdmin,
|
||||
SkipOrgSetup: len(id.OrgRoles) > 0,
|
||||
})
|
||||
if errCreateUser != nil {
|
||||
return nil, errCreateUser
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err := s.upsertAuthConnection(ctx, usr.ID, id, true)
|
||||
if err != nil {
|
||||
if err := s.upsertAuthConnection(ctx, usr.ID, id, true); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/grafana/authlib/claims"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||
@@ -447,6 +448,34 @@ func TestUserSync_SyncUserHook(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserSync_SyncUserRetryFetch(t *testing.T) {
|
||||
userSrv := usertest.NewMockService(t)
|
||||
userSrv.On("GetByEmail", mock.Anything, mock.Anything).Return(nil, user.ErrUserNotFound).Once()
|
||||
userSrv.On("Create", mock.Anything, mock.Anything).Return(nil, user.ErrUserAlreadyExists).Once()
|
||||
userSrv.On("GetByEmail", mock.Anything, mock.Anything).Return(&user.User{ID: 1}, nil).Once()
|
||||
|
||||
s := ProvideUserSync(
|
||||
userSrv,
|
||||
authinfoimpl.ProvideOSSUserProtectionService(),
|
||||
&authinfotest.FakeService{},
|
||||
"atest.FakeQuotaService{},
|
||||
tracing.NewNoopTracerService(),
|
||||
)
|
||||
|
||||
email := "test@test.com"
|
||||
|
||||
err := s.SyncUserHook(context.Background(), &authn.Identity{
|
||||
ClientParams: authn.ClientParams{
|
||||
SyncUser: true,
|
||||
AllowSignUp: true,
|
||||
LookUpParams: login.UserLookupParams{
|
||||
Email: &email,
|
||||
},
|
||||
},
|
||||
}, nil)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestUserSync_FetchSyncedUserHook(t *testing.T) {
|
||||
type testCase struct {
|
||||
desc string
|
||||
|
||||
@@ -47,6 +47,11 @@ var (
|
||||
StatusCode: 400,
|
||||
Status: "empty-name",
|
||||
}
|
||||
ErrDashboardTitleTooLong = DashboardErr{
|
||||
Reason: "Dashboard title cannot contain more than 5 000 characters",
|
||||
StatusCode: 400,
|
||||
Status: "title-too-long",
|
||||
}
|
||||
ErrDashboardFolderCannotHaveParent = DashboardErr{
|
||||
Reason: "A Dashboard Folder cannot be added to another folder",
|
||||
StatusCode: 400,
|
||||
|
||||
@@ -121,6 +121,10 @@ func (dr *DashboardServiceImpl) BuildSaveDashboardCommand(ctx context.Context, d
|
||||
return nil, dashboards.ErrDashboardTitleEmpty
|
||||
}
|
||||
|
||||
if len(dash.Title) > 5000 {
|
||||
return nil, dashboards.ErrDashboardTitleTooLong
|
||||
}
|
||||
|
||||
metrics.MFolderIDsServiceCount.WithLabelValues(metrics.Dashboard).Inc()
|
||||
// nolint:staticcheck
|
||||
if dash.IsFolder && dash.FolderID > 0 {
|
||||
|
||||
@@ -33,9 +33,18 @@ func stringsFallback(vals ...string) string {
|
||||
|
||||
// SplitString splits a string and returns a list of strings. It supports JSON list syntax and strings separated by commas or spaces.
|
||||
// It supports quoted strings with spaces, e.g. "foo bar", "baz".
|
||||
// It will return an empty list if it fails to parse the string.
|
||||
func SplitString(str string) []string {
|
||||
result, _ := SplitStringWithError(str)
|
||||
return result
|
||||
}
|
||||
|
||||
// SplitStringWithError splits a string and returns a list of strings. It supports JSON list syntax and strings separated by commas or spaces.
|
||||
// It supports quoted strings with spaces, e.g. "foo bar", "baz".
|
||||
// It returns an error if it cannot parse the string.
|
||||
func SplitStringWithError(str string) ([]string, error) {
|
||||
if len(str) == 0 {
|
||||
return []string{}
|
||||
return []string{}, nil
|
||||
}
|
||||
|
||||
// JSON list syntax support
|
||||
@@ -43,9 +52,9 @@ func SplitString(str string) []string {
|
||||
var res []string
|
||||
err := json.Unmarshal([]byte(str), &res)
|
||||
if err != nil {
|
||||
return []string{}
|
||||
return []string{}, fmt.Errorf("incorrect format: %s", str)
|
||||
}
|
||||
return res
|
||||
return res, nil
|
||||
}
|
||||
|
||||
matches := stringListItemMatcher.FindAllString(str, -1)
|
||||
@@ -55,7 +64,7 @@ func SplitString(str string) []string {
|
||||
result[i] = strings.Trim(match, "\"")
|
||||
}
|
||||
|
||||
return result
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetAgeString returns a string representing certain time from years to minutes.
|
||||
|
||||
@@ -390,6 +390,12 @@ function handleRedirectTo(): void {
|
||||
const queryParams = locationService.getSearch();
|
||||
const redirectToParamKey = 'redirectTo';
|
||||
|
||||
if (queryParams.has('auth_token')) {
|
||||
// URL Login should not be redirected
|
||||
window.sessionStorage.removeItem(RedirectToUrlKey);
|
||||
return;
|
||||
}
|
||||
|
||||
if (queryParams.has(redirectToParamKey) && window.location.pathname !== '/') {
|
||||
const rawRedirectTo = queryParams.get(redirectToParamKey)!;
|
||||
window.sessionStorage.setItem(RedirectToUrlKey, encodeURIComponent(rawRedirectTo));
|
||||
|
||||
@@ -53,7 +53,10 @@ const strToValue = (val: string | string[]): SelectableValue[] => {
|
||||
}
|
||||
// Stored as JSON Array
|
||||
if (val.startsWith('[') && val.endsWith(']')) {
|
||||
return JSON.parse(val).map((v: string) => ({ label: v, value: v }));
|
||||
// Fallback to parsing it like a non-json string if it is not valid json, instead of crashing.
|
||||
try {
|
||||
return JSON.parse(val).map((v: string) => ({ label: v, value: v }));
|
||||
} catch {}
|
||||
}
|
||||
|
||||
return val.split(/[\s,]/).map((s) => ({ label: s, value: s }));
|
||||
|
||||
@@ -41,6 +41,8 @@ export function DashboardScenePage({ route, queryParams, history }: Props) {
|
||||
stateManager.loadSnapshot(slug!);
|
||||
} else {
|
||||
stateManager.loadDashboard({
|
||||
type,
|
||||
slug,
|
||||
uid: uid ?? '',
|
||||
route: route.routeName as DashboardRoutes,
|
||||
urlFolderUid: queryParams.folderUid,
|
||||
|
||||
@@ -46,6 +46,8 @@ interface DashboardCacheEntry {
|
||||
export interface LoadDashboardOptions {
|
||||
uid: string;
|
||||
route: DashboardRoutes;
|
||||
type?: string;
|
||||
slug?: string;
|
||||
urlFolderUid?: string;
|
||||
// A temporary approach not to clean the dashboard from local storage when navigating from Explore to Dashboard
|
||||
// We currently need it as there are two flows of fetching dashboard. The legacy one (initDashboard), uses the new one(DashboardScenePageStateManager.fetch) where the
|
||||
@@ -64,6 +66,8 @@ export class DashboardScenePageStateManager extends StateManagerBase<DashboardSc
|
||||
// To eventualy replace the fetchDashboard function from Dashboard redux state management.
|
||||
// For now it's a simplistic version to support Home and Normal dashboard routes.
|
||||
public async fetchDashboard({
|
||||
type,
|
||||
slug,
|
||||
uid,
|
||||
route,
|
||||
urlFolderUid,
|
||||
@@ -111,7 +115,7 @@ export class DashboardScenePageStateManager extends StateManagerBase<DashboardSc
|
||||
return await dashboardLoaderSrv.loadDashboard('public', '', uid);
|
||||
}
|
||||
default:
|
||||
rsp = await dashboardLoaderSrv.loadDashboard('db', '', uid);
|
||||
rsp = await dashboardLoaderSrv.loadDashboard(type || 'db', slug || '', uid);
|
||||
|
||||
if (route === DashboardRoutes.Embedded) {
|
||||
rsp.meta.isEmbedded = true;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { css } from '@emotion/css';
|
||||
import classNames from 'classnames';
|
||||
import { useEffect } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { SceneGridRow, VizPanel, sceneGraph } from '@grafana/scenes';
|
||||
@@ -12,6 +12,7 @@ import { forceActivateFullSceneObjectTree } from '../utils/utils';
|
||||
import { DashboardGridItem } from './DashboardGridItem';
|
||||
import { DashboardScene } from './DashboardScene';
|
||||
import { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';
|
||||
import { DashboardRepeatsProcessedEvent } from './types';
|
||||
|
||||
export interface Props {
|
||||
dashboard: DashboardScene;
|
||||
@@ -25,6 +26,7 @@ export function PanelSearchLayout({ dashboard, panelSearch = '', panelsPerRow }:
|
||||
const { body } = dashboard.state;
|
||||
const filteredPanels: VizPanel[] = [];
|
||||
const styles = useStyles2(getStyles);
|
||||
const [_, setRepeatsUpdated] = useState('');
|
||||
|
||||
const bodyGrid = body instanceof DefaultGridLayoutManager ? body.state.grid : null;
|
||||
|
||||
@@ -34,11 +36,11 @@ export function PanelSearchLayout({ dashboard, panelSearch = '', panelsPerRow }:
|
||||
|
||||
for (const gridItem of bodyGrid.state.children) {
|
||||
if (gridItem instanceof DashboardGridItem) {
|
||||
filterPanels(gridItem, dashboard, panelSearch, filteredPanels);
|
||||
filterPanels(gridItem, dashboard, panelSearch, filteredPanels, setRepeatsUpdated);
|
||||
} else if (gridItem instanceof SceneGridRow) {
|
||||
for (const rowItem of gridItem.state.children) {
|
||||
if (rowItem instanceof DashboardGridItem) {
|
||||
filterPanels(rowItem, dashboard, panelSearch, filteredPanels);
|
||||
filterPanels(rowItem, dashboard, panelSearch, filteredPanels, setRepeatsUpdated);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,7 +100,8 @@ function filterPanels(
|
||||
gridItem: DashboardGridItem,
|
||||
dashboard: DashboardScene,
|
||||
searchString: string,
|
||||
filteredPanels: VizPanel[]
|
||||
filteredPanels: VizPanel[],
|
||||
setRepeatsUpdated: (updated: string) => void
|
||||
) {
|
||||
const interpolatedSearchString = sceneGraph.interpolate(dashboard, searchString).toLowerCase();
|
||||
|
||||
@@ -107,6 +110,12 @@ function filterPanels(
|
||||
const panel = gridItem.state.body;
|
||||
const interpolatedTitle = panel.interpolate(panel.state.title, undefined, 'text').toLowerCase();
|
||||
if (interpolatedTitle.includes(interpolatedSearchString)) {
|
||||
gridItem.subscribeToEvent(DashboardRepeatsProcessedEvent, (event) => {
|
||||
const source = event.payload.source;
|
||||
if (source instanceof DashboardGridItem) {
|
||||
setRepeatsUpdated(event.payload.source.state.key ?? '');
|
||||
}
|
||||
});
|
||||
gridItem.activate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,12 +24,12 @@ export interface Props extends GrafanaRouteComponentProps<DashboardPageRoutePara
|
||||
export function SoloPanelPage({ queryParams }: Props) {
|
||||
const stateManager = getDashboardScenePageStateManager();
|
||||
const { dashboard } = stateManager.useState();
|
||||
const { uid = '' } = useParams();
|
||||
const { uid = '', type, slug } = useParams();
|
||||
|
||||
useEffect(() => {
|
||||
stateManager.loadDashboard({ uid, route: DashboardRoutes.Embedded });
|
||||
stateManager.loadDashboard({ uid, type, slug, route: DashboardRoutes.Embedded });
|
||||
return () => stateManager.clearState();
|
||||
}, [stateManager, queryParams, uid]);
|
||||
}, [stateManager, queryParams, uid, type, slug]);
|
||||
|
||||
if (!queryParams.panelId) {
|
||||
return <EntityNotFound entity="Panel" />;
|
||||
|
||||
@@ -44,6 +44,8 @@ function DashboardPageProxy(props: DashboardPageProxyProps) {
|
||||
route: props.route.routeName as DashboardRoutes,
|
||||
uid: params.uid ?? '',
|
||||
keepDashboardFromExploreInLocalStorage: true,
|
||||
type: params.type,
|
||||
slug: params.slug,
|
||||
});
|
||||
}, [params.uid, props.route.routeName]);
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "@grafana-plugins/grafana-azure-monitor-datasource",
|
||||
"description": "Grafana data source for Azure Monitor",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"@kusto/monaco-kusto": "^10.0.0",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"i18next": "^23.0.0",
|
||||
@@ -25,8 +25,8 @@
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "@grafana-plugins/stackdriver",
|
||||
"description": "Grafana data source for Google Cloud Monitoring",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/google-sdk": "0.1.2",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"debounce-promise": "3.1.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"i18next": "^23.0.0",
|
||||
@@ -26,8 +26,8 @@
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/grafana-postgresql-datasource",
|
||||
"description": "PostgreSQL data source plugin",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/sql": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/sql": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.2.0",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
"@types/jest": "29.5.13",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "@grafana-plugins/grafana-pyroscope-datasource",
|
||||
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"lodash": "4.17.21",
|
||||
"monaco-editor": "0.34.1",
|
||||
@@ -20,7 +20,7 @@
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/jest-dom": "6.4.2",
|
||||
"@testing-library/react": "15.0.2",
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "@grafana-plugins/grafana-testdata-datasource",
|
||||
"description": "Generates test data in different forms",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"d3-random": "^3.0.1",
|
||||
"lodash": "4.17.21",
|
||||
"micro-memoize": "^4.1.2",
|
||||
@@ -22,8 +22,8 @@
|
||||
"uuid": "9.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/jaeger",
|
||||
"description": "Jaeger plugin for Grafana",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "workspace:*",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/mssql",
|
||||
"description": "MSSQL data source plugin",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/sql": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/sql": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.2.0",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
"@types/jest": "29.5.13",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/mysql",
|
||||
"description": "MySQL data source plugin",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/experimental": "2.1.1",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/sql": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/sql": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.2.0",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/e2e-selectors": "11.4.3",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
"@types/jest": "29.5.13",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "@grafana-plugins/parca",
|
||||
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "11.4.2",
|
||||
"@grafana/runtime": "11.4.2",
|
||||
"@grafana/schema": "11.4.2",
|
||||
"@grafana/ui": "11.4.2",
|
||||
"@grafana/data": "11.4.3",
|
||||
"@grafana/runtime": "11.4.3",
|
||||
"@grafana/schema": "11.4.3",
|
||||
"@grafana/ui": "11.4.3",
|
||||
"lodash": "4.17.21",
|
||||
"monaco-editor": "0.34.1",
|
||||
"react": "18.2.0",
|
||||
@@ -18,7 +18,7 @@
|
||||
"tslib": "2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/react": "15.0.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/tempo",
|
||||
"description": "Grafana plugin for the Tempo data source.",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "workspace:*",
|
||||
@@ -39,7 +39,7 @@
|
||||
"uuid": "9.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "11.4.2",
|
||||
"@grafana/plugin-configs": "11.4.3",
|
||||
"@testing-library/dom": "10.0.0",
|
||||
"@testing-library/jest-dom": "6.4.2",
|
||||
"@testing-library/react": "15.0.2",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/zipkin",
|
||||
"description": "Zipkin plugin for Grafana",
|
||||
"private": true,
|
||||
"version": "11.4.2",
|
||||
"version": "11.4.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.4",
|
||||
"@grafana/data": "workspace:*",
|
||||
|
||||
@@ -95,8 +95,10 @@ export function getAppRoutes(): RouteDescriptor[] {
|
||||
path: '/dashboard-solo/:type/:slug',
|
||||
routeName: DashboardRoutes.Normal,
|
||||
chromeless: true,
|
||||
component: SafeDynamicImport(
|
||||
() => import(/* webpackChunkName: "SoloPanelPage" */ '../features/dashboard/containers/SoloPanelPage')
|
||||
component: SafeDynamicImport(() =>
|
||||
config.featureToggles.dashboardSceneSolo
|
||||
? import(/* webpackChunkName: "SoloPanelPage" */ '../features/dashboard-scene/solo/SoloPanelPage')
|
||||
: import(/* webpackChunkName: "SoloPanelPageOld" */ '../features/dashboard/containers/SoloPanelPage')
|
||||
),
|
||||
},
|
||||
{
|
||||
|
||||
@@ -13,16 +13,11 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
// accessible variables in this scope
|
||||
let window, document, $, jQuery, moment, kbn;
|
||||
// accessible variables in this scope: window, document, $, jQuery, moment, kbn;
|
||||
|
||||
// Setup some variables
|
||||
let dashboard;
|
||||
|
||||
// All url parameters are available via the ARGS object
|
||||
// eslint-disable-next-line no-redeclare
|
||||
let ARGS;
|
||||
|
||||
// Initialize a skeleton with nothing but a rows array and service object
|
||||
dashboard = {
|
||||
rows: [],
|
||||
@@ -56,6 +51,7 @@ for (let i = 0; i < rows; i++) {
|
||||
height: '300px',
|
||||
panels: [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Events',
|
||||
type: 'graph',
|
||||
span: 12,
|
||||
@@ -63,23 +59,17 @@ for (let i = 0; i < rows; i++) {
|
||||
linewidth: 2,
|
||||
targets: [
|
||||
{
|
||||
target: "randomWalk('" + seriesName + "')",
|
||||
scenarioId: 'random_walk',
|
||||
refId: 'A',
|
||||
seriesCount: 1,
|
||||
alias: seriesName,
|
||||
},
|
||||
{
|
||||
target: "randomWalk('random walk2')",
|
||||
scenarioId: 'random_walk',
|
||||
refId: 'B',
|
||||
seriesCount: 1,
|
||||
},
|
||||
],
|
||||
seriesOverrides: [
|
||||
{
|
||||
alias: '/random/',
|
||||
yaxis: 2,
|
||||
fill: 0,
|
||||
linewidth: 5,
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
shared: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
'use strict';
|
||||
|
||||
// accessible variables in this scope
|
||||
let window, document, ARGS, $, jQuery, moment, kbn;
|
||||
// let window, document, ARGS, $, jQuery, moment, kbn;
|
||||
|
||||
return function (callback) {
|
||||
// Setup some variables
|
||||
@@ -60,6 +60,7 @@ return function (callback) {
|
||||
height: '300px',
|
||||
panels: [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Async dashboard test',
|
||||
type: 'text',
|
||||
span: 12,
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
'use strict';
|
||||
|
||||
// accessible variables in this scope
|
||||
let window, document, $, jQuery, moment, kbn;
|
||||
// let window, document, $, jQuery, moment, kbn;
|
||||
|
||||
// Setup some variables
|
||||
let dashboard;
|
||||
|
||||
// All url parameters are available via the ARGS object
|
||||
// eslint-disable-next-line no-redeclare
|
||||
let ARGS;
|
||||
// let ARGS;
|
||||
|
||||
// Initialize a skeleton with nothing but a rows array and service object
|
||||
dashboard = {
|
||||
@@ -44,19 +44,22 @@ dashboard.templating = {
|
||||
list: [
|
||||
{
|
||||
name: 'test',
|
||||
query: 'apps.backend.*',
|
||||
refresh: 1,
|
||||
type: 'query',
|
||||
datasource: null,
|
||||
hide: 2,
|
||||
includeAll: false,
|
||||
multi: false,
|
||||
query: 'a,b,c\n',
|
||||
skipUrlSync: false,
|
||||
type: 'custom',
|
||||
},
|
||||
{
|
||||
name: 'test2',
|
||||
query: '*',
|
||||
refresh: 1,
|
||||
type: 'query',
|
||||
datasource: null,
|
||||
hide: 2,
|
||||
name: 'seriesName',
|
||||
label: 'Series name',
|
||||
hide: 0,
|
||||
includeAll: false,
|
||||
multi: false,
|
||||
query: 'series1,series2,series3\n',
|
||||
skipUrlSync: false,
|
||||
type: 'custom',
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -78,6 +81,7 @@ for (let i = 0; i < rows; i++) {
|
||||
height: '300px',
|
||||
panels: [
|
||||
{
|
||||
id: 1,
|
||||
title: 'Events',
|
||||
type: 'graph',
|
||||
span: 12,
|
||||
@@ -85,10 +89,16 @@ for (let i = 0; i < rows; i++) {
|
||||
linewidth: 2,
|
||||
targets: [
|
||||
{
|
||||
target: "randomWalk('" + seriesName + "')",
|
||||
scenarioId: 'random_walk',
|
||||
refId: 'A',
|
||||
seriesCount: 1,
|
||||
alias: seriesName,
|
||||
},
|
||||
{
|
||||
target: "randomWalk('[[test2]]')",
|
||||
scenarioId: 'random_walk',
|
||||
refId: 'B',
|
||||
seriesCount: 1,
|
||||
alias: '${seriesName}',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -47,7 +47,9 @@ def rgm_artifacts_step(
|
||||
"_EXPERIMENTAL_DAGGER_CLOUD_TOKEN": from_secret(rgm_dagger_token),
|
||||
},
|
||||
"commands": [
|
||||
"docker run --privileged --rm tonistiigi/binfmt --install all",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --version",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --uninstall 'qemu-*'",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --install all",
|
||||
cmd +
|
||||
"--go-version={} ".format(golang_version) +
|
||||
"--yarn-cache=$$YARN_CACHE_FOLDER " +
|
||||
@@ -78,7 +80,9 @@ def rgm_build_docker_step(ubuntu, alpine, depends_on = ["yarn-install"], file =
|
||||
"_EXPERIMENTAL_DAGGER_CLOUD_TOKEN": from_secret(rgm_dagger_token),
|
||||
},
|
||||
"commands": [
|
||||
"docker run --privileged --rm tonistiigi/binfmt --install all",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --version",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --uninstall 'qemu-*'",
|
||||
"docker run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28 --install all",
|
||||
"/src/grafana-build artifacts " +
|
||||
"-a docker:grafana:linux/amd64 " +
|
||||
"-a docker:grafana:linux/amd64:ubuntu " +
|
||||
|
||||
@@ -16,7 +16,7 @@ images = {
|
||||
"node_deb": "node:{}-bookworm".format(nodejs_version[:2]),
|
||||
"cloudsdk": "google/cloud-sdk:431.0.0",
|
||||
"publish": "grafana/grafana-ci-deploy:1.3.3",
|
||||
"alpine": "alpine:3.20.5",
|
||||
"alpine": "alpine:3.20.6",
|
||||
"ubuntu": "ubuntu:22.04",
|
||||
"curl": "byrnedo/alpine-curl:0.1.8",
|
||||
"plugins_slack": "plugins/slack",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
global variables
|
||||
"""
|
||||
|
||||
grabpl_version = "v3.1.1"
|
||||
grabpl_version = "v3.1.2"
|
||||
golang_version = "1.23.5"
|
||||
|
||||
# nodejs_version should match what's in ".nvmrc", but without the v prefix.
|
||||
|
||||
156
yarn.lock
156
yarn.lock
@@ -3133,13 +3133,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-azure-monitor-datasource@workspace:public/app/plugins/datasource/azuremonitor"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@kusto/monaco-kusto": "npm:^10.0.0"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
@@ -3177,13 +3177,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-postgresql-datasource@workspace:public/app/plugins/datasource/grafana-postgresql-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/sql": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/sql": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
"@types/jest": "npm:29.5.13"
|
||||
@@ -3208,11 +3208,11 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-pyroscope-datasource@workspace:public/app/plugins/datasource/grafana-pyroscope-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/jest-dom": "npm:6.4.2"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
@@ -3249,13 +3249,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-testdata-datasource@workspace:public/app/plugins/datasource/grafana-testdata-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
@@ -3332,13 +3332,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/mssql@workspace:public/app/plugins/datasource/mssql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/sql": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/sql": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
"@types/jest": "npm:29.5.13"
|
||||
@@ -3363,13 +3363,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/mysql@workspace:public/app/plugins/datasource/mysql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/sql": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/sql": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
"@types/jest": "npm:29.5.13"
|
||||
@@ -3394,11 +3394,11 @@ __metadata:
|
||||
resolution: "@grafana-plugins/parca@workspace:public/app/plugins/datasource/parca"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
@@ -3426,14 +3426,14 @@ __metadata:
|
||||
resolution: "@grafana-plugins/stackdriver@workspace:public/app/plugins/datasource/cloud-monitoring"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/google-sdk": "npm:0.1.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
"@testing-library/user-event": "npm:14.5.2"
|
||||
@@ -3481,7 +3481,7 @@ __metadata:
|
||||
"@grafana/lezer-traceql": "npm:0.0.19"
|
||||
"@grafana/monaco-logql": "npm:^0.0.7"
|
||||
"@grafana/o11y-ds-frontend": "workspace:*"
|
||||
"@grafana/plugin-configs": "npm:11.4.2"
|
||||
"@grafana/plugin-configs": "npm:11.4.3"
|
||||
"@grafana/runtime": "workspace:*"
|
||||
"@grafana/schema": "workspace:*"
|
||||
"@grafana/ui": "workspace:*"
|
||||
@@ -3591,12 +3591,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/data@npm:11.4.2, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data":
|
||||
"@grafana/data@npm:11.4.3, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/data@workspace:packages/grafana-data"
|
||||
dependencies:
|
||||
"@braintree/sanitize-url": "npm:7.0.1"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@rollup/plugin-node-resolve": "npm:15.3.0"
|
||||
"@types/d3-interpolate": "npm:^3.0.0"
|
||||
@@ -3644,7 +3644,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/e2e-selectors@npm:11.4.2, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors":
|
||||
"@grafana/e2e-selectors@npm:11.4.3, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors"
|
||||
dependencies:
|
||||
@@ -3770,9 +3770,9 @@ __metadata:
|
||||
"@babel/preset-env": "npm:7.25.7"
|
||||
"@babel/preset-react": "npm:7.25.7"
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.14"
|
||||
"@rollup/plugin-node-resolve": "npm:15.3.0"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
@@ -3854,13 +3854,13 @@ __metadata:
|
||||
resolution: "@grafana/o11y-ds-frontend@workspace:packages/grafana-o11y-ds-frontend"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/jest-dom": "npm:^6.1.2"
|
||||
"@testing-library/react": "npm:15.0.2"
|
||||
@@ -3885,7 +3885,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/plugin-configs@npm:11.4.2, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs":
|
||||
"@grafana/plugin-configs@npm:11.4.3, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/plugin-configs@workspace:packages/grafana-plugin-configs"
|
||||
dependencies:
|
||||
@@ -3925,14 +3925,14 @@ __metadata:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@emotion/eslint-plugin": "npm:11.12.0"
|
||||
"@floating-ui/react": "npm:0.26.24"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/faro-web-sdk": "npm:1.10.2"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@hello-pangea/dnd": "npm:16.6.0"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.14"
|
||||
"@lezer/common": "npm:1.2.2"
|
||||
@@ -4029,16 +4029,16 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/runtime@npm:11.4.2, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime":
|
||||
"@grafana/runtime@npm:11.4.3, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/runtime@workspace:packages/grafana-runtime"
|
||||
dependencies:
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/faro-web-sdk": "npm:^1.3.6"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@rollup/plugin-node-resolve": "npm:15.3.0"
|
||||
"@rollup/plugin-terser": "npm:0.4.4"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
@@ -4129,7 +4129,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/schema@npm:11.4.2, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema":
|
||||
"@grafana/schema@npm:11.4.3, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/schema@workspace:packages/grafana-schema"
|
||||
dependencies:
|
||||
@@ -4147,17 +4147,17 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/sql@npm:11.4.2, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql":
|
||||
"@grafana/sql@npm:11.4.3, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/sql@workspace:packages/grafana-sql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.4"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/experimental": "npm:2.1.1"
|
||||
"@grafana/runtime": "npm:11.4.2"
|
||||
"@grafana/runtime": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:11.4.2"
|
||||
"@grafana/ui": "npm:11.4.3"
|
||||
"@react-awesome-query-builder/ui": "npm:6.6.3"
|
||||
"@testing-library/dom": "npm:10.0.0"
|
||||
"@testing-library/jest-dom": "npm:^6.1.2"
|
||||
@@ -4200,7 +4200,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/ui@npm:11.4.2, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui":
|
||||
"@grafana/ui@npm:11.4.3, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/ui@workspace:packages/grafana-ui"
|
||||
dependencies:
|
||||
@@ -4210,10 +4210,10 @@ __metadata:
|
||||
"@emotion/serialize": "npm:1.3.2"
|
||||
"@faker-js/faker": "npm:^9.0.0"
|
||||
"@floating-ui/react": "npm:0.26.24"
|
||||
"@grafana/data": "npm:11.4.2"
|
||||
"@grafana/e2e-selectors": "npm:11.4.2"
|
||||
"@grafana/data": "npm:11.4.3"
|
||||
"@grafana/e2e-selectors": "npm:11.4.3"
|
||||
"@grafana/faro-web-sdk": "npm:^1.3.6"
|
||||
"@grafana/schema": "npm:11.4.2"
|
||||
"@grafana/schema": "npm:11.4.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@hello-pangea/dnd": "npm:16.6.0"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.14"
|
||||
|
||||
Reference in New Issue
Block a user