#!/usr/bin/ruby require 'uri' require 'net/http' require 'gdbm' require 'time' require 'syslog' fnam = ARGV.shift limit = (ARGV.shift || '180').to_i dest = ARGV.shift || 'http://alert-hub.appspot.com/publish' now = Time.now queue = {} $logger = Syslog.open('notifygah', Syslog::LOG_PID, Syslog::LOG_NEWS) GDBM::open(fnam, GDBM::READER){|db| for k, v in db next unless /^lmt\// === k feed = $' lmt = Time.parse(v) tdif = now - lmt if tdif > limit $logger.info('skip %g %s', tdif, File.basename(feed)) if $VERBOSE next end queue[feed] = tdif end } udest = URI.parse(dest) rc = 0 for feed, tdif in queue form = {'hub.mode'=>'publish', 'hub.url'=>feed} begin r = Net::HTTP.post_form(udest, form) rescue Net::ReadTimeout $logger.err("err Net::ReadTimeout #{tdif} feed=#{File.basename(feed)}") rc = 8 break end case r.code when /^2/ then $logger.info('ok %s %g feed=%s', r.code, tdif, File.basename(feed)) rc = 0 else msg = sprintf('err %s %g feed=%s', r.code, tdif, File.basename(feed)) $logger.err(msg) rc = 4 end end $logger.info('rc=%u', rc) exit rc