mirror of
https://github.com/valitydev/botkube.git
synced 2024-11-06 08:25:19 +00:00
##### ISSUE TYPE - Refactor Pull Request (#262) ##### SUMMARY Refactor logging package to make log statements simpler. Current format logging.Logger.Info() doesn't look good. We can embed Logrus into pkg/log to import and use it as log.Info() Fixes # - Embed Logrus into pkg/log - Update the reference to new log package - Change the reference everywhere form `logging.Logger.Function() --> log.Function()`
This commit is contained in:
parent
3f9d8886b1
commit
fc0e324055
@ -26,7 +26,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/bot"
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/controller"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/infracloudio/botkube/pkg/metrics"
|
||||
"github.com/infracloudio/botkube/pkg/notify"
|
||||
"github.com/infracloudio/botkube/pkg/utils"
|
||||
@ -37,20 +37,20 @@ const (
|
||||
)
|
||||
|
||||
func main() {
|
||||
log.Logger.Info("Starting controller")
|
||||
log.Info("Starting controller")
|
||||
conf, err := config.New()
|
||||
if err != nil {
|
||||
log.Logger.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
log.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
}
|
||||
|
||||
if conf.Communications.Slack.Enabled {
|
||||
log.Logger.Info("Starting slack bot")
|
||||
log.Info("Starting slack bot")
|
||||
sb := bot.NewSlackBot(conf)
|
||||
go sb.Start()
|
||||
}
|
||||
|
||||
if conf.Communications.Mattermost.Enabled {
|
||||
log.Logger.Info("Starting mattermost bot")
|
||||
log.Info("Starting mattermost bot")
|
||||
mb := bot.NewMattermostBot(conf)
|
||||
go mb.Start()
|
||||
}
|
||||
@ -65,7 +65,7 @@ func main() {
|
||||
notifiers := listNotifiers(conf)
|
||||
// Start upgrade notifier
|
||||
if conf.Settings.UpgradeNotifier {
|
||||
log.Logger.Info("Starting upgrade notifier")
|
||||
log.Info("Starting upgrade notifier")
|
||||
go controller.UpgradeNotifier(conf, notifiers)
|
||||
}
|
||||
|
||||
@ -84,14 +84,14 @@ func listNotifiers(conf *config.Config) []notify.Notifier {
|
||||
if notifier, err := notify.NewMattermost(conf); err == nil {
|
||||
notifiers = append(notifiers, notifier)
|
||||
} else {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to create Mattermost client. Error: %v", err))
|
||||
log.Error(fmt.Sprintf("Failed to create Mattermost client. Error: %v", err))
|
||||
}
|
||||
}
|
||||
if conf.Communications.ElasticSearch.Enabled {
|
||||
if els, err := notify.NewElasticSearch(conf); err == nil {
|
||||
notifiers = append(notifiers, els)
|
||||
} else {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to create els client. Error: %v", err))
|
||||
log.Error(fmt.Sprintf("Failed to create els client. Error: %v", err))
|
||||
}
|
||||
}
|
||||
if conf.Communications.Webhook.Enabled {
|
||||
|
@ -25,7 +25,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/execute"
|
||||
"github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/mattermost/mattermost-server/model"
|
||||
)
|
||||
|
||||
@ -93,7 +93,7 @@ func (b *MMBot) Start() {
|
||||
// Check if Mattermost URL is valid
|
||||
checkURL, err := url.Parse(b.ServerURL)
|
||||
if err != nil {
|
||||
logging.Logger.Errorf("The Mattermost URL entered is incorrect. URL: %s. Error: %s", b.ServerURL, err.Error())
|
||||
log.Errorf("The Mattermost URL entered is incorrect. URL: %s. Error: %s", b.ServerURL, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ func (b *MMBot) Start() {
|
||||
// Check connection to Mattermost server
|
||||
err = b.checkServerConnection()
|
||||
if err != nil {
|
||||
logging.Logger.Fatalf("There was a problem pinging the Mattermost server URL %s. %s", b.ServerURL, err.Error())
|
||||
log.Fatalf("There was a problem pinging the Mattermost server URL %s. %s", b.ServerURL, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
@ -114,12 +114,12 @@ func (b *MMBot) Start() {
|
||||
// It is obeserved that Mattermost server closes connections unexpectedly after some time.
|
||||
// For now, we are adding retry logic to reconnect to the server
|
||||
// https://github.com/infracloudio/botkube/issues/201
|
||||
logging.Logger.Info("BotKube connected to Mattermost!")
|
||||
log.Info("BotKube connected to Mattermost!")
|
||||
for {
|
||||
var appErr *model.AppError
|
||||
b.WSClient, appErr = model.NewWebSocketClient4(b.WebSocketURL, b.APIClient.AuthToken)
|
||||
if appErr != nil {
|
||||
logging.Logger.Errorf("Error creating WebSocket for Mattermost connectivity. %v", appErr)
|
||||
log.Errorf("Error creating WebSocket for Mattermost connectivity. %v", appErr)
|
||||
return
|
||||
}
|
||||
b.listen()
|
||||
@ -144,7 +144,7 @@ func (mm *mattermostMessage) handleMessage(b MMBot) {
|
||||
if mm.Event.Broadcast.ChannelId == b.getChannel().Id {
|
||||
mm.IsAuthChannel = true
|
||||
}
|
||||
logging.Logger.Debugf("Received mattermost event: %+v", mm.Event.Data)
|
||||
log.Debugf("Received mattermost event: %+v", mm.Event.Data)
|
||||
|
||||
// Trim the @BotKube prefix if exists
|
||||
mm.Request = strings.TrimPrefix(post.Message, "@"+BotName+" ")
|
||||
@ -162,11 +162,11 @@ func (mm mattermostMessage) sendMessage() {
|
||||
if len(mm.Response) >= 3990 {
|
||||
res, resp := mm.APIClient.UploadFileAsRequestBody([]byte(mm.Response), mm.Event.Broadcast.ChannelId, mm.Request)
|
||||
if resp.Error != nil {
|
||||
logging.Logger.Error("Error occured while uploading file. Error: ", resp.Error)
|
||||
log.Error("Error occured while uploading file. Error: ", resp.Error)
|
||||
}
|
||||
post.FileIds = []string{string(res.FileInfos[0].Id)}
|
||||
} else if len(mm.Response) == 0 {
|
||||
logging.Logger.Info("Invalid request. Dumping the response")
|
||||
log.Info("Invalid request. Dumping the response")
|
||||
return
|
||||
} else {
|
||||
post.Message = "```\n" + mm.Response + "\n```"
|
||||
@ -174,7 +174,7 @@ func (mm mattermostMessage) sendMessage() {
|
||||
|
||||
// Create a post in the Channel
|
||||
if _, resp := mm.APIClient.CreatePost(post); resp.Error != nil {
|
||||
logging.Logger.Error("Failed to send message. Error: ", resp.Error)
|
||||
log.Error("Failed to send message. Error: ", resp.Error)
|
||||
}
|
||||
}
|
||||
|
||||
@ -197,7 +197,7 @@ func (b MMBot) checkServerConnection() error {
|
||||
func (b MMBot) getTeam() *model.Team {
|
||||
botTeam, resp := b.APIClient.GetTeamByName(b.TeamName, "")
|
||||
if resp.Error != nil {
|
||||
logging.Logger.Fatalf("There was a problem finding Mattermost team %s. %s", b.TeamName, resp.Error)
|
||||
log.Fatalf("There was a problem finding Mattermost team %s. %s", b.TeamName, resp.Error)
|
||||
}
|
||||
return botTeam
|
||||
}
|
||||
@ -206,7 +206,7 @@ func (b MMBot) getTeam() *model.Team {
|
||||
func (b MMBot) getUser() *model.User {
|
||||
users, resp := b.APIClient.AutocompleteUsersInTeam(b.getTeam().Id, BotName, 1, "")
|
||||
if resp.Error != nil {
|
||||
logging.Logger.Fatalf("There was a problem finding Mattermost user %s. %s", BotName, resp.Error)
|
||||
log.Fatalf("There was a problem finding Mattermost user %s. %s", BotName, resp.Error)
|
||||
}
|
||||
return users.Users[0]
|
||||
}
|
||||
@ -216,7 +216,7 @@ func (b MMBot) getChannel() *model.Channel {
|
||||
// Checking if channel exists
|
||||
botChannel, resp := b.APIClient.GetChannelByName(b.ChannelName, b.getTeam().Id, "")
|
||||
if resp.Error != nil {
|
||||
logging.Logger.Fatalf("There was a problem finding Mattermost channel %s. %s", b.ChannelName, resp.Error)
|
||||
log.Fatalf("There was a problem finding Mattermost channel %s. %s", b.ChannelName, resp.Error)
|
||||
}
|
||||
|
||||
// Adding Botkube user to channel
|
||||
@ -229,7 +229,7 @@ func (b MMBot) listen() {
|
||||
defer b.WSClient.Close()
|
||||
for {
|
||||
if b.WSClient.ListenError != nil {
|
||||
logging.Logger.Debugf("Mattermost websocket listen error %s. Reconnecting...", b.WSClient.ListenError)
|
||||
log.Debugf("Mattermost websocket listen error %s. Reconnecting...", b.WSClient.ListenError)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/execute"
|
||||
"github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/nlopes/slack"
|
||||
)
|
||||
|
||||
@ -73,7 +73,7 @@ func (b *SlackBot) Start() {
|
||||
} else {
|
||||
authResp, err := api.AuthTest()
|
||||
if err != nil {
|
||||
logging.Logger.Fatal(err)
|
||||
log.Fatal(err)
|
||||
}
|
||||
botID = authResp.UserID
|
||||
}
|
||||
@ -84,7 +84,7 @@ func (b *SlackBot) Start() {
|
||||
for msg := range RTM.IncomingEvents {
|
||||
switch ev := msg.Data.(type) {
|
||||
case *slack.ConnectedEvent:
|
||||
logging.Logger.Info("BotKube connected to Slack!")
|
||||
log.Info("BotKube connected to Slack!")
|
||||
|
||||
case *slack.MessageEvent:
|
||||
// Skip if message posted by BotKube
|
||||
@ -100,25 +100,25 @@ func (b *SlackBot) Start() {
|
||||
sm.HandleMessage(b)
|
||||
|
||||
case *slack.RTMError:
|
||||
logging.Logger.Errorf("Slack RMT error: %+v", ev.Error())
|
||||
log.Errorf("Slack RMT error: %+v", ev.Error())
|
||||
|
||||
case *slack.ConnectionErrorEvent:
|
||||
logging.Logger.Errorf("Slack connection error: %+v", ev.Error())
|
||||
log.Errorf("Slack connection error: %+v", ev.Error())
|
||||
|
||||
case *slack.IncomingEventError:
|
||||
logging.Logger.Errorf("Slack incoming event error: %+v", ev.Error())
|
||||
log.Errorf("Slack incoming event error: %+v", ev.Error())
|
||||
|
||||
case *slack.OutgoingErrorEvent:
|
||||
logging.Logger.Errorf("Slack outgoing event error: %+v", ev.Error())
|
||||
log.Errorf("Slack outgoing event error: %+v", ev.Error())
|
||||
|
||||
case *slack.UnmarshallingErrorEvent:
|
||||
logging.Logger.Errorf("Slack unmarshalling error: %+v", ev.Error())
|
||||
log.Errorf("Slack unmarshalling error: %+v", ev.Error())
|
||||
|
||||
case *slack.RateLimitedError:
|
||||
logging.Logger.Errorf("Slack rate limiting error: %+v", ev.Error())
|
||||
log.Errorf("Slack rate limiting error: %+v", ev.Error())
|
||||
|
||||
case *slack.InvalidAuthEvent:
|
||||
logging.Logger.Error("Invalid Credentials")
|
||||
log.Error("Invalid Credentials")
|
||||
return
|
||||
|
||||
default:
|
||||
@ -127,7 +127,7 @@ func (b *SlackBot) Start() {
|
||||
}
|
||||
|
||||
func (sm *slackMessage) HandleMessage(b *SlackBot) {
|
||||
logging.Logger.Debugf("Slack incoming message: %+v", sm.Event)
|
||||
log.Debugf("Slack incoming message: %+v", sm.Event)
|
||||
|
||||
// Check if message posted in authenticated channel
|
||||
info, err := sm.SlackClient.GetConversationInfo(sm.Event.Channel, true)
|
||||
@ -171,15 +171,15 @@ func (sm slackMessage) Send() {
|
||||
}
|
||||
_, err := sm.RTM.UploadFile(params)
|
||||
if err != nil {
|
||||
logging.Logger.Error("Error in uploading file:", err)
|
||||
log.Error("Error in uploading file:", err)
|
||||
}
|
||||
return
|
||||
} else if len(sm.Response) == 0 {
|
||||
logging.Logger.Info("Invalid request. Dumping the response")
|
||||
log.Info("Invalid request. Dumping the response")
|
||||
return
|
||||
}
|
||||
|
||||
if _, _, err := sm.RTM.PostMessage(sm.Event.Channel, slack.MsgOptionText("```"+sm.Response+"```", false), slack.MsgOptionAsUser(true)); err != nil {
|
||||
logging.Logger.Error("Error in sending message:", err)
|
||||
log.Error("Error in sending message:", err)
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ import (
|
||||
|
||||
// Register filters
|
||||
_ "github.com/infracloudio/botkube/pkg/filterengine/filters"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/infracloudio/botkube/pkg/notify"
|
||||
"github.com/infracloudio/botkube/pkg/utils"
|
||||
|
||||
@ -63,25 +63,25 @@ func RegisterInformers(c *config.Config, notifiers []notify.Notifier) {
|
||||
|
||||
// Register informers for resource lifecycle events
|
||||
if len(c.Resources) > 0 {
|
||||
log.Logger.Info("Registering resource lifecycle informer")
|
||||
log.Info("Registering resource lifecycle informer")
|
||||
for _, r := range c.Resources {
|
||||
if _, ok := utils.ResourceInformerMap[r.Name]; !ok {
|
||||
continue
|
||||
}
|
||||
log.Logger.Infof("Adding informer for resource:%s", r.Name)
|
||||
log.Infof("Adding informer for resource:%s", r.Name)
|
||||
utils.ResourceInformerMap[r.Name].AddEventHandler(registerEventHandlers(c, notifiers, r.Name, r.Events))
|
||||
}
|
||||
}
|
||||
|
||||
// Register informers for k8s events
|
||||
log.Logger.Infof("Registering kubernetes events informer for types: %+v", config.WarningEvent.String())
|
||||
log.Logger.Infof("Registering kubernetes events informer for types: %+v", config.NormalEvent.String())
|
||||
log.Infof("Registering kubernetes events informer for types: %+v", config.WarningEvent.String())
|
||||
log.Infof("Registering kubernetes events informer for types: %+v", config.NormalEvent.String())
|
||||
|
||||
utils.KubeInformerFactory.Core().V1().Events().Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
_, err := cache.MetaNamespaceKeyFunc(obj)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Failed to get MetaNamespaceKey from event resource")
|
||||
log.Errorf("Failed to get MetaNamespaceKey from event resource")
|
||||
return
|
||||
}
|
||||
eventObj, ok := obj.(*coreV1.Event)
|
||||
@ -119,21 +119,21 @@ func registerEventHandlers(c *config.Config, notifiers []notify.Notifier, resour
|
||||
for _, event := range events {
|
||||
if event == config.AllEvent || event == config.CreateEvent {
|
||||
handlerFns.AddFunc = func(obj interface{}) {
|
||||
log.Logger.Debugf("Processing add to %v", resourceType)
|
||||
log.Debugf("Processing add to %v", resourceType)
|
||||
sendEvent(obj, nil, c, notifiers, resourceType, config.CreateEvent)
|
||||
}
|
||||
}
|
||||
|
||||
if event == config.AllEvent || event == config.UpdateEvent {
|
||||
handlerFns.UpdateFunc = func(old, new interface{}) {
|
||||
log.Logger.Debugf("Processing update to %v\n Object: %+v\n", resourceType, new)
|
||||
log.Debugf("Processing update to %v\n Object: %+v\n", resourceType, new)
|
||||
sendEvent(new, old, c, notifiers, resourceType, config.UpdateEvent)
|
||||
}
|
||||
}
|
||||
|
||||
if event == config.AllEvent || event == config.DeleteEvent {
|
||||
handlerFns.DeleteFunc = func(obj interface{}) {
|
||||
log.Logger.Debugf("Processing delete to %v", resourceType)
|
||||
log.Debugf("Processing delete to %v", resourceType)
|
||||
sendEvent(obj, nil, c, notifiers, resourceType, config.DeleteEvent)
|
||||
}
|
||||
}
|
||||
@ -150,22 +150,22 @@ func sendEvent(obj, oldObj interface{}, c *config.Config, notifiers []notify.Not
|
||||
// Skip if ErrorEvent is not configured for the resource
|
||||
if !utils.AllowedEventKindsMap[utils.EventKind{Resource: kind, Namespace: "all", EventType: config.ErrorEvent}] &&
|
||||
!utils.AllowedEventKindsMap[utils.EventKind{Resource: kind, Namespace: objectMeta.Namespace, EventType: config.ErrorEvent}] {
|
||||
log.Logger.Debugf("Ignoring %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
log.Debugf("Ignoring %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
return
|
||||
}
|
||||
default:
|
||||
if !utils.AllowedEventKindsMap[utils.EventKind{Resource: kind, Namespace: "all", EventType: eventType}] &&
|
||||
!utils.AllowedEventKindsMap[utils.EventKind{Resource: kind, Namespace: objectMeta.Namespace, EventType: eventType}] {
|
||||
log.Logger.Debugf("Ignoring %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
log.Debugf("Ignoring %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
log.Logger.Debugf("Processing %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
log.Debugf("Processing %s to %s/%v in %s namespaces", eventType, kind, objectMeta.Name, objectMeta.Namespace)
|
||||
|
||||
// Check if Notify disabled
|
||||
if !config.Notify {
|
||||
log.Logger.Debug("Skipping notification")
|
||||
log.Debug("Skipping notification")
|
||||
return
|
||||
}
|
||||
|
||||
@ -175,7 +175,7 @@ func sendEvent(obj, oldObj interface{}, c *config.Config, notifiers []notify.Not
|
||||
// Skip older events
|
||||
if !event.TimeStamp.IsZero() {
|
||||
if event.TimeStamp.Before(startTime) {
|
||||
log.Logger.Debug("Skipping older events")
|
||||
log.Debug("Skipping older events")
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -200,7 +200,7 @@ func sendEvent(obj, oldObj interface{}, c *config.Config, notifiers []notify.Not
|
||||
}
|
||||
} else {
|
||||
// skipping least significant update
|
||||
log.Logger.Debug("skipping least significant Update event")
|
||||
log.Debug("skipping least significant Update event")
|
||||
event.Skip = true
|
||||
}
|
||||
}
|
||||
@ -208,25 +208,25 @@ func sendEvent(obj, oldObj interface{}, c *config.Config, notifiers []notify.Not
|
||||
// Filter events
|
||||
event = filterengine.DefaultFilterEngine.Run(obj, event)
|
||||
if event.Skip {
|
||||
log.Logger.Debugf("Skipping event: %#v", event)
|
||||
log.Debugf("Skipping event: %#v", event)
|
||||
return
|
||||
}
|
||||
|
||||
// Skip unpromoted insignificant InfoEvents
|
||||
if event.Type == config.InfoEvent {
|
||||
log.Logger.Debugf("Skipping Insignificant InfoEvent: %#v", event)
|
||||
log.Debugf("Skipping Insignificant InfoEvent: %#v", event)
|
||||
return
|
||||
}
|
||||
|
||||
if len(event.Kind) <= 0 {
|
||||
log.Logger.Warn("sendEvent received event with Kind nil. Hence skipping.")
|
||||
log.Warn("sendEvent received event with Kind nil. Hence skipping.")
|
||||
return
|
||||
}
|
||||
|
||||
// check if Recommendations are disabled
|
||||
if !c.Recommendations {
|
||||
event.Recommendations = nil
|
||||
log.Logger.Debug("Skipping Recommendations in Event Notifications")
|
||||
log.Debug("Skipping Recommendations in Event Notifications")
|
||||
}
|
||||
|
||||
// Send event over notifiers
|
||||
@ -237,7 +237,7 @@ func sendEvent(obj, oldObj interface{}, c *config.Config, notifiers []notify.Not
|
||||
|
||||
func sendMessage(c *config.Config, notifiers []notify.Notifier, msg string) {
|
||||
if len(msg) <= 0 {
|
||||
log.Logger.Warn("sendMessage received string with length 0. Hence skipping.")
|
||||
log.Warn("sendMessage received string with length 0. Hence skipping.")
|
||||
return
|
||||
}
|
||||
|
||||
@ -253,7 +253,7 @@ func configWatcher(c *config.Config, notifiers []notify.Notifier) {
|
||||
|
||||
watcher, err := fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
log.Logger.Fatal("Failed to create file watcher ", err)
|
||||
log.Fatal("Failed to create file watcher ", err)
|
||||
}
|
||||
defer watcher.Close()
|
||||
|
||||
@ -263,24 +263,24 @@ func configWatcher(c *config.Config, notifiers []notify.Notifier) {
|
||||
select {
|
||||
case _, ok := <-watcher.Events:
|
||||
if !ok {
|
||||
log.Logger.Errorf("Error in getting events for config file:%s. Error: %s", configFile, err.Error())
|
||||
log.Errorf("Error in getting events for config file:%s. Error: %s", configFile, err.Error())
|
||||
return
|
||||
}
|
||||
log.Logger.Infof("Config file %s is updated. Hence restarting the Pod", configFile)
|
||||
log.Infof("Config file %s is updated. Hence restarting the Pod", configFile)
|
||||
done <- true
|
||||
|
||||
case err, ok := <-watcher.Errors:
|
||||
if !ok {
|
||||
log.Logger.Errorf("Error in getting events for config file:%s. Error: %s", configFile, err.Error())
|
||||
log.Errorf("Error in getting events for config file:%s. Error: %s", configFile, err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
log.Logger.Infof("Registering watcher on configfile %s", configFile)
|
||||
log.Infof("Registering watcher on configfile %s", configFile)
|
||||
err = watcher.Add(configFile)
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Unable to register watch on config file:%s. Error: %s", configFile, err.Error())
|
||||
log.Errorf("Unable to register watch on config file:%s. Error: %s", configFile, err.Error())
|
||||
return
|
||||
}
|
||||
<-done
|
||||
|
@ -27,7 +27,7 @@ import (
|
||||
|
||||
"github.com/google/go-github/v27/github"
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/infracloudio/botkube/pkg/notify"
|
||||
)
|
||||
|
||||
@ -42,7 +42,7 @@ func checkRelease(c *config.Config, notifiers []notify.Notifier) {
|
||||
client := github.NewClient(nil)
|
||||
release, _, err := client.Repositories.GetLatestRelease(ctx, "infracloudio", "botkube")
|
||||
if err == nil {
|
||||
log.Logger.Debugf(fmt.Sprintf("Upgrade notifier:: latest release info=%+v", release))
|
||||
log.Debugf(fmt.Sprintf("Upgrade notifier:: latest release info=%+v", release))
|
||||
if len(os.Getenv("BOTKUBE_VERSION")) == 0 || release.TagName == nil {
|
||||
return
|
||||
}
|
||||
|
@ -32,8 +32,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
filterengine "github.com/infracloudio/botkube/pkg/filterengine"
|
||||
"github.com/infracloudio/botkube/pkg/logging"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/infracloudio/botkube/pkg/utils"
|
||||
)
|
||||
|
||||
@ -261,7 +260,7 @@ func runKubectlCommand(args []string, clusterName, defaultNamespace string, isAu
|
||||
runner := NewCommandRunner(kubectlBinary, finalArgs)
|
||||
out, err := runner.Run()
|
||||
if err != nil {
|
||||
log.Logger.Error("Error in executing kubectl command: ", err)
|
||||
log.Error("Error in executing kubectl command: ", err)
|
||||
return fmt.Sprintf("Cluster: %s\n%s", clusterName, out+err.Error())
|
||||
}
|
||||
return fmt.Sprintf("Cluster: %s\n%s", clusterName, out)
|
||||
@ -279,11 +278,11 @@ func runNotifierCommand(args []string, clusterName string, isAuthChannel bool) s
|
||||
switch args[1] {
|
||||
case Start.String():
|
||||
config.Notify = true
|
||||
log.Logger.Info("Notifier enabled")
|
||||
log.Info("Notifier enabled")
|
||||
return fmt.Sprintf(notifierStartMsg, clusterName)
|
||||
case Stop.String():
|
||||
config.Notify = false
|
||||
log.Logger.Info("Notifier disabled")
|
||||
log.Info("Notifier disabled")
|
||||
return fmt.Sprintf(notifierStopMsg, clusterName)
|
||||
case Status.String():
|
||||
if config.Notify == false {
|
||||
@ -293,7 +292,7 @@ func runNotifierCommand(args []string, clusterName string, isAuthChannel bool) s
|
||||
case ShowConfig.String():
|
||||
out, err := showControllerConfig()
|
||||
if err != nil {
|
||||
log.Logger.Error("Error in executing showconfig command: ", err)
|
||||
log.Error("Error in executing showconfig command: ", err)
|
||||
return "Error in getting configuration!"
|
||||
}
|
||||
return fmt.Sprintf("Showing config for cluster '%s'\n\n%s", clusterName, out)
|
||||
@ -312,7 +311,7 @@ func runFilterCommand(args []string, clusterName string, isAuthChannel bool) str
|
||||
|
||||
switch args[1] {
|
||||
case FilterList.String():
|
||||
log.Logger.Debug("List filters")
|
||||
log.Debug("List filters")
|
||||
return makeFiltersList()
|
||||
|
||||
// Enable filter
|
||||
@ -320,7 +319,7 @@ func runFilterCommand(args []string, clusterName string, isAuthChannel bool) str
|
||||
if len(args) < 3 {
|
||||
return fmt.Sprintf(filterNameMissing, makeFiltersList())
|
||||
}
|
||||
log.Logger.Debug("Enable filters", args[2])
|
||||
log.Debug("Enable filters", args[2])
|
||||
if err := filterengine.DefaultFilterEngine.SetFilter(args[2], true); err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
@ -331,7 +330,7 @@ func runFilterCommand(args []string, clusterName string, isAuthChannel bool) str
|
||||
if len(args) < 3 {
|
||||
return fmt.Sprintf(filterNameMissing, makeFiltersList())
|
||||
}
|
||||
log.Logger.Debug("Disabled filters", args[2])
|
||||
log.Debug("Disabled filters", args[2])
|
||||
if err := filterengine.DefaultFilterEngine.SetFilter(args[2], false); err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
@ -361,7 +360,7 @@ func findBotKubeVersion() (versions string) {
|
||||
// Returns "Server Version: xxxx"
|
||||
k8sVersion, err := runner.Run()
|
||||
if err != nil {
|
||||
log.Logger.Warn(fmt.Sprintf("Failed to get Kubernetes version: %s", err.Error()))
|
||||
log.Warn(fmt.Sprintf("Failed to get Kubernetes version: %s", err.Error()))
|
||||
k8sVersion = "Server Version: Unknown\n"
|
||||
}
|
||||
|
||||
@ -397,7 +396,7 @@ func runVersionCommand(args []string, clusterName string) string {
|
||||
func showControllerConfig() (configYaml string, err error) {
|
||||
c, err := config.New()
|
||||
if err != nil {
|
||||
logging.Logger.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
log.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
}
|
||||
|
||||
// hide sensitive info
|
||||
|
@ -24,7 +24,7 @@ import (
|
||||
"reflect"
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -63,7 +63,7 @@ func NewDefaultFilter() FilterEngine {
|
||||
|
||||
// Run run the filters
|
||||
func (f *defaultFilters) Run(object interface{}, event events.Event) events.Event {
|
||||
log.Logger.Debug("Filterengine running filters")
|
||||
log.Debug("Filterengine running filters")
|
||||
// Run registered filters
|
||||
for k, v := range f.FiltersMap {
|
||||
if v {
|
||||
@ -75,7 +75,7 @@ func (f *defaultFilters) Run(object interface{}, event events.Event) events.Even
|
||||
|
||||
// Register filter to engine
|
||||
func (f *defaultFilters) Register(filter Filter) {
|
||||
log.Logger.Info("Registering the filter ", reflect.TypeOf(filter).Name())
|
||||
log.Info("Registering the filter ", reflect.TypeOf(filter).Name())
|
||||
f.FiltersMap[filter] = true
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
|
||||
coreV1 "k8s.io/api/core/v1"
|
||||
)
|
||||
@ -68,7 +68,7 @@ func (f ImageTagChecker) Run(object interface{}, event *events.Event) {
|
||||
event.Recommendations = append(event.Recommendations, fmt.Sprintf(":latest tag used in image '%s' of Container '%s' should be avoided.", c.Image, c.Name))
|
||||
}
|
||||
}
|
||||
log.Logger.Debug("Image tag filter successful!")
|
||||
log.Debug("Image tag filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
|
@ -25,7 +25,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
networkV1beta1 "k8s.io/api/networking/v1beta1"
|
||||
)
|
||||
|
||||
@ -77,7 +77,7 @@ func (iv IngressValidator) Run(object interface{}, event *events.Event) {
|
||||
event.Recommendations = append(event.Recommendations, fmt.Sprintf("TLS secret %s does not exist", tls.SecretName))
|
||||
}
|
||||
}
|
||||
log.Logger.Debug("Ingress Validator filter successful!")
|
||||
log.Debug("Ingress Validator filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
)
|
||||
|
||||
// NamespaceChecker ignore events from blocklisted namespaces
|
||||
@ -50,8 +50,8 @@ func (f NamespaceChecker) Run(object interface{}, event *events.Event) {
|
||||
// load config.yaml
|
||||
botkubeConfig, err := config.New()
|
||||
if err != nil {
|
||||
log.Logger.Errorf(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
log.Logger.Debug("Skipping ignore namespace filter.")
|
||||
log.Errorf(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
log.Debug("Skipping ignore namespace filter.")
|
||||
}
|
||||
if botkubeConfig != nil {
|
||||
for _, resource := range botkubeConfig.Resources {
|
||||
@ -63,7 +63,7 @@ func (f NamespaceChecker) Run(object interface{}, event *events.Event) {
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Logger.Debug("Ignore Namespaces filter successful!")
|
||||
log.Debug("Ignore Namespaces filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
|
@ -27,7 +27,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
coreV1 "k8s.io/api/core/v1"
|
||||
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -77,7 +77,7 @@ func (f NodeEventsChecker) Run(object interface{}, event *events.Event) {
|
||||
event.Skip = true
|
||||
}
|
||||
|
||||
log.Logger.Debug("Node Critical Event filter successful!")
|
||||
log.Debug("Node Critical Event filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
|
@ -22,7 +22,7 @@ package filters
|
||||
import (
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/infracloudio/botkube/pkg/utils"
|
||||
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
@ -55,15 +55,15 @@ func (f ObjectAnnotationChecker) Run(object interface{}, event *events.Event) {
|
||||
// Check annotations in object
|
||||
if isObjectNotifDisabled(obj) {
|
||||
event.Skip = true
|
||||
log.Logger.Debug("Object Notification Disable through annotations")
|
||||
log.Debug("Object Notification Disable through annotations")
|
||||
}
|
||||
|
||||
if channel, ok := reconfigureChannel(obj); ok {
|
||||
event.Channel = channel
|
||||
log.Logger.Debugf("Redirecting Event Notifications to channel: %s", channel)
|
||||
log.Debugf("Redirecting Event Notifications to channel: %s", channel)
|
||||
}
|
||||
|
||||
log.Logger.Debug("Object annotations filter successful!")
|
||||
log.Debug("Object annotations filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
@ -76,7 +76,7 @@ func (f ObjectAnnotationChecker) Describe() string {
|
||||
func isObjectNotifDisabled(obj metaV1.ObjectMeta) bool {
|
||||
|
||||
if obj.Annotations[DisableAnnotation] == "true" {
|
||||
log.Logger.Debug("Skipping Disabled Event Notifications!")
|
||||
log.Debug("Skipping Disabled Event Notifications!")
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -25,7 +25,7 @@ import (
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
"github.com/infracloudio/botkube/pkg/filterengine"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
|
||||
coreV1 "k8s.io/api/core/v1"
|
||||
)
|
||||
@ -56,7 +56,7 @@ func (f PodLabelChecker) Run(object interface{}, event *events.Event) {
|
||||
if len(podObj.ObjectMeta.Labels) == 0 {
|
||||
event.Recommendations = append(event.Recommendations, fmt.Sprintf("pod '%s' creation without labels should be avoided.", podObj.ObjectMeta.Name))
|
||||
}
|
||||
log.Logger.Debug("Pod label filter successful!")
|
||||
log.Debug("Pod label filter successful!")
|
||||
}
|
||||
|
||||
// Describe filter
|
||||
|
113
pkg/log/log.go
Normal file
113
pkg/log/log.go
Normal file
@ -0,0 +1,113 @@
|
||||
// Copyright (c) 2019 InfraCloud Technologies
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
// this software and associated documentation files (the "Software"), to deal in
|
||||
// the Software without restriction, including without limitation the rights to
|
||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
// the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
// subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
package log
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// log object for logging across the pkg/
|
||||
var log = logrus.New()
|
||||
|
||||
func init() {
|
||||
// Output to stdout instead of the default stderr
|
||||
log.SetOutput(os.Stdout)
|
||||
|
||||
// Only log the warning severity or above.
|
||||
logLevel, err := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
|
||||
if err != nil {
|
||||
// Set Info level as a default
|
||||
logLevel = logrus.InfoLevel
|
||||
}
|
||||
log.SetLevel(logLevel)
|
||||
log.Formatter = &logrus.TextFormatter{ForceColors: true, FullTimestamp: true}
|
||||
}
|
||||
|
||||
// Info map logrus.Info func to log.Info
|
||||
func Info(message ...interface{}) {
|
||||
log.Info(message...)
|
||||
}
|
||||
|
||||
// Trace map logrus.Trace func to log.Trace
|
||||
func Trace(message ...interface{}) {
|
||||
log.Trace(message...)
|
||||
}
|
||||
|
||||
// Debug map logrus.Debug func to log.Debug
|
||||
func Debug(message ...interface{}) {
|
||||
log.Debug(message...)
|
||||
}
|
||||
|
||||
// Warn map logrus.Warn func to log.Warn
|
||||
func Warn(message ...interface{}) {
|
||||
log.Warn(message...)
|
||||
}
|
||||
|
||||
// Error map logrus.Error func to log.Error
|
||||
func Error(message ...interface{}) {
|
||||
log.Error(message...)
|
||||
}
|
||||
|
||||
// Fatal map logrus.Fatal func to log.Fatal
|
||||
func Fatal(message ...interface{}) {
|
||||
log.Fatal(message...)
|
||||
}
|
||||
|
||||
// Panic map logrus.Panic func to log.Panic
|
||||
func Panic(message ...interface{}) {
|
||||
log.Panic(message...)
|
||||
}
|
||||
|
||||
// Infof map logrus.Infof func to log.Infof
|
||||
func Infof(format string, v ...interface{}) {
|
||||
log.Infof(format, v...)
|
||||
}
|
||||
|
||||
// Tracef map logrus.Tracef func to log.Tracef
|
||||
func Tracef(format string, v ...interface{}) {
|
||||
log.Tracef(format, v...)
|
||||
}
|
||||
|
||||
// Debugf map logrus.Debugf func to log.Debugf
|
||||
func Debugf(format string, v ...interface{}) {
|
||||
log.Debugf(format, v...)
|
||||
}
|
||||
|
||||
// Warnf map logrus.Warnf func to log.Warnf
|
||||
func Warnf(format string, v ...interface{}) {
|
||||
log.Warnf(format, v...)
|
||||
}
|
||||
|
||||
// Errorf map logrus.Errorf func to log.Errorf
|
||||
func Errorf(format string, v ...interface{}) {
|
||||
log.Errorf(format, v...)
|
||||
}
|
||||
|
||||
// Fatalf map logrus.Fatalf func to log.Fatalf
|
||||
func Fatalf(format string, v ...interface{}) {
|
||||
log.Fatalf(format, v...)
|
||||
}
|
||||
|
||||
// Panicf map logrus.Panicf func to log.Panicf
|
||||
func Panicf(format string, v ...interface{}) {
|
||||
log.Panicf(format, v...)
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
// Copyright (c) 2019 InfraCloud Technologies
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
// this software and associated documentation files (the "Software"), to deal in
|
||||
// the Software without restriction, including without limitation the rights to
|
||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
// the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
// subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
package logging
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// Logger global object for logging across the pkg/
|
||||
var Logger = logrus.New()
|
||||
|
||||
func init() {
|
||||
// Output to stdout instead of the default stderr
|
||||
Logger.SetOutput(os.Stdout)
|
||||
|
||||
// Only log the warning severity or above.
|
||||
logLevel, err := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
|
||||
if err != nil {
|
||||
// Set Info level as a default
|
||||
logLevel = logrus.InfoLevel
|
||||
}
|
||||
Logger.SetLevel(logLevel)
|
||||
Logger.Formatter = &logrus.TextFormatter{ForceColors: true, FullTimestamp: true}
|
||||
}
|
@ -25,7 +25,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/olivere/elastic"
|
||||
)
|
||||
|
||||
@ -71,7 +71,7 @@ type index struct {
|
||||
|
||||
// SendEvent sends event notification to slack
|
||||
func (e *ElasticSearch) SendEvent(event events.Event) (err error) {
|
||||
log.Logger.Debug(fmt.Sprintf(">> Sending to ElasticSearch: %+v", event))
|
||||
log.Debug(fmt.Sprintf(">> Sending to ElasticSearch: %+v", event))
|
||||
ctx := context.Background()
|
||||
|
||||
// set missing cluster name to event object
|
||||
@ -80,7 +80,7 @@ func (e *ElasticSearch) SendEvent(event events.Event) (err error) {
|
||||
// Create index if not exists
|
||||
exists, err := e.ELSClient.IndexExists(e.Index).Do(ctx)
|
||||
if err != nil {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to get index. Error:%s", err.Error()))
|
||||
log.Error(fmt.Sprintf("Failed to get index. Error:%s", err.Error()))
|
||||
return err
|
||||
}
|
||||
if !exists {
|
||||
@ -95,7 +95,7 @@ func (e *ElasticSearch) SendEvent(event events.Event) (err error) {
|
||||
}
|
||||
_, err := e.ELSClient.CreateIndex(e.Index).BodyJson(mapping).Do(ctx)
|
||||
if err != nil {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to create index. Error:%s", err.Error()))
|
||||
log.Error(fmt.Sprintf("Failed to create index. Error:%s", err.Error()))
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -103,15 +103,15 @@ func (e *ElasticSearch) SendEvent(event events.Event) (err error) {
|
||||
// Send event to els
|
||||
_, err = e.ELSClient.Index().Index(e.Index).Type(e.Type).BodyJson(event).Do(ctx)
|
||||
if err != nil {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to post data to els. Error:%s", err.Error()))
|
||||
log.Error(fmt.Sprintf("Failed to post data to els. Error:%s", err.Error()))
|
||||
return err
|
||||
}
|
||||
_, err = e.ELSClient.Flush().Index(e.Index).Do(ctx)
|
||||
if err != nil {
|
||||
log.Logger.Error(fmt.Sprintf("Failed to flush data to els. Error:%s", err.Error()))
|
||||
log.Error(fmt.Sprintf("Failed to flush data to els. Error:%s", err.Error()))
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("Event successfully sent to ElasticSearch index %s", e.Index)
|
||||
log.Debugf("Event successfully sent to ElasticSearch index %s", e.Index)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/mattermost/mattermost-server/model"
|
||||
)
|
||||
|
||||
@ -60,7 +60,7 @@ func NewMattermost(c *config.Config) (Notifier, error) {
|
||||
|
||||
// SendEvent sends event notification to Mattermost
|
||||
func (m *Mattermost) SendEvent(event events.Event) error {
|
||||
log.Logger.Info(fmt.Sprintf(">> Sending to Mattermost: %+v", event))
|
||||
log.Info(fmt.Sprintf(">> Sending to Mattermost: %+v", event))
|
||||
|
||||
var fields []*model.SlackAttachmentField
|
||||
|
||||
@ -95,7 +95,7 @@ func (m *Mattermost) SendEvent(event events.Event) error {
|
||||
post.ChannelId = event.Channel
|
||||
|
||||
if _, resp := m.Client.CreatePost(post); resp.Error != nil {
|
||||
log.Logger.Error("Failed to send message. Error: ", resp.Error)
|
||||
log.Error("Failed to send message. Error: ", resp.Error)
|
||||
// send error message to default channel
|
||||
msg := fmt.Sprintf("Unable to send message to Channel `%s`: `%s`\n```add Botkube app to the Channel %s\nMissed events follows below:```", event.Channel, resp.Error, event.Channel)
|
||||
go m.SendMessage(msg)
|
||||
@ -105,15 +105,15 @@ func (m *Mattermost) SendEvent(event events.Event) error {
|
||||
go m.SendEvent(event)
|
||||
return resp.Error
|
||||
}
|
||||
log.Logger.Debugf("Event successfully sent to channel %s", post.ChannelId)
|
||||
log.Debugf("Event successfully sent to channel %s", post.ChannelId)
|
||||
} else {
|
||||
post.ChannelId = m.Channel
|
||||
// empty value in event.channel sends notifications to default channel.
|
||||
if _, resp := m.Client.CreatePost(post); resp.Error != nil {
|
||||
log.Logger.Error("Failed to send message. Error: ", resp.Error)
|
||||
log.Error("Failed to send message. Error: ", resp.Error)
|
||||
return resp.Error
|
||||
}
|
||||
log.Logger.Debugf("Event successfully sent to channel %s", post.ChannelId)
|
||||
log.Debugf("Event successfully sent to channel %s", post.ChannelId)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -124,7 +124,7 @@ func (m *Mattermost) SendMessage(msg string) error {
|
||||
post.ChannelId = m.Channel
|
||||
post.Message = msg
|
||||
if _, resp := m.Client.CreatePost(post); resp.Error != nil {
|
||||
log.Logger.Error("Failed to send message. Error: ", resp.Error)
|
||||
log.Error("Failed to send message. Error: ", resp.Error)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
"github.com/nlopes/slack"
|
||||
)
|
||||
|
||||
@ -57,7 +57,7 @@ func NewSlack(c *config.Config) Notifier {
|
||||
|
||||
// SendEvent sends event notification to slack
|
||||
func (s *Slack) SendEvent(event events.Event) error {
|
||||
log.Logger.Debug(fmt.Sprintf(">> Sending to slack: %+v", event))
|
||||
log.Debug(fmt.Sprintf(">> Sending to slack: %+v", event))
|
||||
|
||||
api := slack.New(s.Token)
|
||||
if len(s.SlackURL) != 0 {
|
||||
@ -69,7 +69,7 @@ func (s *Slack) SendEvent(event events.Event) error {
|
||||
if event.Channel != "" {
|
||||
channelID, timestamp, err := api.PostMessage(event.Channel, slack.MsgOptionAttachments(attachment), slack.MsgOptionAsUser(true))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Error in sending slack message %s", err.Error())
|
||||
log.Errorf("Error in sending slack message %s", err.Error())
|
||||
// send error message to default channel
|
||||
if err.Error() == "channel_not_found" {
|
||||
msg := fmt.Sprintf("Unable to send message to Channel `%s`: `%s`\n```add Botkube app to the Channel %s\nMissed events follows below:```", event.Channel, err.Error(), event.Channel)
|
||||
@ -81,22 +81,22 @@ func (s *Slack) SendEvent(event events.Event) error {
|
||||
}
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("Event successfully sent to channel %s at %s", channelID, timestamp)
|
||||
log.Debugf("Event successfully sent to channel %s at %s", channelID, timestamp)
|
||||
} else {
|
||||
// empty value in event.channel sends notifications to default channel.
|
||||
channelID, timestamp, err := api.PostMessage(s.Channel, slack.MsgOptionAttachments(attachment), slack.MsgOptionAsUser(true))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Error in sending slack message %s", err.Error())
|
||||
log.Errorf("Error in sending slack message %s", err.Error())
|
||||
return err
|
||||
}
|
||||
log.Logger.Debugf("Event successfully sent to channel %s at %s", channelID, timestamp)
|
||||
log.Debugf("Event successfully sent to channel %s at %s", channelID, timestamp)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendMessage sends message to slack channel
|
||||
func (s *Slack) SendMessage(msg string) error {
|
||||
log.Logger.Debug(fmt.Sprintf(">> Sending to slack: %+v", msg))
|
||||
log.Debug(fmt.Sprintf(">> Sending to slack: %+v", msg))
|
||||
|
||||
api := slack.New(s.Token)
|
||||
if len(s.SlackURL) != 0 {
|
||||
@ -105,11 +105,11 @@ func (s *Slack) SendMessage(msg string) error {
|
||||
|
||||
channelID, timestamp, err := api.PostMessage(s.Channel, slack.MsgOptionText(msg, false), slack.MsgOptionAsUser(true))
|
||||
if err != nil {
|
||||
log.Logger.Errorf("Error in sending slack message %s", err.Error())
|
||||
log.Errorf("Error in sending slack message %s", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
log.Logger.Debugf("Message successfully sent to channel %s at %s", channelID, timestamp)
|
||||
log.Debugf("Message successfully sent to channel %s at %s", channelID, timestamp)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ import (
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
"github.com/infracloudio/botkube/pkg/events"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
)
|
||||
|
||||
// Webhook contains URL and ClusterName
|
||||
@ -100,11 +100,11 @@ func (w *Webhook) SendEvent(event events.Event) (err error) {
|
||||
|
||||
err = w.PostWebhook(jsonPayload)
|
||||
if err != nil {
|
||||
log.Logger.Error(err.Error())
|
||||
log.Logger.Debugf("Event Not Sent to Webhook %v", event)
|
||||
log.Error(err.Error())
|
||||
log.Debugf("Event Not Sent to Webhook %v", event)
|
||||
}
|
||||
|
||||
log.Logger.Debugf("Event successfully sent to Webhook %v", event)
|
||||
log.Debugf("Event successfully sent to Webhook %v", event)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/infracloudio/botkube/pkg/config"
|
||||
log "github.com/infracloudio/botkube/pkg/logging"
|
||||
"github.com/infracloudio/botkube/pkg/log"
|
||||
appsV1 "k8s.io/api/apps/v1"
|
||||
batchV1 "k8s.io/api/batch/v1"
|
||||
coreV1 "k8s.io/api/core/v1"
|
||||
@ -64,16 +64,16 @@ func InitKubeClient() {
|
||||
}
|
||||
botkubeConf, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err)
|
||||
log.Fatal(err)
|
||||
}
|
||||
KubeClient, err = kubernetes.NewForConfig(botkubeConf)
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err)
|
||||
log.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
KubeClient, err = kubernetes.NewForConfig(kubeConfig)
|
||||
if err != nil {
|
||||
log.Logger.Fatal(err)
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -95,7 +95,7 @@ type KindNS struct {
|
||||
func InitInformerMap() {
|
||||
conf, err := config.New()
|
||||
if err != nil {
|
||||
log.Logger.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
log.Fatal(fmt.Sprintf("Error in loading configuration. Error:%s", err.Error()))
|
||||
}
|
||||
|
||||
// Get resync period
|
||||
@ -105,7 +105,7 @@ func InitInformerMap() {
|
||||
}
|
||||
rsyncTime, err := strconv.Atoi(rsyncTimeStr)
|
||||
if err != nil {
|
||||
log.Logger.Fatal("Error in reading INFORMERS_RESYNC_PERIOD env var.", err)
|
||||
log.Fatal("Error in reading INFORMERS_RESYNC_PERIOD env var.", err)
|
||||
}
|
||||
|
||||
// Create shared informer factory
|
||||
@ -171,8 +171,8 @@ func InitInformerMap() {
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Logger.Infof("Allowed Events - %+v", AllowedEventKindsMap)
|
||||
log.Logger.Infof("Allowed UpdateEvents - %+v", AllowedUpdateEventsMap)
|
||||
log.Infof("Allowed Events - %+v", AllowedEventKindsMap)
|
||||
log.Infof("Allowed UpdateEvents - %+v", AllowedUpdateEventsMap)
|
||||
}
|
||||
|
||||
// GetObjectMetaData returns metadata of the given object
|
||||
@ -314,110 +314,110 @@ func ExtractAnnotaions(obj *coreV1.Event) map[string]string {
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Node":
|
||||
object, err := KubeClient.CoreV1().Nodes().Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Namespace":
|
||||
object, err := KubeClient.CoreV1().Namespaces().Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "PersistentVolume":
|
||||
object, err := KubeClient.CoreV1().PersistentVolumes().Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "PersistentVolumeClaim":
|
||||
object, err := KubeClient.CoreV1().PersistentVolumeClaims(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "ReplicationController":
|
||||
object, err := KubeClient.CoreV1().ReplicationControllers(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Service":
|
||||
object, err := KubeClient.CoreV1().Services(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Secret":
|
||||
object, err := KubeClient.CoreV1().Secrets(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "ConfigMap":
|
||||
object, err := KubeClient.CoreV1().ConfigMaps(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "DaemonSet":
|
||||
object, err := KubeClient.ExtensionsV1beta1().DaemonSets(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Ingress":
|
||||
object, err := KubeClient.ExtensionsV1beta1().Ingresses(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
|
||||
case "ReplicaSet":
|
||||
object, err := KubeClient.ExtensionsV1beta1().ReplicaSets(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Deployment":
|
||||
object, err := KubeClient.ExtensionsV1beta1().Deployments(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Job":
|
||||
object, err := KubeClient.BatchV1().Jobs(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "Role":
|
||||
object, err := KubeClient.RbacV1().Roles(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "RoleBinding":
|
||||
object, err := KubeClient.RbacV1().RoleBindings(obj.InvolvedObject.Namespace).Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "ClusterRole":
|
||||
object, err := KubeClient.RbacV1().ClusterRoles().Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
case "ClusterRoleBinding":
|
||||
object, err := KubeClient.RbacV1().ClusterRoleBindings().Get(obj.InvolvedObject.Name, metaV1.GetOptions{})
|
||||
if err == nil {
|
||||
return object.ObjectMeta.Annotations
|
||||
}
|
||||
log.Logger.Error(err)
|
||||
log.Error(err)
|
||||
}
|
||||
|
||||
return map[string]string{}
|
||||
|
Loading…
Reference in New Issue
Block a user