-
Notifications
You must be signed in to change notification settings - Fork 495
/
slack.go
181 lines (151 loc) · 5.02 KB
/
slack.go
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
// Package slack is for creating slack notifications inside of Bosun templates
package slack
import "bosun.org/models"
// NewAttachment returns a Attachment structure with the color
// and Timestamp set from the IncidentState.
func NewAttachment(m *models.IncidentState) *Attachment {
a := new(Attachment)
a.Color = StatusColor(m.CurrentStatus)
a.Ts = m.LastAbnormalTime.Unix()
return a
}
// StatusColor returns a color string that corresponds to Slack's colors
// based on the Status.
func StatusColor(status models.Status) string {
switch status {
case models.StNormal:
return "good"
case models.StWarning:
return "warning"
case models.StCritical:
return "danger"
case models.StUnknown:
return "#439FE0"
}
return ""
}
// Attachment contains all the information for a slack message attachment and
// has methods to Set/Append fields.
type Attachment struct {
Color string `json:"color,omitempty"`
Fallback string `json:"fallback"`
AuthorID string `json:"author_id,omitempty"`
AuthorName string `json:"author_name,omitempty"`
AuthorSubname string `json:"author_subname,omitempty"`
AuthorLink string `json:"author_link,omitempty"`
AuthorIcon string `json:"author_icon,omitempty"`
Title string `json:"title,omitempty"`
TitleLink string `json:"title_link,omitempty"`
Pretext string `json:"pretext,omitempty"`
Text string `json:"text"`
ImageURL string `json:"image_url,omitempty"`
ThumbURL string `json:"thumb_url,omitempty"`
Fields []interface{} `json:"fields,omitempty"`
Actions []interface{} `json:"actions,omitempty"`
Footer string `json:"footer,omitempty"`
FooterIcon string `json:"footer_icon,omitempty"`
Ts int64 `json:"ts,omitempty"`
}
// Field is a structure for what slack expects as an item in the Fields slice of an Attachment.
type Field struct {
Title string `json:"title"`
Value interface{} `json:"value"`
Short bool `json:"short"`
}
// Action is a struture for what slack expects as an item in the Actions slice of an Attachment.
type Action struct {
Type string `json:"type"`
Text string `json:"text"`
URL string `json:"url"`
Style string `json:"style,omitempty"`
}
// AddActions appends an Action to the Actions field of the Attachment.
func (a *Attachment) AddActions(action ...interface{}) interface{} {
a.Actions = append(a.Actions, action...)
return "" // have to return something
}
// AddFields appends a Field to the Fields field of the Attachment.
func (a *Attachment) AddFields(field ...interface{}) interface{} {
a.Fields = append(a.Fields, field...)
return "" // have to return something
}
// SetColor appends an Action to the Actions field of the Attachment.
func (a *Attachment) SetColor(color string) interface{} {
a.Color = color
return ""
}
// SetFallback sets the FallBack field of the Attachment.
func (a *Attachment) SetFallback(fallback string) interface{} {
a.Fallback = fallback
return ""
}
// SetAuthorID sets the AuthorID field of the Attachment.
func (a *Attachment) SetAuthorID(authorID string) interface{} {
a.AuthorID = authorID
return ""
}
// SetAuthorName sets the AuthorName field of the Attachment.
func (a *Attachment) SetAuthorName(authorName string) interface{} {
a.AuthorName = authorName
return ""
}
// SetAuthorSubname sets the AuthorSubname field of the Attachment.
func (a *Attachment) SetAuthorSubname(authorSubname string) interface{} {
a.AuthorSubname = authorSubname
return ""
}
// SetAuthorLink sets the AuthorLink field of the Attachment.
func (a *Attachment) SetAuthorLink(authorLink string) interface{} {
a.AuthorLink = authorLink
return ""
}
// SetAuthorIcon sets the AuthorIcon field of the Attachment.
func (a *Attachment) SetAuthorIcon(authorIcon string) interface{} {
a.AuthorIcon = authorIcon
return ""
}
// SetTitle sets the Title field of the Attachment.
func (a *Attachment) SetTitle(title string) interface{} {
a.Title = title
return ""
}
// SetTitleLink sets the TitleLink field of the Attachment.
func (a *Attachment) SetTitleLink(titleLink string) interface{} {
a.TitleLink = titleLink
return ""
}
// SetPretext sets the Pretext field of the Attachment.
func (a *Attachment) SetPretext(pretext string) interface{} {
a.Pretext = pretext
return ""
}
// SetText sets the Text field of the Attachment.
func (a *Attachment) SetText(text string) interface{} {
a.Text = text
return ""
}
// SetImageURL sets the ImageURL field of the Attachment.
func (a *Attachment) SetImageURL(url string) interface{} {
a.ImageURL = url
return ""
}
// SetThumbURL sets the ThumbURL field of the Attachment.
func (a *Attachment) SetThumbURL(url string) interface{} {
a.ThumbURL = url
return ""
}
// SetFooter sets the Footer field of the Attachment.
func (a *Attachment) SetFooter(footer string) interface{} {
a.Footer = footer
return ""
}
// SetFooterIcon sets the FooterIcon field of the Attachment.
func (a *Attachment) SetFooterIcon(footerIcon string) interface{} {
a.FooterIcon = footerIcon
return ""
}
// SetTs sets the Ts field of the Attachment.
func (a *Attachment) SetTs(ts int64) interface{} {
a.Ts = ts
return ""
}