#! /usr/local/bin/ruby require 'rubygems' require 'hpricot' require 'open-uri' require 'timeout' require 'rss' i = 0 if ARGV.length != 2 puts "./check_portsmon.rb check your ports commit on portsmon" puts "Usage: ./check_portsmon.rb commiter_name xml_limit" puts "Example: ./check_portsmon.rb mylogin 20" exit 0 end url = "http://cia.vc/stats/author/" + ARGV[0] + "/.rss?ver=2&medium=plaintext&limit=" + ARGV[1] flux_result, rss = nil begin timeout(10) do open(url) do |s| flux_result = s.read end begin rss = RSS::Parser.parse(flux_result) rescue RSS::InvalidRSSError rss = RSS::Parser.parse(flux_result, false) end end rescue StandardError => boom puts "Error: #{boom}" rescue Timeout::Error => time puts "Error: #{time}" exit 0 end if rss.items[i] != nil while i != ARGV[1].to_i if rss.items[i].description != nil && rss.items[i].description =~ /([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)/ if $1 == "ports" uri = "http://portsmon.freebsd.org/portoverview.py?category=" + $2 + "&portname=" + $3 puts "Testing #{$1}/#{$2}/#{$3}" @portsmon = Hpricot(open(uri)) @portsmon.search("td.error").each do |e| if e.inner_html =~ /([A-Z]{1}[a-z]{2,3}) ([A-Z]{1}[a-z]{2,3}) ([\d]{1,4})/ puts "Date: #{$1} #{$2} #{$3}" end if e.inner_html =~ /href="(.*\/)#(.*)">/ puts "Error: #{$2}" end if e.inner_html =~ /href="(.*.log)"/ puts "Go to #{$1}" end end end end i += 1 end else print "Commiter name invalid" exit 1 end