forked from kyma-project/kyma
/
reporter.go
83 lines (72 loc) · 1.64 KB
/
reporter.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
package main
import (
"fmt"
"github.com/go-logr/logr"
apiSlack "github.com/nlopes/slack"
"github.com/pkg/errors"
)
// Reporter is a reporter client for slack
type Reporter struct {
channel string
icon string
username string
slackCli apiSlack.Client
log logr.Logger
}
// NewReporter creates a new Slack reporter
func NewReporter(slackCli apiSlack.Client, channel, username, icon string) *Reporter {
return &Reporter{
channel: channel,
icon: icon,
username: username,
slackCli: slackCli,
}
}
// Report takes a message publish to given channel
func (r *Reporter) Report(msg string, premature bool) error {
var (
body apiSlack.Attachment
)
header := r.generateHeader()
if premature {
body = r.generateBody(msg, true)
} else {
body = r.generateBody(msg, false)
}
_, _, _, err := r.slackCli.SendMessage(
r.channel,
apiSlack.MsgOptionPostMessageParameters(apiSlack.PostMessageParameters{IconEmoji: ":weight_lifter", Markdown: true, Username: r.username}),
apiSlack.MsgOptionText(header, false),
apiSlack.MsgOptionAttachments(body),
)
if err != nil {
return errors.Wrap(err, "while sending slack message")
}
return nil
}
func (r *Reporter) generateBody(msg string, premature bool) apiSlack.Attachment {
var (
blue = "#007FFF"
red = "#FF0022"
color string
)
if premature {
color = red
} else {
color = blue
}
body := apiSlack.Attachment{
Color: color,
Fields: []apiSlack.AttachmentField{
{
Title: "Horizontal Pod Autoscaler Job Details",
Value: msg,
Short: true,
},
},
}
return body
}
func (r *Reporter) generateHeader() string {
return fmt.Sprintf("*Load test job*")
}