Skip to content

Commit

Permalink
Changes based on review comments:
Browse files Browse the repository at this point in the history
1) Upgrade of sensu-plugins-go-library to version 0.2.0
2) Use of "github.com/sensu/sensu-go/api/core/v2" library instead of "github.com/sensu/sensu-go/types" to maintain consistency with sensu-go code
  • Loading branch information
sayakghosh committed May 25, 2019
1 parent 22a77ba commit 3b0d0d3
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 49 deletions.
6 changes: 3 additions & 3 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

[[constraint]]
name = "github.com/sensu/sensu-plugins-go-library"
version = "0.2.0-alpha4"
version = "0.2.0"

[[constraint]]
name = "github.com/stretchr/testify"
Expand Down
67 changes: 31 additions & 36 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package main

import (
"errors"
"fmt"
"github.com/sensu/sensu-go/types"
corev2 "github.com/sensu/sensu-go/api/core/v2"
"github.com/sensu/sensu-plugins-go-library/sensu"
"strings"

Expand All @@ -18,6 +17,13 @@ type HandlerConfig struct {
SlackIconUrl string
}

const (
webHookUrl = "webhook-url"
channel = "channel"
userName = "username"
iconUrl = "icon-url"
)

var (
config = HandlerConfig{
PluginConfig: sensu.PluginConfig{
Expand All @@ -30,36 +36,36 @@ var (

slackConfigOptions = []*sensu.PluginConfigOption{
{
Path: "webhook-url",
Path: webHookUrl,
Env: "SENSU_SLACK_WEHBOOK_URL",
Argument: "webhook-url",
Argument: webHookUrl,
Shorthand: "w",
Default: "",
Usage: "The webhook url to send messages to, defaults to value of SLACK_WEBHOOK_URL env variable",
Value: &config.SlackWebhookUrl,
},
{
Path: "channel",
Path: channel,
Env: "SENSU_SLACK_CHANNEL",
Argument: "channel",
Argument: channel,
Shorthand: "c",
Default: "#general",
Usage: "The channel to post messages to",
Value: &config.SlackChannel,
},
{
Path: "username",
Path: userName,
Env: "SENSU_SLACK_USERNAME",
Argument: "username",
Argument: userName,
Shorthand: "u",
Default: "sensu",
Usage: "The username that messages will be sent as",
Value: &config.SlackUsername,
},
{
Path: "icon-url",
Path: iconUrl,
Env: "SENSU_SLACK_ICON_URL",
Argument: "icon-url",
Argument: iconUrl,
Shorthand: "i",
Default: "http://s3-us-west-2.amazonaws.com/sensuapp.org/sensu.png",
Usage: "A URL to an image to use as the user avatar",
Expand All @@ -69,30 +75,19 @@ var (
)

func main() {
goHandler, _ := sensu.NewGoHandler(&config.PluginConfig, slackConfigOptions, checkArgs, executeHandler)
err := goHandler.Execute()
if err != nil {
fmt.Printf("Error executing plugin: %s", err)
}
goHandler := sensu.NewGoHandler(&config.PluginConfig, slackConfigOptions, checkArgs, sendMessage)
goHandler.Execute()
}

func checkArgs(_ *types.Event) error {
func checkArgs(_ *corev2.Event) error {
if len(config.SlackWebhookUrl) == 0 {
return fmt.Errorf("--webhook-url or SENSU_SLACK_WEHBOOK_URL environment variable is required")
}

return nil
}

func executeHandler(event *types.Event) error {
if err := sendMessage(event); err != nil {
return errors.New(err.Error())
return fmt.Errorf("--webhook-url or SENSU_SLACK_WEBHOOK_URL environment variable is required")
}

return nil
}

func formattedEventAction(event *types.Event) string {
func formattedEventAction(event *corev2.Event) string {
switch event.Check.Status {
case 0:
return "RESOLVED"
Expand All @@ -105,23 +100,23 @@ func chomp(s string) string {
return strings.Trim(strings.Trim(strings.Trim(s, "\n"), "\r"), "\r\n")
}

func eventKey(event *types.Event) string {
func eventKey(event *corev2.Event) string {
return fmt.Sprintf("%s/%s", event.Entity.Name, event.Check.Name)
}

func eventSummary(event *types.Event, maxLength int) string {
func eventSummary(event *corev2.Event, maxLength int) string {
output := chomp(event.Check.Output)
if len(event.Check.Output) > maxLength {
output = output[0:maxLength] + "..."
}
return fmt.Sprintf("%s:%s", eventKey(event), output)
}

func formattedMessage(event *types.Event) string {
func formattedMessage(event *corev2.Event) string {
return fmt.Sprintf("%s - %s", formattedEventAction(event), eventSummary(event, 100))
}

func messageColor(event *types.Event) string {
func messageColor(event *corev2.Event) string {
switch event.Check.Status {
case 0:
return "good"
Expand All @@ -132,7 +127,7 @@ func messageColor(event *types.Event) string {
}
}

func messageStatus(event *types.Event) string {
func messageStatus(event *corev2.Event) string {
switch event.Check.Status {
case 0:
return "Resolved"
Expand All @@ -143,24 +138,24 @@ func messageStatus(event *types.Event) string {
}
}

func messageAttachment(event *types.Event) *slack.Attachment {
func messageAttachment(event *corev2.Event) *slack.Attachment {
attachment := &slack.Attachment{
Title: "Description",
Text: event.Check.Output,
Fallback: formattedMessage(event),
Color: messageColor(event),
Fields: []*slack.AttachmentField{
&slack.AttachmentField{
{
Title: "Status",
Value: messageStatus(event),
Short: false,
},
&slack.AttachmentField{
{
Title: "Entity",
Value: event.Entity.Name,
Short: true,
},
&slack.AttachmentField{
{
Title: "Check",
Value: event.Check.Name,
Short: true,
Expand All @@ -170,7 +165,7 @@ func messageAttachment(event *types.Event) *slack.Attachment {
return attachment
}

func sendMessage(event *types.Event) error {
func sendMessage(event *corev2.Event) error {
hook := slack.NewWebHook(config.SlackWebhookUrl)
return hook.PostMessage(&slack.WebHookPostPayload{
Attachments: []*slack.Attachment{messageAttachment(event)},
Expand Down
18 changes: 9 additions & 9 deletions main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import (
"os"
"testing"

"github.com/sensu/sensu-go/types"
corev2 "github.com/sensu/sensu-go/api/core/v2"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestFormattedEventAction(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")

action := formattedEventAction(event)
assert.Equal("RESOLVED", action)
Expand Down Expand Up @@ -43,14 +43,14 @@ func TestChomp(t *testing.T) {

func TestEventKey(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")
eventKey := eventKey(event)
assert.Equal("entity1/check1", eventKey)
}

func TestEventSummary(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")
event.Check.Output = "disk is full"

eventKey := eventSummary(event, 100)
Expand All @@ -62,7 +62,7 @@ func TestEventSummary(t *testing.T) {

func TestFormattedMessage(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")
event.Check.Output = "disk is full"
event.Check.Status = 1
formattedMsg := formattedMessage(event)
Expand All @@ -71,7 +71,7 @@ func TestFormattedMessage(t *testing.T) {

func TestMessageColor(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")

event.Check.Status = 0
color := messageColor(event)
Expand All @@ -88,7 +88,7 @@ func TestMessageColor(t *testing.T) {

func TestMessageStatus(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")

event.Check.Status = 0
status := messageStatus(event)
Expand All @@ -105,7 +105,7 @@ func TestMessageStatus(t *testing.T) {

func TestSendMessage(t *testing.T) {
assert := assert.New(t)
event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")

var apiStub = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, _ := ioutil.ReadAll(r.Body)
Expand All @@ -129,7 +129,7 @@ func TestMain(t *testing.T) {
_ = os.Remove(file.Name())
}()

event := types.FixtureEvent("entity1", "check1")
event := corev2.FixtureEvent("entity1", "check1")
eventJSON, _ := json.Marshal(event)
_, err := file.WriteString(string(eventJSON))
require.NoError(t, err)
Expand Down

0 comments on commit 3b0d0d3

Please sign in to comment.