Ok, hold my hand here.. Just copy that text and paste it into a terminal windows, yes? Or do I create a script and paste it there? Be gentle, it's my first time.
-Ty On Wed, Sep 19, 2012 at 1:45 PM, Kerry <[email protected]> wrote: > I use this script, schedule it to run however often you'd like. It throws > a script error when it's above the thresholds in the script. > I have system logging set to log script errors to my syslog box which > email-alerts us. > /system logging > add action=remote disabled=no prefix=DCHP-Server topics=script,error > > > > # List stats for IP -> Pool > # > # criticalthreshold = output pool display in red if pool used is above > this % > # warnthreshold = output pool display in gold if pool used is above this % > > :local criticalthreshold 90 > :local warnthreshold 70 > > # Internal processing below... > # ------------------------------**---- > /ip pool { > :local poolname > :local pooladdresses > :local poolused > :local poolpercent > :local minaddress > :local maxaddress > :local findindex > :local tmpint > :local maxindex > :local line > > :put ("IP Pool Statistics") > :put ("------------------") > > # Iterate through IP Pools > :foreach p in=[find] do={ > > :set poolname [get $p name] > :set pooladdresses 0 > :set poolused 0 > :set line "" > > :set line (" " . $poolname) > > # Iterate through current pool's IP ranges > :foreach r in=[:toarray [get $p range]] do={ > > # Get min and max addresses > :set findindex [:find [:tostr $r] "-"] > :if ([:len $findindex] > 0) do={ > :set minaddress [:pick [:tostr $r] 0 $findindex] > :set maxaddress [:pick [:tostr $r] ($findindex + 1) [:len > [:tostr $r]]] > } else={ > :set minaddress [:tostr $r] > :set maxaddress [:tostr $r] > } > > # Convert to array of octets (replace '.' with ',') > :for x from=0 to=([:len [:tostr $minaddress]] - 1) do={ > :if ([:pick [:tostr $minaddress] $x ($x + 1)] = ".") do={ > :set minaddress ([:pick [:tostr $minaddress] 0 $x] . "," . \ > [:pick [:tostr $minaddress] ($x + > 1) [:len [:tostr $minaddress]]]) } > } > :for x from=0 to=([:len [:tostr $maxaddress]] - 1) do={ > :if ([:pick [:tostr $maxaddress] $x ($x + 1)] = ".") do={ > :set maxaddress ([:pick [:tostr $maxaddress] 0 $x] . "," . \ > [:pick [:tostr $maxaddress] ($x + > 1) [:len [:tostr $maxaddress]]]) } > } > > # Calculate available addresses for current range > :if ([:len [:toarray $minaddress]] = [:len [:toarray > $maxaddress]]) do={ > :set maxindex ([:len [:toarray $minaddress]] - 1) > :for x from=$maxindex to=0 step=-1 do={ > # Calculate 256^($maxindex - $x) > :set tmpint 1 > :if (($maxindex - $x) > 0) do={ > :for y from=1 to=($maxindex - $x) do={ :set tmpint (256 > * $tmpint) } > } > :set tmpint ($tmpint * ([:tonum [:pick [:toarray > $maxaddress] $x]] - \ > [:tonum [:pick > [:toarray $minaddress] $x]]) ) > :set pooladdresses ($pooladdresses + $tmpint) > # for x > } > > # if len array $minaddress = $maxaddress > } > > # Add current range to total pool's available addresses > :set pooladdresses ($pooladdresses + 1) > > # foreach r > } > > # Now, we have the available address for all ranges in this pool > # Get the number of used addresses for this pool > :set poolused [:len [used find pool=[:tostr $poolname]]] > :set poolpercent (($poolused * 100) / $pooladdresses) > > # Output information > :set line ([:tostr $line] . " [" . $poolused . "/" . $pooladdresses > . "]") > :set line ([:tostr $line] . " " . $poolpercent . " % used") > > # Set colored display for used thresholds > :if ( [:tonum $poolpercent] > $criticalthreshold ) do={ > :log error ("IP Pool " . $poolname . " is " . $poolpercent . "% > full" . " [" . $poolused . "/" . $pooladdresses . "]") > :put ([:terminal style varname] . $line) > } else={ > :if ( [:tonum $poolpercent] > $warnthreshold ) do={ > :log warning ("IP Pool " . $poolname . " is " . $poolpercent . > "% full") > :put ([:terminal style syntax-meta] . $line) > } else={ > :put ([:terminal style none] . $line) > } > } > > # foreach p > } > # /ip pool > > } > On 9/19/2012 11:33 AM, Ty Featherling wrote: > >> I have a routerboard acting as my primary DHCP server. I am also adding >> routers to this large bridged network a tower at a time and each new >> router >> holds DHCP pools for their segment as well. >> >> How can I keep track of how many addresses are being utilized per pool? I >> know that "ip dhcp-server lease print" will show how many active leases >> there are but I want to see the number of unused addresses in a pool. I >> have to do math in my head each time to compare the number of addresses in >> the pool to the number of active leases to get that number. >> >> Has anyone found or created a more elegant solution to this? >> >> -Ty >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> URL: <http://www.butchevans.com/**pipermail/mikrotik/** >> attachments/20120919/54ec5d39/**attachment.html<http://www.butchevans.com/pipermail/mikrotik/attachments/20120919/54ec5d39/attachment.html> >> > >> ______________________________**_________________ >> Mikrotik mailing list >> [email protected] >> http://www.butchevans.com/**mailman/listinfo/mikrotik<http://www.butchevans.com/mailman/listinfo/mikrotik> >> >> Visit http://blog.butchevans.com/ for tutorials related to Mikrotik >> RouterOS >> >> >> > > ______________________________**_________________ > Mikrotik mailing list > [email protected] > http://www.butchevans.com/**mailman/listinfo/mikrotik<http://www.butchevans.com/mailman/listinfo/mikrotik> > > Visit http://blog.butchevans.com/ for tutorials related to Mikrotik > RouterOS > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.butchevans.com/pipermail/mikrotik/attachments/20120919/abf0ef50/attachment.html> _______________________________________________ Mikrotik mailing list [email protected] http://www.butchevans.com/mailman/listinfo/mikrotik Visit http://blog.butchevans.com/ for tutorials related to Mikrotik RouterOS

