
RJT Monitor usage process with cygwin
wm title . "Cliente Monitor CPU"
wm geometry . 400x300+[expr [winfo screenwidth .]/3]+[expr [winfo screenheight .]/3]
wm maxsize . 1024 768
wm minsize . 550 320
wm attributes . -alpha .65
wm protocol . WM_DELETE_WINDOW {rerun}
set varlog 1
set hc 0
set tiempo 1000
set colores {red green blue yellow violet cyan orange pink gold grey white black}
set color [lindex $colores [expr int(rand()*[llength $colores])]]
if {[lindex $::tcl_platform(platform)]=="unix"} {
set path "./"
} else {
set path ".\\"
}
global $path
destroy .m
set alto [winfo height .]
set ancho [winfo width .]
set fuente "arial [expr (($ancho/$alto)*16)] bold"
pack [frame .m -relief raised -borderwidth 0 -bg grey -height 30 ] -expand no -fill both -side top
pack [frame .m.s -relief raised -borderwidth 0 -bg grey -height 30 ] -expand no -fill x -side top
pack [label .m.s.l3 -text "Refresco (ms):"]\
[entry .m.s.e3 -textvariable tiempo -width 5 -bg white]\
[button .m.s.top -text "TOP" -command {alltop} ]\
[button .m.s.shade -text "SHADE" -command {shade} ]\
[button .m.s.run -text "RUN" -command {run} ]\
[button .m.s.bye -text "BYE" -command {bye} ]\
[button .m.s.quit -text "QUIT" -command {exit} ]\
-expand yes -fill x -side left
foreach objeto {top shade run bye quit} {
.m.s.$objeto configure -activebackground red
}
pack [frame .m.b -relief groove -borderwidth 2 -bg grey] -expand no -fill x -side top
pack [button .m.b.cpu -text "CPU" -command {set varlog 1} ]\
[button .m.b.ram -text "RAM" -command {set varlog 2} ]\
[button .m.b.swp -text "SWAP" -command {set varlog 3} ]\
[button .m.b.hdd -text "DISK" -command {set varlog 4} ]\
[button .m.b.pro -text "PROC" -command {set varlog 5} ]\
[button .m.b.sys -text "SYS" -command {set varlog 6} ]\
-expand yes -fill x -side left
foreach objeto {cpu ram swp hdd pro sys} {
.m.b.$objeto configure -activebackground yellow -relief groove
}
pack [canvas .m.g -background white ] -expand yes -fill both -side top
bind . <Motion> {wm title . "Monitor de CPU: Rolando José Torres Sánchez" }
bind . <B1-Motion> {wm title . "Monitor de CPU: %x %y" }
bind . <B2-Motion> {
set ancho [winfo width .]
set alto [winfo height .]
set posimouse [expr (%x+%y)]
set sumacoor [expr ($ancho+$alto)]
if {$posimouse <= $sumacoor} {
set trans [expr 0.1+(1.0* $posimouse / $sumacoor)]
if {($trans > 0.1) & ($trans < 2)} {
wm attributes . -alpha $trans
}
}
}
bind . <B3-Motion> {wm title . "Objeto: %W %x %y" }
proc Update { } {
global varlog servidor puerto ancho alto fuente path tiempo
set alto [winfo height .]
set ancho [winfo width .]
set fuentesize [expr int(double($alto/40))]
if {$fuentesize ==0} { incr fuentesize }
if {$tiempo <= 500} { set tiempo 500 }
set fuente "arial $fuentesize bold"
.m.g configure -width $ancho -height [expr $alto-70]
if {($varlog>=1)&($varlog<=6)} {
if {$varlog == 1 } {
.m.g delete all
set hc 0
if {[lindex $::tcl_platform(platform)]=="unix"} {
set estado [split [exec vmstat 1 2] \n]
set cpulog [lindex [lindex $estado 3]]
.m.g create text [expr ($ancho*.125)] [expr $alto-100] -text "Users: [lindex $cpulog 12]" -fill black -font $fuente
.m.g create text [expr ($ancho*.375)] [expr $alto-100] -text "System: [lindex $cpulog 13]" -fill black -font $fuente
.m.g create text [expr ($ancho*.625)] [expr $alto-100] -text "Idle: [lindex $cpulog 14]" -fill black -font $fuente
.m.g create text [expr ($ancho*.875)] [expr $alto-100] -text "Wait: [lindex $cpulog 15]" -fill black -font $fuente
.m.g create rectangle [expr ($ancho*.00)] [expr $alto-120] [expr ($ancho*.25)] [expr ($alto-120)-[expr [lindex $cpulog 12]*($alto-145)*0.01]] -fill orange
.m.g create rectangle [expr ($ancho*.25)] [expr $alto-120] [expr ($ancho*.50)] [expr ($alto-120)-[expr [lindex $cpulog 13]*($alto-145)*0.01]] -fill red
.m.g create rectangle [expr ($ancho*.50)] [expr $alto-120] [expr ($ancho*.75)] [expr ($alto-120)-[expr [lindex $cpulog 14]*($alto-145)*0.01]] -fill green
.m.g create rectangle [expr ($ancho*.75)] [expr $alto-120] [expr ($ancho* 1.)] [expr ($alto-120)-[expr [lindex $cpulog 15]*($alto-145)*0.01]] -fill blue
} else {
set estado [split [exec vmstat 1 2] \n]
set cpulog [lindex [lindex $estado 3]]
.m.g create text [expr ($ancho*1./6)] [expr $alto-100] -text "Users: [lindex $cpulog 13]" -fill black -font $fuente
.m.g create text [expr ($ancho*3./6)] [expr $alto-100] -text "System: [lindex $cpulog 14]" -fill black -font $fuente
.m.g create text [expr ($ancho*5./6)] [expr $alto-100] -text "Idle: [lindex $cpulog 15]" -fill black -font $fuente
.m.g create rectangle [expr ($ancho*.00)] [expr $alto-120] [expr ($ancho*2./6)] [expr ($alto-120)-[expr [lindex $cpulog 13]*($alto-145)*0.01]] -fill orange
.m.g create rectangle [expr ($ancho*2./6)] [expr $alto-120] [expr ($ancho*4./6)] [expr ($alto-120)-[expr [lindex $cpulog 14]*($alto-145)*0.01]] -fill red
.m.g create rectangle [expr ($ancho*4./6)] [expr $alto-120] [expr ($ancho* 1.)] [expr ($alto-120)-[expr [lindex $cpulog 15]*($alto-145)*0.01]] -fill green
}
}
if {$varlog == 2 } {
.m.g delete all
set hc 0
set estado [split [exec free] \n]
set allmem [lindex [lindex $estado 1] 1]
set usomem [lindex [lindex $estado 1] 2]
set fremem [lindex [lindex $estado 1] 3]
set usobuf [lindex [lindex $estado 2] 2]
set frebuf [lindex [lindex $estado 2] 3]
.m.g create text [expr ($ancho*.1)] [expr $alto-100] -text "RAM:\n$allmem" -fill black -font $fuente -justify center
.m.g create text [expr ($ancho*.3)] [expr $alto-100] -text "RAM Usada:\n$usomem" -fill black -font $fuente -justify center
.m.g create text [expr ($ancho*.5)] [expr $alto-100] -text "RAM Libre:\n$fremem" -fill black -font $fuente -justify center
.m.g create text [expr ($ancho*.7)] [expr $alto-100] -text "Buffer Usado:\n$usobuf" -fill black -font $fuente -justify center
.m.g create text [expr ($ancho*.9)] [expr $alto-100] -text "Buffer Libre:\n$frebuf" -fill black -font $fuente -justify center
.m.g create rectangle [expr ($ancho*.0)] [expr $alto-120] [expr ($ancho*.2)] [expr ($alto-120)-[expr ($allmem./$allmem.)*($alto-140)]] -fill cyan
.m.g create rectangle [expr ($ancho*.2)] [expr $alto-120] [expr ($ancho*.4)] [expr ($alto-120)-[expr ($usomem./$allmem.)*($alto-140)]] -fill red
.m.g create rectangle [expr ($ancho*.4)] [expr $alto-120] [expr ($ancho*.6)] [expr ($alto-120)-[expr ($fremem./$allmem.)*($alto-140)]] -fill {dark green}
.m.g create rectangle [expr ($ancho*.6)] [expr $alto-120] [expr ($ancho*.8)] [expr ($alto-120)-[expr ($usobuf./$allmem.)*($alto-140)]] -fill orange
.m.g create rectangle [expr ($ancho*.8)] [expr $alto-120] [expr ($ancho*1.)] [expr ($alto-120)-[expr ($frebuf./$allmem.)*($alto-140)]] -fill yellow
}
if {$varlog == 3 } {
.m.g delete all
set hc 0
set estado [split [exec free] \n]
set allswpmem [lindex [lindex $estado 3] 1]
set usoswpmem [lindex [lindex $estado 3] 2]
set freswpmem [lindex [lindex $estado 3] 3]
.m.g create text [expr ($ancho*.166)] [expr $alto-100] -text "SWAP $allswpmem" -fill black -font $fuente
.m.g create text [expr ($ancho*.500)] [expr $alto-100] -text "SWAP Usada $usoswpmem" -fill black -font $fuente
.m.g create text [expr ($ancho*.833)] [expr $alto-100] -text "SWAP Libre $freswpmem" -fill black -font $fuente
.m.g create rectangle [expr ($ancho*0.00)] [expr $alto-120] [expr ($ancho*.333)] [expr ($alto-120)-[expr ($allswpmem./$allswpmem.)*($alto-140)]] -fill cyan
.m.g create rectangle [expr ($ancho*.333)] [expr $alto-120] [expr ($ancho*.666)] [expr ($alto-120)-[expr ($usoswpmem./$allswpmem.)*($alto-140)]] -fill red
.m.g create rectangle [expr ($ancho*.666)] [expr $alto-120] [expr ($ancho*1.00)] [expr ($alto-120)-[expr ($freswpmem./$allswpmem.)*($alto-140)]] -fill {dark green}
}
if {$varlog == 4 } {
.m.g delete all
set estado [split [exec df -P -k ] \n]
set filas [llength $estado]
for {set i 0 } {$i<$filas} {incr i} {
set particion [lindex [lindex $estado $i] 0]
set size [lindex [lindex $estado $i] 1]
set uso [lindex [lindex $estado $i] 2]
if {$i >0 } {
set porcenta [expr ($uso*100/$size)]
} else {
set porcenta 0
}
destroy .m.g.f$i
set altofila 20
pack [frame .m.g.f$i -height $altofila] -fill x -side top
pack [label .m.g.f$i.c1 -text $particion -width 20 -relief raised -bg white -justify right -font $fuente ]\
[label .m.g.f$i.c2 -text $size -width 10 -relief raised -bg white -justify right -font $fuente ]\
[label .m.g.f$i.c3 -text $uso -width 10 -relief raised -bg white -justify right -font $fuente]\
[label .m.g.f$i.c4 -text $porcenta -width 10 -relief raised -bg white -justify right -font $fuente] -fill x -side left
pack [canvas .m.g.f$i.c5 -width [expr ($porcenta*2)] -height $altofila -bg red -relief flat -bd 0]\
[canvas .m.g.f$i.c6 -width [expr (200-($porcenta*2))] -height $altofila -bg "green" -relief flat -bd 0] -fill x -side left
}
set varlog 0
stop
}
if {$varlog == 5 } {
.m.g delete all
set hc 0
set estado [split [exec vmstat 1 2] \n]
set cpulog [lindex [lindex $estado 3]]
.m.g create text [expr ($ancho*.125)] [expr $alto-100] -text "Read: [lindex $cpulog 0]" -fill black -font $fuente
.m.g create text [expr ($ancho*.485)] [expr $alto-100] -text "Block: [lindex $cpulog 1]" -fill black -font $fuente
.m.g create text [expr ($ancho*.815)] [expr $alto-100] -text "Write: [lindex $cpulog 2]" -fill black -font $fuente
.m.g create rectangle [expr ($ancho*.00)] [expr $alto-120] [expr ($ancho*.33)] [expr ($alto-120)-[expr [lindex $cpulog 0]*($alto-145)*1]] -fill red
.m.g create rectangle [expr ($ancho*.33)] [expr $alto-120] [expr ($ancho*.66)] [expr ($alto-120)-[expr [lindex $cpulog 1]*($alto-145)*1]] -fill yellow
.m.g create rectangle [expr ($ancho*.66)] [expr $alto-120] [expr ($ancho*.99)] [expr ($alto-120)-[expr [lindex $cpulog 2]*($alto-145)*1]] -fill green
}
if {$varlog == 6 } {
.m.g delete all
set hc 0
set estado [split [exec vmstat 1 2] \n]
set cpulog [lindex [lindex $estado 3]]
set inter [expr [lindex $cpulog 11]]
set block [expr [lindex $cpulog 12]]
if {$inter >= $block} {
set mayor [expr $inter]
} else {
set mayor [expr $block]
}
.m.g create text [expr ($ancho*.25)] [expr $alto-100] -text "Interrup: $inter " -fill black -font $fuente
.m.g create text [expr ($ancho*.75)] [expr $alto-100] -text "Block: $block" -fill black -font $fuente
.m.g create rectangle [expr ($ancho*.0)] [expr $alto-120] [expr ($ancho*.5)] [expr ($alto-120)-[expr double(($inter+0.0)/$mayor)*($alto-145) ]] -fill blue
.m.g create rectangle [expr ($ancho*.5) ] [expr $alto-120] [expr ($ancho*1)] [expr ($alto-120)-[expr double(($block+0.0)/$mayor)*($alto-145) ]] -fill yellow
}
after $tiempo Update
}
}
proc alltop {} {
wm attributes . -topmost yes
.m.s.top configure -text "NORMAL" -command {subtop}
}
proc subtop {} {
wm attributes . -topmost no
.m.s.top configure -text "TOP" -command {alltop}
}
proc shade {} {
wm overrideredirect . yes
.m.s.shade configure -text "UNSHADE" -command {unshade}
}
proc unshade {} {
wm overrideredirect . no
.m.s.shade configure -text "SHADE" -command {shade}
}
proc bye {} {
global tiempo
wm withdraw .
after $tiempo
wm deiconify .
.m.s.bye configure -text "HI" -command {
.m.s.bye configure -text "BYE"
after 1500
bye
}
}
proc rerun {} {
wm withdraw .
after 5000
wm deiconify .
}
proc run {} {
global varlog
.m.s.run configure -text "STOP " -command {stop}
set varlog 1
if { [winfo exists .m.g.f1] } {
catch {
destroy .m.g
pack [canvas .m.g -background white ] -expand yes -fill both -side top
.m.g delete all
}
}
Update
}
proc stop {} {
global varlog
.m.s.run configure -text "RUN" -command {run}
set varlog 0
}
alltop
shade
run