Posted to tcl by Napier at Sat Nov 08 21:02:30 GMT 2014view pretty
proc checkCPU {} { UCL 1 "Analyzing the CPU over the next 45 seconds" set ::Module::CurrentMem "" catch {set ::Module::CurrentMem [string map {"cpu" ""} [lindex [split [exec cat /proc/stat] \n] 0]]} LOG "Current MEM:\n $::Module::CurrentMem" after 30000 {::Module::secondCheck} } proc secondCheck {} { set mem2 "" catch {set mem2 [string map {"cpu" ""} [lindex [split [exec cat /proc/stat] \n] 0]]} LOG "MEM2:\n$mem2" if {$::Module::CurrentMem == "" || $mem2 == ""} {UCL 1 "Error Getting CPU"; return} set currentCPU [::Module::calculateCPU $::Module::CurrentMem $mem2] set averageCPU [::Module::calculateCPU $::Module::BootMem $mem2] UCL 1 "Current CPU Utilization: $currentCPU" UCL 1 "Average CPU Utilization: $averageCPU" set json " \{ \"Avg CPU\": ${averageCPU}, \"Current CPU\": ${currentCPU}, \"Timestamp\": [clock milliseconds] \} " http::geturl ${::constants::fbURL}${::constants::fbAccountPath}/${::Module::Username}/clients/${::constants::fbMRXMAC}/Status/System/CPU/.json?auth=${::constants::fbToken} -query $json -command ::Module::UnblockingCallback } proc calculateCPU {mem1 mem2} { set i 0; set subtracted "" foreach value $mem1 { set v1 [lindex $mem1 $i] set v2 [lindex $mem2 $i] set result [expr {$v2-$v1}] lappend subtracted $result incr i } LOG "Subtracted: $subtracted" set current 0 foreach value $subtracted { set current [expr {$current+$value}] } set utilization [expr {round(((double($current)-[lindex $subtracted 3])/$current)*100)}] return $utilization }