25i<dZddlZddlZddlmZmZGddZy)z Disk Space Monitor Checks disk usage on: - /mnt/ssd (Hub Dati - 1TB SSD) - /mnt/backup-hdd (Cassaforte - 5TB HDD) - / (root filesystem) N)DictListceZdZdZdddddddd ddd d d d dgZd efdZdeded efdZded e fdZ de eded efdZ y) DiskMonitorzMonitor disk space usagez/mnt/ssdzHub SSDU_)pathnamewarncritz/mnt/backup-hddzCassaforte HDDZ/RootPreturnc  tjddgddd}g}d}|jD]r}|j|j|d}|s%|d}||d k\rd }d }n||d k\r d }|dk(rd }nd}|j |d |d||d|d|d|dt|||j ||dS#t$r}d t|d|dcYd}~Sd}~wwxYw)a# Check disk usage. Returns: { 'status': 'healthy' | 'warning' | 'critical', 'disks': [ { 'name': 'Hub SSD', 'path': '/mnt/ssd', 'used_percent': 71, 'used_gb': 460, 'total_gb': 650, 'status': 'healthy' }, ... ], 'message': '...' } dfz-hT)capture_outputtexttimeouthealthyr used_percentr criticalr warningr used_gbtotal_gbfree_gb)r r rrrrstatus)rdisksmessagezDisk check error: )rerrorr!N) subprocessrunPATHS_parse_df_for_pathstdoutappend_create_message Exceptionstr) selfresultr overall_status disk_config disk_datausage disk_statuses D/mnt/ssd/data/python-lab/DaemonControl/modules/fleet/disk_monitor.pycheckzDiskMonitor.checks8*1 ^^t # FE&N#zz   33FMM;vCVW %n5E F 33&0 )3+f"55&/ )Y6-6N&/ LL +F 3 +F 3(-#,Y#7$-j$9#,Y#7"-"! 6)//~F   #Q/s3  s%AB8A%B88 CCCC df_outputr ct|jdD]}|j|s|j}t|dk\s4|d}|d}|d}|djd} |j ||j ||j |t |dcSy #t $rYwxYw) z!Parse df output for specific path %)rrrrN)splitendswithlenrstrip_convert_to_gbint ValueError) r,r6r linepartssize_strused_str avail_struse_percent_strs r4r&zDiskMonitor._parse_df_for_path`sOOD) D}}T" u:?$QxH$QxH %aI&+Ahooc&:O(,(;(;H(E'+':':8'D'+':':9'E,/,@   (&s*z, )r(join)r,r r.rGdisks r4r)zDiskMonitor._create_messagesR+ ED LLDL>D,@+AC D EyyrRN) __name__ __module__ __qualname____doc__r%rr5r+r&rDrCrr)rRr4rrs"YBG",r]s! } } rR