feat(grafana): plug jsonnet-based dashboards in provisioning

Add the gerrit dashboards as an example.

Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
raito 2024-08-24 11:19:33 +02:00
parent d1ffce9336
commit 024b431cbc
3 changed files with 39 additions and 8 deletions

View file

@ -1,4 +1,8 @@
{ stdenv, jsonnet, fetchFromGitHub, lib, ... }: { gerrit-dashboard, stdenv, symlinkJoin, jsonnet, fetchFromGitHub, lib, ... }:
let
inherit (lib) concatMapStringsSep;
datasource-id = "mimir";
in
rec { rec {
grafonnet = fetchFromGitHub { grafonnet = fetchFromGitHub {
owner = "grafana"; owner = "grafana";
@ -8,14 +12,32 @@ rec {
rev = "a1d61cce1da59c71409b99b5c7568511fec661ea"; rev = "a1d61cce1da59c71409b99b5c7568511fec661ea";
hash = "sha256-fs5JZJbcL6sQXBjYhp5eeRtjTFw0J1O/BcwBC8Vm9EM="; hash = "sha256-fs5JZJbcL6sQXBjYhp5eeRtjTFw0J1O/BcwBC8Vm9EM=";
}; };
buildJsonnetDashboards = dashboardSrc: target: stdenv.mkDerivation { buildJsonnetDashboards = dashboardSrc: targets: stdenv.mkDerivation {
name = "jsonnet-grafana-dashboard-${baseNameOf target}"; name = "jsonnet-grafana-dashboards";
src = dashboardSrc; src = dashboardSrc;
buildInputs = [ jsonnet ]; buildInputs = [ jsonnet ];
buildPhase = '' buildPhase = ''
runHook preBuild runHook preBuild
jsonnet -J ${grafonnet} --ext-code publish=false ${target} > $out mkdir -p $out
${concatMapStringsSep "\n" (target: "jsonnet -J ${grafonnet} --ext-str datasource=${datasource-id} --ext-code publish=true $src/${target} > $out/${baseNameOf target}.json") targets}
runHook postBuild runHook postBuild
''; '';
}; };
allDashboards = symlinkJoin {
name = "all-jsonnet-dashboards";
paths = [
(buildJsonnetDashboards gerrit-dashboard [
"dashboards/gerrit/caches/gerrit-caches.jsonnet"
"dashboards/gerrit/fetch-clone/gerrit-fetch-clone.jsonnet"
"dashboards/gerrit/fetch-clone/gerrit-phases.jsonnet"
"dashboards/gerrit/healthcheck/gerrit-healthcheck.jsonnet"
"dashboards/gerrit/latency/gerrit-push-latency.jsonnet"
"dashboards/gerrit/latency/gerrit-ui-actions-latency.jsonnet"
"dashboards/gerrit/overview/gerrit-overview.jsonnet"
"dashboards/gerrit/process/gerrit-process.jsonnet"
"dashboards/gerrit/queues/gerrit-queues.jsonnet"
])
];
};
} }

View file

@ -388,11 +388,11 @@
"gerrit-dashboard": { "gerrit-dashboard": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1724491526, "lastModified": 1724509518,
"narHash": "sha256-iBI8Rkcv3CYdZHz5hDI0104C+DgPZRh5K6Zcqz9iUWw=", "narHash": "sha256-fwYXZVddxfzrlDa3QnFCwHqrbEX+3PrWy0QOlbO+8jk=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "d6badc64723b888a4cfa0cf966aec8b91dcb8a2b", "rev": "e544abac81c581558d68abb2a8dd583049073939",
"revCount": 74, "revCount": 75,
"type": "git", "type": "git",
"url": "https://git.lix.systems/the-distro/gerrit-monitoring.git" "url": "https://git.lix.systems/the-distro/gerrit-monitoring.git"
}, },

View file

@ -1,11 +1,16 @@
{ {
config, config,
lib, lib,
pkgs,
inputs,
... ...
}: }:
let let
cfg = config.bagel.services.grafana; cfg = config.bagel.services.grafana;
inherit (lib) mkEnableOption mkIf; inherit (lib) mkEnableOption mkIf;
generatedJsonnetDashboards = (pkgs.callPackage ../../../dashboards {
inherit (inputs) gerrit-dashboard;
}).allDashboards;
in in
{ {
options.bagel.services.grafana.enable = mkEnableOption "Grafana frontend"; options.bagel.services.grafana.enable = mkEnableOption "Grafana frontend";
@ -84,6 +89,10 @@ in
name = "default"; name = "default";
options.path = ./dashboards; options.path = ./dashboards;
} }
{
name = "jsonnet";
options.path = generatedJsonnetDashboards;
}
]; ];
}; };