Author SHA1 Message Date
renovate 456f9260cd chore(k8s/paperless): update gotenberg/gotenberg docker tag to v9 2026-11-06 00:00:51 +00:00
renovate c6b8d251b6 chore(k8s/vikunja): update vikunja/vikunja docker tag to v2.8.0 2026-11-05 18:00:47 +00:00
oleksandr 809eea6d51 chore(k8s/vikunja): pause Vikunja by scaling to zero 2026-11-05 19:34:36 +02:00
oleksandr acd823d196 feat(k8s): remove Grocy, Firefly III and CryptPad 2026-11-05 19:34:35 +02:00
oleksandr c3b911e4ab feat(k8s/infrastructure/authelia): skip OIDC consent screen with implicit consent mode 2026-11-05 19:26:30 +02:00
renovate 820340455d chore(k8s/immich): update dependency immich-app/immich to v3.3.6 2026-11-04 18:02:13 +00:00
renovate bb8da2f3ba chore(k8s/dawarich): update freikin/dawarich docker tag to v1.21.0 2026-11-04 12:02:24 +00:00
renovate d26f4821de chore(k8s/reitti): update dedicatedcode/reitti-tile-cache docker tag to v5.9.1 2026-11-03 12:01:39 +00:00
renovate 5910d406bf chore(k8s/reitti): update dedicatedcode/reitti docker tag to v5.9.1 2026-11-03 12:00:46 +00:00
renovate a7d27804e2 chore(k8s/reitti): update dedicatedcode/reitti-tile-cache docker tag to v5.9.0 2026-11-02 12:01:34 +00:00
renovate 5e79bad09e chore(k8s/reitti): update dedicatedcode/reitti docker tag to v5.9.0 2026-11-02 12:00:42 +00:00
renovate 7c95f2191c chore(k8s/dawarich): update freikin/dawarich docker tag to v1.20.1 2026-11-02 00:01:45 +00:00
renovate 3951ecae96 chore(k8s/dawarich): update freikin/dawarich docker tag to v1.20.0 2026-10-31 12:00:41 +00:00
renovate 82ad813a1c chore(k8s/paperless): update ghcr.io/paperless-ngx/paperless-ngx docker tag to v3.4 2026-10-30 00:00:53 +00:00
renovate 5db7c87292 chore(k8s/media): update lscr.io/linuxserver/prowlarr docker tag to v2.7.0 2026-10-28 00:02:20 +00:00
renovate 10ee6528fd chore(k8s/dawarich): update freikin/dawarich docker tag to v1.19.0 2026-10-28 00:01:58 +00:00
renovate 57f9f3883b chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v12.4 2026-10-27 00:01:21 +00:00
renovate 352059fbbc chore(k8s/dawarich): update freikin/dawarich docker tag to v1.18.1 2026-10-27 00:00:44 +00:00
renovate a913e10a42 chore(k8s/dawarich): update freikin/dawarich docker tag to v1.18.0 2026-10-26 00:01:27 +00:00
renovate 2cab677ef9 chore(k8s/reitti): update dedicatedcode/reitti-tile-cache docker tag to v5.8.1 2026-10-24 18:00:58 +00:00
renovate 3f4269511c chore(k8s/reitti): update dedicatedcode/reitti docker tag to v5.8.1 2026-10-24 18:00:38 +00:00
renovate 2ecc949323 chore(k8s/dawarich): update freikin/dawarich docker tag to v1.17.0 2026-10-24 00:00:42 +00:00
renovate cc0d255b99 chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v2.7.0 2026-10-23 18:00:50 +00:00
renovate 98a8a469c4 chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v12.3 2026-10-23 06:01:35 +00:00
renovate 03a062c649 chore(k8s/reitti): update dedicatedcode/reitti-tile-cache docker tag to v5.8.0 2026-10-22 06:01:35 +00:00
renovate c38cf40898 chore(k8s/reitti): update dedicatedcode/reitti docker tag to v5.8.0 2026-10-22 06:00:42 +00:00
renovate fe3bd8e56a chore(k8s/paperless): update apache/tika docker tag to v3.3.3.0 2026-10-22 00:01:53 +00:00
renovate 04a3aa1d54 chore(k8s/immich): update dependency immich-app/immich to v3.3.5 2026-10-22 00:01:38 +00:00
renovate 212b0bdbf3 chore(k8s/media): update lscr.io/linuxserver/qbittorrent docker tag to v5.3.0 2026-10-21 18:01:39 +00:00
renovate 93fb70770b chore(k8s/media): update dependency seerr-team/seerr to v3.5.1 2026-10-21 18:01:15 +00:00
renovate a46aab984c chore(k8s/vikunja): update vikunja/vikunja docker tag to v2.7.1 2026-10-21 00:01:02 +00:00
renovate 6bbe3afbdd chore(k8s/immich): update dependency immich-app/immich to v3.3.4 2026-10-20 12:02:14 +00:00
oleksandr 144fb51126 fix(k8s/media): trust Traefik forwarded headers in *arr apps via POD_CIDR 2026-10-18 15:07:40 +03:00
renovate 5b6bb444ad chore(k8s/dawarich): update freikin/dawarich docker tag to v1.16.0 2026-10-17 18:00:58 +00:00
renovate f8fb3c59ad chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v2.6.0 2026-10-17 06:00:33 +00:00
renovate 107d352036 chore(k8s/reitti): update dedicatedcode/reitti-tile-cache docker tag to v5.7.0 2026-10-15 00:01:27 +00:00
renovate bcb4ebbbb8 chore(k8s/reitti): update dedicatedcode/reitti docker tag to v5.7.0 2026-10-15 00:00:36 +00:00
renovate 95b25cacc5 chore(k8s/lubelogger): update ghcr.io/hargata/lubelogger docker tag to v1.7.4 2026-10-14 18:01:31 +00:00
renovate f01ac8f468 chore(k8s/immich): update dependency immich-app/immich to v3.3.3 2026-10-14 18:01:18 +00:00
oleksandr 2756b38ec3 fix(k8s/archmirror): keep nginx responsive when NFS is slow 2026-10-12 21:17:42 +03:00
renovate 728221523f chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.9 2026-10-12 00:01:17 +00:00
renovate 820ce00535 chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v2.5.0 2026-10-11 00:01:46 +00:00
oleksandr 96bfd53907 feat(k8s/paperless): enable native AI with Claude Haiku 5.5 and local embeddings 2026-10-10 21:40:53 +03:00
renovate ec757b8b48 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.8 2026-10-10 06:00:52 +00:00
renovate ca4cf45e7a chore(k8s/immich): update dependency immich-app/immich to v3.3.1 2026-10-09 00:01:15 +00:00
oleksandr 07960e0c92 feat(k8s/dawarich): deploy Dawarich with PostGIS and Authelia OIDC 2026-10-08 13:38:58 +03:00
renovate 7afeb02b4d chore(k8s/immich): update dependency immich-app/immich to v3.3.0 2026-10-08 00:01:14 +00:00
renovate ecc38d207c chore(k8s/paperless): update ghcr.io/paperless-ngx/paperless-ngx docker tag to v3.3 2026-10-06 06:01:10 +00:00
renovate d082a82e73 chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v12.2 2026-10-06 00:01:28 +00:00
oleksandr 8f914714cb feat(k8s/infrastructure/authelia): add avatar pictures for users 2026-10-04 00:54:00 +03:00
oleksandr ea2a2d53ef fix(k8s/homepage): use Jellyfin widget API v2 for Jellyfin 12 2026-10-04 00:28:10 +03:00
oleksandr 6cc59537c0 chore(k8s/reitti): disable data management after reprocessing 2026-10-04 00:13:10 +03:00
oleksandr a181d45ee8 chore(k8s/reitti): temporarily enable data management for reprocessing 2026-10-04 00:06:58 +03:00
oleksandr e662c59cd5 fix(k8s/reitti): raise memory limit and relax probe timeouts for large imports 2026-10-03 23:55:43 +03:00
oleksandr 1577313de5 feat(k8s/reitti): enable OIDC sign-up and disable local login 2026-10-03 23:43:07 +03:00
oleksandr 498330b752 feat(k8s/reitti): deploy Reitti with PostGIS, Authelia OIDC, and restic backups 2026-10-03 23:34:47 +03:00
oleksandr 6002b003a0 feat(mon/alerting): route alerts to Telegram, add gateway and syslog rules 2026-10-03 23:08:38 +03:00
renovate 4468b3e590 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.7 2026-10-03 12:01:21 +00:00
renovate ab73f9c35c chore(k8s/vikunja): update vikunja/vikunja docker tag to v2.7.0 2026-10-02 18:00:37 +00:00
renovate b990b898c7 chore(k8s/media): update lscr.io/linuxserver/qbittorrent docker tag to v5.2.4 2026-09-29 12:01:27 +00:00
renovate 2b3845e18c chore(k8s/immich): update dependency immich-app/immich to v3.2.4 2026-09-28 18:00:49 +00:00
renovate d9e8e946ac chore(k8s/media): update dependency seerr-team/seerr to v3.5.0 2026-09-28 12:01:35 +00:00
renovate 03b393bbae chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.6 2026-09-28 12:01:16 +00:00
renovate 451f19f082 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.5 2026-09-27 12:00:43 +00:00
renovate 3c1c4bfffc chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.4 2026-09-25 18:00:38 +00:00
renovate c0141082bc chore(k8s/paperless): update ghcr.io/paperless-ngx/paperless-ngx docker tag to v3.2 2026-09-19 06:01:06 +00:00
renovate 6eb8e0aba2 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.3 2026-09-18 18:00:32 +00:00
oleksandr 7ea92e8cec chore(k8s/pihole): update pihole to 2026.07.2 and dnscrypt-proxy to v2.1.18 2026-09-17 18:41:00 +03:00
renovate e34da438a6 chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v2.4.0 2026-09-17 12:01:21 +00:00
renovate 595d4841d5 chore(k8s/media): update lscr.io/linuxserver/radarr docker tag to v6.4.4 2026-09-17 06:01:30 +00:00
renovate 85a0dfabeb chore(k8s/media): update lscr.io/linuxserver/sonarr docker tag to v4.0.20 2026-09-17 00:01:48 +00:00
renovate 1d5ef1dd60 chore(k8s/media): update lscr.io/linuxserver/prowlarr docker tag to v2.6.5 2026-09-17 00:01:32 +00:00
oleksandr 4e82d683d6 feat(k8s/podsync): update config 2026-09-16 23:25:20 +03:00
renovate c7745ceb37 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.2 2026-09-16 12:00:36 +00:00
oleksandr 555246f00e fix(k8s/grocy): open SQLite database read-only in backup job 2026-09-16 11:42:36 +03:00
oleksandr f2f3711faa fix(k8s/jellyfin): open SQLite databases read-only in backup jobs 2026-09-16 11:42:36 +03:00
renovate 9fc2c8d90b chore(k8s/immich): update dependency immich-app/immich to v3.2.2 2026-09-16 00:01:08 +00:00
renovate 0564cb1242 chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v12.1 2026-09-15 06:01:34 +00:00
renovate 1221d4e318 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.1 2026-09-15 06:01:14 +00:00
renovate 7d233c126b chore(k8s/immich): update dependency immich-app/immich to v3.2.1 2026-09-15 00:01:26 +00:00
oleksandr bac0fc2cdd feat(k8s/podsync): update config 2026-09-14 22:22:09 +03:00
renovate fabbbf6073 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.7.0 2026-09-14 18:01:23 +00:00
oleksandr 848b58e289 feat(k8s/jellyfin): upgrade to Jellyfin 12.0 with migration startupProbe 2026-09-13 16:20:43 +03:00
oleksandr 8d99b0f7fe feat(k8s/jellyfin): add restic backup for database and configuration 2026-09-13 16:14:04 +03:00
renovate c34dc8790e chore(k8s/lubelogger): update ghcr.io/hargata/lubelogger docker tag to v1.7.3 2026-09-12 18:01:16 +00:00
oleksandr f8de4902fc fix(k8s/jellyfin): use MINOR.PATCH regex versioning for Jellyfin 12+ 2026-09-11 15:40:45 +03:00
oleksandr 820358e3a7 fix(k8s/homepage): allow pod IP host for probes per upstream k8s docs 2026-09-11 15:32:46 +03:00
oleksandr 492f59532e fix(k8s/homepage): send allowed Host header in probes for v2 2026-09-11 15:29:00 +03:00
renovate 1bb0e7628c chore(k8s/paperless): update ghcr.io/paperless-ngx/paperless-ngx docker tag to v3 2026-09-11 12:22:15 +00:00
renovate 6d6f3c66b3 chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v2 2026-09-11 12:20:54 +00:00
renovate a93ff085ce chore(k8s/paperless): update apache/tika docker tag to v3.3.1.0 2026-09-11 12:20:10 +00:00
renovate 5234a954d0 chore(k8s/lubelogger): update ghcr.io/hargata/lubelogger docker tag to v1.7.2 2026-09-11 12:20:01 +00:00
renovate af774e543b chore(k8s/homepage): update ghcr.io/gethomepage/homepage docker tag to v1.13.2 2026-09-11 12:15:26 +00:00
renovate 443f0efd47 chore(k8s/firefly): update fireflyiii/core docker tag to version-6.6.6 2026-09-11 12:15:19 +00:00
oleksandr 306da7e003 feat(k8s/podsync): add Renovate config and pin image tag 2026-09-11 15:12:44 +03:00
oleksandr e7ea4b8956 feat(k8s/firefly): add Renovate config and pin image tag 2026-09-11 15:12:43 +03:00
oleksandr ed0b0147e3 feat(k8s/lubelogger): add Renovate config for automated patch/minor updates 2026-09-11 15:12:42 +03:00
oleksandr a0268ecb6f feat(k8s/paperless): add Renovate config for automated patch/minor updates 2026-09-11 15:12:41 +03:00
oleksandr 62bbbbd652 feat(k8s/vikunja): add Renovate config for automated patch/minor updates 2026-09-11 15:12:41 +03:00
oleksandr 67f92d8b23 feat(k8s/homepage): add Renovate config for automated patch/minor updates 2026-09-11 15:12:40 +03:00
renovate f46134f606 chore(k8s/immich): update dependency immich-app/immich to v3.2.0 2026-09-10 18:00:21 +00:00
oleksandr 93b9f6495f feat(k8s/vikunja): deploy Vikunja with Authelia OIDC and restic backups 2026-09-07 15:01:46 +03:00
renovate 72fd37d82d chore(k8s/gitea): update gitea/gitea docker tag to v1.27.3 2026-08-29 18:00:44 +00:00
oleksandr b07a1de547 feat(k8s/infrastructure/authelia): update configuration 2026-08-19 22:17:42 +03:00
renovate cb4460e79a chore(k8s/gitea): update gitea/gitea docker tag to v1.27.2 2026-08-14 00:01:13 +00:00
renovate a37ff99cc7 chore(k8s/media): update dependency seerr-team/seerr to v3.4.1 2026-07-30 12:01:24 +00:00
renovate 9462186e5f chore(k8s/immich): update dependency immich-app/immich to v3.1.0 2026-07-29 18:01:18 +00:00
renovate 8059ce011f chore(k8s/media): update dependency seerr-team/seerr to v3.4.0 2026-07-28 06:00:59 +00:00
renovate 12955f6fa8 chore(k8s/gitea): update gitea/gitea docker tag to v1.27.1 2026-07-28 00:01:09 +00:00
renovate d07650835f chore(k8s/media): update lscr.io/linuxserver/prowlarr docker tag to v2.5.2 2026-07-24 18:00:51 +00:00
renovate 50d4938b75 chore(k8s/immich): update dependency immich-app/immich to v3.0.3 2026-07-15 18:00:46 +00:00
renovate 98d8ea6a96 chore(k8s/media): update lscr.io/linuxserver/radarr docker tag to v6.3.0 2026-07-13 18:01:15 +00:00
renovate 96db8497cd chore(k8s/gitea): update gitea/gitea docker tag to v1.27.0 2026-07-13 18:00:48 +00:00
renovate 106bd3c581 chore(k8s/immich): update dependency immich-app/immich to v3.0.2 2026-07-10 00:00:51 +00:00
renovate a0223ae5e9 chore(k8s/media): update lscr.io/linuxserver/qbittorrent docker tag to v5.2.3 2026-07-08 12:01:11 +00:00
renovate 508a4e51a5 chore(k8s/immich): update dependency immich-app/immich to v3.0.1 2026-07-03 00:00:42 +00:00
renovate 27c23b2430 chore(k8s/immich): update dependency immich-app/immich to v3 2026-07-02 17:43:37 +00:00
oleksandr 60e9ab39d5 feat(mon/synology): add Grafana dashboard + full-coverage snmp.yml 2026-06-29 15:12:28 +03:00
oleksandr 2a7c0030ff feat(mon/synology): scrape DS1821+ via snmp_exporter 2026-06-29 14:58:06 +03:00
oleksandr 58ad6f1162 feat(mon/hyperhdr): scrape node exporter metrics 2026-06-28 15:43:07 +03:00
oleksandr 1c28249258 feat(mon/coreelec): scrape node exporter metrics 2026-06-28 15:40:09 +03:00
renovate a49c3b813f chore(k8s/media): update lscr.io/linuxserver/sonarr docker tag to v4.0.19 2026-06-27 00:01:22 +00:00
renovate c8a5f35f95 chore(k8s/media): update lscr.io/linuxserver/sonarr docker tag to v4.0.18 2026-06-25 00:01:27 +00:00
oleksandr 247eebc63e fix(podsync): enable yt-dlp self_update to fix SABR streaming errors 2026-06-22 22:20:14 +03:00
renovate 0b4826b08a chore(k8s/gitea): update gitea/gitea docker tag to v1.26.4 2026-06-21 18:00:45 +00:00
renovate 558afaf5d0 chore(k8s/gitea): update gitea/gitea docker tag to v1.26.3 2026-06-21 00:01:15 +00:00
oleksandr bf2077b19c feat(mon/homeassistant): scrape Home Assistant Prometheus metrics 2026-06-20 11:30:27 +03:00
oleksandr 8783bc086a feat(mon/unpoller): scrape UniFi controller metrics into Grafana 2026-06-19 21:31:02 +03:00
oleksandr 1d24966003 feat(monitoring): victoria-logs syslog listener for unifi 2026-06-19 17:35:09 +03:00
oleksandr 77ac732143 feat(mon/victoria-logs): enable bundled Grafana dashboards 2026-06-19 15:27:39 +03:00
oleksandr bd3b1eb18d feat(mon/grafana): install victoriametrics-metrics-datasource plugin 2026-06-19 15:23:36 +03:00
oleksandr 4dcdcd0017 refactor(mon): rename victoria-metrics app dir to monitoring 2026-06-19 15:18:53 +03:00
oleksandr 82b3c68597 fix(mon/grafana): use Recreate strategy and disable initChownData 2026-06-19 15:15:12 +03:00
oleksandr 268fa1c5af feat(mon/victoria-logs): add log storage with Grafana datasource 2026-06-19 15:09:38 +03:00
oleksandr 74b85e0f42 feat(mon/victoria-metrics): add metrics, alerting and Grafana stack 2026-06-19 14:50:01 +03:00
Flux bec94d64a4 Add Flux sync manifests 2026-06-19 14:31:05 +03:00
Flux e42d35e016 Add Flux v2.8.8 component manifests 2026-06-19 14:31:02 +03:00
renovate 24248d4186 chore(k8s/media): update lscr.io/linuxserver/qbittorrent docker tag to v5.2.2 2026-06-16 12:01:03 +00:00
renovate fde96ef9d0 chore(k8s/media): update lscr.io/linuxserver/radarr docker tag to v6.2.1 2026-06-11 18:01:19 +00:00
renovate a27ef8c1d8 chore(k8s/media): update lscr.io/linuxserver/prowlarr docker tag to v2.4.0 2026-06-11 18:01:01 +00:00
renovate 31b9091263 chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v10.11.11 2026-06-06 18:00:32 +00:00
renovate eb79961993 chore(k8s/media): update dependency seerr-team/seerr to v3.3.0 2026-06-02 12:01:48 +00:00
renovate aa3ef41304 chore(k8s/media): update lscr.io/linuxserver/qbittorrent docker tag to v5.2.1 2026-05-26 06:00:46 +00:00
renovate 7095e75193 chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v10.11.10 2026-05-25 00:01:02 +00:00
renovate 0c6f9776dc chore(k8s/jellyfin): update jellyfin/jellyfin docker tag to v10.11.9 2026-05-21 06:00:51 +00:00
renovate 0d9a565c3a chore(k8s/gitea): update gitea/gitea docker tag to v1.26.2 2026-05-21 00:01:13 +00:00
oleksandr 5b59c0758d fix(k8s/blog): use relative redirects in nginx 2026-05-17 17:18:44 +03:00
oleksandr d3f0714bc7 fix(k8s/authelia): pin redis chart to 25.5.3 2026-05-12 21:56:59 +03:00
oleksandr 2bd0f29ac6 feat(k8s/gitea): add renovate support 2026-05-12 01:29:19 +03:00
oleksandr d703a633ce feat(k8s/blog): add static blog served via git-sync + nginx 2026-05-11 23:42:06 +03:00
oleksandr 85b5328dd1 feat(k8s/gitea): add act_runner with DinD for Gitea Actions 2026-05-11 22:22:36 +03:00
135 changed files with 22277 additions and 1259 deletions
+7 -5
View File
@@ -26,10 +26,9 @@ homelab-v2/
│ └── configs/ # ClusterIssuer, MetalLB config
├── app/
│ ├── archmirror/
│ ├── blog/
│ ├── external/ # External service vars (e.g. Home Assistant)
│ ├── firefly/
│ ├── gitea/
│ ├── grocy/
│ ├── homepage/
│ ├── immich/
│ ├── jellyfin/
@@ -37,7 +36,8 @@ homelab-v2/
│ ├── media/
│ ├── paperless/
│ ├── pihole/
│ └── podsync/
│ ├── podsync/
│ └── vikunja/
└── docs/
└── k8s-service-spec.md
```
@@ -47,17 +47,19 @@ homelab-v2/
| Service | Description |
|---------|-------------|
| **Gitea** | Self-hosted Git service |
| **Firefly III** | Personal finance manager |
| **Immich** | Photo and video management with face recognition |
| **Jellyfin** | Media streaming with Intel GPU hardware transcoding |
| **Media Stack** | Sonarr, Radarr, Prowlarr, qBittorrent — automated media acquisition |
| **Paperless-ngx** | Document management with OCR |
| **Pi-hole** | DNS sinkhole with ad blocking and encrypted DNS via dnscrypt-proxy |
| **Grocy** | Pantry and grocery management |
| **LubeLogger** | Vehicle maintenance tracker |
| **Homepage** | Dashboard aggregator |
| **Podsync** | Podcast downloader |
| **Archmirror** | Local Arch Linux package repository mirror |
| **Blog** | Personal static blog served via git-sync + nginx (gh-pages branch) |
| **Vikunja** | To-do list and task management, SSO via Authelia OIDC |
| **Reitti** | Personal location history and timeline (PostGIS), SSO via Authelia OIDC |
| **Dawarich** | Location history and timeline (PostGIS + Sidekiq), evaluated as a Reitti replacement; SSO via Authelia OIDC |
## Infrastructure Stack
+4
View File
@@ -0,0 +1,4 @@
creation_rules:
- path_regex: .*\.sops\.yaml
encrypted_regex: "^(data|stringData|email)$"
age: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
@@ -0,0 +1,19 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMStaticScrape
metadata:
name: coreelec
namespace: monitoring
labels:
app.kubernetes.io/name: coreelec
spec:
jobName: coreelec
targetEndpoints:
- targets:
- "coreelec.iot.lviv:9100"
scheme: http
path: /metrics
interval: 60s
scrapeTimeout: 10s
relabelConfigs:
- targetLabel: instance
replacement: coreelec
@@ -0,0 +1,23 @@
apiVersion: v1
kind: Secret
metadata:
name: homeassistant-prometheus
namespace: monitoring
type: Opaque
stringData:
token: ENC[AES256_GCM,data:0+65oM4/ICURAcNcp4c/W1r3fO8GgkPrZgpFGk1rYQF5mSTk8Mu/DrG6TZ6sULQ1otQOdcW/6DtFYZc4xfL29cirZF/XZUfyIm7ENSdMYM1hh3lYhbi9HC/rTXyBP2F9HCIHqVsuNC024WHq/YNNwWhaGScs1mV7yZWtbv+Dqq6Mg6p9iFBzZk+pQ+hJGzO+XUNrXlKYjjsxkLPKSyf9STqIQ4Bzx5B0MwsVfhIwh8NoedTW39cO,iv:8BFLgfE4hs+vYcr3FcGhPZBjJKIamqG3e0f12PngOVY=,tag:L7VGNV+MjfHxPusVPit7Ww==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnZXZ4enk0UVZpRTVnVnhL
UnNUTWFiWkczT0d0M1FvK3hnenhqMzYwWURFCjlJU3E0R2NXWFU0d0ppRjI0WXd5
djQ0d2VQQXI5bFp4YmhBU040V3JvbGsKLS0tIG1TKyt5SmVraTVMSFUxODdLTXlL
MDNXVDJMa3ZWMzJZQlVrYnN6dnJVYVkKIbBebz4SiKgwL+TI6k2l6p3r+99wc6e9
LZpX9jtVZtIYKyQDlWsEXz6cEzBh2IQyoLS8RYFWG2eYpN15fvIu7w==
-----END AGE ENCRYPTED FILE-----
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-06-20T08:26:05Z"
mac: ENC[AES256_GCM,data:tyKGTUZHUd5CTxOH/vkDSxAXast6w5moVPxQWh54d/xOqasKw+fcFOzuYq81TgBRagM5BKHT3EqF1B7dr0TRZnT8s+LjwivWGfDCBoDFVtCnX3vA+mgIWaN/12fR3WJ4+dgpvoMwR4sFGFbvN6tozyDA6dPOYzOpOOM/VJxbdDw=,iv:VLu8bborH6YLoriseWympgJCNV08MZqVz7rF1/+o6BQ=,tag:PQkphKrdkNVsWipo6ge/bw==,type:str]
version: 3.13.1
@@ -0,0 +1,22 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMStaticScrape
metadata:
name: homeassistant
namespace: monitoring
labels:
app.kubernetes.io/name: homeassistant
spec:
jobName: homeassistant
targetEndpoints:
- targets:
- "http://homeassistant.iot.lviv:8123"
scheme: http
path: /api/prometheus
interval: 60s
scrapeTimeout: 30s
bearerTokenSecret:
name: homeassistant-prometheus
key: token
relabelConfigs:
- targetLabel: instance
replacement: homeassistant
@@ -0,0 +1,19 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMStaticScrape
metadata:
name: hyperhdr
namespace: monitoring
labels:
app.kubernetes.io/name: hyperhdr
spec:
jobName: hyperhdr
targetEndpoints:
- targets:
- "hyperhdr.iot.lviv:9100"
scheme: http
path: /metrics
interval: 60s
scrapeTimeout: 10s
relabelConfigs:
- targetLabel: instance
replacement: hyperhdr
+17
View File
@@ -0,0 +1,17 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: apps
namespace: flux-system
spec:
interval: 10m
path: ./kubernetes-monitoring/apps
prune: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
@@ -0,0 +1,17 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: victoria-logs-grafana-datasource
namespace: monitoring
labels:
# Picked up automatically by the Grafana datasource sidecar (vmstack chart).
grafana_datasource: "1"
data:
victoria-logs-datasource.yaml: |
apiVersion: 1
datasources:
- name: VictoriaLogs
type: victoriametrics-logs-datasource
access: proxy
url: http://victoria-logs.monitoring.svc:9428
isDefault: false
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
@@ -0,0 +1,60 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: victoria-logs-single
namespace: flux-system
spec:
chart:
spec:
chart: victoria-logs-single
version: 0.13.8
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: victoria-metrics
namespace: flux-system
targetNamespace: monitoring
interval: 30m
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
server:
fullnameOverride: victoria-logs
retentionPeriod: "30d"
persistentVolume:
enabled: true
storageClassName: local-path
size: 20Gi
# NodePort so an external Alloy (e.g. the Talos DaemonSet) can push logs
# by IP, independent of DNS. In-cluster Grafana uses the ClusterIP DNS name.
service:
type: NodePort
nodePort: 30429
clusterIP: ""
syslog:
udp:
- name: syslog-udp
value: ":514"
useRemoteIP: true
useLocalTimestamp: true
# Scraped by the stack's vmagent so ingestion stalls can alert.
vmServiceScrape:
enabled: true
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
memory: 512Mi
# Ship the chart's dashboards (victorialogs-single-node, vector-k8s-monitoring)
# as ConfigMaps; the grafana_dashboard label makes the vmstack Grafana
# dashboard sidecar import them automatically.
dashboards:
enabled: true
labels:
grafana_dashboard: "1"
@@ -0,0 +1,136 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: victoria-metrics-k8s-stack
namespace: flux-system
spec:
chart:
spec:
chart: victoria-metrics-k8s-stack
version: 0.84.0
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: victoria-metrics
namespace: flux-system
targetNamespace: monitoring
interval: 30m
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
# Operator bundles the VictoriaMetrics CRDs (plain manifests, applied by Flux SSA).
victoria-metrics-operator:
enabled: true
crds:
plain: true
# Single-node TSDB. NodePort so the in-cluster Talos vmagent can remote_write
# and we can reach it by IP even when DNS (pihole on Talos) is down.
vmsingle:
enabled: true
spec:
retentionPeriod: "12" # months — VM is very space-efficient
storage:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 30Gi
serviceSpec:
useAsDefault: true
spec:
type: NodePort
ports:
- name: http
port: 8428
targetPort: 8428
protocol: TCP
nodePort: 30428
# Local scrape of the Pi/k3s itself (node-exporter, kube-state-metrics, kubelet).
vmagent:
enabled: true
vmalert:
enabled: true
# k3s runs scheduler/controller-manager in one binary with no separate
# scrape endpoints, and uses kine instead of etcd — disabling these drops
# the empty scrape pools and their always-firing rules.
kubeScheduler:
enabled: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
alertmanager:
enabled: true
spec:
# Mounted at /etc/vm/secrets/alertmanager-telegram/ (bot_token, chat_id).
secrets:
- alertmanager-telegram
config:
route:
receiver: telegram
group_by: ["alertname", "job"]
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
routes:
- receiver: blackhole
matchers:
- alertname=~"Watchdog|InfoInhibitor"
- receiver: blackhole
matchers:
- severity="info"
inhibit_rules:
- source_matchers:
- severity="critical"
target_matchers:
- severity="warning"
equal: ["alertname", "job"]
receivers:
- name: blackhole
- name: telegram
telegram_configs:
- bot_token_file: /etc/vm/secrets/alertmanager-telegram/bot_token
chat_id_file: /etc/vm/secrets/alertmanager-telegram/chat_id
send_resolved: true
grafana:
enabled: true
# SQLite DB on an RWO local-path volume — never run two pods at once.
deploymentStrategy:
type: Recreate
# The volume already carries fsGroup: 472 and 472-owned data; the chown
# init container drops DAC_OVERRIDE and can't traverse Grafana's 0700
# render dirs, so it's both redundant and breaks rollouts here.
initChownData:
enabled: false
# Native VictoriaMetrics datasource plugins (signed, from Grafana catalog).
# - metrics: backs the "VictoriaMetrics (DS)" datasource the chart
# provisions by default (defaultDatasources.victoriametrics) — MetricsQL.
# - logs: backs our VictoriaLogs datasource (configmap-logs-datasource.yaml).
plugins:
- victoriametrics-metrics-datasource
- victoriametrics-logs-datasource
# Native Grafana login — independent of Authelia (which lives in Talos).
admin:
existingSecret: grafana-admin
userKey: admin-user
passwordKey: admin-password
persistence:
enabled: true
type: pvc
storageClassName: local-path
size: 5Gi
# NodePort so Grafana is reachable by IP without depending on DNS.
service:
type: NodePort
nodePort: 30300
@@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: victoria-metrics
namespace: flux-system
spec:
interval: 1h
url: https://victoriametrics.github.io/helm-charts/
@@ -0,0 +1,24 @@
apiVersion: v1
kind: Secret
metadata:
name: alertmanager-telegram
namespace: monitoring
type: Opaque
stringData:
bot_token: ENC[AES256_GCM,data:V/SDGyp/M7Qqa22fiKYMZ2CzkivNBl24hv9cVEFPl50NySKY0jqIPnVWLtm11g==,iv:UfHMfvu9b2CaXhImng5OLVej13zHrptKQOaPUbjXiw0=,tag:SFAGUaM0XYvbVc1CRrJepQ==,type:str]
chat_id: ENC[AES256_GCM,data:HRDHrCMMurk=,iv:hP7UB23qWZ+YukoP3B7QolUIfv2FgJtTfM1OLe/nMMY=,tag:JTwjQwDLQaG5LfKQGV73iw==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwNXF4V1N3bmpxbWN5YUVR
UDNNdm1IL2hHWGgzRENvK0xWdkhFc1drRGhBCjdQc3hydG1RN3ZocUZnZGpKRG5i
K1RXUTdiZ29hWWdjLzZVMCtMb1NZbjQKLS0tIHpDcTNDeFpJUU5CeU5PSFNWWnBo
UmJNT1hVL0h3c3hWOGQxM21uWk14amsKIyFxmszp94FteSUXyAh4hrDNbPBja4dT
QL6wFw8GkYtFeucIgnvbjHWWi98QMwE1xEt930uMeNyRnLFqFfUtWw==
-----END AGE ENCRYPTED FILE-----
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-10-03T20:07:21Z"
mac: ENC[AES256_GCM,data:k7rBxhWrC2DFvFcoB6Wqufzk6vLtWFypITl/JK2qd6Vj9m7XKBZdiH5mCSDNfo4UK+ygFnGQ8oidkgcCrbGYqKFK8Q67+LQ9o1OMOXcZDkz6UzNRaLh3aO5NqbdleV36cICX6qpG1uO6GL6p5g121vRztQT+Qg1L0BkIMrF+sJQ=,iv:y8figgbzUg1gf0zug534Fvd9jdB00JiA7LoWXUm3/Lw=,tag:ccP3IKdWwMIJqP0s/U7NQA==,type:str]
version: 3.13.3
@@ -0,0 +1,23 @@
apiVersion: v1
kind: Secret
metadata:
name: grafana-admin
namespace: monitoring
stringData:
admin-user: ENC[AES256_GCM,data:KDBvi5I=,iv:tNHZ9IABD5l210PTjKhN+q4vMnmJLAP99fzzONpwwxg=,tag:YU62qttxO95+P1VlpVn0qA==,type:str]
admin-password: ENC[AES256_GCM,data:HjZYVYs2t6Oml52fjFS2PymFvp1GXRAJXCewxA==,iv:LK1Yf0teLPITo2pK4lAaeub3Ieyl90uRrZeBD3LXy2o=,tag:7I8fT/SSzU7JkcreNlI8rw==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBobmoydk9FaHFkQXEzQU03
YnZ4RjlxVk40dkk5RGFya0Foeit1dEpWRkdZCmJ4M3pxcHl1S1FUTnlGbEtEeXJT
ZDN4c0dPYktwTXgveExQUWFsYlEwTmsKLS0tIElmTDNCM2dRR3VtRGRpeHVCSXVl
ckV1N3h1bmlOdjhnRXRZNExJank5Q2MKMsA6BkdzOrTQUN0uPSUQSa9aYLil2Chb
vjpFp1j6x9EwvKHLY7mry15ze7gjUtUt8e97zO9ZlturiPigl0jeoQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-06-19T11:46:25Z"
mac: ENC[AES256_GCM,data:h7Bei7jgHb4dFIk6Vax8fL7uA0zlqLUtpQgYTNx7i+yssAXcKEr989WgbLqQY8Rx1BSj27rFHv2Y4P+K2ump+J930lZIe1NNBNiFnYbI2vN0TYrlVOAETk6c0DoqygG7Mmlq+kCGGml4A+4XuQcCA4ZYzBYE4QvGq/WS6bOCFXI=,iv:zE3GhfkvJl5Z4klGWHgw7iZmxOff+Mlf7aXtMWTKUEs=,tag:q0mxhLxK2SIujVa+mhiKVw==,type:str]
version: 3.13.1
@@ -0,0 +1,18 @@
apiVersion: v1
kind: Service
metadata:
name: victoria-logs-syslog
namespace: monitoring
spec:
type: NodePort
externalTrafficPolicy: Local
selector:
app: server
app.kubernetes.io/instance: monitoring-victoria-logs-single
app.kubernetes.io/name: victoria-logs-single
ports:
- name: syslog-udp
protocol: UDP
port: 514
targetPort: 514
nodePort: 30514
@@ -0,0 +1,36 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMRule
metadata:
name: homelab
namespace: monitoring
spec:
groups:
- name: unifi-gateway
rules:
# Baseline load is 2–5; the 2026-09-26 memory-pressure incident sat at 15–25.
- alert: UnifiGatewayHighLoad
expr: avg_over_time(unpoller_device_load_average_1{type="udm"}[15m]) > 10
for: 15m
labels:
severity: warning
annotations:
summary: "UniFi gateway load is {{ $value | humanize }} (15m avg)"
# Baseline is 84–92% and creeps up ~1%/3 days until something restarts.
- alert: UnifiGatewayMemoryHigh
expr: avg_over_time(unpoller_device_memory_utilization_ratio{type="udm"}[30m]) > 0.93
for: 30m
labels:
severity: warning
annotations:
summary: "UniFi gateway memory at {{ $value | humanizePercentage }} (30m avg)"
- name: victoria-logs
rules:
# The gateway alone logs DHCP chatter every few minutes, so zero rows
# means the syslog path is broken (e.g. the 2026-09-22 IP change).
- alert: SyslogIngestionStalled
expr: sum(rate(vl_rows_ingested_total{type="syslog_udp"}[30m])) == 0
for: 15m
labels:
severity: warning
annotations:
summary: "VictoriaLogs has received no syslog for 45m"
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: snmp-exporter
namespace: monitoring
labels:
app.kubernetes.io/name: snmp-exporter
app.kubernetes.io/instance: snmp-exporter
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: snmp-exporter
template:
metadata:
labels:
app.kubernetes.io/name: snmp-exporter
app.kubernetes.io/instance: snmp-exporter
spec:
securityContext:
runAsNonRoot: true
runAsUser: 65534
runAsGroup: 65534
seccompProfile:
type: RuntimeDefault
containers:
- name: snmp-exporter
image: quay.io/prometheus/snmp-exporter:v0.30.1
args:
# Vendored snmp.yml (configmap) — `synology` module with full coverage
# (Synology private trees + IF-MIB + HOST-RESOURCES + UCD), matched to the dashboard.
- "--config.file=/etc/snmp-config/snmp.yml"
# Our SNMPv3 credentials; snmp_exporter merges multiple --config.file flags.
- "--config.file=/etc/snmp-auth/auth.yml"
ports:
- name: metrics
containerPort: 9116
protocol: TCP
volumeMounts:
- name: config
mountPath: /etc/snmp-config
readOnly: true
- name: auth
mountPath: /etc/snmp-auth
readOnly: true
readinessProbe:
httpGet:
path: /
port: metrics
initialDelaySeconds: 5
periodSeconds: 15
livenessProbe:
httpGet:
path: /
port: metrics
initialDelaySeconds: 15
periodSeconds: 30
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi
volumes:
- name: config
configMap:
name: snmp-exporter-config
- name: auth
secret:
secretName: snmp-exporter-auth
@@ -0,0 +1,23 @@
apiVersion: v1
kind: Secret
metadata:
name: snmp-exporter-auth
namespace: monitoring
type: Opaque
stringData:
auth.yml: ENC[AES256_GCM,data:/UESrSn3ezINnFou7hiXYrqECjStumoIXBQm2q9Gxe9QaCg5AI5dl+ZNAgo+1YIrQbf1BrQgZttXjSAMn+Rf6nDhOEu44i1AbbZKXT6bm3fzuEzPcT5EIf5BQuGpnwXmpy3Gh+5Zi/fs0xO/cSlIiEkagNV7BO40Nl9ktUt4zKyW9GI/zf/T4iTUTlLWqSogDBE59gnBXa9fvNuHx8jIufpzhnnk65keoybEewW3/00Sa9Q+J31VvQ/w3DC205aad1njU8PIP5jPAn97pQeSZPY9iNNexxpb0+5IdSHpcKlT1aEigR8TqYc/,iv:4D6jFm9mA9BglHqsvTrrYxtYus1JWmCWEu0HQALET+4=,tag:It3uGYRvYPCL4+xvFo7P0A==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzdUFHTFFjMXpzbFAyN00x
N0FrRHJnT2ljYThUcndHNGIyK1RJOWp5Z3c0CnFNQzkzZk5NWDgwN3ZiRTBjYU9S
SFpkTmJkM2VLbEJzZEtxYy9DVFB6OXcKLS0tIFZzWTZNOFNXRzdERGFWanZTYkp1
R2dvMmhBTjQyOS85UzIxYlN0Wm8wU1EKmWA+lkDNqzpyqEd+PpI6PDi9L/Vlp1RP
Y6WVvvOi9OKc4UaDxXVSEgLlA3DNBg2BaY2jEhMJlqLJyknHY4un0g==
-----END AGE ENCRYPTED FILE-----
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-06-29T11:52:50Z"
mac: ENC[AES256_GCM,data:/zoY3ZS7ipOjt1YY2OQ5SCRITX9WXI+BXmrmlRfoJ9M+lJHomgbTkdqu70jcgYXTm/ARlTMrMrk3zCQqPBPc9bYbz7wXh8o0PLyCUQ1ccSGR5hWjywsRjm7nfM25p0UYvEllj+KywRnY7ArbJvzGcLYEtHmUvuyRs2HG5Tv7KnM=,iv:je3IVh8HpLzRGToU5Znuq49K2H+hxEM94WCP1c39mjg=,tag:sf6USL4a2/vZXQT7eMerBA==,type:str]
version: 3.13.1
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: snmp-exporter
namespace: monitoring
labels:
app.kubernetes.io/name: snmp-exporter
app.kubernetes.io/instance: snmp-exporter
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: snmp-exporter
ports:
- name: metrics
port: 9116
targetPort: metrics
protocol: TCP
@@ -0,0 +1,31 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMStaticScrape
metadata:
name: synology
namespace: monitoring
labels:
app.kubernetes.io/name: snmp-exporter
spec:
jobName: synology
targetEndpoints:
# snmp_exporter is a proxy: vmagent scrapes the exporter, which then queries
# the NAS over SNMP. The device address is passed as the `target` param and
# the request is redirected to the exporter Service via relabeling below.
- targets:
- "synology.storage.lviv"
scheme: http
path: /snmp
params:
module:
- synology
auth:
- synology_v3
interval: 60s
scrapeTimeout: 30s
relabelConfigs:
- sourceLabels: [__address__]
targetLabel: __param_target
- sourceLabels: [__param_target]
targetLabel: instance
- targetLabel: __address__
replacement: snmp-exporter.monitoring.svc:9116
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,253 @@
apiVersion: v1
data:
client-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
information for clients in a UniFi network using Prometheus.","editable":true,"gnetId":11315,"graphTooltip":1,"id":null,"iteration":1592125485014,"links":[{"asDropdown":true,"icon":"external
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"columns":[],"datasource":"VictoriaMetrics","description":"This
table represents current (latest) data.\nBytes columns are lifetime totals.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"80%","gridPos":{"h":13,"w":24,"x":0,"y":0},"id":21,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":9,"desc":true},"styles":[{"alias":"Bytes
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#A","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Chan","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"channel","thresholds":[],"type":"string","unit":"short"},{"alias":"Device
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Radio","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"AP
/ Radio / Proto","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54,
0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_desc","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_proto","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"bssid","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ap_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"wired","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"vlan","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Network","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"network","thresholds":[],"type":"string","unit":"short"},{"alias":"OUI","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"oui","thresholds":[],"type":"string","unit":"short"},{"alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"alias":"ESSID","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"essid","thresholds":[],"type":"string","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Sw
Port","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_port","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Bytes
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"s"}],"targets":[{"expr":"sum
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_receive_bytes_total{wired!=\"true\",
site_name=~\"$Site\", name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_transmit_bytes_total{wired!=\"true\",site_name=~\"$Site\",
name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_uptime_seconds{wired!=\"true\",site_name=~\"$Site\",
name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Wireless
Devices","transform":"table","type":"table-old"},{"columns":[],"datasource":"VictoriaMetrics","description":"This
table represents current (latest) data.\nBytes columns are lifetime totals.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"80%","gridPos":{"h":12,"w":24,"x":0,"y":13},"hideTimeOverride":false,"id":22,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":9,"desc":true},"styles":[{"alias":"Time","align":"auto","dateFormat":"YYYY-MM-DD
HH:mm:ss","link":false,"linkUrl":"http://$__cell","pattern":"Time","type":"hidden"},{"alias":"Sw
Port","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"decimals":0,"pattern":"sw_port","thresholds":[],"type":"number","unit":"short"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Device
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"link":false,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value","thresholds":[],"type":"number","unit":"s"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Network","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"network","thresholds":[],"type":"string","unit":"short"},{"alias":"OUI","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"oui","thresholds":[],"type":"string","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"wired","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #A","thresholds":[],"type":"number","unit":"s"},{"alias":"Bytes
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Bytes Tx","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"}],"targets":[{"expr":"sum
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_uptime_seconds{wired=\"true\",
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","instant":true,"interval":"","refId":"A"},{"expr":"sum
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_receive_bytes_total{wired=\"true\",
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"B"},{"expr":"sum
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_transmit_bytes_total{wired=\"true\",
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"C"}],"timeFrom":null,"title":"Wired
Devices","transform":"table","type":"table-old"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
wireless channel usage w/ wired client counts.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":0,"y":25},"hideTimeOverride":false,"id":9,"interval":null,"legend":{"header":"","percentage":true,"show":true,"values":false},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"2","targets":[{"expr":"count
by (hostname) (unpoller_client_uptime_seconds{site_name=~\"$Site\", name=~\"$Wired\",
sw_name=~\"$Switch\"})","instant":true,"legendFormat":"Wired","refId":"A"},{"expr":"count
by (channel) (unpoller_client_roam_count_total{site_name=~\"$Site\", name=~\"$Wireless\",
ap_name=~\"$AP\"})","instant":true,"interval":"$Smooth","legendFormat":"Channel
{{channel}}","refId":"B"}],"timeFrom":null,"title":"Clients / Channel","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"25%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
how many clients are connected to which radios/APs.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":8,"y":25},"hideTimeOverride":false,"id":11,"interval":null,"legend":{"header":"","percentage":true,"show":true,"values":false},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
by (radio_proto) (unpoller_client_roam_count_total{site_name=~\"$Site\", name=~\"$Wireless\",
ap_name=~\"$AP\"})","instant":true,"interval":"$Smooth","legendFormat":"{{radio_proto}}","refId":"A"}],"timeFrom":null,"title":"Clients
/ AP Radio","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":"0.01"},"datasource":"VictoriaMetrics","decimals":0,"description":"This
shows an OUI breakdown from Unifi''s perspective. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":16,"y":25},"hideTimeOverride":false,"id":12,"interval":null,"legend":{"header":"Count","percentage":true,"percentageDecimals":0,"show":true,"sort":"current","sortDesc":true,"values":true},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":1,"targets":[{"expr":"count
by (oui) (unpoller_client_uptime_seconds{site_name=~\"$Site\", name=~\"$Wireless\",
ap_name=~\"$AP\"})","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"
w {{oui}}","refId":"A"},{"expr":"count by (oui) (+unpoller_client_uptime_seconds{site_name=~\"$Site\",
name=~\"$Wired\", sw_name=~\"$Switch\"})","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"e {{oui}}","refId":"B"}],"timeFrom":null,"title":"Client
MAC OUI Breakdown","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Bandwidth
usage per wireless devices as reported by the UAPs. Rx is on the negative axis.
Does not include amazon devices.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":14,"w":24,"x":0,"y":35},"hiddenSeries":false,"id":3,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:323","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
{{mac}} Tx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
{{mac}} Rx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
Bandwidth / Wireless Devices","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Wired
TX / RX bytes per second (calculated in 30 second buckets). Rx is on the negative
axis. Does not include amazon and camera devices. Unaffected by the AP setting.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":49},"hiddenSeries":false,"id":2,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:398","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
{{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","intervalFactor":1,"legendFormat":"{{name}}
{{mac}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Switch
Bandwidth / Wired Devices","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Amazon
Devices TX / RX bytes per second. Rx is on the negative axis. My home network
has a ton of Amazon devices, so I broke them out separately. If you don''t have
Amazon devices, or they have different names, you can edit the query to use a
different name. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":0,"y":66},"hiddenSeries":false,"id":23,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:469","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name=~\"^amazon.*\",
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
{{name}} {{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name=~\"^amazon.*\",
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
{{name}} {{mac}} Rx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name=~\"^amazon.*\",
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
{{name}} {{mac}} Tx","refId":"C"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name=~\"^amazon.*\",
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
{{name}} {{mac}} Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Bandwidth / Echos & FireTVs","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Cameras
TX / RX bytes per second. Rx is on the negative axis. This graph shows any device
with the word \"camera\" in its name and has nothing to do with UniFi Protect/video
products. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":12,"y":66},"hiddenSeries":false,"id":15,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"avg","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:510","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{ap_name=~\"$AP\",
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"instant":false,"interval":"$Smooth","legendFormat":"w
{{name}} {{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{ap_name=~\"$AP\",
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
{{name}} {{mac}} Rx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_transmit_bytes_total{sw_name=~\"$Switch\",
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
{{name}} {{mac}} Tx","refId":"C"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{sw_name=~\"$Switch\",
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
{{name}} {{mac}} Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Bandwidth: Cameras","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":77},"hiddenSeries":false,"id":7,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"min","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_rssi_db{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"1m","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Received
Signal Strength Indicator","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dB","label":"RSSI
Quality","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":77},"hiddenSeries":false,"id":10,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":false,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_radio_signal_db{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","instant":false,"interval":"$Smooth","intervalFactor":1,"legendFormat":"{{name}}
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Wireless
Signal","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Signal
Power","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":86},"hiddenSeries":false,"id":6,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_noise_db{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
Client Stats / Noise","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dB","label":"Noise","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Client
reported transmit rate.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":86},"hiddenSeries":false,"id":19,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_radio_transmit_rate_bps{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"TX
Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":94},"hiddenSeries":false,"id":24,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg
by ($Identifier) (rate(unpoller_client_wifi_attempts_transmit_total{ap_name=~\"$AP\",
site_name=~\"$Site\", name=~\"$Wireless\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Wifi Tx Attempts","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Attempts
/ Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Client
reported receive rate.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":94},"hiddenSeries":false,"id":26,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_radio_receive_rate_bps{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"RX
Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":102},"hiddenSeries":false,"id":30,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (rate(unpoller_client_transmit_retries_total{ap_name=~\"$AP\",
site_name=~\"$Site\", name=~\"$Wireless\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Transmit Retries","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Tx
Retries / Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":102},"hiddenSeries":false,"id":29,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_radio_transmit_power_dbm{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Transmit Power","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Transmit
Power dBm","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":110},"hiddenSeries":false,"id":25,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_anomalies{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Anomalies","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Anomalies","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":110},"hiddenSeries":false,"id":31,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_satisfaction_ratio{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Satisfaction","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"Client
Satisfaction","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":118},"hiddenSeries":false,"id":28,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_roam_count_total{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Roam
Count","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Roam
Count","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":118},"hiddenSeries":false,"id":27,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":false,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by ($Identifier) (unpoller_client_ccq_ratio{ap_name=~\"$AP\", site_name=~\"$Site\",
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Connection Quality %","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"CCQ","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","unifi-poller"],"templating":{"list":[{"allValue":null,"current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds,source)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_client_uptime_seconds,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":2,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{source=~\"$Controller\"},site_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Site","options":[],"query":"label_values(unpoller_client_uptime_seconds{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},ap_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"AP","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},ap_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},sw_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Switch","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},sw_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
ap_name=~\"$AP\", wired=\"false\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Wireless","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
ap_name=~\"$AP\", wired=\"false\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
sw_name=~\"$Switch\", wired=\"true\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Wired","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
sw_name=~\"$Switch\", wired=\"true\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"},{"selected":false,"text":"1h","value":"1h"}],"query":"30s,1m,2m,5m,10m,15m,30m,1h","skipUrlSync":false,"type":"custom"},{"allValue":null,"current":{"selected":true,"text":"name","value":"name"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Identifier","options":[{"selected":true,"text":"name","value":"name"},{"selected":false,"text":"name,mac","value":"name,mac"}],"query":"name,
name\\,mac","queryValue":"","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
Client Insights - Prometheus","uid":"jMfvAjxWz","version":30}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/part-of: unpoller
grafana_dashboard: "1"
name: unpoller-dashboard-client-insights
namespace: monitoring
@@ -0,0 +1,88 @@
apiVersion: v1
data:
network-sites.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0 Displays detailed
information for network Sites in a UniFi controller using Prometheus.","editable":true,"gnetId":11311,"graphTooltip":1,"id":null,"iteration":1580616399315,"links":[{"asDropdown":true,"icon":"external
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":0,"y":0},"id":41,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_switches)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"USW","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":3,"y":0},"id":42,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_aps)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"UAP","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":6,"y":0},"id":43,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_gateways)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"USG","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":9,"y":0},"id":44,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_stations)","format":"time_series","instant":false,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Stations","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"content":"Each
site contains 5 subsystems: wan, lan, wlan, www, vpn. Each subsystem contains
data specific to that system. \nAll subsystems except vpn have data rate. VPN
has data transfer though.\nThere''s not a ton of juicy info here, and most of
it can be gleaned on other the dashboards.\nThe row below is purposely collapsed
because some installationd have hundreds of sites. \nLoading them all at once
is often not possible.\n","gridPos":{"h":4,"w":12,"x":12,"y":0},"id":37,"links":[],"mode":"html","options":{},"timeFrom":null,"timeShift":null,"title":"Information","type":"text"},{"collapsed":true,"gridPos":{"h":1,"w":24,"x":0,"y":4},"id":4,"panels":[{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"s","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":6,"x":0,"y":5},"id":40,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"sparkline":{"fillColor":"rgba(31, 118,
189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"unpoller_site_uptime_seconds","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Uplink
Uptime","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"These
are counters, totals, but they don''t change much so the graph does not show rate.","fill":0,"fillGradient":0,"gridPos":{"h":11,"w":18,"x":6,"y":5},"hiddenSeries":false,"id":38,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_iots{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
IoT","refId":"A"},{"expr":"unpoller_site_adopted{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Adopted","refId":"B"},{"expr":"unpoller_site_disabled{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Disabled","refId":"C"},{"expr":"unpoller_site_disconnected{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Disconnected","refId":"D"},{"expr":"unpoller_site_pending{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Pending","refId":"E"},{"expr":"unpoller_site_gateways{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Gateways","refId":"F"},{"expr":"unpoller_site_switches{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Switches","refId":"G"},{"expr":"unpoller_site_intenet_drops_total{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Drops","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Item
Counts","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Item
Counts","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"cacheTimeout":null,"datasource":"VictoriaMetrics","gridPos":{"h":8,"w":3,"x":0,"y":8},"id":32,"links":[],"options":{"fieldOptions":{"calcs":["lastNotNull"],"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":400,"min":10,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"#299c46","value":null},{"color":"rgba(237,
129, 40, 0.89)","value":100},{"color":"#d44a3a","value":200}]},"title":"Latency","unit":"s"},"overrides":[],"values":false},"orientation":"horizontal","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"targets":[{"expr":"unpoller_site_latency_seconds{site_name=~\"$Site\"}","instant":true,"interval":"$Smooth","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"","type":"gauge"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","gridPos":{"h":8,"w":3,"x":3,"y":8},"id":33,"links":[],"options":{"fieldOptions":{"calcs":["lastNotNull"],"defaults":{"color":{"mode":"thresholds"},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":200,"min":1,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"#299c46","value":null},{"color":"rgba(237,
129, 40, 0.89)","value":50},{"color":"#d44a3a","value":100}]},"title":"Speed Test
Ping","unit":"s"},"overrides":[],"values":false},"orientation":"horizontal","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"targets":[{"expr":"unpoller_site_speedtest_ping{site_name=~\"$Site\"}","interval":"$Smooth","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"","type":"gauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"Shows
data transfer for each subsystem on the site. RX is on the negative axis.","fill":0,"fillGradient":0,"gridPos":{"h":8,"w":24,"x":0,"y":16},"hiddenSeries":false,"id":15,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"maxPerRow":2,"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_transmit_rate_bytes{site_name=~\"$Site\",
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Tx","refId":"A"},{"expr":"unpoller_site_receive_rate_bytes{site_name=~\"$Site\",
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
Transfer","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"Bps","label":"bytes
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
graphs shows clients connected to the site.","fill":0,"fillGradient":0,"gridPos":{"h":7,"w":24,"x":0,"y":24},"hiddenSeries":false,"id":2,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeat":null,"repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_users{site_name=~\"$Site\",
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Users","refId":"A"},{"expr":"unpoller_site_guests{site_name=~\"$Site\", subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Guests","refId":"B"},{"expr":"unpoller_site_remote_user_active{site_name=~\"$Site\",
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Active","refId":"C"},{"expr":"unpoller_site_remote_user_inactive{site_name=~\"$Site\",
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Inactive","refId":"D"},{"expr":"unpoller_site_stations{site_name=~\"$Site\", subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
Stations","refId":"E"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
Counts","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
graphs shows clients connected to the site.","fill":0,"fillGradient":0,"gridPos":{"h":7,"w":24,"x":0,"y":31},"hiddenSeries":false,"id":39,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_site_remote_user_transmit_bytes_total{site_name=~\"$Site\"}[$__interval])","interval":"$Smooth","legendFormat":"VPN
Users Tx","refId":"A"},{"expr":"rate(unpoller_site_remote_user_receive_bytes_total{site_name=~\"$Site\"}[$__interval])","interval":"$Smooth","legendFormat":"VPN
Users Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"VPN
Users Data Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"Bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
graph only works if DPI is enabled on the controller and DPI collection is enabled
in UniFi Poller. Rx is on the negative axis.","fill":0,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":38},"hiddenSeries":false,"id":45,"legend":{"alignAsTable":true,"avg":true,"current":false,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by (category) (rate(unpoller_site_dpi_receive_bytes{site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"{{category}}
Rx","refId":"A"},{"expr":"sum by (category) (rate(unpoller_site_dpi_transmit_bytes{site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"{{category}}
Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
Transfer by Category","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"Bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Site","title":"Site:
$Site","type":"row"}],"refresh":"1m","schemaVersion":22,"style":"dark","tags":["unifi","unifi-poller"],"templating":{"list":[{"allValue":null,"current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_site_transmit_rate_bytes,source)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_site_transmit_rate_bytes,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_site_transmit_rate_bytes{source=~\"$Controller\"},site_name)","hide":2,"includeAll":true,"label":"","multi":false,"name":"Site","options":[],"query":"label_values(unpoller_site_transmit_rate_bytes{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(subsystem)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Subsystem","options":[],"query":"label_values(subsystem)","refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":true,"text":"1m","value":"1m"},{"selected":false,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"}],"query":"30s,1m,2m,5m,10m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"5s","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
Network Sites - Prometheus","uid":"9WaGWZaZk","version":9}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/part-of: unpoller
grafana_dashboard: "1"
name: unpoller-dashboard-network-sites
namespace: monitoring
@@ -0,0 +1,266 @@
apiVersion: v1
data:
uap-insights.json: '{"annotations":{"list":[{"$$hashKey":"object:69","builtIn":1,"datasource":"--
Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
information for wireless access points in a UniFi network using Prometheus.","editable":true,"gnetId":11314,"graphTooltip":1,"id":null,"iteration":1592125488769,"links":[{"asDropdown":true,"icon":"external
link","includeVars":false,"keepTime":true,"tags":["unifi-poller","unifi"],"title":"UniFi
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"content":"<br>\n<br>\n<center><b><font
size=\"6px\">Unifi UAP</font></b></center>\n","datasource":"${DS_UNIFI_POLLER}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":34,"links":[],"mode":"html","title":"","transparent":true,"type":"text"},{"aliasColors":{"Channel
11":"#37872D","Channel 36":"#1F60C4","Channel 44":"#8F3BB8"},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
wireless channel usage w/ wired client counts.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":6,"x":4,"y":0},"hideTimeOverride":false,"id":52,"interval":null,"legend":{"header":"","percentage":true,"percentageDecimals":0,"show":true,"values":false},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
by (channel) (unpoller_client_roam_count_total{site_name=~\"$Site\", ap_name=~\"$AP\"})\n","instant":false,"interval":"$Smooth","legendFormat":"Ch
{{channel}}","refId":"B"}],"timeFrom":null,"title":"Clients / Channel","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{"ac":"#37872D","g":"#E0B400","na":"#1F60C4","ng":"#8F3BB8"},"breakPoint":"25%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
how many clients are connected to which radios/APs.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":7,"x":10,"y":0},"hideTimeOverride":false,"id":54,"interval":null,"legend":{"header":"","percentage":true,"show":true,"sort":"current","sortDesc":true,"values":true},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
by (radio_desc) (unpoller_client_uptime_seconds{site_name=~\"$Site\", ap_name=~\"$AP\"})","instant":false,"interval":"$Smooth","legendFormat":"{{radio_desc}}","refId":"A"}],"timeFrom":null,"title":"Clients
/ AP Radio","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":"0.01"},"datasource":"VictoriaMetrics","decimals":0,"description":"This
shows an OUI breakdown from Unifi''s perspective.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":7,"x":17,"y":0},"hideTimeOverride":false,"id":56,"interval":null,"legend":{"header":"Count","percentage":true,"percentageDecimals":0,"show":true,"sortDesc":false,"values":true},"legendType":"Right
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":1,"targets":[{"expr":"count
by (oui) (unpoller_client_uptime_seconds{site_name=~\"$Site\", ap_name=~\"$AP\"})","instant":false,"interval":"$Smooth","legendFormat":"e
{{oui}}","refId":"A"}],"timeFrom":null,"title":"Client / MAC OUI","transparent":true,"type":"piechart","valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"VictoriaMetrics","description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":2,"x":0,"y":3},"id":48,"interval":null,"isNew":true,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"80%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(unpoller_device_stations{site_name=~\"$Site\",
name=~\"$AP\", station_type=\"user\"})","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Users","type":"singlestat","valueFontSize":"110%","valueMaps":[],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"VictoriaMetrics","description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":2,"x":2,"y":3},"id":60,"interval":null,"isNew":true,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"80%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(unpoller_device_stations{site_name=~\"$Site\",
name=~\"$AP\", station_type=\"guest\"})","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Guests","type":"singlestat","valueFontSize":"110%","valueMaps":[],"valueName":"current"},{"bgColor":"#3f2b5b","clockType":"12
hour","countdownSettings":{"customFormat":null,"endCountdownTime":"2018-04-29T21:47:00.000Z","endText":"00:00:00"},"datasource":"${DS_UNIFI_POLLER}","dateSettings":{"dateFormat":"YYYY-MM-DD","fontSize":"12px","fontWeight":"bold","showDate":true},"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":7},"id":32,"links":[],"mode":"time","offsetFromUtc":null,"offsetFromUtcMinutes":null,"options":{"bgColor":"","clockType":"24
hour","countdownSettings":{"endCountdownTime":"2020-06-14T00:36:42-07:00","endText":"00:00:00"},"dateSettings":{"dateFormat":"YYYY-MM-DD","fontSize":"20px","fontWeight":"normal","showDate":false},"mode":"time","timeSettings":{"fontSize":"12px","fontWeight":"normal"},"timezone":"","timezoneSettings":{"fontSize":"12px","fontWeight":"normal","showTimezone":false,"zoneFormat":"offsetAbbv"}},"refreshSettings":{"syncWithDashboard":false},"timeSettings":{"customFormat":"HH:mm:ss","fontSize":"30px","fontWeight":"normal"},"timezone":null,"timezoneSettings":{"fontSize":"12px","fontWeight":"normal","showTimezone":false,"zoneFormat":"offsetAbbv"},"title":"Now","type":"grafana-clock-panel"},{"columns":[],"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":6,"w":24,"x":0,"y":10},"id":1,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:9911","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:9912","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:9913","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9915","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9916","alias":"Device
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9917","alias":"Unifi
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9918","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9919","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9923","alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9924","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9925","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"decbytes"},{"$$hashKey":"object:9926","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:9928","alias":"Bytes","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"bytes"}],"targets":[{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_info{site_name=~\"$Site\",
name=~\"$AP\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_bytes_total{site_name=~\"$Site\",
name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Access
Point Details","transform":"table","type":"table-old"},{"columns":[],"datasource":"VictoriaMetrics","description":"The
counters in this table represent uptime totals and do not change with the time
range selector. ","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":10,"w":24,"x":0,"y":16},"id":49,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":15,"desc":true},"styles":[{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"BSSID","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"bssid","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"alias":"ESSID","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"essid","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Serial","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"hidden","unit":"short"},{"alias":"MAC","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"VAP","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"vap_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"alias":"CCQ","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #A","thresholds":[],"type":"number","unit":"percentunit"},{"alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"AP
Name","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Usage","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"usage","thresholds":[],"type":"string","unit":"short"},{"alias":"Radio","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio","thresholds":[],"type":"string","unit":"short"},{"alias":"Avg
Client Sig","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Value
#B","thresholds":[],"type":"number","unit":"dBm"},{"alias":"Rx Drops","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Tx
Drops","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#E","thresholds":[],"type":"number","unit":"short"},{"alias":"Bytes Rx","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #G","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Bytes
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#F","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Rx Packets","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #H","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx
Packets","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value
#I","thresholds":[],"type":"number","unit":"short"}],"targets":[{"expr":"sum by
(bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source) (unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",
name=~\"$AP\"})","format":"table","instant":true,"interval":"","refId":"A"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_average_client_signal{site_name=~\"$Site\", name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"B"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_receive_dropped_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"C"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_transmit_dropped_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"E"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_transmit_bytes_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"F"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_receive_bytes_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"G"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_receive_packets_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"H"},{"expr":"sum
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
(unpoller_device_vap_transmit_packets_total{site_name=~\"$Site\", name=~\"$AP\"})
","format":"table","hide":false,"instant":true,"interval":"","refId":"I"}],"timeFrom":null,"title":"Networks
/ UAP","transform":"table","transparent":true,"type":"table-old"},{"aliasColors":{"wap-lower":"dark-green","wap-upper":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":26},"hiddenSeries":false,"hideTimeOverride":true,"id":30,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
CPU Usage","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"CPU
Utilization","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"wap-lower":"dark-green","wap-upper":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":26},"hiddenSeries":false,"hideTimeOverride":true,"id":47,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_memory_utilization_ratio{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
Memory Usage","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Memory
Utilization","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"wap-lower
load1":"dark-green","wap-lower load15":"dark-blue","wap-upper load1":"dark-purple","wap-upper
load15":"dark-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":33},"hiddenSeries":false,"id":3,"isNew":true,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",name=~\"$AP\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":33},"hiddenSeries":false,"id":46,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":true,"targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
users","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Clients
/ UAP","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Devices
TX / RX bytes per second grouped by OUI. RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":40},"hiddenSeries":false,"id":42,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(unpoller_client_receive_rate_bytes{site_name=~\"$Site\",ap_name=~\"$AP\"}) by
(oui)","interval":"$Smooth","legendFormat":"{{oui}} Rx","refId":"A"},{"expr":"sum
(unpoller_client_transmit_rate_bytes{site_name=~\"$Site\",ap_name=~\"$AP\"}) by
(oui)","interval":"$Smooth","legendFormat":"{{oui}} Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Wireless
Traffic / Vendor","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":40},"hiddenSeries":false,"id":19,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum
(unpoller_device_radio_stations{radio=\"ng\", site_name=~\"$Site\",name=~\"$AP\",
station_type=\"guest\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
Guests 2,4GHz","refId":"A"},{"expr":"sum (unpoller_device_radio_stations{radio=\"ng\",
site_name=~\"$Site\",name=~\"$AP\", station_type=\"user\"}) by (radio,name)","interval":"$Smooth","legendFormat":"{{name}}
Users 2.4GHz","refId":"B"},{"expr":"sum (unpoller_device_radio_stations{radio=\"na\",
site_name=~\"$Site\",name=~\"$AP\", station_type=\"user\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
Users 5GHz","refId":"C"},{"expr":"sum (unpoller_device_radio_stations{radio=\"na\",
site_name=~\"$Site\",name=~\"$AP\", station_type=\"guest\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
Guests 5GHz","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Users
& Guests / Radio Band","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":48},"hiddenSeries":false,"id":59,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_average_client_signal{name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
{{vap_name}} {{radio}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Average
AP Client Signal","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Average
Client Signal","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":48},"hiddenSeries":false,"id":44,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg(unpoller_client_rssi_db{ap_name=~\"$AP\"})
by (ap_name, radio_name)","interval":"$Smooth","legendFormat":"{{ap_name}} {{radio_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Average
AP Client RSSI","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Average
Client RSSI","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":56},"hiddenSeries":false,"id":18,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",name=~\"$AP\",
radio=\"na\"}","interval":"$Smooth","legendFormat":"{{name}} {{vap_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
GHz Client Connection Quality","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Average
CCQ % / VAP","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":56},"hiddenSeries":false,"id":58,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",name=~\"$AP\",
radio=\"ng\"}","interval":"1m","legendFormat":"{{name}} {{vap_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
GHz Client Connection Quality","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Average
CCQ % / VAP","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":64},"hiddenSeries":false,"id":8,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":""}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_radio_channel_utilization_receive_ratio{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
Rx","refId":"B"},{"expr":"unpoller_device_radio_channel_utilization_transmit_ratio{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
Tx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
GHz Channel Utilization","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"Displays
2.4GHz usage.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":64},"hiddenSeries":false,"id":27,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":""}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_radio_channel_utilization_receive_ratio{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
{{radio}} Rx","refId":"B"},{"expr":"unpoller_device_radio_channel_utilization_transmit_ratio{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
{{radio}} Tx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
GHz Channel Utilization","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"percentunit","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"RX
is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":72},"hiddenSeries":false,"id":20,"interval":"","isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_transmit_bytes_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Tx","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_receive_bytes_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
GHz Traffic","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"RX
is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":72},"hiddenSeries":false,"id":24,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_transmit_bytes_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Tx","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_receive_bytes_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
GHz Traffic","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"PPS
on the na band. In is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":79},"hiddenSeries":false,"id":22,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_transmit_packets_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}} Out","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_receive_packets_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} In","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
GHz Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"PPS
on the ng band calculated in 30 second buckets. In is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":79},"hiddenSeries":false,"id":25,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_transmit_packets_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Out","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_receive_packets_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} In","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
GHz Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
packet errors (several types) per second in the 5GHz band.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":86},"hiddenSeries":false,"id":57,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_receive_dropped_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Rx","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_transmit_dropped_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Tx","refId":"B"},{"expr":"sum
(rate(unpoller_device_vap_receive_errors_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Rx","refId":"C"},{"expr":"sum
(rate(unpoller_device_vap_transmit_errors_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Tx","refId":"D"},{"expr":"sum
(rate(unpoller_device_vap_receive_crypts_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Crypts Rx","refId":"E"},{"expr":"sum
(rate(unpoller_device_vap_receive_frags_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Frags Rx","refId":"F"},{"expr":"sum
(rate(unpoller_device_vap_receive_nwids_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Nwids Rx","refId":"G"},{"expr":"sum
(rate(unpoller_device_vap_transmit_retries_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Retries Tx","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
GHz Drops/Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"In
is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":86},"hiddenSeries":false,"id":26,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
(rate(unpoller_device_vap_receive_dropped_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Rx","refId":"A"},{"expr":"sum
(rate(unpoller_device_vap_transmit_dropped_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Tx","refId":"B"},{"expr":"sum
(rate(unpoller_device_vap_receive_errors_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Rx","refId":"C"},{"expr":"sum
(rate(unpoller_device_vap_transmit_errors_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Tx","refId":"D"},{"expr":"sum
(rate(unpoller_device_vap_receive_crypts_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Crypts Rx","refId":"E"},{"expr":"sum
(rate(unpoller_device_vap_receive_frags_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Frags Rx","refId":"F"},{"expr":"sum
(rate(unpoller_device_vap_receive_nwids_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Nwids Rx","refId":"G"},{"expr":"sum
(rate(unpoller_device_vap_transmit_retries_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
by (name)","interval":"$Smooth","legendFormat":"{{name}} Retries Tx","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
GHz Drops/Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","uap","unifi-poller"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{type=\"uap\"},source)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info{type=\"uap\"},source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\",
type=\"uap\"},site_name)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\",
type=\"uap\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"uap|udm\",model!=\"UDMPRO\"},name)","hide":0,"includeAll":true,"label":"UniFi
AP:","multi":true,"name":"AP","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"uap|udm\",model!=\"UDMPRO\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"},{"selected":false,"text":"1h","value":"1h"}],"query":"30s,1m,2m,5m,10m,15m,30m,1h","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
UAP Insights - Prometheus","uid":"g5wFWqxZk","version":24}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/part-of: unpoller
grafana_dashboard: "1"
name: unpoller-dashboard-uap-insights
namespace: monitoring
@@ -0,0 +1,181 @@
apiVersion: v1
data:
usg-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","limit":100,"name":"Annotations
& Alerts","showIn":0,"type":"dashboard"}]},"description":"UniFi Poller v2.0.1
Displays detailed information for security gateways in a UniFi network using Prometheus.","editable":true,"gnetId":11313,"graphTooltip":2,"id":null,"iteration":1592125878109,"links":[{"asDropdown":true,"icon":"external
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"columns":[],"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":5,"w":24,"x":0,"y":0},"id":60,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:1420","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:1421","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:1422","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1424","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1425","alias":"Device
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1426","alias":"Unifi
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1427","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1428","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1432","alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1433","alias":"Data","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"},{"$$hashKey":"object:1434","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:1435","alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1436","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"}],"targets":[{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_info{site_name=~\"$Site\",
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_bytes_total{site_name=~\"$Site\",
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Gateway
Details","transform":"table","type":"table-old"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":5},"id":50,"panels":[{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"min":0,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":6},"hideTimeOverride":false,"id":64,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["mean"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_uptime_seconds{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
Uptime","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":100,"min":0,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"Mbits"},"overrides":[]},"gridPos":{"h":9,"w":6,"x":4,"y":6},"hideTimeOverride":false,"id":44,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_speedtest_upload{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
Upload","refId":"A"},{"expr":"unpoller_device_speedtest_download{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
Download","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"Speed Test","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"displayName":"${__series.name}","links":[],"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"s"},"overrides":[]},"gridPos":{"h":9,"w":9,"x":10,"y":6},"hideTimeOverride":false,"id":63,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"sum
by (name) (unpoller_device_speedtest_runtime_seconds{site_name=~\"$Site\", name=~\"$Gateway\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
Test Time","refId":"A"},{"expr":"sum by (name) (unpoller_device_uplink_latency_seconds{site_name=~\"$Site\",
name=~\"$Gateway\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
Uplink Latency","refId":"C"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null},{"color":"rgba(237,
129, 40, 0.89)","value":50},{"color":"#d44a3a","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":5,"x":19,"y":6},"hideTimeOverride":false,"id":37,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
CPU %","refId":"A"},{"expr":"unpoller_device_memory_utilization_ratio{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
RAM %","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"colorBackground":false,"colorPostfix":true,"colorValue":true,"colors":["#FA6400","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"description":"WAN
Port Speed","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":9},"hideTimeOverride":true,"id":46,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"M","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"unpoller_device_uplink_speed_mbps{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", port=\"all\", site_name=\"Home (default)\",
source=\"https://unifi-controller:8443\"}","targets":[{"expr":"unpoller_device_uplink_speed_mbps{site_name=~\"$Site\",
name=~\"$Gateway\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Uplink","transparent":true,"type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":9},"hideTimeOverride":true,"id":52,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
station_type=\"desktop\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
name=~\"$Gateway\",station_type=\"desktop\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Desktop","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":11},"hideTimeOverride":true,"id":38,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
station_type=\"user\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
name=~\"$Gateway\",station_type=\"user\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Users","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":11},"hideTimeOverride":true,"id":53,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
station_type=\"mobile\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
name=~\"$Gateway\",station_type=\"mobile\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Mobile","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#FADE2A","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":13},"hideTimeOverride":true,"id":39,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
station_type=\"guest\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
name=~\"$Gateway\",station_type=\"guest\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Guests","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":13},"hideTimeOverride":true,"id":54,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
station_type=\"handheld\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
name=~\"$Gateway\",station_type=\"handheld\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Handheld","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{"gateway
load1":"dark-purple","gateway load15":"dark-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":10,"w":24,"x":0,"y":15},"hiddenSeries":false,"id":56,"isNew":true,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":true,"min":false,"rightSide":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",
name=~\"$Gateway\"}","interval":"$Smooth","legendFormat":"{{name}} load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",
name=~\"$Gateway\"}","interval":"$Smooth","legendFormat":"{{name}} load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"USG
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
wan Bytes Rx":"dark-green","gateway wan Bytes Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Spikes
on this graph that are missing from the LAN graph indicate gateway-originated
traffic, like a scheduled speed test. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":0,"y":25},"hiddenSeries":false,"id":3,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_receive_bytes_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_bytes_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Tx","refId":"B"},{"expr":"unpoller_device_wan_transmit_rate_bytes{site_name=~\"$Site\",
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Tx","refId":"C"},{"expr":"unpoller_device_wan_receive_rate_bytes{site_name=~\"$Site\",
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
Throughput","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
lan Bytes Rx":"dark-green","gateway lan Bytes Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Spikes
on this graph that do not appear on the WAN graph indicate inter-VLAN-routing.
Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":12,"y":25},"hiddenSeries":false,"id":35,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_bytes_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Rx","refId":"A"},{"expr":"rate(unpoller_device_lan_transmit_bytes_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Bytes Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
Throughput","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
wan Packets Rx":"dark-green","gateway wan Packets Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"PPS
on the WAN interface. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":36},"hiddenSeries":false,"id":36,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_receive_packets_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Packets Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_packets_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Packets Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
lan Packets Rx":"dark-green","gateway lan Packets Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"PPS
on the LAN interface. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":36},"hiddenSeries":false,"id":25,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_packets_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Packets Rx","refId":"A"},{"expr":"rate(unpoller_device_lan_transmit_packets_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Packets Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
wan Multicast Rx":"dark-green","gateway wan Broadcast Rx":"dark-blue","gateway
wan Broadcast Tx":"dark-yellow","gateway wan Multicast Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":2,"description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":2,"fillGradient":0,"gridPos":{"h":8,"w":24,"x":0,"y":45},"hiddenSeries":false,"id":47,"isNew":true,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_transmit_broadcast_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Broadcast Tx","refId":"D"},{"expr":"rate(unpoller_device_wan_receive_broadcast_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Broadcast Rx","refId":"C"},{"expr":"rate(unpoller_device_wan_receive_multicast_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Multicast Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_multicast_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Multicast Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
Multicast & Broadcast","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
wan Drops Rx":"dark-green","gateway wan Drops Tx":"dark-purple","gateway wan Errors
Rx":"dark-blue","gateway wan Errors Tx":"dark-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"May
show problems with your WAN interface. Rx on negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":2,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":53},"hiddenSeries":false,"id":48,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":null,"sortDesc":null,"total":true,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_transmit_dropped_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Drops Tx","refId":"A"},{"expr":"rate(unpoller_device_wan_receive_dropped_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Drops Rx","refId":"B"},{"expr":"rate(unpoller_device_wan_transmit_errors_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Errors Tx","refId":"C"},{"expr":"rate(unpoller_device_wan_receive_errors_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
{{port}} Errors Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
Drops & Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
lan Dropped Rx":"dark-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":53},"hiddenSeries":false,"id":51,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_dropped_total{site_name=~\"$Site\",
name=~\"$Gateway\"}[$__interval])","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
{{port}} Dropped Rx","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
Drops","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Site","title":"Site:
$Site","type":"row"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":6},"id":62,"panels":[],"title":"Purposely
Empty Row","type":"row"}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","unifi-poller","usg"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{type=~\"udm|usg|ugw\"},source)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info{type=~\"udm|usg|ugw\"},source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\",
type=~\"udm|usg|ugw\"},site_name)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\",
type=~\"udm|usg|ugw\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"udm|usg|ugw\"},name)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Gateway","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"udm|usg|ugw\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":null,"current":{"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"}],"query":"30s,1m,2m,5m,10m,15m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
USG Insights - Prometheus","uid":"4Yo8IZ-Wk","version":36}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/part-of: unpoller
grafana_dashboard: "1"
name: unpoller-dashboard-usg-insights
namespace: monitoring
@@ -0,0 +1,236 @@
apiVersion: v1
data:
usw-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
information for network switches in a UniFi network using Prometheus.","editable":true,"gnetId":11312,"graphTooltip":1,"id":null,"iteration":1592125490470,"links":[{"asDropdown":true,"icon":"external
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"collapsed":false,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":0},"id":137,"panels":[],"title":"Aggregate
Graphs","type":"row"},{"columns":[],"datasource":"VictoriaMetrics","description":"If
you have access points and gateways they will also show up here because they have
switch ports.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":6,"w":24,"x":0,"y":1},"id":2297,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:10978","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:10979","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:10980","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10982","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10983","alias":"Device
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10984","alias":"UniFi
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10985","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10986","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10990","alias":"IP","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10991","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10992","alias":"Data","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"},{"$$hashKey":"object:10993","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:10994","alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"}],"targets":[{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_info{site_name=~\"$Site\",
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_bytes_total{site_name=~\"$Site\",
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Switch
Details","transform":"table","type":"table-old"},{"aliasColors":{"switch C":"dark-green","switch
F":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":1,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":16,"x":0,"y":7},"hiddenSeries":false,"id":1149,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:11469","alias":"/F$/","yaxis":2}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
by (name,temp_area,temp_type) (unpoller_device_temperature_celsius{site_name=~\"$Site\",name=~\"$Switch\"})","interval":"$Smooth","legendFormat":"{{name}}
{{temp_area}} {{temp_type}} C ","refId":"A"},{"expr":"sum by (name,temp_area,temp_type)
(unpoller_device_temperature_celsius{site_name=~\"$Site\",name=~\"$Switch\"}*9/5+32)","hide":false,"instant":false,"interval":"$Smooth","legendFormat":"{{name}}
{{temp_area}} {{temp_type}} F","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Device
Temperature(s)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:11514","decimals":1,"format":"celsius","label":"Celcius","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:11515","decimals":1,"format":"fahrenheit","label":"Farenheit","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":-32}},{"aliasColors":{"switch":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":8,"x":16,"y":7},"hiddenSeries":false,"hideTimeOverride":true,"id":1859,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_memory_utilization_ratio{type=\"usw\",
site_name=~\"$Site\",name=~\"$Switch\",type=~\"usw|udm|udmp\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"Memory
Utilization","logBase":1,"max":"1","min":"0","show":true},{"decimals":null,"format":"short","label":"","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"switch
load1":"dark-green","switch load15":"semi-dark-purple","switch load5":"dark-blue"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":16,"x":0,"y":14},"hiddenSeries":false,"id":1857,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{"alias":"/load5$/","fill":0,"lines":true,"linewidth":4}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",name=~\"$Switch\"}","interval":"$Smooth","legendFormat":"{{name}}
load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",name=~\"$Switch\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",name=~\"$Switch\"}","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Device
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:13149","format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:13150","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"switch":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":14},"hiddenSeries":false,"hideTimeOverride":true,"id":1861,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",name=~\"$Switch\",type=~\"usw|udm|udmp\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"CPU
Utilization","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
data transferred for selected switch ports.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":22},"hiddenSeries":false,"id":135,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",
name=~\"$Switch\", port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
{{port_name}} Tx","refId":"A"},{"expr":"rate(unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",
name=~\"$Switch\", port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
{{port_name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
Transfer","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes
Per Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"columns":[],"datasource":"VictoriaMetrics","description":"This
panel displays lifetime totals and current data as of now.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"90%","gridPos":{"h":21,"w":24,"x":0,"y":39},"id":214,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":2,"desc":true},"styles":[{"alias":"Port
Name","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Switch","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Port","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"port_num","thresholds":[],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"port_id","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Client","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"port_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Bytes
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#A","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Bytes
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Tx Drops","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
Drops","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#D","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Broadcast","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #E","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
Broadcast","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#F","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Errors","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #G","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
Errors","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#H","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Packets","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #I","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
Packets","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
#J","thresholds":[],"type":"number","unit":"short"},{"alias":"Amps","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #K","thresholds":[],"type":"number","unit":"mamp"},{"alias":"Volts","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #L","thresholds":[],"type":"number","unit":"volt"},{"alias":"Watts","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #M","thresholds":[],"type":"number","unit":"watt"}],"targets":[{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","instant":true,"refId":"A"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"B"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_dropped_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"D"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_dropped_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"C"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_broadcast_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"F"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_broadcast_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"E"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_errors_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"H"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_errors_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"G"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_packets_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"J"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_packets_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"I"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_amperes{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"K"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_volts{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"L"},{"expr":"sum
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_watts{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"M"}],"title":"All
Port Information","transform":"table","transparent":true,"type":"table-old"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":60},"id":4,"panels":[{"columns":[],"datasource":"VictoriaMetrics","description":"These
are total \"lifetime\" counters.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"90%","gridPos":{"h":3,"w":24,"x":0,"y":61},"id":291,"links":[],"pageSize":null,"scopedVars":{"Port":{"selected":false}},"scroll":true,"showHeader":true,"sort":{"col":13,"desc":true},"styles":[{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Speed","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"","align":"auto","colorMode":"cell","colors":["rgba(50,
172, 45, 0)","rgba(237, 129, 40, 0.89)","rgba(245, 54, 54, 0.9)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"/Drops|Errors/","thresholds":["10","100"],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"/^Bytes/","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Satisfaction","thresholds":[],"type":"number","unit":"percent"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"/^[TR]x /","thresholds":[],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Volts","thresholds":[],"type":"number","unit":"volt"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Watts","thresholds":[],"type":"number","unit":"watt"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Amps","thresholds":[],"type":"number","unit":"mamp"}],"targets":[{"expr":"unpoller_device_port_port_speed_bps{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Speed","refId":"A"},{"expr":"unpoller_device_port_poe_amperes{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Amps","refId":"B"},{"expr":"unpoller_device_port_poe_volts{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Volts","refId":"C"},{"expr":"unpoller_device_port_poe_watts{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Watts","refId":"D"},{"expr":"unpoller_device_port_transmit_broadcast_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Tx
Broadcast","refId":"E"},{"expr":"unpoller_device_port_transmit_multicast_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
Multicast","refId":"F"},{"expr":"unpoller_device_port_receive_dropped_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
Drops","refId":"G"},{"expr":"unpoller_device_port_transmit_dropped_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Tx
Drops","refId":"N"},{"expr":"unpoller_device_port_transmit_errors_total+unpoller_device_port_receive_errors_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx+Tx
Errors","refId":"H"},{"expr":"unpoller_device_port_receive_packets_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
Packets","refId":"I"},{"expr":"unpoller_device_port_transmit_packets_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Tx
Packets","refId":"J"},{"expr":"unpoller_device_port_receive_bytes_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Bytes
Rx","refId":"K"},{"expr":"unpoller_device_port_transmit_bytes_total{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Bytes
Tx","refId":"L"},{"expr":"unpoller_device_port_satisfaction_percent{port_id=\"$Port\",
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Satisfaction","refId":"M"}],"title":"Switch
$Port Information","transform":"timeseries_to_columns","type":"table-old"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
data transfer rate per second for Switch $Port. TX on positive axis and RX on
negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":24,"x":0,"y":64},"hiddenSeries":false,"id":1396,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":" {{port_id}}
({{port_name}}) Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":" {{port_id}}
({{port_name}}) Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
Transfer: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes
/ Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
broadcast and multicast packets per second for Switch $Port. TX on positive axis
and RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":73},"hiddenSeries":false,"id":594,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_broadcast_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Broadcast Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_broadcast_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Broadcast Tx","refId":"B"},{"expr":"rate(unpoller_device_port_receive_multicast_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Multicast Rx","refId":"C"},{"expr":"rate(unpoller_device_port_transmit_multicast_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Multicast Tx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Multicast
& Broadcast: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"Shows
errors and dropped packets for Switch $Port. RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":73},"hiddenSeries":false,"id":367,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_dropped_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Drops Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_dropped_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Drops Tx","refId":"B"},{"expr":"rate(unpoller_device_port_transmit_errors_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Errors Tx","refId":"C"},{"expr":"rate(unpoller_device_port_receive_errors_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Errors Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Errors
and Drops: Switch $Port","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:4320","decimals":null,"format":"pps","label":"packets
per second","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:4321","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
packet counters for Switch $Port. TX on positive axis and RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":80},"hiddenSeries":false,"id":468,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":true,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_packets_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_packets_total{site_name=~\"$Site\",
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
({{port_name}}) Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Packets
Per Second: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
POE Power for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":12,"y":80},"hiddenSeries":false,"id":745,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_watts{site_name=~\"$Site\",
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Watts","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
Power: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
POE Voltage for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":16,"y":80},"hiddenSeries":false,"id":921,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_volts{site_name=~\"$Site\",
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Volts","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
Voltage: Switch $Port","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"volt","label":"Volts","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
POE Current for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":20,"y":80},"hiddenSeries":false,"id":922,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_amperes{site_name=~\"$Site\",
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Amps","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
Current: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"mamp","label":"Amps","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Port","title":"Switch
$Port","type":"row"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":85},"id":2299,"panels":[],"title":"Purposely
Empty Row","type":"row"}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","usw","unifi-poller"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info,source)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{"selected":true,"tags":[],"text":"All","value":["$__all"]},"hide":0,"includeAll":true,"label":null,"multi":true,"name":"Devices","options":[{"selected":true,"text":"All","value":"$__all"},{"selected":false,"text":"udm","value":"udm"},{"selected":false,"text":"usw","value":"usw"},{"selected":false,"text":"uap","value":"uap"}],"query":"udm,usw,uap","queryValue":"","skipUrlSync":false,"type":"custom"},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\"},site_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"$Devices\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Switch","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
type=~\"$Devices\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_port_port_speed_bps{site_name=~\"$Site\",
name=~\"$Switch\"},port_id)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Port","options":[],"query":"label_values(unpoller_device_port_port_speed_bps{site_name=~\"$Site\",
name=~\"$Switch\"},port_id)","refresh":1,"regex":"","skipUrlSync":false,"sort":3,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"}],"query":"30s,1m,2m,5m,10m,15m,30m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
USW Insights - Prometheus","uid":"FsfxpWaZz","version":35}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/part-of: unpoller
grafana_dashboard: "1"
name: unpoller-dashboard-usw-insights
namespace: monitoring
@@ -0,0 +1,77 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: unpoller
namespace: monitoring
labels:
app.kubernetes.io/name: unpoller
app.kubernetes.io/instance: unpoller
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: unpoller
template:
metadata:
labels:
app.kubernetes.io/name: unpoller
app.kubernetes.io/instance: unpoller
spec:
securityContext:
runAsNonRoot: true
runAsUser: 65534
runAsGroup: 65534
seccompProfile:
type: RuntimeDefault
containers:
- name: unpoller
image: ghcr.io/unpoller/unpoller:v3.3.1
ports:
- name: metrics
containerPort: 9130
protocol: TCP
env:
# Outputs: Prometheus exporter on, InfluxDB off.
- name: UP_INFLUXDB_DISABLE
value: "true"
- name: UP_PROMETHEUS_DISABLE
value: "false"
- name: UP_PROMETHEUS_HTTP_LISTEN
value: "0.0.0.0:9130"
# UniFi OS controller: self-signed cert, poll all sites.
- name: UP_UNIFI_DEFAULT_VERIFY_SSL
value: "false"
- name: UP_UNIFI_DEFAULT_SITE_0
value: "all"
- name: UP_UNIFI_DEFAULT_SAVE_SITES
value: "true"
- name: UP_POLLER_DEBUG
value: "false"
# UP_UNIFI_DEFAULT_URL / _USER / _PASS come from the secret.
envFrom:
- secretRef:
name: unpoller-unifi
readinessProbe:
httpGet:
path: /
port: metrics
initialDelaySeconds: 5
periodSeconds: 15
livenessProbe:
httpGet:
path: /
port: metrics
initialDelaySeconds: 15
periodSeconds: 30
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 256Mi
@@ -0,0 +1,27 @@
apiVersion: v1
kind: Secret
metadata:
name: unpoller-unifi
namespace: monitoring
type: Opaque
stringData:
#ENC[AES256_GCM,data:ii9nZ95ZfxWrmxlxsrI3/GMqAhMZWe7NJVxZoHaY9WLhGgndKJ0wVnJc7FDkTiSENVsmyvOR9Un8nquxtOpnWuJkiK4UVMgt,iv:vq8/8M9wZTYBjSC28n11z1dwYg9QpPeJkbChSrXwR9g=,tag:d3gsygZLzAZvKSbPGVkfWw==,type:comment]
UP_UNIFI_DEFAULT_URL: ENC[AES256_GCM,data:6Ng+S4pJtZ1RrCZzYsaBcsij,iv:XVEJhGuzul53wA2jDcTRSTQ+Zg5LfrjYIsfnIwKJrjI=,tag:p5cuB+TucDJ0nS6qZwrU5w==,type:str]
#ENC[AES256_GCM,data:bPOMGlTiBcBaxZooysr8eGiYEPpiiWw7qj24YbZfs/+gUqvQICFoZFUuvtQHUr7d1AvXMmD08C7oxo2Wi3CQO49zaBMprC2Pp1afIQBYGEdAzTw=,iv:ZMgm/r6n/q7SHiQcXuv9jNH17FYO9m53YtstrWMIsHQ=,tag:JigMJbOWMai+95UX+Hq1DQ==,type:comment]
UP_UNIFI_DEFAULT_USER: ENC[AES256_GCM,data:tcGXHfzSeX4=,iv:VdqazUQzNZu4wrNtU/ZBM+Z/qgKFJcn5vUGPQk8XnY4=,tag:gimPFlc9r+wHINhkxgie4w==,type:str]
UP_UNIFI_DEFAULT_PASS: ENC[AES256_GCM,data:zNgR/FH3H53dlH+FBcaRHcE6eAORkBKg5X1cM35dAQs=,iv:cgvYU4RlAST5+2qchDa7qJhxpmqXWKmaGy5aEptum4E=,tag:0Iv6jVbq3p+462FmNUEDAA==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpekpqdDJqeGZBbmNPVVlW
MDN6WnI4Ynd1dGhQTlkwYzY4STREMnFuQkFNCjVWWGFjMW5rOUVESVQ5RVhZZ2FT
cmtnejhHMzBpNlV5bmpsMWdwcW5ZNFEKLS0tIHdLQ0lRdXZuTE1DWUJ6L1hCUFhK
ajhCRUh2dVQrUkJJamFCTDU0eS9lajAKq/7OhPmhVUTVFos0IdBozgFXAcv5HutH
yudHIJNuecjCFsTpM7gr6d6dBfr2xBKk8HsTkjfuwwI+/Bd3+VObvw==
-----END AGE ENCRYPTED FILE-----
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-06-19T18:29:59Z"
mac: ENC[AES256_GCM,data:MSKLVzChp1ylSbtQU1eaxf1egktK6B75PLQTgoMkVXZZ5GJJzXEsWuiIdnud9vcMet8uBVVLUzqfsCEEwkobJXf7yi8jloKboIYqkKb38PlSb6SVyj3QB59a7LMISUZspBFiiVozrRD7q5jzZKlK86v0RJ21KvxOVdv7pbTfzUY=,iv:rkoR814sUKLMkPHG8zZQk7sGF59w+gc1qbDO65TvOd0=,tag:zcjGwcFZ5tzjApN472bpTA==,type:str]
version: 3.13.1
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: unpoller
namespace: monitoring
labels:
app.kubernetes.io/name: unpoller
app.kubernetes.io/instance: unpoller
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: unpoller
ports:
- name: metrics
port: 9130
targetPort: metrics
protocol: TCP
@@ -0,0 +1,18 @@
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMServiceScrape
metadata:
name: unpoller
namespace: monitoring
labels:
app.kubernetes.io/name: unpoller
spec:
selector:
matchLabels:
app.kubernetes.io/name: unpoller
endpoints:
# unpoller caches controller data and refreshes it every 60s, so a tighter
# scrape interval just re-serves the same cache.
- port: metrics
path: /metrics
interval: 60s
scrapeTimeout: 30s
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,27 @@
# This manifest was generated by flux. DO NOT EDIT.
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 1m0s
ref:
branch: master
secretRef:
name: flux-system
url: https://github.com/berezovskyi-oleksandr/homelab.git
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 10m0s
path: ./kubernetes-monitoring
prune: true
sourceRef:
kind: GitRepository
name: flux-system
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- gotk-components.yaml
- gotk-sync.yaml
+5
View File
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- flux-system
- apps/ks.yaml
@@ -6,6 +6,8 @@ metadata:
namespace: archmirror
data:
nginx.conf: |
worker_processes auto;
events {
worker_connections 1024;
}
@@ -15,6 +17,8 @@ data:
default_type application/octet-stream;
sendfile on;
# NFS reads block the worker; offload them so /health keeps answering
aio threads;
gzip on;
server {
+29
View File
@@ -0,0 +1,29 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: blog-nginx-config
namespace: blog
data:
default.conf: |
server {
listen 8080;
server_name _;
root /git/current;
index index.html;
absolute_redirect off;
location /health {
access_log off;
return 200 "OK";
add_header Content-Type text/plain;
}
location ~ /\.git {
deny all;
return 404;
}
location / {
try_files $uri $uri/ =404;
}
}
+149
View File
@@ -0,0 +1,149 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: blog
namespace: blog
labels:
app: blog
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: blog
template:
metadata:
labels:
app: blog
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
# git-sync (uid 65533) writes files; fsGroup makes the emptyDir group-writable by that uid
fsGroup: 65533
initContainers:
- name: git-sync-init
image: registry.k8s.io/git-sync/git-sync:v4.5.1
imagePullPolicy: IfNotPresent
env:
- name: GITSYNC_REPO
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_REPO
- name: GITSYNC_ROOT
value: "/git"
- name: GITSYNC_REF
value: "gh-pages"
- name: GITSYNC_LINK
value: "current"
- name: GITSYNC_DEPTH
value: "1"
- name: GITSYNC_ONE_TIME
value: "true"
- name: GITSYNC_USERNAME
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_USERNAME
- name: GITSYNC_PASSWORD
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_PASSWORD
securityContext:
runAsUser: 65533
runAsGroup: 65533
volumeMounts:
- name: git-content
mountPath: /git
resources:
requests:
cpu: 10m
memory: 64Mi
limits:
memory: 128Mi
containers:
- name: nginx
image: nginxinc/nginx-unprivileged:1.30.0-alpine3.23
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http
protocol: TCP
securityContext:
runAsUser: 101
runAsGroup: 101
volumeMounts:
- name: git-content
mountPath: /git
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
livenessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
port: 8080
path: /health
initialDelaySeconds: 5
periodSeconds: 10
resources:
requests:
cpu: 10m
memory: 32Mi
limits:
memory: 64Mi
- name: git-sync
image: registry.k8s.io/git-sync/git-sync:v4.5.1
imagePullPolicy: IfNotPresent
env:
- name: GITSYNC_REPO
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_REPO
- name: GITSYNC_ROOT
value: "/git"
- name: GITSYNC_REF
value: "gh-pages"
- name: GITSYNC_LINK
value: "current"
- name: GITSYNC_DEPTH
value: "1"
- name: GITSYNC_PERIOD
value: "30s"
- name: GITSYNC_USERNAME
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_USERNAME
- name: GITSYNC_PASSWORD
valueFrom:
secretKeyRef:
name: blog-git-credentials
key: GITSYNC_PASSWORD
securityContext:
runAsUser: 65533
runAsGroup: 65533
volumeMounts:
- name: git-content
mountPath: /git
resources:
requests:
cpu: 5m
memory: 32Mi
limits:
memory: 64Mi
volumes:
- name: git-content
emptyDir: {}
- name: nginx-config
configMap:
name: blog-nginx-config
@@ -1,24 +1,23 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grocy
namespace: grocy
name: blog
namespace: blog
annotations:
cert-manager.io/cluster-issuer: letsencrypt
traefik.ingress.kubernetes.io/router.middlewares: authelia-chain-authelia-authelia-auth@kubernetescrd
spec:
tls:
- hosts:
- ${GROCY_HOST}
secretName: grocy-tls
- ${BLOG_HOST}
secretName: blog-tls
rules:
- host: ${GROCY_HOST}
- host: ${BLOG_HOST}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grocy
name: blog
port:
number: 80
number: 8080
@@ -1,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: grocy
name: blog
+26
View File
@@ -0,0 +1,26 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: blog
spec:
podSelector: {}
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: blog
spec:
podSelector:
matchLabels:
app: blog
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: traefik
+24
View File
@@ -0,0 +1,24 @@
apiVersion: v1
kind: Secret
metadata:
name: blog-git-credentials
namespace: blog
stringData:
GITSYNC_USERNAME: ENC[AES256_GCM,data:6cZnsgZ53xsU,iv:j2qvZr+odimHPnlMKz9xTe8q+zXvyRDF9spH8TkcmBw=,tag:ik6DJ4cMfcNc5UHY5vRy3A==,type:str]
GITSYNC_PASSWORD: ENC[AES256_GCM,data:mjQJuOuH2YQ1i1JVO+lFZ7WYLmy4RjCi2xZRErU5hRNi2SdgRo0fwg==,iv:9pl3nVmlnynJ4jMke1Hy4ACBuMyM+65vmGR2kS705I0=,tag:K1dQ9YwVN0sZjieAOU3KWw==,type:str]
GITSYNC_REPO: ENC[AES256_GCM,data:ETjdkCP/PSa6HSD9M6JdvWbci/lRwegzzyuPb/IQmX58sxwqT2gUjooVKtcylzsE,iv:kOpvSQYznyxfmLjrehdRuEtwevoceDo0h/vbXTuu/i8=,tag:x+DEmoZUxRN6OksDJ9mQIQ==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYR3FFRWdPajVzbjZGem1N
OXA2aVhtSWRxQUpGcDFxLzBFQWkyMlh5L2pvCkgvM25IVTBqSFZ3QmJDaGxqSTJ2
blQyOTQwaThRbkhzZ01uUmVoaXg5VHMKLS0tIHJJWlJoSmRXRi90M2VHSTlvdnBH
VjRWTHRSWUE0VFpqakwxUmx3aENqYUUK21JXxrt792sHoI2TCYU3aIQKKLL9f8oq
1o+qkueVYSYmVetrqcjSWqfGE496BYi+pd4a0mmRwaLpLCZIIgtlvA==
-----END AGE ENCRYPTED FILE-----
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-05-11T19:25:53Z"
mac: ENC[AES256_GCM,data:jK/48Q7INbbcjZWASbS7ob1RrfDNm27jGnm1taL7hEMDC0k7n3igqlqSHmy7ZxCeUUe3Y+s7Jv9Ss1xITEPoUEYFphGrYeDUBVNtVfhBavTEaTPAuEv7WRA8xGpjXH0t9ernwwMyMQJRatazgX2jcc3rfzHMshs7cf5oeov15Zk=,iv:lg0ad1nDFDHBPv8Xvsn63V7SDPMo1p47gvSNFGJGw1I=,tag:fXatyOSOD/rCjEcpvDQpAw==,type:str]
version: 3.13.0
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: blog
namespace: blog
spec:
selector:
app: blog
ports:
- port: 8080
targetPort: 8080
name: http
-78
View File
@@ -1,78 +0,0 @@
# CryptPad Deployment TODO
## 1. Generate OIDC secret and update both configs
```bash
# Generate a random secret
openssl rand -base64 32
# Hash it for Authelia
docker run --rm authelia/authelia:latest authelia crypto hash generate pbkdf2 --variant sha512 --password 'YOUR_SECRET'
```
- [+] Decrypt Authelia configmap: `cd kubernetes && sops -d -i infrastructure/controllers/authelia/configmap.sops.yaml`
- [+] Replace `REPLACE_WITH_PBKDF2_HASH` with the generated hash
- [+] Re-encrypt: `sops -e -i infrastructure/controllers/authelia/configmap.sops.yaml`
- [+] Decrypt CryptPad secret: `sops -d -i app/cryptpad/secret.sops.yaml`
- [+] Replace `REPLACE_WITH_CRYPTPAD_OIDC_SECRET` with the plaintext secret
- [+] Re-encrypt: `sops -e -i app/cryptpad/secret.sops.yaml`
## 2. Fill in and encrypt backup secret
```bash
cd kubernetes && sops -d -i app/cryptpad/secret-backup.sops.yaml
```
- [+] Replace `REPLACE_REST_PASSWORD` with the password for the `cryptpad` htpasswd user on rest-server
- [+] Replace `REPLACE_WITH_STRONG_PASSWORD` x2 with restic repo passwords for NAS and B2
- [+] Replace `REPLACE_WITH_B2_KEY_ID` with Backblaze B2 application key ID
- [+] Replace `REPLACE_WITH_B2_APPLICATION_KEY` with Backblaze B2 application key
- [+] Re-encrypt: `sops -e -i app/cryptpad/secret-backup.sops.yaml`
## 3. Create NFS directories on Synology
SSH into Synology and run:
```bash
mkdir -p /volume3/k8s-storage/cryptpad-data
mkdir -p /volume3/k8s-storage/cryptpad-config
```
- [+] Directories created
## 4. Set up restic repos and htpasswd user
```bash
# Generate htpasswd entry and append to /volume1/docker/rest-server/config/htpasswd on Synology
docker run --rm httpd:2-alpine htpasswd -nbB cryptpad 'YOUR_REST_PASSWORD'
# Init Synology repos
restic -r "rest:http://cryptpad:PASSWORD@synology.storage.lviv:8888/cryptpad-data/" init
restic -r "rest:http://cryptpad:PASSWORD@synology.storage.lviv:8888/cryptpad-config/" init
# Init B2 repos
B2_ACCOUNT_ID=... B2_ACCOUNT_KEY=... restic -r "b2:berezovskyi-backup-homelab-cryptpad:/data/" init
B2_ACCOUNT_ID=... B2_ACCOUNT_KEY=... restic -r "b2:berezovskyi-backup-homelab-cryptpad:/config/" init
```
- [+] cryptpad htpasswd user added to rest-server
- [+] Synology repos initialised
- [+] B2 repos initialised
## 5. Commit, push and verify deployment
- [ ] Commit and push all changes
- [ ] Pod comes up healthy (first start is slow: OnlyOffice download + SSO plugin clone):
```bash
kubectl get pods -n cryptpad -w
kubectl logs -n cryptpad -l app=cryptpad --tail=50 -f
```
- [ ] Both domains resolve with valid TLS:
- https://cryptpad.berezovskyi.dev
- https://sandbox.cryptpad.berezovskyi.dev
- [ ] OIDC login works: "Register with Authelia" button appears and completes successfully
- [ ] Run a backup job manually to verify repos:
```bash
kubectl create job -n cryptpad --from=cronjob/cryptpad-data-backup test-backup-data
kubectl logs -n cryptpad -l job-name=test-backup-data -f
```
-63
View File
@@ -1,63 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: cryptpad-config
namespace: cryptpad
data:
application_config.js: |
(() => {
const factory = (AppConfig) => {
AppConfig.registeredOnlyTypes = AppConfig.availablePadTypes;
AppConfig.disableAnonymousPadCreation = true;
AppConfig.disableAnonymousStore = true;
return AppConfig;
};
if (typeof(module) !== 'undefined' && module.exports) {
module.exports = factory(
require('../www/common/application_config_internal.js')
);
} else if ((typeof(define) !== 'undefined' && define !== null) && (define.amd !== null)) {
define(['/common/application_config_internal.js'], factory);
}
})();
config.js: |
module.exports = {
httpUnsafeOrigin: 'https://${CRYPTPAD_HOST}',
httpSafeOrigin: 'https://${CRYPTPAD_SANDBOX_HOST}',
httpAddress: '0.0.0.0',
//httpPort: 3000,
//httpSafePort: 3001,
// websocketPort: 3003,
// maxWorkers: 4,
//otpSessionExpiration: 7*24, // hours
//enforceMFA: false,
//logIP: false,
adminKeys: [
"[oleksandr@cryptpad.berezovskyi.dev/wiMN+oF1CaWHMaWxv11M+xqvnjXfNgshqoKIvEcG9Ss=]"
],
//inactiveTime: 90, // days
//archiveRetentionTime: 15,
//accountRetentionTime: 365,
//disableIntegratedEviction: true,
//maxUploadSize: 20 * 1024 * 1024,
//premiumUploadSize: 100 * 1024 * 1024,
filePath: './datastore/',
archivePath: './data/archive',
pinPath: './data/pins',
taskPath: './data/tasks',
blockPath: './block',
blobPath: './blob',
blobStagingPath: './data/blobstage',
decreePath: './data/decrees',
logPath: './data/logs',
logToStdout: true,
logLevel: 'verbose',
logFeedback: false,
verbose: true,
installMethod: 'docker',
};
-123
View File
@@ -1,123 +0,0 @@
# Backs up user data (blob, datastore, data, block directories)
apiVersion: batch/v1
kind: CronJob
metadata:
name: cryptpad-data-backup
namespace: cryptpad
labels:
app: cryptpad-backup
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: cryptpad-backup
spec:
restartPolicy: OnFailure
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n cryptpad-data backup
resticprofile -c /secrets/profiles.yaml -n cryptpad-data copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: cryptpad-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: cryptpad-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: data
mountPath: /backup-data
readOnly: true
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 1Gi
volumes:
- name: secrets
secret:
secretName: cryptpad-backup-config
- name: data
persistentVolumeClaim:
claimName: cryptpad-data
---
# Backs up config and customization directories
apiVersion: batch/v1
kind: CronJob
metadata:
name: cryptpad-config-backup
namespace: cryptpad
labels:
app: cryptpad-backup
spec:
schedule: "0 3 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: cryptpad-backup
spec:
restartPolicy: OnFailure
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n cryptpad-config backup
resticprofile -c /secrets/profiles.yaml -n cryptpad-config copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: cryptpad-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: cryptpad-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: config
mountPath: /backup-config
readOnly: true
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
memory: 512Mi
volumes:
- name: secrets
secret:
secretName: cryptpad-backup-config
- name: config
persistentVolumeClaim:
claimName: cryptpad-config
-175
View File
@@ -1,175 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: cryptpad
namespace: cryptpad
labels:
app: cryptpad
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: cryptpad
template:
metadata:
labels:
app: cryptpad
spec:
securityContext:
runAsUser: 4001
runAsGroup: 4001
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
initContainers:
# # Create required subdirectories on NFS volumes before subPath mounts are used
# - name: init-dirs
# image: busybox:1.36
# securityContext:
# runAsUser: 0
# runAsNonRoot: false
# command:
# - sh
# - -c
# - |
# mkdir -p /data/blob /data/datastore /data/data /data/block /data/onlyoffice
# mkdir -p /config/customize
# chown -R 4001:4001 /data /config
# volumeMounts:
# - name: data
# mountPath: /data
# - name: config
# mountPath: /config
# Clone the official CryptPad SSO plugin into an emptyDir shared with the main container
- name: install-sso-plugin
image: alpine/git:v2.47.2
securityContext:
runAsUser: 0
runAsNonRoot: false
command:
- sh
- -c
- |
git clone --depth=1 https://github.com/cryptpad/sso /plugin
chown -R 4001:4001 /plugin
volumeMounts:
- name: sso-plugin
mountPath: /plugin
containers:
- name: cryptpad
image: cryptpad/cryptpad:version-2026.2.0
ports:
- containerPort: 3000
name: http
protocol: TCP
- containerPort: 3003
name: api
protocol: TCP
env:
- name: CPAD_CONF
value: "/cryptpad/config/config.js"
- name: CPAD_MAIN_DOMAIN
value: "https://${CRYPTPAD_HOST}"
- name: CPAD_SANDBOX_DOMAIN
value: "https://${CRYPTPAD_SANDBOX_HOST}"
# Trust the Traefik pod CIDR so CryptPad sees real client IPs.
# Adjust if your pod CIDR is different.
- name: CPAD_TRUSTED_PROXY
value: "10.0.0.0/8"
- name: CPAD_REALIP_HEADER
value: "X-Forwarded-For"
- name: CPAD_REALIP_RECURSIVE
value: "on"
# Downloads and installs OnlyOffice frontend on first start (persisted via data PVC).
# First startup will be slower while OnlyOffice assets are fetched.
- name: CPAD_INSTALL_ONLYOFFICE
value: "yes"
volumeMounts:
# User data — split into subdirs on a single NFS PVC
- name: data
mountPath: /cryptpad/blob
subPath: blob
- name: data
mountPath: /cryptpad/datastore
subPath: datastore
- name: data
mountPath: /cryptpad/data
subPath: data
- name: data
mountPath: /cryptpad/block
subPath: block
# Customization (branding, themes) — persisted on NFS
- name: config
mountPath: /cryptpad/customize
subPath: customize
# OnlyOffice dist — local-path (not NFS): rdfind uses hard links which
# require a real filesystem, and scanning NFS for dedup is very slow
- name: onlyoffice
mountPath: /cryptpad/www/common/onlyoffice/dist
# SSO plugin — freshly cloned by init container on each pod start
- name: sso-plugin
mountPath: /cryptpad/lib/plugins/sso
# sso.js mounted directly from the secret — overlays the NFS config dir
# at this specific file path, no init container needed
- name: sso-secret
mountPath: /cryptpad/config/sso.js
subPath: sso.js
readOnly: true
- name: application-config
mountPath: /cryptpad/customize/application_config.js
subPath: application_config.js
readOnly: true
- name: application-config
mountPath: /cryptpad/config/config.js
subPath: config.js
readOnly: true
# npm run build runs on every start and can take several minutes.
# startupProbe absorbs that time; liveness/readiness take over once up.
startupProbe:
httpGet:
port: 3000
path: /
failureThreshold: 120
periodSeconds: 60
livenessProbe:
httpGet:
port: 3000
path: /
periodSeconds: 30
readinessProbe:
httpGet:
port: 3000
path: /
periodSeconds: 10
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
memory: 2Gi
volumes:
- name: data
persistentVolumeClaim:
claimName: cryptpad-data
- name: config
persistentVolumeClaim:
claimName: cryptpad-config
- name: sso-plugin
emptyDir: {}
- name: onlyoffice
persistentVolumeClaim:
claimName: cryptpad-onlyoffice
- name: sso-secret
secret:
secretName: cryptpad-credentials
items:
- key: sso.js
path: sso.js
- name: application-config
configMap:
name: cryptpad-config
-24
View File
@@ -1,24 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cryptpad
namespace: cryptpad
annotations:
cert-manager.io/cluster-issuer: letsencrypt
# No Traefik auth middleware — authentication is handled natively via the OIDC SSO plugin
spec:
tls:
- hosts:
- ${CRYPTPAD_HOST}
secretName: cryptpad-tls
rules:
- host: ${CRYPTPAD_HOST}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cryptpad
port:
number: 3000
@@ -1,26 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cryptpad-sandbox
namespace: cryptpad
annotations:
cert-manager.io/cluster-issuer: letsencrypt
# The sandbox domain is required by CryptPad for CSP isolation of embedded content.
# It must be a different origin from the main domain but points to the same backend.
# No auth middleware — this domain serves sandboxed iframes with restrictive CSP headers.
spec:
tls:
- hosts:
- ${CRYPTPAD_SANDBOX_HOST}
secretName: cryptpad-sandbox-tls
rules:
- host: ${CRYPTPAD_SANDBOX_HOST}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cryptpad
port:
number: 3000
@@ -1,56 +0,0 @@
# Default deny all ingress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: cryptpad
spec:
podSelector: {}
policyTypes:
- Ingress
---
# Allow Traefik to reach the CryptPad pod (both HTTP and API/WebSocket ports)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: cryptpad
spec:
podSelector:
matchLabels:
app: cryptpad
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: traefik
ports:
- port: 3000
- port: 3003
---
# Allow backup pods egress to Synology (restic rest-server), B2, and DNS
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-egress
namespace: cryptpad
spec:
podSelector:
matchLabels:
app: cryptpad-backup
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- ports:
- port: 8000
protocol: TCP
- ports:
- port: 443
protocol: TCP
-33
View File
@@ -1,33 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: cryptpad-config-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
storageClassName: ""
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- noatime
- timeo=30
- retrans=3
nfs:
server: synology.storage.lviv
path: ${CRYPTPAD_CONFIG_NFS_PATH}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cryptpad-config
namespace: cryptpad
spec:
accessModes:
- ReadWriteOnce
storageClassName: ""
volumeName: cryptpad-config-nfs
resources:
requests:
storage: 10Gi
-33
View File
@@ -1,33 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: cryptpad-data-nfs
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
storageClassName: ""
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- noatime
- timeo=30
- retrans=3
nfs:
server: synology.storage.lviv
path: ${CRYPTPAD_DATA_NFS_PATH}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cryptpad-data
namespace: cryptpad
spec:
accessModes:
- ReadWriteOnce
storageClassName: ""
volumeName: cryptpad-data-nfs
resources:
requests:
storage: 100Gi
@@ -1,12 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cryptpad-onlyoffice
namespace: cryptpad
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5Gi
@@ -1,26 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: cryptpad-backup-config
namespace: cryptpad
stringData:
profiles.yaml: ENC[AES256_GCM,data:8t3Vx7GUX059eX6nxypFx/VacLL+hMy+muF3cybpSMNt5cQXONoUrFQnjW1VkWRgk/n/fqVa80HmT3g1JCeUBwNVDsM9DfH0VCiJxoMYrpDmYObkt82RUMnojhG6afPVPEduvaccOAjyslGnZAMAuQT+DIO/C8wayYDQJcIXJZeHorRJR/4P358EWw7h/p6ylNXGWPiI7IsIn0zsaePD3mshoA4ix+pUbBztTSk3Ij7iiGqltYIZkq8QYkOy4oiAmFTLxIlZfEfrMXrkOaHuvkGd1uftX3VfzJAaLmbGP5sEdkAPawYmGWLnU+ObFSL31zkbTCKhNtEwzQbDmw5RC4srVMj6UttDDs7LBzGZh/HUuXoKb+DIBlYV9siGwZH3bLrg7XoXVi2BimKPAQELlAtOfvOe7NZ8cBE34cCvd3MiZqN37uZYdx2sRHFPJp6PyWbglG2TIqj/J1lPKdZOMG7NpEvc2WXi8ltWjtNmDNjoLsaUh5+e3TqLIYkdd4BxwN0sEJFU/apyyGcS5/2TED0ZgBPINvdCVApTagNwIWjmi11VH2r5hxkb2OnZkwRjsyujmSexaFdS7jjBDXZNg6x1Q4vgBb70iCfTPqAGQyFkTpf3+AKopuPgto9LLztmmC7e4Q08D1ncDGatGRrgIXDhhhhFnbTKdle53gQKLWi8THxIF1/nlvu07zn+HYP5sWG38No2kpMJwCXeUoqXwHhcgVRlAyPka6ip+zWOyg/qdcJU4k4sCW4+DkrdwUHOCiT/0wYRMdeoDRJDLVS/5OESl3HboIQSTxDhgUid0iGH3zr35zwa3DR4mMXYPkh+Nodsp0oh5aG0lIDGrz+6lOVznYUTate1CVm3HN2zQPRyuTPMxILsEVC44qQ3KyR55VgZhwER2418wg68VFQA1uT8HTPEVZFPRgxdK4amIHr7cnC2B67/X0oeHJNbDEc0EAkEx8v08HklJQELNMNInRySW1UnBQOIWo3rl0PsZgyecWnK9vdwPjfEyzr8DVlfm7rGMNTWc7iIPwYom9jLHh4IgOU5TEVatwkd+zMS8ZeHPeFEdL/bf0YbdBqir8+X9ERSkG41OQGYL5Rhx3XM6oExfA4hGGqAEXfGTCAqIljkyKzo7280sIdkDvEBq+FMnCJ+APCSoPqNQUqZpEmWG/XP+Q+bgo5Pb32vlxL8dwcVmuiuu0cndW7gzA6YgfCRfTmGTNjW43J/h5ODBa8Vhu2WNiRMwCzH72ExOvwgKEBeP1LPHVcMLT0f/CMItcpzkuGwzlitZMAm2nmCdSB71hdtsKD6x5hIzhsDCAzZz6VCUF+NAgjOyks3urlDiBhyMnzetXnDgtLB1kL8qwIHOvWQoF5S50KrCbHTNJUhBWBJzRom7oZJOdyHwo7MmSMvRWTY5xA09umSia6/qyDlGeCHDYx/C8i3/WGUGsVKB2EzsfY=,iv:z79twnVkLyonYaOgz2f4ZW7noMlDxZgDRqYySBj+Mlk=,tag:2W0mtSBGiqgWPKDyZrKYRg==,type:str]
restic-password-nas: ENC[AES256_GCM,data:0g81dj/gNwnBPkbVXR1o5mZ4axAhnL7YwSNcnE2fI1DWly4cO3kNyxta5OdgTAGZwNeiT+qaOFi6HXHn9fSHlQ==,iv:OZEza2gkiygZ1KzvD3MJZ/JXIrfbcZenKcOJfMlEjvM=,tag:rnJ8sFQgzD6g3pEHRQLg3A==,type:str]
restic-password-b2: ENC[AES256_GCM,data:sazn2f09uZsFU1/MY30iPj0gx9pSFvcy/JgHsXTLMFbq5OimAfHsiYR1nMf2mQ8GwqMtQTF4t0lkfDnmy/8Qyg==,iv:HOI8oohNCCtP/heNBCQ5HEKfRVdMalv3MU/puRkOQ4A=,tag:aLKeUbwED2TjeAfkydj+MQ==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:Jh4gWGGt5wVaVAMG5oWFXW7W0Taq9Qiyhw==,iv:XZtsiYUtFtSDhgLpG3uNIGLHWqGmCM3zHq2RUu6tdXM=,tag:KQfrBmkAYadVvhtgAzDNzw==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:XI+P//Ti512rQfDgmV00Bq3Wxly6//ESBKsDItXdug==,iv:/xAPGSJIathFIwyWUQoBW2DwYBpHnJCElnRMe16Pf9s=,tag:xSh2kFbQnw+bpAbbQ3rHWQ==,type:str]
sops:
age:
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlVGM3NlRSenp4d05sTEdY
c0JkdW5Xd2RQU3I4SlVTczVRWnVaRUY5RHdnClM1QVlGR3lRWGZCVXR0RjR1Kzlh
ck4vLzNpeThIdmV4citIaFlVWnpFWXMKLS0tIHV2aWtSVTRxMzUrbldwQVRLRHE5
ajAzS2pINWIvQTc0T0FhMit6ZHNVRlkKW6hYD2mjAtZRyC8/fbSWiij1/clTB4br
sAmsCMBIDQf+r12TuzzpLiMnNOIU349GcYxuA24GWaEanordqCLz3A==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-13T12:31:48Z"
mac: ENC[AES256_GCM,data:O+jD7jCBoQYNrRr+j/yn4YkGLaggHee8YVmvE5I5QXOB5pfPg09yQbuYj2IhKPBbVXl24ejlNDEAG3/qDaWgg1IlB+dKeTyrqxWq+mQ7vM9bgNRhf4ozS1lL3NR23V6JhilrosxTlFYCajerxdUbCh0vBXqsdJ0cIV8yggtQ7eY=,iv:gJkOvEFY4L/7qE3zMYnnon8XcGUegmcWKvKQ+/rxBVo=,tag:xQ1Qo7SgOs3N8451xX7Yxg==,type:str]
encrypted_regex: ^(data|stringData|email)$
version: 3.12.1
-25
View File
@@ -1,25 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: cryptpad-credentials
namespace: cryptpad
stringData:
#ENC[AES256_GCM,data:s4VxDsDqwHw6ZhFNzA/mS+gdPwZlV5AcBDRUqfHTKSzjQPVg7unz7HkyfXtSBt36aH3P7fR9lUF1XtNvH9fF+6EfCa1dzIToSEw=,iv:TuYHrkjDFkA7fHhWzaHGrptyP5ClwiMArjoTf5LHXrQ=,tag:gvZxTmeeCEDTISgIpKxhhA==,type:comment]
#ENC[AES256_GCM,data:CXpQCo8r5GCE6lIpXpXlab0CEdMCuNC54Ynh4ahfE1fv2c49wNoiQNRQAjONbmhUoUIiUcCehNmuw/ZK5Fd3rvVUhXdUAKYo,iv:U6vrAHUz22QWSLxBYRFea+LXajuHIh8NlggB6DAoCjc=,tag:nnV8RMrNv+trUQgXpCvkJA==,type:comment]
#ENC[AES256_GCM,data:7TBFv3i2TzlyAcVhAdFE6T2F0E8pdAbYZorT6/brY8Ed+g6LvnwdVaYPcpJ7P6ETWXraqbhoktWICYklr35PAg==,iv:xsPinB1/gkzMHyzsrJ2gj8Fm0PWaIQbtBIB7fT1BTzI=,tag:O9dv+myneU7neE7JiRGuBQ==,type:comment]
sso.js: ENC[AES256_GCM,data:u1XHMXQKf6QtqqjzNx8LZIEZxKSWhVFZbgvKBqsGoKo7kve0nZynH/bYohVO3XDBtahBqDCgeAD/rj5OE2MlEhwF0OTfylpPmlDjD3tuwogMv2NSDwERzzGv2BvMY97kIRwbGP3OtHGEEGO32JmNKWInZH7BrazeX5gvNLKjHk8XtCN8jKxoJwGEYw7EM8s219iFyQISKjo9/yElv4JVlecIa1bcbzswRsgWqzjG3kBJ2HLRcnH4Nr8D8VCDEdO32GHS0Y9Z7b3eaaj0YQyWleyAfqlufktMcr+SFDSQy4sPnzFuydi7kPXRb6OVDZLaKMVA4422VEEsuAOcz5CUZIJAg5KhPz9lZsruRw3hZBTjhRE2G05TwsvJNwY005rVe2pHL/Q3OZRKNZIfXK34lOwnBQMnBPJvtogIT+hZUBBAyz82nuR8KuujsGLo4sJPC/Vuayg9CrwxbQRx7fit5sdu5djwvVleBKyayhbBaP23BZToB9znSNm5HCOpohpAg4OYXazRpLBGH6lHla1tZy7MpfnoltEOHjeBQoqpez3zBQ9zNichIuPVnIK0h1dqAjLlZc5n7d9L6AHDrzSRq40iOnuc4ZuATMXtmd1JynSrjCH4FYKtROV9V3JXUCK9GwnZ04D26rbwxCKKykHkABF4AFDvv4ZeJPvN+Ag6R8TuSG74qzRUjvBP1+2uR/y9IsN5dGviYKzGnVFvkD87RrF3nZQc40+C4CfAuP9xTLJPzZ0b1t6Qr3Q52LipSyOt/I04ULToOU4U7heEkpbZxJAWiAlgLskjy9TfL/OY1uyZT9ZanWAhRVBa0dk2h8I5p9a01XtR8X3sIqg41i1K3VqEcKGk7IQMf+WmiUdLef7qx6Gq3+Di067NJ7fKKNAN3IFGE/LBlBVaj1fQNOaCfjSJ/A==,iv:FSSJUe6ymLHIM5CQLVgemHX71Z7Bz609WsNkOs9QM1E=,tag:Wxdnfa6WXyXVxI3VjU6dMA==,type:str]
sops:
age:
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5Vm8xRmZ0WDJRMmNPVUxq
T3VQSUVUYnVER0FFVW5FYWFHaUV3S2daWFJvCmxLdWpLVHpnMWNQaTlDZ0VOZ0JL
K044cmpRZm50SmZNNWZlWjBDS1hGS2cKLS0tIGRxMnZTTWRRMlg5eVBOb3pVYUlK
clRoWlp2SjQrOGFjQW92VnQ4amxUMXMKMjcBWo44X+Y2kmwpKZcBsBZZkWQJZEOf
VscZUj8VAZKF9IxOmbBaFc2EBi5xI7sYJSJ+gaLHHKLhcSNu59P+kQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-13T19:48:58Z"
mac: ENC[AES256_GCM,data:0mpN6sWiCHp3zVIKIdIEAnBEcczPb1YVfj4fae50JnJ4jF9ZZ6Wz4sQny00LKN59NFFHHM5bOa+ibqEXZ3pgtF0WQmmc5Sfn5w6n66L4mSJ0Pjx4akMJYjt5xMkRuLG996yZXg7pvSd3YrMgJEqf0hiexN+KJMLDqUwDIYpUHpc=,iv:BMIyWxc0k8SZTxS9/F3Vxfa4HY/WordDRQTfJmZZSI0=,tag:FpPT98LvKY2HgeBfZOw5TQ==,type:str]
encrypted_regex: ^(data|stringData|email)$
version: 3.12.1
-17
View File
@@ -1,17 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: cryptpad
namespace: cryptpad
spec:
selector:
app: cryptpad
# Session affinity ensures WebSocket connections always reach the same pod
sessionAffinity: ClientIP
ports:
- port: 3000
targetPort: 3000
name: http
- port: 3003
targetPort: 3003
name: api
@@ -0,0 +1,55 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: dawarich-redis
namespace: dawarich
labels:
app: dawarich-redis
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: dawarich-redis
template:
metadata:
labels:
app: dawarich-redis
spec:
securityContext:
runAsNonRoot: true
runAsUser: 999 # redis user in the alpine image
runAsGroup: 999
seccompProfile:
type: RuntimeDefault
containers:
- name: redis
image: redis:7.4.11-alpine
imagePullPolicy: IfNotPresent
# Sidekiq job queue. Snapshots (as in upstream compose) survive container restarts;
# the emptyDir is lost with the pod, which only drops queued jobs.
args: ["--save", "900", "1", "--save", "300", "10", "--appendonly", "no"]
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: data
mountPath: /data
livenessProbe:
tcpSocket:
port: 6379
periodSeconds: 30
readinessProbe:
tcpSocket:
port: 6379
periodSeconds: 10
resources:
requests:
cpu: 20m
memory: 32Mi
limits:
memory: 256Mi
volumes:
- name: data
emptyDir: {}
@@ -1,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: cryptpad
name: dawarich
+114
View File
@@ -0,0 +1,114 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: dawarich
spec:
podSelector: {}
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: dawarich
spec:
podSelector:
matchLabels:
app: dawarich
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: traefik
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-app-to-db
namespace: dawarich
spec:
podSelector:
matchLabels:
app: dawarich-db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: dawarich
ports:
- port: 5432
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-to-db
namespace: dawarich
spec:
podSelector:
matchLabels:
app: dawarich-db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: dawarich-backup
ports:
- port: 5432
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-egress
namespace: dawarich
spec:
podSelector:
matchLabels:
app: dawarich-backup
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- ports:
- port: 8888
protocol: TCP
- ports:
- port: 443
protocol: TCP
- ports:
- port: 5432
protocol: TCP
to:
- podSelector:
matchLabels:
app: dawarich-db
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-app-to-redis
namespace: dawarich
spec:
podSelector:
matchLabels:
app: dawarich-redis
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: dawarich
ports:
- port: 6379
+190
View File
@@ -0,0 +1,190 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: dawarich
namespace: flux-system
spec:
chart:
spec:
chart: dawarich
version: 2.9.3
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: cogitri
namespace: flux-system
targetNamespace: dawarich
interval: 1m0s
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
# The chart hardcodes an unpinned busybox wait-for-postgres init container, no deployment
# strategy, and a 130s web startupProbe — too short for the first start, which runs every
# migration and seeds the countries table before Puma listens.
postRenderers:
- kustomize:
patches:
- target:
kind: Deployment
name: dawarich
patch: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: dawarich
spec:
strategy:
type: Recreate
template:
spec:
initContainers:
- name: wait-for-postgres
image: busybox:1.37
imagePullPolicy: IfNotPresent
containers:
- name: dawarich
startupProbe:
failureThreshold: 60
livenessProbe:
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 6
readinessProbe:
timeoutSeconds: 5
- target:
kind: Deployment
name: dawarich-sidekiq
patch: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: dawarich-sidekiq
spec:
strategy:
type: Recreate
template:
spec:
initContainers:
- name: wait-for-postgres
image: busybox:1.37
imagePullPolicy: IfNotPresent
values:
# Release name is dawarich-dawarich (targetNamespace prefix); keep resource names short.
fullnameOverride: dawarich
image:
# renovate: datasource=docker depName=freikin/dawarich
tag: "1.21.0"
keyBase:
existingSecret: dawarich-credentials # key: value
# Every key is rendered into the ConfigMap as UPPER_SNAKE_CASE.
env:
timeZone: Europe/Kyiv
# TLS terminates at Traefik; "https" here turns on Rails force_ssl.
applicationProtocol: http
distanceUnit: km
# Upstream compose default; each thread holds an import batch in memory.
backgroundProcessingConcurrency: "3"
# OIDC-only login (blocks the web form and the API password sign-in since 1.14.4).
allowEmailPasswordLogin: "false"
# Authentication against Authelia over OIDC only. Unknown Authelia users are auto-created
# as regular (non-admin) users.
oidc:
enabled: true
providerName: Authelia
clientId:
existingSecret: dawarich-credentials
existingSecretKeyName: OIDC_CLIENT_ID
clientSecret:
existingSecret: dawarich-credentials
existingSecretKeyName: OIDC_CLIENT_SECRET
issuer: https://auth.${AUTHELIA_DOMAIN}
redirectUri: https://${DAWARICH_HOST}/users/auth/openid_connect/callback
autoRegister: true
allowEmailPasswordRegistration: false
dawarich:
hosts:
- ${DAWARICH_HOST}
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
memory: 2Gi
sidekiq:
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
memory: 4Gi # imports parse whole files in memory (Google Records.json)
postgresql:
host: dawarich-db
auth:
database: dawarich
existingSecret: dawarich-credentials # keys: username, password
# Own single Redis (deployment-redis.yaml) instead of the bundled 3-node redis-ha.
redis:
enabled: false
host: dawarich-redis
auth: false
# RWO volumes shared by web and sidekiq — fine on the single node.
persistence:
public:
# Static assets, re-synced from the image on every web start.
storageClass: nfs-synology-ssd
size: 1Gi
watched:
# Drop folder: <user-email>/<file> is auto-imported.
storageClass: nfs-synology-ssd
size: 1Gi
storage:
# ActiveStorage: uploaded imports, exports, videos.
storageClass: nfs-synology-ssd
size: 10Gi
serviceAccount:
automount: false
podLabels:
app: dawarich
# The image starts as root only to chown volumes and gosu-drop when PUID/PGID are set.
# Running as 1000 directly skips that; tmp/ is 0777 in the image and the NFS subdir
# provisioner creates directories 0777.
podSecurityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
seccompProfile:
type: RuntimeDefault
securityContext:
allowPrivilegeEscalation: false
ingress:
enabled: true
# No Authelia forward-auth middleware — Dawarich authenticates against Authelia
# natively over OIDC. A middleware here would break the OIDC callback and the
# api_key-authenticated /api ingest endpoints (OwnTracks, Overland, mobile app).
annotations:
cert-manager.io/cluster-issuer: letsencrypt
hosts:
- host: ${DAWARICH_HOST}
paths:
- path: /
pathType: Prefix
tls:
- secretName: dawarich-tls
hosts:
- ${DAWARICH_HOST}
+38
View File
@@ -0,0 +1,38 @@
{
"kubernetes": {
"fileMatch": ["kubernetes/app/dawarich/.+\\.yaml$"]
},
"customManagers": [
{
"customType": "regex",
"fileMatch": ["kubernetes/app/dawarich/release\\.yaml$"],
"matchStrings": [
"#\\s*renovate:\\s*datasource=(?<datasource>\\S+)\\s+depName=(?<depName>\\S+)\\s*\\n\\s*tag:\\s*[\"']?(?<currentValue>[^\\s\"']+)"
]
}
],
"packageRules": [
{
"matchFileNames": ["kubernetes/app/dawarich/**"],
"semanticCommitScope": "k8s/dawarich"
},
{
"matchFileNames": ["kubernetes/app/dawarich/**"],
"matchPackageNames": ["freikin/dawarich"],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"matchFileNames": ["kubernetes/app/dawarich/**"],
"matchPackageNames": ["freikin/dawarich"],
"matchUpdateTypes": ["major"],
"automerge": false
},
{
"description": "Ignore infrastructure images",
"matchFileNames": ["kubernetes/app/dawarich/**"],
"matchPackageNames": ["postgis/postgis", "redis", "creativeprojects/resticprofile"],
"enabled": false
}
]
}
@@ -1,8 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: firefly-iii
name: cogitri
namespace: flux-system
spec:
interval: 1m0s
url: https://firefly-iii.github.io/kubernetes
url: https://charts.cogitri.dev
+27
View File
@@ -0,0 +1,27 @@
apiVersion: v1
kind: Secret
metadata:
name: dawarich-credentials
namespace: dawarich
stringData:
#ENC[AES256_GCM,data:3gPe9ezMvEnV02kKbZkjtsq2FmJJzXmhtp6CfwYh8icAv/PdAwa3DQCu0oRbgkIV9claZCqDSrhPIaYy5wsQUshL8hyGUYDm/mLNVDsAl9HPz6MlDA==,iv:QOG8JpMEA3IYlcLyrWM8yH9ZHbpwNM1EpC+02J8PCDU=,tag:eIGomi40Pe+7MSOU8POO4w==,type:comment]
username: ENC[AES256_GCM,data:Tpj/Iq4oLlg=,iv:9RORl+XlNqG87y3qsqCNj/oRrLzmdVlZCAXD4R1RfXY=,tag:67MSd0HIYEhTqQYfDNUJ2g==,type:str]
password: ENC[AES256_GCM,data:BhB59Y5J5pKobyKWOsIWP8jMxPzkL12TkFrTJuCGexw=,iv:VDJdyx7dyHgZh/doBTxBfAiN3NqzmvdCz3Hpxwsafac=,tag:AUtd1ubgOWMbgxm2FzfDpw==,type:str]
value: ENC[AES256_GCM,data:Ok4GM6+qnZSQ3c9fyedlXE+LlAoSzIvIQMrCSKLPGp3TQT6PpbouXbR0QveZWZgROmexn0YMs62WCkCdfNfv2DC7SooJ+EksWHKi/m8UTWay7X/WYBlMmSClS3/MeFwsRz5/G4MayIT166C6OhXKB2rPicRMzlU+3dbL9MBDLpw=,iv:gi6C0rbYy3Ie6ati6ACnlqeXjONR/HC3o8xmPGUIF/Y=,tag:jcAQ3YSWZ1DZqr8u+KIBWg==,type:str]
OIDC_CLIENT_ID: ENC[AES256_GCM,data:qddOrkEvw0g=,iv:NrS1vRqZG3/4cQyWtEONu16GbFlHJplcHVc75h7+CpQ=,tag:l5Fu5vsPiU6rFGFWziCnzg==,type:str]
OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:uisMM3Gd6ChnLvg/eyxff9ZGq6uAfs9fryuVOgf+ZGVexKoRn0NT1Ic7rpJ9pUwzhTAO6WGo941MdJmkSxbxXw==,iv:HNZhiPMTMk/aG7Z9hr0r97CFzo8C0PKRL3FtIW2vGns=,tag:+sbLFE2zbdn4M4eyWrvqTA==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTSUdIeXZKNDBVcXVURWpz
Wmwrd1hWb0tTcDFmMWZHVG4vZmFmUDNZUnhjCk1PVzQ2RG5Qa2VQZk5PV1VwS09M
YUdzVWtsc3dJY256dzRkUTMxdG83OGsKLS0tIERBVVRXTTBsYk1jTTRadmNoOHM0
c1F5Q1RsQ1Y1SW9rQUw1ZkwrVVREV1UKI0bO6Nq92fPVPqImWMtWCe5s4r5pLGAf
6FWWzTkerOnQ4n7iGoAPtnuFbo6wUBypm4yirbgX6ErzU5vTWJWHWw==
-----END AGE ENCRYPTED FILE-----
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-10-08T10:16:10Z"
mac: ENC[AES256_GCM,data:HcMG1/LqcljJ6b6LZvXZqKdT3LGFNikH/1PQKzxL+71lwSqlg3k5L0pDNObSfRZeYMeCQTMJWCzgt2qlUlpML58DFTRC0B6K3bofHJixhJT1cS62rzngR0iRY4KVepI6qZACfTh8mwzt15Zrpy9ZMRvV1GSwnxpgaXJVyCMqWnw=,iv:7GHyXB1nA1WAbkI396l4Vw5RtcsYW9n70b+ybOUo6ds=,tag:YbqsKjek9ZnExzghSupuDw==,type:str]
version: 3.13.3
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: dawarich-db
namespace: dawarich
spec:
clusterIP: None
selector:
app: dawarich-db
ports:
- port: 5432
targetPort: 5432
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: dawarich-redis
namespace: dawarich
spec:
selector:
app: dawarich-redis
ports:
- port: 6379
targetPort: 6379
name: redis
@@ -0,0 +1,88 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dawarich-db
namespace: dawarich
labels:
app: dawarich-db
spec:
serviceName: dawarich-db
replicas: 1
selector:
matchLabels:
app: dawarich-db
template:
metadata:
labels:
app: dawarich-db
spec:
securityContext:
runAsUser: 999
runAsGroup: 999
fsGroup: 999
containers:
- name: postgres
# Dawarich requires PostGIS; the Debian variant keeps the postgres user at UID 999
# (the alpine variant upstream uses has 70). The image creates the postgis extension in POSTGRES_DB.
image: postgis/postgis:17-3.5
imagePullPolicy: IfNotPresent
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: dawarich-credentials
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: dawarich-credentials
key: password
- name: POSTGRES_DB
value: dawarich
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
startupProbe:
tcpSocket:
port: 5432
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 30
livenessProbe:
tcpSocket:
port: 5432
periodSeconds: 30
failureThreshold: 5
readinessProbe:
tcpSocket:
port: 5432
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 256Mi
limits:
memory: 2Gi # includes the 1Gi /dev/shm below
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
- name: shm
mountPath: /dev/shm
volumes:
# Upstream compose sets shm_size: 1G — parallel queries over the points table
# exceed the 64M container default.
- name: shm
emptyDir:
medium: Memory
sizeLimit: 1Gi
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: nfs-synology-ssd
resources:
requests:
storage: 10Gi
-79
View File
@@ -1,79 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: firefly-iii
namespace: flux-system
spec:
chart:
spec:
chart: firefly-iii
version: 1.9.13
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: firefly-iii
namespace: flux-system
targetNamespace: firefly
interval: 1m0s
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
deploymentStrategyType: Recreate
podSecurityContext:
seccompProfile:
type: RuntimeDefault
resources:
requests:
cpu: 50m
memory: 256Mi
limits:
memory: 512Mi
persistence:
enabled: true
storageClassName: nfs-synology-ssd
storage: 5Gi
config:
existingSecret: firefly-credentials
env:
DB_HOST: firefly-db
DB_CONNECTION: pgsql
DB_PORT: "5432"
DB_DATABASE: firefly
DB_USERNAME: firefly
TZ: Europe/Kyiv
TRUSTED_PROXIES: "10.244.0.0/24"
APP_URL: https://${FIREFLY_HOST}
AUTHENTICATION_GUARD: remote_user_guard
AUTHENTICATION_GUARD_HEADER: Remote-Email
AUTHENTICATION_GUARD_EMAIL: Remote-Email
MAIL_MAILER: smtp
MAIL_HOST: smtp.protonmail.ch
MAIL_PORT: "587"
MAIL_ENCRYPTION: tls
cronjob:
enabled: true
auth:
existingSecret: firefly-credentials
secretKey: STATIC_CRON_TOKEN
schedule: "0 3 * * *"
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: letsencrypt
traefik.ingress.kubernetes.io/router.middlewares: authelia-chain-authelia-authelia-auth@kubernetescrd
hosts:
- ${FIREFLY_HOST}
tls:
- secretName: firefly-tls
hosts:
- ${FIREFLY_HOST}
@@ -1,26 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: firefly-backup-config
namespace: firefly
stringData:
profiles.yaml: ENC[AES256_GCM,data:2IDoUurD5tw5uTUX/rWuhGZbaCcYcR/J2ClSdr61rq5w1jjZunnyqeY8Vrp2LSaiDhYd6nIHB0oeM8HVsvkzbLksXVzbS/4/098KEJtey3I7yxfvvlgu9ZKbw0wuLqeXjfEkl7cArTdjMKwA3/B5/Jmqw9Q0g5QUPP97MF12Hagg/kpKipXD/n5YoOtv7ZqfHnxrIIh6XXIpa98pJ58x+7ct7K7DeUUj1s/3WAI7idJ4kTexwOb/NVup9qpheuxqAZmF0z8YUC73W0qzQzgUAOJ4+O09xc15PFRq19a95W9SnSHn8Ao56S67s26d2Hbp4JCa8U6MxHDJ09IdHzpu/bmGAVL6LxDheegYOLZWJtNoAryyE6sQN2PJQxIwFngKaMvs6CHSrZWIbCfKzIhNrJPr/u/l5pDvCSMcvg2oX7Bkc2uJ4WY/yFXSHhaWIdJv0VSvcUH04li1inrZe9AYfnsajRVuzgXrnhonqy/2NXrH32leSVjEeU97+Ma1eOX/t3+SNBglL5kJxJIRJ/tSkPDe/9GpVr+2QNQUmRMuIpSsRNQgGODU/XCFrMyJ1Ikl+pKhHitOELfckJ3FuZPRJB6HEqfkE2fZLK5e2G0JRJ4FinYFo6HkXzk4IAzLDlN2E7kgyPyCqHJQt4C/X+OTwE6MErPEPgE5o9pwC8TGv+Q8AN6rRdYs7FPBR9jxqWxoSTCdz49sVf/kcgcWnicn8XmFEGdWTWk3MqKDe8YdN6fyqPha2lxpsz7FkZMcTV2ZrLvIR65lkmL9Vb1I7SwroYuTr+sj3jTAJLZXgRTXpKodc2zTQR9rQEKvA1C7YgchTJa4axDkMY37MDHZnHPW6MEmPlpPw8NMge6QfNYDTAWvrwThGWQ051RSm8KbYfm+qlMWqx+zCFRcypKwBUKVWuf7TYa0jnL9u4QrUvpLBAr6jErNRdRLgm79h80n/ucPEBLCHlzhPzHGW/evdWMDTCd0B5dYbP0zpPkGEmzfBfnH23ru48DotzPV/y0j+SNacgUXQPFkC5x50jOS2Fay+5qInOyA75aSiFD5EMZmf8gx1a3+rDtUt+6Qict8Umtb3ZzpTrWxvxbV5oxCXNwWShSLAFyfwoNE1sEq++xu+Jp0SzTuSg+Kxz+CmuCJ4bnbYkrhJxyKfw==,iv:WdIFJmhmZ8S+ma5l5SS7de2PrxZJgKK2njrPbLVQSuo=,tag:/mPn6QHatxQYwsZInrK30w==,type:str]
restic-password-nas: ENC[AES256_GCM,data:RIn57MOwyqVGR/GuVpIXi+p5jZ2UQm4VgioCgE1GXIk=,iv:DcF6cD+AVa0LoXY6+wACfQvoAtdndl0chmPcm463fEE=,tag:RK9FF1RMFsfHGmg+ZcBEVA==,type:str]
restic-password-b2: ENC[AES256_GCM,data:nIcy6uJY4fCjQH3aVggt3meckNAytAsw/ZNnGBBm7DM=,iv:zPf9YTDgT9dlq1nlyW6weMjZ0b3eVAuB15Lyx897xGU=,tag:+x0Sn3UQZEyhdMYrTK+Nqg==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:t4YqtZRIpLpP7QHGBTeZ8vCL2L+1BjbLug==,iv:TvsBorT7r5A1d1AjPbYZ2vnm0x7gCPe4qY2bXFoK66Y=,tag:zaRhrGV/4siiWiykPlF6Gw==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:xZjFBj7oT2FcKHdwGBzyD1xR/bKtHGLEBsnAqblE+g==,iv:gtJfZvTZucbx6983OOk7WdD8KhJtrW6Wv0hnECYXQ8s=,tag:DCvHrL1Wv3NodzbH5aXylQ==,type:str]
sops:
age:
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRSVBheDRtOEd0T0RJeG5x
dnRtN2RTeEs1andrVk9XUTZtMklDdmx5aEhrCmlNR1puUHVGaFYrUHNHYU1hbnpz
Q2J2ditrY1FuTXg3MUsvWm05WFcrUVUKLS0tIHdqeGFvNnkvVkdPWUphSkhETUpi
R1RWWEpDVkdHamx3M1p5a2YwUkR2REEKp/sZFcCNeZnHCvpwcOu827HLg0wxLWJG
EXHzgm5lZgiA/pQgxOJCiaz9HoNn3ttVE8z3aCnShUqAoXzpnh1Rpw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-21T20:22:40Z"
mac: ENC[AES256_GCM,data:wlXAnMwySlqHadgeAtgC+QCceqSw+mODWzKrqOTb4JSqvK1aEbPDUJWn8ow+0ff5OcU/3XVBr6b9GVzD6DsPXhg/aLsM/d5h6BRFb/qmrusD5YRyScu/gokwiD52I3qDf7rHeLNsYmoO4I6KuwEQRXasJ6H+QIOTNUxbcd+TTnM=,iv:8dNbZg7oJODgdR7mT3XgKL7sXooNYAvr8GM2l0DK6ao=,tag:M2JPh6qkisTG+A+2DCgABA==,type:str]
encrypted_regex: ^(data|stringData|email)$
version: 3.12.2
-30
View File
@@ -1,30 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: firefly-credentials
namespace: firefly
stringData:
APP_KEY: ENC[AES256_GCM,data:OugBKeVQqUDf8rFrGxMYgNROPesgVLsoKuQmWVvW9Kg=,iv:hnASzIOuoLczCUf0Luq2d6YXz5sKoHHawSys29cCMaE=,tag:u3SeTEc0VIb/NOwnXTn9Vg==,type:str]
STATIC_CRON_TOKEN: ENC[AES256_GCM,data:YL+ghixRjb1t6K1Q09clyxlYeYSj3rsy82n78efFVAw=,iv:V2q7uKOpl3e/FROZFvH7YCXBSUnQm7QcwqFyZaBbx2I=,tag:dZ1XPxEOGgAvfyL426rDTw==,type:str]
DB_USERNAME: ENC[AES256_GCM,data:Vk4jFf4Znw==,iv:LpP9DqkC1IlAwFNak8MTLPLf75iEpDwEm9ReLZPxRJo=,tag:qMexrfvQONJjfG11xh07wA==,type:str]
DB_PASSWORD: ENC[AES256_GCM,data:SsGb3qXMiq7EqGyfU2E6xqku1HbmWM8C,iv:+3V3Fh76gim9wcrhYd6CX7smyz0Kc8Qywx5j0wrmVaw=,tag:UawliAt7zOD0rpxNe3KcPw==,type:str]
DB_DATABASE: ENC[AES256_GCM,data:tLd4MWLoqQ==,iv:sG65BMBOAaKqYgCZ/xpv7LYaDNAPX+9KAeOBvYfUbgw=,tag:tRKptDmGV3iwV6luVFv/wQ==,type:str]
MAIL_USERNAME: ENC[AES256_GCM,data:npTpeFJuH7rOmPN7+0tuAgSdK+OxIjHIOHFVhFGcwA==,iv:ugGlT9MfWedvLFb/iQTxSIB5pPQsKGS5utalEP0pyUs=,tag:iv1i73xuCs0svFIgysb9dA==,type:str]
SITE_OWNER: ENC[AES256_GCM,data:WhpJSSWjniUumYjtRLHbOc51tcZ84JBtWw==,iv:nfy/1lXXlQYQW49LQevRevbVee1DODvqFKLPm3nRmU0=,tag:3nMwbS06dxD8oTvURw3OWA==,type:str]
MAIL_FROM: ENC[AES256_GCM,data:JcZt/4D8pa6St+3Z5oX61Ez7I0PscCIDSJhVnDUyfQ==,iv:r8rSDEXjdWzpivA3QQQRiQScdv6rNK5VzAnlwl+13jQ=,tag:N55MPwZ6KGO9L18DTOJ/CA==,type:str]
MAIL_PASSWORD: ENC[AES256_GCM,data:YrqECSPI6I7aYdx+oUmgGA==,iv:rvggM+Chw0JIOqfifzH5Q5yw4JhAv5BZgJfKevfWm2c=,tag:c9Wmxy8iivL4DKwEQj8VPg==,type:str]
sops:
age:
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWdDRxUU1walNTNWY1VlVj
MVB3OFo2Nm03b3haTjFtV09TaWtuYnJXNEN3CmFFOUM4czgxWGFubUJrNDRpOTBq
eHB0ckJNZnltMC84S2NyQVRmUWNNMjQKLS0tIERUL0hwSzVmYlRHSVJwVnE0bkVt
Zm1kOVhMU0JOa1U1MzN2M2FhdlVYUG8KhOhnu/8FxuEJdW5O0HeYVCu5eLgeyqaN
Q88TjwbcwcIruXo/e0ATxWRp+yzwGB0nspQHZzAMP16uN6r3gZo3Zw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-22T21:18:05Z"
mac: ENC[AES256_GCM,data:JszWTjBGpBSuldSp+k/ZhO9P6+v+6WhTddv56WSHkkh1JT0JnomgKYReMj5bDxYeA6hJPLgFmD0N4gjporu3n8oCvADJgpXnVTEmYPnIJJqhEn3z8pGCKjeuxEvJk1MV7XvLEhZZJuvvb04uquyxvl1M8h9BJSCuPk7wxcM5pLA=,iv:MlF48Pqoi4239h3NAFj0VMO6YXJSt88GqCT+cA0qqXY=,tag:/mgkPgXMX3iyTomvKikO8A==,type:str]
encrypted_regex: ^(data|stringData|email)$
version: 3.12.2
+3
View File
@@ -2,3 +2,6 @@ apiVersion: v1
kind: Namespace
metadata:
name: gitea
labels:
# act_runner DinD sidecar requires privileged; relax PSA enforce for this ns
pod-security.kubernetes.io/enforce: privileged
+2 -2
View File
@@ -30,14 +30,14 @@ spec:
patches:
- target:
kind: StatefulSet
name: gitea-actions-act-runner
name: gitea-gitea-actions-act-runner
patch: |
- op: add
path: /spec/volumeClaimTemplates/0/spec/storageClassName
value: nfs-synology-ssd
values:
enabled: true
giteaRootURL: http://gitea-http.gitea.svc.cluster.local:3000
giteaRootURL: http://gitea-gitea-http.gitea.svc.cluster.local:3000
existingSecret: gitea-runner-token
existingSecretKey: token
statefulset:
+174
View File
@@ -21,6 +21,175 @@ spec:
upgrade:
remediation:
retries: 3
# Patch the init script: Gitea 1.26 removed environment-to-ini; use built-in subcommand instead.
# Remove once helm-gitea chart ships a release with the fix (commit 1baf2d0).
postRenderers:
- kustomize:
patches:
- target:
kind: Secret
name: gitea-gitea
patch: |
apiVersion: v1
kind: Secret
metadata:
name: gitea-gitea
stringData:
config_environment.sh: |
#!/usr/bin/env bash
set -euo pipefail
function env2ini::log() {
printf "$${1}\n"
}
function env2ini::read_config_to_env() {
local section="$${1}"
local line="$${2}"
if [[ -z "$${line}" ]]; then
# skip empty line
return
fi
# 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line
local setting="$(awk -F '=' '{print $1}' <<< "$${line}" | xargs echo -n)"
if [[ -z "$${setting}" ]]; then
env2ini::log ' ! invalid setting'
exit 1
fi
local value=''
local regex="^$${setting}(\s*)=(\s*)(.*)"
if [[ $line =~ $regex ]]; then
value="$${BASH_REMATCH[3]}"
else
env2ini::log ' ! invalid setting'
exit 1
fi
env2ini::log " + '$${setting}'"
if [[ -z "$${section}" ]]; then
export "GITEA____$${setting^^}=$${value}" # '^^' makes the variable content uppercase
return
fi
local masked_section="$${section//./_0X2E_}" # '//' instructs to replace all matches
masked_section="$${masked_section//-/_0X2D_}"
export "GITEA__$${masked_section^^}__$${setting^^}=$${value}" # '^^' makes the variable content uppercase
}
function env2ini::reload_preset_envs() {
env2ini::log "Reloading preset envs..."
while read -r line; do
if [[ -z "$${line}" ]]; then
# skip empty line
return
fi
# 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line
local setting="$(awk -F '=' '{print $1}' <<< "$${line}" | xargs echo -n)"
if [[ -z "$${setting}" ]]; then
env2ini::log ' ! invalid setting'
exit 1
fi
local value=''
local regex="^$${setting}(\s*)=(\s*)(.*)"
if [[ $line =~ $regex ]]; then
value="$${BASH_REMATCH[3]}"
else
env2ini::log ' ! invalid setting'
exit 1
fi
env2ini::log " + '$${setting}'"
export "$${setting^^}=$${value}" # '^^' makes the variable content uppercase
done < "$TMP_EXISTING_ENVS_FILE"
rm $TMP_EXISTING_ENVS_FILE
}
function env2ini::process_config_file() {
local config_file="$${1}"
local section="$(basename "$${config_file}")"
if [[ $section == '_generals_' ]]; then
env2ini::log " [ini root]"
section=''
else
env2ini::log " $${section}"
fi
while read -r line; do
env2ini::read_config_to_env "$${section}" "$${line}"
done < <(awk 1 "$${config_file}") # Helm .toYaml trims the trailing new line which breaks line processing; awk 1 ... adds it back while reading
}
function env2ini::load_config_sources() {
local path="$${1}"
if [[ -d "$${path}" ]]; then
env2ini::log "Processing $(basename "$${path}")..."
while read -d '' configFile; do
env2ini::process_config_file "$${configFile}"
done < <(find "$${path}" -type l -not -name '..data' -print0)
env2ini::log "\n"
fi
}
function env2ini::generate_initial_secrets() {
# These environment variables will either be
# - overwritten with user defined values,
# - initially used to set up Gitea
# Anyway, they won't harm existing app.ini files
export GITEA__SECURITY__INTERNAL_TOKEN=$(gitea generate secret INTERNAL_TOKEN)
export GITEA__SECURITY__SECRET_KEY=$(gitea generate secret SECRET_KEY)
export GITEA__OAUTH2__JWT_SECRET=$(gitea generate secret JWT_SECRET)
export GITEA__SERVER__LFS_JWT_SECRET=$(gitea generate secret LFS_JWT_SECRET)
env2ini::log "...Initial secrets generated\n"
}
# save existing envs prior to script execution. Necessary to keep order of preexisting and custom envs
env | (grep -e '^GITEA__' || [[ $? == 1 ]]) > $TMP_EXISTING_ENVS_FILE
# MUST BE CALLED BEFORE OTHER CONFIGURATION
env2ini::generate_initial_secrets
env2ini::load_config_sources "$ENV_TO_INI_MOUNT_POINT/inlines/"
env2ini::load_config_sources "$ENV_TO_INI_MOUNT_POINT/additionals/"
# load existing envs to override auto generated envs
env2ini::reload_preset_envs
env2ini::log "=== All configuration sources loaded ===\n"
# safety to prevent rewrite of secret keys if an app.ini already exists
if [ -f $${GITEA_APP_INI} ]; then
env2ini::log 'An app.ini file already exists. To prevent overwriting secret keys, these settings are dropped and remain unchanged:'
env2ini::log ' - security.INTERNAL_TOKEN'
env2ini::log ' - security.SECRET_KEY'
env2ini::log ' - oauth2.JWT_SECRET'
env2ini::log ' - server.LFS_JWT_SECRET'
unset GITEA__SECURITY__INTERNAL_TOKEN
unset GITEA__SECURITY__SECRET_KEY
unset GITEA__OAUTH2__JWT_SECRET
unset GITEA__SERVER__LFS_JWT_SECRET
fi
gitea config edit-ini --apply-env --config "$GITEA_APP_INI" --out "$GITEA_APP_INI"
values:
strategy:
type: Recreate
@@ -30,6 +199,11 @@ spec:
type: RuntimeDefault
image:
# renovate: currentValue=1.27.3-rootless currentDigest=sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
tag: 1.27.3
digest: sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
rootless: true
pullPolicy: IfNotPresent
+33
View File
@@ -0,0 +1,33 @@
{
"customManagers": [
{
"customType": "regex",
"description": "Track gitea rootless image; chart appends -rootless to tag automatically",
"fileMatch": ["kubernetes/app/gitea/release\\.yaml$"],
"matchStrings": [
"(?<indentation>\\s+)# renovate: currentValue=(?<currentValue>[^\\s]+) currentDigest=(?<currentDigest>sha256:[a-f0-9]+)\\n\\s+tag: [^\\s]+\\n\\s+digest: [^\\s]+"
],
"depNameTemplate": "gitea/gitea",
"datasourceTemplate": "docker",
"autoReplaceStringTemplate": "{{indentation}}# renovate: currentValue={{newValue}} currentDigest={{#if newDigest}}{{{newDigest}}}{{else}}{{{currentDigest}}}{{/if}}\n{{indentation}}tag: {{newMajor}}.{{newMinor}}.{{newPatch}}\n{{indentation}}digest: {{#if newDigest}}{{{newDigest}}}{{else}}{{{currentDigest}}}{{/if}}"
}
],
"packageRules": [
{
"matchFileNames": ["kubernetes/app/gitea/**"],
"semanticCommitScope": "k8s/gitea"
},
{
"matchFileNames": ["kubernetes/app/gitea/**"],
"matchPackageNames": ["gitea/gitea"],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"description": "Ignore infrastructure images",
"matchFileNames": ["kubernetes/app/gitea/**"],
"matchPackageNames": ["creativeprojects/resticprofile", "postgres"],
"enabled": false
}
]
}
-76
View File
@@ -1,76 +0,0 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: grocy-config-backup
namespace: grocy
labels:
app: grocy-backup
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: grocy-backup
spec:
restartPolicy: OnFailure
initContainers:
- name: sqlite-backup
image: alpine:3.21
command:
- sh
- -c
- |
apk add --no-cache sqlite
sqlite3 /db-local/grocy.db ".backup /backup/grocy.db"
volumeMounts:
- name: db
mountPath: /db-local
readOnly: true
- name: backup-tmp
mountPath: /backup
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n grocy-config backup
resticprofile -c /secrets/profiles.yaml -n grocy-config copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: grocy-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: grocy-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: config
mountPath: /config
readOnly: true
- name: backup-tmp
mountPath: /backup
volumes:
- name: secrets
secret:
secretName: grocy-backup-config
- name: config
persistentVolumeClaim:
claimName: grocy-config
- name: db
persistentVolumeClaim:
claimName: grocy-db
- name: backup-tmp
emptyDir: {}
-96
View File
@@ -1,96 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: grocy
namespace: grocy
labels:
app: grocy
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: grocy
template:
metadata:
labels:
app: grocy
spec:
securityContext:
# runAsNonRoot omitted — LinuxServer image requires root for s6-overlay init
seccompProfile:
type: RuntimeDefault
initContainers:
- name: migrate-db-to-local
image: busybox:1.36
command:
- sh
- -c
- |
if [ ! -d /config/data ]; then
echo "No /config/data yet — skipping"
exit 0
fi
cd /config/data
for db in *.db; do
[ -f "$db" ] && [ ! -L "$db" ] || continue
echo "Migrating $db to local storage..."
cp "$db" "/db-local/$db"
rm -f "$db"
ln -sf "/db-local/$db" "$db"
done
echo "Done"
volumeMounts:
- name: config
mountPath: /config
- name: db
mountPath: /db-local
containers:
- name: grocy
image: linuxserver/grocy:4.6.0
ports:
- containerPort: 80
name: http
protocol: TCP
env:
- name: PUID
value: "1027"
- name: PGID
value: "100"
- name: TZ
value: Etc/UTC
- name: UMASK
value: "002"
- name: GROCY_AUTH_CLASS
value: "Grocy\\Middleware\\ReverseProxyAuthMiddleware"
- name: GROCY_REVERSE_PROXY_AUTH_HEADER
value: Remote-User
volumeMounts:
- name: config
mountPath: /config
- name: db
mountPath: /db-local
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 90
periodSeconds: 30
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30
periodSeconds: 10
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
memory: 512Mi
volumes:
- name: config
persistentVolumeClaim:
claimName: grocy-config
- name: db
persistentVolumeClaim:
claimName: grocy-db
-50
View File
@@ -1,50 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: grocy
spec:
podSelector: {}
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: grocy
spec:
podSelector:
matchLabels:
app: grocy
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: traefik
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-egress
namespace: grocy
spec:
podSelector:
matchLabels:
app: grocy-backup
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- ports:
- port: 8888
protocol: TCP
- ports:
- port: 443
protocol: TCP
-33
View File
@@ -1,33 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: grocy-config-nfs
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
storageClassName: ""
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- noatime
- timeo=30
- retrans=3
nfs:
server: synology.storage.lviv
path: ${GROCY_NFS_PATH}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grocy-config
namespace: grocy
spec:
accessModes:
- ReadWriteOnce
storageClassName: ""
volumeName: grocy-config-nfs
resources:
requests:
storage: 5Gi
@@ -1,26 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: grocy-backup-config
namespace: grocy
stringData:
profiles.yaml: ENC[AES256_GCM,data:oCTBX2/3P6xmhgi4ObZ81gl8goRVbqn1kL0ZNbiyurzX+omqsk7RrpVpKXsBwAXbqDIvwAk6gWyFQwT3g8LQEzpLJTXLSJE4pNSlpK3V02xtWzQu+28rPptnpRKqYqLM7DGeTmm1AJwzTNaCG7X46RBCc1gWP8S6vXvjjwpdqpsJH3G2zQpZsx8fmlRC3Vc38DWq1EQatnOi+RFMd2e7WufL6Yari9r14E8tpp3s1CZ1qwQ9W9K5uHAjXI+kuPL/NVRqYzkqwuSvmD4QTtHhH1eyu3WFIkIkah1tDYAivy+wCZjMLSe+q6heHiXIMV5IaVj0tTg/L5wbjwwQZXB53nnbuadViPuC3kFBej7QHkx6hwIMmEgKsp2skG7mFFLkYm9AXDOUxUZlrVU3eN47PxR2nFNYiWoQi5YSYkltBA4eEFZ9d4EKFcxWqj1tr7Y4VDtTjz2ZEfff/eyu8oJ75XdFb74Or8PXBKfFUpLjtOnax7Dc7Ff/fv1oTCvmHSxyv4pgdCfrkwERnMd5DspkxEppCqPpxtxMVIp31cAWDkvJ21wmCR9esCVHfe1eTj4+76Ok7c3vEXy49M/K9GstwPIWcEwiDrvftiXMEgHn95YRcNBGdjh3nLJ76DTO+pTsuVoOW5Bogcn4W7hGrgYKFFFESMzXUWRlF15YPN0RHg/2TI0I9Ke1lIOhUZj1ljefH9UwnERhKmXZ7AlsXvDPqUpYPwPmW55bbkDDa/VDp58BLA==,iv:tfWTMYk99Jkje9GAHLEUu77LIIP3XQjWaR25HQYHOLg=,tag:chdgdkDNp57f3OCIEOcYTw==,type:str]
restic-password-nas: ENC[AES256_GCM,data:bG0LFnoo84t/r+cOGwjBPALc4dzrUj3Y9sMIuF7W1bjEkC9XsvSTQkczK1vmevhKuWdaaPYBr72gFzHcga7hUQ==,iv:tD1zf/mWknbMWtn/k0o8zJPcNvBK2Xa12eNSPyarybI=,tag:b03st6HrnpgXgkjDn0Gp+Q==,type:str]
restic-password-b2: ENC[AES256_GCM,data:nyDMggQFE5Z2aCz/+kTdIIYe2BXisTb/MlVRfiRMCKjPPZDQ49jyf3z986jEXp9CyxKK665ySjnZEXn3txi/PQ==,iv:xvdCBKhlFPMH4cTXSm2VtFlpJlgbiggvdvfyjB7b76I=,tag:HEoizYHWcnkVTAe3APWsMA==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:iXPdIOHzrggnh2pjimgFpQPNmA2FZgj8Mg==,iv:uS91Eg9xOHdZH113zfzlldgmCnFTopuOx/mmlsQsUC8=,tag:QDtAIhKwUkpt3v/tRZBYFA==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:RLT5JBRs7JfcJzFv6MilqXUTf5MocOeB1Pp1kQaUcg==,iv:FqyfAgE0wM7KFdPTBM2s3eKrXvzeUCO7qLyUwZUCPqM=,tag:rM15UoD2CyZ4yRYAQJ6xoA==,type:str]
sops:
age:
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArR1BFRmFZU3dJblVEVnRr
bksyUzVHU0NjUkY2bGlXMzh3N0VEall4TFNVCmlBOUM4UnBPeVRPOHp3SnI5djUr
elpodVdqSWt2L0ovMFZCNUZTVkxIcVEKLS0tIDRvNzdSQ3hxN0o3R3ViSzJoQi9E
eDZTN3Fzak81RDJPR2dVOHlKOHJURzAK8DUPG6iCb6s7CQ6/+TZrIcLDKbN8bmh6
lUwBN0Ciu8OAX+tRW6P3R/iZebc9s5jH/VkzGsR9qGjKw5BsNB811Q==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-11T19:28:51Z"
mac: ENC[AES256_GCM,data:2SpDKL7Mwu/h7KLQoBXnk9iB84XNaex8hVbaUqmq4myIHAzvntb/zLXOexhsKPbQ0Ea7QDOKZIpkAG2dBPtRMtZWTr9uPpMoHzQG2lDGnYKGvBJXW/7WmaCdXlDf1FukqnYJZ3YoY+5xpTpYpXbWv1fyygp1YWmjKzY5qfcjtvw=,iv:TNbbiRmRRvPuQKiBjan7CVylNrt+eTjXxwKTJbeOhLw=,tag:9bqc9L4LlSq/d+oT257rsQ==,type:str]
encrypted_regex: ^(data|stringData|email)$
version: 3.12.1
-12
View File
@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: grocy
namespace: grocy
spec:
selector:
app: grocy
ports:
- port: 80
targetPort: 80
name: http
+9 -4
View File
@@ -24,6 +24,7 @@ data:
type: jellyfin
url: https://${JELLYFIN_HOST}
key: "{{HOMEPAGE_VAR_JELLYFIN_API_KEY}}"
version: 2 # Jellyfin 12 dropped /emby paths and ?api_key auth
enableBlocks: true
enableUser: true
enableMediaControl: false
@@ -86,10 +87,14 @@ data:
icon: paperless-ngx.png
href: https://${PAPERLESS_HOST}/
description: Documents storage
- Grocy:
icon: grocy.png
href: https://${GROCY_HOST}/
description: Chores and inventory tracker
- Vikunja:
icon: vikunja.png
href: https://${VIKUNJA_HOST}/
description: Task management
- Reitti:
icon: mdi-map-marker-path
href: https://${REITTI_HOST}/
description: Location history
widgets.yaml: |
---
+8 -4
View File
@@ -24,7 +24,7 @@ spec:
type: RuntimeDefault
containers:
- name: homepage
image: ghcr.io/gethomepage/homepage:v1.10.1
image: ghcr.io/gethomepage/homepage:v2.7.0
ports:
- containerPort: 3000
name: http
@@ -33,8 +33,12 @@ spec:
- secretRef:
name: homepage-credentials
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOMEPAGE_ALLOWED_HOSTS
value: "${HOMEPAGE_HOST}"
value: "$(MY_POD_IP):3000,${HOMEPAGE_HOST}"
volumeMounts:
- name: config
mountPath: /app/config/settings.yaml
@@ -54,13 +58,13 @@ spec:
livenessProbe:
httpGet:
port: 3000
path: /
path: /api/healthcheck
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
port: 3000
path: /
path: /api/healthcheck
initialDelaySeconds: 10
periodSeconds: 10
resources:
+23
View File
@@ -0,0 +1,23 @@
{
"kubernetes": {
"fileMatch": ["kubernetes/app/homepage/.+\\.yaml$"]
},
"packageRules": [
{
"matchFileNames": ["kubernetes/app/homepage/**"],
"semanticCommitScope": "k8s/homepage"
},
{
"matchFileNames": ["kubernetes/app/homepage/**"],
"matchPackageNames": ["ghcr.io/gethomepage/homepage"],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"matchFileNames": ["kubernetes/app/homepage/**"],
"matchPackageNames": ["ghcr.io/gethomepage/homepage"],
"matchUpdateTypes": ["major"],
"automerge": false
}
]
}
+1 -1
View File
@@ -28,7 +28,7 @@ spec:
main:
image:
repository: ghcr.io/immich-app/immich-server
tag: v2.7.5
tag: v3.3.6
resources:
requests:
cpu: 100m
+171
View File
@@ -0,0 +1,171 @@
# Jellyfin SQLite database backup.
# jellyfin.db lives on the local-path PVC (/config/data/jellyfin.db is a symlink
# to it), so it is read from jellyfin-data directly. sqlite3 ".backup" uses the
# online backup API — no downtime, consistent snapshot while Jellyfin runs.
# The volume is mounted read-write on purpose: jellyfin.db is in WAL mode, and
# SQLite cannot open a WAL database from a read-only filesystem once Jellyfin has
# closed it and removed the -wal/-shm files (e.g. while scaled to zero).
# The connection itself is read-only (?mode=ro). A read-write connection that
# believes it is the last one checkpoints and deletes -wal/-shm on close; when
# Jellyfin had lost its POSIX locks this deleted them under the running server
# and corrupted jellyfin.db (2026-09-16). The copy is integrity-checked so a
# broken snapshot fails the job instead of landing in restic.
apiVersion: batch/v1
kind: CronJob
metadata:
name: jellyfin-db-backup
namespace: jellyfin
labels:
app: jellyfin-backup
spec:
schedule: "30 2 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: jellyfin-backup
spec:
restartPolicy: OnFailure
initContainers:
- name: sqlite-backup
image: alpine:3.21
command:
- sh
- -c
- |
set -e
apk add --no-cache sqlite
sqlite3 "file:/db-local/jellyfin.db?mode=ro" ".backup /backup/jellyfin.db"
[ "$(sqlite3 /backup/jellyfin.db 'PRAGMA integrity_check')" = ok ]
volumeMounts:
- name: db
mountPath: /db-local
- name: backup-tmp
mountPath: /backup
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n jellyfin-db backup
resticprofile -c /secrets/profiles.yaml -n jellyfin-db copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: jellyfin-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: jellyfin-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: backup-tmp
mountPath: /backup
volumes:
- name: secrets
secret:
secretName: jellyfin-backup-config
- name: db
persistentVolumeClaim:
claimName: jellyfin-data
- name: backup-tmp
emptyDir: {}
---
# Jellyfin configuration backup.
# Only non-regenerable state: server config, library definitions, plugin
# configuration (including the Authelia SSO settings), collections, and the
# Intro Skipper analysis results. Metadata (27G), trickplay (20G) and extracted
# subtitles (1.7G) are deliberately excluded — they are regenerable from the
# media files and the metadata providers.
# Intro Skipper keeps its results in two live WAL-mode SQLite databases, so they
# are snapshotted with sqlite3 ".backup" rather than copied as files (which could
# capture a torn page mid-write). Read-write mount and read-only connection for
# the same reasons as above.
apiVersion: batch/v1
kind: CronJob
metadata:
name: jellyfin-config-backup
namespace: jellyfin
labels:
app: jellyfin-backup
spec:
schedule: "30 3 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: jellyfin-backup
spec:
restartPolicy: OnFailure
initContainers:
- name: sqlite-backup
image: alpine:3.21
command:
- sh
- -c
- |
set -e
apk add --no-cache sqlite
mkdir -p /backup/introskipper
for db in introskipper.db introskipper-cache.db; do
sqlite3 "file:/config/data/introskipper/$db?mode=ro" ".backup /backup/introskipper/$db"
[ "$(sqlite3 "/backup/introskipper/$db" 'PRAGMA integrity_check')" = ok ]
done
volumeMounts:
- name: config
mountPath: /config
- name: backup-tmp
mountPath: /backup
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n jellyfin-config backup
resticprofile -c /secrets/profiles.yaml -n jellyfin-config copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: jellyfin-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: jellyfin-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: config
mountPath: /config
readOnly: true
- name: backup-tmp
mountPath: /backup
volumes:
- name: secrets
secret:
secretName: jellyfin-backup-config
- name: config
persistentVolumeClaim:
claimName: jellyfin-config
- name: backup-tmp
emptyDir: {}
+10 -1
View File
@@ -43,7 +43,7 @@ spec:
mountPath: /db-local
containers:
- name: jellyfin
image: jellyfin/jellyfin:10.11.8
image: jellyfin/jellyfin:12.4
env:
- name: JELLYFIN_PublishedServerUrl
value: https://${JELLYFIN_HOST}
@@ -62,6 +62,15 @@ spec:
resources:
limits:
gpu.intel.com/i915: "1"
# 12.0's first boot runs one-way database migrations that take several
# minutes and must not be interrupted. startupProbe holds liveness off
# until the server answers; liveness/readiness take over once up.
startupProbe:
httpGet:
port: 8096
path: /health
failureThreshold: 90
periodSeconds: 10
livenessProbe:
httpGet:
port: 8096
@@ -45,3 +45,29 @@ spec:
protocol: UDP
- port: 1900
protocol: UDP
---
# Backup jobs need DNS, the Synology rest-server (8888) and B2 over HTTPS.
# Declaring egress here also confines the backup pods to exactly those.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-egress
namespace: jellyfin
spec:
podSelector:
matchLabels:
app: jellyfin-backup
policyTypes:
- Egress
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- ports:
- port: 8888
protocol: TCP
- ports:
- port: 443
protocol: TCP
+5
View File
@@ -7,6 +7,11 @@
"matchFileNames": ["kubernetes/app/jellyfin/**"],
"semanticCommitScope": "k8s/jellyfin"
},
{
"matchFileNames": ["kubernetes/app/jellyfin/**"],
"matchPackageNames": ["jellyfin/jellyfin"],
"versioning": "regex:^(?<minor>\\d+)\\.(?<patch>\\d+)$"
},
{
"matchFileNames": ["kubernetes/app/jellyfin/**"],
"matchPackageNames": ["jellyfin/jellyfin"],
@@ -0,0 +1,26 @@
apiVersion: v1
kind: Secret
metadata:
name: jellyfin-backup-config
namespace: jellyfin
stringData:
profiles.yaml: ENC[AES256_GCM,data:A1EdRDhXncj5EIjg6iyw+mmiW7ObrGVlBmnQn1GJbF6P+yHmw97h4Hk/yHfMM1tDrNhiy8jpMWmXHGuHa56QFGPQzPCkaMtjqwO2pUcXrdrv8ThVtX3ZgyzvHX1fL5lwDm5aG0mMjuV51+j5URR6P3n+GCCg3OYP/DbEngroT5f7QKhFb4hwHdGnF9tHLwKH/hZrXJIH8XLeJD5BbjHBRFiXEpYlgmHtZ3Vb3SzJRMSMBMH4wBj2obxL2nOqKDXaK/NRV1XHuN+/enKvQaFm9j3h7F4G4MD1Gfr6LwjtGiV5S8ngcQo9gQptardTVqxTtKHKA80pbtSoqwP3TuR6Vh6U9KNqDiaLte6wqoOxQ6Tb3oCTnFJOLn1WE/PBxTPp9VDRfwXBlhPtYK8JhaTcQHdjkM1xw3qzyL09XMNKWf1wvlaoszurwlxI+bSKNlDQjC/dUd/j067xFf1SRNze++75QJkrp1o2+4DCrdK4QiPd9FeacgUml/uI957i0ZkBQLTn9WHUcp7kLmALzu8byDHgf2jkHYEfJ3QKg5yjpE0aQ2Iub/8fnQC732YOUGeP5HKcFTl8fU4xdRrIPbz8K728FYukeU4pzLQY+2qOENfMSFoVMIYpD5LSyv+RqIejb6x1ZYIchPQ91aBsnkXRSL6b2Lj60vccF1cyilrPAgBAzM6FeAvAHqbalSMdvyMwd6AgHgW0jOE9dGquxQfliCyoU9vcsNKY/2y01MWiH7wa80IjvrrUTiuQHh7h2g+JYqiXoyA2R9qXQBScjiWQbtUAYQjBqqKGdTSxiUzYiCBw75FMJxj2BUE739bQQNCBN18WLSyietS7LiTu50cL0jD79zNYGqi4vduHdK+MZuhZa5I/5OoHo71VGj1nkyKYBOemA5zdW3xbS4ZOnblOYeEkhx0It1KafAbN4JnY7ZPCQqH7JyAxKIV1YR4zKEMpFgEzIKUFl0Cr7PrZ5/hoA6HhuzzWq6GvtQ+4PJusp5Spu+d7AEZLSPqPrSlK6iCQA3nKG+A/wau4BI4P83Q2LzW5Aa4aujNZJ+mCYAyPkkQqt6+MTWgFCKa61fZT8Rypw+q1+BRJrY+/2PU/DUeEBb6hBTcL24YRHEkcPlcU4FkK4/WppALM/FWySFgfdwL9XqhOWwuhJ3nfMFEMFR9TkbrTHGNzC7JRTcIo4FIhvgoNtQ2WujgB01a79cqGcw2sSWDTeUCH5SaeYiQSfmI1n7OyBP9vk3pc8FrqRVZkpetlrYCdart6FKDuO+P4YhOpk42GrL+0lWis4Hkmos9REpKP0jAkvgcI9nDHTq1stHbPuqVXsBaah0mrbk450ZAREmGMx/4Gc3ltXh8YfgT26HSDCl3SRtXgnLsTA9XKYgR1zgvT8a82EYDg08af5X1yGQFutxIkfIwIijAIx+Y9NY6KeWvgBYxjgkKkNvY29kCZZ5POKw5L9YiMOcp4jSTK+dNdPqCWplSzyaLgrFGBbzOcQVagm9UkZEXLv44H60fMMExdHzuo81Bh1JV6luVqqDcHlnigxM6QNMNavgT6G60kFfRmEyRldSrpefKkH9GtxJMJgWMgZhhdDkkOzFsou/GuaWCLQp3JyOmZiKisJu5Nytkl4h0rPGR+Oe26Z5IxCYOjRgmp8+TT4JMmHIvlL7Ljf1PRQS6eWz9ICvoK/nvLaj0/rjEvQ9BZKY1WVzGGSYrvrNzNbprhaT6+DE1Xdd9qmwaP+B9czB54KCrKd17knL0GWYkneOM/M+UNeD4nDeK8fShHJeIYI5+7QRh54BsGlmwgw8mYnysagsQeav56aZC7Lcg3e1uCeVSHY7RdrUJ7i+++5v95TpIP8tQCFO5RvlIp7UPChdHOyxqlGqGMWs66Jvpq47ENN6OObAdR0uAHPA/MsvVO0ygmANE8Sog2JLJbQO6+3Wsmg/n+Is2Ps1lEjSft6Kn/SrmPG3ilOedpirrnn1cfWOHAXtfruZ9xB2GIdhBHgVFgjSUmAvd+9R+MV+urq3d/Czr1+w2WDryOPPw=,iv:+DuENxnJKTQ3ZKom2uNsW7QU1eMsrO+ZFCo5aW51pwE=,tag:4MiKklkRuvJuCvlu8tV07w==,type:str]
restic-password-nas: ENC[AES256_GCM,data:2uDszBmHa4YG1oYyhN4Wjw0Lcc6/MpmrCHldwNF22kFiokbx4R+zrd8ML4NvK1ezmQmMDhlb3RsyAcQNRgJ9Ng==,iv:96pdW1B6M97+eG1EC2YPbNmO4OQmt47uiJOWuvzdYzE=,tag:dQKHD+2LeWL5+tcQbrbN0g==,type:str]
restic-password-b2: ENC[AES256_GCM,data:ceHYbKn174cIm38qnlGvx9edxP8apPWkwx7wAkNncSF6kIE5OvXVsNAWcjsZKQLEgYXFX5NwLZMDPY0edtAhNQ==,iv:mDki/Soljcnp60cfihK2EqfTNHv/VnoieetBThFqLtE=,tag:5VMRM0fe4nFDal3BO+ninw==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:6u+UlYRILbb0TRTdISi7TdVItw4omfodFw==,iv:A+be6o3ZjfYsyvEk750DcoSlBsKYM2FncSY8kqkcpqs=,tag:9ReTmil5sAfo+04IfdaKYw==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:p+irC0iQR3RjhmElD+tZcXcgWsV8ROGHsEOJ7kxXvg==,iv:2VgptxIaJ0v1e5jejLyBIPHnvxD6ldgTWn/3oa1M32Y=,tag:9gHDOD0524IAoQQLOytT+w==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5Mk5NMVNxOG5JWHhkMjlh
YzRyYVhYT2tncmVzRzB5NXc2aEZQcUVtVFUwCnl2U2JQSkdpTjZVb1pPTmlPeVRt
SURJNFFzUTFTdVZpckV5d2puN2xQTmcKLS0tIDUxeXFLdGxOdDVLdng2SFRWb296
NFpDSkZmYkY0Vyt4Nml3N3VXbFdZZ0kKfNoqtyb+16qpDdCHgp3uiDCHqtiDXEjB
p1kaQkgF6xqFohomV+6x0RsW+r7PaGh8oWRut0NBRahZwIKBucZUTw==
-----END AGE ENCRYPTED FILE-----
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-09-13T13:09:04Z"
mac: ENC[AES256_GCM,data:E8xZZ+0hdRPKE/nss00gopEg7feF7t4pXBqYkEtr9yzHn1Vz4Opfv4vBDDgwqntZdekE40rpzWTuPJDAfOrhDsCsgZjOgWa6VpSRNM9GQ37Ax/fv/G42CXtwBPCzY1p2GuXr9nsJI+/P4c6sx4FIXZ0o4QLCHuStkYpjbHlyIFA=,iv:LJCUP/KbZ0tZPdG2hedHfZMfYWS+w4T73JaI7nLe2uQ=,tag:J7GT2jm6iHFZ8oMV2ecEIw==,type:str]
version: 3.13.3
+2 -1
View File
@@ -17,7 +17,8 @@ spec:
interval: 1m0s
values:
image:
tag: "v1.6.1"
# renovate: datasource=docker depName=ghcr.io/hargata/lubelogger
tag: "v1.7.4"
updateStrategy:
type: RollingUpdate
+38
View File
@@ -0,0 +1,38 @@
{
"kubernetes": {
"fileMatch": ["kubernetes/app/lubelogger/.+\\.yaml$"]
},
"customManagers": [
{
"customType": "regex",
"fileMatch": ["kubernetes/app/lubelogger/release\\.yaml$"],
"matchStrings": [
"#\\s*renovate:\\s*datasource=(?<datasource>\\S+)\\s+depName=(?<depName>\\S+)\\s*\\n\\s*tag:\\s*[\"']?(?<currentValue>[^\\s\"']+)"
]
}
],
"packageRules": [
{
"matchFileNames": ["kubernetes/app/lubelogger/**"],
"semanticCommitScope": "k8s/lubelogger"
},
{
"matchFileNames": ["kubernetes/app/lubelogger/**"],
"matchPackageNames": ["ghcr.io/hargata/lubelogger"],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"matchFileNames": ["kubernetes/app/lubelogger/**"],
"matchPackageNames": ["ghcr.io/hargata/lubelogger"],
"matchUpdateTypes": ["major"],
"automerge": false
},
{
"description": "Ignore infrastructure images",
"matchFileNames": ["kubernetes/app/lubelogger/**"],
"matchPackageNames": ["postgres", "creativeprojects/resticprofile"],
"enabled": false
}
]
}
@@ -45,10 +45,13 @@ spec:
- psql -d postgres -c 'CREATE DATABASE "prowlarr-log"' || true
containers:
- name: prowlarr
image: lscr.io/linuxserver/prowlarr:2.3.5
image: lscr.io/linuxserver/prowlarr:2.7.0
envFrom:
- configMapRef:
name: media-common-env
env:
- name: PROWLARR__SERVER__TRUSTEDNETWORKS
value: ${POD_CIDR}
ports:
- containerPort: 9696
name: http
@@ -29,7 +29,7 @@ spec:
mountPath: /media
containers:
- name: qbittorrent
image: lscr.io/linuxserver/qbittorrent:5.2.0
image: lscr.io/linuxserver/qbittorrent:5.3.0
envFrom:
- configMapRef:
name: media-common-env
+4 -1
View File
@@ -54,10 +54,13 @@ spec:
- psql -d postgres -c 'CREATE DATABASE "radarr-log"' || true
containers:
- name: radarr
image: lscr.io/linuxserver/radarr:6.1.1
image: lscr.io/linuxserver/radarr:6.4.4
envFrom:
- configMapRef:
name: media-common-env
env:
- name: RADARR__SERVER__TRUSTEDNETWORKS
value: ${POD_CIDR}
ports:
- containerPort: 7878
name: http
+4 -1
View File
@@ -54,10 +54,13 @@ spec:
- psql -d postgres -c 'CREATE DATABASE "sonarr-log"' || true
containers:
- name: sonarr
image: lscr.io/linuxserver/sonarr:4.0.17
image: lscr.io/linuxserver/sonarr:4.0.20
envFrom:
- configMapRef:
name: media-common-env
env:
- name: SONARR__SERVER__TRUSTEDNETWORKS
value: ${POD_CIDR}
ports:
- containerPort: 8989
name: http
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
targetNamespace: media
values:
image:
tag: v3.2.0
tag: v3.5.1
podLabels:
app: seerr
extraEnv:
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: gotenberg
image: gotenberg/gotenberg:8
image: gotenberg/gotenberg:9
command:
- gotenberg
- --chromium-disable-javascript=true
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: tika
image: apache/tika:3.2.3.0
image: apache/tika:3.3.3.0
env:
- name: TZ
value: Europe/Kyiv
+28 -3
View File
@@ -24,7 +24,7 @@ spec:
type: RuntimeDefault
containers:
- name: paperless
image: ghcr.io/paperless-ngx/paperless-ngx:2.20
image: ghcr.io/paperless-ngx/paperless-ngx:3.4
ports:
- containerPort: 8000
name: http
@@ -86,6 +86,31 @@ spec:
value: allauth.socialaccount.providers.openid_connect
- name: PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS
value: "false"
- name: PAPERLESS_AI_ENABLED
value: "true"
- name: PAPERLESS_AI_LLM_BACKEND
value: openai-like
- name: PAPERLESS_AI_LLM_ENDPOINT
value: https://api.anthropic.com/v1/
- name: PAPERLESS_AI_LLM_MODEL
value: claude-haiku-5-5
- name: PAPERLESS_AI_LLM_API_KEY
valueFrom:
secretKeyRef:
name: paperless-ai
key: anthropic-api-key
# Haiku 5.5 only accepts temperature 1; llama-index defaults to 0.1
- name: PAPERLESS_AI_LLM_EXTRA_PARAMS
value: '{"temperature": 1}'
- name: PAPERLESS_AI_LLM_OUTPUT_LANGUAGE
value: Ukrainian
- name: PAPERLESS_AI_LLM_EMBEDDING_BACKEND
value: huggingface
- name: PAPERLESS_AI_LLM_EMBEDDING_MODEL
value: intfloat/multilingual-e5-small
# matches the embedding model's 512-token input limit
- name: PAPERLESS_AI_LLM_EMBEDDING_CHUNK_SIZE
value: "512"
volumeMounts:
- name: data
mountPath: /usr/src/paperless/data
@@ -110,9 +135,9 @@ spec:
resources:
requests:
cpu: 100m
memory: 512Mi
memory: 1536Mi
limits:
memory: 5Gi
memory: 6Gi
volumes:
- name: data
persistentVolumeClaim:
+37
View File
@@ -0,0 +1,37 @@
{
"kubernetes": {
"fileMatch": ["kubernetes/app/paperless/.+\\.yaml$"]
},
"packageRules": [
{
"matchFileNames": ["kubernetes/app/paperless/**"],
"semanticCommitScope": "k8s/paperless"
},
{
"matchFileNames": ["kubernetes/app/paperless/**"],
"matchPackageNames": [
"ghcr.io/paperless-ngx/paperless-ngx",
"apache/tika",
"gotenberg/gotenberg"
],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"matchFileNames": ["kubernetes/app/paperless/**"],
"matchPackageNames": [
"ghcr.io/paperless-ngx/paperless-ngx",
"apache/tika",
"gotenberg/gotenberg"
],
"matchUpdateTypes": ["major"],
"automerge": false
},
{
"description": "Ignore infrastructure images",
"matchFileNames": ["kubernetes/app/paperless/**"],
"matchPackageNames": ["postgres", "redis", "creativeprojects/resticprofile"],
"enabled": false
}
]
}

Some files were not shown because too many files have changed in this diff Show More