From a9ffffc31acad3963481ea3334699fb793d0cead Mon Sep 17 00:00:00 2001 From: Shashank Shekhar Date: Thu, 2 Nov 2023 13:11:52 +0530 Subject: [PATCH] TP-45730 | creating a global logger (#263) --- cmd/app/handler/incident_handler.go | 19 ++- cmd/app/handler/severity_handler.go | 15 ++- cmd/app/handler/slack_handler.go | 69 ++++++----- cmd/app/handler/team_handler.go | 11 +- cmd/app/server.go | 49 ++++---- cmd/app/slack.go | 10 +- cmd/main.go | 20 ++-- common/util/common_util.go | 1 + common/util/incident_helper.go | 3 +- common/util/slack_helpers.go | 2 +- config/config.go | 3 +- go.mod | 3 + internal/clients/mjolnir.go | 9 +- internal/cron/cron.go | 30 ++--- internal/diagnostic/DiagnoseRepository.go | 5 +- internal/diagnostic/assembler.go | 14 +-- .../diagnostic/deploymentConfigHandler.go | 13 +- .../diagnostic/deploymentPortalHandler.go | 13 +- internal/diagnostic/screenshot.go | 23 ++-- internal/metrics/metric_publisher.go | 4 +- .../action/diagnostic_command_action.go | 17 ++- .../action/incident_assign_action.go | 17 ++- .../incident_channel_message_update_action.go | 6 +- .../action/incident_mark_duplicate_action.go | 35 +++--- .../action/incident_resolve_action.go | 23 ++-- .../action/incident_show_tags_action.go | 18 +-- .../incident_update_description_action.go | 19 ++- .../incident_update_resolution_text_action.go | 18 +-- .../action/incident_update_severity_action.go | 33 +++-- .../action/incident_update_status_action.go | 33 +++-- .../action/incident_update_tags_action.go | 37 +++--- .../action/incident_update_title_action.go | 34 +++--- .../action/incident_update_type_action.go | 33 +++-- .../processor/action/member_join_action.go | 25 ++-- .../action/show_incident_submit_action.go | 9 +- .../action/show_incidents_block_action.go | 11 +- .../processor/action/slash_command_action.go | 13 +- .../action/start_incident_block_action.go | 13 +- .../start_incident_modal_submission_action.go | 36 +++--- .../action/user_change_event_action.go | 21 ++-- .../event_type_interactive_processor.go | 69 +++++------ .../processor/events_api_event_processor.go | 18 ++- internal/processor/slash_command_processor.go | 23 ++-- internal/resolver/slash_command_resolver.go | 7 +- {log => logger}/log.go | 12 +- model/incident/incident.go | 15 ++- model/log/entity.go | 2 +- model/log/log.go | 5 +- model/role/role.go | 7 +- model/severity/severity.go | 11 +- model/shedlock/shedlock.go | 11 +- model/tag/tag.go | 5 +- model/team/team.go | 5 +- model/user/user.go | 5 +- pkg/postgres/config.go | 8 +- pkg/s3/config.go | 9 +- pkg/slackbot/channel.go | 17 +-- pkg/slackbot/config.go | 5 +- pkg/slackbot/users.go | 11 +- service/auth_service.go | 17 ++- service/filter_service.go | 37 +++--- service/incident/incident_service_v2.go | 91 +++++++------- service/incident_service.go | 113 +++++++++--------- service/log_service.go | 15 ++- service/request/team_filters.go | 8 +- service/response/common/common_utils.go | 1 - service/response/common/generic_response.go | 2 +- service/response/filter_response.go | 10 +- service/response/incident_header_option.go | 6 +- service/response/incident_header_response.go | 8 +- service/response/incident_response.go | 86 ++++++------- service/severity_service.go | 27 ++--- service/slack/slack_service.go | 30 ++--- service/team_service.go | 103 ++++++++-------- service/users_service.go | 32 +++-- 75 files changed, 767 insertions(+), 831 deletions(-) rename {log => logger}/log.go (78%) diff --git a/cmd/app/handler/incident_handler.go b/cmd/app/handler/incident_handler.go index af1b660..43889aa 100644 --- a/cmd/app/handler/incident_handler.go +++ b/cmd/app/handler/incident_handler.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "go.uber.org/zap" "gorm.io/gorm" + "houston/logger" "houston/service/incident" request "houston/service/request" common "houston/service/response/common" @@ -17,16 +18,14 @@ const ( ) type IncidentHandler struct { - gin *gin.Engine - logger *zap.Logger - db *gorm.DB + gin *gin.Engine + db *gorm.DB } -func NewIncidentHandler(gin *gin.Engine, logger *zap.Logger, db *gorm.DB) *IncidentHandler { +func NewIncidentHandler(gin *gin.Engine, db *gorm.DB) *IncidentHandler { return &IncidentHandler{ - gin: gin, - logger: logger, - db: db, + gin: gin, + db: db, } } @@ -38,14 +37,14 @@ func (h *IncidentHandler) HandleCreateIncident(c *gin.Context) { } if err := utils.ValidateCreateIncidentRequestV2(createIncidentRequest); err != nil { - h.logger.Error(fmt.Sprintf("%s Received invalid request to create new incident", logTag), zap.Error(err)) + logger.Error(fmt.Sprintf("%s Received invalid request to create new incident", logTag), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } - incidentServiceV2 := incident.NewIncidentServiceV2(h.logger, h.db) + incidentServiceV2 := incident.NewIncidentServiceV2(h.db) incidentResponse, err := incidentServiceV2.CreateIncident(createIncidentRequest, "API", "") if err != nil { - h.logger.Error(fmt.Sprintf("%s Failed to create incident", logTag), zap.Error(err)) + logger.Error(fmt.Sprintf("%s Failed to create incident", logTag), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return } diff --git a/cmd/app/handler/severity_handler.go b/cmd/app/handler/severity_handler.go index df0d0ae..35b4f39 100644 --- a/cmd/app/handler/severity_handler.go +++ b/cmd/app/handler/severity_handler.go @@ -2,6 +2,7 @@ package handler import ( "houston/api/request" + "houston/logger" "net/http" "github.com/gin-gonic/gin" @@ -10,16 +11,14 @@ import ( ) type severityHandler struct { - gin *gin.Engine - logger *zap.Logger - db *gorm.DB + gin *gin.Engine + db *gorm.DB } -func NewSeverityHandler(gin *gin.Engine, logger *zap.Logger, db *gorm.DB) *severityHandler { +func NewSeverityHandler(gin *gin.Engine, db *gorm.DB) *severityHandler { return &severityHandler{ - gin: gin, - logger: logger, - db: db, + gin: gin, + db: db, } } @@ -30,7 +29,7 @@ func (sh *severityHandler) AddSeverity(c *gin.Context) { return } - sh.logger.Info("add severity request received", zap.String("severity_name", addSeverityRequest.Name)) + logger.Info("add severity request received", zap.String("severity_name", addSeverityRequest.Name)) //err := query.AddSeverity(sh.db, sh.logger, addSeverityRequest) //if err != nil { diff --git a/cmd/app/handler/slack_handler.go b/cmd/app/handler/slack_handler.go index f78d015..dbddccd 100644 --- a/cmd/app/handler/slack_handler.go +++ b/cmd/app/handler/slack_handler.go @@ -8,6 +8,7 @@ import ( "houston/internal/processor" "houston/internal/resolver" "houston/model/incident" + "houston/model/log" "houston/model/severity" "houston/model/shedlock" "houston/model/tag" @@ -21,11 +22,10 @@ import ( "github.com/spf13/viper" "go.uber.org/zap" "gorm.io/gorm" - "houston/model/log" + logger "houston/logger" ) type slackHandler struct { - logger *zap.Logger socketModeClient *socketmode.Client slashCommandProcessor *processor.SlashCommandProcessor memberJoinCallbackProcessor *processor.MemberJoinedCallbackEventProcessor @@ -36,40 +36,39 @@ type slackHandler struct { userChangeEventProcessor *processor.UserChangeEventProcessor } -func NewSlackHandler(logger *zap.Logger, gormClient *gorm.DB, socketModeClient *socketmode.Client) *slackHandler { - severityService := severity.NewSeverityRepository(logger, gormClient) - logRepository := log.NewLogRepository(logger, gormClient) - tagService := tag.NewTagRepository(logger, gormClient) - teamService := team.NewTeamRepository(logger, gormClient, logRepository) - incidentService := incident.NewIncidentRepository(logger, gormClient, severityService, logRepository, teamService, socketModeClient) - userService := user.NewUserRepository(logger, gormClient) - shedlockService := shedlock.NewShedlockRepository(logger, gormClient) - slackbotClient := slackbot.NewSlackClient(logger, socketModeClient) - slashCommandProcessor := processor.NewSlashCommandProcessor(logger, socketModeClient, incidentService, slackbotClient) - grafanaRepository := diagnostic.NewDiagnoseRepository(logger, gormClient) - diagnosticCommandProcessor := processor.NewDiagnosticCommandProcessor(logger, socketModeClient, grafanaRepository) +func NewSlackHandler(gormClient *gorm.DB, socketModeClient *socketmode.Client) *slackHandler { + severityService := severity.NewSeverityRepository(gormClient) + logRepository := log.NewLogRepository(gormClient) + tagService := tag.NewTagRepository(gormClient) + teamService := team.NewTeamRepository(gormClient, logRepository) + incidentService := incident.NewIncidentRepository(gormClient, severityService, logRepository, teamService, socketModeClient) + userService := user.NewUserRepository(gormClient) + shedlockService := shedlock.NewShedlockRepository(gormClient) + slackbotClient := slackbot.NewSlackClient(socketModeClient) + slashCommandProcessor := processor.NewSlashCommandProcessor(socketModeClient, incidentService, slackbotClient) + grafanaRepository := diagnostic.NewDiagnoseRepository(gormClient) + diagnosticCommandProcessor := processor.NewDiagnosticCommandProcessor(socketModeClient, grafanaRepository) - cron.RunJob(socketModeClient, gormClient, logger, incidentService, severityService, teamService, shedlockService, userService) + cron.RunJob(socketModeClient, gormClient, incidentService, severityService, teamService, shedlockService, userService) return &slackHandler{ - logger: logger, socketModeClient: socketModeClient, slashCommandProcessor: slashCommandProcessor, diagnosticCommandProcessor: diagnosticCommandProcessor, memberJoinCallbackProcessor: processor.NewMemberJoinedCallbackEventProcessor( - logger, socketModeClient, incidentService, teamService, severityService, + socketModeClient, incidentService, teamService, severityService, ), blockActionProcessor: processor.NewBlockActionProcessor( - logger, socketModeClient, incidentService, teamService, severityService, tagService, slackbotClient, + socketModeClient, incidentService, teamService, severityService, tagService, slackbotClient, ), viewSubmissionProcessor: processor.NewViewSubmissionProcessor( - logger, socketModeClient, incidentService, teamService, severityService, tagService, teamService, slackbotClient, gormClient, + socketModeClient, incidentService, teamService, severityService, tagService, teamService, slackbotClient, gormClient, ), slashCommandResolver: resolver.NewSlashCommandResolver( - logger, diagnosticCommandProcessor, slashCommandProcessor, + diagnosticCommandProcessor, slashCommandProcessor, ), userChangeEventProcessor: processor.NewUserChangeEventProcessor( - logger, socketModeClient, userService, + socketModeClient, userService, ), } } @@ -80,17 +79,17 @@ func (sh *slackHandler) HoustonConnect() { switch evt.Type { case socketmode.EventTypeConnecting: { - sh.logger.Info("houston connecting to slackbot with socket mode") + logger.Info("houston connecting to slackbot with socket mode") } case socketmode.EventTypeConnectionError: { - sh.logger.Error("appToken : " + viper.GetString("houston.slack.app.token")) - sh.logger.Error("botToken : " + viper.GetString("houston.slack.bot.token")) - sh.logger.Error("houston connection failed.") + logger.Error("appToken : " + viper.GetString("houston.slack.app.token")) + logger.Error("botToken : " + viper.GetString("houston.slack.bot.token")) + logger.Error("houston connection failed.") } case socketmode.EventTypeConnected: { - sh.logger.Info("houston connected to slackbot with socket mode") + logger.Info("houston connected to slackbot with socket mode") } case socketmode.EventTypeEventsAPI: { @@ -98,10 +97,10 @@ func (sh *slackHandler) HoustonConnect() { eventJson := &ev serializedEventJson, eventErr := json.Marshal(eventJson) if eventErr != nil { - sh.logger.Error("error occurred while serializing the event object", zap.Any("error", eventErr)) + logger.Error("error occurred while serializing the event object", zap.Any("error", eventErr)) } else { if ev.InnerEvent.Type != util.UserChangeEvent { - sh.logger.Info("event api", zap.String("event", string(serializedEventJson))) + logger.Info("event api", zap.String("event", string(serializedEventJson))) } } switch ev.Type { @@ -126,7 +125,7 @@ func (sh *slackHandler) HoustonConnect() { switch callback.Type { case slack.InteractionTypeBlockActions: { - sh.logger.Info( + logger.Info( "received interaction type block action", zap.String("action_id", callback.ActionID), zap.String("block_id", callback.BlockID), ) @@ -134,23 +133,23 @@ func (sh *slackHandler) HoustonConnect() { } case slack.InteractionTypeViewSubmission: { - sh.logger.Info( + logger.Info( "received interaction type view submission", zap.String("action_id", callback.ActionID), zap.String("block_id", callback.BlockID), ) callbackJson := &callback serializedCallbackJson, callbackErr := json.Marshal(callbackJson) if callbackErr != nil { - sh.logger.Error("error occurred while serializing the callback object", zap.Any("error", callbackErr)) + logger.Error("error occurred while serializing the callback object", zap.Any("error", callbackErr)) } else { - sh.logger.Info("callback data", zap.String("callback", string(serializedCallbackJson))) + logger.Info("callback data", zap.String("callback", string(serializedCallbackJson))) } requestJson := &evt.Request serializedRequestJson, requestErr := json.Marshal(requestJson) if requestErr != nil { - sh.logger.Error("error occurred while serializing the request object", zap.Any("error", requestErr)) + logger.Error("error occurred while serializing the request object", zap.Any("error", requestErr)) } else { - sh.logger.Info("request data", zap.String("request", string(serializedRequestJson))) + logger.Info("request data", zap.String("request", string(serializedRequestJson))) } sh.viewSubmissionProcessor.ProcessCommand(callback, evt.Request) } @@ -162,7 +161,7 @@ func (sh *slackHandler) HoustonConnect() { } default: { - sh.logger.Error("houston unexpected event type received", zap.String("event_type", string(evt.Type))) + logger.Error("houston unexpected event type received", zap.String("event_type", string(evt.Type))) } } } diff --git a/cmd/app/handler/team_handler.go b/cmd/app/handler/team_handler.go index 2690627..8224bfc 100644 --- a/cmd/app/handler/team_handler.go +++ b/cmd/app/handler/team_handler.go @@ -2,6 +2,7 @@ package handler import ( "houston/api/request" + "houston/logger" "net/http" "github.com/gin-gonic/gin" @@ -10,14 +11,12 @@ import ( ) type teamHandler struct { - logger *zap.Logger - db *gorm.DB + db *gorm.DB } -func NewTeamHandler(gin *gin.Engine, logger *zap.Logger, db *gorm.DB) *teamHandler { +func NewTeamHandler(gin *gin.Engine, db *gorm.DB) *teamHandler { return &teamHandler{ - logger: logger, - db: db, + db: db, } } @@ -28,7 +27,7 @@ func (th *teamHandler) AddTeam(c *gin.Context) { return } - th.logger.Info("add team request received", zap.String("team_name", addTeamRequest.Name)) + logger.Info("add team request received", zap.String("team_name", addTeamRequest.Name)) //err := query.AddTeam(th.db, addTeamRequest) //if err != nil { // c.JSON(http.StatusInternalServerError, err) diff --git a/cmd/app/server.go b/cmd/app/server.go index bff247e..af5bdae 100644 --- a/cmd/app/server.go +++ b/cmd/app/server.go @@ -9,6 +9,7 @@ import ( "houston/cmd/app/handler" "houston/internal/clients" "houston/internal/metrics" + "houston/logger" "houston/model/ingester" "houston/pkg/slackbot" "houston/service" @@ -19,15 +20,13 @@ import ( type Server struct { gin *gin.Engine - logger *zap.Logger db *gorm.DB mjolnirClient *clients.MjolnirClient } -func NewServer(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, mjolnirClient *clients.MjolnirClient) *Server { +func NewServer(gin *gin.Engine, db *gorm.DB, mjolnirClient *clients.MjolnirClient) *Server { return &Server{ gin: gin, - logger: logger, db: db, mjolnirClient: mjolnirClient, } @@ -53,16 +52,16 @@ func (s *Server) Handler(houstonGroup *gin.RouterGroup) { } func (s *Server) houstonHandler() { - houstonClient := NewHoustonClient(s.logger) - houstonHandler := handler.NewSlackHandler(s.logger, s.db, houstonClient.socketModeClient) + houstonClient := NewHoustonClient() + houstonHandler := handler.NewSlackHandler(s.db, houstonClient.socketModeClient) houstonHandler.HoustonConnect() } func (s *Server) teamHandler(houstonGroup *gin.RouterGroup) { - houstonClient := NewHoustonClient(s.logger) - slackClient := slackbot.NewSlackClient(s.logger, houstonClient.socketModeClient) - authService := service.NewAuthService(s.mjolnirClient, slackClient, s.logger) - teamHandler := service.NewTeamService(s.gin, s.logger, s.db, slackClient, authService) + houstonClient := NewHoustonClient() + slackClient := slackbot.NewSlackClient(houstonClient.socketModeClient) + authService := service.NewAuthService(s.mjolnirClient, slackClient) + teamHandler := service.NewTeamService(s.gin, s.db, slackClient, authService) //Will be deprecated because they are not using houston group s.gin.GET("/teams", teamHandler.GetTeams) @@ -79,9 +78,9 @@ func (s *Server) teamHandler(houstonGroup *gin.RouterGroup) { } func (s *Server) severityHandler(houstonGroup *gin.RouterGroup) { - houstonClient := NewHoustonClient(s.logger) - slackClient := slackbot.NewSlackClient(s.logger, houstonClient.socketModeClient) - severityHandler := service.NewSeverityService(s.gin, s.logger, s.db, slackClient) + houstonClient := NewHoustonClient() + slackClient := slackbot.NewSlackClient(houstonClient.socketModeClient) + severityHandler := service.NewSeverityService(s.gin, s.db, slackClient) //Will be deprecated because they are not using hosuton group s.gin.GET("/severities", severityHandler.GetSeverities) @@ -95,8 +94,8 @@ func (s *Server) severityHandler(houstonGroup *gin.RouterGroup) { func (s *Server) incidentClientHandler(houstonGroup *gin.RouterGroup) { - houstonClient := NewHoustonClient(s.logger) - incidentHandler := service.NewIncidentService(s.gin, s.logger, s.db, houstonClient.socketModeClient) + houstonClient := NewHoustonClient() + incidentHandler := service.NewIncidentService(s.gin, s.db, houstonClient.socketModeClient) // Add a header to the routes in houstonGroup houstonGroup.Use(func(c *gin.Context) { // Add your desired header key-value pair @@ -121,13 +120,13 @@ func (s *Server) incidentClientHandlerV2(houstonGroup *gin.RouterGroup) { origin := c.Request.Header.Get("Origin") c.Writer.Header().Set("Access-Control-Allow-Origin", origin) }) - incidentHandler := handler.NewIncidentHandler(s.gin, s.logger, s.db) + incidentHandler := handler.NewIncidentHandler(s.gin, s.db) houstonGroup.POST("/create-incident-v2", incidentHandler.HandleCreateIncident) } func (s *Server) incidentHandler(houstonGroup *gin.RouterGroup) { - houstonClient := NewHoustonClient(s.logger) - incidentHandler := service.NewIncidentService(s.gin, s.logger, s.db, houstonClient.socketModeClient) + houstonClient := NewHoustonClient() + incidentHandler := service.NewIncidentService(s.gin, s.db, houstonClient.socketModeClient) //Will be deprecated because they are not using hosuton group s.gin.GET("/incidents", incidentHandler.GetIncidents) @@ -143,15 +142,15 @@ func (s *Server) incidentHandler(houstonGroup *gin.RouterGroup) { } func (s *Server) logHandler(houstonGroup *gin.RouterGroup) { - logHandler := service.NewLogService(s.gin, s.logger, s.db) + logHandler := service.NewLogService(s.gin, s.db) houstonGroup.GET("/logs/:log_type/:id", logHandler.GetLogs) } func (s *Server) usersHandler(houstonGroup *gin.RouterGroup) { - houstonClient := NewHoustonClient(s.logger) - slackClient := slackbot.NewSlackClient(s.logger, houstonClient.socketModeClient) - authService := service.NewAuthService(s.mjolnirClient, slackClient, s.logger) - usersHandler := service.NewUserService(s.gin, s.logger, slackClient, s.db, houstonClient.socketModeClient, authService) + houstonClient := NewHoustonClient() + slackClient := slackbot.NewSlackClient(houstonClient.socketModeClient) + authService := service.NewAuthService(s.mjolnirClient, slackClient) + usersHandler := service.NewUserService(s.gin, slackClient, s.db, houstonClient.socketModeClient, authService) //Will be deprecated because they are not using hosuton group s.gin.GET("/users/:id", usersHandler.GetUserInfo) @@ -163,7 +162,7 @@ func (s *Server) usersHandler(houstonGroup *gin.RouterGroup) { houstonGroup.GET("/bots", usersHandler.GetAllHoustonUserBots) } func (s *Server) filtersHandler(houstonGroup *gin.RouterGroup) { - filtersHandler := service.NewFilterService(s.gin, s.logger, s.db) + filtersHandler := service.NewFilterService(s.gin, s.db) //Will be deprecated because they are not using hosuton group s.gin.GET("/filters", filtersHandler.GetFilters) @@ -173,7 +172,7 @@ func (s *Server) filtersHandler(houstonGroup *gin.RouterGroup) { // to be removed via internal bff func (s *Server) filtersHandlerV2(houstonGroup *gin.RouterGroup) { - filtersHandler := service.NewFilterService(s.gin, s.logger, s.db) + filtersHandler := service.NewFilterService(s.gin, s.db) houstonGroup.GET("/filters/v2", filtersHandler.GetFilters) } @@ -187,7 +186,7 @@ func (s *Server) readinessHandler(houstonGroup *gin.RouterGroup) { } func (s *Server) Start() { - s.logger.Info("starting houston server", zap.String("port", viper.GetString("port"))) + logger.Info("starting houston server", zap.String("port", viper.GetString("port"))) s.gin.Run(fmt.Sprintf(":%v", "8080")) } diff --git a/cmd/app/slack.go b/cmd/app/slack.go index 39cb660..ba89b36 100644 --- a/cmd/app/slack.go +++ b/cmd/app/slack.go @@ -1,6 +1,7 @@ package app import ( + "houston/logger" "os" "strings" @@ -8,24 +9,21 @@ import ( "github.com/slack-go/slack" "github.com/slack-go/slack/socketmode" - "go.uber.org/zap" ) type HoustonSlack struct { socketModeClient *socketmode.Client - logger *zap.Logger } -func NewHoustonClient(logger *zap.Logger) *HoustonSlack { - socketModeClient := slackConnect(logger) +func NewHoustonClient() *HoustonSlack { + socketModeClient := slackConnect() return &HoustonSlack{ socketModeClient: socketModeClient, - logger: logger, } } -func slackConnect(logger *zap.Logger) *socketmode.Client { +func slackConnect() *socketmode.Client { appToken := viper.GetString("houston.slack.app.token") if appToken == "" { logger.Error("HOUSTON_SLACK_APP_TOKEN must be set.") diff --git a/cmd/main.go b/cmd/main.go index 9430e57..6cbab43 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -4,7 +4,7 @@ import ( "houston/cmd/app" "houston/config" "houston/internal/clients" - "houston/log" + "houston/logger" "houston/pkg/postgres" "os" "time" @@ -19,9 +19,8 @@ import ( ) func main() { - log.InitLogger() - logger, _ := zap.NewProduction() - config.LoadHoustonConfig(logger) + logger.InitLogger() + config.LoadHoustonConfig() godotenv.Load() command := &cobra.Command{ @@ -31,9 +30,9 @@ func main() { RunE: func(cmd *cobra.Command, args []string) error { r := gin.New() - r.Use(ginzap.Ginzap(logger, time.RFC3339, true)) + r.Use(ginzap.Ginzap(logger.GetLogger(), time.RFC3339, true)) - r.Use(ginzap.RecoveryWithZap(logger, true)) + r.Use(ginzap.RecoveryWithZap(logger.GetLogger(), true)) houston := r.Group("/houston") db := postgres.NewGormClient( @@ -42,13 +41,14 @@ func main() { viper.GetString("postgres.connection.max.lifetime"), viper.GetInt("postgres.connections.max.idle"), viper.GetInt("postgres.connections.max.open"), - logger, ) httpClient := clients.NewHttpClient() - mjolnirClient := clients.NewMjolnirClient(httpClient.HttpClient, logger, - viper.GetString("mjolnir.service.url"), viper.GetString("mjolnir.realm.id"), + mjolnirClient := clients.NewMjolnirClient( + httpClient.HttpClient, + viper.GetString("mjolnir.service.url"), + viper.GetString("mjolnir.realm.id"), ) - sv := app.NewServer(r, logger, db, mjolnirClient) + sv := app.NewServer(r, db, mjolnirClient) sv.Handler(houston) sv.Start() diff --git a/common/util/common_util.go b/common/util/common_util.go index 302f586..3bd7b06 100644 --- a/common/util/common_util.go +++ b/common/util/common_util.go @@ -6,6 +6,7 @@ import ( "github.com/slack-go/slack" "github.com/slack-go/slack/socketmode" "go.uber.org/zap" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" diff --git a/common/util/incident_helper.go b/common/util/incident_helper.go index 7680015..e157c6a 100644 --- a/common/util/incident_helper.go +++ b/common/util/incident_helper.go @@ -5,6 +5,7 @@ import ( "github.com/slack-go/slack" "github.com/slack-go/slack/socketmode" "go.uber.org/zap" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -13,8 +14,6 @@ import ( "time" ) -var logger, _ = zap.NewProduction() - func AssignResponderToIncident( incidentRepo *incident.Repository, incidentEntity *incident.IncidentEntity, diff --git a/common/util/slack_helpers.go b/common/util/slack_helpers.go index c319cf1..4742453 100644 --- a/common/util/slack_helpers.go +++ b/common/util/slack_helpers.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/slack-go/slack" "go.uber.org/zap" + "houston/logger" "houston/pkg/slackbot" service "houston/service/request" "strings" @@ -28,7 +29,6 @@ func BuildSlackTextMessageFromMetaData(metaData []byte, isCodeBlock bool) (slack err := json.Unmarshal(metaData, &m) if err != nil { - logger := zap.Logger{} logger.Error("Error while unmarshalling metadata", zap.Error(err)) } textMessage := "" diff --git a/config/config.go b/config/config.go index 0ac598c..dd6d28f 100644 --- a/config/config.go +++ b/config/config.go @@ -1,6 +1,7 @@ package config import ( + "houston/logger" "os" "strings" @@ -8,7 +9,7 @@ import ( "go.uber.org/zap" ) -func LoadHoustonConfig(logger *zap.Logger) { +func LoadHoustonConfig() { viper.AutomaticEnv() viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) viper.SetConfigName("houston-config") diff --git a/go.mod b/go.mod index 24b63b3..42cd40b 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/spf13/viper v1.16.0 github.com/thoas/go-funk v0.9.3 go.uber.org/zap v1.24.0 + gorm.io/datatypes v1.2.0 gorm.io/driver/postgres v1.5.2 gorm.io/gorm v1.25.2 ) @@ -46,6 +47,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chromedp/sysutil v1.0.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.1.0 // indirect @@ -65,6 +67,7 @@ require ( google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/grpc v1.55.0 // indirect + gorm.io/driver/mysql v1.4.7 // indirect ) require ( diff --git a/internal/clients/mjolnir.go b/internal/clients/mjolnir.go index 3c6d9e6..ef761e7 100644 --- a/internal/clients/mjolnir.go +++ b/internal/clients/mjolnir.go @@ -4,24 +4,21 @@ import ( "encoding/json" "errors" "fmt" + "houston/logger" "houston/model/clients" "io" "net/http" - - "go.uber.org/zap" ) type MjolnirClient struct { HttpClient *http.Client - Logger *zap.Logger baseUrl string realmId string } -func NewMjolnirClient(httpClient *http.Client, logger *zap.Logger, baseUrl, realmId string) *MjolnirClient { +func NewMjolnirClient(httpClient *http.Client, baseUrl, realmId string) *MjolnirClient { return &MjolnirClient{ HttpClient: httpClient, - Logger: logger, baseUrl: baseUrl, realmId: realmId, } @@ -54,7 +51,7 @@ func (m *MjolnirClient) GetSessionResponse(sessionToken string) (*clients.Mjolni if err != nil { return nil, err } - m.Logger.Info(fmt.Sprintf("%v", response)) + logger.Info(fmt.Sprintf("%v", response)) return &response, nil } diff --git a/internal/cron/cron.go b/internal/cron/cron.go index cac6751..cd59b6e 100644 --- a/internal/cron/cron.go +++ b/internal/cron/cron.go @@ -2,7 +2,7 @@ package cron import ( "fmt" - "log" + "houston/logger" "strconv" "time" @@ -22,13 +22,13 @@ import ( "gorm.io/gorm" ) -func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger, incidentService *incident.Repository, severityService *severity.Repository, teamService *team.Repository, shedlockService *shedlock.Repository, userService *user.Repository) { +func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, incidentService *incident.Repository, severityService *severity.Repository, teamService *team.Repository, shedlockService *shedlock.Repository, userService *user.Repository) { //HOUSTON ESCALATE shedlockConfig := NewLockerDbWithLockTime(viper.GetInt("cron.job.lock.default.time.in.sec")) err := shedlockConfig.AddFun(viper.GetString("cron.job.name"), viper.GetString("cron.job.update.incident.interval"), shedlockService, func() { - UpdateIncidentByCronJob(socketModeClient, db, logger, incidentService, teamService, severityService, viper.GetString("cron.job.name")) + UpdateIncidentByCronJob(socketModeClient, db, incidentService, teamService, severityService, viper.GetString("cron.job.name")) }) if err != nil { logger.Error("HOUSTON_ESCALATE error: " + err.Error()) @@ -36,7 +36,7 @@ func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger //HOUSTON DAILY TEAM UPDATE err = shedlockConfig.AddFun(viper.GetString("cron.job.team_metric"), viper.GetString("cron.job.team_metric_interval"), shedlockService, func() { - postTeamMetrics(socketModeClient, logger, incidentService, teamService, severityService, viper.GetString("cron.job.team_metric")) + postTeamMetrics(socketModeClient, incidentService, teamService, severityService, viper.GetString("cron.job.team_metric")) }) if err != nil { logger.Error("HOUSTON_TEAM_METRICS error :" + err.Error()) @@ -44,7 +44,7 @@ func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger //HOUSTON ADDING USER err = shedlockConfig.AddFun(viper.GetString("cron.job.upsert_user"), viper.GetString("cron.job.upsert_user_interval"), shedlockService, func() { - UpsertUsers(socketModeClient, logger, userService) + UpsertUsers(socketModeClient, userService) }) if err != nil { logger.Error("HOUSTON_ADDING_USER error :" + err.Error()) @@ -52,7 +52,7 @@ func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger //Post SLA Breach Message to Incident Channels err = shedlockConfig.AddFun(viper.GetString("cron.job.sla_breach"), viper.GetString("cron.job.sla_breach_interval"), shedlockService, func() { - PostSLABreachMessageToIncidentChannels(socketModeClient, logger, teamService, incidentService, severityService) + PostSLABreachMessageToIncidentChannels(socketModeClient, teamService, incidentService, severityService) }) if err != nil { logger.Error("HOUSTON_SLA_BREACH error :" + err.Error()) @@ -60,7 +60,7 @@ func RunJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger shedlockConfig.Start() } -func UpdateIncidentByCronJob(socketModeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, name string) { +func UpdateIncidentByCronJob(socketModeClient *socketmode.Client, db *gorm.DB, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, name string) { fmt.Println("Running job at", time.Now().Format(time.RFC3339)) defer func() { @@ -97,11 +97,11 @@ func UpdateIncidentByCronJob(socketModeClient *socketmode.Client, db *gorm.DB, l //Looping through All incidents which are not resolved and sev tat is breaching for i := 0; i < len(incidents); i++ { logger.Info("TAT breached Not Resolved Incident found. Name: " + incidents[i].IncidentName + ". Severity: " + strconv.Itoa(int(incidents[i].SeverityId))) - updatingSevForEachInc(logger, incidents, i, incidentSeverityList, err, incidentService, socketModeClient, teamService, severityService) + updatingSevForEachInc(incidents, i, incidentSeverityList, err, incidentService, socketModeClient, teamService, severityService) } } -func updatingSevForEachInc(logger *zap.Logger, incidents []incident.IncidentEntity, i int, incidentSeverityList *[]severity.SeverityEntity, err error, incidentService *incident.Repository, socketModeClient *socketmode.Client, teamService *team.Repository, severityService *severity.Repository) { +func updatingSevForEachInc(incidents []incident.IncidentEntity, i int, incidentSeverityList *[]severity.SeverityEntity, err error, incidentService *incident.Repository, socketModeClient *socketmode.Client, teamService *team.Repository, severityService *severity.Repository) { var currentSeverityId = incidents[i].SeverityId var severityString string = "" @@ -137,8 +137,8 @@ func updatingSevForEachInc(logger *zap.Logger, incidents []incident.IncidentEnti } //UPDATING MESSAGE - s := action.NewIncidentChannelMessageUpdateAction(socketModeClient, logger, incidentService, teamService, severityService) - slackbotClient := slackbot.NewSlackClient(logger, socketModeClient) + s := action.NewIncidentChannelMessageUpdateAction(socketModeClient, incidentService, teamService, severityService) + slackbotClient := slackbot.NewSlackClient(socketModeClient) team, err := teamService.FindTeamById(incidents[i].TeamId) if err != nil { logger.Error("error in fetching team by id", zap.Uint("teamId", incidents[i].TeamId), zap.Error(err), zap.String("s", severityString)) @@ -157,7 +157,7 @@ func updatingSevForEachInc(logger *zap.Logger, incidents []incident.IncidentEnti } } -func postTeamMetrics(socketModeClient *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, name string) { +func postTeamMetrics(socketModeClient *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, name string) { fmt.Println("Running Team Metrics cron at", time.Now().Format(time.RFC3339)) defer func() { if r := recover(); r != nil { @@ -244,7 +244,7 @@ func postTeamMetrics(socketModeClient *socketmode.Client, logger *zap.Logger, in if teamsList[i].OncallHandle != "" { _, _, err = socketModeClient.PostMessage(viper.GetString("cron.job.team_metric_update_channel"), slack.MsgOptionText(fmt.Sprintf("<@%s>", teamsList[i].OncallHandle), false), slack.MsgOptionPostMessageParameters(params)) if err != nil { - log.Fatal(err) + logger.Fatal(err.Error()) } } @@ -342,7 +342,7 @@ func buildOnCallAndManagerBlock(onCallHandle string, managerHandle string) *slac return block } -func UpsertUsers(socketModeClient *socketmode.Client, logger *zap.Logger, userService *user.Repository) { +func UpsertUsers(socketModeClient *socketmode.Client, userService *user.Repository) { fmt.Println("Running upsertUsers job at", time.Now().Format(time.RFC3339)) userOptions := slack.GetUsersOptionLimit(600) @@ -422,7 +422,7 @@ func UpsertUsers(socketModeClient *socketmode.Client, logger *zap.Logger, userSe fmt.Println("Finishing upsertUsers job at", time.Now().Format(time.RFC3339)) } -func PostSLABreachMessageToIncidentChannels(socketModeClient *socketmode.Client, logger *zap.Logger, teamRepository *team.Repository, incidentRepository *incident.Repository, severityRepository *severity.Repository) { +func PostSLABreachMessageToIncidentChannels(socketModeClient *socketmode.Client, teamRepository *team.Repository, incidentRepository *incident.Repository, severityRepository *severity.Repository) { logger.Info(fmt.Sprintf("Running %v job at %v", viper.GetString("cron.job.sla_breach"), time.Now().Format(time.RFC822))) defer func() { if r := recover(); r != nil { diff --git a/internal/diagnostic/DiagnoseRepository.go b/internal/diagnostic/DiagnoseRepository.go index f74232a..ca3c1bd 100644 --- a/internal/diagnostic/DiagnoseRepository.go +++ b/internal/diagnostic/DiagnoseRepository.go @@ -1,21 +1,18 @@ package diagnostic import ( - "go.uber.org/zap" "gorm.io/gorm" "houston/internal/diagnostic/models/entity" "houston/model/severity" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB severityService *severity.Repository } -func NewDiagnoseRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewDiagnoseRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } diff --git a/internal/diagnostic/assembler.go b/internal/diagnostic/assembler.go index 234a9e4..60e5291 100644 --- a/internal/diagnostic/assembler.go +++ b/internal/diagnostic/assembler.go @@ -4,7 +4,6 @@ import ( "bytes" "github.com/google/uuid" "github.com/slack-go/slack" - "go.uber.org/zap" "houston/internal/diagnostic/models" ) @@ -13,7 +12,6 @@ type DataAssembler interface { } type AssemblerData struct { - logger *zap.Logger } type DataAssemblerImpl struct { @@ -24,19 +22,15 @@ type DataAssembler2Impl struct { assemblerData AssemblerData } -func NewDiagnosticDataAssembler(logger *zap.Logger) *DataAssemblerImpl { +func NewDiagnosticDataAssembler() *DataAssemblerImpl { return &DataAssemblerImpl{ - assemblerData: AssemblerData{ - logger: logger, - }, + assemblerData: AssemblerData{}, } } -func NewDiagnosticDataAssembler2(logger *zap.Logger) *DataAssembler2Impl { +func NewDiagnosticDataAssembler2() *DataAssembler2Impl { return &DataAssembler2Impl{ - assemblerData: AssemblerData{ - logger: logger, - }, + assemblerData: AssemblerData{}, } } diff --git a/internal/diagnostic/deploymentConfigHandler.go b/internal/diagnostic/deploymentConfigHandler.go index dc5df97..75e168a 100644 --- a/internal/diagnostic/deploymentConfigHandler.go +++ b/internal/diagnostic/deploymentConfigHandler.go @@ -8,6 +8,7 @@ import ( "go.uber.org/zap" "houston/config" "houston/internal/clients" + "houston/logger" "io" "net/http" "strconv" @@ -15,13 +16,12 @@ import ( func DeploymentConfigHandler(repo *Repository, alertId string) []string { deploymentConfigDetails, _ := repo.GetDeploymentConfigDetails(alertId) - logger, _ := zap.NewProduction() - config.LoadHoustonConfig(logger) + config.LoadHoustonConfig() godotenv.Load() logger.Info("DeploymentConfigHandler") client := clients.NewHttpClient() result := make([]string, 0) - configClient := NewConfigClient(client.HttpClient, logger) + configClient := NewConfigClient(client.HttpClient) result = append(result, ":ghost: *New and Updated configs* :ghost:") for _, deploymentConfig := range deploymentConfigDetails { baseUrl := deploymentConfig.DeploymentPortalUrl @@ -34,7 +34,7 @@ func DeploymentConfigHandler(repo *Repository, alertId string) []string { if configListResponse != nil && len(configListResponse) > 2 { deploymentConfig1, _ := configClient.getConfigResponseForVersion(config, deploymentConfig.ManifestId, strconv.Itoa(configListResponse[0])) deploymentConfig2, _ := configClient.getConfigResponseForVersion(config, deploymentConfig.ManifestId, strconv.Itoa(configListResponse[1])) - diff := calculateDiff(deploymentConfig1, deploymentConfig2, logger) + diff := calculateDiff(deploymentConfig1, deploymentConfig2) result = append(result, diff...) } } @@ -93,7 +93,7 @@ func (m *ConfigClient) getConfigResponse(config DeploymentConfig, manifestId str return response, nil } -func calculateDiff(response1 *ConfigResponse, response2 *ConfigResponse, logger *zap.Logger) []string { +func calculateDiff(response1 *ConfigResponse, response2 *ConfigResponse) []string { if response1 == nil || response2 == nil { logger.Info("either response1 is null or response1 is") } @@ -128,10 +128,9 @@ func getBearerTokenForConfigBaseUrl(baseUrl string) string { } } -func NewConfigClient(httpClient *http.Client, logger *zap.Logger) *ConfigClient { +func NewConfigClient(httpClient *http.Client) *ConfigClient { return &ConfigClient{ HttpClient: httpClient, - Logger: logger, } } diff --git a/internal/diagnostic/deploymentPortalHandler.go b/internal/diagnostic/deploymentPortalHandler.go index 643f7a6..cfdfc2d 100644 --- a/internal/diagnostic/deploymentPortalHandler.go +++ b/internal/diagnostic/deploymentPortalHandler.go @@ -6,9 +6,9 @@ import ( "fmt" "github.com/joho/godotenv" "github.com/spf13/viper" - "go.uber.org/zap" "houston/config" "houston/internal/clients" + "houston/logger" "io" "net/http" "time" @@ -16,13 +16,12 @@ import ( func DeploymentPortalHandler(repo *Repository, alertId string) []string { deplymentPortalDetails, _ := repo.GetDeploymentPortalDetails(alertId) - logger, _ := zap.NewProduction() - config.LoadHoustonConfig(logger) + config.LoadHoustonConfig() godotenv.Load() client := clients.NewHttpClient() result := make([]string, 0) - goCDClient := NewGoCDClient(client.HttpClient, logger) + goCDClient := NewGoCDClient(client.HttpClient) for _, deploymentPortal := range deplymentPortalDetails { baseUrl := deploymentPortal.DeploymentPortalUrl bearerToken := getBearerTokenForBaseUrl(baseUrl) @@ -66,7 +65,6 @@ func getBearerTokenForBaseUrl(baseUrl string) string { type GoCDClient struct { HttpClient *http.Client - Logger *zap.Logger baseUrl string config GoCDConnectionConfig } @@ -76,10 +74,9 @@ type GoCDConnectionConfig struct { BearerToken string } -func NewGoCDClient(httpClient *http.Client, logger *zap.Logger) *GoCDClient { +func NewGoCDClient(httpClient *http.Client) *GoCDClient { return &GoCDClient{ HttpClient: httpClient, - Logger: logger, } } @@ -118,7 +115,7 @@ func (m *GoCDClient) getPipelineHistoryResponse(config GoCDConnectionConfig, pip var response GoCdResponse err = json.Unmarshal(responseBody, &response) if err != nil { - m.Logger.Error(err.Error()) + logger.Error(err.Error()) return nil, err } diff --git a/internal/diagnostic/screenshot.go b/internal/diagnostic/screenshot.go index 9f5edd7..af0df81 100644 --- a/internal/diagnostic/screenshot.go +++ b/internal/diagnostic/screenshot.go @@ -8,10 +8,10 @@ import ( "github.com/spf13/viper" "go.uber.org/zap" "houston/config" + "houston/logger" "houston/pkg/s3" "image" "io" - "log" "net/http" "os" "path/filepath" @@ -31,17 +31,17 @@ func getImageFromFilePath(filePath string) (image.Image, error) { return image, err } -func TakeScreenshotAndUpload(logger *zap.Logger, repo *Repository, alertId string) []string { +func TakeScreenshotAndUpload(repo *Repository, alertId string) []string { grafanaLinks, _ := repo.GetGrafanaLinksForAlert(alertId) logger.Info("taking screenshot") fileLinkList := make([]string, 0) for _, links := range grafanaLinks { - takeScreenShotUrl(logger, &fileLinkList, links.EndpointUrl) + takeScreenShotUrl(&fileLinkList, links.EndpointUrl) } return fileLinkList } -func takeScreenShotUrl(logger *zap.Logger, fileList *[]string, url string) { +func takeScreenShotUrl(fileList *[]string, url string) { req, err := http.NewRequest("GET", url, nil) if err != nil { logger.Error(err.Error()) @@ -64,7 +64,7 @@ func takeScreenShotUrl(logger *zap.Logger, fileList *[]string, url string) { } defer file.Close() _, err = io.Copy(file, resp.Body) - link, err := upload(logger, fileName) + link, err := upload(fileName) if err != nil { return } @@ -73,7 +73,7 @@ func takeScreenShotUrl(logger *zap.Logger, fileList *[]string, url string) { *fileList = append(*fileList, link) } -func takeScreenShot(logger *zap.Logger, fileList *[]string, url string) { +func takeScreenShot(fileList *[]string, url string) { ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() @@ -83,13 +83,13 @@ func takeScreenShot(logger *zap.Logger, fileList *[]string, url string) { } id := uuid.New() if err := os.MkdirAll("images", os.ModePerm); err != nil { - log.Fatal(err) + logger.Fatal(err.Error()) } fileName := "images/" + id.String() + ".jpg" if err := os.WriteFile(fileName, buf, 0644); err != nil { logger.Fatal(err.Error()) } - link, err := upload(logger, fileName) + link, err := upload(fileName) if err != nil { logger.Error("failed", zap.Error(err)) return @@ -98,8 +98,8 @@ func takeScreenShot(logger *zap.Logger, fileList *[]string, url string) { *fileList = append(*fileList, link) } -func upload(logger *zap.Logger, fileName string) (string, error) { - s3Operations := s3.NewS3Operations(logger) +func upload(fileName string) (string, error) { + s3Operations := s3.NewS3Operations() s3BucketName := viper.GetString("S3_BUCKET_NAME") output, uploadErr := s3Operations.UploadFile(s3BucketName, filepath.Join(), fileName, fileName) if uploadErr != nil { @@ -119,8 +119,7 @@ func upload(logger *zap.Logger, fileName string) (string, error) { } func setHeaders(host string, imageBuf *[]byte) chromedp.Tasks { - logger, _ := zap.NewProduction() - config.LoadHoustonConfig(logger) + config.LoadHoustonConfig() godotenv.Load() token := fmt.Sprintf("Bearer %s", viper.GetString("grafana.token")) headers := map[string]interface{}{ diff --git a/internal/metrics/metric_publisher.go b/internal/metrics/metric_publisher.go index 685ba6a..0296cee 100644 --- a/internal/metrics/metric_publisher.go +++ b/internal/metrics/metric_publisher.go @@ -2,7 +2,7 @@ package metrics import ( "go.uber.org/zap" - "houston/log" + "houston/logger" "houston/model/ingester" "strconv" ) @@ -23,7 +23,7 @@ func (amp *PublisherImpl) PublishMetrics(metricAttributes ingester.MetricAttribu case ingester.API_METRICS: { if err := publishApiMetric(metricAttributes.ApiMetric); err != nil { - log.Error("error while publishing api metricAttributes", zap.Error(err)) + logger.Error("error while publishing api metricAttributes", zap.Error(err)) } return } diff --git a/internal/processor/action/diagnostic_command_action.go b/internal/processor/action/diagnostic_command_action.go index d98831c..24f95b2 100644 --- a/internal/processor/action/diagnostic_command_action.go +++ b/internal/processor/action/diagnostic_command_action.go @@ -33,39 +33,38 @@ type DeploymentConfigHandler struct { deploymentConfigHandlerData HandlerData } -func NewGrafanaActionHandler(logger *zap.Logger, client *socketmode.Client, repository *diagnostic.Repository) *GrafanaActionHandler { +func NewGrafanaActionHandler(client *socketmode.Client, repository *diagnostic.Repository) *GrafanaActionHandler { return &GrafanaActionHandler{ grafanaHandlerData: HandlerData{ - logger: logger, + client: client, repository: repository, }, } } -func NewKibanaActionHandler(logger *zap.Logger, client *socketmode.Client) *KibanaActionHandler { +func NewKibanaActionHandler(client *socketmode.Client) *KibanaActionHandler { return &KibanaActionHandler{ kibanaHandlerData: HandlerData{ - logger: logger, client: client, }, } } -func NewDeploymentPortalActionHandler(logger *zap.Logger, client *socketmode.Client, repository *diagnostic.Repository) *DeploymentPortalHandler { +func NewDeploymentPortalActionHandler(client *socketmode.Client, repository *diagnostic.Repository) *DeploymentPortalHandler { return &DeploymentPortalHandler{ deploymentPortalHandlerData: HandlerData{ - logger: logger, + client: client, repository: repository, }, } } -func NewDeploymentConfigActionHandler(logger *zap.Logger, client *socketmode.Client, repository *diagnostic.Repository) *DeploymentConfigHandler { +func NewDeploymentConfigActionHandler(client *socketmode.Client, repository *diagnostic.Repository) *DeploymentConfigHandler { return &DeploymentConfigHandler{ deploymentConfigHandlerData: HandlerData{ - logger: logger, + client: client, repository: repository, }, @@ -73,7 +72,7 @@ func NewDeploymentConfigActionHandler(logger *zap.Logger, client *socketmode.Cli } func (gah *GrafanaActionHandler) HandleAction(e *socketmode.Event, alertName string) models.Runbook { - imagePaths := diagnostic.TakeScreenshotAndUpload(gah.grafanaHandlerData.logger, gah.grafanaHandlerData.repository, alertName) + imagePaths := diagnostic.TakeScreenshotAndUpload(gah.grafanaHandlerData.repository, alertName) var runbook models.Runbook runbook.ImagePaths = imagePaths return runbook diff --git a/internal/processor/action/incident_assign_action.go b/internal/processor/action/incident_assign_action.go index 4712198..c991122 100644 --- a/internal/processor/action/incident_assign_action.go +++ b/internal/processor/action/incident_assign_action.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "github.com/slack-go/slack" @@ -13,14 +14,12 @@ import ( type AssignIncidentAction struct { client *socketmode.Client - logger *zap.Logger incidentRepository *incident.Repository } -func NewAssignIncidentAction(client *socketmode.Client, logger *zap.Logger, incidentRepository *incident.Repository) *AssignIncidentAction { +func NewAssignIncidentAction(client *socketmode.Client, incidentRepository *incident.Repository) *AssignIncidentAction { return &AssignIncidentAction{ client: client, - logger: logger, incidentRepository: incidentRepository, } } @@ -30,7 +29,7 @@ func (iap *AssignIncidentAction) IncidentAssignProcess(callback slack.Interactio modalRequest := view.GenerateModalForIncidentAssign(callback.Channel) _, err := iap.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - iap.logger.Error("houston slackbot open view command failed.", + logger.Error("houston slackbot open view command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -42,12 +41,12 @@ func (iap *AssignIncidentAction) IncidentAssignProcess(callback slack.Interactio func (iap *AssignIncidentAction) IncidentAssignModalCommandProcessing(callback slack.InteractionCallback, request *socketmode.Request) { incidentEntity, err := iap.incidentRepository.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - iap.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", callback.View.PrivateMetadata), zap.String("user_id", callback.User.ID), zap.Error(err)) return } else if incidentEntity == nil { - iap.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.View.PrivateMetadata), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -55,18 +54,18 @@ func (iap *AssignIncidentAction) IncidentAssignModalCommandProcessing(callback s assignIncidentRoleRequest := buildAssignIncidentRoleRequest(callback, incidentEntity) - iap.logger.Info("request", zap.Any("request", assignIncidentRoleRequest)) + logger.Info("request", zap.Any("request", assignIncidentRoleRequest)) err = iap.incidentRepository.UpsertIncidentRole(assignIncidentRoleRequest) if err != nil { - iap.logger.Error("UpsertIncidentRole failed", zap.Error(err)) + logger.Error("UpsertIncidentRole failed", zap.Error(err)) return } msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> is assigned to *%s* by <@%s>", assignIncidentRoleRequest.UserId, assignIncidentRoleRequest.Role, assignIncidentRoleRequest.CreatedById), false) _, _, errMessage := iap.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - iap.logger.Error("post response failed for IncidentAssignModalCommandProcessing", zap.Error(errMessage)) + logger.Error("post response failed for IncidentAssignModalCommandProcessing", zap.Error(errMessage)) return } diff --git a/internal/processor/action/incident_channel_message_update_action.go b/internal/processor/action/incident_channel_message_update_action.go index f121637..587b8fa 100644 --- a/internal/processor/action/incident_channel_message_update_action.go +++ b/internal/processor/action/incident_channel_message_update_action.go @@ -5,6 +5,7 @@ import ( "fmt" "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -16,7 +17,6 @@ import ( type IncidentChannelMessageUpdateAction struct { socketModeClient *socketmode.Client - logger *zap.Logger incidentService *incident.Repository teamService *team.Repository severityService *severity.Repository @@ -24,14 +24,12 @@ type IncidentChannelMessageUpdateAction struct { func NewIncidentChannelMessageUpdateAction( socketModeClient *socketmode.Client, - logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, ) *IncidentChannelMessageUpdateAction { return &IncidentChannelMessageUpdateAction{ socketModeClient: socketModeClient, - logger: logger, incidentService: incidentService, teamService: teamService, severityService: severityService, @@ -50,7 +48,7 @@ func (icm *IncidentChannelMessageUpdateAction) ProcessAction(channelId string) { for _, message := range *incidentChannels { _, _, _, err := icm.socketModeClient.UpdateMessage(message.SlackChannel, message.MessageTimeStamp, slack.MsgOptionAttachments(att)) if err != nil { - icm.logger.Error(fmt.Sprintf("exception occurred while updating the message to all the incident "+ + logger.Error(fmt.Sprintf("exception occurred while updating the message to all the incident "+ "channels for incidentId: %v", incidentEntity.ID), zap.Error(err)) return } diff --git a/internal/processor/action/incident_mark_duplicate_action.go b/internal/processor/action/incident_mark_duplicate_action.go index e4be86c..605816f 100644 --- a/internal/processor/action/incident_mark_duplicate_action.go +++ b/internal/processor/action/incident_mark_duplicate_action.go @@ -6,6 +6,7 @@ import ( "github.com/slack-go/slack/socketmode" "go.uber.org/zap" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/tag" @@ -16,17 +17,21 @@ import ( type DuplicateIncidentAction struct { client *socketmode.Client - logger *zap.Logger incidentRepository *incident.Repository tagService *tag.Repository teamRepository *team.Repository severityRepository *severity.Repository } -func NewDuplicateIncidentProcessor(client *socketmode.Client, logger *zap.Logger, incidentRepository *incident.Repository, tagService *tag.Repository, teamRepository *team.Repository, severityRepository *severity.Repository) *DuplicateIncidentAction { +func NewDuplicateIncidentProcessor( + client *socketmode.Client, + incidentRepository *incident.Repository, + tagService *tag.Repository, + teamRepository *team.Repository, + severityRepository *severity.Repository, +) *DuplicateIncidentAction { return &DuplicateIncidentAction{ client: client, - logger: logger, incidentRepository: incidentRepository, tagService: tagService, teamRepository: teamRepository, @@ -38,11 +43,11 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentRequestProcess(callback sla channelId := callback.Channel.ID incidentEntity, err := dip.incidentRepository.FindIncidentByChannelId(channelId) if err != nil { - dip.logger.Error("incident not found", + logger.Error("incident not found", zap.String("channel", channelId), zap.String("user_id", callback.User.ID), zap.Error(err)) } else if incidentEntity == nil { - dip.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", channelId), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -52,7 +57,7 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentRequestProcess(callback sla _, err = dip.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - dip.logger.Error("houston slackbot openview command for DuplicateIncidentRequestProcess failed.", + logger.Error("houston slackbot openview command for DuplicateIncidentRequestProcess failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", channelId), zap.Error(err)) return } @@ -66,12 +71,12 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentProcess(callback slack.Inte user := callback.User incidentEntity, err := dip.incidentRepository.FindIncidentByChannelId(channelId) if err != nil { - dip.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channelId), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - dip.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", channelId), zap.String("user_id", user.ID), zap.Error(err)) return @@ -92,20 +97,20 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentProcess(callback slack.Inte err = dip.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - dip.logger.Error("failed to update incident to duplicate state", + logger.Error("failed to update incident to duplicate state", zap.String("channel", channelId), zap.String("user_id", user.ID), zap.Error(err)) return } - dip.logger.Info("successfully marked the incident as duplicate", + logger.Info("successfully marked the incident as duplicate", zap.String("channel", channelId), zap.String("user_id", user.ID)) msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `updated status as %s. Attached to` <#%v>", callback.User.ID, incident.Duplicated, originalIncident.SlackChannel), false) _, _, errMessage := dip.client.PostMessage(channelId, msgOption) if errMessage != nil { - dip.logger.Error("post response failed for duplicate incident process", zap.String("channel", channelId), zap.Error(errMessage)) + logger.Error("post response failed for duplicate incident process", zap.String("channel", channelId), zap.Error(errMessage)) return } go func() { @@ -113,10 +118,10 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentProcess(callback slack.Inte _, _, errMessage = dip.client.PostMessage(originalIncident.SlackChannel, msgOption) if errMessage != nil { - dip.logger.Error("post response failed for duplicate incident process", zap.String("channel", originalIncident.SlackChannel), zap.Error(errMessage)) + logger.Error("post response failed for duplicate incident process", zap.String("channel", originalIncident.SlackChannel), zap.Error(errMessage)) return } - msgUpdate := NewIncidentChannelMessageUpdateAction(dip.client, dip.logger, dip.incidentRepository, dip.teamRepository, dip.severityRepository) + msgUpdate := NewIncidentChannelMessageUpdateAction(dip.client, dip.incidentRepository, dip.teamRepository, dip.severityRepository) msgUpdate.ProcessAction(incidentEntity.SlackChannel) if incidentEntity.SeverityId != 1 && incidentEntity.SeverityId != 2 { dip.client.ArchiveConversation(channelId) @@ -127,7 +132,7 @@ func (dip *DuplicateIncidentAction) DuplicateIncidentProcess(callback slack.Inte msgOption := slack.MsgOptionText(fmt.Sprintf("`Submitted incident id: %s is not a valid open incident. Check and resubmit`", incidentRca), false) _, errMessage := dip.client.PostEphemeral(channelId, user.ID, msgOption) if errMessage != nil { - dip.logger.Error("post response failed for Mark Duplicate Incident", zap.String("channel", channelId), zap.Error(errMessage)) + logger.Error("post response failed for Mark Duplicate Incident", zap.String("channel", channelId), zap.Error(errMessage)) return } } @@ -143,7 +148,7 @@ func (dip *DuplicateIncidentAction) isRcaValid(RCA string, currentId uint) (bool } originalIncident, err := dip.incidentRepository.FindIncidentById(uint(rca)) if err != nil { - dip.logger.Error("failed to get the incident for id: %v", zap.String("incident_id", RCA)) + logger.Error("failed to get the incident for id: %v", zap.String("incident_id", RCA)) return false, nil, err } if originalIncident == nil { diff --git a/internal/processor/action/incident_resolve_action.go b/internal/processor/action/incident_resolve_action.go index 76b7ab5..c6b73c7 100644 --- a/internal/processor/action/incident_resolve_action.go +++ b/internal/processor/action/incident_resolve_action.go @@ -2,6 +2,7 @@ package action import ( "fmt" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/tag" @@ -16,17 +17,15 @@ import ( type ResolveIncidentAction struct { client *socketmode.Client - logger *zap.Logger incidentService *incident.Repository tagService *tag.Repository teamRepository *team.Repository severityRepository *severity.Repository } -func NewIncidentResolveProcessor(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, tagService *tag.Repository, teamRepository *team.Repository, severityRepository *severity.Repository) *ResolveIncidentAction { +func NewIncidentResolveProcessor(client *socketmode.Client, incidentService *incident.Repository, tagService *tag.Repository, teamRepository *team.Repository, severityRepository *severity.Repository) *ResolveIncidentAction { return &ResolveIncidentAction{ client: client, - logger: logger, incidentService: incidentService, tagService: tagService, teamRepository: teamRepository, @@ -38,7 +37,7 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact channelId := callback.Channel.ID incidentEntity, err := irp.incidentService.FindIncidentByChannelId(channelId) if err != nil { - irp.logger.Error("incident not found", + logger.Error("incident not found", zap.String("channel", channelId), zap.String("user_id", callback.User.ID), zap.Error(err)) } @@ -54,7 +53,7 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact if t.Optional == false { incidentTag, err := irp.incidentService.GetIncidentTagByTagId(incidentEntity.ID, t.Id) if err != nil { - irp.logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) return } if nil == incidentTag { @@ -77,7 +76,7 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact } } } else { - irp.logger.Error(fmt.Sprintf("Tags not required for team id: %v and incident id: %v", incidentEntity.TeamId, incidentEntity.ID)) + logger.Error(fmt.Sprintf("Tags not required for team id: %v and incident id: %v", incidentEntity.TeamId, incidentEntity.ID)) } // check if all tags are set @@ -88,7 +87,7 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact err = irp.incidentService.UpdateIncident(incidentEntity) if err != nil { - irp.logger.Error("failed to update incident to resolve state", + logger.Error("failed to update incident to resolve state", zap.String("channel", channelId), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -99,22 +98,22 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact msgOption := slack.MsgOptionText(fmt.Sprintf("`RCA is not written`"), false) _, errMessage := irp.client.PostEphemeral(callback.Channel.ID, callback.User.ID, msgOption) if errMessage != nil { - irp.logger.Error("post response failed for set RCA", zap.Error(errMessage)) + logger.Error("post response failed for set RCA", zap.Error(errMessage)) return } } - irp.logger.Info("successfully resolved the incident", + logger.Info("successfully resolved the incident", zap.String("channel", channelId), zap.String("user_id", callback.User.ID)) msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `houston set status to %s`", callback.User.ID, incident.Resolved), false) _, _, errMessage := irp.client.PostMessage(callback.Channel.ID, msgOption) if errMessage != nil { - irp.logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) + logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) return } - msgUpdate := NewIncidentChannelMessageUpdateAction(irp.client, irp.logger, irp.incidentService, irp.teamRepository, irp.severityRepository) + msgUpdate := NewIncidentChannelMessageUpdateAction(irp.client, irp.incidentService, irp.teamRepository, irp.severityRepository) msgUpdate.ProcessAction(incidentEntity.SlackChannel) if incidentEntity.SeverityId != 1 && incidentEntity.SeverityId != 2 { irp.client.ArchiveConversation(channelId) @@ -123,7 +122,7 @@ func (irp *ResolveIncidentAction) IncidentResolveProcess(callback slack.Interact msgOption := slack.MsgOptionText(fmt.Sprintf("`Please set tag value`"), false) _, errMessage := irp.client.PostEphemeral(callback.Channel.ID, callback.User.ID, msgOption) if errMessage != nil { - irp.logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) + logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) return } diff --git a/internal/processor/action/incident_show_tags_action.go b/internal/processor/action/incident_show_tags_action.go index a31f6b8..dfdee0f 100644 --- a/internal/processor/action/incident_show_tags_action.go +++ b/internal/processor/action/incident_show_tags_action.go @@ -2,6 +2,7 @@ package action import ( "fmt" + "houston/logger" "houston/model/incident" "houston/model/tag" @@ -11,16 +12,15 @@ import ( ) type IncidentShowTagsAction struct { - client *socketmode.Client - logger *zap.Logger + client *socketmode.Client + incidentService *incident.Repository tagService *tag.Repository } -func NewIncidentShowTagsProcessor(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, tagService *tag.Repository) *IncidentShowTagsAction { +func NewIncidentShowTagsProcessor(client *socketmode.Client, incidentService *incident.Repository, tagService *tag.Repository) *IncidentShowTagsAction { return &IncidentShowTagsAction{ client: client, - logger: logger, incidentService: incidentService, tagService: tagService, } @@ -29,13 +29,13 @@ func NewIncidentShowTagsProcessor(client *socketmode.Client, logger *zap.Logger, func (isp *IncidentShowTagsAction) IncidentShowTagsRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { incidentEntity, err := isp.incidentService.FindIncidentByChannelId(callback.Channel.ID) if err != nil || incidentEntity == nil { - isp.logger.Error(fmt.Sprintf("failure while getting incident for channel: %v", callback.Channel.ID)) + logger.Error(fmt.Sprintf("failure while getting incident for channel: %v", callback.Channel.ID)) return } incidentTagsEntities, err := isp.incidentService.GetIncidentTagsByIncidentId(incidentEntity.ID) if err != nil || incidentTagsEntities == nil { - isp.logger.Error(fmt.Sprintf("failure while getting incident tags for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting incident tags for incident id: %v", incidentEntity.ID)) return } @@ -44,7 +44,7 @@ func (isp *IncidentShowTagsAction) IncidentShowTagsRequestProcess(callback slack for _, incidentTagEntity := range *incidentTagsEntities { tagEntity, err := isp.tagService.FindById(incidentTagEntity.TagId) if err != nil || tagEntity == nil { - isp.logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) return } @@ -53,7 +53,7 @@ func (isp *IncidentShowTagsAction) IncidentShowTagsRequestProcess(callback slack } else if incidentTagEntity.TagValueIds != nil { tagValues, err := isp.tagService.FindTagValuesByIds(incidentTagEntity.TagValueIds) if err != nil { - isp.logger.Error(fmt.Sprintf("failure while getting tag values for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting tag values for incident id: %v", incidentEntity.ID)) return } else if tagValues == nil { continue @@ -79,7 +79,7 @@ func (isp *IncidentShowTagsAction) IncidentShowTagsRequestProcess(callback slack msgOption := slack.MsgOptionText(fmt.Sprintf(finalMsg), true) _, errMessage := isp.client.PostEphemeral(callback.Channel.ID, callback.User.ID, msgOption) if errMessage != nil { - isp.logger.Error("post ephemeral message response failed for IncidentShowTagsRequestProcess", zap.Error(errMessage)) + logger.Error("post ephemeral message response failed for IncidentShowTagsRequestProcess", zap.Error(errMessage)) return } var payload interface{} diff --git a/internal/processor/action/incident_update_description_action.go b/internal/processor/action/incident_update_description_action.go index 621d7e0..3f0c5f5 100644 --- a/internal/processor/action/incident_update_description_action.go +++ b/internal/processor/action/incident_update_description_action.go @@ -3,6 +3,7 @@ package action import ( "fmt" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "github.com/slack-go/slack" @@ -12,14 +13,12 @@ import ( type IncidentUpdateDescriptionAction struct { client *socketmode.Client - logger *zap.Logger incidentService *incident.Repository } -func NewIncidentUpdateDescriptionAction(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository) *IncidentUpdateDescriptionAction { +func NewIncidentUpdateDescriptionAction(client *socketmode.Client, incidentService *incident.Repository) *IncidentUpdateDescriptionAction { return &IncidentUpdateDescriptionAction{ client: client, - logger: logger, incidentService: incidentService, } } @@ -27,12 +26,12 @@ func NewIncidentUpdateDescriptionAction(client *socketmode.Client, logger *zap.L func (idp *IncidentUpdateDescriptionAction) IncidentUpdateDescriptionRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { result, err := idp.incidentService.FindIncidentByChannelId(callback.Channel.ID) if err != nil { - idp.logger.Error("FindIncidentByChannelId error ", + logger.Error("FindIncidentByChannelId error ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return } else if result == nil { - idp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -41,7 +40,7 @@ func (idp *IncidentUpdateDescriptionAction) IncidentUpdateDescriptionRequestProc _, err = idp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - idp.logger.Error("houston slackbot openview command for IncidentUpdateDescriptionRequestProcess failed.", + logger.Error("houston slackbot openview command for IncidentUpdateDescriptionRequestProcess failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -52,12 +51,12 @@ func (idp *IncidentUpdateDescriptionAction) IncidentUpdateDescriptionRequestProc func (itp *IncidentUpdateDescriptionAction) IncidentUpdateDescription(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := itp.incidentService.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - itp.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - itp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -69,7 +68,7 @@ func (itp *IncidentUpdateDescriptionAction) IncidentUpdateDescription(callback s incidentEntity.UpdatedBy = user.ID err = itp.incidentService.UpdateIncident(incidentEntity) if err != nil { - itp.logger.Error("IncidentUpdateDescription error", + logger.Error("IncidentUpdateDescription error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -77,7 +76,7 @@ func (itp *IncidentUpdateDescriptionAction) IncidentUpdateDescription(callback s msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `houston set description to %s`", user.ID, incidentEntity.Description), false) _, _, errMessage := itp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - itp.logger.Error("post response failed for IncidentUpdateDescription", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateDescription", zap.Error(errMessage)) return } diff --git a/internal/processor/action/incident_update_resolution_text_action.go b/internal/processor/action/incident_update_resolution_text_action.go index 4223604..782ef6f 100644 --- a/internal/processor/action/incident_update_resolution_text_action.go +++ b/internal/processor/action/incident_update_resolution_text_action.go @@ -6,6 +6,7 @@ import ( "github.com/slack-go/slack/socketmode" "go.uber.org/zap" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "regexp" ) @@ -16,10 +17,9 @@ type IncidentUpdateRcaAction struct { incidentRepository *incident.Repository } -func NewIncidentUpdateRcaAction(client *socketmode.Client, logger *zap.Logger, incidentRepository *incident.Repository) *IncidentUpdateRcaAction { +func NewIncidentUpdateRcaAction(client *socketmode.Client, incidentRepository *incident.Repository) *IncidentUpdateRcaAction { return &IncidentUpdateRcaAction{ client: client, - logger: logger, incidentRepository: incidentRepository, } } @@ -27,12 +27,12 @@ func NewIncidentUpdateRcaAction(client *socketmode.Client, logger *zap.Logger, i func (idp *IncidentUpdateRcaAction) IncidentUpdateRcaRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { result, err := idp.incidentRepository.FindIncidentByChannelId(callback.Channel.ID) if err != nil { - idp.logger.Error("FindIncidentByChannelId error ", + logger.Error("FindIncidentByChannelId error ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return } else if result == nil { - idp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -41,7 +41,7 @@ func (idp *IncidentUpdateRcaAction) IncidentUpdateRcaRequestProcess(callback sla _, err = idp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - idp.logger.Error("houston slackbot openview command for IncidentUpdateRcaRequestProcess failed.", + logger.Error("houston slackbot openview command for IncidentUpdateRcaRequestProcess failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -52,12 +52,12 @@ func (idp *IncidentUpdateRcaAction) IncidentUpdateRcaRequestProcess(callback sla func (itp *IncidentUpdateRcaAction) IncidentUpdateRca(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := itp.incidentRepository.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - itp.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - itp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -69,7 +69,7 @@ func (itp *IncidentUpdateRcaAction) IncidentUpdateRca(callback slack.Interaction incidentEntity.UpdatedBy = user.ID err = itp.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - itp.logger.Error("IncidentUpdateRca error", + logger.Error("IncidentUpdateRca error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -78,7 +78,7 @@ func (itp *IncidentUpdateRcaAction) IncidentUpdateRca(callback slack.Interaction msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `houston has updated RCA to \"%s\"`", user.ID, re.ReplaceAllString(incidentEntity.RCA, " ")), false) _, _, errMessage := itp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - itp.logger.Error("post response failed for IncidentUpdateRca", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateRca", zap.Error(errMessage)) return } diff --git a/internal/processor/action/incident_update_severity_action.go b/internal/processor/action/incident_update_severity_action.go index 28c1d60..f84c8e3 100644 --- a/internal/processor/action/incident_update_severity_action.go +++ b/internal/processor/action/incident_update_severity_action.go @@ -4,6 +4,7 @@ import ( "fmt" incidentHelper "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -18,17 +19,15 @@ import ( type IncidentUpdateSevertityAction struct { client *socketmode.Client - logger *zap.Logger severityRepository *severity.Repository incidentRepository *incident.Repository teamRepository *team.Repository slackbotClient *slackbot.Client } -func NewIncidentUpdateSeverityAction(client *socketmode.Client, logger *zap.Logger, incidentRepository *incident.Repository, severityRepository *severity.Repository, teamRepository *team.Repository, slackbotClient *slackbot.Client) *IncidentUpdateSevertityAction { +func NewIncidentUpdateSeverityAction(client *socketmode.Client, incidentRepository *incident.Repository, severityRepository *severity.Repository, teamRepository *team.Repository, slackbotClient *slackbot.Client) *IncidentUpdateSevertityAction { return &IncidentUpdateSevertityAction{ client: client, - logger: logger, severityRepository: severityRepository, incidentRepository: incidentRepository, teamRepository: teamRepository, @@ -39,7 +38,7 @@ func NewIncidentUpdateSeverityAction(client *socketmode.Client, logger *zap.Logg func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverityRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { incidentSeverity, err := isp.severityRepository.GetAllActiveSeverity() if err != nil || incidentSeverity == nil { - isp.logger.Error("FindSeverityEntity error", + logger.Error("FindSeverityEntity error", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -48,7 +47,7 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverityRequestProcess(c _, err = isp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - isp.logger.Error("houston slackbot openview command failed.", + logger.Error("houston slackbot openview command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -60,26 +59,26 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverityRequestProcess(c func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := isp.incidentRepository.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - isp.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - isp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return } - incidentSeverityId := buildUpdateIncidentSeverityRequest(isp.logger, callback.View.State.Values) + incidentSeverityId := buildUpdateIncidentSeverityRequest(callback.View.State.Values) incidentSeverityEntity, err := isp.severityRepository.FindIncidentSeverityEntityById(incidentSeverityId) if err != nil { - isp.logger.Error("FindIncidentSeverityEntityById error", + logger.Error("FindIncidentSeverityEntityById error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentSeverityEntity == nil { - isp.logger.Error("SeverityEntity not found", + logger.Error("SeverityEntity not found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -89,7 +88,7 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack. incidentEntity.SeverityTat = time.Now().AddDate(0, 0, incidentSeverityEntity.Sla) err = isp.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - isp.logger.Error("UpdateIncident error", + logger.Error("UpdateIncident error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) } @@ -102,17 +101,17 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack. msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `set severity to %s (%s)`", user.ID, incidentSeverityEntity.Name, incidentSeverityEntity.Description), false) _, _, errMessage := isp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - isp.logger.Error("post response failed for IncidentUpdateSeverity", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateSeverity", zap.Error(errMessage)) return } if err != nil { - isp.logger.Error("FindTeamEntityById error", + logger.Error("FindTeamEntityById error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if teamEntity == nil { - isp.logger.Error("Team Not Found", + logger.Error("Team Not Found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -126,7 +125,7 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack. } _, _, errMessage = isp.client.PostMessage(callback.View.PrivateMetadata, slack.MsgOptionAttachments(att)) if errMessage != nil { - isp.logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) return } @@ -151,7 +150,7 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack. user.ID, ) if err != nil { - isp.logger.Error("[Update incident severity] Error while assigning responder to the incident ", zap.Error(err)) + logger.Error("[Update incident severity] Error while assigning responder to the incident ", zap.Error(err)) } var payload interface{} @@ -159,7 +158,7 @@ func (isp *IncidentUpdateSevertityAction) IncidentUpdateSeverity(callback slack. } // TODO - ADD USER ACCORDING TO SEVERITY -func buildUpdateIncidentSeverityRequest(logger *zap.Logger, blockActions map[string]map[string]slack.BlockAction) int { +func buildUpdateIncidentSeverityRequest(blockActions map[string]map[string]slack.BlockAction) int { var requestMap = make(map[string]string, 0) for _, actions := range blockActions { for actionID, a := range actions { diff --git a/internal/processor/action/incident_update_status_action.go b/internal/processor/action/incident_update_status_action.go index bfec9cc..cd9516e 100644 --- a/internal/processor/action/incident_update_status_action.go +++ b/internal/processor/action/incident_update_status_action.go @@ -4,6 +4,7 @@ import ( "fmt" "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/tag" @@ -18,17 +19,15 @@ import ( type UpdateIncidentAction struct { client *socketmode.Client - logger *zap.Logger incidentService *incident.Repository tagService *tag.Repository teamRepository *team.Repository severityRepository *severity.Repository } -func NewIncidentUpdateAction(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, tagService *tag.Repository, teamRepository *team.Repository, severityRepository *severity.Repository) *UpdateIncidentAction { +func NewIncidentUpdateAction(client *socketmode.Client, incidentService *incident.Repository, tagService *tag.Repository, teamRepository *team.Repository, severityRepository *severity.Repository) *UpdateIncidentAction { return &UpdateIncidentAction{ client: client, - logger: logger, incidentService: incidentService, tagService: tagService, teamRepository: teamRepository, @@ -39,7 +38,7 @@ func NewIncidentUpdateAction(client *socketmode.Client, logger *zap.Logger, inci func (isp *UpdateIncidentAction) IncidentUpdateStatusRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { incidentStatuses, err := isp.incidentService.FetchAllNonTerminalIncidentStatuses() if err != nil || incidentStatuses == nil { - isp.logger.Error("failed to get the all active incident statuses") + logger.Error("failed to get the all active incident statuses") return } @@ -47,7 +46,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatusRequestProcess(callback sla _, err = isp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - isp.logger.Error("houston slackbot openview command failed.", + logger.Error("houston slackbot openview command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -58,27 +57,27 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatusRequestProcess(callback sla func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := isp.incidentService.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - isp.logger.Error("FindIncidentBySlackChannelId error", + logger.Error("FindIncidentBySlackChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - isp.logger.Error("IncidentEntity Object Not Found", + logger.Error("IncidentEntity Object Not Found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } - incidentStatusId := buildUpdateIncidentStatusRequest(isp.logger, callback.View.State.Values) + incidentStatusId := buildUpdateIncidentStatusRequest(callback.View.State.Values) result, err := isp.incidentService.FindIncidentStatusById(incidentStatusId) if err != nil { - isp.logger.Error("FindIncidentStatusById error", + logger.Error("FindIncidentStatusById error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if result == nil { - isp.logger.Error("IncidentStatusEntity Object not found", + logger.Error("IncidentStatusEntity Object not found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -86,7 +85,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction tags, err := isp.tagService.FindTagsByTeamId(incidentEntity.TeamId) if err != nil || tags == nil { - isp.logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) return } var flag = true @@ -94,7 +93,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction if t.Optional == false { incidentTag, err := isp.incidentService.GetIncidentTagByTagId(incidentEntity.ID, t.Id) if err != nil { - isp.logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) return } if nil == incidentTag { @@ -125,7 +124,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction msgOption := slack.MsgOptionText(fmt.Sprintf("`Please set tag value`"), false) _, errMessage := isp.client.PostEphemeral(callback.View.PrivateMetadata, callback.User.ID, msgOption) if errMessage != nil { - isp.logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) + logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) return } var payload interface{} @@ -139,7 +138,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction } err = isp.incidentService.UpdateIncident(incidentEntity) if err != nil { - isp.logger.Error("UpdateIncident error", + logger.Error("UpdateIncident error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) } @@ -147,11 +146,11 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction go func() { errMessage := util.PostIncidentStatusUpdateMessage(user.ID, result.Name, callback.View.PrivateMetadata, isp.client) if errMessage != nil { - isp.logger.Error("post response failed for IncidentUpdateStatus", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateStatus", zap.Error(errMessage)) return } - msgUpdate := NewIncidentChannelMessageUpdateAction(isp.client, isp.logger, isp.incidentService, isp.teamRepository, isp.severityRepository) + msgUpdate := NewIncidentChannelMessageUpdateAction(isp.client, isp.incidentService, isp.teamRepository, isp.severityRepository) msgUpdate.ProcessAction(incidentEntity.SlackChannel) if result.IsTerminalStatus && (incidentEntity.SeverityId != 1 && incidentEntity.SeverityId != 2) { isp.client.ArchiveConversation(callback.View.PrivateMetadata) @@ -162,7 +161,7 @@ func (isp *UpdateIncidentAction) IncidentUpdateStatus(callback slack.Interaction isp.client.Ack(*request, payload) } -func buildUpdateIncidentStatusRequest(logger *zap.Logger, blockActions map[string]map[string]slack.BlockAction) uint { +func buildUpdateIncidentStatusRequest(blockActions map[string]map[string]slack.BlockAction) uint { var requestMap = make(map[string]string, 0) for _, actions := range blockActions { for actionID, a := range actions { diff --git a/internal/processor/action/incident_update_tags_action.go b/internal/processor/action/incident_update_tags_action.go index 8c7c6f3..35453c0 100644 --- a/internal/processor/action/incident_update_tags_action.go +++ b/internal/processor/action/incident_update_tags_action.go @@ -4,6 +4,7 @@ import ( "fmt" "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/tag" "houston/model/team" @@ -20,17 +21,15 @@ import ( type IncidentUpdateTagsAction struct { client *socketmode.Client - logger *zap.Logger incidentRepository *incident.Repository teamRepository *team.Repository tagRepository *tag.Repository } -func NewIncidentUpdateTagsAction(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, +func NewIncidentUpdateTagsAction(client *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, tagService *tag.Repository) *IncidentUpdateTagsAction { return &IncidentUpdateTagsAction{ client: client, - logger: logger, incidentRepository: incidentService, teamRepository: teamService, tagRepository: tagService, @@ -40,19 +39,19 @@ func NewIncidentUpdateTagsAction(client *socketmode.Client, logger *zap.Logger, func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { incidentEntity, err := itp.incidentRepository.FindIncidentByChannelId(callback.Channel.ID) if err != nil || incidentEntity == nil { - itp.logger.Error(fmt.Sprintf("failure while getting incident entity for channel: %v", callback.Channel.ID)) + logger.Error(fmt.Sprintf("failure while getting incident entity for channel: %v", callback.Channel.ID)) return } team, err := itp.teamRepository.FindTeamById(incidentEntity.TeamId) if err != nil || team == nil { - itp.logger.Error(fmt.Sprintf("failure while getting team for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting team for incident id: %v", incidentEntity.ID)) return } tags, err := itp.tagRepository.FindTagsByTeamId(team.ID) if err != nil || tags == nil { - itp.logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while getting tags for incident id: %v", incidentEntity.ID)) return } @@ -61,13 +60,13 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback s for _, t := range *tags { tagValues, err := itp.tagRepository.FindTagValuesByTagId(t.Id) if err != nil { - itp.logger.Error(fmt.Sprintf("failed to get the tag values for tagId: %v", t.Id)) + logger.Error(fmt.Sprintf("failed to get the tag values for tagId: %v", t.Id)) return } incidentTag, err := itp.incidentRepository.GetIncidentTagByTagId(incidentEntity.ID, t.Id) if err != nil { - itp.logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failed to get the incident tag for incidentId: %v", incidentEntity.ID)) return } @@ -76,7 +75,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback s if incidentTag == nil { incidentTag, err = itp.incidentRepository.CreateIncidentTag(incidentEntity.ID, t.Id) if err != nil || incidentTag == nil { - itp.logger.Error(fmt.Sprintf("failure while creating tag for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failure while creating tag for incident id: %v", incidentEntity.ID)) return } } @@ -93,7 +92,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback s var initialTags []tag.TagValueEntity if tagValues == nil { - itp.logger.Error(fmt.Sprintf("no tag values are present for tag: %v", t.Id)) + logger.Error(fmt.Sprintf("no tag values are present for tag: %v", t.Id)) return } @@ -118,7 +117,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback s _, err = itp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - itp.logger.Error("houston slackbot openview command for IncidentUpdateTagsRequestProcess failed.", + logger.Error("houston slackbot openview command for IncidentUpdateTagsRequestProcess failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -129,13 +128,13 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTagsRequestProcess(callback s func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.InteractionCallback, request *socketmode.Request) { incidentEntity, err := itp.incidentRepository.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil || incidentEntity == nil { - itp.logger.Error(fmt.Sprintf("failed to get the incicent for channel id: %v", callback.View.PrivateMetadata)) + logger.Error(fmt.Sprintf("failed to get the incicent for channel id: %v", callback.View.PrivateMetadata)) return } incidentTagsEntity, err := itp.incidentRepository.GetIncidentTagsByIncidentId(incidentEntity.ID) if err != nil || incidentTagsEntity == nil { - itp.logger.Error(fmt.Sprintf("failed to get the incicent tags for incident id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("failed to get the incicent tags for incident id: %v", incidentEntity.ID)) return } @@ -154,7 +153,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti incidentEntity.RCA = rca err = itp.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - itp.logger.Error("IncidentUpdateRca error", + logger.Error("IncidentUpdateRca error", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -163,7 +162,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `houston has updated RCA to \"%s\"`", callback.User.ID, re.ReplaceAllString(incidentEntity.RCA, " ")), false) _, _, errMessage := itp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - itp.logger.Error("post response failed for IncidentUpdateRca", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateRca", zap.Error(errMessage)) return } } @@ -172,7 +171,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti for _, it := range *incidentTagsEntity { tagEntity, err := itp.tagRepository.FindById(it.TagId) if err != nil || tagEntity == nil { - itp.logger.Error(fmt.Sprintf("failed to get the tag for id: %v", it.TagId)) + logger.Error(fmt.Sprintf("failed to get the tag for id: %v", it.TagId)) return } var _, isValidTeamTag = actions[tagEntity.ActionId] @@ -184,7 +183,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti localValue := actions[tagEntity.ActionId].SelectedOption.Value value, err := strconv.Atoi(localValue) if err != nil { - itp.logger.Error(fmt.Sprintf("string to int conversion failed for incident: %v, tag value: %v", + logger.Error(fmt.Sprintf("string to int conversion failed for incident: %v, tag value: %v", incidentEntity.ID, localValue)) return } @@ -194,7 +193,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti for _, o := range actions[tagEntity.ActionId].SelectedOptions { localValue, err := strconv.Atoi(o.Value) if err != nil { - itp.logger.Error(fmt.Sprintf("string to int conversion failed for incident: %v, tag value: %v", + logger.Error(fmt.Sprintf("string to int conversion failed for incident: %v, tag value: %v", incidentEntity.ID, localValue)) return } @@ -206,7 +205,7 @@ func (itp *IncidentUpdateTagsAction) IncidentUpdateTags(callback slack.Interacti _, err = itp.incidentRepository.SaveIncidentTag(it) if err != nil { - itp.logger.Error(fmt.Sprintf("Failed while saving incident tag values for incidentId: %v", + logger.Error(fmt.Sprintf("Failed while saving incident tag values for incidentId: %v", callback.View.PrivateMetadata), zap.Error(err)) return } diff --git a/internal/processor/action/incident_update_title_action.go b/internal/processor/action/incident_update_title_action.go index ac3072c..b91ea38 100644 --- a/internal/processor/action/incident_update_title_action.go +++ b/internal/processor/action/incident_update_title_action.go @@ -3,6 +3,7 @@ package action import ( "fmt" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -14,18 +15,17 @@ import ( ) type IncidentUpdateTitleAction struct { - client *socketmode.Client - logger *zap.Logger + client *socketmode.Client + incidentService *incident.Repository teamService *team.Repository severityService *severity.Repository slackbotClient *slackbot.Client } -func NewIncidentUpdateTitleAction(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, slackbotClient *slackbot.Client) *IncidentUpdateTitleAction { +func NewIncidentUpdateTitleAction(client *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, slackbotClient *slackbot.Client) *IncidentUpdateTitleAction { return &IncidentUpdateTitleAction{ client: client, - logger: logger, incidentService: incidentService, teamService: teamService, severityService: severityService, @@ -36,12 +36,12 @@ func NewIncidentUpdateTitleAction(client *socketmode.Client, logger *zap.Logger, func (itp *IncidentUpdateTitleAction) IncidentUpdateTitleRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { result, err := itp.incidentService.FindIncidentByChannelId(callback.Channel.ID) if err != nil { - itp.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return } else if result == nil { - itp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -50,7 +50,7 @@ func (itp *IncidentUpdateTitleAction) IncidentUpdateTitleRequestProcess(callback _, err = itp.client.OpenView(callback.TriggerID, modalRequest) if err != nil { - itp.logger.Error("houston slackbot openview command for IncidentUpdateTitleRequestProcess failed.", + logger.Error("houston slackbot openview command for IncidentUpdateTitleRequestProcess failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -61,12 +61,12 @@ func (itp *IncidentUpdateTitleAction) IncidentUpdateTitleRequestProcess(callback func (itp *IncidentUpdateTitleAction) IncidentUpdateTitle(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := itp.incidentService.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - itp.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - itp.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -78,7 +78,7 @@ func (itp *IncidentUpdateTitleAction) IncidentUpdateTitle(callback slack.Interac incidentEntity.UpdatedBy = user.ID err = itp.incidentService.UpdateIncident(incidentEntity) if err != nil { - itp.logger.Error("IncidentUpdateTitle error", + logger.Error("IncidentUpdateTitle error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -86,41 +86,41 @@ func (itp *IncidentUpdateTitleAction) IncidentUpdateTitle(callback slack.Interac msgOption := slack.MsgOptionText(fmt.Sprintf("<@%s> *>* `houston set title to %s`", user.ID, incidentEntity.Title), false) _, _, errMessage := itp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - itp.logger.Error("post response failed for IncidentUpdateTitle", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateTitle", zap.Error(errMessage)) return } result, err := itp.incidentService.FindIncidentSeverityTeamJoin(incidentEntity.SlackChannel) if err != nil { - itp.logger.Error("query failed for FindIncidentSeverityTeamJoin", zap.Error(errMessage)) + logger.Error("query failed for FindIncidentSeverityTeamJoin", zap.Error(errMessage)) return } msgOption = slack.MsgOptionText(fmt.Sprintf("set the channel topic: %s : %s %s | %s", result.TeamName, result.SeverityName, incidentEntity.IncidentName, incidentEntity.Title), false) _, _, errMessage = itp.client.PostMessage(callback.View.PrivateMetadata, msgOption) if errMessage != nil { - itp.logger.Error("post response failed for IncidentUpdateTitle", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateTitle", zap.Error(errMessage)) return } severityEntity, err := itp.severityService.FindSeverityById(incidentEntity.SeverityId) if err != nil { - itp.logger.Error("error in fetching severity in incident update type action", zap.String("channel", incidentEntity.SlackChannel), + logger.Error("error in fetching severity in incident update type action", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } else if severityEntity == nil { - itp.logger.Info("severity not found in incident update type action", zap.String("channel", incidentEntity.SlackChannel), + logger.Info("severity not found in incident update type action", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID)) return } teamEntity, err := itp.teamService.FindTeamById(incidentEntity.TeamId) if err != nil { - itp.logger.Error("FindTeamEntityById error", + logger.Error("FindTeamEntityById error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if teamEntity == nil { - itp.logger.Error("Team Not Found", + logger.Error("Team Not Found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return diff --git a/internal/processor/action/incident_update_type_action.go b/internal/processor/action/incident_update_type_action.go index ebfd893..873cd6d 100644 --- a/internal/processor/action/incident_update_type_action.go +++ b/internal/processor/action/incident_update_type_action.go @@ -8,6 +8,7 @@ import ( "houston/common/util" incidentHelper "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -17,17 +18,15 @@ import ( type IncidentUpdateTypeAction struct { socketModeClient *socketmode.Client - logger *zap.Logger teamRepository *team.Repository incidentRepository *incident.Repository severityRepository *severity.Repository slackbotClient *slackbot.Client } -func NewIncidentUpdateTypeAction(client *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, slackbotClient *slackbot.Client) *IncidentUpdateTypeAction { +func NewIncidentUpdateTypeAction(client *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, slackbotClient *slackbot.Client) *IncidentUpdateTypeAction { return &IncidentUpdateTypeAction{ socketModeClient: client, - logger: logger, teamRepository: teamService, incidentRepository: incidentService, severityRepository: severityService, @@ -38,7 +37,7 @@ func NewIncidentUpdateTypeAction(client *socketmode.Client, logger *zap.Logger, func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateTypeRequestProcess(callback slack.InteractionCallback, request *socketmode.Request) { teams, err := incidentUpdateTypeAction.teamRepository.GetAllActiveTeams() if err != nil { - incidentUpdateTypeAction.logger.Error("GetAllActiveTeams error", + logger.Error("GetAllActiveTeams error", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -48,7 +47,7 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateTypeRequ _, err = incidentUpdateTypeAction.socketModeClient.OpenView(callback.TriggerID, modalRequest) if err != nil { - incidentUpdateTypeAction.logger.Error("houston slackbot openview command failed.", + logger.Error("houston slackbot openview command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } @@ -59,12 +58,12 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateTypeRequ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(callback slack.InteractionCallback, request *socketmode.Request, channel slack.Channel, user slack.User) { incidentEntity, err := incidentUpdateTypeAction.incidentRepository.FindIncidentByChannelId(callback.View.PrivateMetadata) if err != nil { - incidentUpdateTypeAction.logger.Error("FindIncidentByChannelId error", + logger.Error("FindIncidentByChannelId error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if incidentEntity == nil { - incidentUpdateTypeAction.logger.Error("IncidentEntity not found ", + logger.Error("IncidentEntity not found ", zap.String("incident_slack_channel_id", callback.Channel.ID), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -73,12 +72,12 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(cal incidentTypeId := incidentUpdateTypeAction.buildUpdateIncidentTypeRequest(callback.View.State.Values) teamEntity, err := incidentUpdateTypeAction.teamRepository.FindTeamById(incidentTypeId) if err != nil { - incidentUpdateTypeAction.logger.Error("FindTeamEntityById error", + logger.Error("FindTeamEntityById error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return } else if teamEntity == nil { - incidentUpdateTypeAction.logger.Error("Team Not Found", + logger.Error("Team Not Found", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) return @@ -87,7 +86,7 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(cal incidentEntity.UpdatedBy = user.ID err = incidentUpdateTypeAction.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - incidentUpdateTypeAction.logger.Error("UpdateIncident error", + logger.Error("UpdateIncident error", zap.String("incident_slack_channel_id", channel.ID), zap.String("channel", channel.Name), zap.String("user_id", user.ID), zap.Error(err)) } @@ -95,7 +94,7 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(cal go func() { err := incidentUpdateTypeAction.addDefaultUsersToIncident(callback.View.PrivateMetadata, incidentEntity.TeamId) if err != nil { - incidentUpdateTypeAction.logger.Error("error inviting team members to incident channel", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) + logger.Error("error inviting team members to incident channel", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } severityEntity, err := incidentUpdateTypeAction.severityRepository.FindSeverityById(incidentEntity.SeverityId) @@ -116,15 +115,15 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(cal user.ID, ) if err != nil { - incidentUpdateTypeAction.logger.Error("[Update incident type] Error while assigning responder to the incident ", zap.Error(err)) + logger.Error("[Update incident type] Error while assigning responder to the incident ", zap.Error(err)) } if err != nil { - incidentUpdateTypeAction.logger.Error("error in fetching severity in incident update type action", zap.String("channel", incidentEntity.SlackChannel), + logger.Error("error in fetching severity in incident update type action", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } else if severityEntity == nil { - incidentUpdateTypeAction.logger.Info("severity not found in incident update type action", zap.String("channel", incidentEntity.SlackChannel), + logger.Info("severity not found in incident update type action", zap.String("channel", incidentEntity.SlackChannel), zap.Uint("incident_id", incidentEntity.ID)) return } @@ -132,14 +131,14 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) IncidentUpdateType(cal user.ID, teamEntity.Name, severityEntity.Name, severityEntity.Description, incidentEntity.IncidentName, incidentEntity.Title, callback.View.PrivateMetadata, incidentUpdateTypeAction.socketModeClient) if errMessage != nil { - incidentUpdateTypeAction.logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) return } if len(teamEntity.ConfluenceLink) > 1 { textForConfluence := fmt.Sprintf("*%s* -> <%s| Confluence Page>", teamEntity.Name, teamEntity.ConfluenceLink) _, _, errMessage := incidentUpdateTypeAction.socketModeClient.PostMessage(callback.View.PrivateMetadata, slack.MsgOptionText(textForConfluence, false)) if errMessage != nil { - incidentUpdateTypeAction.logger.Error("post response failed for IncidentUpdateType Confluence message", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateType Confluence message", zap.Error(errMessage)) return } } @@ -175,7 +174,7 @@ func (incidentUpdateTypeAction *IncidentUpdateTypeAction) buildUpdateIncidentTyp selectedValue := requestMap["incident_type_modal_request"] selectedValueInInt, err := strconv.Atoi(selectedValue) if err != nil { - incidentUpdateTypeAction.logger.Error("String conversion to int faileed in buildUpdateIncidentTypeRequest for "+selectedValue, zap.Error(err)) + logger.Error("String conversion to int faileed in buildUpdateIncidentTypeRequest for "+selectedValue, zap.Error(err)) } return uint(selectedValueInInt) } diff --git a/internal/processor/action/member_join_action.go b/internal/processor/action/member_join_action.go index e338a14..a18ffa9 100644 --- a/internal/processor/action/member_join_action.go +++ b/internal/processor/action/member_join_action.go @@ -2,6 +2,7 @@ package action import ( "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -13,16 +14,14 @@ import ( type MemberJoinAction struct { client *socketmode.Client - logger *zap.Logger incidentService *incident.Repository teamService *team.Repository severityService *severity.Repository } -func NewMemberJoinAction(socketModeClient *socketmode.Client, logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository) *MemberJoinAction { +func NewMemberJoinAction(socketModeClient *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository) *MemberJoinAction { return &MemberJoinAction{ client: socketModeClient, - logger: logger, incidentService: incidentService, teamService: teamService, severityService: severityService, @@ -30,48 +29,48 @@ func NewMemberJoinAction(socketModeClient *socketmode.Client, logger *zap.Logger } func (mp *MemberJoinAction) PerformAction(memberJoinedChannelEvent *slackevents.MemberJoinedChannelEvent) { - mp.logger.Info("processing member join action", zap.String("channel", memberJoinedChannelEvent.Channel)) + logger.Info("processing member join action", zap.String("channel", memberJoinedChannelEvent.Channel)) incidentEntity, err := mp.incidentService.FindIncidentByChannelId(memberJoinedChannelEvent.Channel) if err != nil { - mp.logger.Error("error in searching incident", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Error("error in searching incident", zap.String("channel", memberJoinedChannelEvent.Channel), zap.String("user_id", memberJoinedChannelEvent.User), zap.Error(err)) return } else if err == nil && incidentEntity == nil { - mp.logger.Info("incident not found", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Info("incident not found", zap.String("channel", memberJoinedChannelEvent.Channel), zap.String("user_id", memberJoinedChannelEvent.User), zap.Error(err)) return } teamEntity, err := mp.teamService.FindTeamById(incidentEntity.TeamId) if err != nil { - mp.logger.Error("error in fetching team", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Error("error in fetching team", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } else if teamEntity == nil { - mp.logger.Info("team not found", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Info("team not found", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID)) return } severityEntity, err := mp.severityService.FindSeverityById(incidentEntity.SeverityId) if err != nil { - mp.logger.Error("error in fetching severity", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Error("error in fetching severity", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } else if severityEntity == nil { - mp.logger.Info("severity not found", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Info("severity not found", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID)) return } incidentStatusEntity, err := mp.incidentService.FindIncidentStatusById(incidentEntity.Status) if err != nil { - mp.logger.Error("error in fetching incident status", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Error("error in fetching incident status", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID), zap.Error(err)) return } else if incidentStatusEntity == nil { - mp.logger.Info("incident status not found", zap.String("channel", memberJoinedChannelEvent.Channel), + logger.Info("incident status not found", zap.String("channel", memberJoinedChannelEvent.Channel), zap.Uint("incident_id", incidentEntity.ID)) return } @@ -81,6 +80,6 @@ func (mp *MemberJoinAction) PerformAction(memberJoinedChannelEvent *slackevents. _, err = mp.client.PostEphemeral(memberJoinedChannelEvent.Channel, memberJoinedChannelEvent.User, msgOption) if err != nil { - mp.logger.Error("post response failed", zap.Error(err)) + logger.Error("post response failed", zap.Error(err)) } } diff --git a/internal/processor/action/show_incident_submit_action.go b/internal/processor/action/show_incident_submit_action.go index 7c43f0d..b9dcbf9 100644 --- a/internal/processor/action/show_incident_submit_action.go +++ b/internal/processor/action/show_incident_submit_action.go @@ -5,6 +5,7 @@ import ( "github.com/slack-go/slack/socketmode" "go.uber.org/zap" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/team" "strconv" @@ -12,15 +13,13 @@ import ( type ShowIncidentsSubmitAction struct { socketModeClient *socketmode.Client - logger *zap.Logger incidentRepository *incident.Repository teamRepository *team.Repository } -func NewShowIncidentsSubmitAction(client *socketmode.Client, logger *zap.Logger, incidentRepository *incident.Repository, teamRepository *team.Repository) *ShowIncidentsSubmitAction { +func NewShowIncidentsSubmitAction(client *socketmode.Client, incidentRepository *incident.Repository, teamRepository *team.Repository) *ShowIncidentsSubmitAction { return &ShowIncidentsSubmitAction{ socketModeClient: client, - logger: logger, incidentRepository: incidentRepository, teamRepository: teamRepository, } @@ -36,7 +35,7 @@ func (showIncidentsSubmitAction *ShowIncidentsSubmitAction) ShowIncidentsCommand incidents, err := showIncidentsSubmitAction.incidentRepository.FindOpenIncidentsByTeamOrderedByCreationTimeAndSeverity(team) if err != nil { - showIncidentsSubmitAction.logger.Error("Get open incidents query failed.", + logger.Error("Get open incidents query failed.", zap.String("team: ", team), zap.Error(err)) return } @@ -46,7 +45,7 @@ func (showIncidentsSubmitAction *ShowIncidentsSubmitAction) ShowIncidentsCommand message := slack.MsgOptionBlocks(blocks...) _, err = showIncidentsSubmitAction.socketModeClient.PostEphemeral(callback.View.PrivateMetadata, callback.User.ID, message) if err != nil { - showIncidentsSubmitAction.logger.Error("[Show incidents submit processor] error posting message to channel", + logger.Error("[Show incidents submit processor] error posting message to channel", zap.String("channel_id", callback.View.PrivateMetadata), zap.Error(err)) } var payload interface{} diff --git a/internal/processor/action/show_incidents_block_action.go b/internal/processor/action/show_incidents_block_action.go index f0df0de..6e4ce0a 100644 --- a/internal/processor/action/show_incidents_block_action.go +++ b/internal/processor/action/show_incidents_block_action.go @@ -2,6 +2,7 @@ package action import ( "houston/internal/processor/action/view" + "houston/logger" "houston/model/severity" "houston/model/team" @@ -12,15 +13,13 @@ import ( type ShowIncidentsAction struct { socketModeClient *socketmode.Client - logger *zap.Logger teamService *team.Repository severityService *severity.Repository } -func ShowIncidentsBlockAction(client *socketmode.Client, logger *zap.Logger, teamService *team.Repository) *ShowIncidentsAction { +func ShowIncidentsBlockAction(client *socketmode.Client, teamService *team.Repository) *ShowIncidentsAction { return &ShowIncidentsAction{ socketModeClient: client, - logger: logger, teamService: teamService, } } @@ -28,19 +27,19 @@ func ShowIncidentsBlockAction(client *socketmode.Client, logger *zap.Logger, tea func (showIncidentsAction *ShowIncidentsAction) ProcessAction(callback slack.InteractionCallback, request *socketmode.Request) { teams, err := showIncidentsAction.teamService.GetAllActiveTeams() if err != nil || teams == nil { - showIncidentsAction.logger.Error("[Show Incidents Action] failed while getting all active teams") + logger.Error("[Show Incidents Action] failed while getting all active teams") return } modal := view.GenerateShowIncidentRequestModal(*teams, callback.Channel.ID) _, err = showIncidentsAction.socketModeClient.OpenView(callback.TriggerID, modal) if err != nil { - showIncidentsAction.logger.Error("[Show Incidents Action] houston slackbot open view command failed.", + logger.Error("[Show Incidents Action] houston slackbot open view command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } - showIncidentsAction.logger.Info("[Show Incidents Action] houston successfully send modal to slackbot", zap.String("trigger_id", callback.TriggerID)) + logger.Info("[Show Incidents Action] houston successfully send modal to slackbot", zap.String("trigger_id", callback.TriggerID)) var payload interface{} showIncidentsAction.socketModeClient.Ack(*request, payload) } diff --git a/internal/processor/action/slash_command_action.go b/internal/processor/action/slash_command_action.go index 8a92c31..94c49df 100644 --- a/internal/processor/action/slash_command_action.go +++ b/internal/processor/action/slash_command_action.go @@ -2,6 +2,7 @@ package action import ( "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/pkg/slackbot" @@ -12,15 +13,13 @@ import ( type SlashCommandAction struct { incidentService *incident.Repository - logger *zap.Logger socketModeClient *socketmode.Client slackBot *slackbot.Client } -func NewSlashCommandAction(service *incident.Repository, logger *zap.Logger, socketModeClient *socketmode.Client, slackBot *slackbot.Client) *SlashCommandAction { +func NewSlashCommandAction(service *incident.Repository, socketModeClient *socketmode.Client, slackBot *slackbot.Client) *SlashCommandAction { return &SlashCommandAction{ incidentService: service, - logger: logger, socketModeClient: socketModeClient, slackBot: slackBot, } @@ -28,22 +27,22 @@ func NewSlashCommandAction(service *incident.Repository, logger *zap.Logger, soc func (sca *SlashCommandAction) PerformAction(evt *socketmode.Event) { cmd, ok := evt.Data.(slack.SlashCommand) - sca.logger.Info("processing houston command", zap.Any("payload", cmd)) + logger.Info("processing houston command", zap.Any("payload", cmd)) if !ok { - sca.logger.Error("event data to slash command conversion failed", zap.Any("data", evt)) + logger.Error("event data to slash command conversion failed", zap.Any("data", evt)) return } result, err := sca.incidentService.FindIncidentByChannelId(cmd.ChannelID) if err != nil { - sca.logger.Error("FindIncidentBySlackChannelId errors", + logger.Error("FindIncidentBySlackChannelId errors", zap.String("channel_id", cmd.ChannelID), zap.String("channel", cmd.ChannelName), zap.String("user_id", cmd.UserID), zap.Error(err)) return } if result != nil { - sca.logger.Info("Result", zap.String("result", result.IncidentName)) + logger.Info("Result", zap.String("result", result.IncidentName)) payload := view.ExistingIncidentOptionsBlock() sca.socketModeClient.Ack(*evt.Request, payload) } diff --git a/internal/processor/action/start_incident_block_action.go b/internal/processor/action/start_incident_block_action.go index fa6128c..778d3d7 100644 --- a/internal/processor/action/start_incident_block_action.go +++ b/internal/processor/action/start_incident_block_action.go @@ -2,6 +2,7 @@ package action import ( "houston/internal/processor/action/view" + "houston/logger" "houston/model/severity" "houston/model/team" @@ -12,15 +13,13 @@ import ( type StartIncidentBlockAction struct { socketModeClient *socketmode.Client - logger *zap.Logger teamService *team.Repository severityService *severity.Repository } -func NewStartIncidentBlockAction(client *socketmode.Client, logger *zap.Logger, teamService *team.Repository, severityService *severity.Repository) *StartIncidentBlockAction { +func NewStartIncidentBlockAction(client *socketmode.Client, teamService *team.Repository, severityService *severity.Repository) *StartIncidentBlockAction { return &StartIncidentBlockAction{ socketModeClient: client, - logger: logger, teamService: teamService, severityService: severityService, } @@ -29,13 +28,13 @@ func NewStartIncidentBlockAction(client *socketmode.Client, logger *zap.Logger, func (sip *StartIncidentBlockAction) ProcessAction(request *socketmode.Request, callback slack.InteractionCallback) { teams, err := sip.teamService.GetAllActiveTeams() if err != nil || teams == nil { - sip.logger.Error("[SIP] failed while getting all active teams") + logger.Error("[SIP] failed while getting all active teams") return } severities, err := sip.severityService.GetAllActiveSeverity() if err != nil || severities == nil { - sip.logger.Error("[SIP] failed while getting all active severities") + logger.Error("[SIP] failed while getting all active severities") return } @@ -43,12 +42,12 @@ func (sip *StartIncidentBlockAction) ProcessAction(request *socketmode.Request, _, err = sip.socketModeClient.OpenView(callback.TriggerID, modal) if err != nil { - sip.logger.Error("[SIP] houston slackbot open view command failed.", + logger.Error("[SIP] houston slackbot open view command failed.", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err)) return } - sip.logger.Info("[SIP] houston successfully send modal to slackbot", zap.String("trigger_id", callback.TriggerID)) + logger.Info("[SIP] houston successfully send modal to slackbot", zap.String("trigger_id", callback.TriggerID)) var payload interface{} sip.socketModeClient.Ack(*request, payload) } diff --git a/internal/processor/action/start_incident_modal_submission_action.go b/internal/processor/action/start_incident_modal_submission_action.go index 2119d1a..c1cfcba 100644 --- a/internal/processor/action/start_incident_modal_submission_action.go +++ b/internal/processor/action/start_incident_modal_submission_action.go @@ -7,6 +7,7 @@ import ( "gorm.io/gorm" "houston/common/util" "houston/internal/processor/action/view" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -28,7 +29,6 @@ import ( type CreateIncidentAction struct { client *socketmode.Client - logger *zap.Logger incidentRepository *incident.Repository slackbotClient *slackbot.Client teamRepository *team.Repository @@ -38,7 +38,6 @@ type CreateIncidentAction struct { func NewCreateIncidentProcessor( client *socketmode.Client, - logger *zap.Logger, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository, @@ -47,7 +46,6 @@ func NewCreateIncidentProcessor( ) *CreateIncidentAction { return &CreateIncidentAction{ client: client, - logger: logger, incidentRepository: incidentService, teamRepository: teamService, severityRepository: severityService, @@ -59,25 +57,25 @@ func NewCreateIncidentProcessor( func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback slack.InteractionCallback, request *socketmode.Request) { // Build create incident request createIncidentRequest := buildCreateIncidentDTO(callback) - isp.logger.Info("[CIP] incident request created", zap.Any("request", createIncidentRequest)) + logger.Info("[CIP] incident request created", zap.Any("request", createIncidentRequest)) // Save the incident to the database incidentEntity, err := isp.incidentRepository.CreateIncidentEntity(createIncidentRequest) if err != nil { - isp.logger.Error("[CIP] Error while creating incident", zap.Error(err)) + logger.Error("[CIP] Error while creating incident", zap.Error(err)) return } channelID, err := isp.createSlackChannel(incidentEntity) if err != nil { - isp.logger.Error("[CIP] Error while creating incident channel", zap.Error(err)) + logger.Error("[CIP] Error while creating incident channel", zap.Error(err)) return } teamEntity, severityEntity, incidentStatusEntity, err := isp.getTeamAndSeverityAndStatus(incidentEntity.TeamId, incidentEntity.SeverityId, incidentEntity.Status) if err != nil { - isp.logger.Error("[CIP] failed while getting team, severity and status", zap.Error(err)) + logger.Error("[CIP] failed while getting team, severity and status", zap.Error(err)) return } @@ -90,7 +88,7 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback s _, err := isp.postIncidentSummary(callback.View.PrivateMetadata, *channelID, incidentEntity, teamEntity, severityEntity, incidentStatusEntity) if err != nil { - isp.logger.Error("[CIP] error while posting incident summary", zap.Error(err)) + logger.Error("[CIP] error while posting incident summary", zap.Error(err)) return } //Add user who created the incident @@ -98,7 +96,7 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback s // add default users to the incident err = isp.addDefaultUsersToIncident(*channelID, teamEntity, severityEntity) if err != nil { - isp.logger.Error("[CIP] error while adding default users to incident", zap.Error(err)) + logger.Error("[CIP] error while adding default users to incident", zap.Error(err)) } if len(strings.TrimSpace(teamEntity.OncallHandle)) > 0 { @@ -113,7 +111,7 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback s incidentEntity.CreatedBy, ) if err != nil { - isp.logger.Error("[CIP] error while assigning responder to the incident ", zap.Error(err)) + logger.Error("[CIP] error while assigning responder to the incident ", zap.Error(err)) } if incidentEntity.SeverityId >= 3 && incidentEntity.Status <= 4 { @@ -126,9 +124,9 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback s } } if viper.GetBool("ENABLE_GMEET") { - gmeet, err := createGmeetLink(isp.logger, *channelID) + gmeet, err := createGmeetLink(*channelID) if err != nil { - isp.logger.Error("[CIP] error while creating gmeet", zap.Error(err)) + logger.Error("[CIP] error while creating gmeet", zap.Error(err)) } else { msgOption := slack.MsgOptionText(fmt.Sprintf("gmeet: ", gmeet), false) isp.client.PostMessage(*channelID, msgOption) @@ -151,7 +149,7 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessing(callback s msgOption := slack.MsgOptionText(msg, false) _, _, errMessage := isp.client.PostMessage(teamEntity.WebhookSlackChannel, msgOption) if errMessage != nil { - isp.logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) + logger.Error("post response failed for ResolveIncident", zap.Error(errMessage)) return } }() @@ -164,15 +162,15 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessingV2( // Build create incident request createIncidentRequest, err := buildCreateIncidentRequestV2(callback) if err != nil { - isp.logger.Error("[CIP] Error in building CreateIncidentRequestV2", zap.Error(err)) + logger.Error("[CIP] Error in building CreateIncidentRequestV2", zap.Error(err)) return } - isp.logger.Info("[CIP] incident request created", zap.Any("request", createIncidentRequest)) + logger.Info("[CIP] incident request created", zap.Any("request", createIncidentRequest)) - service := incidentService.NewIncidentServiceV2(isp.logger, isp.db) + service := incidentService.NewIncidentServiceV2(isp.db) _, err = service.CreateIncident(*createIncidentRequest, "SLACK", callback.View.PrivateMetadata) if err != nil { - isp.logger.Error("[CIP] Error while creating incident", zap.Error(err)) + logger.Error("[CIP] Error while creating incident", zap.Error(err)) return } @@ -181,7 +179,7 @@ func (isp *CreateIncidentAction) CreateIncidentModalCommandProcessingV2( isp.client.Ack(*request, payload) } -func createGmeetLink(logger *zap.Logger, channelName string) (string, error) { +func createGmeetLink(channelName string) (string, error) { calclient, err := calendar.NewService(context.Background(), option.WithCredentialsFile(viper.GetString("GMEET_CONFIG_FILE_PATH"))) if err != nil { logger.Error("Unable to read client secret file: ", zap.Error(err)) @@ -238,7 +236,7 @@ func (isp *CreateIncidentAction) createSlackChannel(incidentEntity *incident.Inc incidentEntity.IncidentName = channelName err = isp.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - isp.logger.Error(fmt.Sprintf("[CIP] failed to update the slack channel name for incident-id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("[CIP] failed to update the slack channel name for incident-id: %v", incidentEntity.ID)) return nil, err } return &channelID, nil diff --git a/internal/processor/action/user_change_event_action.go b/internal/processor/action/user_change_event_action.go index 4db778c..1b2e9c6 100644 --- a/internal/processor/action/user_change_event_action.go +++ b/internal/processor/action/user_change_event_action.go @@ -7,18 +7,17 @@ import ( "github.com/spf13/viper" "go.uber.org/zap" "houston/common/util" + "houston/logger" "houston/model/user" service "houston/service/request" ) type UserChangeEventAction struct { - logger *zap.Logger userRepository *user.Repository } -func NewUserChangeEventAction(logger *zap.Logger, userRepository *user.Repository) *UserChangeEventAction { +func NewUserChangeEventAction(userRepository *user.Repository) *UserChangeEventAction { return &UserChangeEventAction{ - logger: logger, userRepository: userRepository, } } @@ -27,11 +26,11 @@ func (userChangeEventAction *UserChangeEventAction) PerformAction(event slackeve var userChangeEventRequest service.UserChangeEventRequest serializedEventJson, marshalError := json.Marshal(&event.InnerEvent.Data) if marshalError != nil { - userChangeEventAction.logger.Error("error occurred while serializing the event object", zap.Any("error", marshalError)) + logger.Error("error occurred while serializing the event object", zap.Any("error", marshalError)) } unmarshalError := json.Unmarshal(serializedEventJson, &userChangeEventRequest) if unmarshalError != nil { - userChangeEventAction.logger.Error("error occurred while deserializing the event object", zap.Any("error", unmarshalError), zap.String("event", string(serializedEventJson))) + logger.Error("error occurred while deserializing the event object", zap.Any("error", unmarshalError), zap.String("event", string(serializedEventJson))) return } // If User is not part of Navi Workspace Team, then we don't need to process the event @@ -49,14 +48,14 @@ func (userChangeEventAction *UserChangeEventAction) PerformAction(event slackeve } existingUser, err := userChangeEventAction.userRepository.FindHoustonUserBySlackUserId(userEntity.SlackUserId) if err != nil { - userChangeEventAction.logger.Error("error in finding user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(err)) + logger.Error("error in finding user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(err)) return } if existingUser == nil { - userChangeEventAction.logger.Info(fmt.Sprintf("inserting user %s", userEntity.Name)) + logger.Info(fmt.Sprintf("inserting user %s", userEntity.Name)) resultError := userChangeEventAction.userRepository.InsertHoustonUser(&userEntity) if resultError != nil { - userChangeEventAction.logger.Error("error in inserting user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) + logger.Error("error in inserting user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) return } return @@ -66,7 +65,7 @@ func (userChangeEventAction *UserChangeEventAction) PerformAction(event slackeve existingUser.Active = false resultError := userChangeEventAction.userRepository.UpdateHoustonUser(*existingUser) if resultError != nil { - userChangeEventAction.logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) + logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) return } return @@ -75,10 +74,10 @@ func (userChangeEventAction *UserChangeEventAction) PerformAction(event slackeve updatedExistingUser, isChanged := util.UpdateUserFieldsIfChanged(existingUser, &userEntity) if isChanged { - userChangeEventAction.logger.Info(fmt.Sprintf("upadting user %s", updatedExistingUser.Name)) + logger.Info(fmt.Sprintf("upadting user %s", updatedExistingUser.Name)) resultError := userChangeEventAction.userRepository.UpdateHoustonUser(*updatedExistingUser) if resultError != nil { - userChangeEventAction.logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) + logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError)) } } } diff --git a/internal/processor/event_type_interactive_processor.go b/internal/processor/event_type_interactive_processor.go index a3dd1c8..54d8d7b 100644 --- a/internal/processor/event_type_interactive_processor.go +++ b/internal/processor/event_type_interactive_processor.go @@ -2,10 +2,10 @@ package processor import ( "fmt" - "github.com/spf13/viper" "gorm.io/gorm" "houston/common/util" "houston/internal/processor/action" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/tag" @@ -22,7 +22,6 @@ type interactiveEventProcessor interface { } type BlockActionProcessor struct { - logger *zap.Logger socketModeClient *socketmode.Client startIncidentBlockAction *action.StartIncidentBlockAction showIncidentsAction *action.ShowIncidentsAction @@ -39,25 +38,24 @@ type BlockActionProcessor struct { incidentDuplicateAction *action.DuplicateIncidentAction } -func NewBlockActionProcessor(logger *zap.Logger, socketModeClient *socketmode.Client, incidentRepository *incident.Repository, +func NewBlockActionProcessor(socketModeClient *socketmode.Client, incidentRepository *incident.Repository, teamService *team.Repository, severityService *severity.Repository, tagService *tag.Repository, slackbotClient *slackbot.Client) *BlockActionProcessor { return &BlockActionProcessor{ - logger: logger, socketModeClient: socketModeClient, - startIncidentBlockAction: action.NewStartIncidentBlockAction(socketModeClient, logger, teamService, severityService), - showIncidentsAction: action.ShowIncidentsBlockAction(socketModeClient, logger, teamService), - assignIncidentAction: action.NewAssignIncidentAction(socketModeClient, logger, incidentRepository), - incidentResolveAction: action.NewIncidentResolveProcessor(socketModeClient, logger, incidentRepository, tagService, teamService, severityService), - incidentUpdateAction: action.NewIncidentUpdateAction(socketModeClient, logger, incidentRepository, tagService, teamService, severityService), - incidentUpdateTypeAction: action.NewIncidentUpdateTypeAction(socketModeClient, logger, incidentRepository, teamService, severityService, slackbotClient), - incidentUpdateSeverityAction: action.NewIncidentUpdateSeverityAction(socketModeClient, logger, incidentRepository, severityService, teamService, slackbotClient), - incidentUpdateTitleAction: action.NewIncidentUpdateTitleAction(socketModeClient, logger, incidentRepository, teamService, severityService, slackbotClient), - incidentUpdateDescriptionAction: action.NewIncidentUpdateDescriptionAction(socketModeClient, logger, incidentRepository), - incidentUpdateTagsAction: action.NewIncidentUpdateTagsAction(socketModeClient, logger, incidentRepository, teamService, tagService), - incidentShowTagsAction: action.NewIncidentShowTagsProcessor(socketModeClient, logger, incidentRepository, tagService), - incidentUpdateRcaAction: action.NewIncidentUpdateRcaAction(socketModeClient, logger, incidentRepository), - incidentDuplicateAction: action.NewDuplicateIncidentProcessor(socketModeClient, logger, incidentRepository, tagService, teamService, severityService), + startIncidentBlockAction: action.NewStartIncidentBlockAction(socketModeClient, teamService, severityService), + showIncidentsAction: action.ShowIncidentsBlockAction(socketModeClient, teamService), + assignIncidentAction: action.NewAssignIncidentAction(socketModeClient, incidentRepository), + incidentResolveAction: action.NewIncidentResolveProcessor(socketModeClient, incidentRepository, tagService, teamService, severityService), + incidentUpdateAction: action.NewIncidentUpdateAction(socketModeClient, incidentRepository, tagService, teamService, severityService), + incidentUpdateTypeAction: action.NewIncidentUpdateTypeAction(socketModeClient, incidentRepository, teamService, severityService, slackbotClient), + incidentUpdateSeverityAction: action.NewIncidentUpdateSeverityAction(socketModeClient, incidentRepository, severityService, teamService, slackbotClient), + incidentUpdateTitleAction: action.NewIncidentUpdateTitleAction(socketModeClient, incidentRepository, teamService, severityService, slackbotClient), + incidentUpdateDescriptionAction: action.NewIncidentUpdateDescriptionAction(socketModeClient, incidentRepository), + incidentUpdateTagsAction: action.NewIncidentUpdateTagsAction(socketModeClient, incidentRepository, teamService, tagService), + incidentShowTagsAction: action.NewIncidentShowTagsProcessor(socketModeClient, incidentRepository, tagService), + incidentUpdateRcaAction: action.NewIncidentUpdateRcaAction(socketModeClient, incidentRepository), + incidentDuplicateAction: action.NewDuplicateIncidentProcessor(socketModeClient, incidentRepository, tagService, teamService, severityService), } } @@ -66,12 +64,12 @@ func (bap *BlockActionProcessor) ProcessCommand(callback slack.InteractionCallba recover() r := recover() if r != nil { - bap.logger.Error(fmt.Sprintf("[BAP] Exception occurred: %v", r.(error))) + logger.Error(fmt.Sprintf("[BAP] Exception occurred: %v", r.(error))) } }() actionId := util.BlockActionType(callback.ActionCallback.BlockActions[0].ActionID) - bap.logger.Info("process button callback event", zap.Any("action_id", actionId), + logger.Info("process button callback event", zap.Any("action_id", actionId), zap.String("channel", callback.Channel.Name), zap.String("user_id", callback.User.ID), zap.String("user_name", callback.User.Name)) @@ -102,7 +100,7 @@ func (bap *BlockActionProcessor) ProcessCommand(callback slack.InteractionCallba msgOption := slack.MsgOptionText(fmt.Sprintf("We are working on it"), false) _, err := bap.socketModeClient.PostEphemeral(callback.Channel.ID, callback.User.ID, msgOption) if err != nil { - bap.logger.Error("[BAP] houston slackbot PostEphemeral command failed for Working On It features", + logger.Error("[BAP] houston slackbot PostEphemeral command failed for Working On It features", zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.String("user_id", callback.User.ID), zap.Error(err)) return @@ -180,7 +178,6 @@ func (bap *BlockActionProcessor) processTagsCommands(callback slack.InteractionC } type ViewSubmissionProcessor struct { - logger *zap.Logger socketModeClient *socketmode.Client incidentChannelMessageUpdateAction *action.IncidentChannelMessageUpdateAction createIncidentAction *action.CreateIncidentAction @@ -198,7 +195,6 @@ type ViewSubmissionProcessor struct { } func NewViewSubmissionProcessor( - logger *zap.Logger, socketModeClient *socketmode.Client, incidentRepository *incident.Repository, teamService *team.Repository, @@ -209,27 +205,26 @@ func NewViewSubmissionProcessor( db *gorm.DB, ) *ViewSubmissionProcessor { return &ViewSubmissionProcessor{ - logger: logger, socketModeClient: socketModeClient, - incidentChannelMessageUpdateAction: action.NewIncidentChannelMessageUpdateAction(socketModeClient, logger, incidentRepository, teamService, severityService), - createIncidentAction: action.NewCreateIncidentProcessor(socketModeClient, logger, incidentRepository, teamService, severityService, slackbotClient, db), - assignIncidentAction: action.NewAssignIncidentAction(socketModeClient, logger, incidentRepository), - updateIncidentAction: action.NewIncidentUpdateAction(socketModeClient, logger, incidentRepository, tagService, teamService, severityService), - incidentUpdateTitleAction: action.NewIncidentUpdateTitleAction(socketModeClient, logger, incidentRepository, teamService, severityService, slackbotClient), - incidentUpdateDescriptionAction: action.NewIncidentUpdateDescriptionAction(socketModeClient, logger, incidentRepository), - incidentUpdateSeverityAction: action.NewIncidentUpdateSeverityAction(socketModeClient, logger, incidentRepository, severityService, teamService, slackbotClient), - incidentUpdateTypeAction: action.NewIncidentUpdateTypeAction(socketModeClient, logger, incidentRepository, teamService, severityService, slackbotClient), - incidentUpdateTagsAction: action.NewIncidentUpdateTagsAction(socketModeClient, logger, incidentRepository, teamService, tagService), - incidentUpdateRca: action.NewIncidentUpdateRcaAction(socketModeClient, logger, incidentRepository), - showIncidentSubmitAction: action.NewShowIncidentsSubmitAction(socketModeClient, logger, incidentRepository, teamRepository), - incidentDuplicateAction: action.NewDuplicateIncidentProcessor(socketModeClient, logger, incidentRepository, tagService, teamRepository, severityService), + incidentChannelMessageUpdateAction: action.NewIncidentChannelMessageUpdateAction(socketModeClient, incidentRepository, teamService, severityService), + createIncidentAction: action.NewCreateIncidentProcessor(socketModeClient, incidentRepository, teamService, severityService, slackbotClient, db), + assignIncidentAction: action.NewAssignIncidentAction(socketModeClient, incidentRepository), + updateIncidentAction: action.NewIncidentUpdateAction(socketModeClient, incidentRepository, tagService, teamService, severityService), + incidentUpdateTitleAction: action.NewIncidentUpdateTitleAction(socketModeClient, incidentRepository, teamService, severityService, slackbotClient), + incidentUpdateDescriptionAction: action.NewIncidentUpdateDescriptionAction(socketModeClient, incidentRepository), + incidentUpdateSeverityAction: action.NewIncidentUpdateSeverityAction(socketModeClient, incidentRepository, severityService, teamService, slackbotClient), + incidentUpdateTypeAction: action.NewIncidentUpdateTypeAction(socketModeClient, incidentRepository, teamService, severityService, slackbotClient), + incidentUpdateTagsAction: action.NewIncidentUpdateTagsAction(socketModeClient, incidentRepository, teamService, tagService), + incidentUpdateRca: action.NewIncidentUpdateRcaAction(socketModeClient, incidentRepository), + showIncidentSubmitAction: action.NewShowIncidentsSubmitAction(socketModeClient, incidentRepository, teamRepository), + incidentDuplicateAction: action.NewDuplicateIncidentProcessor(socketModeClient, incidentRepository, tagService, teamRepository, severityService), } } func (vsp *ViewSubmissionProcessor) ProcessCommand(callback slack.InteractionCallback, request *socketmode.Request) { defer func() { if r := recover(); r != nil { - vsp.logger.Error(fmt.Sprintf("[VSP] Exception occurred: %v", r.(error))) + logger.Error(fmt.Sprintf("[VSP] Exception occurred: %v", r.(error))) } }() @@ -237,7 +232,7 @@ func (vsp *ViewSubmissionProcessor) ProcessCommand(callback slack.InteractionCal switch callbackId { case util.StartIncidentSubmit: { - createIncidentV2Enabled := viper.GetBool("CREATE_INCIDENT_V2_ENABLED") + createIncidentV2Enabled := true if createIncidentV2Enabled { vsp.createIncidentAction.CreateIncidentModalCommandProcessingV2(callback, request) } else { diff --git a/internal/processor/events_api_event_processor.go b/internal/processor/events_api_event_processor.go index 8c8784c..b4bd1f9 100644 --- a/internal/processor/events_api_event_processor.go +++ b/internal/processor/events_api_event_processor.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/slack-go/slack/slackevents" "github.com/slack-go/slack/socketmode" - "go.uber.org/zap" "houston/internal/processor/action" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -17,24 +17,22 @@ type eventsApiEventProcessor interface { } type MemberJoinedCallbackEventProcessor struct { - logger *zap.Logger socketModeClient *socketmode.Client memberJoinAction *action.MemberJoinAction } -func NewMemberJoinedCallbackEventProcessor(logger *zap.Logger, socketModeClient *socketmode.Client, +func NewMemberJoinedCallbackEventProcessor(socketModeClient *socketmode.Client, incidentService *incident.Repository, teamService *team.Repository, severityService *severity.Repository) *MemberJoinedCallbackEventProcessor { return &MemberJoinedCallbackEventProcessor{ - logger: logger, socketModeClient: socketModeClient, - memberJoinAction: action.NewMemberJoinAction(socketModeClient, logger, incidentService, teamService, severityService), + memberJoinAction: action.NewMemberJoinAction(socketModeClient, incidentService, teamService, severityService), } } func (mjc *MemberJoinedCallbackEventProcessor) ProcessCommand(event *slackevents.MemberJoinedChannelEvent, request *socketmode.Request) { defer func() { if r := recover(); r != nil { - mjc.logger.Error(fmt.Sprintf("[MJC] Exception occurred: %v", r.(error))) + logger.Error(fmt.Sprintf("[MJC] Exception occurred: %v", r.(error))) } }() @@ -44,23 +42,21 @@ func (mjc *MemberJoinedCallbackEventProcessor) ProcessCommand(event *slackevents } type UserChangeEventProcessor struct { - logger *zap.Logger socketModeClient *socketmode.Client userChangeAction *action.UserChangeEventAction } -func NewUserChangeEventProcessor(logger *zap.Logger, socketModeClient *socketmode.Client, userRepository *user.Repository) *UserChangeEventProcessor { +func NewUserChangeEventProcessor(socketModeClient *socketmode.Client, userRepository *user.Repository) *UserChangeEventProcessor { return &UserChangeEventProcessor{ - logger: logger, socketModeClient: socketModeClient, - userChangeAction: action.NewUserChangeEventAction(logger, userRepository), + userChangeAction: action.NewUserChangeEventAction(userRepository), } } func (ucep *UserChangeEventProcessor) ProcessCommand(event slackevents.EventsAPIEvent, request *socketmode.Request) { defer func() { if r := recover(); r != nil { - ucep.logger.Error(fmt.Sprintf("[UserChangeEventProcessor] Exception occurred: %v", r.(error))) + logger.Error(fmt.Sprintf("[UserChangeEventProcessor] Exception occurred: %v", r.(error))) } }() diff --git a/internal/processor/slash_command_processor.go b/internal/processor/slash_command_processor.go index 54d1c4f..5f44c3c 100644 --- a/internal/processor/slash_command_processor.go +++ b/internal/processor/slash_command_processor.go @@ -8,6 +8,7 @@ import ( "houston/internal/diagnostic" "houston/internal/diagnostic/models" "houston/internal/processor/action" + "houston/logger" "houston/model/incident" "houston/pkg/slackbot" "strings" @@ -29,33 +30,31 @@ type DiagnosticCommandProcessor struct { diagnosticCommandActions []action.DiagnosticCommandActionHandler } -func NewDiagnosticCommandProcessor(logger *zap.Logger, socketModeClient *socketmode.Client, repository *diagnostic.Repository) *DiagnosticCommandProcessor { +func NewDiagnosticCommandProcessor(socketModeClient *socketmode.Client, repository *diagnostic.Repository) *DiagnosticCommandProcessor { return &DiagnosticCommandProcessor{ - logger: logger, socketModeClient: socketModeClient, diagnosticCommandActions: []action.DiagnosticCommandActionHandler{ - action.NewDeploymentConfigActionHandler(logger, socketModeClient, repository), - action.NewGrafanaActionHandler(logger, socketModeClient, repository), + action.NewDeploymentConfigActionHandler(socketModeClient, repository), + action.NewGrafanaActionHandler(socketModeClient, repository), //action.NewKibanaActionHandler(logger, socketModeClient), - action.NewDeploymentPortalActionHandler(logger, socketModeClient, repository), + action.NewDeploymentPortalActionHandler(socketModeClient, repository), }, } } func NewSlashCommandProcessor( - logger *zap.Logger, socketModeClient *socketmode.Client, incidentService *incident.Repository, slackBot *slackbot.Client, + socketModeClient *socketmode.Client, incidentService *incident.Repository, slackBot *slackbot.Client, ) *SlashCommandProcessor { return &SlashCommandProcessor{ - logger: logger, socketModeClient: socketModeClient, - slashCommandAction: action.NewSlashCommandAction(incidentService, logger, socketModeClient, slackBot), + slashCommandAction: action.NewSlashCommandAction(incidentService, socketModeClient, slackBot), } } func (scp *SlashCommandProcessor) ProcessSlashCommand(event *socketmode.Event) { defer func() { if r := recover(); r != nil { - scp.logger.Error(fmt.Sprintf("[SCP] Exception occurred: %v", r.(error))) + logger.Error(fmt.Sprintf("[SCP] Exception occurred: %v", r.(error))) } }() @@ -72,7 +71,7 @@ func (dcp *DiagnosticCommandProcessor) ProcessSlashCommand(e *socketmode.Event) _, ok := e.Data.(slack.SlashCommand) if !ok { - dcp.logger.Error("Unable to convert event to slash command", zap.Any("event", e)) + logger.Error("Unable to convert event to slash command", zap.Any("event", e)) return } cmd := e.Data.(slack.SlashCommand) @@ -82,11 +81,11 @@ func (dcp *DiagnosticCommandProcessor) ProcessSlashCommand(e *socketmode.Event) for _, actionHandler := range dcp.diagnosticCommandActions { runbooks = append(runbooks, actionHandler.HandleAction(e, commands[1])) } - diagnosticDataAssembler := diagnostic.NewDiagnosticDataAssembler2(dcp.logger) + diagnosticDataAssembler := diagnostic.NewDiagnosticDataAssembler2() image, text := diagnosticDataAssembler.HandleData(runbooks) postDataOnSlack(&dcp.socketModeClient.Client, &cmd, &image, text) - dcp.logger.Error("S3 upload failed", zap.Any("error", e)) + logger.Error("S3 upload failed", zap.Any("error", e)) } func postDataOnSlack(api *slack.Client, sh *slack.SlashCommand, message *slack.MsgOption, attachments []slack.Attachment) { diff --git a/internal/resolver/slash_command_resolver.go b/internal/resolver/slash_command_resolver.go index 1c55b1e..5e31746 100644 --- a/internal/resolver/slash_command_resolver.go +++ b/internal/resolver/slash_command_resolver.go @@ -4,22 +4,21 @@ import ( "github.com/slack-go/slack" "github.com/slack-go/slack/socketmode" "go.uber.org/zap" + "houston/logger" "houston/internal/processor" ) type SlashCommandResolver struct { - logger *zap.Logger diagnosticCommandProcessor *processor.DiagnosticCommandProcessor slashCommandProcessor *processor.SlashCommandProcessor } func NewSlashCommandResolver( - logger *zap.Logger, diagnosticCommandProcessor *processor.DiagnosticCommandProcessor, + diagnosticCommandProcessor *processor.DiagnosticCommandProcessor, slashCommandProcessor *processor.SlashCommandProcessor, ) *SlashCommandResolver { return &SlashCommandResolver{ - logger: logger, diagnosticCommandProcessor: diagnosticCommandProcessor, slashCommandProcessor: slashCommandProcessor, } @@ -33,7 +32,7 @@ func (scr *SlashCommandResolver) Resolve(evt *socketmode.Event) { scr.diagnosticCommandProcessor.ProcessSlashCommand(evt) return } - scr.logger.Info("houston processing slash command", zap.String("command", cmd.Text), zap.String("channel_name", cmd.ChannelName), zap.String("user_name", cmd.UserName)) + logger.Info("houston processing slash command", zap.String("command", cmd.Text), zap.String("channel_name", cmd.ChannelName), zap.String("user_name", cmd.UserName)) scr.slashCommandProcessor.ProcessSlashCommand(evt) } } diff --git a/log/log.go b/logger/log.go similarity index 78% rename from log/log.go rename to logger/log.go index 68e6142..14d78d9 100644 --- a/log/log.go +++ b/logger/log.go @@ -1,4 +1,4 @@ -package log +package logger import ( "go.uber.org/zap" @@ -8,7 +8,7 @@ type Logger struct { log *zap.Logger } -var Log *Logger +var houstonLogger *Logger func InitLogger() { log, err := zap.NewProduction() @@ -16,13 +16,13 @@ func InitLogger() { panic(err) } - Log = &Logger{ + houstonLogger = &Logger{ log: log, } } func GetLogger() *zap.Logger { - return Log.log + return houstonLogger.log } func Error(message string, fields ...zap.Field) { @@ -37,6 +37,10 @@ func Info(message string, fields ...zap.Field) { GetLogger().Info(message, fields...) } +func Debug(message string, fields ...zap.Field) { + GetLogger().Debug(message, fields...) +} + func Fatal(message string, fields ...zap.Field) { GetLogger().Fatal(message, fields...) } diff --git a/model/incident/incident.go b/model/incident/incident.go index aedcd98..7e0bc6f 100644 --- a/model/incident/incident.go +++ b/model/incident/incident.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "github.com/slack-go/slack/socketmode" + logger "houston/logger" "houston/model/log" "houston/model/severity" "houston/model/team" @@ -17,7 +18,6 @@ import ( ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB severityRepository *severity.Repository logRepository *log.Repository @@ -31,9 +31,14 @@ var valueBeforeCreate IncidentEntity var valueAfterCreate IncidentEntity var differences []utils.Difference -func NewIncidentRepository(logger *zap.Logger, gormClient *gorm.DB, severityService *severity.Repository, logRepository *log.Repository, teamRepository *team.Repository, socketModeClient *socketmode.Client) *Repository { +func NewIncidentRepository( + gormClient *gorm.DB, + severityService *severity.Repository, + logRepository *log.Repository, + teamRepository *team.Repository, + socketModeClient *socketmode.Client, +) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, severityRepository: severityService, logRepository: logRepository, @@ -169,7 +174,7 @@ func (r *Repository) processUserInfo() ([]byte, error) { if err != nil { errorMessage := fmt.Sprintf("failed to get user info from slack for userID: %s", valueAfterUpdate.UpdatedBy) - r.logger.Error(errorMessage) + logger.Error(errorMessage) return nil, fmt.Errorf("%s. Error: %v", errorMessage, err) } @@ -595,7 +600,7 @@ func (r *Repository) FetchAllNonTerminalIncidentStatuses() (*[]IncidentStatusEnt func (r *Repository) FetchAllOpenIncidentsWithSeverityTATGreaterThan(slaStart, slaEnd string, severityId ...int) (*[]IncidentEntity, error) { var incidents []IncidentEntity query := fmt.Sprintf("SELECT * FROM incident WHERE severity_tat >= '%v' AND severity_tat < '%v' AND severity_id IN (%v) AND status IN (SELECT id FROM incident_status WHERE is_terminal_status = false) ORDER BY team_id;", slaStart, slaEnd, strings.Trim(strings.Join(strings.Fields(fmt.Sprint(severityId)), ","), "[]")) - r.logger.Info("Query: ", zap.String("query", query)) + logger.Info("Query: ", zap.String("query", query)) result := r.gormClient.Raw(query).Scan(&incidents) if result.Error != nil { return nil, result.Error diff --git a/model/log/entity.go b/model/log/entity.go index c3580d2..756ab11 100644 --- a/model/log/entity.go +++ b/model/log/entity.go @@ -14,7 +14,7 @@ type LogEntity struct { } func (LogEntity) TableName() string { - return "log" + return "logger" } type UserInfo struct { diff --git a/model/log/log.go b/model/log/log.go index dd9c184..d6d05c5 100644 --- a/model/log/log.go +++ b/model/log/log.go @@ -1,18 +1,15 @@ package log import ( - "go.uber.org/zap" "gorm.io/gorm" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewLogRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewLogRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } diff --git a/model/role/role.go b/model/role/role.go index 9c77b10..e5b9217 100644 --- a/model/role/role.go +++ b/model/role/role.go @@ -2,19 +2,18 @@ package role import ( "fmt" + "houston/logger" "go.uber.org/zap" "gorm.io/gorm" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewRoleRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewRoleRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } @@ -24,7 +23,7 @@ func (r *Repository) FindRoleById(id int) (*RoleEntity, error) { tx := r.gormClient.Raw("select * from role where id = ?", id).Scan(&role) if tx.Error != nil { - r.logger.Error("Error while getting role", zap.String("exception", fmt.Sprintf("%v", tx.Error))) + logger.Error("Error while getting role", zap.String("exception", fmt.Sprintf("%v", tx.Error))) return nil, tx.Error } if tx.RowsAffected == 0 { diff --git a/model/severity/severity.go b/model/severity/severity.go index d6766e8..452df31 100644 --- a/model/severity/severity.go +++ b/model/severity/severity.go @@ -3,16 +3,15 @@ package severity import ( "go.uber.org/zap" "gorm.io/gorm" + "houston/logger" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewSeverityRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewSeverityRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } @@ -21,7 +20,7 @@ func (r *Repository) GetAllActiveSeverity() (*[]SeverityEntity, error) { var severityEntity []SeverityEntity result := r.gormClient.Where("deleted_at is NULL").Order("name desc").Find(&severityEntity) if result.Error != nil { - r.logger.Error("fetching severity query failed", zap.Error(result.Error)) + logger.Error("fetching severity query failed", zap.Error(result.Error)) return nil, result.Error } if result.RowsAffected == 0 { @@ -36,10 +35,10 @@ func (s *Repository) FindIncidentSeverityEntityById(id int) (*SeverityEntity, er result := s.gormClient.Find(&severityEntity, "id = ?", id) if result.Error != nil { - s.logger.Error("fetching severity query failed", zap.Error(result.Error)) + logger.Error("fetching severity query failed", zap.Error(result.Error)) return nil, result.Error } else if result.RowsAffected == 0 { - s.logger.Error("SeverityEntity not found", zap.Error(result.Error)) + logger.Error("SeverityEntity not found", zap.Error(result.Error)) return nil, nil } diff --git a/model/shedlock/shedlock.go b/model/shedlock/shedlock.go index ef424b4..31f2c19 100644 --- a/model/shedlock/shedlock.go +++ b/model/shedlock/shedlock.go @@ -1,6 +1,7 @@ package shedlock import ( + "houston/logger" "time" "go.uber.org/zap" @@ -8,13 +9,11 @@ import ( ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewShedlockRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewShedlockRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } @@ -37,7 +36,7 @@ func (repo *Repository) Insert(name string, lockedBy string, lockTime int) bool } if result.Error != nil { - repo.logger.Error("Error While locking: ", zap.Error(result.Error)) + logger.Error("Error While locking: ", zap.Error(result.Error)) } return false } @@ -54,14 +53,14 @@ func (repo *Repository) Unlock(name string, unlockedBy string) bool { result := repo.gormClient.Table("shedlock").Where("name=?", name).Where("locked_value=?", true).UpdateColumns(updatedData) if result.Error != nil { - repo.logger.Error("Failed to unlock ShedLock", zap.Error(result.Error)) + logger.Error("Failed to unlock ShedLock", zap.Error(result.Error)) return false } // Check if any rows were affected if result.RowsAffected == 0 { - repo.logger.Info("No ShedLock found with name: " + name + " for unlocking by: " + unlockedBy) + logger.Info("No ShedLock found with name: " + name + " for unlocking by: " + unlockedBy) return false } return true diff --git a/model/tag/tag.go b/model/tag/tag.go index e083d32..4e5afcf 100644 --- a/model/tag/tag.go +++ b/model/tag/tag.go @@ -1,18 +1,15 @@ package tag import ( - "go.uber.org/zap" "gorm.io/gorm" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewTagRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewTagRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } diff --git a/model/team/team.go b/model/team/team.go index f58021d..e0ca131 100644 --- a/model/team/team.go +++ b/model/team/team.go @@ -3,7 +3,6 @@ package team import ( "encoding/json" "fmt" - "go.uber.org/zap" "gorm.io/gorm" "houston/model/log" utils "houston/service/utils" @@ -11,7 +10,6 @@ import ( ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB logRepository *log.Repository } @@ -20,9 +18,8 @@ var valueBeforeUpdate TeamEntity var valueAfterUpdate TeamEntity var differences []utils.Difference -func NewTeamRepository(logger *zap.Logger, gormClient *gorm.DB, logRepository *log.Repository) *Repository { +func NewTeamRepository(gormClient *gorm.DB, logRepository *log.Repository) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, logRepository: logRepository, } diff --git a/model/user/user.go b/model/user/user.go index 15501e5..df2b5af 100644 --- a/model/user/user.go +++ b/model/user/user.go @@ -2,18 +2,15 @@ package user import ( "errors" - "go.uber.org/zap" "gorm.io/gorm" ) type Repository struct { - logger *zap.Logger gormClient *gorm.DB } -func NewUserRepository(logger *zap.Logger, gormClient *gorm.DB) *Repository { +func NewUserRepository(gormClient *gorm.DB) *Repository { return &Repository{ - logger: logger, gormClient: gormClient, } } diff --git a/pkg/postgres/config.go b/pkg/postgres/config.go index f4f7214..2d12285 100644 --- a/pkg/postgres/config.go +++ b/pkg/postgres/config.go @@ -1,6 +1,7 @@ package postgres import ( + "houston/logger" "os" "time" @@ -9,12 +10,9 @@ import ( "gorm.io/gorm" ) -type Client struct { - logger *zap.Logger - gormClient *gorm.DB -} +type Client struct{ gormClient *gorm.DB } -func NewGormClient(dsn string, connMaxIdleTime string, connMaxLifetime string, setMaxIdleConns int, setMaxOpenConns int, logger *zap.Logger) *gorm.DB { +func NewGormClient(dsn string, connMaxIdleTime string, connMaxLifetime string, setMaxIdleConns int, setMaxOpenConns int) *gorm.DB { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { logger.Error("database connection failed", zap.Error(err)) diff --git a/pkg/s3/config.go b/pkg/s3/config.go index 3da572f..c2ab922 100644 --- a/pkg/s3/config.go +++ b/pkg/s3/config.go @@ -3,6 +3,7 @@ package s3 import ( "context" "fmt" + "houston/logger" "os" "path/filepath" @@ -20,21 +21,20 @@ type S3Operations interface { GetFileLink(bucketName, resourceName string) (string, error) } -func NewS3Operations(logger *zap.Logger) S3Operations { +func NewS3Operations() S3Operations { if s3Operations == nil { - s3Operations = newS3Client(logger) + s3Operations = newS3Client() return s3Operations } return s3Operations } type client struct { - logger *zap.Logger s3Client *s3.Client presignClient *s3.PresignClient } -func newS3Client(logger *zap.Logger) *client { +func newS3Client() *client { cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("ap-south-1")) if err != nil { logger.Error("s3 config load failed", zap.Error(err)) @@ -45,7 +45,6 @@ func newS3Client(logger *zap.Logger) *client { preSignClient := s3.NewPresignClient(awsS3Client) return &client{ - logger: logger, s3Client: awsS3Client, presignClient: preSignClient, } diff --git a/pkg/slackbot/channel.go b/pkg/slackbot/channel.go index 48fc0a9..1e34359 100644 --- a/pkg/slackbot/channel.go +++ b/pkg/slackbot/channel.go @@ -2,6 +2,7 @@ package slackbot import ( "fmt" + "houston/logger" "github.com/slack-go/slack" "go.uber.org/zap" @@ -14,7 +15,7 @@ func (c *Client) FindParticipants(channelId string) ([]string, error) { } channelInfo, _, err := c.socketModeClient.GetUsersInConversation(request) if err != nil { - c.logger.Error("find participants failed", zap.String("channel_id", channelId), zap.Error(err)) + logger.Error("find participants failed", zap.String("channel_id", channelId), zap.Error(err)) return nil, fmt.Errorf("fetch channel conversationInfo failed. err: %v", err) } @@ -29,34 +30,34 @@ func (c *Client) CreateChannel(channelName string) (string, error) { channel, err := c.socketModeClient.CreateConversation(request) if err != nil { - c.logger.Error("create slackbot channel failed", zap.String("channel_name", channelName), zap.Error(err)) + logger.Error("create slackbot channel failed", zap.String("channel_name", channelName), zap.Error(err)) return "", err } - c.logger.Info("created slackbot channel successfully", zap.String("channel_name", channelName), zap.String("channel_id", channel.ID)) + logger.Info("created slackbot channel successfully", zap.String("channel_name", channelName), zap.String("channel_id", channel.ID)) return channel.ID, nil } func (c *Client) SetChannelTopic(channelId, topic string) (string, error) { channel, err := c.socketModeClient.SetTopicOfConversation(channelId, topic) if err != nil { - c.logger.Error("set topic on slack channel failed", zap.String("channel_id", channelId), zap.Error(err)) + logger.Error("set topic on slack channel failed", zap.String("channel_id", channelId), zap.Error(err)) return "", err } - c.logger.Info("set topic on slack channel successful", zap.String("channel_id", channelId), zap.String("channel_id", channel.ID)) + logger.Info("set topic on slack channel successful", zap.String("channel_id", channelId), zap.String("channel_id", channel.ID)) return "", nil } func (c *Client) InviteUsersToConversation(channelId string, userId ...string) { _, err := c.socketModeClient.InviteUsersToConversation(channelId, userId...) if err != nil { - c.logger.Error("invite users to conversation failed", + logger.Error("invite users to conversation failed", zap.String("channel_id", channelId), zap.Any("user_ids", userId), zap.Error(err)) return } - c.logger.Info("successfully invite users to conversation", zap.String("channel_id", channelId), zap.Any("user_ids", userId)) + logger.Info("successfully invite users to conversation", zap.String("channel_id", channelId), zap.Any("user_ids", userId)) } func (c *Client) GetConversationInfo(channelId string) (*slack.Channel, error) { @@ -64,7 +65,7 @@ func (c *Client) GetConversationInfo(channelId string) (*slack.Channel, error) { ChannelID: channelId, }) if err != nil { - c.logger.Info("failed while fetching conversation info", zap.Error(err)) + logger.Info("failed while fetching conversation info", zap.Error(err)) return nil, err } return channel, nil diff --git a/pkg/slackbot/config.go b/pkg/slackbot/config.go index 5b64551..24b5521 100644 --- a/pkg/slackbot/config.go +++ b/pkg/slackbot/config.go @@ -2,17 +2,14 @@ package slackbot import ( "github.com/slack-go/slack/socketmode" - "go.uber.org/zap" ) type Client struct { socketModeClient *socketmode.Client - logger *zap.Logger } -func NewSlackClient(logger *zap.Logger, socketModeClient *socketmode.Client) *Client { +func NewSlackClient(socketModeClient *socketmode.Client) *Client { return &Client{ socketModeClient: socketModeClient, - logger: logger, } } diff --git a/pkg/slackbot/users.go b/pkg/slackbot/users.go index 15d4658..db46129 100644 --- a/pkg/slackbot/users.go +++ b/pkg/slackbot/users.go @@ -4,6 +4,7 @@ import ( "github.com/slack-go/slack" "github.com/thoas/go-funk" "go.uber.org/zap" + "houston/logger" ) func (c *Client) GetUsersInfo(users ...string) (*[]slack.User, error) { @@ -15,7 +16,7 @@ func (c *Client) GetUsersInfo(users ...string) (*[]slack.User, error) { for usersList := range splittedUsersList { usersInfoResponse, err := c.socketModeClient.GetUsersInfo(splittedUsersList[usersList]...) if err != nil { - c.logger.Error("get users info failed", zap.Any("users", splittedUsersList[usersList]), zap.Error(err)) + logger.Error("get users info failed", zap.Any("users", splittedUsersList[usersList]), zap.Error(err)) emptyArray := make([]slack.User, len(splittedUsersList)) return &emptyArray, nil } @@ -31,7 +32,7 @@ func (c *Client) GetUsersInConversation(channelId string) ([]string, error) { ChannelID: channelId, }) if err != nil { - c.logger.Error("error in getting users from conversations", + logger.Error("error in getting users from conversations", zap.String("channelId", channelId), zap.Error(err)) return nil, err } @@ -41,7 +42,7 @@ func (c *Client) GetUsersInConversation(channelId string) ([]string, error) { func (c *Client) GetUserByEmail(userEmail string) (*slack.User, error) { user, err := c.socketModeClient.GetUserByEmail(userEmail) if err != nil { - c.logger.Error("error in getting user by email", zap.String("email", userEmail), zap.Error(err)) + logger.Error("error in getting user by email", zap.String("email", userEmail), zap.Error(err)) return nil, err } return user, err @@ -50,7 +51,7 @@ func (c *Client) GetUserByEmail(userEmail string) (*slack.User, error) { func (c *Client) GetUserEmailById(userId string) (string, error) { users, err := c.GetUsersInfo(userId) if err != nil { - c.logger.Error("error in getting user info by id", zap.String("id", userId), zap.Error(err)) + logger.Error("error in getting user info by id", zap.String("id", userId), zap.Error(err)) return "Anonymous-" + userId, err } usersInfo := *users @@ -62,7 +63,7 @@ func (c *Client) GetUserEmailsOrNameByIds(userIds ...string) (map[string]string, users, err := c.GetUsersInfo(userIds...) if err != nil { - c.logger.Error("error in getting user info by id", zap.Any("id", userIds), zap.Error(err)) + logger.Error("error in getting user info by id", zap.Any("id", userIds), zap.Error(err)) return userIdAndIdentityMapping, err } usersInfo := *users diff --git a/service/auth_service.go b/service/auth_service.go index d858d9b..fec39b5 100644 --- a/service/auth_service.go +++ b/service/auth_service.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "go.uber.org/zap" "houston/internal/clients" + "houston/logger" "houston/pkg/slackbot" "strings" ) @@ -12,14 +13,12 @@ import ( type AuthService struct { mjolnirClient *clients.MjolnirClient slackClient *slackbot.Client - logger *zap.Logger } -func NewAuthService(mjolnirClient *clients.MjolnirClient, slackClient *slackbot.Client, logger *zap.Logger) *AuthService { +func NewAuthService(mjolnirClient *clients.MjolnirClient, slackClient *slackbot.Client) *AuthService { return &AuthService{ mjolnirClient: mjolnirClient, slackClient: slackClient, - logger: logger, } } @@ -39,11 +38,11 @@ func (authService *AuthService) checkIfManagerOrAdmin( userEmail := context.Request.Header.Get("X-User-Email") sessionResponse, err := authService.mjolnirClient.GetSessionResponse(sessionToken) if err != nil || sessionResponse.StatusCode == 401 { - authService.logger.Error(fmt.Sprintf("error occurred while getting session data from mjolnir for %v", userEmail), zap.Error(err)) + logger.Error(fmt.Sprintf("error occurred while getting session data from mjolnir for %v", userEmail), zap.Error(err)) return false, nil } if sessionResponse.EmailId != userEmail { - authService.logger.Error(fmt.Sprintf("user email: %v does not match the email linked to the session token", userEmail)) + logger.Error(fmt.Sprintf("user email: %v does not match the email linked to the session token", userEmail)) return false, nil } userRoles := strings.Join(sessionResponse.Roles, ",") @@ -55,7 +54,7 @@ func (authService *AuthService) checkIfManagerOrAdmin( if strings.Contains(expectedRoles, "Manager") { userInfo, err := authService.slackClient.GetUserByEmail(userEmail) if err != nil { - authService.logger.Error(fmt.Sprintf("User with email %v was not found in slack", userEmail), zap.Error(err)) + logger.Error(fmt.Sprintf("User with email %v was not found in slack", userEmail), zap.Error(err)) return false, nil } if userInfo.ID == managerSlackHandle { @@ -70,11 +69,11 @@ func (authService *AuthService) checkIfAdminOrTeamMember(context *gin.Context, t userEmail := context.Request.Header.Get("X-User-Email") sessionResponse, err := authService.mjolnirClient.GetSessionResponse(sessionToken) if err != nil || sessionResponse.StatusCode == 401 { - authService.logger.Error(fmt.Sprintf("error occurred while getting session data from mjolnir for %v", userEmail), zap.Error(err)) + logger.Error(fmt.Sprintf("error occurred while getting session data from mjolnir for %v", userEmail), zap.Error(err)) return false, nil } if sessionResponse.EmailId != userEmail { - authService.logger.Error(fmt.Sprintf("user email: %v does not match the email linked to the session token", userEmail)) + logger.Error(fmt.Sprintf("user email: %v does not match the email linked to the session token", userEmail)) return false, nil } if teamMembers == nil || len(teamMembers) == 0 { @@ -82,7 +81,7 @@ func (authService *AuthService) checkIfAdminOrTeamMember(context *gin.Context, t } userInfo, err := authService.slackClient.GetUserByEmail(userEmail) if err != nil { - authService.logger.Error(fmt.Sprintf("User with email %v was not found in slack", userEmail), zap.Error(err)) + logger.Error(fmt.Sprintf("User with email %v was not found in slack", userEmail), zap.Error(err)) return false, nil } return strings.Contains(strings.Join(sessionResponse.Roles, ","), string(Admin)) || diff --git a/service/filter_service.go b/service/filter_service.go index 3d8c4ad..122f78e 100644 --- a/service/filter_service.go +++ b/service/filter_service.go @@ -1,6 +1,7 @@ package service import ( + logger "houston/logger" "houston/model/incident" "houston/model/log" "houston/model/severity" @@ -16,61 +17,59 @@ import ( ) type filterService struct { - gin *gin.Engine - logger *zap.Logger - db *gorm.DB + gin *gin.Engine + db *gorm.DB } -func NewFilterService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB) *filterService { +func NewFilterService(gin *gin.Engine, db *gorm.DB) *filterService { return &filterService{ - gin: gin, - logger: logger, - db: db, + gin: gin, + db: db, } } func (f *filterService) GetFilters(c *gin.Context) { correlationId := c.GetHeader("X-Correlation-Id") - f.logger.Info("Inside GetFilter function", zap.String("correlationId", correlationId)) + logger.Info("Inside GetFilter function", zap.String("correlationId", correlationId)) var filterResponses []response.FilterResponse incidentRepository, severityRepository, teamRespository := f.GetEntityRepositories() incidentStatusFilterData, err := f.GetIncidentStatusFilterData(incidentRepository) if err != nil { - f.logger.Error("error in fetching incident status data", zap.Error(err)) + logger.Error("error in fetching incident status data", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) } severityFilterData, err := f.GetSeverityFilterData(severityRepository) if err != nil { - f.logger.Error("error in fetching severity data", zap.Error(err)) + logger.Error("error in fetching severity data", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) } teamFilterData, err := f.GetTeamFilterData(teamRespository) if err != nil { - f.logger.Error("error in fetching team data", zap.Error(err)) + logger.Error("error in fetching team data", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) } filterResponses = append(filterResponses, *incidentStatusFilterData, *severityFilterData, *teamFilterData) - f.logger.Info("Exiting GetFilter function", zap.String("correlationId", correlationId)) + logger.Info("Exiting GetFilter function", zap.String("correlationId", correlationId)) c.JSON(http.StatusOK, common.SuccessResponse(filterResponses, http.StatusOK)) } func (f *filterService) GetEntityRepositories() ( *incident.Repository, *severity.Repository, *team.Repository) { - severityRepository := severity.NewSeverityRepository(f.logger, f.db) - logRepository := log.NewLogRepository(f.logger, f.db) - teamRespository := team.NewTeamRepository(f.logger, f.db, logRepository) - incidentRepository := incident.NewIncidentRepository(f.logger, f.db, severityRepository, logRepository, teamRespository, nil) + severityRepository := severity.NewSeverityRepository(f.db) + logRepository := log.NewLogRepository(f.db) + teamRespository := team.NewTeamRepository(f.db, logRepository) + incidentRepository := incident.NewIncidentRepository(f.db, severityRepository, logRepository, teamRespository, nil) return incidentRepository, severityRepository, teamRespository } func (f *filterService) GetIncidentStatusFilterData(incidentRepository *incident.Repository) (*response.FilterResponse, error) { incidentStatusEntities, err := incidentRepository.FetchAllIncidentStatuses() if err != nil { - f.logger.Error("error in fetching incident statues", zap.Error(err)) + logger.Error("error in fetching incident statues", zap.Error(err)) return nil, err } var incidentStatusOptions []response.Options @@ -93,7 +92,7 @@ func (f *filterService) GetIncidentStatusFilterData(incidentRepository *incident func (f *filterService) GetSeverityFilterData(severityRepository *severity.Repository) (*response.FilterResponse, error) { severityEntities, err := severityRepository.GetAllActiveSeverity() if err != nil { - f.logger.Error("error in fetching severities", zap.Error(err)) + logger.Error("error in fetching severities", zap.Error(err)) return nil, err } var severityOptions []response.Options @@ -119,7 +118,7 @@ func (f *filterService) GetTeamFilterData(teamRepository *team.Repository) (*res var otherTeamOptions []response.Options teamEntities, err := teamRepository.GetAllActiveTeams() if err != nil { - f.logger.Error("error in fetching incident statues", zap.Error(err)) + logger.Error("error in fetching incident statues", zap.Error(err)) return nil, err } for _, team := range *teamEntities { diff --git a/service/incident/incident_service_v2.go b/service/incident/incident_service_v2.go index 12b8780..f1a55a4 100644 --- a/service/incident/incident_service_v2.go +++ b/service/incident/incident_service_v2.go @@ -13,6 +13,7 @@ import ( "gorm.io/gorm" "houston/common/util" "houston/internal/processor/action/view" + logger "houston/logger" "houston/model/incident" "houston/model/log" "houston/model/severity" @@ -27,7 +28,6 @@ import ( ) type IncidentServiceV2 struct { - logger *zap.Logger db *gorm.DB slackService *slack.SlackService teamRepository *team.Repository @@ -36,17 +36,16 @@ type IncidentServiceV2 struct { userRepository *user.Repository } -func NewIncidentServiceV2(logger *zap.Logger, db *gorm.DB) *IncidentServiceV2 { - logRepository := log.NewLogRepository(logger, db) - teamRepository := team.NewTeamRepository(logger, db, logRepository) - severityRepository := severity.NewSeverityRepository(logger, db) - userRepository := user.NewUserRepository(logger, db) - slackService := slack.NewSlackService(logger) +func NewIncidentServiceV2(db *gorm.DB) *IncidentServiceV2 { + logRepository := log.NewLogRepository(db) + teamRepository := team.NewTeamRepository(db, logRepository) + severityRepository := severity.NewSeverityRepository(db) + userRepository := user.NewUserRepository(db) + slackService := slack.NewSlackService() incidentRepository := incident.NewIncidentRepository( - logger, db, severityRepository, logRepository, teamRepository, slackService.SocketModeClient, + db, severityRepository, logRepository, teamRepository, slackService.SocketModeClient, ) return &IncidentServiceV2{ - logger: logger, db: db, slackService: slackService, teamRepository: teamRepository, @@ -71,7 +70,7 @@ func (i *IncidentServiceV2) CreateIncident( ) (service.IncidentResponse, error) { emptyResponse := service.IncidentResponse{} // Create incident dto - i.logger.Info(fmt.Sprintf("%s received request to create incident: %+v", logTag, request)) + logger.Info(fmt.Sprintf("%s received request to create incident: %+v", logTag, request)) teamEntity, severityEntity, err := getTeamAndSeverityEntity(i, request.TeamID, request.SeverityID) if err != nil { return emptyResponse, err @@ -80,28 +79,28 @@ func (i *IncidentServiceV2) CreateIncident( if err != nil { return emptyResponse, err } - i.logger.Info(fmt.Sprintf("%s CreateIncidentDTO created", logTag)) + logger.Info(fmt.Sprintf("%s CreateIncidentDTO created", logTag)) // Save the incident to the database incidentEntity, err := i.incidentRepository.CreateIncidentEntity(incidentDTO) if err != nil { - i.logger.Error(fmt.Sprintf("%s Error while creating incident", logTag), zap.Error(err)) + logger.Error(fmt.Sprintf("%s Error while creating incident", logTag), zap.Error(err)) return emptyResponse, err } incidentName := incidentEntity.IncidentName - i.logger.Info(fmt.Sprintf("%s Incident entity created. Incident is: %s", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s Incident entity created. Incident is: %s", logTag, incidentName)) // Create slack channel // Call slack service to create a slack channel for incident channel, err := i.slackService.CreateSlackChannel(incidentEntity.ID) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s [%s] Error while crating slack channel", logTag, incidentName), zap.Error(err), ) return emptyResponse, err } - i.logger.Info(fmt.Sprintf( + logger.Info(fmt.Sprintf( "%s [%s] Slack channel created. Channel name is %s", logTag, incidentName, channel.Name), ) // Update channel details to incident entity @@ -110,10 +109,10 @@ func (i *IncidentServiceV2) CreateIncident( incidentEntity.UpdatedBy = request.CreatedBy err = i.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Failed to update the slack channel details in DB", logTag, incidentName)) + logger.Error(fmt.Sprintf("%s [%s] Failed to update the slack channel details in DB", logTag, incidentName)) return emptyResponse, err } - i.logger.Info(fmt.Sprintf("%s [%s] Slack channel details updated to incident entity", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Slack channel details updated to incident entity", logTag, incidentName)) // Post incident summary // Call slack service, provide required message to be posted @@ -121,16 +120,16 @@ func (i *IncidentServiceV2) CreateIncident( if err != nil { return emptyResponse, err } - i.logger.Info(fmt.Sprintf("%s [%s] Team, Severity and IncidentStatus entity fetched successfully", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Team, Severity and IncidentStatus entity fetched successfully", logTag, incidentName)) err = i.slackService.SetChannelTopic(channel, teamEntity, severityEntity, incidentEntity) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s [%s] Failed to set channel topic", logTag, incidentName), zap.Error(err), ) } - i.logger.Info(fmt.Sprintf("%s [%s] Channel topic is set", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Channel topic is set", logTag, incidentName)) if source == "SLACK" { go func() { @@ -172,13 +171,13 @@ func createIncidentWorkflow( i.slackService, ) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s [%s] Error in posting incident summary to slack channel", logTag, incidentName), zap.Error(err), ) return err } - i.logger.Info(fmt.Sprintf("%s [%s] Incident summary posted", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Incident summary posted", logTag, incidentName)) // Add required members to channel // Add incident creator to the channel @@ -189,7 +188,7 @@ func createIncidentWorkflow( // Add user who created the incident err := i.slackService.InviteUsersToConversation(incidentEntity.SlackChannel, slackUser.SlackUserId) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf( "%s [%s] Failed to add the incident creator %s to the channel: %s", logTag, incidentName, incidentEntity.CreatedBy, incidentEntity.SlackChannel, @@ -197,7 +196,7 @@ func createIncidentWorkflow( ) return err } - i.logger.Info(fmt.Sprintf("%s [%s] Incident creator is added to the slack channel", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Incident creator is added to the slack channel", logTag, incidentName)) } // Call addMembersToIncident(), provide channel, team name and severity err = addMembersToIncident(channel, i, teamEntity, severityEntity, incidentName) @@ -205,7 +204,7 @@ func createIncidentWorkflow( // Tag oncall // Call slack service to tag the oncall, provide incident id and slack id to be tagged tagPseOrDevOncallToIncident(channel, severityEntity, teamEntity, i) - i.logger.Info(fmt.Sprintf("%s [%s] oncall us tagged to the incident", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] oncall us tagged to the incident", logTag, incidentName)) // Assign responder // Call assignResponder(), provide incident id, team service should assign responder @@ -218,13 +217,13 @@ func createIncidentWorkflow( incidentName, ) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s [%s] Failed to assign responder to the incident", logTag, incidentName), zap.Error(err), ) return err } - i.logger.Info(fmt.Sprintf("%s [%s] Responder is assigned to the incident", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Responder is assigned to the incident", logTag, incidentName)) // Post message about the SLA if incidentEntity.SeverityId >= 3 && incidentEntity.Status <= 4 { @@ -236,22 +235,22 @@ func createIncidentWorkflow( ) _, err := i.slackService.PostMessage(message, false, channel) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Failed to SLA information to the slack channel", logTag, incidentName), zap.Error(err)) + logger.Error(fmt.Sprintf("%s [%s] Failed to SLA information to the slack channel", logTag, incidentName), zap.Error(err)) return err } } if viper.GetBool("ENABLE_GMEET") { - gmeet, err := createGmeetLink(i.logger, channel.Name) + gmeet, err := createGmeetLink(channel.Name) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Error while creating gmeet", logTag, incidentName), zap.Error(err)) + logger.Error(fmt.Sprintf("%s [%s] Error while creating gmeet", logTag, incidentName), zap.Error(err)) } else { _, err := i.slackService.PostMessage(fmt.Sprint("gmeet: ", gmeet), false, channel) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Failed to post Google Meet link: %s", logTag, incidentName, gmeet)) + logger.Error(fmt.Sprintf("%s [%s] Failed to post Google Meet link: %s", logTag, incidentName, gmeet)) } } - i.logger.Info(fmt.Sprintf("%s [%s] Google Meeting link posted to the channel %s", logTag, incidentName, gmeet)) + logger.Info(fmt.Sprintf("%s [%s] Google Meeting link posted to the channel %s", logTag, incidentName, gmeet)) } return nil } @@ -393,7 +392,7 @@ func addMembersToIncident( err := i.slackService.InviteUsersToConversation(channel.ID, allUserToBeAddedIntoIncident[:]...) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf( "%s [%s] Error in adding members [%+v] to the channel %s", logTag, incidentName, uniqueUsersFromDB, channel.Name, @@ -402,7 +401,7 @@ func addMembersToIncident( ) return err } else { - i.logger.Info(fmt.Sprintf("%s [%s] All the members are added to the slack channel", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] All the members are added to the slack channel", logTag, incidentName)) } return nil } @@ -426,17 +425,17 @@ func assignResponderToIncident( } err := i.incidentRepository.UpsertIncidentRole(&addIncidentRoleRequest) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Failed to upsert incident_role", logTag, incidentName), zap.Error(err)) + logger.Error(fmt.Sprintf("%s [%s] Failed to upsert incident_role", logTag, incidentName), zap.Error(err)) return err } - i.logger.Info(fmt.Sprintf("%s [%s] Incident role upserted", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] Incident role upserted", logTag, incidentName)) _, err = i.slackService.PostMessageByChannelID( fmt.Sprintf("<@%s> is assigned as *%s* by <@%s>", addIncidentRoleRequest.UserId, addIncidentRoleRequest.Role, addIncidentRoleRequest.CreatedById), false, incidentEntity.SlackChannel, ) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Post response failed for AssignResponderToIncident", logTag, incidentName), zap.Error(err)) + logger.Error(fmt.Sprintf("%s [%s] Post response failed for AssignResponderToIncident", logTag, incidentName), zap.Error(err)) return err } } @@ -492,7 +491,7 @@ func getIncidentStatusEntity( ) (*incident.IncidentStatusEntity, error) { incidentStatusEntity, err := i.incidentRepository.FindIncidentStatusById(statusID) if err != nil || incidentStatusEntity == nil { - i.logger.Error( + logger.Error( fmt.Sprintf( "%s [%s] Error in finding incident statusID entity for statusID: %d in incidentID: %d", logTag, incidentName, statusID, incidentID, @@ -512,7 +511,7 @@ func getTeamAndSeverityEntity( teamID, err := strconv.ParseUint(team, 10, 64) teamEntity, err := i.teamRepository.FindTeamById(uint(teamID)) if err != nil || teamEntity == nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s Error in finding team entity for team ID: %d", logTag, teamID), ) return nil, nil, err @@ -521,7 +520,7 @@ func getTeamAndSeverityEntity( severityID, err := strconv.ParseUint(severity, 10, 64) severityEntity, err := i.severityRepository.FindSeverityById(uint(severityID)) if err != nil || severityEntity == nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s Error in finding severity entity for severity ID: %d", logTag, severityID), ) return nil, nil, err @@ -541,7 +540,7 @@ func tagPseOrDevOncallToIncident( //oncall handles should already be added to channel ts, err := i.slackService.PostMessage(fmt.Sprintf("<@%s>", onCallToBeTagged), false, channel) if err != nil { - i.logger.Debug( + logger.Debug( fmt.Sprintf("%s [%s] failed to tag oncall in channel: %s", logTag, incidentName, channel.Name), zap.Error(err), ) @@ -554,10 +553,10 @@ func tagPseOrDevOncallToIncident( //User id needs to sliced from `<@XXXXXXXXXXXX>` format to `XXXXXXXXXXXX` err := i.slackService.InviteUsersToConversation(channel.ID, msg[1].Text[2:13]) if err != nil { - i.logger.Error(fmt.Sprintf("%s [%s] Failed to invite the user tagged by the oncall bot", logTag, incidentName)) + logger.Error(fmt.Sprintf("%s [%s] Failed to invite the user tagged by the oncall bot", logTag, incidentName)) return } - i.logger.Info(fmt.Sprintf("%s [%s] User tagged by the oncall bot is invited to the incident channel", logTag, incidentName)) + logger.Info(fmt.Sprintf("%s [%s] User tagged by the oncall bot is invited to the incident channel", logTag, incidentName)) } }() } @@ -599,16 +598,16 @@ func postInWebhookSlackChannel( ) _, err := i.slackService.PostMessageByChannelID(msg, false, teamEntity.WebhookSlackChannel) if err != nil { - i.logger.Error( + logger.Error( fmt.Sprintf("%s [%s] Failed to post update in webhook slack channel: %s", logTag, incidentName, incidentEntity.SlackChannel), zap.Error(err), ) - i.logger.Info(fmt.Sprintf("%s [%s] Update posted to the webhook slack channel: %s", logTag, incidentName, incidentEntity.SlackChannel)) + logger.Info(fmt.Sprintf("%s [%s] Update posted to the webhook slack channel: %s", logTag, incidentName, incidentEntity.SlackChannel)) return } } -func createGmeetLink(logger *zap.Logger, channelName string) (string, error) { +func createGmeetLink(channelName string) (string, error) { incidentName := channelName calclient, err := calendar.NewService(context.Background(), option.WithCredentialsFile(viper.GetString("GMEET_CONFIG_FILE_PATH"))) if err != nil { diff --git a/service/incident_service.go b/service/incident_service.go index cadeb0f..dadd7cc 100644 --- a/service/incident_service.go +++ b/service/incident_service.go @@ -7,6 +7,7 @@ import ( "houston/common/util" "houston/internal/processor/action" "houston/internal/processor/action/view" + logger "houston/logger" "houston/model/incident" "houston/model/log" "houston/model/severity" @@ -34,7 +35,6 @@ import ( type incidentService struct { gin *gin.Engine - logger *zap.Logger db *gorm.DB socketModeClient *socketmode.Client teamRepository *team.Repository @@ -45,18 +45,17 @@ type incidentService struct { slackbotClient *slackbot.Client } -func NewIncidentService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, socketModeClient *socketmode.Client) *incidentService { - severityRepository := severity.NewSeverityRepository(logger, db) - logRepository := log.NewLogRepository(logger, db) - teamRepository := team.NewTeamRepository(logger, db, logRepository) - incidentRepository := incident.NewIncidentRepository(logger, db, severityRepository, logRepository, teamRepository, socketModeClient) - userRepository := user.NewUserRepository(logger, db) +func NewIncidentService(gin *gin.Engine, db *gorm.DB, socketModeClient *socketmode.Client) *incidentService { + severityRepository := severity.NewSeverityRepository(db) + logRepository := log.NewLogRepository(db) + teamRepository := team.NewTeamRepository(db, logRepository) + incidentRepository := incident.NewIncidentRepository(db, severityRepository, logRepository, teamRepository, socketModeClient) + userRepository := user.NewUserRepository(db) messageUpdateAction := action.NewIncidentChannelMessageUpdateAction( - socketModeClient, logger, incidentRepository, teamRepository, severityRepository) - slackBot := slackbot.NewSlackClient(logger, socketModeClient) + socketModeClient, incidentRepository, teamRepository, severityRepository) + slackBot := slackbot.NewSlackClient(socketModeClient) return &incidentService{ gin: gin, - logger: logger, db: db, socketModeClient: socketModeClient, teamRepository: teamRepository, @@ -80,12 +79,12 @@ func (i *incidentService) GetIncidents(c *gin.Context) { if IncidentId != "" { numIncidentId, err := strconv.Atoi(IncidentId) if err != nil { - i.logger.Error("error in converting string to int", zap.String("IncidentId", IncidentId), zap.Error(err)) + logger.Error("error in converting string to int", zap.String("IncidentId", IncidentId), zap.Error(err)) c.JSON(http.StatusBadGateway, common.ErrorResponse(err, http.StatusBadRequest, nil)) } incidentEntity, err := i.incidentRepository.FindIncidentById(uint(numIncidentId)) if err != nil { - i.logger.Error("error in finding incident by id", zap.Int("numIncidentId", numIncidentId)) + logger.Error("error in finding incident by id", zap.Int("numIncidentId", numIncidentId)) c.JSON(http.StatusBadGateway, common.ErrorResponse(err, http.StatusBadRequest, nil)) } c.JSON(http.StatusOK, common.SuccessResponse(service.ConvertToIncidentResponse(*incidentEntity), http.StatusOK)) @@ -95,7 +94,7 @@ func (i *incidentService) GetIncidents(c *gin.Context) { pageSize, pageNumber, err := utils.ValidatePage(c.Query("page_size"), c.Query("page_number")) if err != nil { - i.logger.Error("error in query parameters", zap.Int64("page_size", pageSize), + logger.Error("error in query parameters", zap.Int64("page_size", pageSize), zap.Int64("page_number", pageNumber), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return @@ -112,7 +111,7 @@ func (i *incidentService) GetIncidents(c *gin.Context) { To: To, }, i.incidentRepository) if err != nil { - i.logger.Info("error in fetching incidents", zap.Error(err)) + logger.Info("error in fetching incidents", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -120,7 +119,7 @@ func (i *incidentService) GetIncidents(c *gin.Context) { incidentResponses, err := i.GetIncidentResponseFromIncidentEntity( incidents, i.incidentRepository, i.severityRepository, i.teamRepository) if err != nil { - i.logger.Error("error in GetIncidentResponseFromIncidentEntity", zap.Error(err)) + logger.Error("error in GetIncidentResponseFromIncidentEntity", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -145,25 +144,25 @@ func (i *incidentService) GetIncidentResponseFromIncidentEntity( teams, err := teamRepository.GetAllActiveTeams() if err != nil { - i.logger.Error("error in fetching teams", zap.Error(err)) + logger.Error("error in fetching teams", zap.Error(err)) return nil, err } severities, err := severityRepository.GetAllActiveSeverity() if err != nil { - i.logger.Error("error in fetching severities", zap.Error(err)) + logger.Error("error in fetching severities", zap.Error(err)) return nil, err } incidentStatuses, err := incidentRepository.FetchAllIncidentStatuses() if err != nil { - i.logger.Error("error in fetching incidentStatuses", zap.Error(err)) + logger.Error("error in fetching incidentStatuses", zap.Error(err)) return nil, err } userEmailMappings, err := i.GetUserIdAndIdentityMappingOfAllIncidents(incidents) if err != nil { - i.logger.Error("error in fetching user emails mapping by ids", zap.Error(err)) + logger.Error("error in fetching user emails mapping by ids", zap.Error(err)) return nil, err } @@ -212,7 +211,7 @@ func (i *incidentService) GetUserIdAndIdentityMappingOfAllIncidents(incidents [] }).([]string)...) userIdAndIdentityMapping, err := i.slackbotClient.GetUserEmailsOrNameByIds(listOfUserIds...) if err != nil { - i.logger.Error("error in fetching user emails by ids", zap.Any("listOfUserIds", listOfUserIds), zap.Error(err)) + logger.Error("error in fetching user emails by ids", zap.Any("listOfUserIds", listOfUserIds), zap.Error(err)) return map[string]string{}, err } return userIdAndIdentityMapping, nil @@ -253,7 +252,7 @@ func (i *incidentService) GetIncidentHeader(c *gin.Context) { var incidentHeaderResponse service.IncidentHeaderResponse severityEntities, err := i.severityRepository.GetAllActiveSeverity() if err != nil { - i.logger.Error("error in fetching severities", zap.Error(err)) + logger.Error("error in fetching severities", zap.Error(err)) } for _, severity := range *severityEntities { severityResponse := service.IncidentHeaderOption{ @@ -265,7 +264,7 @@ func (i *incidentService) GetIncidentHeader(c *gin.Context) { incidentStatusEntities, err := i.incidentRepository.FetchAllIncidentStatuses() if err != nil { - i.logger.Error("error in fetching incident statuses", zap.Error(err)) + logger.Error("error in fetching incident statuses", zap.Error(err)) } for _, incidentStatus := range *incidentStatusEntities { incidentStatusResponse := service.IncidentHeaderOption{ @@ -278,7 +277,7 @@ func (i *incidentService) GetIncidentHeader(c *gin.Context) { teamEntities, err := i.teamRepository.GetAllActiveTeams() if err != nil { - i.logger.Error("error in fetching severities", zap.Error(err)) + logger.Error("error in fetching severities", zap.Error(err)) } for _, team := range *teamEntities { teamResponse := service.IncidentHeaderOption{ @@ -296,7 +295,7 @@ func (i *incidentService) GetTeamIncidents(c *gin.Context) { if InputStatuses == "" { incidentStatuses, err := i.incidentRepository.FetchAllIncidentStatuses() if err != nil { - i.logger.Error("error in fetching incident statuses", zap.Error(err)) + logger.Error("error in fetching incident statuses", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -314,7 +313,7 @@ func (i *incidentService) GetTeamIncidents(c *gin.Context) { PageSize: viper.GetInt64("CRM_TEAM_INCIDENT_COUNT"), }, i.incidentRepository) if err != nil { - i.logger.Error("error in fetching incidents", zap.Error(err)) + logger.Error("error in fetching incidents", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -330,7 +329,7 @@ func (i *incidentService) CreateIncident(c *gin.Context) { } if err := utils.ValidateCreateIncidentRequest(createIncRequest); err != nil { - i.logger.Error("[Create incident Api] Error while creating incident", zap.Error(err)) + logger.Error("[Create incident Api] Error while creating incident", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -343,7 +342,7 @@ func (i *incidentService) CreateIncident(c *gin.Context) { // Save the incident to the database incidentEntity, err := i.incidentRepository.CreateIncidentEntity(incidentDTO) if err != nil { - i.logger.Error("[Create incident Api] Error while creating incident", zap.Error(err)) + logger.Error("[Create incident Api] Error while creating incident", zap.Error(err)) return } @@ -353,13 +352,13 @@ func (i *incidentService) CreateIncident(c *gin.Context) { incidentEntity.Status, ) if err != nil { - i.logger.Error("[CIP] failed while getting team, severity and status", zap.Error(err)) + logger.Error("[CIP] failed while getting team, severity and status", zap.Error(err)) return } channelID, err := i.createSlackChannel(incidentEntity) if err != nil { - i.logger.Error("[Create incident] Error while creating incident channel", zap.Error(err)) + logger.Error("[Create incident] Error while creating incident channel", zap.Error(err)) return } @@ -367,7 +366,7 @@ func (i *incidentService) CreateIncident(c *gin.Context) { _, err = i.postIncidentSummary(*channelID, incidentEntity, teamEntity, severityEntity, incidentStatusEntity) if err != nil { - i.logger.Error("[Create incident] error while posting incident summary", zap.Error(err)) + logger.Error("[Create incident] error while posting incident summary", zap.Error(err)) return } @@ -381,7 +380,7 @@ func (i *incidentService) CreateIncident(c *gin.Context) { // add default users to the incident err = i.addDefaultUsersToIncident(*channelID, teamEntity, severityEntity) if err != nil { - i.logger.Error("[Create Incident] error while adding default users to incident", zap.Error(err)) + logger.Error("[Create Incident] error while adding default users to incident", zap.Error(err)) return } @@ -395,7 +394,7 @@ func (i *incidentService) CreateIncident(c *gin.Context) { incidentEntity.CreatedBy, ) if err != nil { - i.logger.Error("[Create incident] Error while assigning responder to the incident ", zap.Error(err)) + logger.Error("[Create incident] Error while assigning responder to the incident ", zap.Error(err)) } if incidentEntity.SeverityId >= 3 && incidentEntity.Status <= 4 { @@ -505,7 +504,7 @@ func (i *incidentService) createSlackChannel(incidentEntity *incident.IncidentEn incidentEntity.IncidentName = channelName err = i.incidentRepository.UpdateIncident(incidentEntity) if err != nil { - i.logger.Error(fmt.Sprintf("[Create Incident failed to update the slack channel name for incident-id: %v", incidentEntity.ID)) + logger.Error(fmt.Sprintf("[Create Incident failed to update the slack channel name for incident-id: %v", incidentEntity.ID)) return nil, err } return &channelID, nil @@ -556,19 +555,19 @@ func (i *incidentService) UpdateIncident(c *gin.Context) { incidentEntity, err := i.incidentRepository.FindIncidentById(updateIncidentRequest.Id) if err != nil { - i.logger.Error("error in fetching incident", zap.Any("incidentId", updateIncidentRequest.Id), zap.Error(err)) + logger.Error("error in fetching incident", zap.Any("incidentId", updateIncidentRequest.Id), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } if incidentEntity == nil { - i.logger.Info("incident not found", zap.Any("incidentId", updateIncidentRequest.Id)) + logger.Info("incident not found", zap.Any("incidentId", updateIncidentRequest.Id)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("incident with id: %v not found", updateIncidentRequest.Id)), http.StatusBadRequest, nil)) return } userInfo, err := i.slackbotClient.GetUserByEmail(userEmail) if err != nil { - i.logger.Error(fmt.Sprintf("error in fetching user by email: %v, hence using user email as user Id", userEmail), zap.String("userEmail", userEmail), zap.Error(err)) + logger.Error(fmt.Sprintf("error in fetching user by email: %v, hence using user email as user Id", userEmail), zap.String("userEmail", userEmail), zap.Error(err)) userInfo = &slack.User{ ID: userEmail, } @@ -576,28 +575,28 @@ func (i *incidentService) UpdateIncident(c *gin.Context) { err = i.UpdateSeverityId(updateIncidentRequest, userInfo.ID, incidentEntity) if err != nil { - i.logger.Error("error in updating severity", zap.Error(err)) + logger.Error("error in updating severity", zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } err = i.UpdateStatus(updateIncidentRequest, userInfo.ID, incidentEntity.SlackChannel, incidentEntity) if err != nil { - i.logger.Error("error in updating status", zap.Error(err)) + logger.Error("error in updating status", zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } err = i.UpdateTeamId(updateIncidentRequest, userInfo.ID, incidentEntity) if err != nil { - i.logger.Error("error in updating teamId", zap.Error(err)) + logger.Error("error in updating teamId", zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } err = i.UpdateMetaData(updateIncidentRequest, incidentEntity, userInfo.ID) if err != nil { - i.logger.Error("error in updating metadata", zap.Error(err)) + logger.Error("error in updating metadata", zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -611,12 +610,12 @@ func (i *incidentService) UpdateIncident(c *gin.Context) { if updateIncidentRequest.SeverityId != "" || updateIncidentRequest.TeamId != "" { teamEntity, err := i.teamRepository.FindTeamById(incidentEntity.TeamId) if err != nil { - i.logger.Error(fmt.Sprintf("error in fetching team by id: %v", incidentEntity.TeamId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in fetching team by id: %v", incidentEntity.TeamId), zap.Error(err)) } incidentSeverityEntity, err := i.severityRepository.FindIncidentSeverityEntityById(int(incidentEntity.SeverityId)) if err != nil { - i.logger.Error(fmt.Sprintf("error in fetching severity by id: %v", incidentEntity.SeverityId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in fetching severity by id: %v", incidentEntity.SeverityId), zap.Error(err)) } topic := fmt.Sprintf("%s-%s(%s) Incident-%d | %s", teamEntity.Name, incidentSeverityEntity.Name, incidentSeverityEntity.Description, incidentEntity.ID, incidentEntity.Title) @@ -635,21 +634,21 @@ func (i *incidentService) UpdateSeverityId( if updateIncidentRequest.SeverityId != "" { num, err := strconv.ParseUint(updateIncidentRequest.SeverityId, 10, 64) if err != nil { - i.logger.Error("error in string to int conversion", + logger.Error("error in string to int conversion", zap.String("SeverityId", updateIncidentRequest.SeverityId), zap.Error(err)) return err } severityEntity, err := i.severityRepository.FindSeverityById(uint(num)) if err != nil { - i.logger.Error("error in fetching severity", zap.Any("severity", incidentEntity.SeverityId), zap.Error(err)) + logger.Error("error in fetching severity", zap.Any("severity", incidentEntity.SeverityId), zap.Error(err)) return err } if updateIncidentRequest.SeverityId != "" { num, err := strconv.ParseUint(updateIncidentRequest.SeverityId, 10, 64) if err != nil { - i.logger.Error("error in string to int conversion", + logger.Error("error in string to int conversion", zap.String("SeverityId", updateIncidentRequest.SeverityId), zap.Error(err)) return err } @@ -658,7 +657,7 @@ func (i *incidentService) UpdateSeverityId( incidentEntity.SeverityTat = time.Now().AddDate(0, 0, severityEntity.Sla) errMessage := util.PostIncidentSeverityUpdateMessage(userId, severityEntity.Name, incidentEntity.SlackChannel, i.socketModeClient) if errMessage != nil { - i.logger.Error("post response failed for IncidentUpdateSeverity", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateSeverity", zap.Error(errMessage)) return err } } @@ -673,7 +672,7 @@ func (i *incidentService) UpdateStatus( if updateIncidentRequest.Status != "" { num, err := strconv.ParseUint(updateIncidentRequest.Status, 10, 64) if err != nil { - i.logger.Error("error in string to int conversion", + logger.Error("error in string to int conversion", zap.String("Status", updateIncidentRequest.Status), zap.Error(err)) return err } @@ -682,7 +681,7 @@ func (i *incidentService) UpdateStatus( incidentStatus, _ := i.incidentRepository.FindIncidentStatusById(incidentEntity.Status) errMessage := util.PostIncidentStatusUpdateMessage(userId, incidentStatus.Name, slackChannel, i.socketModeClient) if errMessage != nil { - i.logger.Error("post response failed for IncidentUpdateStatus", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateStatus", zap.Error(errMessage)) return err } if incidentStatus.IsTerminalStatus { @@ -699,13 +698,13 @@ func (i *incidentService) UpdateTeamId( if updateIncidentRequest.TeamId != "" { severityEntity, err := i.severityRepository.FindSeverityById(incidentEntity.SeverityId) if err != nil { - i.logger.Error("error in fetching severity", zap.Any("severity", incidentEntity.SeverityId), zap.Error(err)) + logger.Error("error in fetching severity", zap.Any("severity", incidentEntity.SeverityId), zap.Error(err)) return err } if updateIncidentRequest.TeamId != "" { num, err := strconv.ParseUint(updateIncidentRequest.TeamId, 10, 64) if err != nil { - i.logger.Error("error in string to int conversion", + logger.Error("error in string to int conversion", zap.String("TeamId", updateIncidentRequest.TeamId), zap.Error(err)) return err } @@ -713,7 +712,7 @@ func (i *incidentService) UpdateTeamId( incidentEntity.TeamId = uint(num) teamEntity, err := i.teamRepository.FindTeamById(incidentEntity.TeamId) if err != nil { - i.logger.Error("error in fetching team by id", + logger.Error("error in fetching team by id", zap.String("TeamId", updateIncidentRequest.TeamId), zap.Error(err)) return err } @@ -721,12 +720,12 @@ func (i *incidentService) UpdateTeamId( userId, teamEntity.Name, severityEntity.Name, severityEntity.Description, incidentEntity.IncidentName, incidentEntity.Title, incidentEntity.SlackChannel, i.socketModeClient) if errMessage != nil { - i.logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateType", zap.Error(errMessage)) return err } err = i.addDefaultUsersToIncident(incidentEntity.SlackChannel, teamEntity, severityEntity) if err != nil { - i.logger.Error("[Update Incident] error while adding default users to incident", zap.Error(err)) + logger.Error("[Update Incident] error while adding default users to incident", zap.Error(err)) return err } @@ -747,7 +746,7 @@ func (i *incidentService) UpdateTeamId( incidentEntity.UpdatedBy, ) if err != nil { - i.logger.Error("[Update Incident][update team id] error while assigning responder to the incident ", zap.Error(err)) + logger.Error("[Update Incident][update team id] error while assigning responder to the incident ", zap.Error(err)) } } } @@ -769,7 +768,7 @@ func (i *incidentService) UpdateMetaData(updateIncidentRequest request.UpdateInc if incidentEntity.MetaData != nil { err := json.Unmarshal(incidentEntity.MetaData, &incidentMetadata) if err != nil { - i.logger.Error("error occurred while converting incident metadata to json", zap.Error(err)) + logger.Error("error occurred while converting incident metadata to json", zap.Error(err)) return err } } @@ -777,12 +776,12 @@ func (i *incidentService) UpdateMetaData(updateIncidentRequest request.UpdateInc var err error incidentEntity.MetaData, err = json.Marshal(incidentMetadata) if err != nil { - i.logger.Error("error occurred while converting incident metadata to json", zap.Error(err)) + logger.Error("error occurred while converting incident metadata to json", zap.Error(err)) return err } errMessage := util.PostIncidentCustomerDataUpdateMessage(updateIncidentRequest.MetaData, userId, incidentEntity.SlackChannel, i.socketModeClient) if errMessage != nil { - i.logger.Error("post response failed for IncidentUpdateCustomerData", zap.Error(errMessage)) + logger.Error("post response failed for IncidentUpdateCustomerData", zap.Error(errMessage)) return errMessage } } diff --git a/service/log_service.go b/service/log_service.go index 2f56409..c52baec 100644 --- a/service/log_service.go +++ b/service/log_service.go @@ -6,6 +6,7 @@ import ( "github.com/gin-gonic/gin" "go.uber.org/zap" "gorm.io/gorm" + logger "houston/logger" "houston/model/log" service "houston/service/response" common "houston/service/response/common" @@ -16,16 +17,14 @@ import ( type logService struct { gin *gin.Engine - logger *zap.Logger db *gorm.DB logRepository *log.Repository } -func NewLogService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB) *logService { - logRepository := log.NewLogRepository(logger, db) +func NewLogService(gin *gin.Engine, db *gorm.DB) *logService { + logRepository := log.NewLogRepository(db) return &logService{ gin: gin, - logger: logger, db: db, logRepository: logRepository, } @@ -36,14 +35,14 @@ func (l *logService) GetLogs(c *gin.Context) { id := c.Param("id") if len(logType) == 0 { - l.logger.Error("Log Type not provided") + logger.Error("Log Type not provided") c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("Log type not provided"), http.StatusBadRequest, nil)) return } recordId, err := strconv.Atoi(id) if err != nil { - l.logger.Error("error in converting string to int", zap.String("id", id), zap.Error(err)) + logger.Error("error in converting string to int", zap.String("id", id), zap.Error(err)) c.JSON(http.StatusBadGateway, common.ErrorResponse(errors.New("Invalid record id"), http.StatusBadRequest, nil)) return } @@ -51,7 +50,7 @@ func (l *logService) GetLogs(c *gin.Context) { logs, err := l.logRepository.FetchLogsByRelationNameAndRecordId(logType, uint(recordId)) if err != nil { - l.logger.Error("error in fetching logs by relation name and record", zap.String("id", id), zap.String("relation_name", logType), zap.Error(err)) + logger.Error("error in fetching logs by relation name and record", zap.String("id", id), zap.String("relation_name", logType), zap.Error(err)) c.JSON(http.StatusBadGateway, common.ErrorResponse(errors.New("Error in fetching logs"), http.StatusBadRequest, nil)) return } @@ -62,7 +61,7 @@ func (l *logService) GetLogs(c *gin.Context) { var changes []diffUtil.Difference err := json.Unmarshal(logs[0].Changes, &changes) if err != nil { - l.logger.Error( + logger.Error( "error in json unmarshall for fetching relation name and record", zap.String("id", id), zap.String("relation_name", logType), zap.Error(err)) } else { diff --git a/service/request/team_filters.go b/service/request/team_filters.go index 650b13a..609f1b2 100644 --- a/service/request/team_filters.go +++ b/service/request/team_filters.go @@ -1,7 +1,7 @@ package service type TeamFilters struct { - PageSize int64 - PageNumber int64 - TeamId string -} \ No newline at end of file + PageSize int64 + PageNumber int64 + TeamId string +} diff --git a/service/response/common/common_utils.go b/service/response/common/common_utils.go index a1f30a3..98814d0 100644 --- a/service/response/common/common_utils.go +++ b/service/response/common/common_utils.go @@ -1,6 +1,5 @@ package service - func ErrorResponse(err error, code int, metadata interface{}) Response { return Response{ Error: Error{ diff --git a/service/response/common/generic_response.go b/service/response/common/generic_response.go index 850f39b..4451c58 100644 --- a/service/response/common/generic_response.go +++ b/service/response/common/generic_response.go @@ -14,7 +14,7 @@ type Response struct { type Page struct { TotalElements int `json:"totalElements"` TotalPages int64 `json:"totalPages"` - PageSize int64 `json:"pageSize"` + PageSize int64 `json:"pageSize"` PageNumber int64 `json:"pageNumber"` } diff --git a/service/response/filter_response.go b/service/response/filter_response.go index 40ea761..cbe785a 100644 --- a/service/response/filter_response.go +++ b/service/response/filter_response.go @@ -1,13 +1,13 @@ package service type FilterResponse struct { - FilterData []Options `json:"filter_data"` - FilterKey string `json:"filter_key"` - FilterName string `json:"filter_name"` - SelectionConfig string `json:"selection_config"` + FilterData []Options `json:"filter_data"` + FilterKey string `json:"filter_key"` + FilterName string `json:"filter_name"` + SelectionConfig string `json:"selection_config"` } type Options struct { Label string `json:"label"` Value string `json:"value"` -} \ No newline at end of file +} diff --git a/service/response/incident_header_option.go b/service/response/incident_header_option.go index 201a512..012e0da 100644 --- a/service/response/incident_header_option.go +++ b/service/response/incident_header_option.go @@ -1,6 +1,6 @@ package service type IncidentHeaderOption struct { - Value uint `json:"value"` - Label string `json:"label"` -} \ No newline at end of file + Value uint `json:"value"` + Label string `json:"label"` +} diff --git a/service/response/incident_header_response.go b/service/response/incident_header_response.go index 4791e60..4607d66 100644 --- a/service/response/incident_header_response.go +++ b/service/response/incident_header_response.go @@ -1,7 +1,7 @@ package service type IncidentHeaderResponse struct { - Severities []IncidentHeaderOption `json:"severities"` - IncidentStatuses []IncidentHeaderOption `json:"incidentStatuses"` - Teams []IncidentHeaderOption `json:"teams"` -} \ No newline at end of file + Severities []IncidentHeaderOption `json:"severities"` + IncidentStatuses []IncidentHeaderOption `json:"incidentStatuses"` + Teams []IncidentHeaderOption `json:"teams"` +} diff --git a/service/response/incident_response.go b/service/response/incident_response.go index 663b24f..4741a59 100644 --- a/service/response/incident_response.go +++ b/service/response/incident_response.go @@ -6,52 +6,52 @@ import ( ) type IncidentResponse struct { - ID uint `json:"id"` - Title string `json:"title"` - Description string `json:"description"` - Status uint `json:"status"` - StatusName string `json:"statusName"` - SeverityId uint `json:"severityId"` - SeverityName string `json:"severityName"` - IncidentName string `json:"incidentName"` - SlackChannel string `json:"slackChannel"` - DetectionTime *time.Time `json:"detectionTime"` - StartTime time.Time `json:"startTime"` - EndTime *time.Time `json:"endTime"` - TeamId uint `json:"teamId"` - TeamName string `json:"teamName"` - JiraId *string `json:"jiraId"` - ConfluenceId *string `json:"confluenceId"` - SeverityTat time.Time `json:"severityTat"` - RemindMeAt *time.Time `json:"remindMeAt"` - EnableReminder bool `json:"enableReminder"` - CreatedBy string `json:"createdBy"` - UpdatedBy string `json:"updatedBy"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` + ID uint `json:"id"` + Title string `json:"title"` + Description string `json:"description"` + Status uint `json:"status"` + StatusName string `json:"statusName"` + SeverityId uint `json:"severityId"` + SeverityName string `json:"severityName"` + IncidentName string `json:"incidentName"` + SlackChannel string `json:"slackChannel"` + DetectionTime *time.Time `json:"detectionTime"` + StartTime time.Time `json:"startTime"` + EndTime *time.Time `json:"endTime"` + TeamId uint `json:"teamId"` + TeamName string `json:"teamName"` + JiraId *string `json:"jiraId"` + ConfluenceId *string `json:"confluenceId"` + SeverityTat time.Time `json:"severityTat"` + RemindMeAt *time.Time `json:"remindMeAt"` + EnableReminder bool `json:"enableReminder"` + CreatedBy string `json:"createdBy"` + UpdatedBy string `json:"updatedBy"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` } func ConvertToIncidentResponse(incidentEntity incident.IncidentEntity) IncidentResponse { return IncidentResponse{ - ID: incidentEntity.ID, - Title: incidentEntity.Title, - Description: incidentEntity.Description, - Status: incidentEntity.Status, - TeamId: incidentEntity.TeamId, - SeverityId: incidentEntity.SeverityId, - IncidentName: incidentEntity.IncidentName, - SlackChannel: incidentEntity.SlackChannel, - DetectionTime: incidentEntity.DetectionTime, - StartTime: incidentEntity.StartTime, - EndTime: incidentEntity.EndTime, - JiraId: incidentEntity.JiraId, - ConfluenceId: incidentEntity.ConfluenceId, - SeverityTat: incidentEntity.SeverityTat, - RemindMeAt: incidentEntity.RemindMeAt, + ID: incidentEntity.ID, + Title: incidentEntity.Title, + Description: incidentEntity.Description, + Status: incidentEntity.Status, + TeamId: incidentEntity.TeamId, + SeverityId: incidentEntity.SeverityId, + IncidentName: incidentEntity.IncidentName, + SlackChannel: incidentEntity.SlackChannel, + DetectionTime: incidentEntity.DetectionTime, + StartTime: incidentEntity.StartTime, + EndTime: incidentEntity.EndTime, + JiraId: incidentEntity.JiraId, + ConfluenceId: incidentEntity.ConfluenceId, + SeverityTat: incidentEntity.SeverityTat, + RemindMeAt: incidentEntity.RemindMeAt, EnableReminder: incidentEntity.EnableReminder, - CreatedBy: incidentEntity.CreatedBy, - UpdatedBy: incidentEntity.UpdatedBy, - CreatedAt: incidentEntity.CreatedAt, - UpdatedAt: incidentEntity.UpdatedAt, + CreatedBy: incidentEntity.CreatedBy, + UpdatedBy: incidentEntity.UpdatedBy, + CreatedAt: incidentEntity.CreatedAt, + UpdatedAt: incidentEntity.UpdatedAt, } -} \ No newline at end of file +} diff --git a/service/severity_service.go b/service/severity_service.go index 10ce74b..e257bb8 100644 --- a/service/severity_service.go +++ b/service/severity_service.go @@ -2,6 +2,7 @@ package service import ( commonutil "houston/common/util" + "houston/logger" "houston/model/severity" "houston/pkg/slackbot" request "houston/service/request" @@ -18,15 +19,13 @@ import ( type severityService struct { gin *gin.Engine - logger *zap.Logger db *gorm.DB client *slackbot.Client } -func NewSeverityService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, client *slackbot.Client) *severityService { +func NewSeverityService(gin *gin.Engine, db *gorm.DB, client *slackbot.Client) *severityService { return &severityService{ gin: gin, - logger: logger, db: db, client: client, } @@ -34,18 +33,18 @@ func NewSeverityService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, client func (s *severityService) GetSeverities(c *gin.Context) { sevId := c.Param("id") - severityService := severity.NewSeverityRepository(s.logger, s.db) + severityService := severity.NewSeverityRepository(s.db) if sevId != "" { SevId, err := strconv.Atoi(sevId) if err != nil { - s.logger.Error("error in parsing sevId", zap.String("sevId", sevId), zap.Error(err)) + logger.Error("error in parsing sevId", zap.String("sevId", sevId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } sev, err := severityService.FindSeverityById(uint(SevId)) if err != nil { - s.logger.Error("error in fetching severity by id", zap.Any("SevId", SevId)) + logger.Error("error in fetching severity by id", zap.Any("SevId", SevId)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -53,7 +52,7 @@ func (s *severityService) GetSeverities(c *gin.Context) { for _, userId := range sev.SlackUserIds { usersInfo, err := s.client.GetUsersInfo(userId) if err != nil || len(*usersInfo) == 0 { - s.logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) + logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -73,7 +72,7 @@ func (s *severityService) GetSeverities(c *gin.Context) { severityEntities, err := severityService.GetAllActiveSeverity() if err != nil { - s.logger.Error("error in fetching severties", zap.Error(err)) + logger.Error("error in fetching severties", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) } @@ -101,21 +100,21 @@ func (s *severityService) UpdateSeverities(c *gin.Context) { return } - s.logger.Info("update request received", zap.String("userEmail", userEmail), zap.Any("request", updateSeverityRequest)) + logger.Info("update request received", zap.String("userEmail", userEmail), zap.Any("request", updateSeverityRequest)) err := utils.ValidateUpdateSeverityRequest(updateSeverityRequest) if err != nil { - s.logger.Error("error in validating update severties request", zap.Error(err)) + logger.Error("error in validating update severties request", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } - severityService := severity.NewSeverityRepository(s.logger, s.db) + severityService := severity.NewSeverityRepository(s.db) for _, severity := range updateSeverityRequest.Severities { severityEntity, err := severityService.FindSeverityById(severity.Id) if err != nil { - s.logger.Error("error in fetching severtiy", zap.Any("severityId", severity.Id), zap.Error(err)) + logger.Error("error in fetching severtiy", zap.Any("severityId", severity.Id), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -133,7 +132,7 @@ func (s *severityService) UpdateSeverities(c *gin.Context) { for _, ind := range severity.WorkEmailIds { slackUser, err := s.client.GetUserByEmail(ind) if err != nil { - s.logger.Error("error in GetUserByEmail for sev", zap.String("workEmail", ind), zap.Error(err)) + logger.Error("error in GetUserByEmail for sev", zap.String("workEmail", ind), zap.Error(err)) } else { slackUserIds = append(slackUserIds, slackUser.ID) } @@ -144,7 +143,7 @@ func (s *severityService) UpdateSeverities(c *gin.Context) { severityEntity.SlackUserIds = slackUserIds err = severityService.Update(severityEntity) if err != nil { - s.logger.Error("error in updating severity", zap.Any("severityId", severity.Id), zap.Error(err)) + logger.Error("error in updating severity", zap.Any("severityId", severity.Id), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } diff --git a/service/slack/slack_service.go b/service/slack/slack_service.go index a6ea354..2a63bc6 100644 --- a/service/slack/slack_service.go +++ b/service/slack/slack_service.go @@ -6,6 +6,7 @@ import ( "github.com/slack-go/slack/socketmode" "github.com/spf13/viper" "go.uber.org/zap" + "houston/logger" "houston/model/incident" "houston/model/severity" "houston/model/team" @@ -16,11 +17,10 @@ import ( type SlackService struct { SocketModeClient *socketmode.Client - logger *zap.Logger } -func NewSlackService(logger *zap.Logger) *SlackService { - return &SlackService{createSocketModeClient(logger), logger} +func NewSlackService() *SlackService { + return &SlackService{createSocketModeClient()} } const logTag = "[slack-service]" @@ -30,7 +30,7 @@ func (s *SlackService) PostMessage(message string, escape bool, channel *slack.C _, timeStamp, err := s.SocketModeClient.PostMessage(channel.ID, msgOption) if err != nil { e := fmt.Sprintf("%s Failed to post message into channel: %s", logTag, channel.Name) - s.logger.Error(e, zap.Error(err)) + logger.Error(e, zap.Error(err)) return "", fmt.Errorf("%s - %+v", e, err) } return timeStamp, nil @@ -40,7 +40,7 @@ func (s *SlackService) PostMessageOption(channelID string, messageOption slack.M _, timeStamp, err := s.SocketModeClient.PostMessage(channelID, messageOption) if err != nil { e := fmt.Sprintf("%s Failed to post message into channelID: %s", logTag, channelID) - s.logger.Error(e, zap.Error(err)) + logger.Error(e, zap.Error(err)) return "", fmt.Errorf("%s - %+v", e, err) } return timeStamp, nil @@ -51,7 +51,7 @@ func (s *SlackService) PostMessageByChannelID(message string, escape bool, chann _, timeStamp, err := s.SocketModeClient.PostMessage(channelID, msgOption) if err != nil { e := fmt.Sprintf("%s Failed to post message into channel: %s", logTag, channelID) - s.logger.Error(e, zap.Error(err)) + logger.Error(e, zap.Error(err)) return "", fmt.Errorf("%s : %+v", e, err) } return timeStamp, nil @@ -90,11 +90,11 @@ func (s *SlackService) SetChannelTopic( _, err := s.SocketModeClient.SetTopicOfConversation(channel.ID, topic) if err != nil { e := fmt.Sprintf("%s set topic on slack channel failed", logTag) - s.logger.Error(e, zap.String("channel_id", channel.Name), zap.Error(err)) + logger.Error(e, zap.String("channel_id", channel.Name), zap.Error(err)) return fmt.Errorf("%s : %+v", e, err) } - s.logger.Info("set topic on slack channel successful", zap.String("channel_id", channel.Name)) + logger.Info("set topic on slack channel successful", zap.String("channel_id", channel.Name)) return nil } @@ -114,7 +114,7 @@ func (s *SlackService) GetUserByEmail(userEmail string) (*slack.User, error) { slackUser, err := s.SocketModeClient.GetUserByEmail(userEmail) if err != nil { e := fmt.Sprintf("%s error in getting user by email: %s", logTag, userEmail) - s.logger.Error(e, zap.Error(err)) + logger.Error(e, zap.Error(err)) return nil, fmt.Errorf("%s : %+v", e, err) } return slackUser, nil @@ -124,7 +124,7 @@ func (s *SlackService) GetUserBySlackID(slackUserID string) (*slack.User, error) slackUser, err := s.SocketModeClient.GetUsersInfo(slackUserID) if err != nil { e := fmt.Sprintf("%s error in getting user by ID: %s", logTag, slackUserID) - s.logger.Error(e, zap.Error(err)) + logger.Error(e, zap.Error(err)) return nil, fmt.Errorf("%s : %+v", e, err) } return &(*slackUser)[0], nil @@ -148,7 +148,7 @@ func (s *SlackService) IsASlackUser(slackIdOrEmail string) (bool, *slack.User) { } func (s *SlackService) CreateSlackChannel(incidentId uint) (*slack.Channel, error) { - channel, err := createChannel(getIncidentChannelName(incidentId), s.SocketModeClient, s.logger) + channel, err := createChannel(getIncidentChannelName(incidentId), s.SocketModeClient) if err != nil { return nil, fmt.Errorf("%s failed to create Slack Channel for incident %d. error: %+v", logTag, incidentId, err) } @@ -172,13 +172,13 @@ func (s *SlackService) InviteUsersToConversation(channelId string, userIds ...st } if len(failedToAddUsers) == 0 { - s.logger.Info( + logger.Info( "successfully invited users to conversation", zap.String("channel_id", channelId), zap.Any("users", strings.Join(allUserNames, ", ")), ) } else { failedUsersString := strings.Join(failedToAddUsers, ", ") - s.logger.Debug( + logger.Debug( "failed to invited users to conversation", zap.String("channel_id", channelId), zap.Any("users", failedUsersString), ) @@ -200,7 +200,7 @@ func getIncidentChannelName(incidentID uint) string { return channelPrefix + strconv.Itoa(int(incidentID)) } -func createChannel(channelName string, socketModeClient *socketmode.Client, logger *zap.Logger) (*slack.Channel, error) { +func createChannel(channelName string, socketModeClient *socketmode.Client) (*slack.Channel, error) { request := slack.CreateConversationParams{ ChannelName: channelName, IsPrivate: false, @@ -217,7 +217,7 @@ func createChannel(channelName string, socketModeClient *socketmode.Client, logg return channel, nil } -func createSocketModeClient(logger *zap.Logger) *socketmode.Client { +func createSocketModeClient() *socketmode.Client { appToken := viper.GetString("houston.slack.app.token") if appToken == "" { logger.Error("HOUSTON_SLACK_APP_TOKEN must be set.") diff --git a/service/team_service.go b/service/team_service.go index 89711f2..59946b4 100644 --- a/service/team_service.go +++ b/service/team_service.go @@ -10,6 +10,7 @@ import ( "go.uber.org/zap" "gorm.io/gorm" commonutil "houston/common/util" + logger "houston/logger" "houston/model/log" "houston/model/team" "houston/pkg/slackbot" @@ -24,16 +25,14 @@ import ( type TeamService struct { gin *gin.Engine - logger *zap.Logger db *gorm.DB client *slackbot.Client authService *AuthService } -func NewTeamService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, client *slackbot.Client, authService *AuthService) *TeamService { +func NewTeamService(gin *gin.Engine, db *gorm.DB, client *slackbot.Client, authService *AuthService) *TeamService { return &TeamService{ gin: gin, - logger: logger, db: db, client: client, authService: authService, @@ -41,8 +40,8 @@ func NewTeamService(gin *gin.Engine, logger *zap.Logger, db *gorm.DB, client *sl } func (t *TeamService) AddTeam(c *gin.Context) { - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) minLength := viper.GetInt("TEAM_NAME_MIN_LENGTH") maxLength := viper.GetInt("TEAM_NAME_MAX_LENGTH") authResult, _ := t.authService.checkIfManagerOrAdmin(c, "", Admin) @@ -61,14 +60,14 @@ func (t *TeamService) AddTeam(c *gin.Context) { teamName := addTeamRequest.Name if &teamName == nil || len(teamName) == 0 { - t.logger.Error("team name is empty") + logger.Error("team name is empty") c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Team name must be between %v - %v", minLength, maxLength)), http.StatusBadRequest, nil)) return } if len(teamName) < minLength || len(teamName) > maxLength { errorMessage := fmt.Sprintf("Team name must be between %v - %v", minLength, maxLength) - t.logger.Error(errorMessage) + logger.Error(errorMessage) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(errorMessage), http.StatusBadRequest, nil)) return } @@ -82,7 +81,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { userInfo, err := t.client.GetUserByEmail(managerEmail) if isUserInvalid(userInfo, err) { - t.logger.Error("error in getting on manager info", zap.String("managerEmail", managerEmail), zap.Error(err)) + logger.Error("error in getting on manager info", zap.String("managerEmail", managerEmail), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("Manager handle is invalid"), http.StatusBadRequest, nil)) return } @@ -90,7 +89,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { managerHandle = userInfo.ID slackUserList = append(slackUserList, managerHandle) } else { - t.logger.Error("Manager email not provided") + logger.Error("Manager email not provided") c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("Manager email not provided"), http.StatusBadRequest, nil)) return } @@ -101,7 +100,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { userInfo, err := t.client.GetUsersInfo(addTeamRequest.OncallHandle) if isUserInvalid(&(*userInfo)[0], err) { - t.logger.Error("error in getting on call user info", zap.String("userId", addTeamRequest.OncallHandle), zap.Error(err)) + logger.Error("error in getting on call user info", zap.String("userId", addTeamRequest.OncallHandle), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("On call handle is invalid"), http.StatusBadRequest, nil)) return } @@ -111,7 +110,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { if &userEmail != nil && len(userEmail) > 0 && userEmail != managerEmail { userInfo, err := t.client.GetUserByEmail(userEmail) if isUserInvalid(userInfo, err) { - t.logger.Error("error in getting slack user info", zap.String("userEmail", userEmail), zap.Error(err)) + logger.Error("error in getting slack user info", zap.String("userEmail", userEmail), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("User email is invalid"), http.StatusBadRequest, nil)) return } @@ -125,7 +124,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { _, err := t.client.GetConversationInfo(addTeamRequest.WebhookSlackChannel) if err != nil { - t.logger.Error("error in getting channel info", zap.String("channelId", addTeamRequest.WebhookSlackChannel), zap.Error(err)) + logger.Error("error in getting channel info", zap.String("channelId", addTeamRequest.WebhookSlackChannel), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -145,7 +144,7 @@ func (t *TeamService) AddTeam(c *gin.Context) { _, err := teamRepository.CreateTeam(teamEntity) if err != nil { - t.logger.Error("error in creating team", zap.Error(err)) + logger.Error("error in creating team", zap.Error(err)) if strings.Contains(err.(*pgconn.PgError).Message, "duplicate key value") { c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("Team name already exists"), http.StatusBadRequest, nil)) } else { @@ -167,19 +166,19 @@ func isUserInvalid(userInfo *slack.User, err error) bool { func (t *TeamService) GetTeams(c *gin.Context) { teamId := c.Param("id") - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) if teamId != "" { TeamId, err := strconv.Atoi(teamId) if err != nil { - t.logger.Error("error in parsing teamId", zap.String("teamId", teamId), zap.Error(err)) + logger.Error("error in parsing teamId", zap.String("teamId", teamId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } team, err := teamRepository.FindTeamById(uint(TeamId)) if err != nil { - t.logger.Error("error in fetching team by id", zap.Any("TeamId", TeamId)) + logger.Error("error in fetching team by id", zap.Any("TeamId", TeamId)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -187,7 +186,7 @@ func (t *TeamService) GetTeams(c *gin.Context) { for _, userId := range team.SlackUserIds { usersInfo, err := t.client.GetUsersInfo(userId) if err != nil || len(*usersInfo) == 0 { - t.logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) + logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -203,7 +202,7 @@ func (t *TeamService) GetTeams(c *gin.Context) { teamResponse := service.ConvertToTeamResponse(*team) teamResponse.WebhookSlackChannelId = team.WebhookSlackChannel if err != nil { - t.logger.Error("error in getting channel info", zap.String("channelId", team.WebhookSlackChannel), zap.Error(err)) + logger.Error("error in getting channel info", zap.String("channelId", team.WebhookSlackChannel), zap.Error(err)) teamResponse.WebhookSlackChannelName = "not found" } else { teamResponse.WebhookSlackChannelName = channel.Name @@ -212,7 +211,7 @@ func (t *TeamService) GetTeams(c *gin.Context) { oncallBots, err := t.client.GetUsersInfo(team.OncallHandle) if err != nil || *oncallBots == nil || isUserInvalid(&(*oncallBots)[0], err) { - t.logger.Error(fmt.Sprintf("error in GetUsersInfo for oncall bot of id: %v", team.OncallHandle)) + logger.Error(fmt.Sprintf("error in GetUsersInfo for oncall bot of id: %v", team.OncallHandle)) } else { oncallBotData := &(*oncallBots)[0] teamResponse.Oncall = service.BotResponse{ @@ -224,7 +223,7 @@ func (t *TeamService) GetTeams(c *gin.Context) { pseOncallBots, err := t.client.GetUsersInfo(team.PseOncallHandle) if err != nil || *pseOncallBots == nil || isUserInvalid(&(*pseOncallBots)[0], err) { - t.logger.Error(fmt.Sprintf("error in GetUsersInfo for pse oncall bot of id: %v", team.PseOncallHandle)) + logger.Error(fmt.Sprintf("error in GetUsersInfo for pse oncall bot of id: %v", team.PseOncallHandle)) } else { pseOncallBotData := &(*pseOncallBots)[0] teamResponse.PseOncall = service.BotResponse{ @@ -240,7 +239,7 @@ func (t *TeamService) GetTeams(c *gin.Context) { teamsEntities, err := teamRepository.GetAllActiveTeams() if err != nil { - t.logger.Error("error in getting teams", zap.Error(err)) + logger.Error("error in getting teams", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -254,8 +253,8 @@ func (t *TeamService) GetTeams(c *gin.Context) { } func (t *TeamService) UpdateTeam(c *gin.Context) { - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) userEmail := c.GetHeader("X-User-Email") var updateTeamRequest request.UpdateTeamRequest @@ -264,7 +263,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { return } - t.logger.Info("update team request received", zap.String("userEmail", userEmail), zap.Any("request", updateTeamRequest)) + logger.Info("update team request received", zap.String("userEmail", userEmail), zap.Any("request", updateTeamRequest)) err := utils.ValidateUpdateTeamRequest(updateTeamRequest) if err != nil { @@ -273,14 +272,14 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { } if err != nil { - t.logger.Error("error in string to int conversion", + logger.Error("error in string to int conversion", zap.Uint("TeamId", updateTeamRequest.Id), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } teamEntity, err := teamRepository.FindTeamById(updateTeamRequest.Id) if err != nil || teamEntity == nil { - t.logger.Error("error in fetching team by id", zap.Uint("TeamId", updateTeamRequest.Id), zap.Error(err)) + logger.Error("error in fetching team by id", zap.Uint("TeamId", updateTeamRequest.Id), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Error in fetching team by id: %d", updateTeamRequest.Id)), http.StatusBadRequest, nil)) return } @@ -292,7 +291,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { } if !teamEntity.Active { - t.logger.Error(fmt.Sprintf("Cannot update inactive team: %v with id: %d", teamEntity.Name, teamEntity.ID)) + logger.Error(fmt.Sprintf("Cannot update inactive team: %v with id: %d", teamEntity.Name, teamEntity.ID)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Cannot update inactive team: %v", teamEntity.Name)), http.StatusBadRequest, nil)) return } @@ -301,7 +300,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { for _, ind := range updateTeamRequest.WorkEmailIds { slackUser, err := t.client.GetUserByEmail(ind) if err != nil { - t.logger.Error("error in GetUserByEmail for team", zap.String("workEmail", ind), zap.Error(err)) + logger.Error("error in GetUserByEmail for team", zap.String("workEmail", ind), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Cannot find user with email: %v", ind)), http.StatusBadRequest, nil)) return } else { @@ -318,7 +317,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { _, err := t.client.GetConversationInfo(slackChannelId) if err != nil { - t.logger.Error("error in GetConversationInfo for channel", zap.String("channelId", slackChannelId), zap.Error(err)) + logger.Error("error in GetConversationInfo for channel", zap.String("channelId", slackChannelId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("Unable to find Slack channel with the provided I.D. Please verify the I.D. and re-submit."), http.StatusBadRequest, nil)) return } @@ -332,7 +331,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { if strings.Contains(pseOnCallId, "@navi.com") { slackUser, err := t.client.GetUserByEmail(pseOnCallId) if err != nil { - t.logger.Error(fmt.Sprintf("error in GetUserByEmail for email: %v", pseOnCallId), zap.String("workEmail", pseOnCallId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in GetUserByEmail for email: %v", pseOnCallId), zap.String("workEmail", pseOnCallId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Cannot find pse oncall user with email: %v", pseOnCallId)), http.StatusBadRequest, nil)) return } else { @@ -341,7 +340,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { } else { slackUser, err := t.client.GetUsersInfo(pseOnCallId) if err != nil || *slackUser == nil || isUserInvalid(&(*slackUser)[0], err) { - t.logger.Error(fmt.Sprintf("error in GetUsersInfo for id: %v", pseOnCallId)) + logger.Error(fmt.Sprintf("error in GetUsersInfo for id: %v", pseOnCallId)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Cannot find pse oncall user with id: %v", pseOnCallId)), http.StatusBadRequest, nil)) return } else { @@ -355,7 +354,7 @@ func (t *TeamService) UpdateTeam(c *gin.Context) { if len(onCallHandle) != 0 { slackUser, err := t.client.GetUsersInfo(onCallHandle) if err != nil || *slackUser == nil || isUserInvalid(&(*slackUser)[0], err) { - t.logger.Error(fmt.Sprintf("error in GetUsersInfo for id: %v", onCallHandle)) + logger.Error(fmt.Sprintf("error in GetUsersInfo for id: %v", onCallHandle)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Cannot find oncall user with id: %v", onCallHandle)), http.StatusBadRequest, nil)) return } else { @@ -373,23 +372,23 @@ func (t *TeamService) RemoveTeamMember(c *gin.Context) { teamId := c.Param("id") slackUserId := c.Param("userId") - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) TeamId, err := utils.ValidateIdParameter(teamId) if err != nil { - t.logger.Error(err.Error(), zap.String("teamId", teamId), zap.Error(err)) + logger.Error(err.Error(), zap.String("teamId", teamId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } teamEntity, err := teamRepository.FindActiveTeamById(TeamId) if err != nil { - t.logger.Error("error in fetching team by id", zap.Any("TeamId", TeamId), zap.Error(err)) + logger.Error("error in fetching team by id", zap.Any("TeamId", TeamId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New(fmt.Sprintf("Error in fetching team by id : %v", teamId)), http.StatusBadRequest, nil)) return } if teamEntity == nil { err := errors.New(fmt.Sprintf("team with given team id : %v is not found", teamId)) - t.logger.Debug("team with given team id is not found", zap.Any("TeamId", TeamId)) + logger.Debug("team with given team id is not found", zap.Any("TeamId", TeamId)) c.JSON(http.StatusNotFound, common.ErrorResponse(err, http.StatusNotFound, nil)) return } @@ -400,7 +399,7 @@ func (t *TeamService) RemoveTeamMember(c *gin.Context) { return } if slackUserId == teamEntity.ManagerHandle { - t.logger.Debug("manager cannot be removed", zap.Any("TeamId", TeamId), zap.Any("slackId", slackUserId)) + logger.Debug("manager cannot be removed", zap.Any("TeamId", TeamId), zap.Any("slackId", slackUserId)) c.JSON(http.StatusBadRequest, common.ErrorResponse(errors.New("manager cannot be removed"), http.StatusBadRequest, nil)) return } @@ -411,7 +410,7 @@ func (t *TeamService) RemoveTeamMember(c *gin.Context) { teamEntity.UpdatedBy = commonutil.GetSlackUserIdFromEmail(userEmail, t.client) err = teamRepository.UpdateTeam(teamEntity) if err != nil { - t.logger.Error("error in removing slack user id and saving to database", zap.Any("TeamId", TeamId), zap.Any("slackId", slackUserId), zap.Error(err)) + logger.Error("error in removing slack user id and saving to database", zap.Any("TeamId", TeamId), zap.Any("slackId", slackUserId), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return } @@ -428,18 +427,18 @@ func (t *TeamService) MakeManager(c *gin.Context) { teamId := c.Param("id") teamMemberToMakeManager := c.Param("userId") - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) TeamId, err := utils.ValidateIdParameter(teamId) if err != nil { - t.logger.Error("error reading team id", zap.Error(err)) + logger.Error("error reading team id", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } teamEntity, err := teamRepository.FindActiveTeamById(TeamId) if err != nil { - t.logger.Error(fmt.Sprintf("error in fetching team with id: %v", teamId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in fetching team with id: %v", teamId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -460,7 +459,7 @@ func (t *TeamService) MakeManager(c *gin.Context) { teamEntity.UpdatedBy = commonutil.GetSlackUserIdFromEmail(userEmail, t.client) err = teamRepository.UpdateTeam(teamEntity) if err != nil { - t.logger.Error(fmt.Sprintf("error updating %v as manager of %v", teamMemberToMakeManager, teamEntity.Name), zap.Error(err)) + logger.Error(fmt.Sprintf("error updating %v as manager of %v", teamMemberToMakeManager, teamEntity.Name), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return } @@ -478,21 +477,21 @@ func (t *TeamService) RemoveTeam(c *gin.Context) { authResult, _ := t.authService.checkIfManagerOrAdmin(c, "", Admin) if !authResult { - t.logger.Error("error in removing team", zap.Error(errors.New(fmt.Sprintf("%v is not an admin", userEmail)))) + logger.Error("error in removing team", zap.Error(errors.New(fmt.Sprintf("%v is not an admin", userEmail)))) c.JSON(http.StatusUnauthorized, common.ErrorResponse(errors.New(fmt.Sprintf("%v is not an admin", userEmail)), http.StatusUnauthorized, nil)) return } - logRepository := log.NewLogRepository(t.logger, t.db) - teamRepository := team.NewTeamRepository(t.logger, t.db, logRepository) + logRepository := log.NewLogRepository(t.db) + teamRepository := team.NewTeamRepository(t.db, logRepository) TeamId, err := utils.ValidateIdParameter(teamId) if err != nil { - t.logger.Error("error reading team id", zap.Error(err)) + logger.Error("error reading team id", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } teamEntity, err := teamRepository.FindActiveTeamById(TeamId) if err != nil { - t.logger.Error(fmt.Sprintf("error in fetching team with id: %v", teamId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in fetching team with id: %v", teamId), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return } @@ -507,10 +506,10 @@ func (t *TeamService) RemoveTeam(c *gin.Context) { err = teamRepository.UpdateTeamStatus(teamEntity) if err != nil { - t.logger.Error(fmt.Sprintf("error in deleting team with id: %v", teamId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in deleting team with id: %v", teamId), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return } - t.logger.Info(fmt.Sprintf("team with id: %v deleted successfully", teamId)) + logger.Info(fmt.Sprintf("team with id: %v deleted successfully", teamId)) c.JSON(http.StatusOK, common.SuccessResponse("Team deleted successfully", http.StatusOK)) } diff --git a/service/users_service.go b/service/users_service.go index 2958a8c..3bf4484 100644 --- a/service/users_service.go +++ b/service/users_service.go @@ -9,6 +9,7 @@ import ( "gorm.io/gorm" util "houston/common/util" "houston/internal/cron" + logger "houston/logger" "houston/model/incident" "houston/model/log" "houston/model/severity" @@ -22,7 +23,6 @@ import ( type UserService struct { gin *gin.Engine - logger *zap.Logger client *slackbot.Client db *gorm.DB socketModeClient *socketmode.Client @@ -32,19 +32,18 @@ type UserService struct { teamRepository *team.Repository } -func NewUserService(gin *gin.Engine, logger *zap.Logger, client *slackbot.Client, db *gorm.DB, +func NewUserService(gin *gin.Engine, client *slackbot.Client, db *gorm.DB, socketModeClient *socketmode.Client, authService *AuthService) *UserService { - logRepository := log.NewLogRepository(logger, db) - teamRepository := team.NewTeamRepository(logger, db, logRepository) + logRepository := log.NewLogRepository(db) + teamRepository := team.NewTeamRepository(db, logRepository) return &UserService{ gin: gin, - logger: logger, client: client, db: db, socketModeClient: socketModeClient, authService: authService, - userRepository: user.NewUserRepository(logger, db), - incidentRepository: incident.NewIncidentRepository(logger, db, severity.NewSeverityRepository(logger, db), logRepository, teamRepository, socketModeClient), + userRepository: user.NewUserRepository(db), + incidentRepository: incident.NewIncidentRepository(db, severity.NewSeverityRepository(db), logRepository, teamRepository, socketModeClient), teamRepository: teamRepository, } } @@ -54,7 +53,7 @@ func (u *UserService) GetUserInfo(c *gin.Context) { users, err := u.client.GetUsersInfo(userId) if err != nil { - u.logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) + logger.Error("error in getting user info", zap.String("userId", userId), zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -71,7 +70,7 @@ func (u *UserService) GetUsersInConversation(c *gin.Context) { channelId := c.Query("channel_id") incidentEntity, err := u.incidentRepository.FindIncidentByChannelId(channelId) if err != nil { - u.logger.Error("error in getting incident by channel id", zap.String("channelId", channelId), zap.Error(err)) + logger.Error("error in getting incident by channel id", zap.String("channelId", channelId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -82,20 +81,20 @@ func (u *UserService) GetUsersInConversation(c *gin.Context) { } teamEntity, err := u.teamRepository.FindTeamById(incidentEntity.TeamId) if err != nil { - u.logger.Error(fmt.Sprintf("error getting team info for team with id %v", incidentEntity.TeamId), zap.Error(err)) + logger.Error(fmt.Sprintf("error getting team info for team with id %v", incidentEntity.TeamId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } users, err := u.client.GetUsersInConversation(channelId) if err != nil { - u.logger.Error(fmt.Sprintf("error in getting users from channel %v", channelId), zap.Error(err)) + logger.Error(fmt.Sprintf("error in getting users from channel %v", channelId), zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } usersInfo, err := u.client.GetUsersInfo(users...) if err != nil { - u.logger.Error("error in getting users info", zap.Error(err)) + logger.Error("error in getting users info", zap.Error(err)) c.JSON(http.StatusBadRequest, common.ErrorResponse(err, http.StatusBadRequest, nil)) return } @@ -130,22 +129,21 @@ func (u *UserService) UpdateHoustonUsers(c *gin.Context) { c.JSON(http.StatusUnauthorized, common.ErrorResponse(err, http.StatusUnauthorized, nil)) return } - userRepository := user.NewUserRepository(u.logger, u.db) + userRepository := user.NewUserRepository(u.db) socketModeClient := u.socketModeClient - logger := u.logger go func() { - cron.UpsertUsers(socketModeClient, logger, userRepository) + cron.UpsertUsers(socketModeClient, userRepository) }() c.JSON(http.StatusOK, common.SuccessResponse("done", http.StatusOK)) } func (u *UserService) GetAllHoustonUserBots(c *gin.Context) { - userRepository := user.NewUserRepository(u.logger, u.db) + userRepository := user.NewUserRepository(u.db) botUsers, err := userRepository.GetAllActiveHoustonUserBots() if err != nil { - u.logger.Error("error in getting all houston_user bots", zap.Error(err)) + logger.Error("error in getting all houston_user bots", zap.Error(err)) c.JSON(http.StatusInternalServerError, common.ErrorResponse(err, http.StatusInternalServerError, nil)) return }