Posted to tcl by Napier at Sat Nov 08 21:02:30 GMT 2014view raw

  1. proc checkCPU {} {
  2. UCL 1 "Analyzing the CPU over the next 45 seconds"
  3. set ::Module::CurrentMem ""
  4. catch {set ::Module::CurrentMem [string map {"cpu" ""} [lindex [split [exec cat /proc/stat] \n] 0]]}
  5. LOG "Current MEM:\n $::Module::CurrentMem"
  6. after 30000 {::Module::secondCheck}
  7. }
  8.  
  9. proc secondCheck {} {
  10. set mem2 ""
  11. catch {set mem2 [string map {"cpu" ""} [lindex [split [exec cat /proc/stat] \n] 0]]}
  12. LOG "MEM2:\n$mem2"
  13. if {$::Module::CurrentMem == "" || $mem2 == ""} {UCL 1 "Error Getting CPU"; return}
  14. set currentCPU [::Module::calculateCPU $::Module::CurrentMem $mem2]
  15. set averageCPU [::Module::calculateCPU $::Module::BootMem $mem2]
  16. UCL 1 "Current CPU Utilization: $currentCPU"
  17. UCL 1 "Average CPU Utilization: $averageCPU"
  18. set json "
  19. \{
  20. \"Avg CPU\": ${averageCPU},
  21. \"Current CPU\": ${currentCPU},
  22. \"Timestamp\": [clock milliseconds]
  23. \}
  24. "
  25. http::geturl ${::constants::fbURL}${::constants::fbAccountPath}/${::Module::Username}/clients/${::constants::fbMRXMAC}/Status/System/CPU/.json?auth=${::constants::fbToken} -query $json -command ::Module::UnblockingCallback
  26. }
  27.  
  28. proc calculateCPU {mem1 mem2} {
  29. set i 0; set subtracted ""
  30. foreach value $mem1 {
  31. set v1 [lindex $mem1 $i]
  32. set v2 [lindex $mem2 $i]
  33. set result [expr {$v2-$v1}]
  34. lappend subtracted $result
  35. incr i
  36. }
  37. LOG "Subtracted: $subtracted"
  38. set current 0
  39. foreach value $subtracted {
  40. set current [expr {$current+$value}]
  41. }
  42. set utilization [expr {round(((double($current)-[lindex $subtracted 3])/$current)*100)}]
  43. return $utilization
  44. }