1 Commits
139 changed files with 1264 additions and 22490 deletions
+5 -7
View File
@@ -26,9 +26,10 @@ homelab-v2/
│ └── configs/ # ClusterIssuer, MetalLB config
├── app/
│ ├── archmirror/
│ ├── blog/
│ ├── external/ # External service vars (e.g. Home Assistant)
│ ├── firefly/
│ ├── gitea/
│ ├── grocy/
│ ├── homepage/
│ ├── immich/
│ ├── jellyfin/
@@ -36,8 +37,7 @@ homelab-v2/
│ ├── media/
│ ├── paperless/
│ ├── pihole/
│ ├── podsync/
│ └── vikunja/
│ └── podsync/
└── docs/
└── k8s-service-spec.md
```
@@ -47,19 +47,17 @@ 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
@@ -1,4 +0,0 @@
creation_rules:
- path_regex: .*\.sops\.yaml
encrypted_regex: "^(data|stringData|email)$"
age: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
@@ -1,19 +0,0 @@
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
@@ -1,23 +0,0 @@
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
@@ -1,22 +0,0 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,17 +0,0 @@
---
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
@@ -1,17 +0,0 @@
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
@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
@@ -1,60 +0,0 @@
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"
@@ -1,136 +0,0 @@
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
@@ -1,8 +0,0 @@
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/
@@ -1,24 +0,0 @@
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
@@ -1,23 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,36 +0,0 @@
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
@@ -1,76 +0,0 @@
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
@@ -1,23 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,253 +0,0 @@
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
@@ -1,88 +0,0 @@
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
@@ -1,266 +0,0 @@
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
@@ -1,181 +0,0 @@
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
@@ -1,236 +0,0 @@
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
@@ -1,77 +0,0 @@
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
@@ -1,27 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,27 +0,0 @@
# 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
@@ -1,5 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- gotk-components.yaml
- gotk-sync.yaml
-5
View File
@@ -1,5 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- flux-system
- apps/ks.yaml
@@ -6,8 +6,6 @@ metadata:
namespace: archmirror
data:
nginx.conf: |
worker_processes auto;
events {
worker_connections 1024;
}
@@ -17,8 +15,6 @@ 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
@@ -1,29 +0,0 @@
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
@@ -1,149 +0,0 @@
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
-26
View File
@@ -1,26 +0,0 @@
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
@@ -1,24 +0,0 @@
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
@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: blog
namespace: blog
spec:
selector:
app: blog
ports:
- port: 8080
targetPort: 8080
name: http
+78
View File
@@ -0,0 +1,78 @@
# 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
@@ -0,0 +1,63 @@
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
@@ -0,0 +1,123 @@
# 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
@@ -0,0 +1,175 @@
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
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,26 @@
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,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: dawarich
name: cryptpad
@@ -0,0 +1,56 @@
# 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
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,33 @@
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 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vikunja-files
namespace: vikunja
name: cryptpad-onlyoffice
namespace: cryptpad
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs-synology-ssd
storageClassName: local-path
resources:
requests:
storage: 10Gi
storage: 5Gi
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,17 @@
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
@@ -1,55 +0,0 @@
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: {}
-114
View File
@@ -1,114 +0,0 @@
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
@@ -1,190 +0,0 @@
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
@@ -1,38 +0,0 @@
{
"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
}
]
}
-27
View File
@@ -1,27 +0,0 @@
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
@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: dawarich-db
namespace: dawarich
spec:
clusterIP: None
selector:
app: dawarich-db
ports:
- port: 5432
targetPort: 5432
@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: dawarich-redis
namespace: dawarich
spec:
selector:
app: dawarich-redis
ports:
- port: 6379
targetPort: 6379
name: redis
@@ -1,88 +0,0 @@
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
@@ -1,13 +1,12 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: vikunja-db-backup
namespace: vikunja
name: firefly-db-backup
namespace: firefly
labels:
app: vikunja-backup
app: firefly-backup
spec:
schedule: "0 2 * * *"
suspend: true
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
@@ -16,31 +15,31 @@ spec:
template:
metadata:
labels:
app: vikunja-backup
app: firefly-backup
spec:
restartPolicy: OnFailure
initContainers:
- name: pg-dump
image: postgres:18
image: postgres:17
imagePullPolicy: IfNotPresent
env:
- name: PGHOST
value: vikunja-db
value: firefly-db
- name: PGUSER
valueFrom:
secretKeyRef:
name: vikunja-credentials
name: firefly-credentials
key: DB_USERNAME
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: vikunja-credentials
name: firefly-credentials
key: DB_PASSWORD
- name: PGDATABASE
valueFrom:
secretKeyRef:
name: vikunja-credentials
key: DB_DATABASE_NAME
name: firefly-credentials
key: DB_DATABASE
command:
- sh
- -c
@@ -56,18 +55,18 @@ spec:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n vikunja-db backup
resticprofile -c /secrets/profiles.yaml -n vikunja-db copy
resticprofile -c /secrets/profiles.yaml -n firefly-db backup
resticprofile -c /secrets/profiles.yaml -n firefly-db copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: vikunja-backup-config
name: firefly-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: vikunja-backup-config
name: firefly-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
@@ -78,20 +77,19 @@ spec:
volumes:
- name: secrets
secret:
secretName: vikunja-backup-config
secretName: firefly-backup-config
- name: backup-tmp
emptyDir: {}
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: vikunja-files-backup
namespace: vikunja
name: firefly-uploads-backup
namespace: firefly
labels:
app: vikunja-backup
app: firefly-backup
spec:
schedule: "0 3 * * *"
suspend: true
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
@@ -100,7 +98,7 @@ spec:
template:
metadata:
labels:
app: vikunja-backup
app: firefly-backup
spec:
restartPolicy: OnFailure
containers:
@@ -111,25 +109,25 @@ spec:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n vikunja-files backup
resticprofile -c /secrets/profiles.yaml -n vikunja-files copy
resticprofile -c /secrets/profiles.yaml -n firefly-uploads backup
resticprofile -c /secrets/profiles.yaml -n firefly-uploads copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: vikunja-backup-config
name: firefly-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: vikunja-backup-config
name: firefly-backup-config
key: B2_ACCOUNT_KEY
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: files
mountPath: /files
- name: uploads
mountPath: /uploads
readOnly: true
resources:
requests:
@@ -140,7 +138,7 @@ spec:
volumes:
- name: secrets
secret:
secretName: vikunja-backup-config
- name: files
secretName: firefly-backup-config
- name: uploads
persistentVolumeClaim:
claimName: vikunja-files
claimName: firefly-firefly-iii
@@ -1,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: vikunja
name: firefly
@@ -2,7 +2,7 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: vikunja
namespace: firefly
spec:
podSelector: {}
policyTypes:
@@ -12,11 +12,11 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-controller
namespace: vikunja
namespace: firefly
spec:
podSelector:
matchLabels:
app: vikunja
app.kubernetes.io/name: firefly-iii
policyTypes:
- Ingress
ingress:
@@ -29,18 +29,18 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-app-to-db
namespace: vikunja
namespace: firefly
spec:
podSelector:
matchLabels:
app: vikunja-db
app: firefly-db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: vikunja
app.kubernetes.io/name: firefly-iii
ports:
- port: 5432
---
@@ -48,18 +48,18 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-to-db
namespace: vikunja
namespace: firefly
spec:
podSelector:
matchLabels:
app: vikunja-db
app: firefly-db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: vikunja-backup
app: firefly-backup
ports:
- port: 5432
---
@@ -67,11 +67,11 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-backup-egress
namespace: vikunja
namespace: firefly
spec:
podSelector:
matchLabels:
app: vikunja-backup
app: firefly-backup
policyTypes:
- Egress
egress:
@@ -92,4 +92,4 @@ spec:
to:
- podSelector:
matchLabels:
app: vikunja-db
app: firefly-db
+79
View File
@@ -0,0 +1,79 @@
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,8 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: cogitri
name: firefly-iii
namespace: flux-system
spec:
interval: 1m0s
url: https://charts.cogitri.dev
url: https://firefly-iii.github.io/kubernetes
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,30 @@
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
@@ -1,12 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: vikunja-db
namespace: vikunja
name: firefly-db
namespace: firefly
spec:
clusterIP: None
selector:
app: vikunja-db
app: firefly-db
ports:
- port: 5432
targetPort: 5432
@@ -1,20 +1,20 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: vikunja-db
namespace: vikunja
name: firefly-db
namespace: firefly
labels:
app: vikunja-db
app: firefly-db
spec:
serviceName: vikunja-db
replicas: 0
serviceName: firefly-db
replicas: 1
selector:
matchLabels:
app: vikunja-db
app: firefly-db
template:
metadata:
labels:
app: vikunja-db
app: firefly-db
spec:
securityContext:
runAsUser: 999
@@ -22,24 +22,24 @@ spec:
fsGroup: 999
containers:
- name: postgres
image: postgres:18
image: postgres:17
imagePullPolicy: IfNotPresent
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: vikunja-credentials
name: firefly-credentials
key: DB_USERNAME
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: vikunja-credentials
name: firefly-credentials
key: DB_PASSWORD
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: vikunja-credentials
key: DB_DATABASE_NAME
name: firefly-credentials
key: DB_DATABASE
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
-62
View File
@@ -148,65 +148,3 @@ spec:
- name: data
persistentVolumeClaim:
claimName: gitea-data
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: gitea-extra-backup
namespace: gitea
labels:
app: gitea-backup
spec:
schedule: "15 3 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
app: gitea-backup
spec:
restartPolicy: OnFailure
containers:
- name: resticprofile
image: creativeprojects/resticprofile:0.32.0
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- |
resticprofile -c /secrets/profiles.yaml -n gitea-extra backup
resticprofile -c /secrets/profiles.yaml -n gitea-extra copy
env:
- name: B2_ACCOUNT_ID
valueFrom:
secretKeyRef:
name: gitea-backup-config
key: B2_ACCOUNT_ID
- name: B2_ACCOUNT_KEY
valueFrom:
secretKeyRef:
name: gitea-backup-config
key: B2_ACCOUNT_KEY
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 1Gi
volumeMounts:
- name: secrets
mountPath: /secrets
readOnly: true
- name: extra
mountPath: /data-extra
readOnly: true
volumes:
- name: secrets
secret:
secretName: gitea-backup-config
- name: extra
persistentVolumeClaim:
claimName: gitea-extra
-3
View File
@@ -2,6 +2,3 @@ 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
-20
View File
@@ -79,26 +79,6 @@ spec:
ports:
- port: 5432
---
# Allow act_runner pods to reach gitea-http (HelmRelease for Actions registers and polls jobs via cluster-internal Service)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-runner-to-gitea
namespace: gitea
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: gitea
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: actions-act-runner
ports:
- port: 3000
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
-69
View File
@@ -1,69 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitea-actions
namespace: flux-system
spec:
chart:
spec:
chart: actions
version: 0.1.0
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: gitea
namespace: flux-system
targetNamespace: gitea
interval: 1m0s
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
dependsOn:
- name: gitea
# chart 0.1.0 has a broken `global.storageClass` helper (extra newline breaks YAML),
# so we set storageClassName via a kustomize patch instead.
postRenderers:
- kustomize:
patches:
- target:
kind: StatefulSet
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-gitea-http.gitea.svc.cluster.local:3000
existingSecret: gitea-runner-token
existingSecretKey: token
statefulset:
replicas: 1
timezone: Europe/Kyiv
persistence:
size: 10Gi
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 2Gi
actRunner:
config: |
log:
level: info
cache:
enabled: true
container:
require_docker: true
docker_timeout: 300s
runner:
labels:
- "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
- "ubuntu-24.04:docker://docker.gitea.com/runner-images:ubuntu-24.04"
- "ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"
dind:
rootless: false
-197
View File
@@ -21,175 +21,6 @@ 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
@@ -199,11 +30,6 @@ spec:
type: RuntimeDefault
image:
# renovate: currentValue=1.27.3-rootless currentDigest=sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
tag: 1.27.3
digest: sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
rootless: true
pullPolicy: IfNotPresent
@@ -225,14 +51,6 @@ spec:
accessModes:
- ReadWriteOnce
extraVolumes:
- name: gitea-extra
persistentVolumeClaim:
claimName: gitea-extra
extraContainerVolumeMounts:
- name: gitea-extra
mountPath: /data/extra
resources:
requests:
cpu: 100m
@@ -307,21 +125,6 @@ spec:
UPDATE_AVATAR: true
REGISTER_EMAIL_CONFIRM: false
actions:
ENABLED: true
DEFAULT_ACTIONS_URL: github
LOG_RETENTION_DAYS: 7
ARTIFACT_RETENTION_DAYS: 7
LOG_COMPRESSION: zstd
"storage.packages":
PATH: /data/extra/packages
"storage.actions_log":
PATH: /data/extra/actions_log
"storage.actions_artifacts":
STORAGE_TYPE: local
PATH: /data/extra/actions_artifacts
additionalConfigFromEnvs:
- name: GITEA__database__DB_TYPE
value: postgres
-33
View File
@@ -1,33 +0,0 @@
{
"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
}
]
}
+15 -15
View File
@@ -4,23 +4,23 @@ metadata:
name: gitea-backup-config
namespace: gitea
stringData:
profiles.yaml: ENC[AES256_GCM,data:qtegwOuO6px5lTrzgy3XWky/HV77Z/e6Oqx7Jwdieg2y4KKN0zelC74SpACsOZTd4/irGmdHrtkP2PNVnNB8ylPLv1mKPNi5fvTl4JsHSOZlHfIxmTxgljtsXh4N8o02RIPi5pYKGj/UDIF2yin7HdgtAZfsEhDcXbxENc8iyM1DYMGLVaHo3Z2SoEtILjqz8+fOmm+Pj/snaMZ6qst+a8Fyr5/wdc4S2WjsLyeZ1UDbzy549nBCpszp5Ncy4mGqyFBvQzgCT75cmAxtwYjfEh+Abc65EjB6CNmf9ciIAjlMJ8olQe6k8xTpGhzcT0jaWZfHw3VV454fMhCF9f20PLoGg3UCPgSanSy9OCjLT310ezMaO9ukWJ4dNzJKD/x2xsOCkGRG4Zm2kmJFoDsFILpLToGyfNxHr38M/otZxS9UiuZ7aLSWJW0UubhsPJ1niLnZB/XSd2bTrIbzunm/pgDCOI2wusrT6Qo/iVzMxAt9CKgFzdmvfsThdFflSKb5pK1fA8SRit3B4YTuXX6NiSUUAiAy+PfPGUgixneRJ6DiYKzIAC6X4dZLf8yS04gVPPOL5BaGq7Vh+5RawqEogsnJuNFCpcbVtUmZd4BnydNptueqZKHoxdgNV8ZYlsbWdwF2yhnC99tdXsYp+5CDD4Zm9qBtOjIIW1e/yGQ6Tjsq9qk0yRTYkFjM9awETgKnE+/6mieg5yY3uSIwwP4ZegUW92KH+SrnOs3QrcrTTJY/wlRs4SWQWw7aEUS4yuPZXtPmhYjccl3dWNN3lT1LbOMVTqekoQlJptefbfKLiXy+A6iEYJuORxH1hcjfvqlpk722kJqwWpgqFDP6f0x/wPJxHm3XpzBVo+6qclJ0sFU+OgDReDrgh+qH1IBGuz5A39rvfx6MLuaLOVwWswqArACWe2p9lg0yPTc51nDhloeNwOVMVZ5+StYBMIydYU9wU3SDT1cox7Sd6ahz23XHzSDq30m0uIWpZZNJm5P6KQHk4XEVIk3g9K6GMf1NgafWAFePgTHBt3/A2yXAXwYVK3dyBN6Rwl3F4Neq2n0OJRN6es89rrrf0VhdJJTPW7WjIzmrMyKi8qX7KnN5oI8316N+899CahwL/e1NdD16V7DxWNMjeG74j3lxSmzXWnPn5k0y0POcIkegLdksTNEtqLQgmMzI4gn5Avn/G5CIiz7cexno+4cUeTMVRwx6YH0KxAmxHXJXp9yuqGNoo0pIACTmwpOqvMACrKEPRanxVWbCD/ZQLSiwFzfmUoexH8iUiqcFe01WQh09rXSf87Yhsf/QP/xHZS+a21f0pAtC1ZeNc0wwad5ycI5RgkcokQNcDzCEvPAKt8IKuGvk7Ti6GXXBPhMcIW0yJtuxTL1DAxfYBte/lqvGIGfl3/7b9E+FR/vgnZUl5ykQnwiHTAAmZ0ySEWyyVs93rFt5UecPEUZRyn6tNYrCjJ7hqL4NgwmGEmlLH0V/aBRSZgGNafRfXQi6w2m6Pbdo86Pn55H4fH2HCIXNPBWzFWhzohBFjLTSC4EqjYUvT72r4IimOCqOGUKYuF0giAHvkVWM0GF48x1fiUI11p+N+bDM3Coi0m4mLkof/d+yk1sOcvt1h5XOn5NbmLz/X6HhJrEo8APPhJvu4qzF4KTujafP7KF5dDWBjp5GlooyE74gRj4tLEN0vfcaezS0IwMefmkCPFrpTB/wnDavic1EJ9lYRREggdCVPJLlU9omLhvRTCBRDF62GbQVtgUqVAHqVM0EkdVzeCoSDo3TWUSFi6Dv/ivWuXGJKChM5n4cDVenatbzi4htAXR1bW3zIRXVmQy8HkgLrj42Kg==,iv:PGm23iUxhuDcnKqJeF8/kAwFJ1646ufstWCGSH+0yKA=,tag:2J/E98gHS9N0Agt+nfMTug==,type:str]
restic-password-nas: ENC[AES256_GCM,data:fMbuwG48Wc2YScNDYO+V2LjmOsjadatzHYSz0m8kvVfe7tw7lCChZanTSuldX9++E8NSxSGh6cvyRXFoX7ISCw==,iv:zSk8hk9+blNC7AZD2iEMly+t/anLzxjsJrqJzdLlqgE=,tag:C2aRaBHR8m6fRoBI/AMm6Q==,type:str]
restic-password-b2: ENC[AES256_GCM,data:7/Os6960fd0HF8FHgI/UIRS2XahEcu39VJne5usDznIqQgnp1338mZ3S/9Wf4ZBKgGe0bieE/OKOWddSn2UbZA==,iv:WrMvh6++E+ENqg1r8K/q8qgOEBYBziBhIW+3FqtUH8Q=,tag:or+eTDz9QLI//IQgulGJFg==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:4hEA1VTpo5OKyBhB7TfwC0tMS9thhls3aA==,iv:zfueemMDGJBHVMo5XZkuBlczB0SR51ygG5FCx15kZ5s=,tag:oe0Uvy8xHpOrRFPa4eIkww==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:ypKpSJtPrdiJXbjNHPIblw2vH3MxlnXoG9p6UJODsw==,iv:g3QCmZI5Z2fmcYuGQZKaydJkrnzSOABFZvARhbzYM/E=,tag:hn/7CnjvQlTekQI3MbiAKQ==,type:str]
profiles.yaml: ENC[AES256_GCM,data:uHgGYQxpS3FZ46aVqp8Qu/N4hV6uLRefYRGx/zr0aPcfHGtzsl1Bibw08x3lw6zl5fjS6S8P4rqD/RutSzldQ81/YVXEMu7XIHpyeVwGyFWcYXm7MLkXrhTxuyHjeNAhNJRgrkka45tLxOzf2JSQ7csjLtQ1/fBZ7BbUyZst5WuyJ9cRAX8ljYEwE84EkoXwN3j76913iq/tU8qZG77jf3nfCZIMHcsfEQRtHTkLVwa3kRXkmdOuUhlUB70cN5B1jl0nYvhV6dfGm5jw3jOdxos14w91IVJR7kAmNCJh0HND13frOuNVZNjBQ6Jx5DlhjKQ83aDZS3IxBAzNafptTn0V529EuRYbVr9hKLNzu+MJ8T7ao17zNbUTcpd0wXxQwESyywxea6scXxu6KkAbPKVZJLGC4gyjJAJdnHBMQAbn/XvEUturdA/ExG+B6Nt05KT8sObePyY2k3NwlUjRJxk01Y+di+44E2msg/K6D4u/yZX1Eg4FikMJL5ldBpCmBaeiM2gwdZEnO4hufNr46cdGH4nZxe+HMgsD6NrCpJzeTKnwHxa6DZpBkNk/XOmCU+HLQoIspqHiKVDB6kUY8EaSb+i3Qvqq9IHi7DooiZmXNVTHjEj2RTzqd+/I8S2JmANTs7zvEdtfJJ2K+KhK4tfqjdxRAv3yc+MoCb3AQEf86ZtIEtrjOaVtrZLZEb4GVk43VAHo2t34EXo5/FDQWVRdtdIs7L5TajT9jDZgpvqZQAe9yFwP9thbo+wG3zQaWDcgSWRE16zm14DXLcB58kV08YTyUKKw4KDC8TnHU8SfDpwhgq62z72XIdAADxLHtcAYlQak/2bMAISciEtgoC6XhYHvV85L79DLp5GZTta6mYWo3LJwjxzUgSyXQv6yMfQXw9q/4sQCkz1z19Qi6yAaqtkc6aTv1cN2zCPdFjjsmPdxkPATLhUFfLgNfJspedHiRxM5NWLJPDtpk2hzzp2KPnchTVjSUX1M2MD+z3bowxFPm4NJoiyFgmJRMr+F7HJciZa3s9HUv+0mn9R7T6mABM6XugVpJne50KMylb8mCPz46gV10nUy2xfYT3OuFHVPyN/SWjUkhm7BXm16yXQwZG+O+TNBUA3uxZmXl91GQZGqf14OMeX+S2B++LIxbrVAN3QamaTTJX4O+gZIWAQLOCR4gQUmazQE2cqroqWM00nDG1ZTo9ZzLTPsl8Fo8pGgJfiP/tGc7hjSVsz6vfvRdQs=,iv:3t0Qate3LKwYCMoR4jdAzCtJfMCVW0k3T9EK22io8vU=,tag:AQrbWLhhoWxwOtdxrwvdbA==,type:str]
restic-password-nas: ENC[AES256_GCM,data:Hp6UPBipoot5NmFKf6jqYWfPUFFi0QNZAjBhuiGCj3h9t9nTxo8vHL9wlP1fY+vNmRTPcG0YFabgV5Q/4yQZTw==,iv:9gWAoQ2RxsnjJfWKbMw2CFoATb84pMdrTvXd+AsSrlk=,tag:12AxyQrODLvQ4TdZazt+3w==,type:str]
restic-password-b2: ENC[AES256_GCM,data:QaTM08WEy2pQSs9s8VWQGi7HPu4cirbQhUixi49Ddjj5ffbqAuL+g7jhJNNCEZKI1Ljra51cv9lAFWTDUhbGwQ==,iv:oSbY9X1HPYG5Kgr8vW5tBN/kBu6APqbav+ONKisxRQI=,tag:Gzfz/O2uTkAtoRSfGxPj+g==,type:str]
B2_ACCOUNT_ID: ENC[AES256_GCM,data:9FSQY03LaT4Jm21+XQ5VVcfMQJ/QGEU2MA==,iv:OguTShXUeF5cm3Pfb9rC5aHS6LMQP5SlviV12KUi2mE=,tag:OyqEGluTuqYdeaA/g4BGWQ==,type:str]
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:d+qcw1eDNzcVrGoJy2+hy+xpptckxJYN7rSQ+Y/bug==,iv:I5IIcZ8MURrZqn8SncqNvsgaM3QgRMnpzfjwpat5pPw=,tag:CBiigK5dYpxwoVDYYeax2A==,type:str]
sops:
age:
- enc: |
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2RXRnQTIvc3pBZUYxUXZo
VElZVkdNcE95bEdKVGxUdTZuMThvRDdETkdnCmxucXJvYWxHVGZCM0xEMkFDK0I2
WjJ2QnY1Y09tU3lyOVVXcWIweGt5R28KLS0tIGNvMS8ydDhaaXVrdEpWUnNySEtI
MTllRmtEZVdKcElMK3crOUlLQmJ4TEEKXzZkkRdGq/O+0jVB3930QD9ryczL3B7m
Mgw9+KXlp3jfOv7xEP2JFjGve4FOP/saJ0OXX8i2gIhNMFUZYoCBHQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0TmpUWGVWczArYllEc2x6
a3lxNnVmMDdLTTVENVhhQkhnNmFBcHpzdnlZCnRNTENWRUxKZ2VQazJxYmJOS0Ro
SjlKT1RXdDkyYXpqdlY5bEkvME1YYWMKLS0tIHErcUdRUDBEdTlzbUNZa0Vya2xn
ckpUQUQ0cGlNVk9BaEZKUDVHQzRjQmMKcCznhR3n3tG96SdrGKarLNKAZoTi4Xj7
28m3avAtcOMryv0IrHvL4ogC3CdARRuJzh0UL1J+fOnvmwCZeiIjDg==
-----END AGE ENCRYPTED FILE-----
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
lastmodified: "2026-04-29T19:40:09Z"
mac: ENC[AES256_GCM,data:vr6nY1wUMfB131ApoErgg7bIzGfBy9ZOebeTCsB/UI42Y4ZxHWQbP3IQz9RXwlqgSH1/oeslOrHVgQDSX429XgzKkz4GLA4ebybe/hMQQH3tNIYUEMFq4oQCjZ20sbhnQUV98+Bir6GQMjq+r7BueHFixwmOA4lTu/vM4r82Zvw=,iv:MNyWngFH4pPA3hZhDg1kqd5cBanmSBk03Q8pCyA7m+0=,tag:aNCPGwUGqb3hsoCCIiG40A==,type:str]
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-05-11T18:13:47Z"
mac: ENC[AES256_GCM,data:pwrzvtizBP/GRW0gu3aQ6r9YgW6e+s689g4nlePs6Qzs+BljFMlb00Ko+LnX3XGgoynbJFHcsmhQBEDQ/8BYV7BaXPMtYW6V59ShaLUviSnhM47x2QbEoJkNqxBA1YL6fWDz4RL39L9vVeV9uhVJk2xc/+qsXqU3sHieIjjL2UI=,iv:qyLRgnXMKuW6GAuiK5Xn5pDVcHOpBgOfJ7TUOL5HHR4=,tag:lTPrHqKeveXo85yuS6CslQ==,type:str]
version: 3.13.0
version: 3.12.2
@@ -1,22 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: gitea-runner-token
namespace: gitea
stringData:
token: ENC[AES256_GCM,data:FyNROq6IY5SYfhiFTV5FoXcFrhyYaDh7x5alZw+J7KRNw4sUQEni2g==,iv:aEFhinL9lsD/Cja3ZIa70AguBtba1qUXC2JOGsSU+Nc=,tag:6Z6HPZQAUgVa6+bQ3weM/g==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJaXZiU2RRZU9XbjY3S3Mz
anpQV1c4SDJuUEUyYjJldEE1RG9YdTMyMlg4CkFuU3NtMk9nbDEvWWlhUWtzNklI
bjBBMjdlQlNqK0dpeU9VdTkvZ3lCdFUKLS0tIE4yWWpsM3B3MSsxdjd0V3hoeUgy
UW5pcm01ZXk5cE8rZzR4K1RzcUdxYVEKWxiIA3KFYxXAx803x9GayNi3Sv9DkeC0
zbedDZCevB5xiQ5tFekmgu8A6FIMB/lF1IqSqYcUVa6YYcUVfIZmaw==
-----END AGE ENCRYPTED FILE-----
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
encrypted_regex: ^(data|stringData|email)$
lastmodified: "2026-05-11T18:04:32Z"
mac: ENC[AES256_GCM,data:a2l+uFG4HRJRqk7Gj0UsAzexaLwwv5ffNMjs6Oz7esCcAZf/941Yn13evk3hWOsqMTO3AWj5B9blgtakYYO5y5dmI8mD8GdoXiCZF69NCLSGvGuLL6HH3mvp/ZjQQypHQF0W1O4vntdbra4FJp1Nm9iulWeFG/DAO5F8eiv87tU=,iv:Z47KwItcBzBDA1lTZNB9UUGlFUV3jHDrrGyF6AaH+9Q=,tag:0h1dB/WL2MRThvnuj4VT+w==,type:str]
version: 3.13.0
+76
View File
@@ -0,0 +1,76 @@
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
@@ -0,0 +1,96 @@
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
@@ -1,23 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: blog
namespace: blog
name: grocy
namespace: grocy
annotations:
cert-manager.io/cluster-issuer: letsencrypt
traefik.ingress.kubernetes.io/router.middlewares: authelia-chain-authelia-authelia-auth@kubernetescrd
spec:
tls:
- hosts:
- ${BLOG_HOST}
secretName: blog-tls
- ${GROCY_HOST}
secretName: grocy-tls
rules:
- host: ${BLOG_HOST}
- host: ${GROCY_HOST}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: blog
name: grocy
port:
number: 8080
number: 80
@@ -1,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: blog
name: grocy
+50
View File
@@ -0,0 +1,50 @@
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
@@ -0,0 +1,33 @@
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,12 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-extra
namespace: gitea
name: grocy-db
namespace: grocy
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs-synology-ssd
storageClassName: local-path
resources:
requests:
storage: 30Gi
storage: 1Gi
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: grocy
namespace: grocy
spec:
selector:
app: grocy
ports:
- port: 80
targetPort: 80
name: http
+4 -9
View File
@@ -24,7 +24,6 @@ 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
@@ -87,14 +86,10 @@ data:
icon: paperless-ngx.png
href: https://${PAPERLESS_HOST}/
description: Documents storage
- Vikunja:
icon: vikunja.png
href: https://${VIKUNJA_HOST}/
description: Task management
- Reitti:
icon: mdi-map-marker-path
href: https://${REITTI_HOST}/
description: Location history
- Grocy:
icon: grocy.png
href: https://${GROCY_HOST}/
description: Chores and inventory tracker
widgets.yaml: |
---
+4 -8
View File
@@ -24,7 +24,7 @@ spec:
type: RuntimeDefault
containers:
- name: homepage
image: ghcr.io/gethomepage/homepage:v2.7.0
image: ghcr.io/gethomepage/homepage:v1.10.1
ports:
- containerPort: 3000
name: http
@@ -33,12 +33,8 @@ spec:
- secretRef:
name: homepage-credentials
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOMEPAGE_ALLOWED_HOSTS
value: "$(MY_POD_IP):3000,${HOMEPAGE_HOST}"
value: "${HOMEPAGE_HOST}"
volumeMounts:
- name: config
mountPath: /app/config/settings.yaml
@@ -58,13 +54,13 @@ spec:
livenessProbe:
httpGet:
port: 3000
path: /api/healthcheck
path: /
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
port: 3000
path: /api/healthcheck
path: /
initialDelaySeconds: 10
periodSeconds: 10
resources:
-23
View File
@@ -1,23 +0,0 @@
{
"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: v3.3.6
tag: v2.7.5
resources:
requests:
cpu: 100m
-171
View File
@@ -1,171 +0,0 @@
# 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: {}
+1 -10
View File
@@ -43,7 +43,7 @@ spec:
mountPath: /db-local
containers:
- name: jellyfin
image: jellyfin/jellyfin:12.4
image: jellyfin/jellyfin:10.11.8
env:
- name: JELLYFIN_PublishedServerUrl
value: https://${JELLYFIN_HOST}
@@ -62,15 +62,6 @@ 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,29 +45,3 @@ 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,11 +7,6 @@
"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"],
@@ -1,26 +0,0 @@
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
+1 -2
View File
@@ -17,8 +17,7 @@ spec:
interval: 1m0s
values:
image:
# renovate: datasource=docker depName=ghcr.io/hargata/lubelogger
tag: "v1.7.4"
tag: "v1.6.1"
updateStrategy:
type: RollingUpdate

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