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
74
75
76
77
78
79
80
81
|
# File 'lib/error_radar/notifications/slack.rb', line 34
def self.build_payload(log, event)
spike_data = log.instance_variable_get(:@spike_data)
app = ErrorRadar::Notifier.app_name
link = ErrorRadar::Notifier.error_url(log)
channel = ErrorRadar.config.slack_channel
emoji, title = case event
when :spike
[':warning:', "Spike — #{spike_data[:count]} hits in #{spike_data[:window_minutes]} min: *#{log.error_class}*"]
when :new_error
[SEV_EMOJI[log.severity] || ':white_circle:', "New error: *#{log.error_class}*"]
else
[SEV_EMOJI[log.severity] || ':white_circle:', "#{log.severity.capitalize} error: *#{log.error_class}*"]
end
blocks = [
{ type: 'section', text: { type: 'mrkdwn', text: "#{emoji} *[#{app}]* #{title}" } },
{
type: 'section',
fields: [
{ type: 'mrkdwn', text: "*Source*\n#{(log.source || 'unknown').truncate(80)}" },
{ type: 'mrkdwn', text: "*Category*\n#{log.category}" },
{ type: 'mrkdwn', text: "*Severity*\n#{log.severity}" },
{ type: 'mrkdwn', text: "*Total occurrences*\n#{log.occurrences}" }
]
},
{
type: 'section',
text: { type: 'mrkdwn', text: "*Message*\n```#{log.message.to_s.truncate(400)}```" }
}
]
if link
blocks << {
type: 'actions',
elements: [{
type: 'button',
text: { type: 'plain_text', text: 'View in Error Radar', emoji: true },
url: link,
style: event == :spike ? 'danger' : 'primary'
}]
}
end
payload = { blocks: blocks, text: "[#{app}] #{log.error_class}: #{log.message.to_s.truncate(200)}" }
payload[:channel] = channel if channel.to_s != ''
payload
end
|