diff options
Diffstat (limited to 'utils/supportbot-mauve')
-rwxr-xr-x | utils/supportbot-mauve | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/utils/supportbot-mauve b/utils/supportbot-mauve new file mode 100755 index 0000000..614c5f5 --- /dev/null +++ b/utils/supportbot-mauve @@ -0,0 +1,73 @@ +#!/usr/bin/ruby +require 'fileutils' +require 'yaml' +require 'timeout' +require 'rubygems' +require 'cgi' + +class RT + class Ticket < Struct.new(:id, :subject, :content) + end + + def initialize(cli, ticket_query) + @cli = cli + @ticket_query = ticket_query + end + + def query(args) + IO.popen("#{@cli} #{args}", "r") do |io| + io.read + end + end + + def tickets + query(@ticket_query).split("\n").map do |line| + if /^(\d+): (.*)$/.match(line) + t = Ticket.new($1.to_i, $2, "") + query("show ticket/#{t.id}/attachments").split("\n")[-5..-1].each do |line2| + next unless /\s(\d+):\s+\(text\/(plain|html)/.match(line2) + is_html = $2 == "html" + + attachment = query("show -f Content ticket/#{t.id}/attachments/#{$1}"). + split("Content: ")[1]. + split("\n"). + map { |line3| line3.gsub(/^\s+/,"") }. + join("\n") + next unless attachment.match(/Action=Take/) + if is_html + t.content += attachment + "<hr/>" + else + t.content += "<pre>"+attachment+"</pre><hr/>" + end + end + t + else + nil + end + end.compact + end +end + +class String; def escape; gsub(/[^A-Za-z0-9]/) { |x| "\\#{x}" }; end end + +config = File.open("supportbot.config") { |fh| + YAML::parse(fh.read).transform } + +system("mauvesend -o supportbot -i heartbeat -r +10m -c now -s \"heartbeat not received\" -d \"Headtbeat send from supportbot-mauve code. It maybe down.\"") + +rt = RT.new(config['rt']['bin'], config['rt']['ticket_query2']) + +if 0 < rt.tickets.size + args = %w( mauvesend alert.bytemark.co.uk -o supportbot ) + args += rt.tickets.map do |ticket| + ["-i", ticket.id.to_s, + "-u", ticket.id.to_s, + "-s", ticket.subject, + "-d", ticket.content + ] + end.flatten + exec(*args) +else + args = %w( mauvesend alert.bytemark.co.uk --id supportbot -o supportbot -p -c now ) + exec(*args) +end |