< ^ txt
Tue Mar 15 09:39:48 EDT 2016
Slept from ten-something to after seven.
Fifty-four and mostly cloudy today.
Ides of March.
So, it seems that Ruby doesn't have a ++ operator. Fine, but it also doesn't complain if you try to use it.
Goals:
Work:
- Finish up Ruby stuff
Done.
- Play with Docker
A little.
https://paulgorman.org/technical/linux-docker.txt
Went with Kristen, Scott, Kari, and Karina to a new place for lunch: Bigalora. Good pizza, mediocre gelato.
Home:
- Read LotFP rules
No.
- SEMIBUG meeting
Done.
Michael Lucas gave a talk about FreeBSD filesystems, mostly about GEOM and ZFS.
#!/usr/bin/env ruby
# A simple Ruby network monitoring script
# Paul Gorman 2016
require 'colorize'
require 'net/ping'
class Health
def initialize
@history = Array.new
for i in 0..99 do
@history[i] = 1
end
@i = 0
end
def up
@history[@i] = 1
@i = @i + 1
if @i > 99
@i = 0
end
end
def down
@history[@i] = 0
@i = @i + 1
if @i > 99
@i = 0
end
end
def get
return @history.inject(0, :+)
end
end
class Site
def initialize(name, vpn_ip, public_ip, gateway_ip)
@name = name
@vpn = Net::Ping::External.new(vpn_ip)
@public = Net::Ping::External.new(public_ip)
@gateway = Net::Ping::External.new(gateway_ip)
@health = Health.new
end
def check
if @vpn.ping?
@health.up
printf "%-16s OK (%d)\n".colorize(:green), @name, @health.get
elsif @public.ping?
@health.down
printf "%-16s VPN unresponsive (%d)\n".colorize(:yellow), @name, @health.get
elsif @gateway.ping?
@health.down
printf "%-16s router unresponsive (%d)\n".colorize(:red), @name, @health.get
else
@health.down
printf "%-16s gateway unresponsive (%d)\n".colorize(:red), @name, @health.get
end
end
end
class Server
def initialize(name, ip)
@name = name
@ip = Net::Ping::External.new(ip)
@health = Health.new
end
def check
if @ip.ping?
@health.up
printf "%-16s OK (%d)\n".colorize(:green), @name, @health.get
else
@health.down
printf "%-16s unresponsive (%d)\n".colorize(:red), @name, @health.get
end
end
end
sites = Array.new
sites.push(Site.new('BV', '10.0.25.1', 'nnn.nnn.210.234', 'nnn.nnn.210.233'))
sites.push(Site.new('CL', '10.0.1.1', 'nn.nn.233.189', 'nn.nn.233.190'))
sites.push(Site.new('WN', '10.0.10.1', 'nnn.nnn.217.230', 'nnn.nnn.194.114'))
servers = Array.new
servers.push(Server.new('server1', '10.0.0.1'))
servers.push(Server.new('server2', '10.0.0.70'))
servers.push(Server.new('server3', '10.0.0.10'))
# Trap ^C
Signal.trap('INT') {
puts ' Bye.'
exit
}
# Trap `Kill `
Signal.trap('TERM') {
puts ' Bye.'
exit
}
while true
sites.each do |site|
site.check
sleep(1)
end
puts '----'.colorize(:cyan)
servers.each do |server|
server.check
sleep(1)
end
puts '----'.colorize(:cyan)
end
< ^ txt