Forum Discussion
JRahm
Sep 06, 2013Admin
I'm working on a script to look at real time interface statistics, and I'm parsing with TMSH using lindex and splitting on line numbers.
proc script::run {} {
tmsh::clear_screen
if { $tmsh::argc == 1 } {
set int [getFeedback "Please enter the interface number (ie, 1.1): "]
} else {
set int [lindex $tmsh::argv 1]
}
set l1 []
set l2 []
set interval [getFeedback "Please enter refresh rate for the stats (in seconds): "]
set delay [expr $interval * 1000]
lappend l1 [lindex [lindex [split [tmsh::show net interface $int raw field-fmt] "\n"] 1] 1]
lappend l1 [lindex [lindex [split [tmsh::show net interface $int raw field-fmt] "\n"] 2] 1]
while { true } {
after $delay
lappend l2 [lindex [lindex [split [tmsh::show net interface $int raw field-fmt] "\n"] 1] 1]
lappend l2 [lindex [lindex [split [tmsh::show net interface $int raw field-fmt] "\n"] 2] 1]
tmsh::clear_screen
set s1 $l1
set s2 $l2
set statsIn [expr ([lindex $s2 0] - [lindex $s1 0]) / $interval]
set statsOut [expr ([lindex $s2 1] - [lindex $s1 1]) / $interval]
puts "Interface\t\tInbound (bps)\t\tOutbound (bps)"
puts "$int\t\t\t$statsIn\t\t\t$statsOut"
set l1 $l2
unset l2
}
}
I would suggest instead of using a while loop, you can just use puts and commas for each field.