class PingPool def initialize(count) @count = count DATA.each_line do |line| line = line.strip next if line.start_with? '#' next if line == '' if line.index("#(") self.batch /#(\(.*\))/, line elsif line.index("#[") self.batch /#(\[.*\])/, line else self.run line end end end def batch(reg, line) list = eval reg.match(line)[1] list.each do |idx| url = $` + idx.to_s + $' self.run url end end def run(url) puts "Pinging #{url} #{@count} times." res = `ping -c #{@count} #{url}` if res == "" puts "Unknown host\n" return end res = res.split("\n") self.pretty(res) puts '' end def pretty(res) puts res[-2].split(',')[2].strip puts ("avg=#{res[-1].split(' ')[3].split('/')[1]} ms") end end if $0 == __FILE__ count = 10 if ARGV[0] count = ARGV[0].to_i count = 10 if count == 0 end PingPool.new(count) end __END__ # this is one line comment # ping urls in file data, default 10 times, usage: # ./this_file [count] # count is default set to 10, here is an example: # $ ruby this_file 4 # ping normal.com # outs puts looks like: # Pinging normal.com 10 times. # 10.0% packet loss # avg=36.251 ms normal.com # this equals ping # some1.url.com # some2.url.com # some3.url.com some#(1..3).url.com # this equals ping # other4.url.com # otherd.url.com other#[4,'d'].url.com