proc ng_free {nick uhost hand chan arg} { global binary announce device theme dev_max_length checkchan $nick $chan array set tmpdev [array get device] set devices(0) "" set devCount 0; set lineCount 0 set totalFree 0; set totalUsed 0; set totalSize 0 if {[catch {exec $binary(DF) -Pkl} output] != 0} { putlog "dZSbot error: \"df -Pkl\" failed:" foreach line [split $output "\n"] { putlog "dZSbot error: $line" } return } foreach line [split $output "\n"] { foreach {name value} [array get tmpdev] { if {[string equal [lindex $line 0] [lindex $value 0]]} { if {[scan $line "%s %d %d %d" devName devSize devUsed devFree] != 4} { putlog "dZSbot warning: Invalid \"df -Pkl\" line: $line" continue } set devPercFree [format "%.1f" [expr {(double($devFree) / double($devSize)) * 100}]] set devPercUsed [format "%.1f" [expr {(double($devUsed) / double($devSize)) * 100}]] set output $announce(FREE-DEV) set output [replacevar $output "%free" [format_kb $devFree]] set output [replacevar $output "%used" [format_kb $devUsed]] set output [replacevar $output "%total" [format_kb $devSize]] set output [replacevar $output "%perc_free" $devPercFree] set output [replacevar $output "%perc_used" $devPercUsed] set output [replacevar $output "%section" [lrange $value 1 end]] if {$dev_max_length > 0 && ([string length $devices($lineCount)] + [string length $output]) > $dev_max_length} { incr lineCount set devices($lineCount) "" } append devices($lineCount) $output set totalFree [expr {double($totalFree) + double($devFree)}] set totalUsed [expr {double($totalUsed) + double($devUsed)}] set totalSize [expr {double($totalSize) + double($devSize)}] incr devCount unset tmpdev($name) ## End the device match loop (not the df output loop) break } } } if {[llength [array names tmpdev]]} { set devList "" foreach {name value} [array get tmpdev] {lappend devList $value} putlog "dZSbot warning: The following devices had no matching \"df -Pkl\" entry: [join $devList {, }]" } if {$totalSize} { set percFree [format "%.1f" [expr {(double($totalFree) / double($totalSize)) * 100}]] set percUsed [format "%.1f" [expr {(double($totalUsed) / double($totalSize)) * 100}]] } else { set percFree 0.0; set percUsed 0.0 } set totalFree [format_kb $totalFree] set totalUsed [format_kb $totalUsed] set totalSize [format_kb $totalSize] set index 0 while {$index < $lineCount + 1} { set output "$theme(PREFIX)$announce(FREE)" set output [replacevar $output "%free" $totalFree] set output [replacevar $output "%used" $totalUsed] set output [replacevar $output "%total" $totalSize] set output [replacevar $output "%perc_free" $percFree] set output [replacevar $output "%perc_used" $percUsed] set output [replacevar $output "%devices" $devices($index)] sndone $chan [replacebasic $output "FREE"] incr index } return }