aboutsummaryrefslogtreecommitdiff
path: root/utils/supportbot-mauve
blob: 614c5f5ecf531b350508e277c8499a15ab14bc8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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