rendered paste bodyproc 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
}