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
|