I got tired of not knowing when I was running low on DHCP addresses so I wrote this little bit for our routers.
This is a basic script and my first time sharing. I have tested it on v2.9.42 and v3rc7
\
WarnAt needs to be at what percentage you want to be warned you are running out of IP addresses.
Here is my revised script that fixes that issue as well as adds the ability to use the script when running multiple dhcp servers.
Tested on v3.7
# WarnAt needs to be at what percentage you want to be warned you are running out of IP addresses.
:local WarnAt 10
#Name of DHCP Pool you want to monitor
:local DHCPPoolName dhcp_pool1
#Your Email to notify you when running out of available ip's
:local Email my@email.com
#Your mail server ip address
:local EmailServer 0.0.0.0
#Declare Variable
:local Total
:foreach i in=[/ip pool get $DHCPPoolName ranges] do={
#Get the DHCP pool range and put into a string.
:local range [:tostr $i]
#Get the Start address of the range
:local Start [:pick $range 0 [:find $range "-"]]
#Get the End address of the range
:local Stop [:pick $range ([:find $range "-"] + 1) 31]
#Calculate how many IP's are in the Pool by subtracting the end address and the start address and add one.
:local ip ($Stop - $Start +1 )
#Save the size of the pool to Total
:set Total ($ip + $Total)
}
#Get the name of the Server that is using the Pool
:local Server [/ip dhcp-server get [/ip dhcp-server find address-pool="$DHCPPoolName"] name]
#Get the number of IP address's used in the pool
:local Used [/ip dhcp-server lease print count-only where server=[/ip dhcp-server get [/ip dhcp-server find address-pool=$DHCPPoolName] name]]
#Subtract used from total to get available
:local Available ($Total - $Used)
#Calculate percentage IP's available
:local Perc (($Available * 100) / $Total)
#Setup e-mail
:local Subject ([/system identity get name] . " DHCP pool is at $Perc")
:local Body ("Out of $Total addresses you have $Available available")
#Send out Email when available ip's percentage is below or equal to warnat
:if ($Perc <= $WarnAt) do={
/tool e-mail send to=$Email subject=$Subject body=$Body server=$EmailServer
}
:log info $Body