Posted to tcl by Napier at Sat Nov 08 21:02:30 GMT 2014view raw
- 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
- }