From d883b5c1df154d3c20e77ee63b0bc51b760af8cb Mon Sep 17 00:00:00 2001 From: dawn <90008@gaze.systems> Date: Mon, 19 Jan 2026 14:12:11 +0000 Subject: [PATCH] ohhh ahhh stuff idk --- flake.lock | 8 ++++---- _sources/generated.json | 64 ++++++++++++++++++++++++++++++++-------------------------------- _sources/generated.nix | 64 ++++++++++++++++++++++++++++++++-------------------------------- dns/dnsconfig.js | 2 +- secrets/roka.key.pub | 1 + secrets/secrets.nix | 5 ----- modules/network/tailscale.nix | 1 + pkgs-set/pkgs/helium.nix | 4 ++-- pkgs-set/pkgs/tangled-knot.nix | 8 +++----- pkgs-set/pkgs/tangled-spindle.nix | 8 +++----- users/root/default.nix | 1 + hosts/trimounts/modules/nginx.nix | 1 - hosts/trimounts/modules/pocket-id.disabled | 30 ++++++++++++++++++++++++++++++ hosts/trimounts/modules/pocket-id.nix | 30 ------------------------------ hosts/trimounts/modules/tailscale.nix | 4 ++-- hosts/trimounts/modules/trilium.disabled | 24 ++++++++++++++++++++++++ hosts/volsinii/modules/hardware-configuration.nix | 1 + hosts/volsinii/modules/tailscale.nix | 4 +++- hosts/trimounts/modules/perses.disabled/default.nix | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hosts/trimounts/modules/perses.nix/default.nix | 104 -------------------------------------------------------------------------------------------------------- hosts/trimounts/modules/perses.disabled/dashboards/.gitignore | 2 ++ hosts/trimounts/modules/perses.disabled/dashboards/go.mod | 28 ++++++++++++++++++++++++++++ hosts/trimounts/modules/perses.disabled/dashboards/go.sum | 45 +++++++++++++++++++++++++++++++++++++++++++++ hosts/trimounts/modules/perses.disabled/dashboards/wolumonde.go | 334 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hosts/trimounts/modules/perses.disabled/provision/1-private-infra.yaml | 3 +++ hosts/trimounts/modules/perses.disabled/provision/2-admin-role.yaml | 9 +++++++++ hosts/trimounts/modules/perses.disabled/provision/3-admin-bind-role.yaml | 8 ++++++++ hosts/trimounts/modules/perses.disabled/provision/4-victoria.yaml | 12 ++++++++++++ hosts/trimounts/modules/perses.disabled/provision/6-guest-role.yaml | 12 ++++++++++++ hosts/trimounts/modules/perses.disabled/provision/7-guest-role-bind.yaml | 8 ++++++++ hosts/trimounts/modules/perses.disabled/provision/90-wolumonde.yaml | 454 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hosts/trimounts/modules/perses.nix/dashboards/.gitignore | 2 -- hosts/trimounts/modules/perses.nix/dashboards/go.mod | 28 ---------------------------- hosts/trimounts/modules/perses.nix/dashboards/go.sum | 45 --------------------------------------------- hosts/trimounts/modules/perses.nix/dashboards/wolumonde.go | 334 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hosts/trimounts/modules/perses.nix/provision/1-private-infra.yaml | 3 --- hosts/trimounts/modules/perses.nix/provision/2-admin-role.yaml | 9 --------- hosts/trimounts/modules/perses.nix/provision/3-admin-bind-role.yaml | 8 -------- hosts/trimounts/modules/perses.nix/provision/4-victoria.yaml | 12 ------------ hosts/trimounts/modules/perses.nix/provision/6-guest-role.yaml | 12 ------------ hosts/trimounts/modules/perses.nix/provision/7-guest-role-bind.yaml | 8 -------- hosts/trimounts/modules/perses.nix/provision/90-wolumonde.yaml | 454 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 42 file(s) changed, 1159 insertion(s)(+), 1139 deletion(s)(-) diff --git a/flake.lock b/flake.lock --- a/flake.lock +++ b/flake.lock @@ -121,11 +121,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1766651565, - "narHash": "sha256-gtanTxYMENOVHWdS4QgxxKGPaSqvcNJVw0KBfaF5/Bo=", - "rev": "3e2499d5539c16d0d173ba53552a4ff8547f4539", + "lastModified": 1768127708, + "narHash": "sha256-caCMFMAeeiexMCYzSb8okUJWy7uAoxAczPjrQkaFCqo=", + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", "type": "tarball", - "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre916364.3e2499d5539c/nixexprs.tar.xz?lastModified=1766651565&rev=3e2499d5539c16d0d173ba53552a4ff8547f4539" + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre925861.ffbc9f8cbaac/nixexprs.tar.xz?lastModified=1768127708&rev=ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38" }, "original": { "type": "tarball", diff --git a/_sources/generated.json b/_sources/generated.json --- a/_sources/generated.json +++ b/_sources/generated.json @@ -22,7 +22,7 @@ }, "blog": { "cargoLocks": null, - "date": "2026-01-13", + "date": "2026-01-15", "extract": null, "name": "blog", "passthru": null, @@ -32,13 +32,13 @@ "fetchSubmodules": false, "leaveDotGit": false, "name": null, - "rev": "61331b565e674acad615c98f11d1adca5e367b54", - "sha256": "sha256-CllCqGh0dSdYCIKhLL4+qCMFbHVUgzL9mkPFL0MOBcY=", + "rev": "9d55af51b568597aecfd03bfb85dfe6b219dd1d7", + "sha256": "sha256-ao/UxHSC6gUeU8mA+hFvBsc/1/iIXKN297qZ+578J/0=", "sparseCheckout": [], "type": "git", "url": "https://tangled.org/@ptr.pet/endpoint" }, - "version": "61331b565e674acad615c98f11d1adca5e367b54" + "version": "9d55af51b568597aecfd03bfb85dfe6b219dd1d7" }, "clickee": { "cargoLocks": null, @@ -144,7 +144,7 @@ }, "gomod2nix": { "cargoLocks": null, - "date": "2025-11-24", + "date": "2025-12-29", "extract": null, "name": "gomod2nix", "passthru": null, @@ -156,16 +156,16 @@ "name": null, "owner": "nix-community", "repo": "gomod2nix", - "rev": "02e63a239d6eabd595db56852535992c898eba72", - "sha256": "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ=", + "rev": "49662a44272806ff785df2990a420edaaca15db4", + "sha256": "sha256-NodN+lhWTD59b44Q2bPjE1edINfjfRkQYdZsrxifCeU=", "sparseCheckout": [], "type": "github" }, - "version": "02e63a239d6eabd595db56852535992c898eba72" + "version": "49662a44272806ff785df2990a420edaaca15db4" }, "home": { "cargoLocks": null, - "date": "2025-12-27", + "date": "2026-01-13", "extract": null, "name": "home", "passthru": null, @@ -177,12 +177,12 @@ "name": null, "owner": "nix-community", "repo": "home-manager", - "rev": "4067ca1ffb6425b8597eafb63a84b171e0192d2b", - "sha256": "sha256-Ok0jocJ82JriaMDtYEytR8oWcxADlX5WcWXULrN4czA=", + "rev": "c5d67517bbcaf37e15c416219c965cc707a0ca24", + "sha256": "sha256-dlWl/z/rdZmPGVexkYL1VLKBMU1e5Y1DZmQfiRf60cQ=", "sparseCheckout": [], "type": "github" }, - "version": "4067ca1ffb6425b8597eafb63a84b171e0192d2b" + "version": "c5d67517bbcaf37e15c416219c965cc707a0ca24" }, "limbusart": { "cargoLocks": null, @@ -247,7 +247,7 @@ }, "nixos-hardware": { "cargoLocks": null, - "date": "2025-12-24", + "date": "2025-12-31", "extract": null, "name": "nixos-hardware", "passthru": null, @@ -259,16 +259,16 @@ "name": null, "owner": "NixOS", "repo": "nixos-hardware", - "rev": "c5db9569ac9cc70929c268ac461f4003e3e5ca80", - "sha256": "sha256-UXVtN77D7pzKmzOotFTStgZBqpOcf8cO95FcupWp4Zo=", + "rev": "40b1a28dce561bea34858287fbb23052c3ee63fe", + "sha256": "sha256-ljDBUDpD1Cg5n3mJI81Hz5qeZAwCGxon4kQW3Ho3+6Q=", "sparseCheckout": [], "type": "github" }, - "version": "c5db9569ac9cc70929c268ac461f4003e3e5ca80" + "version": "40b1a28dce561bea34858287fbb23052c3ee63fe" }, "nixpkgs-xr": { "cargoLocks": null, - "date": "2025-12-24", + "date": "2026-01-09", "extract": null, "name": "nixpkgs-xr", "passthru": null, @@ -280,12 +280,12 @@ "name": null, "owner": "nix-community", "repo": "nixpkgs-xr", - "rev": "9e8efcd2c4ea906772dea99204a9819284a29b81", - "sha256": "sha256-biwvZsCGC4vCXS6rzs3tUkELqqEXPko0E3R9IhYKavE=", + "rev": "df098c5ff75e641d010c472d8321391db4e90eb9", + "sha256": "sha256-phU4/JrtliPo7VznNgvVNVYNYzNodvdCfq5kBYQMAV4=", "sparseCheckout": [], "type": "github" }, - "version": "9e8efcd2c4ea906772dea99204a9819284a29b81" + "version": "df098c5ff75e641d010c472d8321391db4e90eb9" }, "nsid-tracker": { "cargoLocks": null, @@ -329,7 +329,7 @@ }, "stylix": { "cargoLocks": null, - "date": "2025-12-24", + "date": "2026-01-12", "extract": null, "name": "stylix", "passthru": null, @@ -341,16 +341,16 @@ "name": null, "owner": "nix-community", "repo": "stylix", - "rev": "551df12ee3ebac52c5712058bd97fd9faa4c3430", - "sha256": "sha256-J2DDdRqSU4w9NNgkMfmMeaLIof5PXtS9RG7y6ckDvQE=", + "rev": "a62840a9e95801969a03b91e49c1607b5322224c", + "sha256": "sha256-li0Z2Tr5qpH+wyuCMpzXSsHYRleaTukcdLTpAsGcVzY=", "sparseCheckout": [], "type": "github" }, - "version": "551df12ee3ebac52c5712058bd97fd9faa4c3430" + "version": "a62840a9e95801969a03b91e49c1607b5322224c" }, "tangled": { "cargoLocks": null, - "date": "2026-01-11", + "date": "2026-01-13", "extract": null, "name": "tangled", "passthru": null, @@ -360,13 +360,13 @@ "fetchSubmodules": false, "leaveDotGit": false, "name": null, - "rev": "1cb2fb5cdd0ddfb30575af85d2d3fcf337ac4c4b", - "sha256": "sha256-JZgqPGYaNxFcj4gl4U4eXctDtPv6YHyu3KuHtMNEyZk=", + "rev": "3638909db6c988eef717981ee3f4950937e92836", + "sha256": "sha256-T87j98h4T2ux5LYc/R1KjisUfv1qck65MknhGJVMEA4=", "sparseCheckout": [], "type": "git", "url": "https://tangled.org/tangled.org/core" }, - "version": "1cb2fb5cdd0ddfb30575af85d2d3fcf337ac4c4b" + "version": "3638909db6c988eef717981ee3f4950937e92836" }, "tangled-sqlite-lib": { "cargoLocks": null, @@ -404,7 +404,7 @@ }, "zen-browser": { "cargoLocks": null, - "date": "2025-12-25", + "date": "2026-01-13", "extract": null, "name": "zen-browser", "passthru": null, @@ -416,11 +416,11 @@ "name": null, "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "98d8f48ba80a4b6e3b56addad850d57132301075", - "sha256": "sha256-mGZBEN67mxeOsBhplBRLm6L+y++8jU46EEUYgemG1aQ=", + "rev": "2357b84ef617772c012397a7e8b4542bd5e4bab8", + "sha256": "sha256-ASI9j+Fgj7TzB4mj+IBIBrV5mH9P/D/vjKLyVDZWZOw=", "sparseCheckout": [], "type": "github" }, - "version": "98d8f48ba80a4b6e3b56addad850d57132301075" + "version": "2357b84ef617772c012397a7e8b4542bd5e4bab8" } } \ No newline at end of file diff --git a/_sources/generated.nix b/_sources/generated.nix --- a/_sources/generated.nix +++ b/_sources/generated.nix @@ -15,17 +15,17 @@ }; blog = { pname = "blog"; - version = "61331b565e674acad615c98f11d1adca5e367b54"; + version = "9d55af51b568597aecfd03bfb85dfe6b219dd1d7"; src = fetchgit { url = "https://tangled.org/@ptr.pet/endpoint"; - rev = "61331b565e674acad615c98f11d1adca5e367b54"; + rev = "9d55af51b568597aecfd03bfb85dfe6b219dd1d7"; fetchSubmodules = false; deepClone = false; leaveDotGit = false; sparseCheckout = [ ]; - sha256 = "sha256-CllCqGh0dSdYCIKhLL4+qCMFbHVUgzL9mkPFL0MOBcY="; + sha256 = "sha256-ao/UxHSC6gUeU8mA+hFvBsc/1/iIXKN297qZ+578J/0="; }; - date = "2026-01-13"; + date = "2026-01-15"; }; clickee = { pname = "clickee"; @@ -95,27 +95,27 @@ }; gomod2nix = { pname = "gomod2nix"; - version = "02e63a239d6eabd595db56852535992c898eba72"; + version = "49662a44272806ff785df2990a420edaaca15db4"; src = fetchFromGitHub { owner = "nix-community"; repo = "gomod2nix"; - rev = "02e63a239d6eabd595db56852535992c898eba72"; + rev = "49662a44272806ff785df2990a420edaaca15db4"; fetchSubmodules = false; - sha256 = "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ="; + sha256 = "sha256-NodN+lhWTD59b44Q2bPjE1edINfjfRkQYdZsrxifCeU="; }; - date = "2025-11-24"; + date = "2025-12-29"; }; home = { pname = "home"; - version = "4067ca1ffb6425b8597eafb63a84b171e0192d2b"; + version = "c5d67517bbcaf37e15c416219c965cc707a0ca24"; src = fetchFromGitHub { owner = "nix-community"; repo = "home-manager"; - rev = "4067ca1ffb6425b8597eafb63a84b171e0192d2b"; + rev = "c5d67517bbcaf37e15c416219c965cc707a0ca24"; fetchSubmodules = false; - sha256 = "sha256-Ok0jocJ82JriaMDtYEytR8oWcxADlX5WcWXULrN4czA="; + sha256 = "sha256-dlWl/z/rdZmPGVexkYL1VLKBMU1e5Y1DZmQfiRf60cQ="; }; - date = "2025-12-27"; + date = "2026-01-13"; }; limbusart = { pname = "limbusart"; @@ -159,27 +159,27 @@ }; nixos-hardware = { pname = "nixos-hardware"; - version = "c5db9569ac9cc70929c268ac461f4003e3e5ca80"; + version = "40b1a28dce561bea34858287fbb23052c3ee63fe"; src = fetchFromGitHub { owner = "NixOS"; repo = "nixos-hardware"; - rev = "c5db9569ac9cc70929c268ac461f4003e3e5ca80"; + rev = "40b1a28dce561bea34858287fbb23052c3ee63fe"; fetchSubmodules = false; - sha256 = "sha256-UXVtN77D7pzKmzOotFTStgZBqpOcf8cO95FcupWp4Zo="; + sha256 = "sha256-ljDBUDpD1Cg5n3mJI81Hz5qeZAwCGxon4kQW3Ho3+6Q="; }; - date = "2025-12-24"; + date = "2025-12-31"; }; nixpkgs-xr = { pname = "nixpkgs-xr"; - version = "9e8efcd2c4ea906772dea99204a9819284a29b81"; + version = "df098c5ff75e641d010c472d8321391db4e90eb9"; src = fetchFromGitHub { owner = "nix-community"; repo = "nixpkgs-xr"; - rev = "9e8efcd2c4ea906772dea99204a9819284a29b81"; + rev = "df098c5ff75e641d010c472d8321391db4e90eb9"; fetchSubmodules = false; - sha256 = "sha256-biwvZsCGC4vCXS6rzs3tUkELqqEXPko0E3R9IhYKavE="; + sha256 = "sha256-phU4/JrtliPo7VznNgvVNVYNYzNodvdCfq5kBYQMAV4="; }; - date = "2025-12-24"; + date = "2026-01-09"; }; nsid-tracker = { pname = "nsid-tracker"; @@ -211,29 +211,29 @@ }; stylix = { pname = "stylix"; - version = "551df12ee3ebac52c5712058bd97fd9faa4c3430"; + version = "a62840a9e95801969a03b91e49c1607b5322224c"; src = fetchFromGitHub { owner = "nix-community"; repo = "stylix"; - rev = "551df12ee3ebac52c5712058bd97fd9faa4c3430"; + rev = "a62840a9e95801969a03b91e49c1607b5322224c"; fetchSubmodules = false; - sha256 = "sha256-J2DDdRqSU4w9NNgkMfmMeaLIof5PXtS9RG7y6ckDvQE="; + sha256 = "sha256-li0Z2Tr5qpH+wyuCMpzXSsHYRleaTukcdLTpAsGcVzY="; }; - date = "2025-12-24"; + date = "2026-01-12"; }; tangled = { pname = "tangled"; - version = "1cb2fb5cdd0ddfb30575af85d2d3fcf337ac4c4b"; + version = "3638909db6c988eef717981ee3f4950937e92836"; src = fetchgit { url = "https://tangled.org/tangled.org/core"; - rev = "1cb2fb5cdd0ddfb30575af85d2d3fcf337ac4c4b"; + rev = "3638909db6c988eef717981ee3f4950937e92836"; fetchSubmodules = false; deepClone = false; leaveDotGit = false; sparseCheckout = [ ]; - sha256 = "sha256-JZgqPGYaNxFcj4gl4U4eXctDtPv6YHyu3KuHtMNEyZk="; + sha256 = "sha256-T87j98h4T2ux5LYc/R1KjisUfv1qck65MknhGJVMEA4="; }; - date = "2026-01-11"; + date = "2026-01-13"; }; tangled-sqlite-lib = { pname = "tangled-sqlite-lib"; @@ -259,14 +259,14 @@ }; zen-browser = { pname = "zen-browser"; - version = "98d8f48ba80a4b6e3b56addad850d57132301075"; + version = "2357b84ef617772c012397a7e8b4542bd5e4bab8"; src = fetchFromGitHub { owner = "0xc000022070"; repo = "zen-browser-flake"; - rev = "98d8f48ba80a4b6e3b56addad850d57132301075"; + rev = "2357b84ef617772c012397a7e8b4542bd5e4bab8"; fetchSubmodules = false; - sha256 = "sha256-mGZBEN67mxeOsBhplBRLm6L+y++8jU46EEUYgemG1aQ="; + sha256 = "sha256-ASI9j+Fgj7TzB4mj+IBIBrV5mH9P/D/vjKLyVDZWZOw="; }; - date = "2025-12-25"; + date = "2026-01-13"; }; } diff --git a/dns/dnsconfig.js b/dns/dnsconfig.js --- a/dns/dnsconfig.js +++ b/dns/dnsconfig.js @@ -124,7 +124,7 @@ "ptr.pet", REG_NONE, DnsProvider(DSP_PRIMARY), - TRIMOUNTS(["@", "tunes", "x"], CF_PROXY_OFF), + TRIMOUNTS(["@", "tunes", "corpus", "x"], CF_PROXY_OFF), DZWONEK(["nucleus", "trill", "dysnomia"], CF_PROXY_OFF), TXT("_kicya", "3b11cb74243eea1fc84e62ffefd7e246279c2f203e1cae42e19d0454dc8d2172"), // atproto diff --git a/secrets/roka.key.pub b/secrets/roka.key.pub new file mode 100644 --- /dev/null +++ b/secrets/roka.key.pub @@ -0,0 +1,1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTE6VnzgLG+PbNMAcfmxYNJpvaevXKJg7mVY0bUkF+8 \ No newline at end of file diff --git a/secrets/secrets.nix b/secrets/secrets.nix --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -30,11 +30,6 @@ dzwonek trimounts ]; - "bunnyApiKey.age".publicKeys = [ - yusdacra - dzwonek - trimounts - ]; "atfileCfg.age".publicKeys = [yusdacra]; "ziplineCfg.age".publicKeys = [yusdacra trimounts]; "callieMusic.age".publicKeys = [yusdacra trimounts]; diff --git a/modules/network/tailscale.nix b/modules/network/tailscale.nix --- a/modules/network/tailscale.nix +++ b/modules/network/tailscale.nix @@ -6,6 +6,7 @@ # extraUpFlags = [ "--ssh" ]; extraDaemonFlags = [ "--no-logs-no-support" ]; openFirewall = true; + useRoutingFeatures = "client"; }; networking.interfaces.tailscale0.useDHCP = lib.mkForce false; diff --git a/pkgs-set/pkgs/helium.nix b/pkgs-set/pkgs/helium.nix --- a/pkgs-set/pkgs/helium.nix +++ b/pkgs-set/pkgs/helium.nix @@ -5,7 +5,7 @@ }: pkgs.appimageTools.wrapType2 rec { pname = "helium"; - version = "0.7.10.1"; + version = "0.8.1.1"; src = let platformMap = { @@ -16,7 +16,7 @@ platform = platformMap.${pkgs.system}; hashes = { - "x86_64-linux" = "sha256-11xSlHIqmyyVwjjwt5FmLhp72P3m07PppOo7a9DbTcE="; + "x86_64-linux" = "sha256-n1wn80h9O7GpZz4AygNSKMcilX8lr6fJkiQBBPPQXok="; "aarch64-linux" = "sha256-B63tvOtSRlMRJozvzC7lqG2LM0ZgLIq2G/AHABl+Qqg="; }; diff --git a/pkgs-set/pkgs/tangled-knot.nix b/pkgs-set/pkgs/tangled-knot.nix --- a/pkgs-set/pkgs/tangled-knot.nix +++ b/pkgs-set/pkgs/tangled-knot.nix @@ -7,13 +7,11 @@ }: let unwrapped = - (callPackage "${inputs.tangled}/nix/pkgs/knot-unwrapped.nix" { + callPackage "${inputs.tangled}/nix/pkgs/knot-unwrapped.nix" { modules = tangled-modules; sqlite-lib = tangled-sqlite-lib; - }).overrideAttrs - (_: { - src = inputs.tangled; - }); + src = inputs.tangled; + }; in callPackage "${inputs.tangled}/nix/pkgs/knot.nix" { knot-unwrapped = unwrapped; diff --git a/pkgs-set/pkgs/tangled-spindle.nix b/pkgs-set/pkgs/tangled-spindle.nix --- a/pkgs-set/pkgs/tangled-spindle.nix +++ b/pkgs-set/pkgs/tangled-spindle.nix @@ -5,10 +5,8 @@ tangled-sqlite-lib, ... }: -(callPackage "${inputs.tangled}/nix/pkgs/spindle.nix" { +callPackage "${inputs.tangled}/nix/pkgs/spindle.nix" { modules = tangled-modules; sqlite-lib = tangled-sqlite-lib; -}).overrideAttrs - (_: { - src = inputs.tangled; - }) + src = inputs.tangled; +} \ No newline at end of file diff --git a/users/root/default.nix b/users/root/default.nix --- a/users/root/default.nix +++ b/users/root/default.nix @@ -5,6 +5,7 @@ initialHashedPassword = "$6$XLWo1sPpgp63Zm$XHBbULH9q1gb/.yalPPU/I7EgTcW80bM.moCjIe/qGyOwE47VcXNVbTHloBZdIWQq0MfIG0IxInAu59.oJyos/"; openssh.authorizedKeys.keys = [ (builtins.readFile "${inputs.self}/secrets/yusdacra.key.pub") + (builtins.readFile "${inputs.self}/secrets/roka.key.pub") ]; }; diff --git a/hosts/trimounts/modules/nginx.nix b/hosts/trimounts/modules/nginx.nix --- a/hosts/trimounts/modules/nginx.nix +++ b/hosts/trimounts/modules/nginx.nix @@ -38,7 +38,6 @@ users.users.nginx.extraGroups = [ "acme" ]; - age.secrets.bunnyApiKey.file = ../../../secrets/bunnyApiKey.age; security.acme = { acceptTerms = true; defaults = { diff --git a/hosts/trimounts/modules/pocket-id.disabled b/hosts/trimounts/modules/pocket-id.disabled new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/pocket-id.disabled @@ -0,0 +1,30 @@ +{ config, ... }: +let + domain = "id.gaze.systems"; +in +{ + services.pocket-id = { + enable = true; + settings = { + APP_URL = "https://${domain}"; + TRUST_PROXY = true; + PORT = 6823; + ANALYTICS_DISABLED = true; + }; + }; + + security.acme.certs."gaze.systems".extraDomainNames = [ domain ]; + + services.nginx.virtualHosts.${domain} = { + useACMEHost = "gaze.systems"; + forceSSL = true; + quic = true; + kTLS = true; + locations."/".proxyPass = "http://localhost:${toString config.services.pocket-id.settings.PORT}"; + locations."/".extraConfig = '' + proxy_busy_buffers_size 512k; + proxy_buffers 4 512k; + proxy_buffer_size 256k; + ''; + }; +} diff --git a/hosts/trimounts/modules/pocket-id.nix b/hosts/trimounts/modules/pocket-id.nix deleted file mode 100644 --- a/hosts/trimounts/modules/pocket-id.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ config, ... }: -let - domain = "id.gaze.systems"; -in -{ - services.pocket-id = { - enable = true; - settings = { - APP_URL = "https://${domain}"; - TRUST_PROXY = true; - PORT = 6823; - ANALYTICS_DISABLED = true; - }; - }; - - security.acme.certs."gaze.systems".extraDomainNames = [ domain ]; - - services.nginx.virtualHosts.${domain} = { - useACMEHost = "gaze.systems"; - forceSSL = true; - quic = true; - kTLS = true; - locations."/".proxyPass = "http://localhost:${toString config.services.pocket-id.settings.PORT}"; - locations."/".extraConfig = '' - proxy_busy_buffers_size 512k; - proxy_buffers 4 512k; - proxy_buffer_size 256k; - ''; - }; -} diff --git a/hosts/trimounts/modules/tailscale.nix b/hosts/trimounts/modules/tailscale.nix --- a/hosts/trimounts/modules/tailscale.nix +++ b/hosts/trimounts/modules/tailscale.nix @@ -1,9 +1,9 @@ -{ ... }: +{ lib, ... }: { imports = [ ../../../modules/network/tailscale.nix ]; services.tailscale = { extraSetFlags = [ "--advertise-exit-node" ]; - useRoutingFeatures = "both"; + useRoutingFeatures = lib.mkForce "both"; }; } diff --git a/hosts/trimounts/modules/trilium.disabled b/hosts/trimounts/modules/trilium.disabled new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/trilium.disabled @@ -0,0 +1,24 @@ +{config, ...}: +let + rootDomain = "ptr.pet"; + domain = "corpus.${rootDomain}"; + cfg = config.services.trilium-server; +in { + services.trilium-server = { + enable = true; + instanceName = "corpus"; + port = 7788; + }; + + security.acme.certs.${rootDomain}.extraDomainNames = [domain]; + services.nginx.virtualHosts.${domain} = { + useACMEHost = "ptr.pet"; + forceSSL = true; + quic = true; + kTLS = true; + locations."/" = { + proxyPass = "http://${cfg.host}:${toString cfg.port}"; + proxyWebsockets = true; + }; + }; +} diff --git a/hosts/volsinii/modules/hardware-configuration.nix b/hosts/volsinii/modules/hardware-configuration.nix --- a/hosts/volsinii/modules/hardware-configuration.nix +++ b/hosts/volsinii/modules/hardware-configuration.nix @@ -32,6 +32,7 @@ address = [ "199.71.188.53/29" ]; gateway = [ "199.71.188.49" ]; }; + networking.interfaces."enX0".mtu = 1370; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; } diff --git a/hosts/volsinii/modules/tailscale.nix b/hosts/volsinii/modules/tailscale.nix --- a/hosts/volsinii/modules/tailscale.nix +++ b/hosts/volsinii/modules/tailscale.nix @@ -1,6 +1,8 @@ -{ config, ... }: +{ lib, ... }: { imports = [ ../../../modules/network/tailscale.nix ]; + + services.tailscale.useRoutingFeatures = lib.mkForce "server"; # age.secrets.tailscaleAuthKey.file = ../../../secrets/tailscaleAuthKey.age; # services.tailscale.authKeyFile = config.age.secrets.tailscaleAuthKey.path; diff --git a/hosts/trimounts/modules/perses.disabled/default.nix b/hosts/trimounts/modules/perses.disabled/default.nix new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/default.nix @@ -0,0 +1,104 @@ +{ + pkgs, + config, + ... +}: +let + domain = "dash.gaze.systems"; + port = 7412; + user = "perses"; + + provisionFolder = "provisioning"; + provisioningFolder = "${config.users.users.${user}.home}/${provisionFolder}"; + + persesConfig = { + database.file = { + folder = config.users.users.${user}.home; + extension = "json"; + }; + provisioning.folders = [ provisioningFolder ]; + security = { + enable_auth = true; + authentication = { + providers = { + enable_native = false; + oidc = [ + { + slug_id = "pocketid"; + name = "Pocket ID"; + client_id = "aa583db6-e03c-4490-853a-7f2b3e089fbe"; + issuer = config.services.pocket-id.settings.APP_URL; + scopes = [ "openid profile email" ]; + } + ]; + }; + disable_sign_up = false; + }; + cookie = { + same_site = "strict"; + secure = true; + }; + }; + }; + persesConfigYaml = pkgs.writers.writeYAML "config.yaml" persesConfig; + + secrets = config.age.secrets; +in +{ + environment.systemPackages = [ pkgs.perses ]; + + users.users.${user} = { + isNormalUser = true; + group = user; + home = "/var/lib/${user}"; + createHome = true; + uid = 1001; + }; + users.groups.${user} = { + gid = 976; + }; + + age.secrets.persesSecret = { + file = ../../../../secrets/persesSecret.age; + owner = user; + group = user; + }; + + systemd.services.perses = { + description = "perses"; + after = [ + "network.target" + "pocket-id.service" + ]; + requires = [ "pocket-id.service" ]; + serviceConfig = { + ExecStart = "${pkgs.perses}/bin/perses --config=${persesConfigYaml} --web.listen-address=:${toString port} --log.level=info"; + EnvironmentFile = secrets.persesSecret.path; + WorkingDirectory = config.users.users.${user}.home; + }; + }; + systemd.services.perses.preStart = '' + rm -rf ${provisioningFolder} && mkdir -p ${provisioningFolder} + cp -f ${./provision}/* ${provisioningFolder} + ''; + + security.acme.certs."gaze.systems".extraDomainNames = [ domain ]; + services.nginx.virtualHosts.${domain} = { + useACMEHost = "gaze.systems"; # TODO: write a module to define vhosts for subdomains + quic = true; + kTLS = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + # scrape perses metrics + services.victoriametrics.prometheusConfig.scrape_configs = [ + { + job_name = "perses"; + metrics_path = "/metrics"; + static_configs = [ { targets = [ "localhost:${toString port}" ]; } ]; + } + ]; +} diff --git a/hosts/trimounts/modules/perses.nix/default.nix b/hosts/trimounts/modules/perses.nix/default.nix deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/default.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ - pkgs, - config, - ... -}: -let - domain = "dash.gaze.systems"; - port = 7412; - user = "perses"; - - provisionFolder = "provisioning"; - provisioningFolder = "${config.users.users.${user}.home}/${provisionFolder}"; - - persesConfig = { - database.file = { - folder = config.users.users.${user}.home; - extension = "json"; - }; - provisioning.folders = [ provisioningFolder ]; - security = { - enable_auth = true; - authentication = { - providers = { - enable_native = false; - oidc = [ - { - slug_id = "pocketid"; - name = "Pocket ID"; - client_id = "aa583db6-e03c-4490-853a-7f2b3e089fbe"; - issuer = config.services.pocket-id.settings.APP_URL; - scopes = [ "openid profile email" ]; - } - ]; - }; - disable_sign_up = false; - }; - cookie = { - same_site = "strict"; - secure = true; - }; - }; - }; - persesConfigYaml = pkgs.writers.writeYAML "config.yaml" persesConfig; - - secrets = config.age.secrets; -in -{ - environment.systemPackages = [ pkgs.perses ]; - - users.users.${user} = { - isNormalUser = true; - group = user; - home = "/var/lib/${user}"; - createHome = true; - uid = 1001; - }; - users.groups.${user} = { - gid = 976; - }; - - age.secrets.persesSecret = { - file = ../../../../secrets/persesSecret.age; - owner = user; - group = user; - }; - - systemd.services.perses = { - description = "perses"; - after = [ - "network.target" - "pocket-id.service" - ]; - requires = [ "pocket-id.service" ]; - serviceConfig = { - ExecStart = "${pkgs.perses}/bin/perses --config=${persesConfigYaml} --web.listen-address=:${toString port} --log.level=info"; - EnvironmentFile = secrets.persesSecret.path; - WorkingDirectory = config.users.users.${user}.home; - }; - }; - systemd.services.perses.preStart = '' - rm -rf ${provisioningFolder} && mkdir -p ${provisioningFolder} - cp -f ${./provision}/* ${provisioningFolder} - ''; - - security.acme.certs."gaze.systems".extraDomainNames = [ domain ]; - services.nginx.virtualHosts.${domain} = { - useACMEHost = "gaze.systems"; # TODO: write a module to define vhosts for subdomains - quic = true; - kTLS = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; - }; - }; - - # scrape perses metrics - services.victoriametrics.prometheusConfig.scrape_configs = [ - { - job_name = "perses"; - metrics_path = "/metrics"; - static_configs = [ { targets = [ "localhost:${toString port}" ]; } ]; - } - ]; -} diff --git a/hosts/trimounts/modules/perses.disabled/dashboards/.gitignore b/hosts/trimounts/modules/perses.disabled/dashboards/.gitignore new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/dashboards/.gitignore @@ -0,0 +1,2 @@ +# folder used to store the results of the `percli dac build` command +built diff --git a/hosts/trimounts/modules/perses.disabled/dashboards/go.mod b/hosts/trimounts/modules/perses.disabled/dashboards/go.mod new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/dashboards/go.mod @@ -0,0 +1,28 @@ +module dash + +go 1.24.2 + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/muhlemmer/gu v0.3.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/perses/perses v0.50.3 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/zitadel/oidc/v3 v3.36.1 // indirect + github.com/zitadel/schema v1.3.0 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.28.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/hosts/trimounts/modules/perses.disabled/dashboards/go.sum b/hosts/trimounts/modules/perses.disabled/dashboards/go.sum new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/dashboards/go.sum @@ -0,0 +1,45 @@ +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/muhlemmer/gu v0.3.1 h1:7EAqmFrW7n3hETvuAdmFmn4hS8W+z3LgKtrnow+YzNM= +github.com/muhlemmer/gu v0.3.1/go.mod h1:YHtHR+gxM+bKEIIs7Hmi9sPT3ZDUvTN/i88wQpZkrdM= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/perses/perses v0.50.3 h1:BHlU9qkCFCUSP4HP5p9GwophWcxm5Vnu6Fsrx8Fb/+w= +github.com/perses/perses v0.50.3/go.mod h1:oqfHLOrXERvEqECShqXPjHXqVukQxcoaaTM6ySRF7hU= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/zitadel/oidc/v3 v3.36.1 h1:1AT1NqKKEqAwx4GmKJZ9fYkWH2WIn/VKMfQ46nBtRf0= +github.com/zitadel/oidc/v3 v3.36.1/go.mod h1:dApGZLvWZTHRuxmcbQlW5d2XVjVYR3vGOdq536igmTs= +github.com/zitadel/schema v1.3.0 h1:kQ9W9tvIwZICCKWcMvCEweXET1OcOyGEuFbHs4o5kg0= +github.com/zitadel/schema v1.3.0/go.mod h1:NptN6mkBDFvERUCvZHlvWmmME+gmZ44xzwRXwhzsbtc= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= +golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hosts/trimounts/modules/perses.disabled/dashboards/wolumonde.go b/hosts/trimounts/modules/perses.disabled/dashboards/wolumonde.go new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/dashboards/wolumonde.go @@ -0,0 +1,334 @@ +package main + +import ( + "flag" + "time" + + "github.com/perses/perses/go-sdk" + "github.com/perses/perses/go-sdk/common" + dash "github.com/perses/perses/go-sdk/dashboard" + "github.com/perses/perses/go-sdk/panel" + panels "github.com/perses/perses/go-sdk/panel-group" + "github.com/perses/perses/go-sdk/panel/bar" + "github.com/perses/perses/go-sdk/panel/gauge" + "github.com/perses/perses/go-sdk/panel/stat" + "github.com/perses/perses/go-sdk/prometheus/query" + + timeSeries "github.com/perses/perses/go-sdk/panel/time-series" + // promDs "github.com/perses/perses/go-sdk/prometheus/datasource" +) + +func main() { + flag.Parse() + exec := sdk.NewExec() + + var loadPanel = panels.AddPanel("load over 5 min", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Max: 2.0, + }, + ), + ), + panel.AddQuery( + query.PromQL( + "node_load5", + query.SeriesNameFormat("load"), + ), + ), + ) + var cpuPanel = panels.AddPanel("cpu usage", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "percent", + }, + Max: 100.0, + }, + ), + ), + panel.AddQuery( + query.PromQL( + `sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100`, + query.SeriesNameFormat("cpu {{cpu}}"), + ), + ), + ) + var memoryPanel = panels.AddPanel("memory usage", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "bytes", + }, + Max: 4000000000, + }, + ), + ), + panel.AddQuery( + query.PromQL( + "node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes", + query.SeriesNameFormat("current memory usage"), + ), + ), + ) + + var diskPanel = panels.AddPanel("disk usage /", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "bytes", + }, + Max: 38000000000, + }, + ), + ), + panel.AddQuery( + query.PromQL( + `node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}`, + query.SeriesNameFormat("disk usage"), + ), + ), + ) + + // Gauge versions (percent unit) + var loadGaugePanel = panels.AddPanel("load over 5 min", + gauge.Chart( + gauge.Format(common.Format{Unit: "percent"}), + gauge.Max(100), + gauge.Calculation(common.MeanCalculation), + ), + panel.AddQuery( + query.PromQL( + "node_load5 * 100 / count(count(node_cpu_seconds_total) by (cpu))", + query.SeriesNameFormat("load %"), + ), + ), + ) + var cpuGaugePanel = panels.AddPanel("cpu usage", + gauge.Chart( + gauge.Format(common.Format{Unit: "percent"}), + gauge.Max(100), + gauge.Calculation(common.MeanCalculation), + ), + panel.AddQuery( + query.PromQL( + `sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100`, + query.SeriesNameFormat("cpu {{cpu}}"), + ), + ), + ) + var memoryGaugePanel = panels.AddPanel("memory usage", + gauge.Chart( + gauge.Format(common.Format{Unit: "percent"}), + gauge.Max(100), + gauge.Calculation(common.MeanCalculation), + ), + panel.AddQuery( + query.PromQL( + "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) * 100 / node_memory_MemTotal_bytes", + query.SeriesNameFormat("memory usage %"), + ), + ), + ) + var diskGaugePanel = panels.AddPanel("disk usage /", + gauge.Chart( + gauge.Format(common.Format{Unit: "percent"}), + gauge.Max(100), + ), + panel.AddQuery( + query.PromQL( + `(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) * 100 / node_filesystem_size_bytes{mountpoint="/"}`, + query.SeriesNameFormat("disk usage %"), + ), + ), + ) + + var resPanels = dash.AddPanelGroup("resource usage", + panels.PanelsPerLine(4), + loadGaugePanel, cpuGaugePanel, memoryGaugePanel, diskGaugePanel, + loadPanel, cpuPanel, memoryPanel, diskPanel, + ) + + var nginxPanel = panels.AddPanel("nginx requests / min", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "decimal", + }, + }, + ), + timeSeries.WithVisual(timeSeries.Visual{ + Display: timeSeries.BarDisplay, + Palette: timeSeries.Palette{ + Mode: timeSeries.CategoricalMode, + }, + Stack: timeSeries.AllStack, + }), + timeSeries.WithLegend(timeSeries.Legend{ + Position: timeSeries.BottomPosition, + Size: timeSeries.SmallSize, + }), + ), + panel.AddQuery( + query.PromQL( + "nginx_request_count", + query.SeriesNameFormat("{{res.statusCode}}"), + ), + ), + ) + + var nginxLatencyPanel = panels.AddPanel("nginx latency / min", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "seconds", + }, + Max: 0.5, + }, + ), + ), + panel.AddQuery( + query.PromQL( + "nginx_request_latency", + query.SeriesNameFormat("{{stats_result}}"), + ), + ), + ) + + var nginxPanels = dash.AddPanelGroup("nginx metrics", + panels.PanelsPerLine(3), + nginxPanel, + nginxLatencyPanel, + ) + + var pdsPanel = panels.AddPanel("pds requests / min", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "decimal", + }, + }, + ), + timeSeries.WithVisual(timeSeries.Visual{ + Display: timeSeries.BarDisplay, + Palette: timeSeries.Palette{ + Mode: timeSeries.CategoricalMode, + }, + Stack: timeSeries.AllStack, + }), + timeSeries.WithLegend(timeSeries.Legend{ + Position: timeSeries.BottomPosition, + Size: timeSeries.SmallSize, + }), + ), + panel.AddQuery( + query.PromQL( + "pds_request_count", + query.SeriesNameFormat("{{res.statusCode}}"), + ), + ), + ) + + var pdsLatencyPanel = panels.AddPanel("pds latency / min", + timeSeries.Chart( + timeSeries.WithYAxis( + timeSeries.YAxis{ + Format: &common.Format{ + Unit: "milliseconds", + }, + Max: 500, + }, + ), + ), + panel.AddQuery( + query.PromQL( + "pds_response_latency", + query.SeriesNameFormat("{{stats_result}}"), + ), + ), + ) + + var pdsPanels = dash.AddPanelGroup("pds metrics", + panels.PanelsPerLine(3), + pdsPanel, + pdsLatencyPanel, + ) + + var anubisForgejoPanel = panels.AddPanel("anubis policy actions", + bar.Chart(), + panel.AddQuery( + query.PromQL( + "anubis_policy_results", + query.SeriesNameFormat("{{action}}: {{rule}}"), + ), + ), + ) + + var forgejoPanels = dash.AddPanelGroup("forgejo", + panels.PanelsPerLine(3), + anubisForgejoPanel, + ) + + var gazesys_visit_panel = panels.AddPanel("gazesys visits", + bar.Chart(), + panel.AddQuery( + query.PromQL( + "gazesys_visit_real_total + gazesys_visit_fake_total", + query.SeriesNameFormat("total visits"), + ), + ), + panel.AddQuery( + query.PromQL( + "gazesys_visit_fake_total", + query.SeriesNameFormat("(ai) bot visits"), + ), + ), + panel.AddQuery( + query.PromQL( + "gazesys_visit_real_total", + query.SeriesNameFormat("real visits"), + ), + ), + ) + + var gazesys_pet_panel = panels.AddPanel("gazesys pet", + stat.Chart( + stat.Format(common.Format{ + Unit: "decimal", + ShortValues: true, + DecimalPlaces: 0, + }), + ), + panel.AddQuery( + query.PromQL( + "gazesys_pet_bounce_total", + query.SeriesNameFormat("bounce count"), + ), + ), + panel.AddQuery( + query.PromQL( + "gazesys_pet_distance_total", + query.SeriesNameFormat("distance travelled"), + ), + ), + ) + + var gazesys_panels = dash.AddPanelGroup("gazesys", + panels.PanelsPerLine(3), + gazesys_visit_panel, gazesys_pet_panel, + ) + + builder, buildErr := dash.New("wolumonde", + dash.ProjectName("private-infra"), + dash.Duration(30*time.Minute), + dash.RefreshInterval(time.Minute), + resPanels, nginxPanels, pdsPanels, gazesys_panels, forgejoPanels, + ) + exec.BuildDashboard(builder, buildErr) +} diff --git a/hosts/trimounts/modules/perses.disabled/provision/1-private-infra.yaml b/hosts/trimounts/modules/perses.disabled/provision/1-private-infra.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/1-private-infra.yaml @@ -0,0 +1,3 @@ +kind: Project +metadata: + name: private-infra diff --git a/hosts/trimounts/modules/perses.disabled/provision/2-admin-role.yaml b/hosts/trimounts/modules/perses.disabled/provision/2-admin-role.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/2-admin-role.yaml @@ -0,0 +1,9 @@ +- kind: GlobalRole + metadata: + name: admin + spec: + permissions: + - actions: + - '*' + scopes: + - '*' diff --git a/hosts/trimounts/modules/perses.disabled/provision/3-admin-bind-role.yaml b/hosts/trimounts/modules/perses.disabled/provision/3-admin-bind-role.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/3-admin-bind-role.yaml @@ -0,0 +1,8 @@ +- kind: GlobalRoleBinding + metadata: + name: admin + spec: + role: admin + subjects: + - kind: User + name: 90008 diff --git a/hosts/trimounts/modules/perses.disabled/provision/4-victoria.yaml b/hosts/trimounts/modules/perses.disabled/provision/4-victoria.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/4-victoria.yaml @@ -0,0 +1,12 @@ +- kind: GlobalDatasource + metadata: + name: victoria + spec: + default: true + plugin: + kind: PrometheusDatasource + spec: + proxy: + kind: HTTPProxy + spec: + url: http://localhost:8428 diff --git a/hosts/trimounts/modules/perses.disabled/provision/6-guest-role.yaml b/hosts/trimounts/modules/perses.disabled/provision/6-guest-role.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/6-guest-role.yaml @@ -0,0 +1,12 @@ +- kind: GlobalRole + metadata: + name: guest + spec: + permissions: + - actions: + - 'read' + scopes: + - 'Dashboard' + - 'Project' + - 'Datasource' + - 'GlobalDatasource' diff --git a/hosts/trimounts/modules/perses.disabled/provision/7-guest-role-bind.yaml b/hosts/trimounts/modules/perses.disabled/provision/7-guest-role-bind.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/7-guest-role-bind.yaml @@ -0,0 +1,8 @@ +- kind: GlobalRoleBinding + metadata: + name: guest + spec: + role: guest + subjects: + - kind: User + name: sorryu02 \ No newline at end of file diff --git a/hosts/trimounts/modules/perses.disabled/provision/90-wolumonde.yaml b/hosts/trimounts/modules/perses.disabled/provision/90-wolumonde.yaml new file mode 100644 --- /dev/null +++ b/hosts/trimounts/modules/perses.disabled/provision/90-wolumonde.yaml @@ -0,0 +1,454 @@ +kind: Dashboard +metadata: + name: wolumonde + createdAt: 0001-01-01T00:00:00Z + updatedAt: 0001-01-01T00:00:00Z + version: 0 + project: private-infra +spec: + panels: + "0_0": + kind: Panel + spec: + display: + name: load over 5 min + plugin: + kind: GaugeChart + spec: + calculation: mean + format: + unit: percent + max: 100 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: node_load5 * 100 / count(count(node_cpu_seconds_total) by (cpu)) + seriesNameFormat: load % + "0_1": + kind: Panel + spec: + display: + name: cpu usage + plugin: + kind: GaugeChart + spec: + calculation: mean + format: + unit: percent + max: 100 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100 + seriesNameFormat: cpu {{cpu}} + "0_2": + kind: Panel + spec: + display: + name: memory usage + plugin: + kind: GaugeChart + spec: + calculation: mean + format: + unit: percent + max: 100 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) * 100 / node_memory_MemTotal_bytes + seriesNameFormat: memory usage % + "0_3": + kind: Panel + spec: + display: + name: disk usage / + plugin: + kind: GaugeChart + spec: + calculation: last + format: + unit: percent + max: 100 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) * 100 / node_filesystem_size_bytes{mountpoint="/"} + seriesNameFormat: disk usage % + "0_4": + kind: Panel + spec: + display: + name: load over 5 min + plugin: + kind: TimeSeriesChart + spec: + yAxis: + max: 2 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: node_load5 + seriesNameFormat: load + "0_5": + kind: Panel + spec: + display: + name: cpu usage + plugin: + kind: TimeSeriesChart + spec: + yAxis: + format: + unit: percent + max: 100 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100 + seriesNameFormat: cpu {{cpu}} + "0_6": + kind: Panel + spec: + display: + name: memory usage + plugin: + kind: TimeSeriesChart + spec: + yAxis: + format: + unit: bytes + max: 4e+09 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes + seriesNameFormat: current memory usage + "0_7": + kind: Panel + spec: + display: + name: disk usage / + plugin: + kind: TimeSeriesChart + spec: + yAxis: + format: + unit: bytes + max: 3.8e+10 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"} + seriesNameFormat: disk usage + "1_0": + kind: Panel + spec: + display: + name: nginx requests / min + plugin: + kind: TimeSeriesChart + spec: + legend: + position: bottom + size: small + yAxis: + format: + unit: decimal + visual: + display: bar + palette: + mode: categorical + stack: all + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: nginx_request_count + seriesNameFormat: '{{res.statusCode}}' + "1_1": + kind: Panel + spec: + display: + name: nginx latency / min + plugin: + kind: TimeSeriesChart + spec: + yAxis: + format: + unit: seconds + max: 0.5 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: nginx_request_latency + seriesNameFormat: '{{stats_result}}' + "2_0": + kind: Panel + spec: + display: + name: pds requests / min + plugin: + kind: TimeSeriesChart + spec: + legend: + position: bottom + size: small + yAxis: + format: + unit: decimal + visual: + display: bar + palette: + mode: categorical + stack: all + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: pds_request_count + seriesNameFormat: '{{res.statusCode}}' + "2_1": + kind: Panel + spec: + display: + name: pds latency / min + plugin: + kind: TimeSeriesChart + spec: + yAxis: + format: + unit: milliseconds + max: 500 + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: pds_response_latency + seriesNameFormat: '{{stats_result}}' + "3_0": + kind: Panel + spec: + display: + name: gazesys visits + plugin: + kind: BarChart + spec: + calculation: last + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: gazesys_visit_real_total + gazesys_visit_fake_total + seriesNameFormat: total visits + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: gazesys_visit_fake_total + seriesNameFormat: (ai) bot visits + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: gazesys_visit_real_total + seriesNameFormat: real visits + "3_1": + kind: Panel + spec: + display: + name: gazesys pet + plugin: + kind: StatChart + spec: + calculation: last + format: + unit: decimal + shortValues: true + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: gazesys_pet_bounce_total + seriesNameFormat: bounce count + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: gazesys_pet_distance_total + seriesNameFormat: distance travelled + "4_0": + kind: Panel + spec: + display: + name: anubis policy actions + plugin: + kind: BarChart + spec: + calculation: last + queries: + - kind: TimeSeriesQuery + spec: + plugin: + kind: PrometheusTimeSeriesQuery + spec: + query: anubis_policy_results + seriesNameFormat: '{{action}}: {{rule}}' + layouts: + - kind: Grid + spec: + display: + title: resource usage + items: + - x: 0 + "y": 0 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_0' + - x: 6 + "y": 0 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_1' + - x: 12 + "y": 0 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_2' + - x: 18 + "y": 0 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_3' + - x: 0 + "y": 6 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_4' + - x: 6 + "y": 6 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_5' + - x: 12 + "y": 6 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_6' + - x: 18 + "y": 6 + width: 6 + height: 6 + content: + $ref: '#/spec/panels/0_7' + - kind: Grid + spec: + display: + title: nginx metrics + items: + - x: 0 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/1_0' + - x: 8 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/1_1' + - kind: Grid + spec: + display: + title: pds metrics + items: + - x: 0 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/2_0' + - x: 8 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/2_1' + - kind: Grid + spec: + display: + title: gazesys + items: + - x: 0 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/3_0' + - x: 8 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/3_1' + - kind: Grid + spec: + display: + title: forgejo + items: + - x: 0 + "y": 0 + width: 8 + height: 6 + content: + $ref: '#/spec/panels/4_0' + duration: 30m + refreshInterval: 1m diff --git a/hosts/trimounts/modules/perses.nix/dashboards/.gitignore b/hosts/trimounts/modules/perses.nix/dashboards/.gitignore deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/dashboards/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# folder used to store the results of the `percli dac build` command -built diff --git a/hosts/trimounts/modules/perses.nix/dashboards/go.mod b/hosts/trimounts/modules/perses.nix/dashboards/go.mod deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/dashboards/go.mod +++ /dev/null @@ -1,28 +0,0 @@ -module dash - -go 1.24.2 - -require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/go-jose/go-jose/v4 v4.0.5 // indirect - github.com/jpillora/backoff v1.0.0 // indirect - github.com/muhlemmer/gu v0.3.1 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect - github.com/perses/perses v0.50.3 // indirect - github.com/prometheus/client_golang v1.20.5 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.63.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect - github.com/zitadel/oidc/v3 v3.36.1 // indirect - github.com/zitadel/schema v1.3.0 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/hosts/trimounts/modules/perses.nix/dashboards/go.sum b/hosts/trimounts/modules/perses.nix/dashboards/go.sum deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/dashboards/go.sum +++ /dev/null @@ -1,45 +0,0 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= -github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/muhlemmer/gu v0.3.1 h1:7EAqmFrW7n3hETvuAdmFmn4hS8W+z3LgKtrnow+YzNM= -github.com/muhlemmer/gu v0.3.1/go.mod h1:YHtHR+gxM+bKEIIs7Hmi9sPT3ZDUvTN/i88wQpZkrdM= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/perses/perses v0.50.3 h1:BHlU9qkCFCUSP4HP5p9GwophWcxm5Vnu6Fsrx8Fb/+w= -github.com/perses/perses v0.50.3/go.mod h1:oqfHLOrXERvEqECShqXPjHXqVukQxcoaaTM6ySRF7hU= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= -github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/zitadel/oidc/v3 v3.36.1 h1:1AT1NqKKEqAwx4GmKJZ9fYkWH2WIn/VKMfQ46nBtRf0= -github.com/zitadel/oidc/v3 v3.36.1/go.mod h1:dApGZLvWZTHRuxmcbQlW5d2XVjVYR3vGOdq536igmTs= -github.com/zitadel/schema v1.3.0 h1:kQ9W9tvIwZICCKWcMvCEweXET1OcOyGEuFbHs4o5kg0= -github.com/zitadel/schema v1.3.0/go.mod h1:NptN6mkBDFvERUCvZHlvWmmME+gmZ44xzwRXwhzsbtc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hosts/trimounts/modules/perses.nix/dashboards/wolumonde.go b/hosts/trimounts/modules/perses.nix/dashboards/wolumonde.go deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/dashboards/wolumonde.go +++ /dev/null @@ -1,334 +0,0 @@ -package main - -import ( - "flag" - "time" - - "github.com/perses/perses/go-sdk" - "github.com/perses/perses/go-sdk/common" - dash "github.com/perses/perses/go-sdk/dashboard" - "github.com/perses/perses/go-sdk/panel" - panels "github.com/perses/perses/go-sdk/panel-group" - "github.com/perses/perses/go-sdk/panel/bar" - "github.com/perses/perses/go-sdk/panel/gauge" - "github.com/perses/perses/go-sdk/panel/stat" - "github.com/perses/perses/go-sdk/prometheus/query" - - timeSeries "github.com/perses/perses/go-sdk/panel/time-series" - // promDs "github.com/perses/perses/go-sdk/prometheus/datasource" -) - -func main() { - flag.Parse() - exec := sdk.NewExec() - - var loadPanel = panels.AddPanel("load over 5 min", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Max: 2.0, - }, - ), - ), - panel.AddQuery( - query.PromQL( - "node_load5", - query.SeriesNameFormat("load"), - ), - ), - ) - var cpuPanel = panels.AddPanel("cpu usage", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "percent", - }, - Max: 100.0, - }, - ), - ), - panel.AddQuery( - query.PromQL( - `sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100`, - query.SeriesNameFormat("cpu {{cpu}}"), - ), - ), - ) - var memoryPanel = panels.AddPanel("memory usage", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "bytes", - }, - Max: 4000000000, - }, - ), - ), - panel.AddQuery( - query.PromQL( - "node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes", - query.SeriesNameFormat("current memory usage"), - ), - ), - ) - - var diskPanel = panels.AddPanel("disk usage /", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "bytes", - }, - Max: 38000000000, - }, - ), - ), - panel.AddQuery( - query.PromQL( - `node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}`, - query.SeriesNameFormat("disk usage"), - ), - ), - ) - - // Gauge versions (percent unit) - var loadGaugePanel = panels.AddPanel("load over 5 min", - gauge.Chart( - gauge.Format(common.Format{Unit: "percent"}), - gauge.Max(100), - gauge.Calculation(common.MeanCalculation), - ), - panel.AddQuery( - query.PromQL( - "node_load5 * 100 / count(count(node_cpu_seconds_total) by (cpu))", - query.SeriesNameFormat("load %"), - ), - ), - ) - var cpuGaugePanel = panels.AddPanel("cpu usage", - gauge.Chart( - gauge.Format(common.Format{Unit: "percent"}), - gauge.Max(100), - gauge.Calculation(common.MeanCalculation), - ), - panel.AddQuery( - query.PromQL( - `sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100`, - query.SeriesNameFormat("cpu {{cpu}}"), - ), - ), - ) - var memoryGaugePanel = panels.AddPanel("memory usage", - gauge.Chart( - gauge.Format(common.Format{Unit: "percent"}), - gauge.Max(100), - gauge.Calculation(common.MeanCalculation), - ), - panel.AddQuery( - query.PromQL( - "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) * 100 / node_memory_MemTotal_bytes", - query.SeriesNameFormat("memory usage %"), - ), - ), - ) - var diskGaugePanel = panels.AddPanel("disk usage /", - gauge.Chart( - gauge.Format(common.Format{Unit: "percent"}), - gauge.Max(100), - ), - panel.AddQuery( - query.PromQL( - `(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) * 100 / node_filesystem_size_bytes{mountpoint="/"}`, - query.SeriesNameFormat("disk usage %"), - ), - ), - ) - - var resPanels = dash.AddPanelGroup("resource usage", - panels.PanelsPerLine(4), - loadGaugePanel, cpuGaugePanel, memoryGaugePanel, diskGaugePanel, - loadPanel, cpuPanel, memoryPanel, diskPanel, - ) - - var nginxPanel = panels.AddPanel("nginx requests / min", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "decimal", - }, - }, - ), - timeSeries.WithVisual(timeSeries.Visual{ - Display: timeSeries.BarDisplay, - Palette: timeSeries.Palette{ - Mode: timeSeries.CategoricalMode, - }, - Stack: timeSeries.AllStack, - }), - timeSeries.WithLegend(timeSeries.Legend{ - Position: timeSeries.BottomPosition, - Size: timeSeries.SmallSize, - }), - ), - panel.AddQuery( - query.PromQL( - "nginx_request_count", - query.SeriesNameFormat("{{res.statusCode}}"), - ), - ), - ) - - var nginxLatencyPanel = panels.AddPanel("nginx latency / min", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "seconds", - }, - Max: 0.5, - }, - ), - ), - panel.AddQuery( - query.PromQL( - "nginx_request_latency", - query.SeriesNameFormat("{{stats_result}}"), - ), - ), - ) - - var nginxPanels = dash.AddPanelGroup("nginx metrics", - panels.PanelsPerLine(3), - nginxPanel, - nginxLatencyPanel, - ) - - var pdsPanel = panels.AddPanel("pds requests / min", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "decimal", - }, - }, - ), - timeSeries.WithVisual(timeSeries.Visual{ - Display: timeSeries.BarDisplay, - Palette: timeSeries.Palette{ - Mode: timeSeries.CategoricalMode, - }, - Stack: timeSeries.AllStack, - }), - timeSeries.WithLegend(timeSeries.Legend{ - Position: timeSeries.BottomPosition, - Size: timeSeries.SmallSize, - }), - ), - panel.AddQuery( - query.PromQL( - "pds_request_count", - query.SeriesNameFormat("{{res.statusCode}}"), - ), - ), - ) - - var pdsLatencyPanel = panels.AddPanel("pds latency / min", - timeSeries.Chart( - timeSeries.WithYAxis( - timeSeries.YAxis{ - Format: &common.Format{ - Unit: "milliseconds", - }, - Max: 500, - }, - ), - ), - panel.AddQuery( - query.PromQL( - "pds_response_latency", - query.SeriesNameFormat("{{stats_result}}"), - ), - ), - ) - - var pdsPanels = dash.AddPanelGroup("pds metrics", - panels.PanelsPerLine(3), - pdsPanel, - pdsLatencyPanel, - ) - - var anubisForgejoPanel = panels.AddPanel("anubis policy actions", - bar.Chart(), - panel.AddQuery( - query.PromQL( - "anubis_policy_results", - query.SeriesNameFormat("{{action}}: {{rule}}"), - ), - ), - ) - - var forgejoPanels = dash.AddPanelGroup("forgejo", - panels.PanelsPerLine(3), - anubisForgejoPanel, - ) - - var gazesys_visit_panel = panels.AddPanel("gazesys visits", - bar.Chart(), - panel.AddQuery( - query.PromQL( - "gazesys_visit_real_total + gazesys_visit_fake_total", - query.SeriesNameFormat("total visits"), - ), - ), - panel.AddQuery( - query.PromQL( - "gazesys_visit_fake_total", - query.SeriesNameFormat("(ai) bot visits"), - ), - ), - panel.AddQuery( - query.PromQL( - "gazesys_visit_real_total", - query.SeriesNameFormat("real visits"), - ), - ), - ) - - var gazesys_pet_panel = panels.AddPanel("gazesys pet", - stat.Chart( - stat.Format(common.Format{ - Unit: "decimal", - ShortValues: true, - DecimalPlaces: 0, - }), - ), - panel.AddQuery( - query.PromQL( - "gazesys_pet_bounce_total", - query.SeriesNameFormat("bounce count"), - ), - ), - panel.AddQuery( - query.PromQL( - "gazesys_pet_distance_total", - query.SeriesNameFormat("distance travelled"), - ), - ), - ) - - var gazesys_panels = dash.AddPanelGroup("gazesys", - panels.PanelsPerLine(3), - gazesys_visit_panel, gazesys_pet_panel, - ) - - builder, buildErr := dash.New("wolumonde", - dash.ProjectName("private-infra"), - dash.Duration(30*time.Minute), - dash.RefreshInterval(time.Minute), - resPanels, nginxPanels, pdsPanels, gazesys_panels, forgejoPanels, - ) - exec.BuildDashboard(builder, buildErr) -} diff --git a/hosts/trimounts/modules/perses.nix/provision/1-private-infra.yaml b/hosts/trimounts/modules/perses.nix/provision/1-private-infra.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/1-private-infra.yaml +++ /dev/null @@ -1,3 +0,0 @@ -kind: Project -metadata: - name: private-infra diff --git a/hosts/trimounts/modules/perses.nix/provision/2-admin-role.yaml b/hosts/trimounts/modules/perses.nix/provision/2-admin-role.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/2-admin-role.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- kind: GlobalRole - metadata: - name: admin - spec: - permissions: - - actions: - - '*' - scopes: - - '*' diff --git a/hosts/trimounts/modules/perses.nix/provision/3-admin-bind-role.yaml b/hosts/trimounts/modules/perses.nix/provision/3-admin-bind-role.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/3-admin-bind-role.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- kind: GlobalRoleBinding - metadata: - name: admin - spec: - role: admin - subjects: - - kind: User - name: 90008 diff --git a/hosts/trimounts/modules/perses.nix/provision/4-victoria.yaml b/hosts/trimounts/modules/perses.nix/provision/4-victoria.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/4-victoria.yaml +++ /dev/null @@ -1,12 +0,0 @@ -- kind: GlobalDatasource - metadata: - name: victoria - spec: - default: true - plugin: - kind: PrometheusDatasource - spec: - proxy: - kind: HTTPProxy - spec: - url: http://localhost:8428 diff --git a/hosts/trimounts/modules/perses.nix/provision/6-guest-role.yaml b/hosts/trimounts/modules/perses.nix/provision/6-guest-role.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/6-guest-role.yaml +++ /dev/null @@ -1,12 +0,0 @@ -- kind: GlobalRole - metadata: - name: guest - spec: - permissions: - - actions: - - 'read' - scopes: - - 'Dashboard' - - 'Project' - - 'Datasource' - - 'GlobalDatasource' diff --git a/hosts/trimounts/modules/perses.nix/provision/7-guest-role-bind.yaml b/hosts/trimounts/modules/perses.nix/provision/7-guest-role-bind.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/7-guest-role-bind.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- kind: GlobalRoleBinding - metadata: - name: guest - spec: - role: guest - subjects: - - kind: User - name: sorryu02 \ No newline at end of file diff --git a/hosts/trimounts/modules/perses.nix/provision/90-wolumonde.yaml b/hosts/trimounts/modules/perses.nix/provision/90-wolumonde.yaml deleted file mode 100644 --- a/hosts/trimounts/modules/perses.nix/provision/90-wolumonde.yaml +++ /dev/null @@ -1,454 +0,0 @@ -kind: Dashboard -metadata: - name: wolumonde - createdAt: 0001-01-01T00:00:00Z - updatedAt: 0001-01-01T00:00:00Z - version: 0 - project: private-infra -spec: - panels: - "0_0": - kind: Panel - spec: - display: - name: load over 5 min - plugin: - kind: GaugeChart - spec: - calculation: mean - format: - unit: percent - max: 100 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: node_load5 * 100 / count(count(node_cpu_seconds_total) by (cpu)) - seriesNameFormat: load % - "0_1": - kind: Panel - spec: - display: - name: cpu usage - plugin: - kind: GaugeChart - spec: - calculation: mean - format: - unit: percent - max: 100 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100 - seriesNameFormat: cpu {{cpu}} - "0_2": - kind: Panel - spec: - display: - name: memory usage - plugin: - kind: GaugeChart - spec: - calculation: mean - format: - unit: percent - max: 100 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) * 100 / node_memory_MemTotal_bytes - seriesNameFormat: memory usage % - "0_3": - kind: Panel - spec: - display: - name: disk usage / - plugin: - kind: GaugeChart - spec: - calculation: last - format: - unit: percent - max: 100 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) * 100 / node_filesystem_size_bytes{mountpoint="/"} - seriesNameFormat: disk usage % - "0_4": - kind: Panel - spec: - display: - name: load over 5 min - plugin: - kind: TimeSeriesChart - spec: - yAxis: - max: 2 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: node_load5 - seriesNameFormat: load - "0_5": - kind: Panel - spec: - display: - name: cpu usage - plugin: - kind: TimeSeriesChart - spec: - yAxis: - format: - unit: percent - max: 100 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: sum by (cpu) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) * 100 - seriesNameFormat: cpu {{cpu}} - "0_6": - kind: Panel - spec: - display: - name: memory usage - plugin: - kind: TimeSeriesChart - spec: - yAxis: - format: - unit: bytes - max: 4e+09 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes - seriesNameFormat: current memory usage - "0_7": - kind: Panel - spec: - display: - name: disk usage / - plugin: - kind: TimeSeriesChart - spec: - yAxis: - format: - unit: bytes - max: 3.8e+10 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"} - seriesNameFormat: disk usage - "1_0": - kind: Panel - spec: - display: - name: nginx requests / min - plugin: - kind: TimeSeriesChart - spec: - legend: - position: bottom - size: small - yAxis: - format: - unit: decimal - visual: - display: bar - palette: - mode: categorical - stack: all - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: nginx_request_count - seriesNameFormat: '{{res.statusCode}}' - "1_1": - kind: Panel - spec: - display: - name: nginx latency / min - plugin: - kind: TimeSeriesChart - spec: - yAxis: - format: - unit: seconds - max: 0.5 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: nginx_request_latency - seriesNameFormat: '{{stats_result}}' - "2_0": - kind: Panel - spec: - display: - name: pds requests / min - plugin: - kind: TimeSeriesChart - spec: - legend: - position: bottom - size: small - yAxis: - format: - unit: decimal - visual: - display: bar - palette: - mode: categorical - stack: all - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: pds_request_count - seriesNameFormat: '{{res.statusCode}}' - "2_1": - kind: Panel - spec: - display: - name: pds latency / min - plugin: - kind: TimeSeriesChart - spec: - yAxis: - format: - unit: milliseconds - max: 500 - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: pds_response_latency - seriesNameFormat: '{{stats_result}}' - "3_0": - kind: Panel - spec: - display: - name: gazesys visits - plugin: - kind: BarChart - spec: - calculation: last - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: gazesys_visit_real_total + gazesys_visit_fake_total - seriesNameFormat: total visits - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: gazesys_visit_fake_total - seriesNameFormat: (ai) bot visits - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: gazesys_visit_real_total - seriesNameFormat: real visits - "3_1": - kind: Panel - spec: - display: - name: gazesys pet - plugin: - kind: StatChart - spec: - calculation: last - format: - unit: decimal - shortValues: true - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: gazesys_pet_bounce_total - seriesNameFormat: bounce count - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: gazesys_pet_distance_total - seriesNameFormat: distance travelled - "4_0": - kind: Panel - spec: - display: - name: anubis policy actions - plugin: - kind: BarChart - spec: - calculation: last - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: anubis_policy_results - seriesNameFormat: '{{action}}: {{rule}}' - layouts: - - kind: Grid - spec: - display: - title: resource usage - items: - - x: 0 - "y": 0 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_0' - - x: 6 - "y": 0 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_1' - - x: 12 - "y": 0 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_2' - - x: 18 - "y": 0 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_3' - - x: 0 - "y": 6 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_4' - - x: 6 - "y": 6 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_5' - - x: 12 - "y": 6 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_6' - - x: 18 - "y": 6 - width: 6 - height: 6 - content: - $ref: '#/spec/panels/0_7' - - kind: Grid - spec: - display: - title: nginx metrics - items: - - x: 0 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/1_0' - - x: 8 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/1_1' - - kind: Grid - spec: - display: - title: pds metrics - items: - - x: 0 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/2_0' - - x: 8 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/2_1' - - kind: Grid - spec: - display: - title: gazesys - items: - - x: 0 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/3_0' - - x: 8 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/3_1' - - kind: Grid - spec: - display: - title: forgejo - items: - - x: 0 - "y": 0 - width: 8 - height: 6 - content: - $ref: '#/spec/panels/4_0' - duration: 30m - refreshInterval: 1m -- tangled.sh