Bandwidth Meter

Screenshot on the right should pretty much say it all. Using COM objects and WMI, it gets the amount of recieved/sent bytes on your connection each second. And displays the difference.

To get a more stable output, it optionally calculate the average from the past 3, 5, 10 or 30 seconds.

Usage

Open the dialog:

/bw

bandwidth.mrc

;
; @name      Bandwidth Meter
; @version   0.1 (2007-01-02)
; @licence   GPL 2
; @author    David Lorentsen <zyberdog@quakenet.org>
; @www       http://wiki.zyberdog.dk/mirc/bandwidth
;
 
alias bw {
  dialog -m bw.meter bw.meter
}
 
dialog bw.meter {
  title "Bandwidth Meter [/bw]"
  size -1 -1 230 206
  option pixels notheme
  button "&Close", 1, 156 174 65 25, ok
  button "&Spam", 2, 10 174 65 25
  button "&Reset", 3, 83 174 65 25
  box "Downstream", 4, 6 5 218 50
  box "Upstream", 5, 6 60 218 50
  edit "", 6, 16 24 197 20, read right
  edit "", 7, 16 79 197 20, read right
  combo 8, 16 133 197 70, drop
  box "Show average over", 9, 6 115 218 50
}
 
on *:DIALOG:bw.meter:init:*:{
  did -a $dname 8 Disabled
  did -a $dname 8 3 seconds
  did -a $dname 8 5 seconds
  did -a $dname 8 10 seconds
  did -a $dname 8 30 seconds
  did -c $dname 8 3
  update
  .timerbw.meter 0 1 update
}
on *:DIALOG:bw.meter:sclick:*:{
  if ($did == 2) {
    ; Spam
    var %avglen = $gettok($did(bw.meter,8),1,32)
    if (%avglen isnum && $numtok(%bw.meter.history.dl,32) < %avglen) {
      var %avglen = $v1
    }
    if ($active ischan || $query($active)) {
      msg $active Bandwidth, Downstream: $did($dname,6) - Upstream: $did($dname,7) $iif(%avglen != Disabled,- ( $+ $v1 second average))
    }
    else {
      echo -a * Bandwidth, Downstream: $did($dname,6) - Upstream: $did($dname,7) $iif(%avglen != Disabled,- ( $+ $v1 second average))
    }
  }
  elseif ($did == 3) {
    ; Reset
    unset %bw.meter.history.*
  }
}
on *:DIALOG:bw.meter:close:*:{
  .timerbw.meter off
  unset %bw.meter.*
}
 
alias -l update {
  if (!$dialog(bw.meter)) { .timerbw.meter off | unset %bw.meter.* }
  var %avglen = $replace($gettok($did(bw.meter,8),1,32),Disabled,1)
 
  set %bw.meter.history.dl $gettok($instok(%bw.meter.history.dl,$dl,1,32),1-30,32)
  set %bw.meter.history.ul $gettok($instok(%bw.meter.history.ul,$ul,1,32),1-30,32)
 
  if ($numtok(%bw.meter.history.dl,32) < %avglen) {
    did -ra bw.meter 6 $bytes($calc(($replace(%bw.meter.history.dl,$chr(32),+)) / $v1)).suf $+ /sec
    if ($did(bw.meter,8).sel > 1) {
      did -o bw.meter 8 $v1 $gettok($did(bw.meter,8),1-2,32) (need $calc($gettok($did(bw.meter,8),1,32) - $numtok(%bw.meter.history.dl,32)) $+ )
      did -c bw.meter 8 $v1
    }
  }
  else {
    did -ra bw.meter 6 $bytes($calc(($replace($gettok(%bw.meter.history.dl,$+(1-,%avglen),32),$chr(32),+)) / %avglen)).suf $+ /sec
    if ($numtok($did(bw.meter,8),32) > 2) && ($did(bw.meter,8).sel > 1) {
      did -o bw.meter 8 $v1 $gettok($did(bw.meter,8),1-2,32)
      did -c bw.meter 8 $v1
    }
  }
 
  if ($numtok(%bw.meter.history.ul,32) < %avglen) {
    did -ra bw.meter 7 $bytes($calc(($replace(%bw.meter.history.ul,$chr(32),+)) / $v1)).suf $+ /sec
  }
  else {
    did -ra bw.meter 7 $bytes($calc(($replace($gettok(%bw.meter.history.ul,$+(1-,%avglen),32),$chr(32),+)) / %avglen)).suf $+ /sec
  }
}
alias -l dl {
  var %x = $wmi(BytesReceivedPersec)
  if (!%bw.meter.dl) { 
    set %bw.meter.dl %x
    return 0
  }
  var %r = $calc(%x - %bw.meter.dl)
  set %bw.meter.dl %x
  return %r
}
alias -l ul {
  var %x = $wmi(BytesSentPersec)
  if (!%bw.meter.ul) { 
    set %bw.meter.ul %x
    return 0
  }
  var %r = $calc(%x - %bw.meter.ul)
  set %bw.meter.ul %x
  return %r
}
alias -l wmi {
  .comopen com1 WbemScripting.SWbemLocator
  var %x = $com(com1,ConnectServer,3,dispatch* com2)
  var %y = $com(com2,ExecQuery,3,bstr*,SELECT $1 FROM Win32_PerfRawData_Tcpip_NetworkInterface,dispatch* com3)
  var %z = $comval(com3,1,$1)
  .comclose com1 | .comclose com2 | .comclose com3
  return %z
}

History

v0.1 (2007-01-02)

  • First public release.
mirc/bandwidth.txt · Last modified: 2007/01/02 10:22 by zyberdog