Skip to content

Commit

Permalink
Merge pull request #106 from rusenask/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
rusenask committed Oct 7, 2017
2 parents 8b07db1 + b08b8b9 commit c9b656f
Show file tree
Hide file tree
Showing 1,532 changed files with 31,953 additions and 239,810 deletions.
3 changes: 2 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ jobs:
steps:
- checkout

# specify any bash command here prefixed with `run: `
# specify any bash command here prefixed with `run: `
- run: make build
- run: make test
3 changes: 3 additions & 0 deletions constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ const (
EnvSlackBotName = "SLACK_BOT_NAME"
EnvSlackChannels = "SLACK_CHANNELS"
)

// EnvNotificationLevel - minimum level for notifications, defaults to info
const EnvNotificationLevel = "NOTIFICATION_LEVEL"
6 changes: 6 additions & 0 deletions extension/notification/notification.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ var (
// notifiers.
type Config struct {
Attempts int
Level types.Level
Params map[string]interface{} `yaml:",inline"`
}

Expand Down Expand Up @@ -76,6 +77,7 @@ func RegisterSender(name string, s Sender) {
type DefaultNotificationSender struct {
config *Config
stopper *stopper.Stopper
level types.Level
}

// New - create new sender
Expand Down Expand Up @@ -118,6 +120,10 @@ func (m *DefaultNotificationSender) Senders() map[string]Sender {

// Send - send notifications through all configured senders
func (m *DefaultNotificationSender) Send(event types.EventNotification) error {
if event.Level < m.config.Level {
return nil
}

sendersM.RLock()
defer sendersM.RUnlock()

Expand Down
129 changes: 129 additions & 0 deletions extension/notification/notification_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package notification

import (
"context"
"fmt"
"testing"

"github.com/rusenask/keel/types"
)

type fakeSender struct {
sent *types.EventNotification

shouldConfigure bool
shouldError error
}

func (s *fakeSender) Configure(*Config) (bool, error) {
return s.shouldConfigure, nil
}

func (s *fakeSender) Send(event types.EventNotification) error {
s.sent = &event
fmt.Println("sending event")
return s.shouldError
}

func TestSend(t *testing.T) {
sndr := New(context.Background())

sndr.Configure(&Config{
Level: types.LevelDebug,
Attempts: 1,
})

fs := &fakeSender{
shouldConfigure: true,
shouldError: nil,
}

RegisterSender("fakeSender", fs)
defer sndr.UnregisterSender("fakeSender")

err := sndr.Send(types.EventNotification{
Level: types.LevelInfo,
Type: types.NotificationPreDeploymentUpdate,
Message: "foo",
})

if err != nil {
t.Errorf("unexpected error: %s", err)
}

if fs.sent.Message != "foo" {
t.Errorf("unexpected notification message: %s", fs.sent.Message)
}

if fs.sent.Level != types.LevelInfo {
t.Errorf("unexpected level: %s", fs.sent.Level)
}
}

// test when configured level is higher than the event
func TestSendLevelNotificationA(t *testing.T) {
sndr := New(context.Background())

sndr.Configure(&Config{
Level: types.LevelInfo,
Attempts: 1,
})

fs := &fakeSender{
shouldConfigure: true,
shouldError: nil,
}

RegisterSender("fakeSender", fs)
defer sndr.UnregisterSender("fakeSender")

err := sndr.Send(types.EventNotification{
Level: types.LevelDebug,
Type: types.NotificationPreDeploymentUpdate,
Message: "foo",
})

if err != nil {
t.Errorf("unexpected error: %s", err)
}

if fs.sent != nil {
t.Errorf("didn't expect to find sent even for this level")
}
}

// event level is higher than the configured
func TestSendLevelNotificationB(t *testing.T) {
sndr := New(context.Background())

sndr.Configure(&Config{
Level: types.LevelInfo,
Attempts: 1,
})

fs := &fakeSender{
shouldConfigure: true,
shouldError: nil,
}

RegisterSender("fakeSender", fs)
defer sndr.UnregisterSender("fakeSender")

err := sndr.Send(types.EventNotification{
Level: types.LevelSuccess,
Type: types.NotificationPreDeploymentUpdate,
Message: "foo",
})

if err != nil {
t.Errorf("unexpected error: %s", err)
}

if fs.sent.Message != "foo" {
t.Errorf("unexpected notification message: %s", fs.sent.Message)
}

if fs.sent.Level != types.LevelSuccess {
t.Errorf("unexpected level: %s", fs.sent.Level)
}
}
2 changes: 1 addition & 1 deletion extension/notification/webhook/webhook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func TestWebhookRequest(t *testing.T) {
t.Errorf("missing deployment type")
}

if !strings.Contains(bodyStr, "LevelDebug") {
if !strings.Contains(bodyStr, "debug") {
t.Errorf("missing level")
}

Expand Down
25 changes: 11 additions & 14 deletions glide.lock

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

11 changes: 3 additions & 8 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,16 @@ import:
# subpackages:
# - pubsub
- package: cloud.google.com/go
version: b4e9a381a01e953e880e6d2cf7fd02d412977cae
version: ^0.11.0
subpackages:
- pubsub
- iam
- internal
- package: github.com/Masterminds/semver
version: ^1.3.1
- package: github.com/sirupsen/logrus
version: master
- package: github.com/Sirupsen/logrus
repo: https://github.com/sirupsen/logrus.git
vcs: git
version: master
- package: github.com/docker/distribution
version: ^2.6.2
# version: 5db89f0ca68677abc5eefce8f2a0a772c98ba52d
subpackages:
- digest
- reference
Expand All @@ -32,7 +27,7 @@ import:
- package: github.com/rusenask/cron
version: v1.1.0
- package: github.com/rusenask/docker-registry-client
version: ^0.1.0
version: ^0.1.2
subpackages:
- registry
- package: github.com/urfave/negroni
Expand Down
13 changes: 13 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,21 @@ func main() {
ctx, cancel := netContext.WithCancel(context.Background())
defer cancel()

notificationLevel := types.LevelInfo
if os.Getenv(constants.EnvNotificationLevel) != "" {
parsedLevel, err := types.ParseLevel(os.Getenv(constants.EnvNotificationLevel))
if err != nil {
log.WithFields(log.Fields{
"error": err,
}).Errorf("main: got error while parsing notification level, defaulting to: %s", notificationLevel)
} else {
notificationLevel = parsedLevel
}
}

notifCfg := &notification.Config{
Attempts: 10,
Level: notificationLevel,
}
sender := notification.New(ctx)

Expand Down
Loading

0 comments on commit c9b656f

Please sign in to comment.