From 8480938216c693542937d9efb3086bc5097cf49e Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Fri, 23 Jan 2026 10:43:24 +0800 Subject: [PATCH 01/17] Replace ACM Konflux config with Global Hub Konflux config - Remove ACM tekton pipelines (grafana-acm-216-*) - Remove Containerfile.operator - Add Global Hub tekton pipelines (glo-grafana-globalhub-1-7-*) - Add Containerfile.konflux - Add renovate.json Signed-off-by: Meng Yan --- ...o-grafana-globalhub-1-7-pull-request.yaml} | 31 +++++---- ...ml => glo-grafana-globalhub-1-7-push.yaml} | 40 ++++++++---- ...inerfile.operator => Containerfile.konflux | 65 ++++++------------- renovate.json | 45 +++++++++++-- 4 files changed, 106 insertions(+), 75 deletions(-) rename .tekton/{grafana-acm-216-pull-request.yaml => glo-grafana-globalhub-1-7-pull-request.yaml} (69%) rename .tekton/{grafana-acm-216-push.yaml => glo-grafana-globalhub-1-7-push.yaml} (52%) rename Containerfile.operator => Containerfile.konflux (62%) diff --git a/.tekton/grafana-acm-216-pull-request.yaml b/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml similarity index 69% rename from .tekton/grafana-acm-216-pull-request.yaml rename to .tekton/glo-grafana-globalhub-1-7-pull-request.yaml index b62dba587b3a3..2e62e9f7c0192 100644 --- a/.tekton/grafana-acm-216-pull-request.yaml +++ b/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml @@ -2,21 +2,21 @@ apiVersion: tekton.dev/v1 kind: PipelineRun metadata: annotations: - build.appstudio.openshift.io/repo: https://github.com/stolostron/grafana?rev={{revision}} + build.appstudio.openshift.io/repo: https://github.com/stolostron/glo-grafana?rev={{revision}} build.appstudio.redhat.com/commit_sha: '{{revision}}' build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' build.appstudio.redhat.com/target_branch: '{{target_branch}}' pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "release-2.16" + == "release-1.7" creationTimestamp: null labels: - appstudio.openshift.io/application: release-acm-216 - appstudio.openshift.io/component: grafana-acm-216 + appstudio.openshift.io/application: release-globalhub-1-7 + appstudio.openshift.io/component: glo-grafana-globalhub-1-7 pipelines.appstudio.openshift.io/type: build - name: grafana-acm-216-on-pull-request - namespace: crt-redhat-acm-tenant + name: glo-grafana-globalhub-1-7-on-pull-request + namespace: acm-multicluster-glo-tenant spec: params: - name: git-url @@ -24,27 +24,30 @@ spec: - name: revision value: '{{revision}}' - name: output-image - value: quay.io/redhat-user-workloads/crt-redhat-acm-tenant/grafana-acm-216:on-pr-{{revision}} + value: quay.io/redhat-user-workloads/acm-multicluster-glo-tenant/glo-grafana-globalhub-1-7:on-pr-{{revision}} - name: image-expires-after value: 5d - name: build-platforms value: - linux/x86_64 + - linux/ppc64le + - linux/s390x + - linux/arm64 - name: dockerfile - value: Containerfile.operator + value: Containerfile.konflux - name: path-context value: . - - name: hermetic - value: true - - name: prefetch-input - value: '{"type": "gomod", "path": "."}' - name: build-source-image value: "true" + - name: hermetic + value: "true" + - name: prefetch-input + value: '[ {"type": "gomod", "path": "."} ]' taskRunSpecs: - pipelineTaskName: build-source-image computeResources: limits: - memory: 4Gi + memory: 2Gi pipelineRef: resolver: git params: @@ -55,7 +58,7 @@ spec: - name: pathInRepo value: pipelines/common.yaml taskRunTemplate: - serviceAccountName: build-pipeline-grafana-acm-216 + serviceAccountName: build-pipeline-glo-grafana-globalhub-1-7 workspaces: - name: git-auth secret: diff --git a/.tekton/grafana-acm-216-push.yaml b/.tekton/glo-grafana-globalhub-1-7-push.yaml similarity index 52% rename from .tekton/grafana-acm-216-push.yaml rename to .tekton/glo-grafana-globalhub-1-7-push.yaml index 68a3cc7923d18..ac5ee7a0e677d 100644 --- a/.tekton/grafana-acm-216-push.yaml +++ b/.tekton/glo-grafana-globalhub-1-7-push.yaml @@ -2,20 +2,21 @@ apiVersion: tekton.dev/v1 kind: PipelineRun metadata: annotations: - build.appstudio.openshift.io/repo: https://github.com/stolostron/grafana?rev={{revision}} + build.appstudio.openshift.io/build-nudge-files: "konflux-patch.sh" + build.appstudio.openshift.io/repo: https://github.com/stolostron/glo-grafana?rev={{revision}} build.appstudio.redhat.com/commit_sha: '{{revision}}' build.appstudio.redhat.com/target_branch: '{{target_branch}}' pipelinesascode.tekton.dev/cancel-in-progress: "false" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch - == "release-2.16" + == "release-1.7" creationTimestamp: null labels: - appstudio.openshift.io/application: release-acm-216 - appstudio.openshift.io/component: grafana-acm-216 + appstudio.openshift.io/application: release-globalhub-1-7 + appstudio.openshift.io/component: glo-grafana-globalhub-1-7 pipelines.appstudio.openshift.io/type: build - name: grafana-acm-216-on-push - namespace: crt-redhat-acm-tenant + name: glo-grafana-globalhub-1-7-on-push + namespace: acm-multicluster-glo-tenant spec: params: - name: git-url @@ -23,7 +24,7 @@ spec: - name: revision value: '{{revision}}' - name: output-image - value: quay.io/redhat-user-workloads/crt-redhat-acm-tenant/grafana-acm-216:{{revision}} + value: quay.io/redhat-user-workloads/acm-multicluster-glo-tenant/glo-grafana-globalhub-1-7:{{revision}} - name: build-platforms value: - linux/x86_64 @@ -31,20 +32,33 @@ spec: - linux/s390x - linux/arm64 - name: dockerfile - value: Containerfile.operator + value: Containerfile.konflux - name: path-context value: . + - name: build-source-image + value: "true" - name: hermetic - value: true + value: "true" - name: prefetch-input - value: '{"type": "gomod", "path": "."}' - - name: build-source-image + value: '[ {"type": "gomod", "path": "."} ]' + - name: send-slack-notification value: "true" + - name: konflux-application-name + value: "release-globalhub-1-7" + - name: slack-webhook-url-secret-name + # See details: https://konflux.pages.redhat.com/docs/users/patterns/slack-notifications.html + value: "slack-notify-webhook" + - name: slack-webhook-url-secret-key + value: "slack-webhook-url" + - name: slack-group-id + # Will mention the user in the slack message when the pipeline run failed; this is not required. + # Please make sure replace the value with component owner's slack member id. + value: "S09JCE3DF9N" taskRunSpecs: - pipelineTaskName: build-source-image computeResources: limits: - memory: 4Gi + memory: 2Gi pipelineRef: resolver: git params: @@ -55,7 +69,7 @@ spec: - name: pathInRepo value: pipelines/common.yaml taskRunTemplate: - serviceAccountName: build-pipeline-grafana-acm-216 + serviceAccountName: build-pipeline-glo-grafana-globalhub-1-7 workspaces: - name: git-auth secret: diff --git a/Containerfile.operator b/Containerfile.konflux similarity index 62% rename from Containerfile.operator rename to Containerfile.konflux index 7db08f597e415..a780478aeb8a7 100644 --- a/Containerfile.operator +++ b/Containerfile.konflux @@ -1,5 +1,5 @@ # Golang build container -FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:rhel_9_1.24 AS builder +FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:rhel_9_1.25 AS builder WORKDIR $GOPATH/src/github.com/grafana/grafana @@ -7,32 +7,26 @@ ARG COMMIT_SHA="5b85c4c2fcf5d32d4f68aaef345c53096359b2f1" ARG BUILD_BRANCH="" ARG GO_BUILD_TAGS="oss" ARG WIRE_TAGS="oss" -ENV COMMIT_SHA=${COMMIT_SHA} - -# This appears to be needed in Grafana 11.6.1 to build on Konflux -# to avoid vendor issues. Should attempt to remove it in the future -ENV GOFLAGS="-mod=readonly" +ARG BINGO="true" COPY go.mod go.sum embed.go Makefile build.go package.json ./ COPY kinds kinds -COPY kindsv2 kindsv2 COPY local local COPY packages/grafana-schema packages/grafana-schema/ COPY public/app/plugins public/app/plugins/ COPY public/api-merged.json public/api-merged.json +COPY plugins-bundled plugins-bundled COPY pkg pkg/ COPY scripts scripts/ COPY cue.mod cue.mod/ +COPY .bingo .bingo COPY conf conf COPY go.* ./ -COPY apps apps -COPY .citools .citools -# Apply custom patches -COPY stolostron-patches stolostron-patches -RUN git apply ./stolostron-patches/* +ENV GOFLAGS="-mod=readonly" -RUN go run build.go -build-tags=strictfipsruntime build +RUN go mod verify +RUN make build-go # Need to copy the generated binaries to a non-platform specific location to handle # s390x builds for example @@ -41,36 +35,20 @@ RUN cp ./bin/linux-$(go env GOARCH)/grafana* /usr/bin/ # Final container FROM registry.access.redhat.com/ubi9/ubi-minimal:latest -ARG VCS_REF -ARG VCS_URL -ARG IMAGE_NAME -ARG IMAGE_DESCRIPTION -ARG IMAGE_DISPLAY_NAME -ARG IMAGE_NAME_ARCH -ARG IMAGE_MAINTAINER -ARG IMAGE_VENDOR -ARG IMAGE_VERSION -ARG IMAGE_RELEASE -ARG IMAGE_SUMMARY -ARG IMAGE_OPENSHIFT_TAGS - -LABEL org.label-schema.vendor="Red Hat" \ - com.redhat.component="grafana" \ - org.label-schema.name="$IMAGE_NAME_ARCH" \ - org.label-schema.description="$IMAGE_DESCRIPTION" \ - org.label-schema.vcs-ref=$VCS_REF \ - org.label-schema.vcs-url=$VCS_URL \ - org.label-schema.license="Red Hat Advanced Cluster Management for Kubernetes EULA" \ - org.label-schema.schema-version="1.0" \ - name="$IMAGE_NAME" \ - maintainer="$IMAGE_MAINTAINER" \ - version="$IMAGE_VERSION" \ - release="$IMAGE_RELEASE" \ - description="$IMAGE_DESCRIPTION" \ - summary="$IMAGE_SUMMARY" \ - io.k8s.display-name="$IMAGE_DISPLAY_NAME" \ - io.k8s.description="$IMAGE_DESCRIPTION" \ - io.openshift.tags="$IMAGE_OPENSHIFT_TAGS" +# Red Hat annotations. +LABEL com.redhat.component="multicluster-globalhub-grafana-rhel9" +LABEL cpe="cpe:/a:redhat:multicluster_globalhub:1.7::el9" + +# Bundle metadata +LABEL name="multicluster-globalhub/multicluster-globalhub-grafana-rhel9" +LABEL version="release-1.7" +LABEL summary="Grafana is an open-source, general purpose dashboard and graph composer" +LABEL io.openshift.expose-services="" +LABEL io.openshift.tags="data,images" +LABEL io.k8s.display-name="Grafana" +LABEL io.k8s.description="Grafana is an open-source, general purpose dashboard and graph composer" +LABEL maintainer="['acm-component-maintainers@redhat.com']" +LABEL description="Grafana is an open-source, general purpose dashboard and graph composer" ARG GF_UID="472" ARG GF_GID="472" @@ -111,4 +89,3 @@ COPY ./packaging/docker/run.sh /run.sh USER grafana ENTRYPOINT [ "/run.sh" ] - diff --git a/renovate.json b/renovate.json index 9f92604069b67..e65da3288eaa6 100644 --- a/renovate.json +++ b/renovate.json @@ -1,7 +1,44 @@ { - "baseBranches": ["main", "/^release-\\d+\\.\\d+/"], + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranchPatterns": ["release-1.6", "release-1.5", "release-1.4"], + "addLabels": ["ok-to-test"], + "schedule": ["every weekend"], + "timezone": "America/New_York", "gomod": { - "updatePinnedDependencies": false - }, - "lockFileMaintenance": false, + "packageRules": [ + { + "matchManagers": ["gomod"], + "matchDepTypes": ["indirect"], + "matchUpdateTypes": [ + "pin", + "pinDigest", + "digest", + "lockFileMaintenance", + "rollback", + "bump", + "replacement", + "patch", + "minor", + "major" + ], + "enabled": false + }, + { + "matchManagers": ["gomod"], + "matchDepTypes": ["require"], + "matchUpdateTypes": [ + "pin", + "pinDigest", + "digest", + "lockFileMaintenance", + "rollback", + "bump", + "replacement", + "patch", + "major" + ], + "enabled": false + } + ] + } } From 1d66f58ecdc08413949c294cf893923a1c6a307e Mon Sep 17 00:00:00 2001 From: clyang82 Date: Tue, 9 Dec 2025 16:40:18 +0800 Subject: [PATCH 02/17] Upgrade golang to 1.25.3 Signed-off-by: clyang82 --- Dockerfile.ocp | 2 +- go.mod | 2 +- go.work | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile.ocp b/Dockerfile.ocp index eadb541c352b4..8b26dd19ba62e 100644 --- a/Dockerfile.ocp +++ b/Dockerfile.ocp @@ -1,5 +1,5 @@ # Golang build container -FROM registry.ci.openshift.org/stolostron/builder:go1.24-linux AS builder +FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:rhel_9_1.25 AS builder WORKDIR $GOPATH/src/github.com/grafana/grafana diff --git a/go.mod b/go.mod index 1c4d2233a491d..90d848feb967c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/grafana/grafana -go 1.24.6 +go 1.25.3 require ( buf.build/gen/go/parca-dev/parca/connectrpc/go v1.18.1-20250703125925-3f0fcf4bff96.1 // @grafana/observability-traces-and-profiling diff --git a/go.work b/go.work index 4241fca5f9268..91586b99fbf20 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.24.6 +go 1.25.3 // The `skip:golangci-lint` comment tag is used to exclude the package from the `golangci-lint` GitHub Action. // The module at the root of the repo (`.`) is excluded because ./pkg/... is included manually in the `golangci-lint` configuration. From 0fefad41eb071b3d2bc9fbd90a0f0e0ca98ca45b Mon Sep 17 00:00:00 2001 From: Chunlin Yang Date: Sat, 13 Dec 2025 11:34:36 +0800 Subject: [PATCH 03/17] Fix CVE-2025-64756 and CVE-2025-66031: Upgrade glob and node-forge (#185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix CVE-2025-64756 and CVE-2025-66031: Upgrade glob and node-forge This commit addresses two security vulnerabilities in dependencies: 1. CVE-2025-64756 (ACM-27068): glob command injection vulnerability - Upgraded glob from 10.4.1 to 11.1.0 - Vulnerability allowed arbitrary command execution via malicious filenames - Fixed by upgrading to glob 11.1.0+ 2. CVE-2025-66031 (ACM-27062): node-forge ASN.1 unbounded recursion - Upgraded node-forge from ^1.3.1 to ^1.3.2 - Vulnerability could cause DoS via stack exhaustion - Fixed by upgrading to node-forge 1.3.2+ Changes: - Updated package.json with new dependency versions - Updated yarn.lock with resolved dependencies Fixes: ACM-27068, ACM-27062 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 Signed-off-by: clyang82 * Update build artifacts after dependency upgrades This commit updates the build artifacts after upgrading glob and node-forge dependencies for CVE fixes (ACM-27068, ACM-27062). Changes: - Rebuilt AngularApp bundle with new hash - Rebuilt runtime bundle with new hash - Updated assets manifest 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 Signed-off-by: clyang82 * rerun in linux --------- Signed-off-by: clyang82 Co-authored-by: Claude Sonnet 4.5 --- package.json | 4 ++-- yarn.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 41c72c5e05e2d..0b3555f924b40 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "expose-loader": "5.0.1", "fishery": "^2.2.2", "fork-ts-checker-webpack-plugin": "9.1.0", - "glob": "11.0.3", + "glob": "11.1.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "http-server": "14.1.1", @@ -368,7 +368,7 @@ "monaco-editor": "0.34.1", "moveable": "0.53.0", "nanoid": "^5.0.9", - "node-forge": "^1.3.1", + "node-forge": "^1.3.2", "ol": "10.6.1", "ol-ext": "4.0.33", "pluralize": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index 5e58ad1c98ee8..5eb130f7cf0a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17849,19 +17849,19 @@ __metadata: languageName: node linkType: hard -"glob@npm:*, glob@npm:11.0.3, glob@npm:^11.0.0": - version: 11.0.3 - resolution: "glob@npm:11.0.3" +"glob@npm:*, glob@npm:11.1.0, glob@npm:^11.0.0": + version: 11.1.0 + resolution: "glob@npm:11.1.0" dependencies: foreground-child: "npm:^3.3.1" jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.0.3" + minimatch: "npm:^10.1.1" minipass: "npm:^7.1.2" package-json-from-dist: "npm:^1.0.0" path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10/2ae536c1360c0266b523b2bfa6aadc10144a8b7e08869b088e37ac3c27cd30774f82e4bfb291cde796776e878f9e13200c7ff44010eb7054e00f46f649397893 + checksum: 10/da4501819633daff8822c007bb3f93d5c4d2cbc7b15a8e886660f4497dd251a1fb4f53a85fba1e760b31704eff7164aeb2c7a82db10f9f2c362d12c02fe52cf3 languageName: node linkType: hard @@ -23500,10 +23500,10 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1.3.1": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d +"node-forge@npm:^1.3.2": + version: 1.3.3 + resolution: "node-forge@npm:1.3.3" + checksum: 10/f41c31b9296771a4b8c955d58417471712f54f324603a35f8e6cbac19d5e6eaaf5fd5fd14584dfedecbf46a05438ded6eee60a5f2f0822fc5061aaa073cfc75d languageName: node linkType: hard From 642326c8cb04a3ced6df46db94d85f1ac52126d2 Mon Sep 17 00:00:00 2001 From: Chunlin Yang Date: Sat, 13 Dec 2025 12:00:04 +0800 Subject: [PATCH 04/17] Fix CVE-2024-25621: Upgrade containerd to v1.7.29 (#181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix CVE-2024-25621: Upgrade containerd to v1.7.29 This commit fixes CVE-2024-25621, a local privilege escalation vulnerability in containerd versions up to 1.7.28. The issue involved overly broad default permissions for directory paths in containerd. Changes: - Added replace directive to force containerd v1.7.29 - Updated go.mod and go.sum with new containerd version - Also updated transitive dependencies (go-jose, golang.org/x/crypto) Fixes: ACM-27214 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 Signed-off-by: clyang82 * Fix k8s.io dependency resolution for go work vendor Add replace directives in go.mod for k8s.io components to resolve v0.0.0 dependency issues that prevented go work vendor from running successfully. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --------- Signed-off-by: clyang82 Co-authored-by: Claude Sonnet 4.5 --- go.mod | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go.mod b/go.mod index 90d848feb967c..3181a7fc2955b 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,9 @@ module github.com/grafana/grafana go 1.25.3 +// Override containerd to fix CVE-2024-25621 (local privilege escalation) +replace github.com/containerd/containerd => github.com/containerd/containerd v1.7.29 + require ( buf.build/gen/go/parca-dev/parca/connectrpc/go v1.18.1-20250703125925-3f0fcf4bff96.1 // @grafana/observability-traces-and-profiling buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.2-20250703125925-3f0fcf4bff96.1 // @grafana/observability-traces-and-profiling From df41156dcacaae6cfd2162077ae6568d3b3f46e8 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Fri, 23 Jan 2026 11:12:13 +0800 Subject: [PATCH 05/17] Revert glob/node-forge CVE changes to fix yarn.lock sync The glob and node-forge version upgrades require yarn.lock regeneration which cannot be done from a fork PR. Reverting to original versions to maintain consistency between package.json and yarn.lock. The containerd CVE fix (via go.mod replace directive) is still in place. Signed-off-by: Meng Yan --- package.json | 4 ++-- yarn.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 0b3555f924b40..41c72c5e05e2d 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "expose-loader": "5.0.1", "fishery": "^2.2.2", "fork-ts-checker-webpack-plugin": "9.1.0", - "glob": "11.1.0", + "glob": "11.0.3", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "http-server": "14.1.1", @@ -368,7 +368,7 @@ "monaco-editor": "0.34.1", "moveable": "0.53.0", "nanoid": "^5.0.9", - "node-forge": "^1.3.2", + "node-forge": "^1.3.1", "ol": "10.6.1", "ol-ext": "4.0.33", "pluralize": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index 5eb130f7cf0a2..5e58ad1c98ee8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17849,19 +17849,19 @@ __metadata: languageName: node linkType: hard -"glob@npm:*, glob@npm:11.1.0, glob@npm:^11.0.0": - version: 11.1.0 - resolution: "glob@npm:11.1.0" +"glob@npm:*, glob@npm:11.0.3, glob@npm:^11.0.0": + version: 11.0.3 + resolution: "glob@npm:11.0.3" dependencies: foreground-child: "npm:^3.3.1" jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.1.1" + minimatch: "npm:^10.0.3" minipass: "npm:^7.1.2" package-json-from-dist: "npm:^1.0.0" path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10/da4501819633daff8822c007bb3f93d5c4d2cbc7b15a8e886660f4497dd251a1fb4f53a85fba1e760b31704eff7164aeb2c7a82db10f9f2c362d12c02fe52cf3 + checksum: 10/2ae536c1360c0266b523b2bfa6aadc10144a8b7e08869b088e37ac3c27cd30774f82e4bfb291cde796776e878f9e13200c7ff44010eb7054e00f46f649397893 languageName: node linkType: hard @@ -23500,10 +23500,10 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1.3.2": - version: 1.3.3 - resolution: "node-forge@npm:1.3.3" - checksum: 10/f41c31b9296771a4b8c955d58417471712f54f324603a35f8e6cbac19d5e6eaaf5fd5fd14584dfedecbf46a05438ded6eee60a5f2f0822fc5061aaa073cfc75d +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d languageName: node linkType: hard From bc569e1ee16a570a4c3ab19efa129841a7f1472e Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Fri, 23 Jan 2026 11:57:38 +0800 Subject: [PATCH 06/17] Fix Containerfile.konflux for release-1.7 codebase Update Containerfile.konflux to match the release-1.7 directory structure: - Remove references to non-existent directories (plugins-bundled, .bingo) - Add kindsv2, apps, .citools directories - Add stolostron-patches and apply them during build - Use ubi:latest instead of ubi-minimal (matches Dockerfile.ocp) - Fix binary copy path Signed-off-by: Meng Yan --- Containerfile.konflux | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Containerfile.konflux b/Containerfile.konflux index a780478aeb8a7..09d61e836c27a 100644 --- a/Containerfile.konflux +++ b/Containerfile.konflux @@ -7,33 +7,35 @@ ARG COMMIT_SHA="5b85c4c2fcf5d32d4f68aaef345c53096359b2f1" ARG BUILD_BRANCH="" ARG GO_BUILD_TAGS="oss" ARG WIRE_TAGS="oss" -ARG BINGO="true" COPY go.mod go.sum embed.go Makefile build.go package.json ./ COPY kinds kinds +COPY kindsv2 kindsv2 COPY local local COPY packages/grafana-schema packages/grafana-schema/ COPY public/app/plugins public/app/plugins/ COPY public/api-merged.json public/api-merged.json -COPY plugins-bundled plugins-bundled COPY pkg pkg/ COPY scripts scripts/ COPY cue.mod cue.mod/ -COPY .bingo .bingo COPY conf conf COPY go.* ./ +COPY apps apps +COPY .citools .citools -ENV GOFLAGS="-mod=readonly" +# Apply custom patches +COPY stolostron-patches stolostron-patches +RUN git apply ./stolostron-patches/* RUN go mod verify -RUN make build-go +RUN make build-go # Need to copy the generated binaries to a non-platform specific location to handle # s390x builds for example -RUN cp ./bin/linux-$(go env GOARCH)/grafana* /usr/bin/ +RUN cp $GOPATH/src/github.com/grafana/grafana/bin/linux-$(go env GOARCH)/grafana* /usr/bin/ # Final container -FROM registry.access.redhat.com/ubi9/ubi-minimal:latest +FROM registry.access.redhat.com/ubi9/ubi:latest # Red Hat annotations. LABEL com.redhat.component="multicluster-globalhub-grafana-rhel9" From 0ae221e50e1194f5511115e39c8215983f5f2177 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Fri, 23 Jan 2026 15:20:37 +0800 Subject: [PATCH 07/17] Simplify Containerfile.konflux for hermetic build - Remove stolostron-patches and git apply (not compatible with hermetic build) - Add GOFLAGS="-mod=readonly" for hermetic build compatibility - Use ubi-minimal as base image (matches original Konflux config) - Use relative path for binary copy (./bin/ instead of $GOPATH/...) - Keep kindsv2, apps, .citools directories for release-1.7 compatibility Signed-off-by: Meng Yan --- Containerfile.konflux | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Containerfile.konflux b/Containerfile.konflux index 09d61e836c27a..3cc55b138ddf3 100644 --- a/Containerfile.konflux +++ b/Containerfile.konflux @@ -23,19 +23,17 @@ COPY go.* ./ COPY apps apps COPY .citools .citools -# Apply custom patches -COPY stolostron-patches stolostron-patches -RUN git apply ./stolostron-patches/* +ENV GOFLAGS="-mod=readonly" RUN go mod verify RUN make build-go # Need to copy the generated binaries to a non-platform specific location to handle # s390x builds for example -RUN cp $GOPATH/src/github.com/grafana/grafana/bin/linux-$(go env GOARCH)/grafana* /usr/bin/ +RUN cp ./bin/linux-$(go env GOARCH)/grafana* /usr/bin/ # Final container -FROM registry.access.redhat.com/ubi9/ubi:latest +FROM registry.access.redhat.com/ubi9/ubi-minimal:latest # Red Hat annotations. LABEL com.redhat.component="multicluster-globalhub-grafana-rhel9" From bfc515b3d3e05259069ccb95f5f10722c7a62fd5 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Mon, 26 Jan 2026 12:31:38 +0800 Subject: [PATCH 08/17] Fix Containerfile.konflux build: apply patches and use build.go - Use 'git init && git apply' to apply stolostron patches - Use 'go run build.go -build-tags=strictfipsruntime build' instead of make build-go - This matches the ACM build approach which works with Konflux Signed-off-by: Meng Yan --- Containerfile.konflux | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Containerfile.konflux b/Containerfile.konflux index 3cc55b138ddf3..3345f13121065 100644 --- a/Containerfile.konflux +++ b/Containerfile.konflux @@ -23,10 +23,14 @@ COPY go.* ./ COPY apps apps COPY .citools .citools +# Apply custom patches +COPY stolostron-patches stolostron-patches +RUN git init && git apply ./stolostron-patches/* + ENV GOFLAGS="-mod=readonly" RUN go mod verify -RUN make build-go +RUN go run build.go -build-tags=strictfipsruntime build # Need to copy the generated binaries to a non-platform specific location to handle # s390x builds for example From e958ae1e498b21175402a17137041d9e0272a5be Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Mon, 26 Jan 2026 12:36:48 +0800 Subject: [PATCH 09/17] Fix CVE-2025-68156: Upgrade expr-lang/expr to v1.17.7 Addresses HIGH severity vulnerability in github.com/expr-lang/expr: - Denial of Service via uncontrolled recursion in expression evaluation - Affected files: .citools/src/cog/go.mod, pkg/codegen/go.mod, pkg/plugins/codegen/go.mod Signed-off-by: Meng Yan --- .citools/src/cog/go.mod | 2 +- .citools/src/cog/go.sum | 8 ++++---- go.work.sum | 2 ++ pkg/codegen/go.mod | 2 +- pkg/codegen/go.sum | 4 ++-- pkg/plugins/codegen/go.mod | 2 +- pkg/plugins/codegen/go.sum | 4 ++-- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.citools/src/cog/go.mod b/.citools/src/cog/go.mod index 1b0f124666335..afa50e50a2c74 100644 --- a/.citools/src/cog/go.mod +++ b/.citools/src/cog/go.mod @@ -10,7 +10,7 @@ require ( github.com/cockroachdb/apd/v3 v3.2.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/proto v1.13.2 // indirect - github.com/expr-lang/expr v1.17.0 // indirect + github.com/expr-lang/expr v1.17.7 // indirect github.com/getkin/kin-openapi v0.132.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect diff --git a/.citools/src/cog/go.sum b/.citools/src/cog/go.sum index 513236e89f4aa..35213e9f14ccb 100644 --- a/.citools/src/cog/go.sum +++ b/.citools/src/cog/go.sum @@ -9,8 +9,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/proto v1.13.2 h1:z/etSFO3uyXeuEsVPzfl56WNgzcvIr42aQazXaQmFZY= github.com/emicklei/proto v1.13.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= -github.com/expr-lang/expr v1.17.0 h1:+vpszOyzKLQXC9VF+wA8cVA0tlA984/Wabc/1hF9Whg= -github.com/expr-lang/expr v1.17.0/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/expr-lang/expr v1.17.7 h1:Q0xY/e/2aCIp8g9s/LGvMDCC5PxYlvHgDZRQ4y16JX8= +github.com/expr-lang/expr v1.17.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/getkin/kin-openapi v0.132.0 h1:3ISeLMsQzcb5v26yeJrBcdTCEQTag36ZjaGk7MIRUwk= github.com/getkin/kin-openapi v0.132.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= @@ -89,8 +89,8 @@ golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= diff --git a/go.work.sum b/go.work.sum index d7e4f2a81f252..d4e6319b74a9a 100644 --- a/go.work.sum +++ b/go.work.sum @@ -854,6 +854,8 @@ github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjT github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/expr-lang/expr v1.16.9/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/expr-lang/expr v1.17.0/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/expr-lang/expr v1.17.7 h1:Q0xY/e/2aCIp8g9s/LGvMDCC5PxYlvHgDZRQ4y16JX8= +github.com/expr-lang/expr v1.17.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= diff --git a/pkg/codegen/go.mod b/pkg/codegen/go.mod index 55a4d6ee4dab4..8cb9da1cbce7a 100644 --- a/pkg/codegen/go.mod +++ b/pkg/codegen/go.mod @@ -17,7 +17,7 @@ require ( github.com/dave/jennifer v1.7.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/proto v1.13.2 // indirect - github.com/expr-lang/expr v1.17.2 // indirect + github.com/expr-lang/expr v1.17.7 // indirect github.com/getkin/kin-openapi v0.132.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect diff --git a/pkg/codegen/go.sum b/pkg/codegen/go.sum index 9afab1f859e7b..e9442059c4f9f 100644 --- a/pkg/codegen/go.sum +++ b/pkg/codegen/go.sum @@ -11,8 +11,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/proto v1.13.2 h1:z/etSFO3uyXeuEsVPzfl56WNgzcvIr42aQazXaQmFZY= github.com/emicklei/proto v1.13.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= -github.com/expr-lang/expr v1.17.2 h1:o0A99O/Px+/DTjEnQiodAgOIK9PPxL8DtXhBRKC+Iso= -github.com/expr-lang/expr v1.17.2/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/expr-lang/expr v1.17.7 h1:Q0xY/e/2aCIp8g9s/LGvMDCC5PxYlvHgDZRQ4y16JX8= +github.com/expr-lang/expr v1.17.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/getkin/kin-openapi v0.132.0 h1:3ISeLMsQzcb5v26yeJrBcdTCEQTag36ZjaGk7MIRUwk= github.com/getkin/kin-openapi v0.132.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= diff --git a/pkg/plugins/codegen/go.mod b/pkg/plugins/codegen/go.mod index 2aa1c140a0baf..b363ebd499b2f 100644 --- a/pkg/plugins/codegen/go.mod +++ b/pkg/plugins/codegen/go.mod @@ -17,7 +17,7 @@ require ( github.com/cockroachdb/apd/v3 v3.2.1 // indirect github.com/dave/dst v0.27.3 // indirect github.com/emicklei/proto v1.13.2 // indirect - github.com/expr-lang/expr v1.17.2 // indirect + github.com/expr-lang/expr v1.17.7 // indirect github.com/getkin/kin-openapi v0.132.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect diff --git a/pkg/plugins/codegen/go.sum b/pkg/plugins/codegen/go.sum index cd78ae32b2da7..1d45adb75059f 100644 --- a/pkg/plugins/codegen/go.sum +++ b/pkg/plugins/codegen/go.sum @@ -12,8 +12,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/proto v1.13.2 h1:z/etSFO3uyXeuEsVPzfl56WNgzcvIr42aQazXaQmFZY= github.com/emicklei/proto v1.13.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= -github.com/expr-lang/expr v1.17.2 h1:o0A99O/Px+/DTjEnQiodAgOIK9PPxL8DtXhBRKC+Iso= -github.com/expr-lang/expr v1.17.2/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= +github.com/expr-lang/expr v1.17.7 h1:Q0xY/e/2aCIp8g9s/LGvMDCC5PxYlvHgDZRQ4y16JX8= +github.com/expr-lang/expr v1.17.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/getkin/kin-openapi v0.132.0 h1:3ISeLMsQzcb5v26yeJrBcdTCEQTag36ZjaGk7MIRUwk= github.com/getkin/kin-openapi v0.132.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= From 31925a458b7e0ad039f1b88647a3414607fd7400 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Mon, 26 Jan 2026 21:49:30 +0800 Subject: [PATCH 10/17] Fix Konflux build: add workspace modules to prefetch-input Add pkg/codegen and pkg/plugins/codegen to cachi2 prefetch-input so that their dependencies (including expr-lang/expr v1.17.7) are properly prefetched for hermetic builds. Signed-off-by: Meng Yan --- .tekton/glo-grafana-globalhub-1-7-pull-request.yaml | 2 +- .tekton/glo-grafana-globalhub-1-7-push.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml b/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml index 2e62e9f7c0192..eed7e55163c71 100644 --- a/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml +++ b/.tekton/glo-grafana-globalhub-1-7-pull-request.yaml @@ -42,7 +42,7 @@ spec: - name: hermetic value: "true" - name: prefetch-input - value: '[ {"type": "gomod", "path": "."} ]' + value: '[ {"type": "gomod", "path": "."}, {"type": "gomod", "path": "pkg/codegen"}, {"type": "gomod", "path": "pkg/plugins/codegen"} ]' taskRunSpecs: - pipelineTaskName: build-source-image computeResources: diff --git a/.tekton/glo-grafana-globalhub-1-7-push.yaml b/.tekton/glo-grafana-globalhub-1-7-push.yaml index ac5ee7a0e677d..41552df1b66ee 100644 --- a/.tekton/glo-grafana-globalhub-1-7-push.yaml +++ b/.tekton/glo-grafana-globalhub-1-7-push.yaml @@ -40,7 +40,7 @@ spec: - name: hermetic value: "true" - name: prefetch-input - value: '[ {"type": "gomod", "path": "."} ]' + value: '[ {"type": "gomod", "path": "."}, {"type": "gomod", "path": "pkg/codegen"}, {"type": "gomod", "path": "pkg/plugins/codegen"} ]' - name: send-slack-notification value: "true" - name: konflux-application-name From b74cc345e7ef4bbe4686db16e662af998985be25 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Tue, 27 Jan 2026 09:40:11 +0800 Subject: [PATCH 11/17] Upgrade Go version to 1.25.3 in sub-modules Align sub-module Go versions with the workspace (go.work): - pkg/codegen/go.mod: 1.24.6 -> 1.25.3 - pkg/plugins/codegen/go.mod: 1.24.6 -> 1.25.3 - .citools/src/cog/go.mod: 1.24.5 -> 1.25.3 Signed-off-by: Meng Yan --- .citools/src/cog/go.mod | 2 +- pkg/codegen/go.mod | 2 +- pkg/plugins/codegen/go.mod | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.citools/src/cog/go.mod b/.citools/src/cog/go.mod index afa50e50a2c74..bc4ada48c721d 100644 --- a/.citools/src/cog/go.mod +++ b/.citools/src/cog/go.mod @@ -1,6 +1,6 @@ module cog -go 1.24.5 +go 1.25.3 tool github.com/grafana/cog/cmd/cli diff --git a/pkg/codegen/go.mod b/pkg/codegen/go.mod index 8cb9da1cbce7a..79e7f65097a72 100644 --- a/pkg/codegen/go.mod +++ b/pkg/codegen/go.mod @@ -1,6 +1,6 @@ module github.com/grafana/grafana/pkg/codegen -go 1.24.6 +go 1.25.3 require ( cuelang.org/go v0.11.1 diff --git a/pkg/plugins/codegen/go.mod b/pkg/plugins/codegen/go.mod index b363ebd499b2f..ce6aae239d18a 100644 --- a/pkg/plugins/codegen/go.mod +++ b/pkg/plugins/codegen/go.mod @@ -1,6 +1,6 @@ module github.com/grafana/grafana/pkg/plugins/codegen -go 1.24.6 +go 1.25.3 replace github.com/grafana/grafana/pkg/codegen => ../../codegen From 9b4de6c47d3f09054e202fd857efad3bdae8312f Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Tue, 27 Jan 2026 10:05:53 +0800 Subject: [PATCH 12/17] Fix flaky TestAlertRuleRetry test timeout Increase EventuallyWithT timeout from 5ms to 5s and poll interval from 1ms to 10ms to avoid flaky test failures in CI environments. Signed-off-by: Meng Yan --- pkg/services/ngalert/schedule/alert_rule_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/services/ngalert/schedule/alert_rule_test.go b/pkg/services/ngalert/schedule/alert_rule_test.go index 5e301c5aa0839..f910e85cfe28b 100644 --- a/pkg/services/ngalert/schedule/alert_rule_test.go +++ b/pkg/services/ngalert/schedule/alert_rule_test.go @@ -1252,7 +1252,7 @@ func TestAlertRuleRetry(t *testing.T) { t.Run("first attempt", func(t *testing.T) { require.EventuallyWithT(t, func(c *assert.CollectT) { compareMetrics(c, 1, 1) - }, 5*time.Millisecond, 1*time.Millisecond) + }, 5*time.Second, 10*time.Millisecond) }) t.Run("second attempt", func(t *testing.T) { @@ -1260,7 +1260,7 @@ func TestAlertRuleRetry(t *testing.T) { fakeClock.Add(backoffDuration) require.EventuallyWithT(t, func(c *assert.CollectT) { compareMetrics(c, 1, 2) - }, 5*time.Millisecond, 1*time.Millisecond) + }, 5*time.Second, 10*time.Millisecond) }) t.Run("third attempt", func(t *testing.T) { @@ -1268,7 +1268,7 @@ func TestAlertRuleRetry(t *testing.T) { fakeClock.Add(backoffDuration) require.EventuallyWithT(t, func(c *assert.CollectT) { compareMetrics(c, 1, 3) - }, 5*time.Millisecond, 1*time.Millisecond) + }, 5*time.Second, 10*time.Millisecond) }) t.Run("no fourth attempt", func(t *testing.T) { @@ -1276,7 +1276,7 @@ func TestAlertRuleRetry(t *testing.T) { fakeClock.Add(backoffDuration * 10) require.EventuallyWithT(t, func(c *assert.CollectT) { compareMetrics(c, 1, 3) - }, 5*time.Millisecond, 1*time.Millisecond) + }, 5*time.Second, 10*time.Millisecond) }) } From 94c852d0087b01cafa2ca021b3832d595102aa1e Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Tue, 27 Jan 2026 15:55:22 +0800 Subject: [PATCH 13/17] Remove workflows requiring unavailable runners Delete GitHub Actions workflows that require large runners (ubuntu-x64-large, ubuntu-x64-large-io) which are not available in the stolostron/glo-grafana fork. Removed workflows: - backend-unit-tests.yml (Grafana unit tests) - pr-test-integration.yml (MySQL/Postgres/Sqlite tests) - pr-e2e-tests.yml (E2E tests) - pr-frontend-unit-tests.yml (Frontend tests) - pr-test-docker.yml (Docker build tests) - release-build.yml (Release builds) Signed-off-by: Meng Yan --- .github/workflows/backend-unit-tests.yml | 148 ----- .github/workflows/pr-e2e-tests.yml | 578 ------------------- .github/workflows/pr-frontend-unit-tests.yml | 171 ------ .github/workflows/pr-test-docker.yml | 39 -- .github/workflows/pr-test-integration.yml | 230 -------- .github/workflows/release-build.yml | 337 ----------- 6 files changed, 1503 deletions(-) delete mode 100644 .github/workflows/backend-unit-tests.yml delete mode 100644 .github/workflows/pr-e2e-tests.yml delete mode 100644 .github/workflows/pr-frontend-unit-tests.yml delete mode 100644 .github/workflows/pr-test-docker.yml delete mode 100644 .github/workflows/pr-test-integration.yml delete mode 100644 .github/workflows/release-build.yml diff --git a/.github/workflows/backend-unit-tests.yml b/.github/workflows/backend-unit-tests.yml deleted file mode 100644 index a0670dfc6bd3f..0000000000000 --- a/.github/workflows/backend-unit-tests.yml +++ /dev/null @@ -1,148 +0,0 @@ -name: Backend Unit Tests - -on: - pull_request: - push: - branches: - - main - - release-*.*.* - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} - -permissions: {} - -jobs: - detect-changes: - name: Detect whether code changed - # Run on `grafana/grafana` main branch, or on pull requests to prevent double-running on mirrors - if: (github.event_name == 'pull_request' || (github.event_name == 'push' && github.repository == 'grafana/grafana')) - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.backend }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/backend-unit-tests.yml - - grafana: - # Run this workflow only for PRs from forks - # the `pr-backend-unit-tests-enterprise` workflow will run instead - needs: detect-changes - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == true && needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - shard: [ - 1/8, 2/8, 3/8, 4/8, - 5/8, 6/8, 7/8, 8/8, - ] - fail-fast: false - - name: Grafana (${{ matrix.shard }}) - runs-on: ubuntu-latest - continue-on-error: true - permissions: - contents: read - id-token: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - - name: Run unit tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/shard.sh -N"$SHARD")" - CGO_ENABLED=0 go test -short -timeout=30m "${PACKAGES[@]}" - - grafana-enterprise: - # Run this workflow for non-PR events (like pushes to `main` or `release-*`) OR for internal PRs (PRs not from forks) - needs: detect-changes - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false && needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - shard: [ - 1/8, 2/8, 3/8, 4/8, - 5/8, 6/8, 7/8, 8/8, - ] - fail-fast: false - - name: Grafana Enterprise (${{ matrix.shard }}) - runs-on: ubuntu-x64-large - permissions: - contents: read - id-token: write - steps: - # Set up repository clone - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - - name: Setup Enterprise - uses: ./.github/actions/setup-enterprise - with: - github-app-name: 'grafana-ci-bot' - - # Prepare what we need to upload test results - - run: echo "RESULTS_FILE=$(date --rfc-3339=seconds --utc | sed -s 's/ /-/g')_${SHARD/\//_}.xml" >> "$GITHUB_ENV" - env: - SHARD: ${{ matrix.shard }} - - run: go install github.com/jstemmer/go-junit-report/v2@85bf4716ac1f025f2925510a9f5e9f5bb347c009 - - # Run code - - name: Run unit tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/shard.sh -N"$SHARD")" - # This tee requires pipefail to be set, otherwise `go test`'s exit code is thrown away. - # That means having no `-o pipefail` => failing tests => exit code 0, which is wrong. - CGO_ENABLED=0 go test -short -timeout=30m "${PACKAGES[@]}" - - # This is the job that is actually required by rulesets. - # We need to require EITHER the OSS or the Enterprise job to pass. - # However, if one is skipped, GitHub won't flat-map the shards, - # so they won't be accepted by a ruleset. - required-backend-unit-tests: - needs: - - grafana - - grafana-enterprise - # always() is the best function here. - # success() || failure() will skip this function if any need is also skipped. - # That means conditional test suites will fail the entire requirement check. - if: always() - - name: All backend unit tests complete - runs-on: ubuntu-latest - steps: - - name: Check test suites - env: - NEEDS: ${{ toJson(needs) }} - run: | - FAILURES="$(echo "$NEEDS" | jq 'with_entries(select(.value.result == "failure")) | map_values(.result)')" - echo "$FAILURES" - if [ "$(echo "$FAILURES" | jq '. | length')" != "0" ]; then - exit 1 - fi - echo "All OK!" diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml deleted file mode 100644 index 960ff73d44571..0000000000000 --- a/.github/workflows/pr-e2e-tests.yml +++ /dev/null @@ -1,578 +0,0 @@ -name: End-to-end tests - -on: - pull_request: - push: - branches: - - main - - release-*.*.* - -# TODO: re-enable this before merging -# concurrency: -# group: ${{ github.workflow }}-${{ github.ref }} -# cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} - -permissions: {} - -env: - ACTIONS_STEP_DEBUG: true - RUNNER_DEBUG: 1 - -jobs: - detect-changes: - # Run on `grafana/grafana` main branch, or on pull requests to prevent double-running on mirrors - if: (github.event_name == 'pull_request' || (github.event_name == 'push' && github.repository == 'grafana/grafana')) - name: Detect whether code changed - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.e2e }} - cloud_plugins_changed: ${{ steps.detect-changes.outputs.e2e-cloud-plugins }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/pr-e2e-tests.yml - - build-grafana: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - name: Build & Package Grafana - runs-on: ubuntu-latest-16-cores - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - # TODO: add a cleanup workflow to remove the cache when the PR is closed - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy - # TODO: maybe we could just use the cache to store the build, instead of uploading as an artifact? - - uses: actions/cache@v4 - id: cache - with: - key: "build-grafana-${{ runner.os }}-${{ hashFiles('yarn.lock', 'public/*', 'packages/*', 'conf/*', 'pkg/**/*.go', '**/go.mod', '**/go.sum', '!**_test.go', '!**.test.ts', '!**.test.tsx', 'Dockerfile') }}" - path: | - build-dir - - # If no cache hit, build Grafana - - name: Build Grafana - if: steps.cache.outputs.cache-hit != 'true' - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/cmd artifacts -a targz:grafana:linux/amd64 -a docker:grafana:linux/amd64 --grafana-dir="${PWD}" > out.txt - - name: Cat built artifact - if: steps.cache.outputs.cache-hit != 'true' - run: cat out.txt - - name: Move built artifacts - if: steps.cache.outputs.cache-hit != 'true' - run: | - mkdir -p build-dir - mv "$(grep 'grafana_.*tar.gz$' out.txt | grep -Fv -m1 'docker')" build-dir/grafana.tar.gz - mv "$(grep 'grafana_.*docker.tar.gz$' out.txt)" build-dir/grafana.docker.tar.gz - - # If cache hit, validate the artifact is present - - name: Validate artifact - if: steps.cache.outputs.cache-hit == 'true' - run: | - if [ ! -f build-dir/grafana.tar.gz ]; then - echo "Error: build-dir/grafana.tar.gz not found in cache" - exit 1 - fi - - - name: Set artifact name - run: echo "artifact=grafana-server-${{github.run_number}}" >> "$GITHUB_OUTPUT" - id: artifact - - - name: Upload grafana.tar.gz - uses: actions/upload-artifact@v4 - with: - retention-days: 1 - name: grafana-tar-gz - path: build-dir/grafana.tar.gz - - - name: Upload grafana docker tarball - uses: actions/upload-artifact@v4 - with: - retention-days: 1 - name: grafana-docker-tar-gz - path: build-dir/grafana.docker.tar.gz - - # TODO: we won't need this when we only have playwright - build-e2e-runner: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - name: Build E2E test runner - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - artifact: ${{ steps.artifact.outputs.artifact }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - cache: ${{ !github.event.pull_request.head.repo.fork }} - - name: Build E2E test runner - id: artifact - run: | - set -euo pipefail - # We want a static binary, so we need to set CGO_ENABLED=0 - CGO_ENABLED=0 go build -o ./e2e-runner ./e2e/ - echo "artifact=e2e-runner-${{github.run_number}}" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 - id: upload - with: - retention-days: 1 - name: ${{ steps.artifact.outputs.artifact }} - path: e2e-runner - - push-docker-image: - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false - permissions: - contents: read - id-token: write - runs-on: ubuntu-latest - needs: - - build-grafana - steps: - - id: vault-secrets - uses: grafana/shared-workflows/actions/get-vault-secrets@main - with: - repo_secrets: | - GRAFANA_DELIVERY_BOT_APP_PEM=delivery-bot-app:PRIVATE_KEY - - name: Generate token - id: generate_token - uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a - with: - app_id: ${{ vars.DELIVERY_BOT_APP_ID }} - private_key: ${{ env.GRAFANA_DELIVERY_BOT_APP_PEM }} - repositories: '["grafana"]' - permissions: '{"checks": "write"}' - - uses: grafana/shared-workflows/actions/login-to-gar@main - id: login-to-gar - with: - registry: 'us-docker.pkg.dev' - environment: 'dev' - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: grafana-docker-tar-gz - path: . - - name: Load & Push Docker image - env: - BUILD_ID: ${{ github.run_id }} - run: | - set -euo pipefail - LOADED_IMAGE_NAME=$(docker load -i grafana.docker.tar.gz | sed 's/Loaded image: //g') - VERSION=$(echo "${LOADED_IMAGE_NAME}" | cut -d ':' -f 2 | cut -d '-' -f 1) - DOCKER_IMAGE="us-docker.pkg.dev/grafanalabs-dev/docker-grafana-dev/grafana:${VERSION}-${BUILD_ID}" - docker tag "${LOADED_IMAGE_NAME}" "${DOCKER_IMAGE}" - docker push "${DOCKER_IMAGE}" - echo "IMAGE=${DOCKER_IMAGE}" >> "$GITHUB_ENV" - - name: Add PR status check - env: - GH_TOKEN: ${{ steps.generate_token.outputs.token }} - SHA: ${{ github.event.pull_request.head.sha }} - run: | - gh api \ - --method POST \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - /repos/grafana/grafana/check-runs \ - -f "name=${IMAGE}" \ - -f "head_sha=${SHA}" \ - -f 'status=completed' \ - -f 'conclusion=neutral' \ - -f 'output[title]=Docker image' \ - -f "output[summary]=${IMAGE}" \ - -f "output[text]=${IMAGE}" - - run-e2e-tests: - needs: - - build-grafana - - build-e2e-runner - strategy: - fail-fast: false - matrix: - include: - - suite: various-suite - path: e2e/various-suite - - suite: various-suite (old arch) - path: e2e/old-arch/various-suite - flags: --flags="--env dashboardScene=false" - - suite: dashboards-suite (old arch) - path: e2e/old-arch/dashboards-suite - flags: --flags="--env dashboardScene=false" - - suite: smoke-tests-suite (old arch) - path: e2e/old-arch/smoke-tests-suite - flags: --flags="--env dashboardScene=false" - - suite: panels-suite (old arch) - path: e2e/old-arch/panels-suite - flags: --flags="--env dashboardScene=false" - name: ${{ matrix.suite }} - runs-on: ubuntu-latest-8-cores - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/download-artifact@v4 - with: - name: grafana-tar-gz - - uses: actions/download-artifact@v4 - with: - name: ${{ needs.build-e2e-runner.outputs.artifact }} - - name: chmod +x - run: chmod +x ./e2e-runner - - name: Run E2E tests - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/e2e --package=grafana.tar.gz - --suite=${{ matrix.path }} - ${{ matrix.flags }} - - name: Set suite name - id: set-suite-name - if: success() || failure() - env: - SUITE: ${{ matrix.path }} - run: | - set -euo pipefail - echo "suite=$(echo "$SUITE" | sed 's/\//-/g')" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 - if: success() || failure() - with: - name: ${{ steps.set-suite-name.outputs.suite }}-${{ github.run_number }} - path: videos - retention-days: 1 - - run-storybook-test: - name: Verify Storybook (Playwright) - runs-on: ubuntu-latest - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - permissions: - contents: read - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Install dependencies - run: yarn install --immutable - - - name: Install Playwright browsers - run: npx playwright install --with-deps - - - name: Run Storybook and E2E tests - run: yarn e2e:playwright:storybook - - run-playwright-tests: - needs: - - build-grafana - name: Playwright E2E tests (${{ matrix.shard }}/${{ matrix.shardTotal }}) - runs-on: ubuntu-latest-8-cores - permissions: - contents: read - - strategy: - fail-fast: false - matrix: - shard: [1, 2, 3, 4, 5, 6, 7, 8] - shardTotal: [8] - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/download-artifact@v4 - with: - name: grafana-tar-gz - - name: Run E2E tests - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} --blob-dir=./blob-report - - uses: actions/upload-artifact@v4 - if: success() || failure() - with: - name: playwright-blob-${{ github.run_number }}-${{ matrix.shard }} - path: ./blob-report - retention-days: 1 - - run-azure-monitor-e2e: - if: needs.detect-changes.outputs.cloud_plugins_changed == 'true' && github.event.pull_request.head.repo.fork == false - runs-on: ubuntu-x64-large - needs: - - build-grafana - - detect-changes - permissions: - contents: read - id-token: write - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - - uses: grafana/shared-workflows/actions/login-to-gar@login-to-gar-v0.4.0 - id: login-to-gar - with: - registry: "us-docker.pkg.dev" - environment: "dev" - - - id: pull-docker-image - run: | - docker pull us-docker.pkg.dev/grafanalabs-dev/docker-oss-plugin-partnerships-dev/e2e-playwright:latest - - - id: vault-secrets - uses: grafana/shared-workflows/actions/get-vault-secrets@main - with: - repo_secrets: | - AZURE_SP_APP_ID=cpp-azure-resourcemanager-credentials:application_id - AZURE_SP_PASSWORD=cpp-azure-resourcemanager-credentials:application_secret - AZURE_TENANT=cpp-azure-resourcemanager-credentials:tenant_id - - - id: deploy-resources - env: - AZURE_SP_APP_ID: ${{ env.AZURE_SP_APP_ID}} - AZURE_SP_PASSWORD: ${{ env.AZURE_SP_PASSWORD}} - AZURE_TENANT: ${{ env.AZURE_TENANT }} - NAME: ${{ github.ref_name }} - run: | - docker container run --name cpp-e2e-deploy -e AZURE_SP_APP_ID -e AZURE_SP_PASSWORD -e AZURE_TENANT -e PLAYWRIGHT_CI=true us-docker.pkg.dev/grafanalabs-dev/docker-oss-plugin-partnerships-dev/e2e-playwright:latest ./cpp-e2e/scripts/ci-run-playwright.sh azure "${NAME}" deploy - - - id: extract-creds - # see https://github.com/grafana/oss-plugin-partnerships/blob/a77040d0456003cd258668b61d542dc7c75db5b5/e2e/scripts/deploy.sh#L25 for path - run: | - docker cp cpp-e2e-deploy:/outputs.json /tmp/outputs.json - - - uses: actions/download-artifact@v4 - with: - name: grafana-tar-gz - - - name: Run E2E tests - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --playwright-command="yarn e2e:playwright:cloud-plugins" --cloud-plugin-creds=/tmp/outputs.json - - - name: Destroy resources - if: always() && steps.deploy-resources.outcome == 'success' - env: - AZURE_SP_APP_ID: ${{ env.AZURE_SP_APP_ID }} - AZURE_SP_PASSWORD: ${{ env.AZURE_SP_PASSWORD }} - AZURE_TENANT: ${{ env.AZURE_TENANT }} - NAME: ${{ github.ref_name }} - run: | - docker container run --name cpp-e2e-destroy -e AZURE_SP_APP_ID -e AZURE_SP_PASSWORD -e AZURE_TENANT us-docker.pkg.dev/grafanalabs-dev/docker-oss-plugin-partnerships-dev/e2e-playwright:latest ./cpp-e2e/scripts/ci-run-playwright.sh azure "${NAME}" destroy - - required-playwright-tests: - needs: - - run-playwright-tests - - run-azure-monitor-e2e - - run-storybook-test - - build-grafana - if: ${{ !cancelled() }} - name: All Playwright tests complete - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Download blob reports from GitHub Actions Artifacts - uses: actions/download-artifact@v4 - with: - path: blobs - pattern: playwright-blob-* - merge-multiple: true - - - name: Check blob reports - run: | - if [ ! "$(ls -A ./blobs)" ]; then - echo "Error: No blob reports found in ./blobs directory" - echo "Did the Playwright tests run at all?" - exit 1 - fi - echo "Found blob reports in ./blobs:" - ls -lah ./blobs - - - name: Merge into HTML Report - run: npx playwright merge-reports --reporter html ./blobs - - - name: Merge into JSON Report - env: - PLAYWRIGHT_JSON_OUTPUT_NAME: /tmp/playwright-results.json - run: npx playwright merge-reports --reporter=json ./blobs - - - name: Bench report - run: | - docker run --rm \ - --volume="/tmp/playwright-results.json:/home/bench/tests/playwright-results.json" \ - us-docker.pkg.dev/grafanalabs-global/docker-grafana-bench-prod/grafana-bench:v0.5.1 report \ - --grafana-url "http://localhost:3000" \ - --grafana-version "CI- ${{ github.sha }}" \ - --test-suite-name "FrontendCore" \ - --report-input playwright \ - --report-output log \ - --log-level DEBUG \ - /home/bench/tests/playwright-results.json - - - name: Upload HTML report - id: upload-html - uses: actions/upload-artifact@v4 - with: - name: playwright-html-${{ github.run_number }} - path: playwright-report - retention-days: 7 - - - name: Check test suites - id: check-jobs - uses: ./.github/actions/check-jobs - continue-on-error: true # Failure will be reported on Show test results step - with: - needs: ${{ toJson(needs) }} - failure-message: "One or more E2E test suites have failed" - success-message: "All E2E test suites completed successfully" - - - name: Show test results - env: - FAILED: ${{ steps.check-jobs.outputs.any-failed }} - REPORT_URL: ${{ steps.upload-html.outputs.artifact-url }} - # sed removes the leading `../../src/` from the paths - run: | - npx playwright merge-reports --reporter list ./blobs | sed 's|\(\.\./\)\{1,\}src/|/|g' - if [ "$FAILED" = "true" ]; then - echo "" - echo "Download the test report from $REPORT_URL" - exit 1 - fi - - run-a11y-test: - needs: - - build-grafana - name: A11y test - runs-on: ubuntu-latest-8-cores - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/download-artifact@v4 - with: - name: grafana-tar-gz - - name: Run PR a11y test - if: github.event_name == 'pull_request' - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/a11y --package=grafana.tar.gz - - name: Run non-PR a11y test - if: github.event_name != 'pull_request' - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/a11y --package=grafana.tar.gz --no-threshold-fail --results=./pa11y-ci-results.json - - name: Upload pa11y results - if: github.event_name != 'pull_request' - uses: actions/upload-artifact@v4 - with: - retention-days: 1 - name: pa11y-ci-results - path: pa11y-ci-results.json - - publish-metrics: - needs: - - run-a11y-test - name: Publish metrics - # Run on `grafana/grafana` main branch only - if: github.event_name == 'push' && github.repository == 'grafana/grafana' && github.ref_name == 'main' - permissions: - contents: read - id-token: write - runs-on: ubuntu-latest - steps: - - id: vault-secrets - uses: grafana/shared-workflows/actions/get-vault-secrets@main - with: - repo_secrets: | - GRAFANA_MISC_STATS_API_KEY=grafana-misc-stats:api_key - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - name: Install dependencies - run: yarn install --immutable - - name: Get pa11y results - uses: actions/download-artifact@v4 - with: - name: pa11y-ci-results - - name: Extract and publish metrics - run: ./scripts/ci-frontend-metrics.sh | node --experimental-strip-types .github/workflows/scripts/publish-frontend-metrics.mts - env: - GRAFANA_MISC_STATS_API_KEY: ${{ env.GRAFANA_MISC_STATS_API_KEY}} - - # This is the job that is actually required by rulesets. - # We want to only require one job instead of all the individual tests. - # Future work also allows us to start skipping some tests based on changed files. - required-e2e-tests: - needs: - - run-e2e-tests - - build-grafana - # a11y test is not listed on purpose: it is not an important E2E test. - # It is also totally fine to fail right now. - # always() is the best function here. - # success() || failure() will skip this function if any need is also skipped. - # That means conditional test suites will fail the entire requirement check. - if: always() - - name: All E2E tests complete - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Check test suites - uses: ./.github/actions/check-jobs - with: - needs: ${{ toJson(needs) }} - failure-message: "One or more E2E test suites have failed" - success-message: "All E2E test suites completed successfully" diff --git a/.github/workflows/pr-frontend-unit-tests.yml b/.github/workflows/pr-frontend-unit-tests.yml deleted file mode 100644 index 27ae83373032a..0000000000000 --- a/.github/workflows/pr-frontend-unit-tests.yml +++ /dev/null @@ -1,171 +0,0 @@ -name: Frontend tests -on: - pull_request: - push: - branches: - - main - - release-*.*.* - -permissions: {} - -jobs: - detect-changes: - # Run on `grafana/grafana` main branch, or on pull requests to prevent double-running on mirrors - if: (github.event_name == 'pull_request' || (github.event_name == 'push' && github.repository == 'grafana/grafana')) - name: Detect whether code changed - runs-on: ubuntu-x64-small - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.frontend }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/pr-frontend-unit-tests.yml - - frontend-unit-tests: - permissions: - contents: read - id-token: write - needs: - - detect-changes - # Run this workflow only for PRs from forks; if it gets merged into `main` or `release-*`, - # the `frontend-unit-tests-enterprise` workflow will run instead - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == true && needs.detect-changes.outputs.changed == 'true' - runs-on: ubuntu-x64-large - name: "Unit tests (${{ matrix.shard }} / ${{ matrix.total }})" - strategy: - fail-fast: false - matrix: - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] - total: [16] - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Yarn install - run: yarn install --immutable - env: - PUPPETEER_SKIP_DOWNLOAD: true - CYPRESS_INSTALL_BINARY: 0 - - run: yarn run test:ci - env: - TEST_MAX_WORKERS: 4 - TEST_SHARD: ${{ matrix.shard }} - TEST_SHARD_TOTAL: ${{ matrix.total }} - - frontend-unit-tests-enterprise: - permissions: - contents: read - id-token: write - needs: - - detect-changes - # Run this workflow for non-PR events (like pushes to `main` or `release-*`) OR for internal PRs (PRs not from forks) - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false && needs.detect-changes.outputs.changed == 'true' - runs-on: ubuntu-x64-large - name: "Unit tests (${{ matrix.shard }} / ${{ matrix.total }})" - strategy: - fail-fast: false - matrix: - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] - total: [16] - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Enterprise - uses: ./.github/actions/setup-enterprise - with: - github-app-name: 'grafana-ci-bot' - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Yarn install - run: yarn install --immutable - env: - # Switch from default hardened mode to faster mode for internal PRs - YARN_ENABLE_HARDENED_MODE: ${{ github.event.pull_request.head.repo.fork == false && '1' || '0' }} - PUPPETEER_SKIP_DOWNLOAD: true - CYPRESS_INSTALL_BINARY: 0 - - run: yarn run test:ci - env: - TEST_MAX_WORKERS: 4 - TEST_SHARD: ${{ matrix.shard }} - TEST_SHARD_TOTAL: ${{ matrix.total }} - - frontend-decoupled-plugin-tests: - needs: - - detect-changes - if: needs.detect-changes.outputs.changed == 'true' - runs-on: ubuntu-x64-large - name: "Decoupled plugin tests" - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Yarn install - run: yarn install --immutable - env: - # Switch from default hardened mode to faster mode for internal PRs - YARN_ENABLE_HARDENED_MODE: ${{ github.event.pull_request.head.repo.fork == false && '1' || '0' }} - PUPPETEER_SKIP_DOWNLOAD: true - CYPRESS_INSTALL_BINARY: 0 - - run: yarn run plugin:test:ci - - frontend-packages-unit-tests: - needs: - - detect-changes - if: needs.detect-changes.outputs.changed == 'true' - runs-on: ubuntu-x64-large - name: "Packages unit tests" - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Yarn install - run: yarn install --immutable - env: - # Switch from default hardened mode to faster mode for internal PRs - YARN_ENABLE_HARDENED_MODE: ${{ github.event.pull_request.head.repo.fork == false && '1' || '0' }} - PUPPETEER_SKIP_DOWNLOAD: true - CYPRESS_INSTALL_BINARY: 0 - - run: yarn run packages:test:ci - - # This is the job that is actually required by rulesets. - # We need to require EITHER the OSS or the Enterprise job to pass. - # However, if one is skipped, GitHub won't flat-map the shards, - # so they won't be accepted by a ruleset. - required-frontend-unit-tests: - needs: - - frontend-unit-tests - - frontend-unit-tests-enterprise - - frontend-decoupled-plugin-tests - - frontend-packages-unit-tests - # always() is the best function here. - # success() || failure() will skip this function if any need is also skipped. - # That means conditional test suites will fail the entire requirement check. - if: always() - - name: All frontend unit tests complete - runs-on: ubuntu-x64-small - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Check test suites - uses: ./.github/actions/check-jobs - with: - needs: ${{ toJson(needs) }} - failure-message: "One or more unit test jobs have failed" - success-message: "All unit tests completed successfully" diff --git a/.github/workflows/pr-test-docker.yml b/.github/workflows/pr-test-docker.yml deleted file mode 100644 index 66246310d55a6..0000000000000 --- a/.github/workflows/pr-test-docker.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Test Dockerfile - -on: - pull_request: - -jobs: - detect-changes: - # Run on `grafana/grafana` main branch, or on pull requests to prevent double-running on mirrors - name: Detect whether code changed - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.backend || steps.detect-changes.outputs.frontend || steps.detect-changes.outputs.dockerfile }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/pr-test-integration.yml - - build-dockerfile: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - runs-on: ubuntu-x64-large-io - permissions: - contents: read - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: docker/setup-docker-action@b60f85385d03ac8acfca6d9996982511d8620a19 # v4 - - name: Build Dockerfile - run: make build-docker-full diff --git a/.github/workflows/pr-test-integration.yml b/.github/workflows/pr-test-integration.yml deleted file mode 100644 index f54e5a77b3796..0000000000000 --- a/.github/workflows/pr-test-integration.yml +++ /dev/null @@ -1,230 +0,0 @@ -name: Integration Tests - -on: - push: - branches: - - main - - release-*.*.* - pull_request: - types: - - opened - - synchronize - - reopened - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} - -permissions: {} - -jobs: - detect-changes: - # Run on `grafana/grafana` main branch, or on pull requests to prevent double-running on mirrors - if: (github.event_name == 'pull_request' || (github.event_name == 'push' && github.repository == 'grafana/grafana')) - name: Detect whether code changed - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.backend }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/pr-test-integration.yml - sqlite: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - # We don't need more than this since it has to wait for the other tests. - shard: [ - 1/4, 2/4, 3/4, 4/4, - ] - fail-fast: false - - name: Sqlite (${{ matrix.shard }}) - runs-on: ubuntu-x64-large-io - permissions: - contents: read - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - cache: true - - name: Run tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N"$SHARD" -d-)" - go test -tags=sqlite -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}" - - sqlite_nocgo: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - # We don't need more than this since it has to wait for the other tests. - shard: [ - 1/4, 2/4, 3/4, 4/4, - ] - fail-fast: false - - name: Sqlite Without CGo (${{ matrix.shard }}) - runs-on: ubuntu-x64-large-io - permissions: - contents: read - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - cache: true - - name: Run tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N"$SHARD" -d-)" - CGO_ENABLED=0 go test -tags=sqlite -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}" - mysql: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - shard: [ - 1/16, 2/16, 3/16, 4/16, - 5/16, 6/16, 7/16, 8/16, - 9/16, 10/16, 11/16, 12/16, - 13/16, 14/16, 15/16, 16/16, - ] - fail-fast: false - - name: MySQL (${{ matrix.shard }}) - runs-on: ubuntu-x64-large-io - permissions: - contents: read - env: - GRAFANA_TEST_DB: mysql - MYSQL_HOST: 127.0.0.1 - services: - mysql: - image: mysql:8.0.43 - env: - MYSQL_ROOT_PASSWORD: rootpass - MYSQL_DATABASE: grafana_tests - MYSQL_USER: grafana - MYSQL_PASSWORD: password - options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=5s --health-retries=3 - ports: - - 3306:3306 - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - cache: true - - name: Setup MySQL devenv - run: mysql -h 127.0.0.1 -P 3306 -u root -prootpass < devenv/docker/blocks/mysql_tests/setup.sql - - name: Run tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N"$SHARD" -d-)" - CGO_ENABLED=0 go test -p=1 -tags=mysql -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}" - postgres: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - strategy: - matrix: - shard: [ - 1/16, 2/16, 3/16, 4/16, - 5/16, 6/16, 7/16, 8/16, - 9/16, 10/16, 11/16, 12/16, - 13/16, 14/16, 15/16, 16/16, - ] - fail-fast: false - - name: Postgres (${{ matrix.shard }}) - runs-on: ubuntu-x64-large-io - permissions: - contents: read - env: - GRAFANA_TEST_DB: postgres - PGPASSWORD: grafanatest - POSTGRES_HOST: 127.0.0.1 - services: - postgres: - image: postgres:17.6 - env: - POSTGRES_USER: grafanatest - POSTGRES_PASSWORD: grafanatest - POSTGRES_DB: grafanatest - ports: - - 5432:5432 - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5.5.0 - with: - go-version-file: go.mod - cache: true - - name: Setup Postgres devenv - run: psql -p 5432 -h 127.0.0.1 -U grafanatest -d grafanatest -f devenv/docker/blocks/postgres_tests/setup.sql - - name: Run tests - env: - SHARD: ${{ matrix.shard }} - run: | - set -euo pipefail - readarray -t PACKAGES <<< "$(./scripts/ci/backend-tests/pkgs-with-tests-named.sh -b TestIntegration | ./scripts/ci/backend-tests/shard.sh -N"$SHARD" -d-)" - CGO_ENABLED=0 go test -p=1 -tags=postgres -timeout=8m -run '^TestIntegration' "${PACKAGES[@]}" - - # This is the job that is actually required by rulesets. - # We want to only require one job instead of all the individual tests and shards. - # Future work also allows us to start skipping some tests based on changed files. - required-backend-integration-tests: - needs: - - mysql - - postgres - - sqlite - # always() is the best function here. - # success() || failure() will skip this function if any need is also skipped. - # That means conditional test suites will fail the entire requirement check. - if: always() - - name: All backend integration tests complete - runs-on: ubuntu-latest - steps: - - name: Check test suites - env: - NEEDS: ${{ toJson(needs) }} - run: | - FAILURES="$(echo "$NEEDS" | jq 'with_entries(select(.value.result == "failure")) | map_values(.result)')" - echo "$FAILURES" - if [ "$(echo "$FAILURES" | jq '. | length')" != "0" ]; then - exit 1 - fi - echo "All OK!" diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml deleted file mode 100644 index ff65d90cf5b24..0000000000000 --- a/.github/workflows/release-build.yml +++ /dev/null @@ -1,337 +0,0 @@ -name: Build Release Packages -on: - workflow_dispatch: - inputs: - source-event: - description: If this workflow was triggered by another workflow, this value should be set to the GITHUB_EVENT_NAME of that source workflow. - type: string - required: false - default: workflow_dispatch - schedule: - # Every weeknight at midnight - # "Scheduled workflows will only run on the default branch." (docs.github.com) - - cron: '0 0 * * 1-5' - push: - branches: - - release-*.*.* - - main - -permissions: - contents: read - -# Builds the following artifacts: -# -# npm:grafana -# storybook -# targz:grafana:linux/amd64 -# targz:grafana:linux/arm64 -# targz:grafana:linux/arm/v6 -# targz:grafana:linux/arm/v7 -# deb:grafana:linux/amd64 -# deb:grafana:linux/arm64 -# deb:grafana:linux/arm/v6 -# deb:grafana:linux/arm/v7 -# rpm:grafana:linux/amd64:sign -# rpm:grafana:linux/arm64:sign -# docker:grafana:linux/amd64 -# docker:grafana:linux/arm64 -# docker:grafana:linux/arm/v7 -# docker:grafana:linux/amd64:ubuntu -# docker:grafana:linux/arm64:ubuntu -# docker:grafana:linux/arm/v7:ubuntu -# targz:grafana:windows/amd64 -# targz:grafana:windows/arm64 -# targz:grafana:darwin/amd64 -# targz:grafana:darwin/arm64 -# zip:grafana:windows/amd64 -# msi:grafana:windows/amd64 -jobs: - setup: - name: setup - runs-on: github-hosted-ubuntu-x64-small - if: (github.repository == 'grafana/grafana') || (github.repository == 'grafana/grafana-security-mirror' && contains(github.ref_name, '+security')) - outputs: - version: ${{ steps.output.outputs.version }} - grafana-commit: ${{ steps.output.outputs.grafana_commit }} - permissions: - contents: read - steps: - - uses: actions/checkout@v5 - with: - persist-credentials: false - - name: Set up version (Release Branches) - if: startsWith(github.ref_name, 'release-') - run: echo "${REF_NAME#release-}" > VERSION - env: - REF_NAME: ${{ github.ref_name }} - - name: Set up version (Non-release branches) - if: ${{ !startsWith(github.ref_name, 'release-') }} - run: jq -r .version package.json | sed -s "s/pre/${BUILD_ID}/g" > VERSION - env: - REF_NAME: ${{ github.ref_name }} - BUILD_ID: ${{ github.run_id }} - - id: output - run: | - echo "version=$(cat VERSION)" >> "$GITHUB_OUTPUT" - echo "grafana_commit=$(git rev-parse HEAD)" | tee -a "$GITHUB_OUTPUT" - # Triggers the same workflow in `grafana-enterprise` on the same ref - downstream: - runs-on: github-hosted-ubuntu-x64-small - needs: [setup] - permissions: - contents: read - id-token: write - name: Dispatch grafana-enterprise build - steps: - - id: vault-secrets - uses: grafana/shared-workflows/actions/get-vault-secrets@main - with: - repo_secrets: | - GRAFANA_DELIVERY_BOT_APP_PEM=delivery-bot-app:PRIVATE_KEY - - name: Generate token - id: generate_token - uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a - with: - app_id: ${{ vars.DELIVERY_BOT_APP_ID }} - private_key: ${{ env.GRAFANA_DELIVERY_BOT_APP_PEM }} - repositories: '["grafana-enterprise"]' - permissions: '{"actions": "write"}' - - uses: actions/github-script@v7 - env: - REF: ${{ github.ref_name }} - VERSION: ${{ needs.setup.outputs.version }} - BUILD_ID: ${{ github.run_id }} - BUCKET: grafana-prerelease - GRAFANA_COMMIT: ${{ needs.setup.outputs.grafana-commit }} - SOURCE_EVENT: ${{ inputs.source-event || github.event_name }} - REPO: ${{ github.repository }} - with: - github-token: ${{ steps.generate_token.outputs.token }} - script: | - const {REF, VERSION, BUILD_ID, BUCKET, GRAFANA_COMMIT, SOURCE_EVENT, REPO} = process.env; - - await github.rest.actions.createWorkflowDispatch({ - owner: 'grafana', - repo: 'grafana-enterprise', - workflow_id: 'release-build.yml', - ref: REF, - inputs: { - "version": VERSION, - "build-id": String(BUILD_ID), - "bucket": BUCKET, - "grafana-commit": GRAFANA_COMMIT, - "source-event": SOURCE_EVENT, - "upstream": REPO, - } - }) - - build: - runs-on: github-hosted-ubuntu-x64-large - needs: [setup] - permissions: - contents: read - id-token: write - name: ${{ needs.setup.outputs.version }} / ${{ matrix.name }} - strategy: - fail-fast: false - matrix: - # The artifacts in these lists are grouped by their os+arch because the - # build process can reuse the binaries for each artifact. - # The downside to this is that the frontend will be built for each one when it could be reused for all of them. - # This could be a future improvement. - include: - - name: linux-amd64 # publish-npm relies on this step building npm packages - artifacts: targz:grafana:linux/amd64,deb:grafana:linux/amd64,rpm:grafana:linux/amd64,docker:grafana:linux/amd64,docker:grafana:linux/amd64:ubuntu,npm:grafana,storybook - verify: true - - name: linux-arm64 - artifacts: targz:grafana:linux/arm64,deb:grafana:linux/arm64,rpm:grafana:linux/arm64,docker:grafana:linux/arm64,docker:grafana:linux/arm64:ubuntu - verify: false - - name: linux-s390x - artifacts: targz:grafana:linux/s390x,deb:grafana:linux/s390x,rpm:grafana:linux/s390x,docker:grafana:linux/s390x,docker:grafana:linux/s390x:ubuntu - verify: true - - name: linux-armv7 - artifacts: targz:grafana:linux/arm/v7,deb:grafana:linux/arm/v7,docker:grafana:linux/arm/v7,docker:grafana:linux/arm/v7:ubuntu - verify: true - - name: linux-armv6 - artifacts: targz:grafana:linux/arm/v6,deb:grafana:linux/arm/v6 - verify: true - - name: windows-amd64 - artifacts: targz:grafana:windows/amd64,zip:grafana:windows/amd64,msi:grafana:windows/amd64 - verify: true - - name: windows-arm64 - artifacts: targz:grafana:windows/arm64,zip:grafana:windows/arm64 - verify: true - - name: darwin-amd64 - artifacts: targz:grafana:darwin/amd64 - verify: true - - name: darwin-arm64 - artifacts: targz:grafana:darwin/arm64 - verify: true - steps: - - uses: grafana/shared-workflows/actions/dockerhub-login@dockerhub-login/v1.0.2 - - uses: actions/checkout@v5 - with: - persist-credentials: false - - name: Set up QEMU - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 - with: - image: docker.io/tonistiigi/binfmt:qemu-v7.0.0-28 - - uses: ./.github/actions/build-package - id: build - with: - artifacts: ${{ matrix.artifacts }} - checksum: true - grafana-path: . - github-token: ${{ secrets.GITHUB_TOKEN }} - version: ${{ needs.setup.outputs.version }} - output: artifacts-${{ matrix.name }}.txt - verify: ${{ matrix.verify }} - build-id: ${{ github.run_id }} - - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 - with: - name: artifacts-list-${{ matrix.name }} - path: ${{ steps.build.outputs.file }} - retention-days: 1 - - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 - with: - name: artifacts-${{ matrix.name }} - path: ${{ steps.build.outputs.dist-dir }} - retention-days: 1 - - publish-artifacts: - name: Upload artifacts - uses: grafana/grafana/.github/workflows/publish-artifact.yml@main - permissions: - id-token: write - needs: - - setup - - build - with: - bucket: grafana-prerelease - pattern: artifacts-* - run-id: ${{ github.run_id }} - bucket-path: ${{ needs.setup.outputs.version }}_${{ github.run_id }} - environment: prod - - publish-dockerhub: - if: github.ref_name == 'main' - permissions: - contents: read - id-token: write - runs-on: ubuntu-x64-small - needs: - - setup - - build - steps: - - uses: grafana/shared-workflows/actions/dockerhub-login@dockerhub-login/v1.0.2 - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-list-linux-amd64 - path: . - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-list-linux-arm64 - path: . - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-list-linux-armv7 - path: . - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-linux-amd64 - path: dist - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-linux-arm64 - path: dist - - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 - with: - name: artifacts-linux-armv7 - path: dist - - name: Push to Docker Hub - env: - VERSION: ${{ needs.setup.outputs.version }} - run: | - # grep can use a wildcard but then it includes the filename as part of the result and that gets complicated. - # It's easier to use cat to combine the artifact lists - cat artifacts-*.txt > artifacts.txt - grep 'grafana_.*docker.tar.gz$' artifacts.txt | xargs -I % docker load -i % | sed 's/Loaded image: //g' | tee docker_images - while read -r line; do - # This tag will be `grafana/grafana-image-tags:...` - docker push "$line" - done < docker_images - - docker manifest create grafana/grafana:main "grafana/grafana-image-tags:${VERSION}-amd64" "grafana/grafana-image-tags:${VERSION}-arm64" "grafana/grafana-image-tags:${VERSION}-armv7" - docker manifest create grafana/grafana:main-ubuntu "grafana/grafana-image-tags:${VERSION}-ubuntu-amd64" "grafana/grafana-image-tags:${VERSION}-ubuntu-arm64" "grafana/grafana-image-tags:${VERSION}-ubuntu-armv7" - docker manifest create "grafana/grafana-dev:${VERSION}" "grafana/grafana-image-tags:${VERSION}-amd64" "grafana/grafana-image-tags:${VERSION}-arm64" "grafana/grafana-image-tags:${VERSION}-armv7" - docker manifest create "grafana/grafana-dev:${VERSION}-ubuntu" "grafana/grafana-image-tags:${VERSION}-ubuntu-amd64" "grafana/grafana-image-tags:${VERSION}-ubuntu-arm64" "grafana/grafana-image-tags:${VERSION}-ubuntu-armv7" - - docker manifest push grafana/grafana:main - docker manifest push grafana/grafana:main-ubuntu - docker manifest push "grafana/grafana-dev:${VERSION}" - docker manifest push "grafana/grafana-dev:${VERSION}-ubuntu" - - publish-npm-canaries: - if: github.ref_name == 'main' - name: Publish NPM canaries - uses: ./.github/workflows/release-npm.yml - permissions: - contents: read - id-token: write - needs: - - setup - - build - with: - grafana_commit: ${{ needs.setup.outputs.grafana-commit }} - version: ${{ needs.setup.outputs.version }} - build_id: ${{ github.run_id }} - version_type: "canary" - - # notify-pr creates (or updates) a comment in a pull request to link to this workflow where the release artifacts are - # being built. - notify-pr: - runs-on: ubuntu-x64-small - permissions: - contents: read - id-token: write - needs: - - setup - steps: - - id: vault-secrets - uses: grafana/shared-workflows/actions/get-vault-secrets@main - with: - repo_secrets: | - GRAFANA_DELIVERY_BOT_APP_PEM=delivery-bot-app:PRIVATE_KEY - - name: Generate token - id: generate_token - uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a - with: - app_id: ${{ vars.DELIVERY_BOT_APP_ID }} - private_key: ${{ env.GRAFANA_DELIVERY_BOT_APP_PEM }} - repositories: '["grafana"]' - permissions: '{"issues": "write", "pull_requests": "write", "contents": "read"}' - - name: Find PR - env: - GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} - GRAFANA_COMMIT: ${{ needs.setup.outputs.grafana-commit }} - run: echo "ISSUE_NUMBER=$(gh api "/repos/grafana/grafana/commits/${GRAFANA_COMMIT}/pulls" | jq -r '.[0].number')" >> "$GITHUB_ENV" - - name: Find Comment - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3 - id: fc - with: - issue-number: ${{ env.ISSUE_NUMBER }} - comment-author: 'grafana-delivery-bot[bot]' - body-includes: GitHub Actions Build - token: ${{ steps.generate_token.outputs.token }} - - name: Create or update comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 - with: - token: ${{ steps.generate_token.outputs.token }} - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ env.ISSUE_NUMBER }} - body: | - :rocket: Your submission is now being built and packaged. - - - [GitHub Actions Build](https://github.com/grafana/grafana/actions/runs/${{ github.run_id }}) - - Version: ${{ needs.setup.outputs.version }} - edit-mode: replace From 9a35d67e16ba33c289a6d91f4f9005cdee7bdd74 Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Tue, 27 Jan 2026 16:01:18 +0800 Subject: [PATCH 14/17] Remove more workflows requiring large runners Delete additional workflows using large runners: - run-schema-v2-e2e.yml (ubuntu-latest-8-cores) - storybook-a11y.yml (ubuntu-latest-8-cores) Signed-off-by: Meng Yan --- .github/workflows/run-schema-v2-e2e.yml | 44 ------------------- .github/workflows/storybook-a11y.yml | 57 ------------------------- 2 files changed, 101 deletions(-) delete mode 100644 .github/workflows/run-schema-v2-e2e.yml delete mode 100644 .github/workflows/storybook-a11y.yml diff --git a/.github/workflows/run-schema-v2-e2e.yml b/.github/workflows/run-schema-v2-e2e.yml deleted file mode 100644 index 30b4e47efc781..0000000000000 --- a/.github/workflows/run-schema-v2-e2e.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Run dashboard schema v2 e2e - -on: - push: - branches: - - main - pull_request: - branches: - - '**' - -env: - ARCH: linux-amd64 - -jobs: - dashboard-schema-v2-e2e: - runs-on: ubuntu-latest-8-cores - continue-on-error: true - if: github.event.pull_request.draft == false - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Pin Go version to mod file - uses: actions/setup-go@v5.5.0 - with: - go-version-file: 'go.mod' - - run: go version - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - name: Install dependencies - run: yarn install --immutable - - name: Install Playwright browsers - run: yarn playwright install --with-deps chromium - - name: Build grafana - run: make build - - name: Run dashboard scenes e2e - run: yarn e2e:schema-v2 || echo "Test failed but marking as success since schema V2 is behind a feature flag and should not block PRs" - - - name: Always succeed # This is a workaround to make the job pass even if the previous step fails - if: failure() - run: exit 0 diff --git a/.github/workflows/storybook-a11y.yml b/.github/workflows/storybook-a11y.yml deleted file mode 100644 index f666ba37b9587..0000000000000 --- a/.github/workflows/storybook-a11y.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Run Storybook a11y tests -on: - pull_request: - push: - branches: - - main - - release-*.*.* - -permissions: {} - -jobs: - detect-changes: - name: Detect whether code changed - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.frontend }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/storybook-a11y.yml - - test-storybook-a11y: - runs-on: ubuntu-latest-8-cores - permissions: - contents: read - id-token: write - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - name: "Run Storybook a11y tests" - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - run: yarn install --immutable --check-cache - - name: Install Playwright browsers - run: npx playwright install --with-deps - - name: Start Storybook - run: yarn storybook & - - name: Run tests - # the chromium browser used by Playwright sets its locale to "en_US@posix" by default - # this is not a valid language code, and causes some stories to fail to load! - # instead, we set the LANG environment variable to en_US to override this - # see https://github.com/microsoft/playwright/issues/34046 - env: - LANG: en_US - run: npx wait-on --timeout 120000 http://localhost:9001 && yarn test:storybook From c6e02302cba0582397f23c2e83bc38784e3b26ff Mon Sep 17 00:00:00 2001 From: Meng Yan Date: Tue, 27 Jan 2026 18:24:26 +0800 Subject: [PATCH 15/17] Add JavaScript build stage to Containerfile.konflux Fix PostgreSQL datasource plugin 404 error by adding frontend build stage. The previous Containerfile only copied source code without building, causing Grafana to fail loading plugins that require compiled JS modules. Reference: https://github.com/grafana/grafana/blob/main/Dockerfile Changes: - Add js-builder stage using ubi9/nodejs-22 base image - Run yarn install and yarn build for frontend compilation - Copy built public directory from js-builder instead of source code Signed-off-by: Meng Yan --- Containerfile.konflux | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Containerfile.konflux b/Containerfile.konflux index 3345f13121065..5c5ac25834e99 100644 --- a/Containerfile.konflux +++ b/Containerfile.konflux @@ -1,3 +1,34 @@ +# JavaScript build stage +# Reference: https://github.com/grafana/grafana/blob/main/Dockerfile +FROM registry.access.redhat.com/ubi9/nodejs-22:latest AS js-builder + +WORKDIR /tmp/grafana + +USER root + +# Install build dependencies +RUN dnf install -y make gcc-c++ python3 && dnf clean all + +# Copy package files first for better layer caching +COPY package.json project.json nx.json yarn.lock .yarnrc.yml ./ +COPY .yarn .yarn +COPY packages packages +COPY public public +COPY LICENSE ./ +COPY conf/defaults.ini ./conf/defaults.ini + +ENV NODE_OPTIONS=--max_old_space_size=8000 +ENV NODE_ENV=production + +# Install dependencies and build frontend +RUN corepack enable && yarn install --immutable + +COPY tsconfig.json eslint.config.js .editorconfig .browserslistrc .prettierrc.js ./ +COPY scripts scripts +COPY emails emails + +RUN yarn build + # Golang build container FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:rhel_9_1.25 AS builder @@ -84,7 +115,8 @@ RUN mkdir -p "$GF_PATHS_HOME/.aws" && \ chmod -R 777 "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS" "$GF_PATHS_PROVISIONING" COPY --from=builder /usr/bin/grafana* ./bin/ -COPY public ./public +# Use built frontend from js-builder instead of source code +COPY --from=js-builder /tmp/grafana/public ./public COPY tools ./tools EXPOSE 3000 From aa73fbff060339a0632ed01aef45461e12299a63 Mon Sep 17 00:00:00 2001 From: myan Date: Tue, 27 Jan 2026 05:45:51 -0500 Subject: [PATCH 16/17] yarn install & yarn build to generate runnable resources for Grafana 12 Generate compiled frontend assets including plugin dist directories. This fixes the PostgreSQL datasource 404 error in Grafana 12.x. Reference: https://github.com/stolostron/glo-grafana/commit/4ae4713e Signed-off-by: Meng Yan Signed-off-by: myan --- Containerfile.konflux | 34 +- .../datasource/azuremonitor/dist/360.js | 2 + .../datasource/azuremonitor/dist/360.js.map | 1 + .../datasource/azuremonitor/dist/CHANGELOG.md | 0 .../datasource/azuremonitor/dist/LICENSE | 661 ++ .../datasource/azuremonitor/dist/README.md | 7 + .../azuremonitor/dist/dashboards/adx.json | 8274 +++++++++++++++++ .../dist/dashboards/appInsights.json | 2343 +++++ .../appInsightsFailureDependencies.json | 1595 ++++ .../appInsightsFailureExceptions.json | 1278 +++ .../appInsightsFailureOperations.json | 1753 ++++ .../dist/dashboards/appInsightsGeoMap.json | 926 ++ .../appInsightsPerfDependencies.json | 1828 ++++ .../dashboards/appInsightsPerfOperations.json | 1654 ++++ .../azuremonitor/dist/dashboards/arg.json | 3041 ++++++ .../dist/dashboards/azureInfraApps.json | 3487 +++++++ .../dist/dashboards/azureInfraCompute.json | 2430 +++++ .../dist/dashboards/azureInfraData.json | 3937 ++++++++ .../dist/dashboards/azureInfraNetwork.json | 6069 ++++++++++++ .../dashboards/azureInfraStorageVaults.json | 1680 ++++ .../dashboards/containerInsightsSyslog.json | 1226 +++ .../dist/dashboards/cosmosdb.json | 5083 ++++++++++ .../dist/dashboards/keyvault.json | 2564 +++++ .../dashboards/networkInsightsDashboard.json | 2105 +++++ .../dashboards/postgresFlexibleServer.json | 7668 +++++++++++++++ .../azuremonitor/dist/dashboards/sqldb.json | 4552 +++++++++ .../azuremonitor/dist/dashboards/storage.json | 6875 ++++++++++++++ .../dist/dashboards/v1Alerts.json | 1010 ++ .../dist/dashboards/vMInsightsRG.json | 2659 ++++++ .../dist/dashboards/vMInsightsWorkspace.json | 2652 ++++++ .../dist/img/azure_monitor_cpu.png | Bin 0 -> 258805 bytes .../dist/img/azure_monitor_network.png | Bin 0 -> 170399 bytes .../dist/img/config_1_select_type.png | Bin 0 -> 9810 bytes .../config_2_azure_monitor_api_details.png | Bin 0 -> 20164 bytes .../img/config_3_app_insights_api_details.png | Bin 0 -> 10782 bytes .../dist/img/config_4_save_and_test.png | Bin 0 -> 36073 bytes .../img/contoso_loans_grafana_dashboard.png | Bin 0 -> 256727 bytes .../dist/img/grafana_cloud_install.png | Bin 0 -> 105326 bytes .../dist/img/grafana_cloud_login.png | Bin 0 -> 61688 bytes .../datasource/azuremonitor/dist/img/logo.jpg | Bin 0 -> 9593 bytes .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../grafana-azure-monitor-datasource.json | 321 + .../datasource/azuremonitor/dist/module.js | 4 + .../azuremonitor/dist/module.js.LICENSE.txt | 9 + .../azuremonitor/dist/module.js.map | 1 + .../datasource/azuremonitor/dist/plugin.json | 158 + .../cloud-monitoring/dist/CHANGELOG.md | 0 .../datasource/cloud-monitoring/dist/LICENSE | 661 ++ .../cloud-monitoring/dist/README.md | 7 + .../dashboards/cloud-storage-monitoring.json | 592 ++ .../dashboards/cloudfunctions-monitoring.json | 610 ++ .../dist/dashboards/cloudsql-monitoring.json | 1048 +++ .../dashboards/cloudsql-mysql-monitoring.json | 606 ++ .../cloudsql-postgre-monitoring.json | 351 + .../dashboards/cloudtasks-monitoring.json | 420 + .../dashboards/dataprocessing-monitoring.json | 625 ++ .../firewall-insight-monitoring.json | 298 + .../dashboards/gce-network-monitoring.json | 474 + .../gce-vm-instance-monitoring.json | 850 ++ .../gke-prometheus-pod-node-monitoring.json | 802 ++ .../https-lb-backend-services-monitoring.json | 1395 +++ .../https-loadbalancer-monitoring.json | 858 ++ .../dashboards/micro-service-monitoring.json | 712 ++ .../network-tcp-loadbalancer-monitoring.json | 544 ++ .../dist/img/cloud_monitoring_logo.svg | 1 + .../cloud-monitoring/dist/module.js | 4 + .../dist/module.js.LICENSE.txt | 9 + .../cloud-monitoring/dist/module.js.map | 1 + .../cloud-monitoring/dist/plugin.json | 100 + .../grafana-postgresql-datasource/dist/166.js | 1 + .../grafana-postgresql-datasource/dist/172.js | 1 + .../grafana-postgresql-datasource/dist/236.js | 1 + .../grafana-postgresql-datasource/dist/290.js | 1 + .../grafana-postgresql-datasource/dist/30.js | 1 + .../grafana-postgresql-datasource/dist/343.js | 1 + .../grafana-postgresql-datasource/dist/360.js | 2 + .../dist/360.js.map | 1 + .../grafana-postgresql-datasource/dist/447.js | 1 + .../grafana-postgresql-datasource/dist/450.js | 1 + .../grafana-postgresql-datasource/dist/454.js | 1 + .../grafana-postgresql-datasource/dist/493.js | 2 + .../dist/493.js.map | 1 + .../grafana-postgresql-datasource/dist/501.js | 1 + .../grafana-postgresql-datasource/dist/540.js | 1 + .../grafana-postgresql-datasource/dist/630.js | 1 + .../grafana-postgresql-datasource/dist/654.js | 1 + .../grafana-postgresql-datasource/dist/685.js | 1 + .../grafana-postgresql-datasource/dist/809.js | 1 + .../grafana-postgresql-datasource/dist/852.js | 1 + .../grafana-postgresql-datasource/dist/855.js | 1 + .../grafana-postgresql-datasource/dist/880.js | 1 + .../grafana-postgresql-datasource/dist/961.js | 1 + .../dist/CHANGELOG.md | 1 + .../dist/LICENSE | 661 ++ .../dist/README.md | 12 + .../dist/img/postgresql_logo.svg | 22 + .../dist/module.js | 4 + .../dist/module.js.LICENSE.txt | 17 + .../dist/module.js.map | 1 + .../dist/plugin.json | 34 + .../dist/sql-query-editor.js | 25 + .../dist/sql-query-editor.js.map | 1 + .../dist/CHANGELOG.md | 1 + .../grafana-pyroscope-datasource/dist/LICENSE | 661 ++ .../dist/README.md | 27 + .../dist/img/grafana_pyroscope_icon.svg | 15 + .../dist/module.js | 4 + .../dist/module.js.LICENSE.txt | 9 + .../dist/module.js.map | 1 + .../dist/plugin.json | 47 + .../dist/CHANGELOG.md | 1 + .../grafana-testdata-datasource/dist/LICENSE | 661 ++ .../dist/README.md | 9 + .../dist/dashboards/streaming.json | 178 + .../dist/img/testdata.svg | 1 + .../dist/module.js | 4 + .../dist/module.js.LICENSE.txt | 9 + .../dist/module.js.map | 1 + .../dist/plugin.json | 47 + .../datasource/jaeger/dist/CHANGELOG.md | 1 + .../plugins/datasource/jaeger/dist/LICENSE | 661 ++ .../plugins/datasource/jaeger/dist/README.md | 3 + .../jaeger/dist/img/jaeger_logo.svg | 236 + .../jaeger/dist/mockJsonResponse.json | 105 + .../jaeger/dist/mockSearchResponse.json | 52 + .../jaeger/dist/mockTraceResponse.json | 21 + .../plugins/datasource/jaeger/dist/module.js | 4 + .../jaeger/dist/module.js.LICENSE.txt | 9 + .../datasource/jaeger/dist/module.js.map | 1 + .../datasource/jaeger/dist/plugin.json | 53 + .../plugins/datasource/loki/dist/CHANGELOG.md | 1 + .../app/plugins/datasource/loki/dist/LICENSE | 661 ++ .../plugins/datasource/loki/dist/README.md | 3 + .../datasource/loki/dist/img/grafana_icon.svg | 57 + .../datasource/loki/dist/img/loki_icon.svg | 116 + .../datasource/loki/dist/loki-query-field.js | 2 + .../loki/dist/loki-query-field.js.map | 1 + .../plugins/datasource/loki/dist/module.js | 9 + .../loki/dist/module.js.LICENSE.txt | 9 + .../datasource/loki/dist/module.js.map | 1 + .../plugins/datasource/loki/dist/plugin.json | 52 + .../app/plugins/datasource/mssql/dist/166.js | 1 + .../app/plugins/datasource/mssql/dist/172.js | 1 + .../app/plugins/datasource/mssql/dist/236.js | 1 + .../app/plugins/datasource/mssql/dist/290.js | 1 + .../app/plugins/datasource/mssql/dist/30.js | 1 + .../app/plugins/datasource/mssql/dist/343.js | 1 + .../app/plugins/datasource/mssql/dist/360.js | 2 + .../plugins/datasource/mssql/dist/360.js.map | 1 + .../app/plugins/datasource/mssql/dist/447.js | 1 + .../app/plugins/datasource/mssql/dist/450.js | 1 + .../app/plugins/datasource/mssql/dist/454.js | 1 + .../app/plugins/datasource/mssql/dist/493.js | 2 + .../plugins/datasource/mssql/dist/493.js.map | 1 + .../app/plugins/datasource/mssql/dist/501.js | 1 + .../app/plugins/datasource/mssql/dist/540.js | 1 + .../app/plugins/datasource/mssql/dist/630.js | 1 + .../app/plugins/datasource/mssql/dist/654.js | 1 + .../app/plugins/datasource/mssql/dist/685.js | 1 + .../app/plugins/datasource/mssql/dist/809.js | 1 + .../app/plugins/datasource/mssql/dist/852.js | 1 + .../app/plugins/datasource/mssql/dist/855.js | 1 + .../app/plugins/datasource/mssql/dist/880.js | 1 + .../app/plugins/datasource/mssql/dist/961.js | 1 + .../datasource/mssql/dist/CHANGELOG.md | 1 + .../app/plugins/datasource/mssql/dist/LICENSE | 661 ++ .../plugins/datasource/mssql/dist/README.md | 14 + .../mssql/dist/img/sql_server_logo.svg | 115 + .../mssql/dist/locales/cs-CZ/mssql.json | 128 + .../mssql/dist/locales/de-DE/mssql.json | 128 + .../mssql/dist/locales/en-US/mssql.json | 128 + .../mssql/dist/locales/es-ES/mssql.json | 128 + .../mssql/dist/locales/fr-FR/mssql.json | 128 + .../mssql/dist/locales/hu-HU/mssql.json | 128 + .../mssql/dist/locales/id-ID/mssql.json | 128 + .../mssql/dist/locales/it-IT/mssql.json | 128 + .../mssql/dist/locales/ja-JP/mssql.json | 128 + .../mssql/dist/locales/ko-KR/mssql.json | 128 + .../mssql/dist/locales/nl-NL/mssql.json | 128 + .../mssql/dist/locales/pl-PL/mssql.json | 128 + .../mssql/dist/locales/pt-BR/mssql.json | 128 + .../mssql/dist/locales/pt-PT/mssql.json | 128 + .../mssql/dist/locales/ru-RU/mssql.json | 128 + .../mssql/dist/locales/sv-SE/mssql.json | 128 + .../mssql/dist/locales/tr-TR/mssql.json | 128 + .../mssql/dist/locales/zh-Hans/mssql.json | 128 + .../mssql/dist/locales/zh-Hant/mssql.json | 128 + .../plugins/datasource/mssql/dist/module.js | 4 + .../mssql/dist/module.js.LICENSE.txt | 17 + .../datasource/mssql/dist/module.js.map | 1 + .../plugins/datasource/mssql/dist/plugin.json | 60 + .../datasource/mssql/dist/sql-query-editor.js | 25 + .../mssql/dist/sql-query-editor.js.map | 1 + .../app/plugins/datasource/mysql/dist/166.js | 1 + .../app/plugins/datasource/mysql/dist/172.js | 1 + .../app/plugins/datasource/mysql/dist/236.js | 1 + .../app/plugins/datasource/mysql/dist/290.js | 1 + .../app/plugins/datasource/mysql/dist/30.js | 1 + .../app/plugins/datasource/mysql/dist/343.js | 1 + .../app/plugins/datasource/mysql/dist/360.js | 2 + .../plugins/datasource/mysql/dist/360.js.map | 1 + .../app/plugins/datasource/mysql/dist/447.js | 1 + .../app/plugins/datasource/mysql/dist/450.js | 1 + .../app/plugins/datasource/mysql/dist/454.js | 1 + .../app/plugins/datasource/mysql/dist/493.js | 2 + .../plugins/datasource/mysql/dist/493.js.map | 1 + .../app/plugins/datasource/mysql/dist/501.js | 1 + .../app/plugins/datasource/mysql/dist/540.js | 1 + .../app/plugins/datasource/mysql/dist/630.js | 1 + .../app/plugins/datasource/mysql/dist/654.js | 1 + .../app/plugins/datasource/mysql/dist/685.js | 1 + .../app/plugins/datasource/mysql/dist/809.js | 1 + .../app/plugins/datasource/mysql/dist/852.js | 1 + .../app/plugins/datasource/mysql/dist/855.js | 1 + .../app/plugins/datasource/mysql/dist/880.js | 1 + .../app/plugins/datasource/mysql/dist/961.js | 1 + .../datasource/mysql/dist/CHANGELOG.md | 1 + .../app/plugins/datasource/mysql/dist/LICENSE | 661 ++ .../plugins/datasource/mysql/dist/README.md | 14 + .../datasource/mysql/dist/img/mysql_logo.svg | 27 + .../plugins/datasource/mysql/dist/module.js | 4 + .../mysql/dist/module.js.LICENSE.txt | 17 + .../datasource/mysql/dist/module.js.map | 1 + .../plugins/datasource/mysql/dist/plugin.json | 36 + .../datasource/mysql/dist/sql-query-editor.js | 25 + .../mysql/dist/sql-query-editor.js.map | 1 + .../datasource/parca/dist/CHANGELOG.md | 1 + .../app/plugins/datasource/parca/dist/LICENSE | 661 ++ .../plugins/datasource/parca/dist/README.md | 3 + .../datasource/parca/dist/img/logo-small.svg | 1 + .../plugins/datasource/parca/dist/module.js | 4 + .../parca/dist/module.js.LICENSE.txt | 9 + .../datasource/parca/dist/module.js.map | 1 + .../plugins/datasource/parca/dist/plugin.json | 39 + .../app/plugins/datasource/tempo/dist/1070.js | 3 + .../datasource/tempo/dist/1070.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1070.js.map | 1 + .../app/plugins/datasource/tempo/dist/1246.js | 3 + .../datasource/tempo/dist/1246.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1246.js.map | 1 + .../app/plugins/datasource/tempo/dist/1326.js | 3 + .../datasource/tempo/dist/1326.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1326.js.map | 1 + .../app/plugins/datasource/tempo/dist/1898.js | 3 + .../datasource/tempo/dist/1898.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1898.js.map | 1 + .../app/plugins/datasource/tempo/dist/1948.js | 3 + .../datasource/tempo/dist/1948.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1948.js.map | 1 + .../app/plugins/datasource/tempo/dist/1988.js | 3 + .../datasource/tempo/dist/1988.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/1988.js.map | 1 + .../app/plugins/datasource/tempo/dist/2138.js | 3 + .../datasource/tempo/dist/2138.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2138.js.map | 1 + .../app/plugins/datasource/tempo/dist/2182.js | 3 + .../datasource/tempo/dist/2182.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2182.js.map | 1 + .../app/plugins/datasource/tempo/dist/2378.js | 3 + .../datasource/tempo/dist/2378.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2378.js.map | 1 + .../app/plugins/datasource/tempo/dist/2552.js | 3 + .../datasource/tempo/dist/2552.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2552.js.map | 1 + .../app/plugins/datasource/tempo/dist/2716.js | 3 + .../datasource/tempo/dist/2716.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2716.js.map | 1 + .../app/plugins/datasource/tempo/dist/2770.js | 3 + .../datasource/tempo/dist/2770.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2770.js.map | 1 + .../app/plugins/datasource/tempo/dist/2838.js | 3 + .../datasource/tempo/dist/2838.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/2838.js.map | 1 + .../app/plugins/datasource/tempo/dist/3070.js | 3 + .../datasource/tempo/dist/3070.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3070.js.map | 1 + .../app/plugins/datasource/tempo/dist/3238.js | 3 + .../datasource/tempo/dist/3238.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3238.js.map | 1 + .../app/plugins/datasource/tempo/dist/3294.js | 3 + .../datasource/tempo/dist/3294.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3294.js.map | 1 + .../app/plugins/datasource/tempo/dist/3304.js | 3 + .../datasource/tempo/dist/3304.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3304.js.map | 1 + .../app/plugins/datasource/tempo/dist/3380.js | 2 + .../plugins/datasource/tempo/dist/3380.js.map | 1 + .../app/plugins/datasource/tempo/dist/3646.js | 3 + .../datasource/tempo/dist/3646.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3646.js.map | 1 + .../app/plugins/datasource/tempo/dist/3851.js | 2 + .../plugins/datasource/tempo/dist/3851.js.map | 1 + .../app/plugins/datasource/tempo/dist/3918.js | 3 + .../datasource/tempo/dist/3918.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/3918.js.map | 1 + .../app/plugins/datasource/tempo/dist/4039.js | 3 + .../datasource/tempo/dist/4039.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4039.js.map | 1 + .../app/plugins/datasource/tempo/dist/4418.js | 3 + .../datasource/tempo/dist/4418.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4418.js.map | 1 + .../app/plugins/datasource/tempo/dist/4462.js | 3 + .../datasource/tempo/dist/4462.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4462.js.map | 1 + .../app/plugins/datasource/tempo/dist/450.js | 3 + .../datasource/tempo/dist/450.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/450.js.map | 1 + .../app/plugins/datasource/tempo/dist/4502.js | 3 + .../datasource/tempo/dist/4502.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4502.js.map | 1 + .../app/plugins/datasource/tempo/dist/4562.js | 3 + .../datasource/tempo/dist/4562.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4562.js.map | 1 + .../app/plugins/datasource/tempo/dist/4618.js | 3 + .../datasource/tempo/dist/4618.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4618.js.map | 1 + .../app/plugins/datasource/tempo/dist/4630.js | 3 + .../datasource/tempo/dist/4630.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4630.js.map | 1 + .../app/plugins/datasource/tempo/dist/470.js | 3 + .../datasource/tempo/dist/470.js.LICENSE.txt | 10 + .../plugins/datasource/tempo/dist/470.js.map | 1 + .../app/plugins/datasource/tempo/dist/4726.js | 3 + .../datasource/tempo/dist/4726.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4726.js.map | 1 + .../app/plugins/datasource/tempo/dist/4832.js | 3 + .../datasource/tempo/dist/4832.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4832.js.map | 1 + .../app/plugins/datasource/tempo/dist/4910.js | 3 + .../datasource/tempo/dist/4910.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4910.js.map | 1 + .../app/plugins/datasource/tempo/dist/4994.js | 3 + .../datasource/tempo/dist/4994.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/4994.js.map | 1 + .../app/plugins/datasource/tempo/dist/5202.js | 3 + .../datasource/tempo/dist/5202.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5202.js.map | 1 + .../app/plugins/datasource/tempo/dist/5246.js | 3 + .../datasource/tempo/dist/5246.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5246.js.map | 1 + .../app/plugins/datasource/tempo/dist/5292.js | 3 + .../datasource/tempo/dist/5292.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5292.js.map | 1 + .../app/plugins/datasource/tempo/dist/5374.js | 3 + .../datasource/tempo/dist/5374.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5374.js.map | 1 + .../app/plugins/datasource/tempo/dist/5534.js | 3 + .../datasource/tempo/dist/5534.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5534.js.map | 1 + .../app/plugins/datasource/tempo/dist/5646.js | 3 + .../datasource/tempo/dist/5646.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5646.js.map | 1 + .../app/plugins/datasource/tempo/dist/5658.js | 3 + .../datasource/tempo/dist/5658.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5658.js.map | 1 + .../app/plugins/datasource/tempo/dist/582.js | 3 + .../datasource/tempo/dist/582.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/582.js.map | 1 + .../app/plugins/datasource/tempo/dist/5934.js | 3 + .../datasource/tempo/dist/5934.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5934.js.map | 1 + .../app/plugins/datasource/tempo/dist/5982.js | 3 + .../datasource/tempo/dist/5982.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5982.js.map | 1 + .../app/plugins/datasource/tempo/dist/5998.js | 3 + .../datasource/tempo/dist/5998.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/5998.js.map | 1 + .../app/plugins/datasource/tempo/dist/6014.js | 3 + .../datasource/tempo/dist/6014.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6014.js.map | 1 + .../app/plugins/datasource/tempo/dist/6067.js | 3 + .../datasource/tempo/dist/6067.js.LICENSE.txt | 8 + .../plugins/datasource/tempo/dist/6067.js.map | 1 + .../app/plugins/datasource/tempo/dist/6082.js | 2 + .../plugins/datasource/tempo/dist/6082.js.map | 1 + .../app/plugins/datasource/tempo/dist/6110.js | 3 + .../datasource/tempo/dist/6110.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6110.js.map | 1 + .../app/plugins/datasource/tempo/dist/6284.js | 3 + .../datasource/tempo/dist/6284.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6284.js.map | 1 + .../app/plugins/datasource/tempo/dist/6302.js | 3 + .../datasource/tempo/dist/6302.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6302.js.map | 1 + .../app/plugins/datasource/tempo/dist/6362.js | 3 + .../datasource/tempo/dist/6362.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6362.js.map | 1 + .../app/plugins/datasource/tempo/dist/6502.js | 3 + .../datasource/tempo/dist/6502.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6502.js.map | 1 + .../app/plugins/datasource/tempo/dist/6506.js | 3 + .../datasource/tempo/dist/6506.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6506.js.map | 1 + .../app/plugins/datasource/tempo/dist/6556.js | 3 + .../datasource/tempo/dist/6556.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/6556.js.map | 1 + .../app/plugins/datasource/tempo/dist/6948.js | 2 + .../plugins/datasource/tempo/dist/6948.js.map | 1 + .../app/plugins/datasource/tempo/dist/7002.js | 3 + .../datasource/tempo/dist/7002.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7002.js.map | 1 + .../app/plugins/datasource/tempo/dist/7134.js | 3 + .../datasource/tempo/dist/7134.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7134.js.map | 1 + .../app/plugins/datasource/tempo/dist/7174.js | 3 + .../datasource/tempo/dist/7174.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7174.js.map | 1 + .../app/plugins/datasource/tempo/dist/7246.js | 3 + .../datasource/tempo/dist/7246.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7246.js.map | 1 + .../app/plugins/datasource/tempo/dist/7257.js | 3 + .../datasource/tempo/dist/7257.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7257.js.map | 1 + .../app/plugins/datasource/tempo/dist/7294.js | 3 + .../datasource/tempo/dist/7294.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7294.js.map | 1 + .../app/plugins/datasource/tempo/dist/7596.js | 3 + .../datasource/tempo/dist/7596.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7596.js.map | 1 + .../app/plugins/datasource/tempo/dist/7832.js | 3 + .../datasource/tempo/dist/7832.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/7832.js.map | 1 + .../app/plugins/datasource/tempo/dist/8094.js | 3 + .../datasource/tempo/dist/8094.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8094.js.map | 1 + .../app/plugins/datasource/tempo/dist/8114.js | 3 + .../datasource/tempo/dist/8114.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8114.js.map | 1 + .../app/plugins/datasource/tempo/dist/8142.js | 3 + .../datasource/tempo/dist/8142.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8142.js.map | 1 + .../app/plugins/datasource/tempo/dist/8190.js | 3 + .../datasource/tempo/dist/8190.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8190.js.map | 1 + .../app/plugins/datasource/tempo/dist/8228.js | 3 + .../datasource/tempo/dist/8228.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8228.js.map | 1 + .../app/plugins/datasource/tempo/dist/8356.js | 3 + .../datasource/tempo/dist/8356.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8356.js.map | 1 + .../app/plugins/datasource/tempo/dist/8790.js | 3 + .../datasource/tempo/dist/8790.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8790.js.map | 1 + .../app/plugins/datasource/tempo/dist/8856.js | 3 + .../datasource/tempo/dist/8856.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8856.js.map | 1 + .../app/plugins/datasource/tempo/dist/8952.js | 3 + .../datasource/tempo/dist/8952.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/8952.js.map | 1 + .../app/plugins/datasource/tempo/dist/9054.js | 3 + .../datasource/tempo/dist/9054.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9054.js.map | 1 + .../app/plugins/datasource/tempo/dist/9133.js | 3 + .../datasource/tempo/dist/9133.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9133.js.map | 1 + .../app/plugins/datasource/tempo/dist/9240.js | 3 + .../datasource/tempo/dist/9240.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9240.js.map | 1 + .../app/plugins/datasource/tempo/dist/9342.js | 3 + .../datasource/tempo/dist/9342.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9342.js.map | 1 + .../app/plugins/datasource/tempo/dist/9394.js | 3 + .../datasource/tempo/dist/9394.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9394.js.map | 1 + .../app/plugins/datasource/tempo/dist/9442.js | 3 + .../datasource/tempo/dist/9442.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9442.js.map | 1 + .../app/plugins/datasource/tempo/dist/9446.js | 3 + .../datasource/tempo/dist/9446.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9446.js.map | 1 + .../app/plugins/datasource/tempo/dist/9562.js | 3 + .../datasource/tempo/dist/9562.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9562.js.map | 1 + .../app/plugins/datasource/tempo/dist/960.js | 3 + .../datasource/tempo/dist/960.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/960.js.map | 1 + .../app/plugins/datasource/tempo/dist/9726.js | 3 + .../datasource/tempo/dist/9726.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9726.js.map | 1 + .../app/plugins/datasource/tempo/dist/9762.js | 2 + .../plugins/datasource/tempo/dist/9762.js.map | 1 + .../app/plugins/datasource/tempo/dist/990.js | 3 + .../datasource/tempo/dist/990.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/990.js.map | 1 + .../app/plugins/datasource/tempo/dist/9922.js | 3 + .../datasource/tempo/dist/9922.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9922.js.map | 1 + .../app/plugins/datasource/tempo/dist/9998.js | 3 + .../datasource/tempo/dist/9998.js.LICENSE.txt | 6 + .../plugins/datasource/tempo/dist/9998.js.map | 1 + .../datasource/tempo/dist/CHANGELOG.md | 1 + .../app/plugins/datasource/tempo/dist/LICENSE | 661 ++ .../plugins/datasource/tempo/dist/README.md | 7 + .../tempo/dist/fonts/b797181c93b3755f4fa1.ttf | Bin 0 -> 72504 bytes .../datasource/tempo/dist/img/tempo_logo.svg | 1 + .../plugins/datasource/tempo/dist/module.js | 4 + .../tempo/dist/module.js.LICENSE.txt | 9 + .../datasource/tempo/dist/module.js.map | 1 + .../plugins/datasource/tempo/dist/plugin.json | 46 + .../tempo/dist/test/mockJsonResponse.json | 818 ++ .../tempo/dist/test/mockServiceGraph.json | 315 + .../datasource/zipkin/dist/CHANGELOG.md | 1 + .../plugins/datasource/zipkin/dist/LICENSE | 661 ++ .../plugins/datasource/zipkin/dist/README.md | 3 + .../zipkin/dist/img/zipkin-logo.svg | 1 + .../zipkin/dist/mocks/mockJsonResponse.json | 45 + .../plugins/datasource/zipkin/dist/module.js | 4 + .../zipkin/dist/module.js.LICENSE.txt | 9 + .../datasource/zipkin/dist/module.js.map | 1 + .../datasource/zipkin/dist/plugin.json | 45 + 527 files changed, 107498 insertions(+), 33 deletions(-) create mode 100644 public/app/plugins/datasource/azuremonitor/dist/360.js create mode 100644 public/app/plugins/datasource/azuremonitor/dist/360.js.map create mode 100644 public/app/plugins/datasource/azuremonitor/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/azuremonitor/dist/LICENSE create mode 100644 public/app/plugins/datasource/azuremonitor/dist/README.md create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/adx.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsights.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsFailureDependencies.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsFailureExceptions.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsFailureOperations.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsGeoMap.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsPerfDependencies.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/appInsightsPerfOperations.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/arg.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/azureInfraApps.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/azureInfraCompute.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/azureInfraData.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/azureInfraNetwork.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/azureInfraStorageVaults.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/containerInsightsSyslog.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/cosmosdb.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/keyvault.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/networkInsightsDashboard.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/postgresFlexibleServer.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/sqldb.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/storage.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/v1Alerts.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/vMInsightsRG.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/dashboards/vMInsightsWorkspace.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/azure_monitor_cpu.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/azure_monitor_network.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/config_1_select_type.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/config_2_azure_monitor_api_details.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/config_3_app_insights_api_details.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/config_4_save_and_test.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/contoso_loans_grafana_dashboard.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/grafana_cloud_install.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/grafana_cloud_login.png create mode 100644 public/app/plugins/datasource/azuremonitor/dist/img/logo.jpg create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/cs-CZ/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/de-DE/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/en-US/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/es-ES/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/fr-FR/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/hu-HU/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/id-ID/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/it-IT/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/ja-JP/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/ko-KR/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/nl-NL/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/pl-PL/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/pt-BR/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/pt-PT/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/ru-RU/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/sv-SE/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/tr-TR/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/zh-Hans/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/locales/zh-Hant/grafana-azure-monitor-datasource.json create mode 100644 public/app/plugins/datasource/azuremonitor/dist/module.js create mode 100644 public/app/plugins/datasource/azuremonitor/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/azuremonitor/dist/module.js.map create mode 100644 public/app/plugins/datasource/azuremonitor/dist/plugin.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/LICENSE create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/README.md create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloud-storage-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloudfunctions-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloudsql-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloudsql-mysql-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloudsql-postgre-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/cloudtasks-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/dataprocessing-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/firewall-insight-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/gce-network-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/gce-vm-instance-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/gke-prometheus-pod-node-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/https-lb-backend-services-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/https-loadbalancer-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/micro-service-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/dashboards/network-tcp-loadbalancer-monitoring.json create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/img/cloud_monitoring_logo.svg create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/module.js create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/module.js.map create mode 100644 public/app/plugins/datasource/cloud-monitoring/dist/plugin.json create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/166.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/172.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/236.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/290.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/30.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/343.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/360.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/360.js.map create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/447.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/450.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/454.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/493.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/493.js.map create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/501.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/540.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/630.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/654.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/685.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/809.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/852.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/855.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/880.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/961.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/LICENSE create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/README.md create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/img/postgresql_logo.svg create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/module.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/module.js.map create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/plugin.json create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/sql-query-editor.js create mode 100644 public/app/plugins/datasource/grafana-postgresql-datasource/dist/sql-query-editor.js.map create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/LICENSE create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/README.md create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/img/grafana_pyroscope_icon.svg create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/module.js create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/module.js.map create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/dist/plugin.json create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/LICENSE create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/README.md create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/dashboards/streaming.json create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/img/testdata.svg create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/module.js create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/module.js.map create mode 100644 public/app/plugins/datasource/grafana-testdata-datasource/dist/plugin.json create mode 100644 public/app/plugins/datasource/jaeger/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/jaeger/dist/LICENSE create mode 100644 public/app/plugins/datasource/jaeger/dist/README.md create mode 100644 public/app/plugins/datasource/jaeger/dist/img/jaeger_logo.svg create mode 100644 public/app/plugins/datasource/jaeger/dist/mockJsonResponse.json create mode 100644 public/app/plugins/datasource/jaeger/dist/mockSearchResponse.json create mode 100644 public/app/plugins/datasource/jaeger/dist/mockTraceResponse.json create mode 100644 public/app/plugins/datasource/jaeger/dist/module.js create mode 100644 public/app/plugins/datasource/jaeger/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/jaeger/dist/module.js.map create mode 100644 public/app/plugins/datasource/jaeger/dist/plugin.json create mode 100644 public/app/plugins/datasource/loki/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/loki/dist/LICENSE create mode 100644 public/app/plugins/datasource/loki/dist/README.md create mode 100644 public/app/plugins/datasource/loki/dist/img/grafana_icon.svg create mode 100644 public/app/plugins/datasource/loki/dist/img/loki_icon.svg create mode 100644 public/app/plugins/datasource/loki/dist/loki-query-field.js create mode 100644 public/app/plugins/datasource/loki/dist/loki-query-field.js.map create mode 100644 public/app/plugins/datasource/loki/dist/module.js create mode 100644 public/app/plugins/datasource/loki/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/loki/dist/module.js.map create mode 100644 public/app/plugins/datasource/loki/dist/plugin.json create mode 100644 public/app/plugins/datasource/mssql/dist/166.js create mode 100644 public/app/plugins/datasource/mssql/dist/172.js create mode 100644 public/app/plugins/datasource/mssql/dist/236.js create mode 100644 public/app/plugins/datasource/mssql/dist/290.js create mode 100644 public/app/plugins/datasource/mssql/dist/30.js create mode 100644 public/app/plugins/datasource/mssql/dist/343.js create mode 100644 public/app/plugins/datasource/mssql/dist/360.js create mode 100644 public/app/plugins/datasource/mssql/dist/360.js.map create mode 100644 public/app/plugins/datasource/mssql/dist/447.js create mode 100644 public/app/plugins/datasource/mssql/dist/450.js create mode 100644 public/app/plugins/datasource/mssql/dist/454.js create mode 100644 public/app/plugins/datasource/mssql/dist/493.js create mode 100644 public/app/plugins/datasource/mssql/dist/493.js.map create mode 100644 public/app/plugins/datasource/mssql/dist/501.js create mode 100644 public/app/plugins/datasource/mssql/dist/540.js create mode 100644 public/app/plugins/datasource/mssql/dist/630.js create mode 100644 public/app/plugins/datasource/mssql/dist/654.js create mode 100644 public/app/plugins/datasource/mssql/dist/685.js create mode 100644 public/app/plugins/datasource/mssql/dist/809.js create mode 100644 public/app/plugins/datasource/mssql/dist/852.js create mode 100644 public/app/plugins/datasource/mssql/dist/855.js create mode 100644 public/app/plugins/datasource/mssql/dist/880.js create mode 100644 public/app/plugins/datasource/mssql/dist/961.js create mode 100644 public/app/plugins/datasource/mssql/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/mssql/dist/LICENSE create mode 100644 public/app/plugins/datasource/mssql/dist/README.md create mode 100644 public/app/plugins/datasource/mssql/dist/img/sql_server_logo.svg create mode 100644 public/app/plugins/datasource/mssql/dist/locales/cs-CZ/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/de-DE/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/en-US/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/es-ES/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/fr-FR/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/hu-HU/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/id-ID/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/it-IT/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/ja-JP/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/ko-KR/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/nl-NL/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/pl-PL/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/pt-BR/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/pt-PT/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/ru-RU/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/sv-SE/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/tr-TR/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/zh-Hans/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/locales/zh-Hant/mssql.json create mode 100644 public/app/plugins/datasource/mssql/dist/module.js create mode 100644 public/app/plugins/datasource/mssql/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/mssql/dist/module.js.map create mode 100644 public/app/plugins/datasource/mssql/dist/plugin.json create mode 100644 public/app/plugins/datasource/mssql/dist/sql-query-editor.js create mode 100644 public/app/plugins/datasource/mssql/dist/sql-query-editor.js.map create mode 100644 public/app/plugins/datasource/mysql/dist/166.js create mode 100644 public/app/plugins/datasource/mysql/dist/172.js create mode 100644 public/app/plugins/datasource/mysql/dist/236.js create mode 100644 public/app/plugins/datasource/mysql/dist/290.js create mode 100644 public/app/plugins/datasource/mysql/dist/30.js create mode 100644 public/app/plugins/datasource/mysql/dist/343.js create mode 100644 public/app/plugins/datasource/mysql/dist/360.js create mode 100644 public/app/plugins/datasource/mysql/dist/360.js.map create mode 100644 public/app/plugins/datasource/mysql/dist/447.js create mode 100644 public/app/plugins/datasource/mysql/dist/450.js create mode 100644 public/app/plugins/datasource/mysql/dist/454.js create mode 100644 public/app/plugins/datasource/mysql/dist/493.js create mode 100644 public/app/plugins/datasource/mysql/dist/493.js.map create mode 100644 public/app/plugins/datasource/mysql/dist/501.js create mode 100644 public/app/plugins/datasource/mysql/dist/540.js create mode 100644 public/app/plugins/datasource/mysql/dist/630.js create mode 100644 public/app/plugins/datasource/mysql/dist/654.js create mode 100644 public/app/plugins/datasource/mysql/dist/685.js create mode 100644 public/app/plugins/datasource/mysql/dist/809.js create mode 100644 public/app/plugins/datasource/mysql/dist/852.js create mode 100644 public/app/plugins/datasource/mysql/dist/855.js create mode 100644 public/app/plugins/datasource/mysql/dist/880.js create mode 100644 public/app/plugins/datasource/mysql/dist/961.js create mode 100644 public/app/plugins/datasource/mysql/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/mysql/dist/LICENSE create mode 100644 public/app/plugins/datasource/mysql/dist/README.md create mode 100644 public/app/plugins/datasource/mysql/dist/img/mysql_logo.svg create mode 100644 public/app/plugins/datasource/mysql/dist/module.js create mode 100644 public/app/plugins/datasource/mysql/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/mysql/dist/module.js.map create mode 100644 public/app/plugins/datasource/mysql/dist/plugin.json create mode 100644 public/app/plugins/datasource/mysql/dist/sql-query-editor.js create mode 100644 public/app/plugins/datasource/mysql/dist/sql-query-editor.js.map create mode 100644 public/app/plugins/datasource/parca/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/parca/dist/LICENSE create mode 100644 public/app/plugins/datasource/parca/dist/README.md create mode 100644 public/app/plugins/datasource/parca/dist/img/logo-small.svg create mode 100644 public/app/plugins/datasource/parca/dist/module.js create mode 100644 public/app/plugins/datasource/parca/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/parca/dist/module.js.map create mode 100644 public/app/plugins/datasource/parca/dist/plugin.json create mode 100644 public/app/plugins/datasource/tempo/dist/1070.js create mode 100644 public/app/plugins/datasource/tempo/dist/1070.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1070.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/1246.js create mode 100644 public/app/plugins/datasource/tempo/dist/1246.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1246.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/1326.js create mode 100644 public/app/plugins/datasource/tempo/dist/1326.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1326.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/1898.js create mode 100644 public/app/plugins/datasource/tempo/dist/1898.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1898.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/1948.js create mode 100644 public/app/plugins/datasource/tempo/dist/1948.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1948.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/1988.js create mode 100644 public/app/plugins/datasource/tempo/dist/1988.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/1988.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2138.js create mode 100644 public/app/plugins/datasource/tempo/dist/2138.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2138.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2182.js create mode 100644 public/app/plugins/datasource/tempo/dist/2182.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2182.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2378.js create mode 100644 public/app/plugins/datasource/tempo/dist/2378.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2378.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2552.js create mode 100644 public/app/plugins/datasource/tempo/dist/2552.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2552.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2716.js create mode 100644 public/app/plugins/datasource/tempo/dist/2716.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2716.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2770.js create mode 100644 public/app/plugins/datasource/tempo/dist/2770.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2770.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/2838.js create mode 100644 public/app/plugins/datasource/tempo/dist/2838.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/2838.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3070.js create mode 100644 public/app/plugins/datasource/tempo/dist/3070.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3070.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3238.js create mode 100644 public/app/plugins/datasource/tempo/dist/3238.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3238.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3294.js create mode 100644 public/app/plugins/datasource/tempo/dist/3294.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3294.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3304.js create mode 100644 public/app/plugins/datasource/tempo/dist/3304.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3304.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3380.js create mode 100644 public/app/plugins/datasource/tempo/dist/3380.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3646.js create mode 100644 public/app/plugins/datasource/tempo/dist/3646.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3646.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3851.js create mode 100644 public/app/plugins/datasource/tempo/dist/3851.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/3918.js create mode 100644 public/app/plugins/datasource/tempo/dist/3918.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/3918.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4039.js create mode 100644 public/app/plugins/datasource/tempo/dist/4039.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4039.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4418.js create mode 100644 public/app/plugins/datasource/tempo/dist/4418.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4418.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4462.js create mode 100644 public/app/plugins/datasource/tempo/dist/4462.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4462.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/450.js create mode 100644 public/app/plugins/datasource/tempo/dist/450.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/450.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4502.js create mode 100644 public/app/plugins/datasource/tempo/dist/4502.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4502.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4562.js create mode 100644 public/app/plugins/datasource/tempo/dist/4562.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4562.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4618.js create mode 100644 public/app/plugins/datasource/tempo/dist/4618.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4618.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4630.js create mode 100644 public/app/plugins/datasource/tempo/dist/4630.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4630.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/470.js create mode 100644 public/app/plugins/datasource/tempo/dist/470.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/470.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4726.js create mode 100644 public/app/plugins/datasource/tempo/dist/4726.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4726.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4832.js create mode 100644 public/app/plugins/datasource/tempo/dist/4832.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4832.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4910.js create mode 100644 public/app/plugins/datasource/tempo/dist/4910.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4910.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/4994.js create mode 100644 public/app/plugins/datasource/tempo/dist/4994.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/4994.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5202.js create mode 100644 public/app/plugins/datasource/tempo/dist/5202.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5202.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5246.js create mode 100644 public/app/plugins/datasource/tempo/dist/5246.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5246.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5292.js create mode 100644 public/app/plugins/datasource/tempo/dist/5292.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5292.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5374.js create mode 100644 public/app/plugins/datasource/tempo/dist/5374.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5374.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5534.js create mode 100644 public/app/plugins/datasource/tempo/dist/5534.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5534.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5646.js create mode 100644 public/app/plugins/datasource/tempo/dist/5646.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5646.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5658.js create mode 100644 public/app/plugins/datasource/tempo/dist/5658.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5658.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/582.js create mode 100644 public/app/plugins/datasource/tempo/dist/582.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/582.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5934.js create mode 100644 public/app/plugins/datasource/tempo/dist/5934.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5934.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5982.js create mode 100644 public/app/plugins/datasource/tempo/dist/5982.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5982.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/5998.js create mode 100644 public/app/plugins/datasource/tempo/dist/5998.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/5998.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6014.js create mode 100644 public/app/plugins/datasource/tempo/dist/6014.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6014.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6067.js create mode 100644 public/app/plugins/datasource/tempo/dist/6067.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6067.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6082.js create mode 100644 public/app/plugins/datasource/tempo/dist/6082.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6110.js create mode 100644 public/app/plugins/datasource/tempo/dist/6110.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6110.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6284.js create mode 100644 public/app/plugins/datasource/tempo/dist/6284.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6284.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6302.js create mode 100644 public/app/plugins/datasource/tempo/dist/6302.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6302.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6362.js create mode 100644 public/app/plugins/datasource/tempo/dist/6362.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6362.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6502.js create mode 100644 public/app/plugins/datasource/tempo/dist/6502.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6502.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6506.js create mode 100644 public/app/plugins/datasource/tempo/dist/6506.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6506.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6556.js create mode 100644 public/app/plugins/datasource/tempo/dist/6556.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/6556.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/6948.js create mode 100644 public/app/plugins/datasource/tempo/dist/6948.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7002.js create mode 100644 public/app/plugins/datasource/tempo/dist/7002.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7002.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7134.js create mode 100644 public/app/plugins/datasource/tempo/dist/7134.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7134.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7174.js create mode 100644 public/app/plugins/datasource/tempo/dist/7174.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7174.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7246.js create mode 100644 public/app/plugins/datasource/tempo/dist/7246.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7246.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7257.js create mode 100644 public/app/plugins/datasource/tempo/dist/7257.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7257.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7294.js create mode 100644 public/app/plugins/datasource/tempo/dist/7294.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7294.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7596.js create mode 100644 public/app/plugins/datasource/tempo/dist/7596.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7596.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/7832.js create mode 100644 public/app/plugins/datasource/tempo/dist/7832.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/7832.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8094.js create mode 100644 public/app/plugins/datasource/tempo/dist/8094.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8094.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8114.js create mode 100644 public/app/plugins/datasource/tempo/dist/8114.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8114.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8142.js create mode 100644 public/app/plugins/datasource/tempo/dist/8142.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8142.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8190.js create mode 100644 public/app/plugins/datasource/tempo/dist/8190.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8190.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8228.js create mode 100644 public/app/plugins/datasource/tempo/dist/8228.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8228.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8356.js create mode 100644 public/app/plugins/datasource/tempo/dist/8356.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8356.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8790.js create mode 100644 public/app/plugins/datasource/tempo/dist/8790.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8790.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8856.js create mode 100644 public/app/plugins/datasource/tempo/dist/8856.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8856.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/8952.js create mode 100644 public/app/plugins/datasource/tempo/dist/8952.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/8952.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9054.js create mode 100644 public/app/plugins/datasource/tempo/dist/9054.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9054.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9133.js create mode 100644 public/app/plugins/datasource/tempo/dist/9133.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9133.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9240.js create mode 100644 public/app/plugins/datasource/tempo/dist/9240.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9240.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9342.js create mode 100644 public/app/plugins/datasource/tempo/dist/9342.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9342.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9394.js create mode 100644 public/app/plugins/datasource/tempo/dist/9394.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9394.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9442.js create mode 100644 public/app/plugins/datasource/tempo/dist/9442.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9442.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9446.js create mode 100644 public/app/plugins/datasource/tempo/dist/9446.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9446.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9562.js create mode 100644 public/app/plugins/datasource/tempo/dist/9562.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9562.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/960.js create mode 100644 public/app/plugins/datasource/tempo/dist/960.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/960.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9726.js create mode 100644 public/app/plugins/datasource/tempo/dist/9726.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9726.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9762.js create mode 100644 public/app/plugins/datasource/tempo/dist/9762.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/990.js create mode 100644 public/app/plugins/datasource/tempo/dist/990.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/990.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9922.js create mode 100644 public/app/plugins/datasource/tempo/dist/9922.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9922.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/9998.js create mode 100644 public/app/plugins/datasource/tempo/dist/9998.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/9998.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/tempo/dist/LICENSE create mode 100644 public/app/plugins/datasource/tempo/dist/README.md create mode 100644 public/app/plugins/datasource/tempo/dist/fonts/b797181c93b3755f4fa1.ttf create mode 100644 public/app/plugins/datasource/tempo/dist/img/tempo_logo.svg create mode 100644 public/app/plugins/datasource/tempo/dist/module.js create mode 100644 public/app/plugins/datasource/tempo/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/tempo/dist/module.js.map create mode 100644 public/app/plugins/datasource/tempo/dist/plugin.json create mode 100644 public/app/plugins/datasource/tempo/dist/test/mockJsonResponse.json create mode 100644 public/app/plugins/datasource/tempo/dist/test/mockServiceGraph.json create mode 100644 public/app/plugins/datasource/zipkin/dist/CHANGELOG.md create mode 100644 public/app/plugins/datasource/zipkin/dist/LICENSE create mode 100644 public/app/plugins/datasource/zipkin/dist/README.md create mode 100644 public/app/plugins/datasource/zipkin/dist/img/zipkin-logo.svg create mode 100644 public/app/plugins/datasource/zipkin/dist/mocks/mockJsonResponse.json create mode 100644 public/app/plugins/datasource/zipkin/dist/module.js create mode 100644 public/app/plugins/datasource/zipkin/dist/module.js.LICENSE.txt create mode 100644 public/app/plugins/datasource/zipkin/dist/module.js.map create mode 100644 public/app/plugins/datasource/zipkin/dist/plugin.json diff --git a/Containerfile.konflux b/Containerfile.konflux index 5c5ac25834e99..3345f13121065 100644 --- a/Containerfile.konflux +++ b/Containerfile.konflux @@ -1,34 +1,3 @@ -# JavaScript build stage -# Reference: https://github.com/grafana/grafana/blob/main/Dockerfile -FROM registry.access.redhat.com/ubi9/nodejs-22:latest AS js-builder - -WORKDIR /tmp/grafana - -USER root - -# Install build dependencies -RUN dnf install -y make gcc-c++ python3 && dnf clean all - -# Copy package files first for better layer caching -COPY package.json project.json nx.json yarn.lock .yarnrc.yml ./ -COPY .yarn .yarn -COPY packages packages -COPY public public -COPY LICENSE ./ -COPY conf/defaults.ini ./conf/defaults.ini - -ENV NODE_OPTIONS=--max_old_space_size=8000 -ENV NODE_ENV=production - -# Install dependencies and build frontend -RUN corepack enable && yarn install --immutable - -COPY tsconfig.json eslint.config.js .editorconfig .browserslistrc .prettierrc.js ./ -COPY scripts scripts -COPY emails emails - -RUN yarn build - # Golang build container FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:rhel_9_1.25 AS builder @@ -115,8 +84,7 @@ RUN mkdir -p "$GF_PATHS_HOME/.aws" && \ chmod -R 777 "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS" "$GF_PATHS_PROVISIONING" COPY --from=builder /usr/bin/grafana* ./bin/ -# Use built frontend from js-builder instead of source code -COPY --from=js-builder /tmp/grafana/public ./public +COPY public ./public COPY tools ./tools EXPOSE 3000 diff --git a/public/app/plugins/datasource/azuremonitor/dist/360.js b/public/app/plugins/datasource/azuremonitor/dist/360.js new file mode 100644 index 0000000000000..c6b82d15f0641 --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/dist/360.js @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunkgrafana_azure_monitor_datasource=globalThis.webpackChunkgrafana_azure_monitor_datasource||[]).push([[360],{8360:(e,t,o)=>{o.r(t),o.d(t,{default:()=>i});var r={a:"α",b:"ḅ",c:"ͼ",d:"ḍ",e:"ḛ",f:"ϝ",g:"ḡ",h:"ḥ",i:"ḭ",j:"ĵ",k:"ḳ",l:"ḽ",m:"ṃ",n:"ṇ",o:"ṓ",p:"ṗ",q:"ʠ",r:"ṛ",s:"ṡ",t:"ţ",u:"ṵ",v:"ṽ",w:"ẁ",x:"ẋ",y:"ẏ",z:"ẓ",A:"À",B:"β",C:"Ḉ",D:"Ḍ",E:"Ḛ",F:"Ḟ",G:"Ḡ",H:"Ḥ",I:"Ḭ",J:"Ĵ",K:"Ḱ",L:"Ḻ",M:"Ṁ",N:"Ṅ",O:"Ṏ",P:"Ṕ",Q:"Ǫ",R:"Ṛ",S:"Ṣ",T:"Ṫ",U:"Ṳ",V:"Ṿ",W:"Ŵ",X:"Ẋ",Y:"Ŷ",Z:"Ż"},n=["a","e","i","o","u","y","A","E","I","O","U","Y"],a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},o=t.languageToPseudo,a=void 0===o?"en":o,i=t.letterMultiplier,s=void 0===i?2:i,p=t.repeatedLetters,u=void 0===p?n:p,l=t.uglifedLetterObject,d=void 0===l?r:l,c=t.wrapped,g=void 0!==c&&c,h=t.enabled,f=void 0===h||h;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.name="pseudo",this.type="postProcessor",this.options={languageToPseudo:a,letterMultiplier:s,wrapped:g,repeatedLetters:u,letters:d,enabled:f}}return e.prototype.configurePseudo=function(e){this.options=a({},this.options,e)},e.prototype.process=function(e,t,o,r){var n=this;if(r.language&&this.options.languageToPseudo!==r.language||!this.options.enabled)return e;var a,i,s,p=0,u=e.split("").map((function(e){return"}"===e?(p=0,e):"{"===e?(p++,e):2===p?e:-1!==n.options.repeatedLetters.indexOf(e)?n.options.letters[e].repeat(n.options.letterMultiplier):n.options.letters[e]||e})).join("");return a={shouldWrap:this.options.wrapped,string:u},i=a.shouldWrap,s=a.string,i?"["+s+"]":s},e}()}}]); +//# sourceMappingURL=360.js.map \ No newline at end of file diff --git a/public/app/plugins/datasource/azuremonitor/dist/360.js.map b/public/app/plugins/datasource/azuremonitor/dist/360.js.map new file mode 100644 index 0000000000000..c90e4c14b321e --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/dist/360.js.map @@ -0,0 +1 @@ +{"version":3,"file":"360.js","mappings":"6LAAO,IAAIA,EAAmB,CAC5BC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAGMC,EAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KCvDxEC,EAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,IAAIhD,EAAI,EAAGA,EAAIiD,UAAUC,OAAQlD,IAAK,CAAE,IAAImD,EAASF,UAAUjD,GAAI,IAAK,IAAIoD,KAAOD,EAAcL,OAAOO,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQJ,EAAOI,GAAOD,EAAOC,GAAU,CAAE,OAAOJ,CAAQ,EAM/P,IAAIQ,EAAS,WACX,SAASA,IACP,IAAIC,EAAOR,UAAUC,OAAS,QAAsBQ,IAAjBT,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC5EU,EAAwBF,EAAKG,iBAC7BA,OAA6CF,IAA1BC,EAAsC,KAAOA,EAChEE,EAAwBJ,EAAKK,iBAC7BA,OAA6CJ,IAA1BG,EAAsC,EAAIA,EAC7DE,EAAuBN,EAAKO,gBAC5BA,OAA2CN,IAAzBK,EAAqCnB,EAASmB,EAChEE,EAAwBR,EAAKS,oBAC7BA,OAAgDR,IAA1BO,EAAsC1E,EAAmB0E,EAC/EE,EAAeV,EAAKW,QACpBA,OAA2BV,IAAjBS,GAAqCA,EAC/CE,EAAeZ,EAAKa,QACpBA,OAA2BZ,IAAjBW,GAAoCA,GAlBtD,SAAyBE,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIC,UAAU,oCAAwC,CAoBpJC,CAAgBC,KAAMnB,GAEtBmB,KAAKC,KAAO,SACZD,KAAKE,KAAO,gBACZF,KAAKG,QAAU,CACblB,iBAAkBA,EAClBE,iBAAkBA,EAClBM,QAASA,EACTJ,gBAAiBA,EACjBe,QAASb,EACTI,QAASA,EAEb,CA6BA,OA3BAd,EAAOH,UAAU2B,gBAAkB,SAAyBF,GAC1DH,KAAKG,QAAUjC,EAAS,CAAC,EAAG8B,KAAKG,QAASA,EAC5C,EAEAtB,EAAOH,UAAU4B,QAAU,SAAiBC,EAAO9B,EAAK0B,EAASK,GAC/D,IAAIC,EAAQT,KAEZ,GAAIQ,EAAWE,UAAYV,KAAKG,QAAQlB,mBAAqBuB,EAAWE,WAAaV,KAAKG,QAAQR,QAChG,OAAOY,EAET,IDW8CzB,EAC5C6B,EACAC,ECbEC,EAAe,EACfC,EAAiBP,EAAMQ,MAAM,IAAIC,KAAI,SAAUC,GACjD,MAAe,MAAXA,GACFJ,EAAe,EACRI,GAEM,MAAXA,GACFJ,IACOI,GAEY,IAAjBJ,EAA2BI,GAE2B,IAAnDR,EAAMN,QAAQd,gBAAgB6B,QAAQD,GAAiBR,EAAMN,QAAQC,QAAQa,GAAQE,OAAOV,EAAMN,QAAQhB,kBAAoBsB,EAAMN,QAAQC,QAAQa,IAAWA,CACxK,IAAGG,KAAK,IACR,ODH8CtC,ECGzB,CAAE6B,WAAYX,KAAKG,QAAQV,QAASmB,OAAQE,GDF/DH,EAAa7B,EAAK6B,WAClBC,EAAS9B,EAAK8B,OACXD,EAAa,IAAMC,EAAS,IAAMA,CCCzC,EAEO/B,CACT,CA1Da,E","sources":["webpack://grafana-azure-monitor-datasource/../../../../../node_modules/i18next-pseudo/es/utils.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/i18next-pseudo/es/index.js"],"sourcesContent":["export var uglifiedAlphabet = {\n a: 'α',\n b: 'ḅ',\n c: 'ͼ',\n d: 'ḍ',\n e: 'ḛ',\n f: 'ϝ',\n g: 'ḡ',\n h: 'ḥ',\n i: 'ḭ',\n j: 'ĵ',\n k: 'ḳ',\n l: 'ḽ',\n m: 'ṃ',\n n: 'ṇ',\n o: 'ṓ',\n p: 'ṗ',\n q: 'ʠ',\n r: 'ṛ',\n s: 'ṡ',\n t: 'ţ',\n u: 'ṵ',\n v: 'ṽ',\n w: 'ẁ',\n x: 'ẋ',\n y: 'ẏ',\n z: 'ẓ',\n A: 'À',\n B: 'β',\n C: 'Ḉ',\n D: 'Ḍ',\n E: 'Ḛ',\n F: 'Ḟ',\n G: 'Ḡ',\n H: 'Ḥ',\n I: 'Ḭ',\n J: 'Ĵ',\n K: 'Ḱ',\n L: 'Ḻ',\n M: 'Ṁ',\n N: 'Ṅ',\n O: 'Ṏ',\n P: 'Ṕ',\n Q: 'Ǫ',\n R: 'Ṛ',\n S: 'Ṣ',\n T: 'Ṫ',\n U: 'Ṳ',\n V: 'Ṿ',\n W: 'Ŵ',\n X: 'Ẋ',\n Y: 'Ŷ',\n Z: 'Ż'\n};\n\nexport var vowels = ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y'];\n\nexport var stringWrapper = function stringWrapper(_ref) {\n var shouldWrap = _ref.shouldWrap,\n string = _ref.string;\n return shouldWrap ? '[' + string + ']' : string;\n};","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { uglifiedAlphabet, vowels, stringWrapper } from './utils';\n\nvar Pseudo = function () {\n function Pseudo() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$languageToPseudo = _ref.languageToPseudo,\n languageToPseudo = _ref$languageToPseudo === undefined ? 'en' : _ref$languageToPseudo,\n _ref$letterMultiplier = _ref.letterMultiplier,\n letterMultiplier = _ref$letterMultiplier === undefined ? 2 : _ref$letterMultiplier,\n _ref$repeatedLetters = _ref.repeatedLetters,\n repeatedLetters = _ref$repeatedLetters === undefined ? vowels : _ref$repeatedLetters,\n _ref$uglifedLetterObj = _ref.uglifedLetterObject,\n uglifedLetterObject = _ref$uglifedLetterObj === undefined ? uglifiedAlphabet : _ref$uglifedLetterObj,\n _ref$wrapped = _ref.wrapped,\n wrapped = _ref$wrapped === undefined ? false : _ref$wrapped,\n _ref$enabled = _ref.enabled,\n enabled = _ref$enabled === undefined ? true : _ref$enabled;\n\n _classCallCheck(this, Pseudo);\n\n this.name = 'pseudo';\n this.type = 'postProcessor';\n this.options = {\n languageToPseudo: languageToPseudo,\n letterMultiplier: letterMultiplier,\n wrapped: wrapped,\n repeatedLetters: repeatedLetters,\n letters: uglifedLetterObject,\n enabled: enabled\n };\n }\n\n Pseudo.prototype.configurePseudo = function configurePseudo(options) {\n this.options = _extends({}, this.options, options);\n };\n\n Pseudo.prototype.process = function process(value, key, options, translator) {\n var _this = this;\n\n if (translator.language && this.options.languageToPseudo !== translator.language || !this.options.enabled) {\n return value;\n }\n var bracketCount = 0;\n var processedValue = value.split('').map(function (letter) {\n if (letter === '}') {\n bracketCount = 0;\n return letter;\n }\n if (letter === '{') {\n bracketCount++;\n return letter;\n }\n if (bracketCount === 2) return letter;\n\n return _this.options.repeatedLetters.indexOf(letter) !== -1 ? _this.options.letters[letter].repeat(_this.options.letterMultiplier) : _this.options.letters[letter] || letter;\n }).join('');\n return stringWrapper({ shouldWrap: this.options.wrapped, string: processedValue });\n };\n\n return Pseudo;\n}();\n\nexport { Pseudo as default };"],"names":["uglifiedAlphabet","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","vowels","_extends","Object","assign","target","arguments","length","source","key","prototype","hasOwnProperty","call","Pseudo","_ref","undefined","_ref$languageToPseudo","languageToPseudo","_ref$letterMultiplier","letterMultiplier","_ref$repeatedLetters","repeatedLetters","_ref$uglifedLetterObj","uglifedLetterObject","_ref$wrapped","wrapped","_ref$enabled","enabled","instance","Constructor","TypeError","_classCallCheck","this","name","type","options","letters","configurePseudo","process","value","translator","_this","language","shouldWrap","string","bracketCount","processedValue","split","map","letter","indexOf","repeat","join"],"sourceRoot":""} \ No newline at end of file diff --git a/public/app/plugins/datasource/azuremonitor/dist/CHANGELOG.md b/public/app/plugins/datasource/azuremonitor/dist/CHANGELOG.md new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/public/app/plugins/datasource/azuremonitor/dist/LICENSE b/public/app/plugins/datasource/azuremonitor/dist/LICENSE new file mode 100644 index 0000000000000..be3f7b28e564e --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/dist/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/public/app/plugins/datasource/azuremonitor/dist/README.md b/public/app/plugins/datasource/azuremonitor/dist/README.md new file mode 100644 index 0000000000000..c5114949b0eb1 --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/dist/README.md @@ -0,0 +1,7 @@ +# Azure Monitor data source - native plugin + +Grafana ships with **built in** support for Azure Monitor. You just have to add it as a data source and you will be ready to build dashboards for your Azure Monitor metrics. + +Read more about it here: + +[https://grafana.com/docs/grafana/latest/datasources/azuremonitor/](https://grafana.com/docs/grafana/latest/datasources/azuremonitor/) diff --git a/public/app/plugins/datasource/azuremonitor/dist/dashboards/adx.json b/public/app/plugins/datasource/azuremonitor/dist/dashboards/adx.json new file mode 100644 index 0000000000000..0a579f29068d5 --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/dist/dashboards/adx.json @@ -0,0 +1,8274 @@ +{ + "__inputs": [], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.4.7" + }, + { + "type": "datasource", + "id": "grafana-azure-monitor-datasource", + "name": "Azure Monitor", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "The dashboard provides insights of Azure Data Explorer Cluster Resource overview, key mettrics, usage, tables, cache and ingestion.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": { + "uid": "$ds" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 6, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$ds" + }, + "refId": "A" + } + ], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "KeepAlive", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Keep Alive (Avg)", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 12, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CPU", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "CPU (Avg)", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 13, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Utilization (Avg) ", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 12, + "y": 1 + }, + "id": 14, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionLatencyInSeconds", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Latency (Avg) ", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 16, + "y": 1 + }, + "id": 15, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CacheUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Cache Utilization (Avg)", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 20, + "y": 1 + }, + "id": 16, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Status", + "value": "IngestionResultDetails" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionResult", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Succeeded Ingestions (#)", + "type": "stat" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "description": "The aggregated usage in the cluster, out of the total used CPU and memory. To see more details, go to the Usage tab.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureLogAnalytics": { + "dashboardTime": false, + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", + "resources": ["$ws"], + "resultFormat": "time_series" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Top resource consumers", + "type": "table" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "description": "Over a sliding timeline window. Not affected by the time range parameter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 3, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 2, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureLogAnalytics": { + "dashboardTime": false, + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User,\r\n ApplicationName,\r\n Principal,\r\n TotalCPU,\r\n MemoryPeak,\r\n CorrelationId,\r\n cluster_name;\r\nlet raw = dataset_commands_queries\r\n | where LastUpdatedOn > ago(7d)\r\n | where cluster_name == 'mitulktest'\r\n | where StartedOn > ago(365d)\r\n;\r\nraw\r\n| evaluate activity_engagement(User, StartedOn, 1d, 7d)\r\n| join kind = inner (\r\n raw\r\n | evaluate activity_engagement(User, StartedOn, 1d, 30d)\r\n )\r\n on StartedOn\r\n| project StartedOn, Daily=dcount_activities_inner, Weekly=dcount_activities_outer, Monthly = dcount_activities_outer1 \r\n| where StartedOn > ago(90d)\r\n| project Daily, StartedOn, Weekly, Monthly\r\n| sort by StartedOn asc\r\n", + "resources": ["$ws"], + "resultFormat": "time_series" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Unique user count", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": { + "uid": "$ds" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 19, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$ds" + }, + "refId": "A" + } + ], + "title": "Key Metrics", + "type": "row" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 16 + }, + "id": 20, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "KeepAlive", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Keep Alive", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 16 + }, + "id": 21, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CPU", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 16 + }, + "id": 22, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CacheUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Cache Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 16 + }, + "id": 23, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "InstanceCount", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Instance Count", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 26 + }, + "id": 24, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfConcurrentQueries", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Concurrent Queries", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 26 + }, + "id": 25, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Query Status", + "value": "QueryStatus" + } + ], + "metricDefinition": "$ns", + "metricName": "QueryDuration", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Query Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 26 + }, + "id": 26, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Command Type", + "value": "CommandType" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfThrottledCommands", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Throttled Commands", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 26 + }, + "id": 27, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfThrottledQueries", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Throttled Queries", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 36 + }, + "id": 28, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 36 + }, + "id": 29, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionLatencyInSeconds", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 36 + }, + "id": 30, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Status", + "value": "IngestionResultDetails" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionResult", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Result", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 36 + }, + "id": 31, + "options": { + "legend": { + "calcs": ["sum"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Total", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Database", + "value": "Database" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionVolumeInMB", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Ingestion Volume", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 46 + }, + "id": 32, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "StreamingIngestDataRate", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Streaming Ingest Data Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 46 + }, + "id": 33, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "StreamingIngestDuration", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Streaming Ingest Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 46 + }, + "id": 34, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "None", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "SteamingIngestRequestRate", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Streaming Ingest Request Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 46 + }, + "id": 35, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Result", + "value": "Result" + } + ], + "metricDefinition": "$ns", + "metricName": "StreamingIngestResults", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Streaming Ingest Result", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 36, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Total", "Average", "Minimum", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "EventsProcessed", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Events Processed", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 56 + }, + "id": 37, + "options": { + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "DiscoveryLatency", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Discovery Latency", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": { + "uid": "$ds" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 40, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$ds" + }, + "refId": "A" + } + ], + "title": "Usage", + "type": "row" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 14, + "x": 0, + "y": 66 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "dashboardTime": false, + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", + "resources": ["$ws"], + "resultFormat": "time_series" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "DiscoveryLatency", + "metricNamespace": "Microsoft.Kusto/clusters", + "resources": [ + { + "resourceGroup": "$rg", + "resourceName": "$resource" + } + ], + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "datasource": { + "uid": "$ds" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Top resource consumers (within the CPU and memory consumption of the cluster)", + "transparent": true, + "type": "table" + }, + { + "datasource": { + "type": "grafana-azure-monitor-datasource", + "uid": "$ds" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 10, + "x": 14, + "y": 66 + }, + "id": 44, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.7", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "dashboardTime": false, + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak)\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n | where CommandType != 'TableSetOrAppend'\r\n | summarize Count=count() by User, ApplicationName\r\n | project User, ApplicationName, Count\r\n | extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters\r\n User)\r\n | top 10 by Count;\r\n//| order by Count desc\r\n//