WaterOK

System Health Report

2026-03-27 08:01 UTC ยท Friday
Warnings Detected
Uptime: 14d 15h 44m Load: 0.32 / 0.24 / 0.14 Swap: None Alerts: 0 Anomalies: 0
๐Ÿ“Š System Metrics

CPU Usage

2.9%
Avg today ยท Peak 3.67% at 00:00

Memory

22.5%
3,604 MiB / 15,997 MiB

Disk Usage

3%
24 GB / 985 GB ยท 911 GB free

Network (Latest)

โ†“ 26.9 kbps
โ†‘ 5.7 kbps
Peak: โ†“ 124.2 kbps at 00:00

Disk I/O (Latest)

R: 53.0 KiB/s
W: 244.6 KiB/s
Normal levels throughout day

Anomaly Detection

โœ“ No ML anomalies detected
0 alerts ยท 0 warnings ยท 0 critical
๐Ÿ”ง Service Status
NginxActive
MosquittoActive
SupervisorActive
GunicornActive
MySQLActive
Celery BeatActive
Celery WorkerWarning
DjangoWarning
โš™๏ธ Per-Process Breakdown

Top CPU Consumers

ProcessCPU %
go.d.plugin1.44%
netdata0.79%
supervisord0.63%
apps.plugin0.63%
packagemanager0.27%
rabbitmq0.21%
mysqld0.19%
mosquitto0.01%
nginx0.00%

Top Memory Consumers

ProcessMiB
mysqld1,482
rspamd582
unicorn552
desktop468
supervisord287
netdata214
gdm3194
php-fpm7.4157
mailmanctl154
manage137
๐Ÿ“‹ Error Logs
Django Errors 946 errors โ–ถ
All 946 errors are DST timezone conversion failures (pytz.exceptions.NonExistentTimeError). Cause: Israel DST transition on 2026-03-27 โ€” clocks skip 02:00โ†’03:00, so times between 02:00-02:59 don't exist. Impact: Non-critical. Invalid timestamps are skipped; MQTT data ingestion continues normally. Sample: 2026-03-27 05:00:53,347 [ERROR] django: Skipping invalid timestamp 1774576807.0 pytz.exceptions.NonExistentTimeError: 2026-03-27 02:00:07 2026-03-27 05:00:53,348 [ERROR] django: Error converting epoch to UTC: 2026-03-27 02:05:06 pytz.exceptions.NonExistentTimeError: 2026-03-27 02:05:06 Pattern repeats for timestamps 02:00 through 02:55 across multiple controller data batches. MQTT processing confirmed working โ€” messages queued, ACKed, and saved successfully.
Celery Worker Warnings 9 warnings โ–ถ
Benign startup warnings across 9 rotated worker log files (worker-error.log.2 through .10): [2026-03-27 05:00:13,627: WARNING/MainProcess] No communication channel selected [2026-03-27 05:00:13,565: WARNING/MainProcess] No communication channel selected ...repeated in each worker log rotation This is a standard Celery message when no result backend is configured. Non-critical.
Gunicorn โ–ถ
No errors found today (2026-03-27). โœ“
Celery Beat โ–ถ
No errors found today (2026-03-27). โœ“
Mosquitto โ–ถ
No errors found today (2026-03-27). โœ“
Nginx Permission Denied โ–ถ
Cannot read /var/log/nginx/error.log โ€” Permission denied for svcmon_w7k user. Service is confirmed active via systemctl. Log access requires permission fix.
Supervisor โ–ถ
No errors found today (2026-03-27). โœ“ Note: supervisorctl status returned permission error for read-only user, but systemd confirms service is active.
๐Ÿ—„๏ธ Database Summary
DatabaseTablesStatus
c1waterokdb44Accessible
dbispconfig77Accessible
phpmyadmin19Accessible
roundcube15Accessible
155 tables total ยท Query time: 28ms
๐Ÿ’ก Recommended Actions
Medium Priority
Fix DST handling in Django. Replace pytz with zoneinfo (Python 3.9+) or dateutil to handle non-existent times during DST transitions. This will eliminate ~946 error log entries per DST switch. The current code in the MQTT data handler tries to localize epoch timestamps to Israel time but crashes on the skipped hour.
Low Priority
Grant nginx log read access to svcmon_w7k. Add the monitoring user to the adm group or adjust /var/log/nginx/error.log permissions so the health check can read nginx errors.
Low Priority
Celery "No communication channel selected". Configure a result backend (e.g., Redis or RabbitMQ) or suppress this warning in Celery settings if result tracking is not needed.