All pastes #243365 Raw Edit

Untitled

public text v1 · immutable
·published 2006-11-08 11:44 UTC
rendered paste body
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
}