From 556b714e5097042a406f8c83f53f3bf1fbc3d4aa Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 6 Jan 2026 14:38:10 -0300 Subject: [PATCH] nextcloud/monitoring: fix perms and mail panels --- scripts/dashboards_render_atlas.py | 190 +++--- scripts/nextcloud-maintenance.sh | 9 +- .../monitoring/dashboards/atlas-mail.json | 591 ++++++------------ .../monitoring/grafana-dashboard-mail.yaml | 591 ++++++------------ services/nextcloud/deployment.yaml | 3 + 5 files changed, 459 insertions(+), 925 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 0965860..4476773 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -1899,22 +1899,6 @@ def build_mail_dashboard(): {"color": "red", "value": 10}, ], } - bounce_count_thresholds = { - "mode": "absolute", - "steps": [ - {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "orange", "value": 10}, - {"color": "red", "value": 100}, - ], - } - api_thresholds = { - "mode": "absolute", - "steps": [ - {"color": "red", "value": None}, - {"color": "green", "value": 1}, - ], - } limit_thresholds = { "mode": "absolute", "steps": [ @@ -1924,74 +1908,98 @@ def build_mail_dashboard(): {"color": "red", "value": 95}, ], } + success_thresholds = { + "mode": "absolute", + "steps": [ + {"color": "red", "value": None}, + {"color": "orange", "value": 90}, + {"color": "yellow", "value": 95}, + {"color": "green", "value": 98}, + ], + } - current_stats = [ - ( + panels.append( + stat_panel( 1, - "Bounce Rate (1d)", - 'max(postmark_outbound_bounce_rate{window="1d"})', - "percent", - bounce_rate_thresholds, - ), - ( - 2, - "Bounce Rate (7d)", - 'max(postmark_outbound_bounce_rate{window="7d"})', - "percent", - bounce_rate_thresholds, - ), - ( - 3, - "Bounced (1d)", - 'max(postmark_outbound_bounced{window="1d"})', - "none", - bounce_count_thresholds, - ), - ( - 4, - "Bounced (7d)", - 'max(postmark_outbound_bounced{window="7d"})', - "none", - bounce_count_thresholds, - ), - ] - for idx, (panel_id, title, expr, unit, thresholds) in enumerate(current_stats): - panels.append( - stat_panel( - panel_id, - title, - expr, - {"h": 4, "w": 6, "x": 6 * idx, "y": 0}, - unit=unit, - thresholds=thresholds, - decimals=1 if unit == "percent" else 0, - ) + "Sent (1d)", + 'max(postmark_outbound_sent{window="1d"})', + {"h": 4, "w": 6, "x": 0, "y": 0}, + decimals=0, ) + ) + panels.append( + stat_panel( + 2, + "Sent (7d)", + 'max(postmark_outbound_sent{window="7d"})', + {"h": 4, "w": 6, "x": 6, "y": 0}, + decimals=0, + ) + ) + panels.append( + { + "id": 3, + "type": "stat", + "title": "Mail Bounces (1d)", + "datasource": PROM_DS, + "gridPos": {"h": 4, "w": 6, "x": 12, "y": 0}, + "targets": [ + { + "expr": 'max(postmark_outbound_bounce_rate{window="1d"})', + "refId": "A", + "legendFormat": "Rate", + }, + { + "expr": 'max(postmark_outbound_bounced{window="1d"})', + "refId": "B", + "legendFormat": "Count", + }, + ], + "fieldConfig": { + "defaults": { + "color": {"mode": "thresholds"}, + "custom": {"displayMode": "auto"}, + "thresholds": bounce_rate_thresholds, + "unit": "none", + }, + "overrides": [ + { + "matcher": {"id": "byName", "options": "Rate"}, + "properties": [{"id": "unit", "value": "percent"}], + }, + { + "matcher": {"id": "byName", "options": "Count"}, + "properties": [{"id": "unit", "value": "none"}], + }, + ], + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": False}, + "textMode": "name_and_value", + }, + } + ) + panels.append( + stat_panel( + 4, + "Success Rate (1d)", + 'clamp_min(100 - max(postmark_outbound_bounce_rate{window="1d"}), 0)', + {"h": 4, "w": 6, "x": 18, "y": 0}, + unit="percent", + thresholds=success_thresholds, + decimals=1, + ) + ) panels.append( stat_panel( 5, - "Sent (1d)", - 'max(postmark_outbound_sent{window="1d"})', - {"h": 4, "w": 6, "x": 0, "y": 4}, - decimals=0, - ) - ) - panels.append( - stat_panel( - 6, - "Sent (7d)", - 'max(postmark_outbound_sent{window="7d"})', - {"h": 4, "w": 6, "x": 6, "y": 4}, - decimals=0, - ) - ) - panels.append( - stat_panel( - 7, "Limit Used (30d)", "max(postmark_sending_limit_used_percent)", - {"h": 4, "w": 6, "x": 12, "y": 4}, + {"h": 4, "w": 6, "x": 0, "y": 4}, thresholds=limit_thresholds, unit="percent", decimals=1, @@ -1999,49 +2007,29 @@ def build_mail_dashboard(): ) panels.append( stat_panel( - 8, + 6, "Send Limit (30d)", "max(postmark_sending_limit)", - {"h": 4, "w": 6, "x": 18, "y": 4}, - decimals=0, - ) - ) - - panels.append( - stat_panel( - 9, - "Postmark API Up", - "max(postmark_api_up)", - {"h": 4, "w": 6, "x": 0, "y": 8}, - thresholds=api_thresholds, + {"h": 4, "w": 6, "x": 6, "y": 4}, decimals=0, ) ) panels.append( stat_panel( - 10, + 7, "Last Success", "max(postmark_last_success_timestamp_seconds)", - {"h": 4, "w": 6, "x": 6, "y": 8}, + {"h": 4, "w": 6, "x": 12, "y": 4}, unit="dateTimeAsIso", decimals=0, ) ) panels.append( stat_panel( - 11, + 8, "Exporter Errors", "sum(postmark_request_errors_total)", - {"h": 4, "w": 6, "x": 12, "y": 8}, - decimals=0, - ) - ) - panels.append( - stat_panel( - 12, - "Limit Used (30d)", - "max(postmark_sending_limit_used)", - {"h": 4, "w": 6, "x": 18, "y": 8}, + {"h": 4, "w": 6, "x": 18, "y": 4}, decimals=0, ) ) diff --git a/scripts/nextcloud-maintenance.sh b/scripts/nextcloud-maintenance.sh index d526674..eb5ccca 100755 --- a/scripts/nextcloud-maintenance.sh +++ b/scripts/nextcloud-maintenance.sh @@ -23,6 +23,11 @@ if [[ ! -d /var/www/html/lib && -d /usr/src/nextcloud/lib ]]; then /usr/src/nextcloud/ /var/www/html/ fi +log "Ensuring Nextcloud permissions" +chown 33:33 /var/www/html || true +chmod 775 /var/www/html || true +chown -R 33:33 /var/www/html/apps /var/www/html/custom_apps 2>/dev/null || true + log "Applying Atlas theming" run_occ config:app:set theming name --value "Atlas Cloud" run_occ config:app:set theming slogan --value "Unified access to Atlas services" @@ -59,8 +64,8 @@ CSS ) run_occ config:app:set customcss css --value "${MAIL_CSS}" >/dev/null -log "Setting default quota to 200 GB" -run_occ config:app:set files default_quota --value "200 GB" +log "Setting default quota to 250 GB" +run_occ config:app:set files default_quota --value "250 GB" API_BASE="${NC_URL}/ocs/v2.php/apps/external/api/v1" AUTH=(-u "${ADMIN_USER}:${ADMIN_PASS}" -H "OCS-APIRequest: true") diff --git a/services/monitoring/dashboards/atlas-mail.json b/services/monitoring/dashboards/atlas-mail.json index a0b733d..67c1766 100644 --- a/services/monitoring/dashboards/atlas-mail.json +++ b/services/monitoring/dashboards/atlas-mail.json @@ -7,282 +7,6 @@ { "id": 1, "type": "stat", - "title": "Bounce Rate (1d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounce_rate{window=\"1d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "orange", - "value": 8 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 2, - "type": "stat", - "title": "Bounce Rate (7d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounce_rate{window=\"7d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "orange", - "value": 8 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 3, - "type": "stat", - "title": "Bounced (1d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 12, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounced{window=\"1d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 10 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 4, - "type": "stat", - "title": "Bounced (7d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 18, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounced{window=\"7d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 10 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 5, - "type": "stat", "title": "Sent (1d)", "datasource": { "type": "prometheus", @@ -292,7 +16,7 @@ "h": 4, "w": 6, "x": 0, - "y": 4 + "y": 0 }, "targets": [ { @@ -342,7 +66,7 @@ } }, { - "id": 6, + "id": 2, "type": "stat", "title": "Sent (7d)", "datasource": { @@ -353,7 +77,7 @@ "h": 4, "w": 6, "x": 6, - "y": 4 + "y": 0 }, "targets": [ { @@ -403,7 +127,174 @@ } }, { - "id": 7, + "id": 3, + "type": "stat", + "title": "Mail Bounces (1d)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 0 + }, + "targets": [ + { + "expr": "max(postmark_outbound_bounce_rate{window=\"1d\"})", + "refId": "A", + "legendFormat": "Rate" + }, + { + "expr": "max(postmark_outbound_bounced{window=\"1d\"})", + "refId": "B", + "legendFormat": "Count" + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "displayMode": "auto" + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 5 + }, + { + "color": "orange", + "value": 8 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Count" + }, + "properties": [ + { + "id": "unit", + "value": "none" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + } + }, + { + "id": 4, + "type": "stat", + "title": "Success Rate (1d)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 0 + }, + "targets": [ + { + "expr": "clamp_min(100 - max(postmark_outbound_bounce_rate{window=\"1d\"}), 0)", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 90 + }, + { + "color": "yellow", + "value": 95 + }, + { + "color": "green", + "value": 98 + } + ] + }, + "unit": "percent", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 5, "type": "stat", "title": "Limit Used (30d)", "datasource": { @@ -413,7 +304,7 @@ "gridPos": { "h": 4, "w": 6, - "x": 12, + "x": 0, "y": 4 }, "targets": [ @@ -472,7 +363,7 @@ } }, { - "id": 8, + "id": 6, "type": "stat", "title": "Send Limit (30d)", "datasource": { @@ -482,7 +373,7 @@ "gridPos": { "h": 4, "w": 6, - "x": 18, + "x": 6, "y": 4 }, "targets": [ @@ -533,68 +424,7 @@ } }, { - "id": 9, - "type": "stat", - "title": "Postmark API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 8 - }, - "targets": [ - { - "expr": "max(postmark_api_up)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 10, + "id": 7, "type": "stat", "title": "Last Success", "datasource": { @@ -604,8 +434,8 @@ "gridPos": { "h": 4, "w": 6, - "x": 6, - "y": 8 + "x": 12, + "y": 4 }, "targets": [ { @@ -655,7 +485,7 @@ } }, { - "id": 11, + "id": 8, "type": "stat", "title": "Exporter Errors", "datasource": { @@ -665,8 +495,8 @@ "gridPos": { "h": 4, "w": 6, - "x": 12, - "y": 8 + "x": 18, + "y": 4 }, "targets": [ { @@ -715,67 +545,6 @@ "textMode": "value" } }, - { - "id": 12, - "type": "stat", - "title": "Limit Used (30d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 18, - "y": 8 - }, - "targets": [ - { - "expr": "max(postmark_sending_limit_used)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgba(115, 115, 115, 1)", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, { "id": 13, "type": "timeseries", diff --git a/services/monitoring/grafana-dashboard-mail.yaml b/services/monitoring/grafana-dashboard-mail.yaml index f97ce60..4c011a8 100644 --- a/services/monitoring/grafana-dashboard-mail.yaml +++ b/services/monitoring/grafana-dashboard-mail.yaml @@ -16,282 +16,6 @@ data: { "id": 1, "type": "stat", - "title": "Bounce Rate (1d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounce_rate{window=\"1d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "orange", - "value": 8 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 2, - "type": "stat", - "title": "Bounce Rate (7d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounce_rate{window=\"7d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "orange", - "value": 8 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 3, - "type": "stat", - "title": "Bounced (1d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 12, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounced{window=\"1d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 10 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 4, - "type": "stat", - "title": "Bounced (7d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 18, - "y": 0 - }, - "targets": [ - { - "expr": "max(postmark_outbound_bounced{window=\"7d\"})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 10 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 5, - "type": "stat", "title": "Sent (1d)", "datasource": { "type": "prometheus", @@ -301,7 +25,7 @@ data: "h": 4, "w": 6, "x": 0, - "y": 4 + "y": 0 }, "targets": [ { @@ -351,7 +75,7 @@ data: } }, { - "id": 6, + "id": 2, "type": "stat", "title": "Sent (7d)", "datasource": { @@ -362,7 +86,7 @@ data: "h": 4, "w": 6, "x": 6, - "y": 4 + "y": 0 }, "targets": [ { @@ -412,7 +136,174 @@ data: } }, { - "id": 7, + "id": 3, + "type": "stat", + "title": "Mail Bounces (1d)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 0 + }, + "targets": [ + { + "expr": "max(postmark_outbound_bounce_rate{window=\"1d\"})", + "refId": "A", + "legendFormat": "Rate" + }, + { + "expr": "max(postmark_outbound_bounced{window=\"1d\"})", + "refId": "B", + "legendFormat": "Count" + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "displayMode": "auto" + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 5 + }, + { + "color": "orange", + "value": 8 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Count" + }, + "properties": [ + { + "id": "unit", + "value": "none" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + } + }, + { + "id": 4, + "type": "stat", + "title": "Success Rate (1d)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 0 + }, + "targets": [ + { + "expr": "clamp_min(100 - max(postmark_outbound_bounce_rate{window=\"1d\"}), 0)", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 90 + }, + { + "color": "yellow", + "value": 95 + }, + { + "color": "green", + "value": 98 + } + ] + }, + "unit": "percent", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 5, "type": "stat", "title": "Limit Used (30d)", "datasource": { @@ -422,7 +313,7 @@ data: "gridPos": { "h": 4, "w": 6, - "x": 12, + "x": 0, "y": 4 }, "targets": [ @@ -481,7 +372,7 @@ data: } }, { - "id": 8, + "id": 6, "type": "stat", "title": "Send Limit (30d)", "datasource": { @@ -491,7 +382,7 @@ data: "gridPos": { "h": 4, "w": 6, - "x": 18, + "x": 6, "y": 4 }, "targets": [ @@ -542,68 +433,7 @@ data: } }, { - "id": 9, - "type": "stat", - "title": "Postmark API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 8 - }, - "targets": [ - { - "expr": "max(postmark_api_up)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 10, + "id": 7, "type": "stat", "title": "Last Success", "datasource": { @@ -613,8 +443,8 @@ data: "gridPos": { "h": 4, "w": 6, - "x": 6, - "y": 8 + "x": 12, + "y": 4 }, "targets": [ { @@ -664,7 +494,7 @@ data: } }, { - "id": 11, + "id": 8, "type": "stat", "title": "Exporter Errors", "datasource": { @@ -674,8 +504,8 @@ data: "gridPos": { "h": 4, "w": 6, - "x": 12, - "y": 8 + "x": 18, + "y": 4 }, "targets": [ { @@ -724,67 +554,6 @@ data: "textMode": "value" } }, - { - "id": 12, - "type": "stat", - "title": "Limit Used (30d)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 18, - "y": 8 - }, - "targets": [ - { - "expr": "max(postmark_sending_limit_used)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgba(115, 115, 115, 1)", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, { "id": 13, "type": "timeseries", diff --git a/services/nextcloud/deployment.yaml b/services/nextcloud/deployment.yaml index b2c590f..731cfd2 100644 --- a/services/nextcloud/deployment.yaml +++ b/services/nextcloud/deployment.yaml @@ -28,8 +28,11 @@ spec: command: ["/bin/sh", "-c"] args: - | + chown 33:33 /var/www/html || true + chmod 775 /var/www/html || true chown -R 33:33 /var/www/html/config || true chown -R 33:33 /var/www/html/data || true + chown -R 33:33 /var/www/html/apps /var/www/html/custom_apps || true securityContext: runAsUser: 0 runAsGroup: 0