diff --git a/server/background_tasks.go b/server/background_tasks.go index 9222f9f3f..d238f3247 100644 --- a/server/background_tasks.go +++ b/server/background_tasks.go @@ -54,7 +54,7 @@ func (s *Server) ListenForZombieConnCheckRequests() error { if len(connectionIds) > 0 { // in case there are connections bytes, err := json.Marshal(connectionIds) if err != nil { - s.Errorf("ListenForZombieConnCheckRequests: " + err.Error()) + s.Errorf("ListenForZombieConnCheckRequests: %v", err.Error()) } else { s.sendInternalAccountMsgWithReply(s.GlobalAccount(), reply, _EMPTY_, nil, bytes, true) } @@ -73,7 +73,7 @@ func (s *Server) ListenForIntegrationsUpdateEvents() error { var integrationUpdate models.CreateIntegrationSchema err := json.Unmarshal(msg, &integrationUpdate) if err != nil { - s.Errorf("ListenForIntegrationsUpdateEvents: " + err.Error()) + s.Errorf("[tenant: %v]ListenForIntegrationsUpdateEvents: %v", integrationUpdate.TenantName, err.Error()) return } switch strings.ToLower(integrationUpdate.Name) { @@ -85,7 +85,7 @@ func (s *Server) ListenForIntegrationsUpdateEvents() error { case "s3": CacheDetails("s3", integrationUpdate.Keys, integrationUpdate.Properties, integrationUpdate.TenantName) default: - s.Warnf("ListenForIntegrationsUpdateEvents: %s %s", strings.ToLower(integrationUpdate.Name), "unknown integration") + s.Warnf("[tenant: %v] ListenForIntegrationsUpdateEvents: %s %s", integrationUpdate.TenantName, strings.ToLower(integrationUpdate.Name), "unknown integration") return } }(copyBytes(msg)) @@ -102,7 +102,7 @@ func (s *Server) ListenForConfigReloadEvents() error { // reload config err := s.Reload() if err != nil { - s.Errorf("Failed reloading: " + err.Error()) + s.Errorf("Failed reloading: %v", err.Error()) } }(copyBytes(msg)) }) @@ -117,13 +117,13 @@ func (s *Server) ListenForNotificationEvents() error { go func(msg []byte) { tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("ListenForNotificationEvents: " + err.Error()) + s.Errorf("[tenant: %v]ListenForNotificationEvents: %v", tenantName, err.Error()) return } var notification models.Notification err = json.Unmarshal([]byte(message), ¬ification) if err != nil { - s.Errorf("ListenForNotificationEvents: " + err.Error()) + s.Errorf("[tenant: %v]ListenForNotificationEvents: %v", tenantName, err.Error()) return } notificationMsg := notification.Msg @@ -147,13 +147,13 @@ func (s *Server) ListenForPoisonMsgAcks() error { go func(msg []byte) { tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("ListenForPoisonMsgAcks: " + err.Error()) + s.Errorf("[tenant: %v]ListenForPoisonMsgAcks: %v", tenantName, err.Error()) return } var msgToAck models.PmAckMsg err = json.Unmarshal([]byte(message), &msgToAck) if err != nil { - s.Errorf("ListenForPoisonMsgAcks: " + err.Error()) + s.Errorf("[tenant: %v]ListenForPoisonMsgAcks: %v", tenantName, err.Error()) return } err = db.RemoveCgFromDlsMsg(msgToAck.ID, msgToAck.CgName, tenantName) @@ -259,7 +259,7 @@ func (s *Server) StartBackgroundTasks() error { go s.InitializeThroughputSampling() go s.UploadTenantUsageToDB() go s.RefreshFirebaseFunctionsKey() - + return nil } @@ -282,7 +282,7 @@ func (s *Server) uploadMsgsToTier2Storage() { } err := serv.memphisAddConsumer(globalAccountName, tieredStorageStream, &cc) if err != nil { - serv.Errorf("Failed add tiered storage consumer: " + err.Error()) + serv.Errorf("Failed add tiered storage consumer: %v", err.Error()) return } TIERED_STORAGE_CONSUMER_CREATED = true @@ -290,7 +290,7 @@ func (s *Server) uploadMsgsToTier2Storage() { tieredStorageMapLock.Lock() err := flushMapToTire2Storage() if err != nil { - serv.Errorf("Failed upload messages to tiered 2 storage: " + err.Error()) + serv.Errorf("Failed upload messages to tiered 2 storage: %v", err.Error()) tieredStorageMapLock.Unlock() continue } @@ -336,7 +336,7 @@ func (s *Server) ConsumeUnackedMsgs() { }(subject, reply, copyBytes(msg)) }) if err != nil { - s.Errorf("Failed to subscribe to unacked messages: " + err.Error()) + s.Errorf("Failed to subscribe to unacked messages: %v", err.Error()) continue } @@ -403,7 +403,7 @@ func (s *Server) ConsumeTieredStorageMsgs() { }(subject, reply, copyBytes(msg)) }) if err != nil { - s.Errorf("Failed to subscribe to tiered storage messages: " + err.Error()) + s.Errorf("Failed to subscribe to tiered storage messages: %v", err.Error()) continue } @@ -445,41 +445,41 @@ func (s *Server) ListenForSchemaverseDlsEvents() error { go func(msg []byte) { tenantName, stringMessage, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("ListenForNotificationEvents: " + err.Error()) + s.Errorf("[tenant: %v]ListenForNotificationEvents: %v", tenantName, err.Error()) return } var message models.SchemaVerseDlsMessageSdk err = json.Unmarshal([]byte(stringMessage), &message) if err != nil { - serv.Errorf("ListenForSchemaverseDlsEvents: " + err.Error()) + serv.Errorf("[tenant: %v]ListenForSchemaverseDlsEvents: %v", tenantName, err.Error()) return } exist, station, err := db.GetStationByName(message.StationName, tenantName) if err != nil { - serv.Errorf("ListenForSchemaverseDlsEvents: " + err.Error()) + serv.Errorf("[tenant: %v]ListenForSchemaverseDlsEvents: %v", tenantName, err.Error()) return } if !exist { - serv.Warnf("ListenForSchemaverseDlsEvents: station " + message.StationName + " couldn't been found") + serv.Warnf("[tenant: %v]ListenForSchemaverseDlsEvents: station %v couldn't been found", tenantName, message.StationName) return } exist, p, err := db.GetProducerByNameAndConnectionID(message.Producer.Name, message.Producer.ConnectionId) if err != nil { - serv.Errorf("ListenForSchemaverseDlsEvents: " + err.Error()) + serv.Errorf("[tenant: %v]ListenForSchemaverseDlsEvents: %v", tenantName, err.Error()) return } if !exist { - serv.Warnf("ListenForSchemaverseDlsEvents: producer " + p.Name + " couldn't been found") + serv.Warnf("[tenant: %v]ListenForSchemaverseDlsEvents: producer %v couldn't been found", tenantName, p.Name) return } message.Message.TimeSent = time.Now() _, err = db.InsertSchemaverseDlsMsg(station.ID, 0, p.ID, []string{}, models.MessagePayload(message.Message), message.ValidationError, tenantName) if err != nil { - serv.Errorf("ListenForSchemaverseDlsEvents: " + err.Error()) + serv.Errorf("[tenant: %v]ListenForSchemaverseDlsEvents: %v", tenantName, err.Error()) return } }(copyBytes(msg)) @@ -497,7 +497,7 @@ func (s *Server) RemoveOldDlsMsgs() { configurationTime := time.Now().Add(time.Hour * time.Duration(-s.opts.DlsRetentionHours)) err := db.DeleteOldDlsMessageByRetention(configurationTime) if err != nil { - serv.Errorf("RemoveOldDlsMsgs: " + err.Error()) + serv.Errorf("RemoveOldDlsMsgs: %v", err.Error()) } } } diff --git a/server/memphis_cloud.go b/server/memphis_cloud.go index dc25a2755..c5f04f7a7 100644 --- a/server/memphis_cloud.go +++ b/server/memphis_cloud.go @@ -601,7 +601,7 @@ func (mh MonitoringHandler) GetSystemComponents() ([]models.SystemComponents, bo metricsEnabled = false allComponents = append(allComponents, defaultSystemComp(pod.Name, true)) if !noMetricsInstalledLog { - serv.Warnf("GetSystemComponents: k8s metrics not installed: " + err.Error()) + serv.Warnf("GetSystemComponents: k8s metrics not installed: %v", err.Error()) noMetricsInstalledLog = true } continue @@ -609,7 +609,7 @@ func (mh MonitoringHandler) GetSystemComponents() ([]models.SystemComponents, bo metricsEnabled = false allComponents = append(allComponents, defaultSystemComp(pod.Name, true)) if !noMetricsPermissionLog { - serv.Warnf("GetSystemComponents: No permissions for k8s metrics: " + err.Error()) + serv.Warnf("GetSystemComponents: No permissions for k8s metrics: %v", err.Error()) noMetricsPermissionLog = true } continue @@ -959,6 +959,13 @@ func IncrementEventCounter(tenantName string, eventType string, size int64, amou } func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { + user, err := getUserDetailsFromMiddleware(c) + if err != nil { + serv.Errorf("EditClusterConfig at getUserDetailsFromMiddleware: %v", err.Error()) + c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) + return + } + var body models.EditClusterConfigSchema ok := utils.Validate(c, &body, false, nil) if !ok { @@ -967,7 +974,7 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.DlsRetentionHours != body.DlsRetention { err := changeDlsRetention(body.DlsRetention) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at changeDlsRetention: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -975,19 +982,19 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.LogsRetentionDays != body.LogsRetention { err := changeLogsRetention(body.LogsRetention) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at changeLogsRetention: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } } if ch.S.opts.TieredStorageUploadIntervalSec != body.TSTimeSec { if body.TSTimeSec > 3600 || body.TSTimeSec < 5 { - serv.Errorf("EditConfigurations: Tiered storage time can't be less than 5 seconds or more than 60 minutes") + serv.Errorf("[tenant: %v][user: %v]EditConfigurations: Tiered storage time can't be less than 5 seconds or more than 60 minutes", user.TenantName, user.Username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Tiered storage time can't be less than 5 seconds or more than 60 minutes"}) } else { err := changeTSTime(body.TSTimeSec) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at changeTSTime: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -998,7 +1005,7 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.BrokerHost != brokerHost { err := EditClusterCompHost("broker_host", brokerHost) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at EditClusterCompHost broker_host: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1008,7 +1015,7 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.UiHost != uiHost { err := EditClusterCompHost("ui_host", uiHost) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at EditClusterCompHost ui_host: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1018,7 +1025,7 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.RestGwHost != restGWHost { err := EditClusterCompHost("rest_gw_host", restGWHost) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at EditClusterCompHost rest_gw_host: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1027,16 +1034,16 @@ func (ch ConfigurationsHandler) EditClusterConfig(c *gin.Context) { if ch.S.opts.MaxPayload != int32(body.MaxMsgSizeMb) { err := changeMaxMsgSize(body.MaxMsgSizeMb) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at changeMaxMsgSize: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } } // send signal to reload config - err := serv.sendInternalAccountMsgWithReply(serv.GlobalAccount(), CONFIGURATIONS_RELOAD_SIGNAL_SUBJ, _EMPTY_, nil, _EMPTY_, true) + err = serv.sendInternalAccountMsgWithReply(serv.GlobalAccount(), CONFIGURATIONS_RELOAD_SIGNAL_SUBJ, _EMPTY_, nil, _EMPTY_, true) if err != nil { - serv.Errorf("EditConfigurations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditConfigurations at sendInternalAccountMsgWithReply: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1104,7 +1111,7 @@ func (umh UserMgmtHandler) Login(c *gin.Context) { username := strings.ToLower(body.Username) authenticated, user, err := authenticateUser(username, body.Password) if err != nil { - serv.Errorf("Login : User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]Login at authenticateUser: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1115,7 +1122,7 @@ func (umh UserMgmtHandler) Login(c *gin.Context) { token, refreshToken, err := CreateTokens(user) if err != nil { - serv.Errorf("Login: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]Login at CreateTokens: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1123,7 +1130,7 @@ func (umh UserMgmtHandler) Login(c *gin.Context) { if !user.AlreadyLoggedIn { err = db.UpdateUserAlreadyLoggedIn(user.ID) if err != nil { - serv.Errorf("Login: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]Login at UpdateUserAlreadyLoggedIn: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1140,12 +1147,12 @@ func (umh UserMgmtHandler) Login(c *gin.Context) { } exist, tenant, err := db.GetTenantByName(user.TenantName) if err != nil { - serv.Errorf("Login: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]Login at GetTenantByName: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("Login: User " + body.Username + ": tenant " + user.TenantName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]Login: User %v: tenant %v does not exist", user.TenantName, user.Username, body.Username, user.TenantName) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1157,6 +1164,8 @@ func (umh UserMgmtHandler) Login(c *gin.Context) { return } + serv.Noticef("[tenant: %v][user: %v] has loged in", user.TenantName, user.Username) + domain := "" secure := false c.SetCookie("jwt-refresh-token", refreshToken, REFRESH_JWT_EXPIRES_IN_MINUTES*60*1000, "/", domain, secure, true) @@ -1197,7 +1206,7 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("AddUser: " + err.Error()) + serv.Errorf("AddUser: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -1216,19 +1225,19 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { username := strings.ToLower(body.Username) usernameError := validateUsername(username) if usernameError != nil { - serv.Warnf("AddUser: " + usernameError.Error()) + serv.Warnf("[tenant: %v][user: %v]AddUser at validateUsername: %v", user.TenantName, user.Username, usernameError.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": usernameError.Error()}) return } exist, _, err := db.GetUserByUsername(username, user.TenantName) if err != nil { - serv.Errorf("AddUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]AddUser at GetUserByUsername: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if exist { - errMsg := "A user with the name " + body.Username + " already exists" - serv.Warnf("CreateUser: " + errMsg) + errMsg := fmt.Sprintf("A user with the name %v already exists", body.Username) + serv.Warnf("[tenant: %v][user: %v]CreateUser: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -1236,7 +1245,7 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { userType := strings.ToLower(body.UserType) userTypeError := validateUserType(userType) if userTypeError != nil { - serv.Warnf("AddUser: " + userTypeError.Error()) + serv.Warnf("[tenant: %v][user: %v]AddUser at validateUserType: %v", user.TenantName, user.Username, userTypeError.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": userTypeError.Error()}) return } @@ -1249,14 +1258,14 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { var password string if userType == "management" { if body.Password == "" { - serv.Warnf("AddUser: Password was not provided for user " + username) + serv.Warnf("[tenant: %v][user: %v]AddUser: Password was not provided for user %v", user.TenantName, user.Username, username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Password was not provided"}) return } hashedPwd, err := bcrypt.GenerateFromPassword([]byte(body.Password), bcrypt.MinCost) if err != nil { - serv.Errorf("AddUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]AddUser at GenerateFromPassword: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1270,13 +1279,13 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { pending = false if configuration.USER_PASS_BASED_AUTH { if body.Password == "" { - serv.Warnf("AddUser: Password was not provided for user " + username) + serv.Warnf("[tenant: %v][user: %v]AddUser: Password was not provided for user %v", user.TenantName, user.Username, username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Password was not provided"}) return } password, err = EncryptAES([]byte(body.Password)) if err != nil { - serv.Errorf("AddUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]AddUser at EncryptAES: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1287,11 +1296,11 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { newUser, err := db.CreateUser(username, userType, password, fullName, subscription, avatarId, user.TenantName, pending, team, position, owner, description) if err != nil { if strings.Contains(err.Error(), "already exist") { - serv.Warnf("CreateUserManagement: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateUserManagement user already exists: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } - serv.Errorf("AddUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]AddUser at CreateUser: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1305,13 +1314,13 @@ func (umh UserMgmtHandler) AddUser(c *gin.Context) { // send signal to reload config err = serv.sendInternalAccountMsgWithReply(serv.GlobalAccount(), CONFIGURATIONS_RELOAD_SIGNAL_SUBJ, _EMPTY_, nil, _EMPTY_, true) if err != nil { - serv.Errorf("AddUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]AddUser at sendInternalAccountMsgWithReply: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } } - serv.Noticef("User " + username + " has been created") + serv.Noticef("[tenant: %v][user: %v]User %v has been created", user.TenantName, user.Username, username) c.IndentedJSON(200, gin.H{ "id": newUser.ID, "username": username, @@ -1339,43 +1348,43 @@ func (umh UserMgmtHandler) RemoveUser(c *gin.Context) { username := strings.ToLower(body.Username) user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("RemoveUser: User %v: %v", body.Username, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } if user.Username == username { - serv.Warnf("RemoveUser: You can not remove your own user") + serv.Warnf("[tenant: %v][user: %v]RemoveUser: You can not remove your own user", user.TenantName, user.Username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "You can not remove your own user"}) return } exist, userToRemove, err := db.GetUserByUsername(username, user.TenantName) if err != nil { - serv.Errorf("RemoveUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveUser at GetUserByUsername: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("RemoveUser: User does not exist") + serv.Warnf("[tenant: %v][user: %v]RemoveUser: User does not exist", user.TenantName, user.Username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "User does not exist"}) return } if userToRemove.UserType == "root" { - serv.Warnf("RemoveUser: You can not remove the root user") + serv.Warnf("[tenant: %v][user: %v]RemoveUser: You can not remove the root user", user.TenantName, user.Username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "You can not remove the root user"}) return } err = updateDeletedUserResources(userToRemove) if err != nil { - serv.Errorf("RemoveUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveUser at updateDeletedUserResources: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } err = db.DeleteUser(username, userToRemove.TenantName) if err != nil { - serv.Errorf("RemoveUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveUser at DeleteUser: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1384,7 +1393,7 @@ func (umh UserMgmtHandler) RemoveUser(c *gin.Context) { // send signal to reload config err = serv.sendInternalAccountMsgWithReply(serv.GlobalAccount(), CONFIGURATIONS_RELOAD_SIGNAL_SUBJ, _EMPTY_, nil, _EMPTY_, true) if err != nil { - serv.Errorf("RemoveUser: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveUser at sendInternalAccountMsgWithReply: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1395,7 +1404,7 @@ func (umh UserMgmtHandler) RemoveUser(c *gin.Context) { analytics.SendEvent(user.TenantName, user.Username, "user-remove-user") } - serv.Noticef("User " + username + " has been deleted by user " + user.Username) + serv.Noticef("[tenant: %v][user: %v]User %v has been deleted by user %v", user.TenantName, user.Username, username, user.Username) c.IndentedJSON(200, gin.H{}) } @@ -1412,7 +1421,7 @@ func validateUsername(username string) error { func (umh UserMgmtHandler) RemoveMyUser(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveMyUser: " + err.Error()) + serv.Errorf("RemoveMyUser at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -1430,7 +1439,7 @@ func (umh UserMgmtHandler) RemoveMyUser(c *gin.Context) { } err = removeTenantResources(tenantName) if err != nil { - serv.Errorf("RemoveMyUser: User " + username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveMyUser at removeTenantResources: User %v: %v", tenantName, username, username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } @@ -1440,7 +1449,7 @@ func (umh UserMgmtHandler) RemoveMyUser(c *gin.Context) { analytics.SendEvent(user.TenantName, user.Username, "user-remove-himself") } - serv.Noticef("Tenant " + user.TenantName + " has been deleted") + serv.Noticef("[tenant: %v][user: %v]Tenant %v has been deleted", tenantName, username, user.TenantName) c.IndentedJSON(200, gin.H{}) } diff --git a/server/memphis_handlers_connections.go b/server/memphis_handlers_connections.go index 43c876447..382969787 100644 --- a/server/memphis_handlers_connections.go +++ b/server/memphis_handlers_connections.go @@ -40,7 +40,7 @@ func updateNewClientWithConfig(c *client, connId string) { slackEnabled, err := IsSlackEnabled(c.acc.GetName()) if err != nil { - c.Errorf("updateNewClientWithConfig: " + err.Error()) + c.Errorf("updateNewClientWithConfig: %v", err.Error()) } config := models.GlobalConfigurationsUpdate{ @@ -54,7 +54,7 @@ func sendConnectUpdate(c *client, ccu models.GlobalConfigurationsUpdate, connId s := c.srv rawMsg, err := json.Marshal(ccu) if err != nil { - s.Errorf("sendConnectUpdate: " + err.Error()) + s.Errorf("sendConnectUpdate: %v", err.Error()) return } subject := fmt.Sprintf(connectConfigUpdatesSubjectTemplate, connId) @@ -88,10 +88,9 @@ func handleConnectMessage(client *client) error { client.Warnf("handleConnectMessage: missing username or token") return errors.New("missing username or token") } - username, _, err = getUserAndTenantIdFromString(strings.ToLower(splittedToken[0])) + username, tenantId, err := getUserAndTenantIdFromString(strings.ToLower(splittedToken[0])) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("[tenant Id: %v]handleConnectMessage: User %v : %v", tenantId, username, err.Error()) return err } } @@ -101,17 +100,16 @@ func handleConnectMessage(client *client) error { } exist, user, err := db.GetUserByUsername(username, client.acc.GetName()) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("handleConnectMessage: User %v : %v", username, err.Error()) return err } if !exist { - errMsg := "User " + username + " does not exist" - client.Warnf("handleConnectMessage: " + errMsg) + errMsg := fmt.Sprintf("handleConnectMessage: User %v does not exist", username) + client.Warnf(errMsg) return errors.New(errMsg) } if user.UserType != "root" && user.UserType != "application" { - client.Warnf("handleConnectMessage: Please use a user of type Root/Application and not Management") + client.Warnf("[tenant: %v][user: %v] handleConnectMessage: Please use a user of type Root/Application and not Management", user.TenantName, user.Username) return errors.New("please use a user of type Root/Application and not Management") } @@ -119,27 +117,23 @@ func handleConnectMessage(client *client) error { connectionId = splittedMemphisInfo[0] exist, err := connectionsHandler.CreateConnection(user.ID, client.RemoteAddress().String(), connectionId, user.Username, client.Account().GetName()) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("[tenant: %v][user: %v]handleConnectMessage at CreateConnection: %v", user.TenantName, username, err.Error()) return err } if exist { err = connectionsHandler.ReliveConnection(connectionId) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("[tenant: %v][user: %v]handleConnectMessage at ReliveConnection: %v", user.TenantName, username, err.Error()) return err } err = producersHandler.ReliveProducers(connectionId) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("[tenant: %v][user: %v]handleConnectMessage at ReliveProducers: %v", user.TenantName, username, err.Error()) return err } err = consumersHandler.ReliveConsumers(connectionId) if err != nil { - errMsg := "User " + username + ": " + err.Error() - client.Errorf("handleConnectMessage: " + errMsg) + client.Errorf("[tenant: %v][user: %v]handleConnectMessage at ReliveConsumers: %v", user.TenantName, username, err.Error()) return err } } else { @@ -192,7 +186,7 @@ func (ch ConnectionsHandler) CreateConnection(userId int, clientAddress string, func (ch ConnectionsHandler) ReliveConnection(connectionId string) error { err := db.UpdateConnection(connectionId, true) if err != nil { - serv.Errorf("ReliveConnection error: " + err.Error()) + serv.Errorf("ReliveConnection error: %v", err.Error()) return err } return nil diff --git a/server/memphis_handlers_consumers.go b/server/memphis_handlers_consumers.go index d6131c65c..fdb92d603 100644 --- a/server/memphis_handlers_consumers.go +++ b/server/memphis_handlers_consumers.go @@ -14,6 +14,7 @@ package server import ( "encoding/json" "errors" + "fmt" "sort" "memphis/analytics" @@ -39,7 +40,7 @@ func validateConsumerName(consumerName string) error { func validateConsumerType(consumerType string) error { if consumerType != "application" && consumerType != "connector" { - return errors.New("consumer type has to be one of the following application/connector") + return fmt.Errorf("consumer type has to be one of the following application/connector and not %v", consumerType) } return nil } @@ -83,7 +84,7 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam name := strings.ToLower(consumerName) err := validateConsumerName(name) if err != nil { - serv.Warnf("createConsumerDirectCommon: Failed creating consumer " + consumerName + " at station " + cStationName + ": " + err.Error()) + serv.Warnf("[tenant: %v]createConsumerDirectCommon at validateConsumerName: Failed creating consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } @@ -91,7 +92,7 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam if consumerGroup != "" { err = validateConsumerName(consumerGroup) if err != nil { - serv.Warnf("createConsumerDirectCommon: Failed creating consumer " + consumerName + " at station " + cStationName + ": " + err.Error()) + serv.Warnf("[tenant: %v]createConsumerDirectCommon at validateConsumerName: Failed creating consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } } else { @@ -101,48 +102,44 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam consumerType := strings.ToLower(cType) err = validateConsumerType(consumerType) if err != nil { - serv.Warnf("createConsumerDirectCommon: Failed creating consumer " + consumerName + " at station " + cStationName + ": " + err.Error()) + serv.Warnf("[tenant: %v]createConsumerDirectCommon at validateConsumerType: Failed creating consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } exist, connection, err := db.GetConnectionByID(connectionId) if err != nil { - errMsg := "Consumer " + consumerName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at GetConnectionByID: Consumer %v : %v ", c.acc.Name, consumerName, err.Error()) return err } if !exist { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": Connection ID " + connectionId + " was not found" + errMsg := fmt.Sprintf("[tenant: %v]Consumer %v at station %v : Connection ID %v was not found", c.acc.Name, consumerName, cStationName, connectionId) serv.Warnf("createConsumerDirectCommon: " + errMsg) return errors.New(errMsg) } if !connection.IsActive { - serv.Warnf("createConsumerDirectCommon: Failed creating consumer " + consumerName + " at station " + cStationName + ": Connection is not active") - return errors.New("connection is not active") + serv.Warnf("[tenant: %v]createConsumerDirectCommon: Failed creating consumer %v at station %v : Connection is not active", c.acc.Name, consumerName, cStationName) + return fmt.Errorf("[tenant: %v]connection is not active", c.acc.Name) } stationName, err := StationNameFromStr(cStationName) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Warnf("createConsumerDirectCommon: " + errMsg) + serv.Warnf("[tenant: %v]createConsumerDirectCommon at StationNameFromStr: Consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } exist, user, err := db.GetUserByUserId(connection.CreatedBy) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at GetUserByUserId: Consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } if !exist { - serv.Warnf("createConsumerDirectCommon: user %v is not exists", connection.CreatedBy) + serv.Warnf("[tenant: %v]createConsumerDirectCommon: user %v is not exists", c.acc.Name, connection.CreatedBy) return err } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at GetStationByName: Consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } @@ -150,13 +147,12 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam var created bool station, created, err = CreateDefaultStation(user.TenantName, s, stationName, connection.CreatedBy, user.Username) if err != nil { - errMsg := "creating default station error: Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Warnf("createConsumerDirectCommon: " + errMsg) + serv.Warnf("[tenant: %v]createConsumerDirectCommon at CreateDefaultStation: Consumer %v at station %v : %v", c.acc.Name, consumerName, cStationName, err.Error()) return err } if created { - message := "Station " + stationName.Ext() + " has been created by user " + user.Username + message := fmt.Sprintf("Station %v has been created by user %v", stationName.Ext(), user.Username) serv.Noticef(message) var auditLogs []interface{} newAuditLog := models.AuditLog{ @@ -170,8 +166,7 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirect: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirect at CreateAuditLogs: Consumer %v at station %v :%v", c.acc.Name, consumerName, cStationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -192,21 +187,19 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam consumerGroupExist, consumerFromGroup, err := isConsumerGroupExist(consumerGroup, station.ID) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at isConsumerGroupExist: Consumer %v at station %v :%v", c.acc.Name, consumerName, cStationName, err.Error()) return err } exist, newConsumer, rowsUpdated, err := db.InsertNewConsumer(name, station.ID, consumerType, connectionId, connection.CreatedBy, user.Username, consumerGroup, maxAckTime, maxMsgDeliveries, startConsumeFromSequence, lastMessages, connection.TenantName) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at InsertNewConsumer: Consumer %v at station %v :%v", c.acc.Name, consumerName, cStationName, err.Error()) return err } if exist { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": Consumer name has to be unique per station" - serv.Warnf("createConsumerDirectCommon: " + errMsg) - return errors.New("memphis: " + errMsg) + errMsg := fmt.Sprintf("Consumer %v at station %v: Consumer name has to be unique per station", consumerName, cStationName) + serv.Errorf("[tenant: %v]createConsumerDirectCommon: %v", c.acc.Name, errMsg) + return fmt.Errorf("memphis: %v", errMsg) } if rowsUpdated == 1 { @@ -216,7 +209,7 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam if requestVersion == 1 { if newConsumer.StartConsumeFromSeq != consumerFromGroup.StartConsumeFromSeq || newConsumer.LastMessages != consumerFromGroup.LastMessages { errMsg := errors.New("consumer already exists with different uneditable configuration parameters (StartConsumeFromSequence/LastMessages)") - serv.Warnf("createConsumerDirectCommon: " + errMsg.Error()) + serv.Warnf("createConsumerDirectCommon: %v", errMsg.Error()) return errMsg } } @@ -225,11 +218,9 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam err := s.CreateConsumer(station.TenantName, newConsumer, station) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": station does not exist" - serv.Warnf("createConsumerDirectCommon: " + errMsg) + serv.Warnf("[tenant: %v]createConsumerDirectCommon: Consumer %v at station %v: station does not exist", c.acc.Name, consumerName, cStationName) } else { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at CreateConsumer: Consumer %v at station %v: %v", c.acc.Name, consumerName, cStationName, err.Error()) } return err } @@ -238,11 +229,9 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam err := s.CreateConsumer(station.TenantName, newConsumer, station) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": station does not exist" - serv.Warnf("createConsumerDirectCommon: " + errMsg) + serv.Warnf("[tenant: %v]createConsumerDirectCommon: Consumer %v at station %v: station does not exist", c.acc.Name, consumerName, cStationName) } else { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at CreateConsumer: Consumer %v at station %v: %v", c.acc.Name, consumerName, cStationName, err.Error()) } return err } @@ -259,8 +248,7 @@ func (s *Server) createConsumerDirectCommon(c *client, consumerName, cStationNam auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - errMsg := "Consumer " + consumerName + " at station " + cStationName + ": " + err.Error() - serv.Errorf("createConsumerDirectCommon: " + errMsg) + serv.Errorf("[tenant: %v]createConsumerDirectCommon at CreateAuditLogs: Consumer %v at station %v: %v", c.acc.Name, consumerName, cStationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -282,14 +270,14 @@ func (s *Server) createConsumerDirect(c *client, reply string, msg []byte) { tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("createConsumerDirect: " + err.Error()) + s.Errorf("[tenant: %v]createConsumerDirect: %v", c.acc.Name, err.Error()) return } if err := json.Unmarshal([]byte(message), &ccr); err != nil || ccr.RequestVersion < 1 { var ccrV0 createConsumerRequestV0 if err := json.Unmarshal(msg, &ccrV0); err != nil { - s.Errorf("createConsumerDirect: Failed creating consumer: %v\n%v", err.Error(), string(msg)) + s.Errorf("[tenant: %v]createConsumerDirect at json.Unmarshal: Failed creating consumer: %v: %v", tenantName, err.Error(), string(msg)) respondWithRespErr(globalAccountName, s, reply, err, &resp) return } @@ -300,21 +288,21 @@ func (s *Server) createConsumerDirect(c *client, reply string, msg []byte) { ccr.TenantName = tenantName if ccr.StartConsumeFromSequence <= 0 { errMsg := errors.New("startConsumeFromSequence has to be a positive number") - serv.Warnf("createConsumerDirect: " + errMsg.Error()) + serv.Warnf("[tenant: %v]createConsumerDirect: %v", tenantName, errMsg.Error()) respondWithErr(globalAccountName, s, reply, errMsg) return } if ccr.LastMessages < -1 { errMsg := errors.New("min value for LastMessages is -1") - serv.Warnf("createConsumerDirect: " + errMsg.Error()) + serv.Warnf("[tenant: %v]createConsumerDirect: %v", tenantName, errMsg.Error()) respondWithErr(globalAccountName, s, reply, errMsg) return } if ccr.StartConsumeFromSequence > 1 && ccr.LastMessages > -1 { errMsg := errors.New("consumer creation options can't contain both startConsumeFromSequence and lastMessages") - serv.Warnf("createConsumerDirect: " + errMsg.Error()) + serv.Warnf("[tenant: %v]createConsumerDirect: %v", tenantName, errMsg.Error()) respondWithErr(globalAccountName, s, reply, errMsg) return } @@ -326,7 +314,7 @@ func (s *Server) createConsumerDirect(c *client, reply string, msg []byte) { func (ch ConsumersHandler) GetAllConsumers(c *gin.Context) { consumers, err := db.GetAllConsumers() if err != nil { - serv.Errorf("GetAllConsumers: " + err.Error()) + serv.Errorf("GetAllConsumers: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -476,26 +464,25 @@ func (ch ConsumersHandler) GetAllConsumersByStation(c *gin.Context) { // for RES user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetAllConsumersByStation: " + err.Error()) + serv.Errorf("GetAllConsumersByStation: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(sn.Ext(), user.TenantName) if err != nil { - serv.Errorf("GetAllConsumersByStation: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("GetAllConsumersByStation: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("GetAllConsumersByStation: Station " + body.StationName + " does not exist") + serv.Warnf("GetAllConsumersByStation: Station %v does not exist", body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station does not exist"}) return } consumers, err := db.GetAllConsumersByStation(station.ID) if err != nil { - errMsg := "Station " + body.StationName + ": " + err.Error() - serv.Errorf("GetAllConsumersByStation: " + errMsg) + serv.Errorf("GetAllConsumersByStation: Station %v : %v", body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -511,12 +498,12 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { var dcr destroyConsumerRequest tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("destroyConsumerDirect: " + err.Error()) + s.Errorf("[tenant: %v]destroyConsumerDirect at getTenantNameAndMessage: %v", c.acc.Name, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if err := json.Unmarshal([]byte(message), &dcr); err != nil { - s.Errorf("destroyConsumerDirect: %v", err.Error()) + s.Errorf("[tenant: %v]destroyConsumerDirect at json.Unmarshal: %v", tenantName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -524,8 +511,7 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { dcr.TenantName = tenantName stationName, err := StationNameFromStr(dcr.StationName) if err != nil { - errMsg := "Station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + serv.Errorf("[tenant: %v]DestroyConsumer at StationNameFromStr: Station %v: %v", tenantName, dcr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -533,21 +519,20 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { name := strings.ToLower(dcr.ConsumerName) _, station, err := db.GetStationByName(stationName.Ext(), dcr.TenantName) if err != nil { - errMsg := "Station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + serv.Errorf("[tenant: %v]DestroyConsumer at GetStationByName: Station %v: %v", tenantName, dcr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } exist, consumer, err := db.DeleteConsumer(name, station.ID) if !exist { - errMsg := "Consumer " + dcr.ConsumerName + " at station " + dcr.StationName + " does not exist" - serv.Warnf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer %v at station %v does not exist", tenantName, dcr.ConsumerName, dcr.StationName) + serv.Warnf("DestroyConsumer: %v", errMsg) respondWithErr(globalAccountName, s, reply, errors.New(errMsg)) return } if err != nil { - errMsg := "Consumer " + dcr.ConsumerName + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer %v at station %v: %v", tenantName, dcr.ConsumerName, dcr.StationName, err.Error()) + serv.Errorf("DestroyConsumer: %v", errMsg) respondWithErr(globalAccountName, s, reply, err) return } @@ -555,8 +540,8 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { // ensure not part of an active consumer group count, err := db.CountActiveConsumersInCG(consumer.ConsumersGroup, station.ID) if err != nil { - errMsg := "Consumer " + dcr.ConsumerName + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer %v at station %v: %v", tenantName, dcr.ConsumerName, dcr.StationName, err.Error()) + serv.Errorf("DestroyConsumer at CountActiveConsumersInCG: %v", errMsg) respondWithErr(globalAccountName, s, reply, err) return } @@ -565,8 +550,8 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { if count == 0 { // no other members in this group err = s.RemoveConsumer(station.TenantName, stationName, consumer.ConsumersGroup) if err != nil && !IsNatsErr(err, JSConsumerNotFoundErr) && !IsNatsErr(err, JSStreamNotFoundErr) { - errMsg := "Consumer group " + consumer.ConsumersGroup + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer group %v at station %v: %v", tenantName, consumer.ConsumersGroup, dcr.StationName, err.Error()) + serv.Errorf("DestroyConsumer at RemoveConsumer: %v", errMsg) respondWithErr(globalAccountName, s, reply, err) return } @@ -575,8 +560,8 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { } err = db.RemovePoisonedCg(station.ID, consumer.ConsumersGroup) if err != nil && !IsNatsErr(err, JSConsumerNotFoundErr) && !IsNatsErr(err, JSStreamNotFoundErr) { - errMsg := "Consumer group " + consumer.ConsumersGroup + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer group %v at station %v: %v", tenantName, consumer.ConsumersGroup, dcr.StationName, err.Error()) + serv.Errorf("DestroyConsumer at RemovePoisonedCg: %v", errMsg) respondWithErr(globalAccountName, s, reply, err) return } @@ -589,12 +574,12 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { } _, user, err := db.GetUserByUsername(username, dcr.TenantName) if err != nil && !IsNatsErr(err, JSConsumerNotFoundErr) && !IsNatsErr(err, JSStreamNotFoundErr) { - errMsg := "Consumer group " + consumer.ConsumersGroup + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + errMsg := fmt.Sprintf("[tenant: %v]Consumer group %v at station %v: %v", tenantName, consumer.ConsumersGroup, dcr.StationName, err.Error()) + serv.Errorf("DestroyConsumer at GetUserByUsername: " + errMsg) respondWithErr(globalAccountName, s, reply, err) return } - message := "Consumer " + name + " has been deleted by user " + username + message := fmt.Sprintf("Consumer %v has been deleted by user %v ", name, username) serv.Noticef(message) var auditLogs []interface{} newAuditLog := models.AuditLog{ @@ -608,8 +593,7 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - errMsg := "Consumer " + dcr.ConsumerName + " at station " + dcr.StationName + ": " + err.Error() - serv.Errorf("DestroyConsumer: " + errMsg) + serv.Errorf("[tenant: %v]DestroyConsumer at CreateAuditLogs: Consumer %v at station %v: %v", user.TenantName, dcr.ConsumerName, dcr.StationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -624,7 +608,7 @@ func (s *Server) destroyConsumerDirect(c *client, reply string, msg []byte) { func (ch ConsumersHandler) ReliveConsumers(connectionId string) error { err := db.UpdateConsumersConnection(connectionId, false) if err != nil { - serv.Errorf("ReliveConsumers: " + err.Error()) + serv.Errorf("ReliveConsumers: %v", err.Error()) return err } diff --git a/server/memphis_handlers_dls_messages.go b/server/memphis_handlers_dls_messages.go index 6f63e7a70..f288a1df3 100644 --- a/server/memphis_handlers_dls_messages.go +++ b/server/memphis_handlers_dls_messages.go @@ -15,6 +15,7 @@ import ( "encoding/hex" "encoding/json" "errors" + "fmt" "memphis/db" "memphis/models" "sort" @@ -33,7 +34,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { var message JSConsumerDeliveryExceededAdvisory err := json.Unmarshal(msg, &message) if err != nil { - serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: " + err.Error()) + serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: %v", err.Error()) return err } @@ -46,7 +47,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { stationName := StationNameFromStreamName(streamName) _, station, err := db.GetStationByName(stationName.Ext(), accountName) if err != nil { - serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: " + err.Error()) + serv.Errorf("handleNewUnackedMsg: station: %v, Error while getting notified about a poison message: %v", stationName.Ext(), err.Error()) return err } if !station.DlsConfigurationPoison { @@ -61,7 +62,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { if IsNatsErr(err, JSNoMessageFoundErr) { return nil } - serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: " + err.Error()) + serv.Errorf("handleNewUnackedMsg: station: %v, Error while getting notified about a poison message: %v", stationName.Ext(), err.Error()) return err } @@ -70,7 +71,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { if poisonMessageContent.Header != nil { headersJson, err = DecodeHeader(poisonMessageContent.Header) if err != nil { - serv.Errorf("handleNewUnackedMsg: " + err.Error()) + serv.Errorf("handleNewUnackedMsg: %v", err.Error()) return err } } @@ -98,11 +99,11 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { connId := connectionIdHeader exist, p, err := db.GetProducerByNameAndConnectionID(producedByHeader, connId) if err != nil { - serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: " + err.Error()) + serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: %v", err.Error()) return err } if !exist { - serv.Warnf("handleNewUnackedMsg: producer " + producedByHeader + " couldn't been found") + serv.Warnf("handleNewUnackedMsg: producer %v couldn't been found", producedByHeader) return nil } producerId = p.ID @@ -118,7 +119,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { dlsMsgId, err := db.StorePoisonMsg(station.ID, int(messageSeq), cgName, producerId, poisonedCgs, messageDetails, station.TenantName) if err != nil { - serv.Errorf("handleNewUnackedMsg: Error while getting notified about a poison message: " + err.Error()) + serv.Errorf("[tenant: %v]handleNewUnackedMsg atStorePoisonMsg: Error while getting notified about a poison message: %v", station.TenantName, err.Error()) return err } if dlsMsgId == 0 { // nothing to do @@ -129,7 +130,7 @@ func (s *Server) handleNewUnackedMsg(msg []byte) error { var msgUrl = s.opts.UiHost + "/stations/" + stationName.Ext() + "/" + idForUrl err = SendNotification(station.TenantName, PoisonMessageTitle, "Poison message has been identified, for more details head to: "+msgUrl, PoisonMAlert) if err != nil { - serv.Warnf("handleNewUnackedMsg: Error while sending a poison message notification: " + err.Error()) + serv.Warnf("[tenant: %v]handleNewUnackedMsg at SendNotification: Error while sending a poison message notification: %v", station.TenantName, err.Error()) return nil } return nil @@ -198,7 +199,7 @@ func (pmh PoisonMessagesHandler) GetDlsMessageDetailsById(messageId int, dlsType return models.DlsMessageResponse{}, err } if !exist { - return models.DlsMessageResponse{}, errors.New("Station " + station.Name + " does not exists") + return models.DlsMessageResponse{}, fmt.Errorf("Station %v does not exists", station.Name) } sn, err := StationNameFromStr(station.Name) @@ -250,7 +251,7 @@ func (pmh PoisonMessagesHandler) GetDlsMessageDetailsById(messageId int, dlsType return models.DlsMessageResponse{}, err } if !exist { - return models.DlsMessageResponse{}, errors.New("Producer " + prod.Name + " does not exist") + return models.DlsMessageResponse{}, fmt.Errorf("Producer %v does not exist", prod.Name) } producer = prod diff --git a/server/memphis_handlers_integrations.go b/server/memphis_handlers_integrations.go index 59597d120..f35dac531 100644 --- a/server/memphis_handlers_integrations.go +++ b/server/memphis_handlers_integrations.go @@ -13,6 +13,7 @@ package server import ( "encoding/json" + "fmt" "strings" "memphis/analytics" @@ -37,7 +38,7 @@ func (it IntegrationsHandler) CreateIntegration(c *gin.Context) { } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("CreateIntegration: " + err.Error()) + serv.Errorf("[tenant: %v]CreateIntegration at getUserDetailsFromMiddleware: %v", body.TenantName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -47,12 +48,12 @@ func (it IntegrationsHandler) CreateIntegration(c *gin.Context) { exist, _, err := db.GetTenantByName(body.TenantName) if err != nil { - serv.Errorf("CreateIntegration: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateIntegration at GetTenantByName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("CreateIntegration : tenant " + body.TenantName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]CreateIntegration : tenant %v does not exist", user.TenantName, user.Username, body.TenantName) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -64,10 +65,10 @@ func (it IntegrationsHandler) CreateIntegration(c *gin.Context) { _, _, slackIntegration, errorCode, err := it.handleCreateSlackIntegration(body) if err != nil { if errorCode == 500 { - serv.Errorf("CreateSlackIntegration: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateSlackIntegration at handleCreateSlackIntegration code 500: %v", user.TenantName, user.Username, err.Error()) message = "Server error" } else { - serv.Warnf("CreateSlackIntegration: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateSlackIntegration at handleCreateSlackIntegration: %v", user.TenantName, user.Username, err.Error()) message = err.Error() } c.AbortWithStatusJSON(errorCode, gin.H{"message": message}) @@ -78,10 +79,10 @@ func (it IntegrationsHandler) CreateIntegration(c *gin.Context) { s3Integration, errorCode, err := it.handleCreateS3Integration(body.TenantName, body.Keys) if err != nil { if errorCode == 500 { - serv.Errorf("CreateS3Integration: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateS3Integration at handleCreateS3Integration code 500: %v", user.TenantName, user.Username, err.Error()) message = "Server error" } else { - serv.Warnf("CreateS3Integration: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateS3Integration at handleCreateS3Integration: %v", user.TenantName, user.Username, err.Error()) message = err.Error() } c.AbortWithStatusJSON(errorCode, gin.H{"message": message}) @@ -89,7 +90,7 @@ func (it IntegrationsHandler) CreateIntegration(c *gin.Context) { } integration = s3Integration default: - serv.Warnf("CreateIntegration: Unsupported integration type - " + integrationType) + serv.Warnf("[tenant: %v][user: %v]CreateIntegration: Unsupported integration type - %v", user.TenantName, user.Username, integrationType) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Unsupported integration type - " + integrationType}) return } @@ -114,12 +115,12 @@ func (it IntegrationsHandler) UpdateIntegration(c *gin.Context) { exist, _, err := db.GetTenantByName(body.TenantName) if err != nil { - serv.Errorf("UpdateIntegration: " + err.Error()) + serv.Errorf("[tenant: %v]UpdateIntegration at GetTenantByName: %v", body.TenantName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("UpdateIntegration : tenant " + body.TenantName + " does not exist") + serv.Warnf("[tenant: %v]UpdateIntegration at GetTenantByName: tenant %v does not exist", body.TenantName, body.TenantName) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -130,10 +131,10 @@ func (it IntegrationsHandler) UpdateIntegration(c *gin.Context) { slackIntegration, errorCode, err := it.handleUpdateSlackIntegration("slack", body) if err != nil { if errorCode == 500 { - serv.Errorf("UpdateSlackIntegration: " + err.Error()) + serv.Errorf("[tenant:%v]UpdateSlackIntegration at handleUpdateSlackIntegration code 500: %v", body.TenantName, err.Error()) message = "Server error" } else { - serv.Warnf("UpdateSlackIntegration: " + err.Error()) + serv.Warnf("[tenant:%v]UpdateSlackIntegration at handleUpdateSlackIntegration: %v", body.TenantName, err.Error()) message = err.Error() } c.AbortWithStatusJSON(errorCode, gin.H{"message": message}) @@ -144,10 +145,10 @@ func (it IntegrationsHandler) UpdateIntegration(c *gin.Context) { s3Integration, errorCode, err := it.handleUpdateS3Integration(body) if err != nil { if errorCode == 500 { - serv.Errorf("UpdateS3Integration: " + err.Error()) + serv.Errorf("[tenant: %v]UpdateS3Integration at handleUpdateS3Integration code 500: %v", body.TenantName, err.Error()) message = "Server error" } else { - serv.Warnf("UpdateS3Integration: " + err.Error()) + serv.Warnf("[tenant: %v]UpdateS3Integration at handleUpdateS3Integration: %v", body.TenantName, err.Error()) message = err.Error() } c.AbortWithStatusJSON(errorCode, gin.H{"message": message}) @@ -156,7 +157,7 @@ func (it IntegrationsHandler) UpdateIntegration(c *gin.Context) { integration = s3Integration default: - serv.Warnf("UpdateIntegration: Unsupported integration type - " + body.Name) + serv.Warnf("[tenant: %v]UpdateIntegration: Unsupported integration type - %v", body.TenantName, body.Name) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Unsupported integration type - " + body.Name}) return } @@ -192,7 +193,7 @@ func (it IntegrationsHandler) GetIntegrationDetails(c *gin.Context) { } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetIntegrationDetails: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]GetIntegrationDetails at getUserDetailsFromMiddleware: Integration %v: %v", body.TenantName, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -203,18 +204,18 @@ func (it IntegrationsHandler) GetIntegrationDetails(c *gin.Context) { exist, _, err := db.GetTenantByName(body.TenantName) if err != nil { - serv.Errorf("GetIntegrationDetails: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetIntegrationDetails at GetTenantByName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("GetIntegrationDetails : tenant " + body.TenantName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetIntegrationDetails : tenant %v does not exist", user.TenantName, user.Username, body.TenantName) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } exist, integration, err := db.GetIntegration(strings.ToLower(body.Name), body.TenantName) if err != nil { - serv.Errorf("GetIntegrationDetails: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetIntegrationDetails at db.GetIntegration: Integration %v: %v", body.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } else if !exist { @@ -236,7 +237,7 @@ func (it IntegrationsHandler) GetIntegrationDetails(c *gin.Context) { func (it IntegrationsHandler) GetAllIntegrations(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - message := "GetAllIntegrations: " + err.Error() + message := fmt.Sprintf("GetAllIntegrations at getUserDetailsFromMiddleware: %v", err.Error()) serv.Errorf(message) c.AbortWithStatusJSON(500, gin.H{"message": message}) return @@ -244,7 +245,7 @@ func (it IntegrationsHandler) GetAllIntegrations(c *gin.Context) { _, integrations, err := db.GetAllIntegrationsByTenant(user.TenantName) if err != nil { - serv.Errorf("GetAllIntegrations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetAllIntegrations at db.GetAllIntegrationsByTenant: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -276,7 +277,7 @@ func (it IntegrationsHandler) DisconnectIntegration(c *gin.Context) { } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("DisconnectIntegration: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]DisconnectIntegration at getUserDetailsFromMiddleware: Integration %v: %v", body.TenantName, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -287,12 +288,12 @@ func (it IntegrationsHandler) DisconnectIntegration(c *gin.Context) { exist, _, err := db.GetTenantByName(body.TenantName) if err != nil { - serv.Errorf("DisconnectIntegration: " + err.Error()) + serv.Errorf("[tenant:%v]DisconnectIntegration at GetTenantByName: %v", body.TenantName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - serv.Warnf("DisconnectIntegration : tenant " + body.TenantName + " does not exist") + serv.Warnf("[tenant: %v]DisconnectIntegration : tenant %v does not exist", body.TenantName, body.TenantName) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -300,7 +301,7 @@ func (it IntegrationsHandler) DisconnectIntegration(c *gin.Context) { integrationType := strings.ToLower(body.Name) err = db.DeleteIntegration(integrationType, body.TenantName) if err != nil { - serv.Errorf("DisconnectIntegration: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]DisconnectIntegration at db.DeleteIntegration: Integration %v: %v", body.TenantName, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -318,13 +319,13 @@ func (it IntegrationsHandler) DisconnectIntegration(c *gin.Context) { msg, err := json.Marshal(integrationUpdate) if err != nil { - serv.Errorf("DisconnectIntegration: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]DisconnectIntegration at json.Marshal: Integration %v: %v", body.TenantName, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } err = serv.sendInternalAccountMsgWithReply(serv.GlobalAccount(), INTEGRATIONS_UPDATES_SUBJ, _EMPTY_, nil, msg, true) if err != nil { - serv.Errorf("DisconnectIntegration: Integration " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]DisconnectIntegration at sendInternalAccountMsgWithReply: Integration %v: %v", body.TenantName, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } diff --git a/server/memphis_handlers_monitoring.go b/server/memphis_handlers_monitoring.go index 72eb4b9f6..ce327483a 100644 --- a/server/memphis_handlers_monitoring.go +++ b/server/memphis_handlers_monitoring.go @@ -128,7 +128,7 @@ func (mh MonitoringHandler) GetBrokersThroughputs(tenantName string) ([]models.B intTs, err := strconv.Atoi(rawTs) if err != nil { - serv.Errorf("GetBrokersThroughputs: " + err.Error()) + serv.Errorf("[tenant: %v]GetBrokersThroughputs: %v", tenantName, err.Error()) } respCh <- StoredMsg{ @@ -218,17 +218,17 @@ cleanup: func (mh MonitoringHandler) GetMainOverviewData(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetMainOverviewData: " + err.Error()) + serv.Errorf("GetMainOverviewData at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } response, err := mh.getMainOverviewDataDetails(user.TenantName) if err != nil { if strings.Contains(strings.ToLower(err.Error()), "cannot connect to the docker daemon") { - serv.Warnf("GetMainOverviewData: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]GetMainOverviewData: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Failed getting system components data: " + err.Error()}) } else { - serv.Errorf("GetMainOverviewData: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMainOverviewData: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } } @@ -615,25 +615,25 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Warnf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Warnf("GetStationOverviewData at StationNameFromStr: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetStationOverviewData: " + err.Error()) + serv.Errorf("GetStationOverviewData at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetStationByName: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + body.StationName + " does not exist" - serv.Warnf("GetStationOverviewData: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", body.StationName) + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -642,7 +642,7 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { if station.IsNative { connectedProducers, disconnectedProducers, deletedProducers, err = producersHandler.GetProducersByStation(station) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetProducersByStation: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -650,17 +650,17 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { auditLogs, err := auditLogsHandler.GetAuditLogsByStation(station.Name, user.TenantName) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } totalMessages, err := stationsHandler.GetTotalMessages(station.TenantName, station.Name) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - serv.Warnf("GetStationOverviewData: Station " + body.StationName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData at GetAuditLogsByStation: nats error At station %v: does not exist", user.TenantName, user.Username, body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station " + body.StationName + " does not exist"}) } else { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } return @@ -668,10 +668,10 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { avgMsgSize, err := stationsHandler.GetAvgMsgSize(station) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - serv.Warnf("GetStationOverviewData: Station " + body.StationName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData at GetAvgMsgSize: At station %v: does not exist", user.TenantName, user.Username, body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station " + body.StationName + " does not exist"}) } else { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetAvgMsgSize: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } return @@ -681,10 +681,10 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { messages, err := stationsHandler.GetMessages(station, messagesToFetch) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - serv.Warnf("GetStationOverviewData: Station " + body.StationName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData at GetMessages: nats error At station %v: does not exist", user.TenantName, user.Username, body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station " + body.StationName + " does not exist"}) } else { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("GetStationOverviewData at GetMessages: At station " + body.StationName + ": " + err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } return @@ -693,10 +693,10 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { poisonMessages, schemaFailedMessages, totalDlsAmount, err := poisonMsgsHandler.GetDlsMsgsByStationLight(station) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - serv.Warnf("GetStationOverviewData: Station " + body.StationName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData at GetDlsMsgsByStationLight: nats error At station %v: does not exist", user.TenantName, user.Username, body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station " + body.StationName + " does not exist"}) } else { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetDlsMsgsByStationLight: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } return @@ -708,7 +708,7 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { if station.IsNative { connectedCgs, disconnectedCgs, deletedCgs, err = consumersHandler.GetCgsByStation(stationName, station) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetCgsByStation: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -716,17 +716,17 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { tags, err := tagsHandler.GetTagsByEntityWithID("station", station.ID) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetTagsByEntityWithID: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } leader, followers, err := stationsHandler.GetLeaderAndFollowers(station) if err != nil { if IsNatsErr(err, JSStreamNotFoundErr) { - serv.Warnf("GetStationOverviewData: Station " + body.StationName + " does not exist") + serv.Warnf("[tenant: %v][user: %v]GetStationOverviewData at GetLeaderAndFollowers: nats error At station %v: does not exist", user.TenantName, user.Username, body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station " + body.StationName + " does not exist"}) } else { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetLeaderAndFollowers: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) } return @@ -751,7 +751,7 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { var schemaDetails models.StationOverviewSchemaDetails exist, schema, err := db.GetSchemaByName(station.SchemaName, station.TenantName) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetSchemaByName: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -760,7 +760,7 @@ func (mh MonitoringHandler) GetStationOverviewData(c *gin.Context) { } else { _, schemaVersion, err := db.GetSchemaVersionByNumberAndID(station.SchemaVersionNumber, schema.ID) if err != nil { - serv.Errorf("GetStationOverviewData: At station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStationOverviewData at GetSchemaVersionByNumberAndID: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -933,7 +933,7 @@ func (s *Server) GetSystemLogs(amount uint64, intTs, err := strconv.Atoi(rawTs) if err != nil { - s.Errorf("GetSystemLogs: " + err.Error()) + s.Errorf("GetSystemLogs: %v", err.Error()) return } @@ -1265,7 +1265,7 @@ func shortenFloat(f float64) float64 { func (mh MonitoringHandler) GetAvailableReplicas(c *gin.Context) { v, err := serv.Varz(nil) if err != nil { - serv.Errorf("GetAvailableReplicas: " + err.Error()) + serv.Errorf("GetAvailableReplicas: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } diff --git a/server/memphis_handlers_producers.go b/server/memphis_handlers_producers.go index e403ae559..54c6ba41f 100644 --- a/server/memphis_handlers_producers.go +++ b/server/memphis_handlers_producers.go @@ -14,6 +14,7 @@ package server import ( "encoding/json" "errors" + "fmt" "memphis/analytics" "memphis/db" "memphis/models" @@ -47,53 +48,53 @@ func (s *Server) createProducerDirectCommon(c *client, pName, pType, pConnection name := strings.ToLower(pName) err := validateProducerName(name) if err != nil { - serv.Warnf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Warnf("createProducerDirectCommon at validateProducerName: Producer %v at station %v: %v", pName, pStationName.external, err.Error()) return false, false, err } producerType := strings.ToLower(pType) err = validateProducerType(producerType) if err != nil { - serv.Warnf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Warnf("createProducerDirectCommon at validateProducerType: Producer %v at station %v: %v", pName, pStationName.external, err.Error()) return false, false, err } exist, connection, err := db.GetConnectionByID(pConnectionId) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("createProducerDirectCommon at GetConnectionByIDa: Producer %v at station %v: %v", pName, pStationName.external, err.Error()) return false, false, err } if !exist { - errMsg := "Connection ID " + pConnectionId + " was not found" - serv.Warnf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + errMsg) - return false, false, errors.New("memphis: " + errMsg) + errMsg := fmt.Sprintf("Connection ID %v was not found", pConnectionId) + serv.Warnf("createProducerDirectCommon: Producer %v at station %v: %v", pName, pStationName.external, errMsg) + return false, false, fmt.Errorf("memphis: %v", errMsg) } if !connection.IsActive { - errMsg := "Connection with ID " + pConnectionId + " is not active" - serv.Warnf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + errMsg) - return false, false, errors.New("memphis: " + errMsg) + errMsg := fmt.Sprintf("Connection with ID %v is not active", pConnectionId) + serv.Warnf("createProducerDirectCommon: Producer %v at station %v: %v", pName, pStationName.external, errMsg) + return false, false, fmt.Errorf("memphis: %v", errMsg) } exist, user, err := db.GetUserByUserId(connection.CreatedBy) if err != nil { - serv.Errorf("createProducerDirectCommon: creating default station error - producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("createProducerDirectCommon at GetUserByUserId: creating default station error - producer %v at station %v: %v", pName, pStationName.external, err.Error()) return false, false, err } if !exist { - serv.Warnf("createProducerDirectCommon: user" + user.Username + "is not exists") + serv.Warnf("createProducerDirectCommon at GetUserByUserId: user %v is not exists", user.Username) return false, false, err } exist, station, err := db.GetStationByName(pStationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon at GetStationByName: Producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) return false, false, err } if !exist { var created bool station, created, err = CreateDefaultStation(user.TenantName, s, pStationName, connection.CreatedBy, user.Username) if err != nil { - serv.Errorf("createProducerDirectCommon: creating default station error - producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon at CreateDefaultStation: creating default station error - producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) return false, false, err } if created { @@ -111,7 +112,7 @@ func (s *Server) createProducerDirectCommon(c *client, pName, pType, pConnection auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon: Producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -132,17 +133,17 @@ func (s *Server) createProducerDirectCommon(c *client, pName, pType, pConnection exist, _, err = db.GetActiveProducerByStationID(name, station.ID) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon at GetActiveProducerByStationID: Producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) return false, false, err } if exist { - errMsg := "Producer name (" + pName + ") has to be unique per station (" + pStationName.external + ")" - serv.Warnf("createProducerDirectCommon: " + errMsg) - return false, false, errors.New("memphis: " + errMsg) + errMsg := fmt.Sprintf("Producer name ( %v ) has to be unique per station ( %v )", pName, pStationName.external) + serv.Warnf("[tenant: %v][user: %v]createProducerDirectCommon: %v", user.TenantName, user.Username, errMsg) + return false, false, fmt.Errorf("memphis: %v", errMsg) } newProducer, rowsUpdated, err := db.InsertNewProducer(name, station.ID, producerType, pConnectionId, connection.CreatedBy, user.Username, station.TenantName) if err != nil { - serv.Warnf("createProducerDirectCommon: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]createProducerDirectCommon at InsertNewProducer: %v", user.TenantName, user.Username, err.Error()) return false, false, err } if rowsUpdated == 1 { @@ -160,7 +161,7 @@ func (s *Server) createProducerDirectCommon(c *client, pName, pType, pConnection auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon at CreateAuditLogs: Producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -178,7 +179,7 @@ func (s *Server) createProducerDirectCommon(c *client, pName, pType, pConnection } shouldSendNotifications, err := IsSlackEnabled(user.TenantName) if err != nil { - serv.Errorf("createProducerDirectCommon: Producer " + pName + " at station " + pStationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]createProducerDirectCommon at IsSlackEnabled: Producer %v at station %v: %v", user.TenantName, user.Username, pName, pStationName.external, err.Error()) } return shouldSendNotifications, station.DlsConfigurationSchemaverse, nil @@ -201,14 +202,14 @@ func (s *Server) createProducerDirect(c *client, reply string, msg []byte) { tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("createProducerDirect: " + err.Error()) + s.Errorf("createProducerDirect: %v", err.Error()) return } if err := json.Unmarshal([]byte(message), &cpr); err != nil || cpr.RequestVersion < 1 { var cprV0 createProducerRequestV0 if err := json.Unmarshal([]byte(message), &cprV0); err != nil { - s.Errorf("createProducerDirect: %v", err.Error()) + s.Errorf("[tenant: %v]createProducerDirect: %v", tenantName, err.Error()) respondWithRespErr(globalAccountName, s, reply, err, &resp) return } @@ -218,7 +219,7 @@ func (s *Server) createProducerDirect(c *client, reply string, msg []byte) { cpr.TenantName = tenantName sn, err := StationNameFromStr(cpr.StationName) if err != nil { - s.Errorf("createProducerDirect: Producer " + cpr.Name + " at station " + cpr.StationName + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]createProducerDirect at StationNameFromStr: Producer %v at station %v: %v", cpr.TenantName, cpr.Username, cpr.Name, cpr.StationName, err.Error()) respondWithRespErr(globalAccountName, s, reply, err, &resp) return } @@ -237,7 +238,7 @@ func (s *Server) createProducerDirect(c *client, reply string, msg []byte) { return } if err != nil { - s.Errorf("createProducerDirect: Producer " + cpr.Name + " at station " + cpr.StationName + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]createProducerDirect at getSchemaUpdateInitFromStation: Producer %v at station %v: %v", cpr.TenantName, cpr.Username, cpr.Name, cpr.StationName, err.Error()) respondWithRespErr(globalAccountName, s, reply, err, &resp) return } @@ -249,7 +250,7 @@ func (s *Server) createProducerDirect(c *client, reply string, msg []byte) { func (ph ProducersHandler) GetAllProducers(c *gin.Context) { producers, err := db.GetAllProducers() if err != nil { - serv.Errorf("GetAllProducers: " + err.Error()) + serv.Errorf("GetAllProducers at db.GetAllProducers: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -331,7 +332,7 @@ func (ph ProducersHandler) GetAllProducersByStation(c *gin.Context) { // for the user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetAllProducersByStation: " + err.Error()) + serv.Errorf("GetAllProducersByStation: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -343,14 +344,14 @@ func (ph ProducersHandler) GetAllProducersByStation(c *gin.Context) { // for the return } if !exist { - serv.Warnf("GetAllProducersByStation: Station " + body.StationName + " does not exist") + serv.Warnf("GetAllProducersByStation: Station %v does not exist", body.StationName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station does not exist"}) return } producers, err := db.GetNotDeletedProducersByStationID(station.ID) if err != nil { - serv.Errorf("GetAllProducersByStation: Station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v]GetAllProducersByStation at GetNotDeletedProducersByStationID: Station %v :%v ", station.TenantName, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -366,7 +367,7 @@ func (s *Server) destroyProducerDirect(c *client, reply string, msg []byte) { var dpr destroyProducerRequest tenantName, destoryMessage, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("destroyProducerDirect: " + err.Error()) + s.Errorf("destroyProducerDirect: %v", err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -379,27 +380,27 @@ func (s *Server) destroyProducerDirect(c *client, reply string, msg []byte) { dpr.TenantName = tenantName stationName, err := StationNameFromStr(dpr.StationName) if err != nil { - serv.Errorf("destroyProducerDirect: Producer " + dpr.ProducerName + " at station " + dpr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]destroyProducerDirect at StationNameFromStr: Producer %v at station %v: %v", dpr.TenantName, dpr.Username, dpr.ProducerName, dpr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } name := strings.ToLower(dpr.ProducerName) _, station, err := db.GetStationByName(stationName.Ext(), dpr.TenantName) if err != nil { - serv.Errorf("destroyProducerDirect: Producer " + dpr.ProducerName + " at station " + dpr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]destroyProducerDirect at GetStationByName: Producer %v at station %v: %v", dpr.TenantName, dpr.Username, dpr.ProducerName, dpr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } exist, _, err := db.DeleteProducerByNameAndStationID(name, station.ID) if err != nil { - serv.Errorf("destroyProducerDirect: Producer " + name + " at station " + dpr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]destroyProducerDirect at DeleteProducerByNameAndStationID: Producer %v at station %v: %v", dpr.TenantName, dpr.Username, name, dpr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if !exist { - errMsg := "Producer " + name + " at station " + dpr.StationName + " does not exist" - serv.Warnf("destroyProducerDirect: " + errMsg) + errMsg := fmt.Sprintf("Producer %v at station %v does not exist", name, dpr.StationName) + serv.Warnf("[tenant: %v][user: %v]destroyProducerDirect: %v", dpr.TenantName, dpr.Username, errMsg) respondWithErr(globalAccountName, s, reply, errors.New(errMsg)) return } @@ -410,7 +411,7 @@ func (s *Server) destroyProducerDirect(c *client, reply string, msg []byte) { } _, user, err := db.GetUserByUsername(username, dpr.TenantName) if err != nil { - serv.Errorf("destroyProducerDirect: Producer " + name + " at station " + dpr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]destroyProducerDirect at GetUserByUsername: Producer %v at station %v: %v", dpr.TenantName, dpr.Username, name, dpr.StationName, err.Error()) } message := "Producer " + name + " has been deleted by user " + username serv.Noticef(message) @@ -426,7 +427,7 @@ func (s *Server) destroyProducerDirect(c *client, reply string, msg []byte) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("destroyProducerDirect: Producer " + name + " at station " + dpr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]destroyProducerDirect at CreateAuditLogs: Producer %v at station %v: %v", dpr.TenantName, dpr.Username, name, dpr.StationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -440,7 +441,7 @@ func (s *Server) destroyProducerDirect(c *client, reply string, msg []byte) { func (ph ProducersHandler) ReliveProducers(connectionId string) error { err := db.UpdateProducersConnection(connectionId, true) if err != nil { - serv.Errorf("ReliveProducers: " + err.Error()) + serv.Errorf("ReliveProducers: %v", err.Error()) return err } diff --git a/server/memphis_handlers_schemas.go b/server/memphis_handlers_schemas.go index afb7d9e32..1f6ae082c 100644 --- a/server/memphis_handlers_schemas.go +++ b/server/memphis_handlers_schemas.go @@ -52,7 +52,7 @@ func validateProtobufContent(schemaContent string) error { } _, err := parser.ParseFiles("") if err != nil { - return errors.New("your Proto file is invalid: " + err.Error()) + return fmt.Errorf("your Proto file is invalid: %v", err.Error()) } return nil @@ -206,13 +206,13 @@ func (s *Server) updateStationProducersOfSchemaChange(tenantName string, sn Stat subject := fmt.Sprintf(schemaUpdatesSubjectTemplate, sn.Intern()) msg, err := json.Marshal(schemaUpdate) if err != nil { - s.Errorf("updateStationProducersOfSchemaChange: marshal failed at station " + sn.external) + s.Errorf("[tenant: %v]updateStationProducersOfSchemaChange: marshal failed at station %v", tenantName, sn.external) return } account, err := s.lookupAccount(tenantName) if err != nil { - s.Errorf("updateStationProducersOfSchemaChange " + err.Error()) + s.Errorf("[tenant: %v]updateStationProducersOfSchemaChange at lookupAccount: %v", tenantName, err.Error()) return } s.sendInternalAccountMsg(account, subject, msg) @@ -237,11 +237,11 @@ func getActiveVersionBySchemaId(id int) (models.SchemaVersion, error) { func getSchemaByStationName(sn StationName, tenantName string) (models.Schema, error) { exist, station, err := db.GetStationByName(sn.Ext(), tenantName) if err != nil { - serv.Errorf("getSchemaByStation: At station " + sn.external + ": " + err.Error()) + serv.Errorf("[tenant: %v]getSchemaByStation: At station %v: %v", tenantName, sn.external, err.Error()) return models.Schema{}, err } if !exist { - errMsg := "Station " + station.Name + " does not exist" + errMsg := fmt.Sprintf("[tenant: %v]Station %v does not exist", tenantName, station.Name) serv.Warnf("getSchemaByStation: " + errMsg) return models.Schema{}, errors.New(errMsg) } @@ -251,11 +251,11 @@ func getSchemaByStationName(sn StationName, tenantName string) (models.Schema, e exist, schema, err := db.GetSchemaByName(station.SchemaName, station.TenantName) if err != nil { - serv.Errorf("getSchemaByStation: Schema" + station.SchemaName + "at station " + station.Name + err.Error()) + serv.Errorf("[tenant: %v]getSchemaByStation at GetSchemaByName: Schema %v at station %v: %v", tenantName, station.SchemaName, station.Name, err.Error()) return models.Schema{}, err } if !exist { - serv.Warnf("getSchemaByStation: Schema " + station.SchemaName + " does not exist") + serv.Warnf("[tenant: %v]getSchemaByStation: Schema %v does not exist", tenantName, station.SchemaName) return models.Schema{}, ErrNoSchema } @@ -277,7 +277,7 @@ func (sh SchemasHandler) getExtendedSchemaDetailsUpdateAvailable(schemaVersion i return models.ExtendedSchemaDetails{}, err } if !exist { - return models.ExtendedSchemaDetails{}, errors.New("Schema version " + strconv.Itoa(schemaVersion) + " does not exist for schema " + schema.Name) + return models.ExtendedSchemaDetails{}, fmt.Errorf("schema version %v does not exist for schema %v", strconv.Itoa(schemaVersion), schema.Name) } if !usedSchemaVersion.Active { @@ -389,33 +389,33 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { schemaName := strings.ToLower(body.Name) err := validateSchemaName(schemaName) if err != nil { - serv.Warnf("CreateNewSchema: " + err.Error()) + serv.Warnf("CreateNewSchema at validateSchemaName: %v", err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("CreateNewSchema at getUserDetailsFromMiddleware: Schema %v: %v", schemaName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } tenantName := user.TenantName exist, _, err := db.GetSchemaByName(schemaName, tenantName) if err != nil { - serv.Errorf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewSchema at GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } if exist { - errMsg := "Schema with the name " + schemaName + " already exists" - serv.Warnf("CreateNewSchema: " + errMsg) + errMsg := fmt.Sprintf("Schema with the name %v already exists", schemaName) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } schemaType := strings.ToLower(body.Type) err = validateSchemaType(schemaType) if err != nil { - serv.Warnf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema at validateSchemaType: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -423,7 +423,7 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { if schemaType == "protobuf" { err := validateMessageStructName(messageStructName) if err != nil { - serv.Warnf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema at validateMessageStructName: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -432,7 +432,7 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { schemaContent := body.SchemaContent err = validateSchemaContent(schemaContent, schemaType) if err != nil { - serv.Warnf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema at validateSchemaContent: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(SCHEMA_VALIDATION_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -441,7 +441,7 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { if schemaType == "protobuf" { descriptor, err = generateSchemaDescriptor(schemaName, schemaVersionNumber, schemaContent, schemaType) if err != nil { - serv.Warnf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema at generateSchemaDescriptor: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -449,7 +449,7 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { newSchema, rowsUpdated, err := db.InsertNewSchema(schemaName, schemaType, user.Username, tenantName) if err != nil { - serv.Errorf("CreateNewSchema: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewSchema at InsertNewSchema: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -457,15 +457,15 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { if rowsUpdated == 1 { _, _, err = db.InsertNewSchemaVersion(schemaVersionNumber, user.ID, user.Username, schemaContent, newSchema.ID, messageStructName, descriptor, true, tenantName) if err != nil { - serv.Errorf("CreateNewSchema: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewSchema at InsertNewSchemaVersion: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } - message := "Schema " + schemaName + " has been created by " + user.Username + message := fmt.Sprintf("[tenant: %v][user: %v]Schema %v has been created by %v", user.TenantName, user.Username, schemaName, user.Username) serv.Noticef(message) } else { - errMsg := "Schema with the name " + schemaName + " already exists" - serv.Warnf("CreateNewSchema: " + errMsg) + errMsg := fmt.Sprintf("Schema with the name %v already exists", schemaName) + serv.Warnf("[tenant: %v][user: %v]CreateNewSchema: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -473,7 +473,7 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { if len(body.Tags) > 0 { err = AddTagsToEntity(body.Tags, "schema", newSchema.ID, tenantName) if err != nil { - serv.Errorf("CreateNewSchema: Failed creating tag at schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewSchema at AddTagsToEntity: Failed creating tag at schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -495,13 +495,13 @@ func (sh SchemasHandler) CreateNewSchema(c *gin.Context) { func (sh SchemasHandler) GetAllSchemas(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetAllSchemas: " + err.Error()) + serv.Errorf("GetAllSchemas: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } schemas, err := sh.GetAllSchemasDetails(user.TenantName) if err != nil { - serv.Errorf("GetAllSchemas: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetAllSchemas at db.GetAllSchemasDetails: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -523,26 +523,26 @@ func (sh SchemasHandler) GetSchemaDetails(c *gin.Context) { schemaName := strings.ToLower(body.SchemaName) user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetSchemaDetails: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("GetSchemaDetails at getUserDetailsFromMiddleware: Schema %v: %v", schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } exist, schema, err := db.GetSchemaByName(schemaName, user.TenantName) if err != nil { - serv.Errorf("GetSchemaDetails: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetSchemaDetails at GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Schema " + body.SchemaName + " does not exist" - serv.Warnf("GetSchemaDetails: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", body.SchemaName) + serv.Warnf("[tenant: %v][user: %v]GetSchemaDetails: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } schemaDetails, err := sh.getExtendedSchemaDetails(schema, user.TenantName) if err != nil { - serv.Errorf("GetSchemaDetails: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetSchemaDetails at getExtendedSchemaDetails: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -576,7 +576,7 @@ func deleteSchemaFromStations(s *Server, schemaName string, tenantName string) e err = db.RemoveSchemaFromAllUsingStations(schemaName, tenantName) if err != nil { - s.Errorf("deleteSchemaFromStations: Schema " + schemaName + ": " + err.Error()) + s.Errorf("[tenant: %v]deleteSchemaFromStations at RemoveSchemaFromAllUsingStations: Schema %v: %v", tenantName, schemaName, err.Error()) return err } @@ -592,7 +592,7 @@ func (sh SchemasHandler) RemoveSchema(c *gin.Context) { var schemaIds []int user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveSchema: " + err.Error()) + serv.Errorf("RemoveSchema: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -602,7 +602,7 @@ func (sh SchemasHandler) RemoveSchema(c *gin.Context) { schemaName := strings.ToLower(name) exist, schema, err := db.GetSchemaByName(schemaName, tenantName) if err != nil { - serv.Errorf("RemoveSchema: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchema at GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -610,7 +610,7 @@ func (sh SchemasHandler) RemoveSchema(c *gin.Context) { DeleteTagsFromSchema(schema.ID) err := deleteSchemaFromStations(sh.S, schema.Name, tenantName) if err != nil { - serv.Errorf("RemoveSchema: Schema " + schemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchema at deleteSchemaFromStations: Schema %v: %v", user.TenantName, user.Username, schemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -622,12 +622,12 @@ func (sh SchemasHandler) RemoveSchema(c *gin.Context) { if len(schemaIds) > 0 { err := db.FindAndDeleteSchema(schemaIds) if err != nil { - serv.Errorf("RemoveSchema: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchema at FindAndDeleteSchema: Schema %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } for _, name := range body.SchemaNames { - serv.Noticef("Schema " + name + " has been deleted") + serv.Noticef("[tenant: %v][user: %v]Schema %v has been deleted", user.TenantName, user.Username, name) } } @@ -648,20 +648,20 @@ func (sh SchemasHandler) CreateNewVersion(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("CreateNewVersion at getUserDetailsFromMiddleware: Schema %v: %v", body.SchemaName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } schemaName := strings.ToLower(body.SchemaName) exist, schema, err := db.GetSchemaByName(schemaName, user.TenantName) if err != nil { - serv.Errorf("CreateNewVersion: Schema" + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewVersion at GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } if !exist { - errMsg := "Schema " + body.SchemaName + " does not exist" - serv.Warnf("CreateNewVersion: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", body.SchemaName) + serv.Warnf("[tenant: %v][user: %v]CreateNewVersion: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -670,7 +670,7 @@ func (sh SchemasHandler) CreateNewVersion(c *gin.Context) { if schema.Type == "protobuf" { err := validateMessageStructName(messageStructName) if err != nil { - serv.Errorf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewVersion at validateMessageStructName: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -678,14 +678,14 @@ func (sh SchemasHandler) CreateNewVersion(c *gin.Context) { schemaContent := body.SchemaContent err = validateSchemaContent(schemaContent, schema.Type) if err != nil { - serv.Warnf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewVersion at validateSchemaContent: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(SCHEMA_VALIDATION_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } countVersions, err := db.GetShcemaVersionsCount(schema.ID, user.TenantName) if err != nil { - serv.Errorf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewVersion at GetShcemaVersionsCount: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -695,28 +695,27 @@ func (sh SchemasHandler) CreateNewVersion(c *gin.Context) { if schema.Type == "protobuf" { descriptor, err = generateSchemaDescriptor(schemaName, versionNumber, schemaContent, schema.Type) if err != nil { - serv.Warnf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewVersion at generateSchemaDescriptor: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(SCHEMA_VALIDATION_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } } newSchemaVersion, rowsUpdated, err := db.InsertNewSchemaVersion(versionNumber, user.ID, user.Username, schemaContent, schema.ID, messageStructName, descriptor, false, user.TenantName) if err != nil { - serv.Warnf("CreateNewVersion: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateNewVersion at InsertNewSchemaVersion: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(SCHEMA_VALIDATION_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } if rowsUpdated == 1 { - message := "Schema Version " + strconv.Itoa(newSchemaVersion.VersionNumber) + " has been created by " + user.Username - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v]Schema Version %v has been created by %v", user.TenantName, user.Username, strconv.Itoa(newSchemaVersion.VersionNumber), user.Username) } else { - serv.Warnf("CreateNewVersion: Schema " + body.SchemaName + ": Version " + strconv.Itoa(newSchemaVersion.VersionNumber) + " already exists") + serv.Warnf("[tenant: %v][user: %v]CreateNewVersion: Schema %v: Version %v already exists", user.TenantName, user.Username, body.SchemaName, strconv.Itoa(newSchemaVersion.VersionNumber)) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Version already exists"}) return } extedndedSchemaDetails, err := sh.getExtendedSchemaDetails(schema, user.TenantName) if err != nil { - serv.Errorf("CreateNewVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewVersion at getExtendedSchemaDetails: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -741,20 +740,20 @@ func (sh SchemasHandler) RollBackVersion(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("RollBackVersion at getUserDetailsFromMiddleware: Schema %v: %v", body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } schemaName := strings.ToLower(body.SchemaName) exist, schema, err := db.GetSchemaByName(schemaName, user.TenantName) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RollBackVersion at GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } if !exist { - errMsg := "Schema " + body.SchemaName + " does not exist" - serv.Warnf("RollBackVersion: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", body.SchemaName) + serv.Warnf("[tenant: %v][user: %v]RollBackVersion: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -762,34 +761,34 @@ func (sh SchemasHandler) RollBackVersion(c *gin.Context) { schemaVersion := body.VersionNumber exist, _, err = db.GetSchemaVersionByNumberAndID(schemaVersion, schema.ID) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + " version " + strconv.Itoa(schemaVersion) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RollBackVersion at GetSchemaVersionByNumberAndID: Schema %v version %v: %v", user.TenantName, user.Username, body.SchemaName, strconv.Itoa(schemaVersion), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Schema " + body.SchemaName + " version " + strconv.Itoa(schemaVersion) + " does not exist" - serv.Warnf("RollBackVersion: " + errMsg) + errMsg := fmt.Sprintf("Schema %v version %v does not exist", body.SchemaName, strconv.Itoa(schemaVersion)) + serv.Warnf("[tenant: %v][user: %v]RollBackVersion: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } countVersions, err := db.GetShcemaVersionsCount(schema.ID, user.TenantName) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RollBackVersion at GetShcemaVersionsCount: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if countVersions > 1 { err = db.UpdateSchemaActiveVersion(schema.ID, body.VersionNumber) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RollBackVersion at UpdateSchemaActiveVersion: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } } extedndedSchemaDetails, err = sh.getExtendedSchemaDetails(schema, user.TenantName) if err != nil { - serv.Errorf("RollBackVersion: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RollBackVersion at getExtendedSchemaDetails: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -812,7 +811,7 @@ func (sh SchemasHandler) ValidateSchema(c *gin.Context) { schemaType := strings.ToLower(body.SchemaType) err := validateSchemaType(schemaType) if err != nil { - serv.Warnf("ValidateSchema: Schema type " + schemaType + ": " + err.Error()) + serv.Warnf("ValidateSchema at validateSchemaType: Schema type %v: %v", schemaType, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -820,7 +819,7 @@ func (sh SchemasHandler) ValidateSchema(c *gin.Context) { schemaContent := body.SchemaContent err = validateSchemaContent(schemaContent, schemaType) if err != nil { - serv.Warnf("ValidateSchema: Schema type " + schemaType + ": " + err.Error()) + serv.Warnf("ValidateSchema at validateSchemaContent: Schema type %v: %v", schemaType, err.Error()) c.AbortWithStatusJSON(SCHEMA_VALIDATION_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -842,19 +841,19 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { var tenantName string tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema:" + err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect at getTenantNameAndMessage- failed creating Schema: %v", tenantName, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } if err := json.Unmarshal([]byte(message), &csr); err != nil { - s.Errorf("createSchemaDirect - failed creating Schema: %v", err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect at json.Unmarshal - failed creating Schema: %v", tenantName, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } err = validateSchemaContent(csr.SchemaContent, csr.Type) if err != nil { - s.Errorf("createSchemaDirect - Schema is not in the right %v format, error: %v", csr.Type, err.Error()) + s.Warnf("[tenant: %v]createSchemaDirect at validateSchemaContent- Schema is not in the right %v format, error: %v", tenantName, csr.Type, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } @@ -862,7 +861,7 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { if csr.Type == "protobuf" { csr.MessageStructName, err = getProtoMessageStructName(csr.SchemaContent) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema: " + csr.Name + err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect at getProtoMessageStructName- failed creating Schema: %v : %v", tenantName, csr.Name, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) } } @@ -870,7 +869,7 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { if csr.Type == "protobuf" { err := validateMessageStructName(csr.MessageStructName) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema: " + csr.Name + err.Error()) + s.Warnf("[tenant: %v]createSchemaDirect at validateMessageStructName- failed creating Schema: %v : %v", tenantName, csr.Name, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } @@ -878,7 +877,7 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { exist, existedSchema, err := db.GetSchemaByName(csr.Name, tenantName) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema: " + err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect at GetSchemaByName- failed creating Schema: %v : %v", tenantName, csr.Name, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } @@ -887,14 +886,14 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { if existedSchema.Type == csr.Type { err = s.updateSchemaVersion(existedSchema.ID, tenantName, csr) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema: " + csr.Name + err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect at updateSchemaVersion - failed creating Schema: %v : %v", tenantName, csr.Name, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } respondWithRespErr(tenantName, s, reply, err, &resp) return } else { - s.Errorf("createSchemaDirect: Schema " + csr.Name + ": Bad Schema Type") + s.Warnf("[tenant: %v]createSchemaDirect: %v Bad Schema Type", tenantName, csr.Name) badTypeError := fmt.Sprintf("%v already exist with type - %v", csr.Name, existedSchema.Type) respondWithRespErr(tenantName, s, reply, errors.New(badTypeError), &resp) return @@ -903,7 +902,7 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { err = s.createNewSchema(csr, tenantName) if err != nil { - s.Errorf("createSchemaDirect - failed creating Schema:" + csr.Name + err.Error()) + s.Errorf("[tenant: %v]createSchemaDirect - failed creating Schema: %v : %v", tenantName, csr.Name, err.Error()) respondWithRespErr(tenantName, s, reply, err, &resp) return } @@ -915,19 +914,19 @@ func (s *Server) createSchemaDirect(c *client, reply string, msg []byte) { func (s *Server) updateSchemaVersion(schemaID int, tenantName string, newSchemaReq CreateSchemaReq) error { _, user, err := db.GetUserByUsername(newSchemaReq.CreatedByUsername, tenantName) if err != nil { - s.Errorf("updateSchemaVersion: Schema " + newSchemaReq.Name + ": " + err.Error()) + s.Errorf("[tenant: %v]updateSchemaVersion at db.GetUserByUsername: Schema %v: %v", tenantName, newSchemaReq.Name, err.Error()) return err } countVersions, err := db.GetShcemaVersionsCount(schemaID, user.TenantName) if err != nil { - s.Errorf("updateSchemaVersion: Schema " + newSchemaReq.Name + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]updateSchemaVersion at db.GetShcemaVersionsCount: Schema %v: %v", tenantName, user.Username, newSchemaReq.Name, err.Error()) return err } _, currentSchema, err := db.GetSchemaVersionByNumberAndID(countVersions, schemaID) if err != nil { - s.Errorf("updateSchemaVersion: Schema " + newSchemaReq.Name + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]updateSchemaVersion at db.GetSchemaVersionByNumberAndID: Schema %v: %v", tenantName, user.Username, newSchemaReq.Name, err.Error()) return err } @@ -943,22 +942,22 @@ func (s *Server) updateSchemaVersion(schemaID int, tenantName string, newSchemaR if newSchemaReq.Type == "protobuf" { descriptor, err = generateSchemaDescriptor(newSchemaReq.Name, 1, newSchemaReq.SchemaContent, newSchemaReq.Type) if err != nil { - s.Errorf("CreateNewSchemaDirectn: could not create proto descriptor for " + newSchemaReq.Name + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]CreateNewSchemaDirectn: could not create proto descriptor for %v: %v", tenantName, user.Username, newSchemaReq.Name, err.Error()) return err } } newSchemaVersion, rowsUpdated, err := db.InsertNewSchemaVersion(versionNumber, user.ID, user.Username, newSchemaReq.SchemaContent, schemaID, newSchemaReq.MessageStructName, descriptor, false, tenantName) if err != nil { - s.Errorf("updateSchemaVersion: " + err.Error()) + s.Errorf("[tenant: %v][user: %v]updateSchemaVersion: %v", tenantName, user.Username, err.Error()) return err } if rowsUpdated == 1 { - message := "Schema Version " + strconv.Itoa(newSchemaVersion.VersionNumber) + " has been created by " + user.Username + message := fmt.Sprintf("[tenant: %v][user: %v]Schema Version %v has been created by %v", tenantName, user.Username, strconv.Itoa(newSchemaVersion.VersionNumber), user.Username) s.Noticef(message) return nil } else { - s.Errorf("updateSchemaVersion: schema update failed") + s.Errorf("[tenant: %v][user: %v]updateSchemaVersion: schema update failed", tenantName, user.Username) return errors.New("updateSchemaVersion: schema update failed") } @@ -969,7 +968,7 @@ func (s *Server) createNewSchema(newSchemaReq CreateSchemaReq, tenantName string _, user, err := db.GetUserByUsername(newSchemaReq.CreatedByUsername, tenantName) if err != nil { - s.Errorf("createNewSchema: " + err.Error()) + s.Errorf("[tenant: %v]createNewSchema at db.GetUserByUsername: %v", tenantName, err.Error()) return err } @@ -977,21 +976,21 @@ func (s *Server) createNewSchema(newSchemaReq CreateSchemaReq, tenantName string if newSchemaReq.Type == "protobuf" { descriptor, err = generateSchemaDescriptor(newSchemaReq.Name, 1, newSchemaReq.SchemaContent, newSchemaReq.Type) if err != nil { - s.Errorf("CreateNewSchema: Schema " + newSchemaReq.Name + ": " + err.Error()) + s.Errorf("[tenant: %v][user: %v]CreateNewSchema at generateSchemaDescriptor: Schema %v: %v", tenantName, user.Username, newSchemaReq.Name, err.Error()) return err } } newSchema, rowUpdated, err := db.InsertNewSchema(newSchemaReq.Name, newSchemaReq.Type, newSchemaReq.CreatedByUsername, tenantName) if err != nil { - s.Errorf("createNewSchema: " + err.Error()) + s.Errorf("[tenant: %v][user: %v]createNewSchema at db.InsertNewSchema: %v", tenantName, user.Username, err.Error()) return err } if rowUpdated == 1 { _, _, err := db.InsertNewSchemaVersion(schemaVersionNumber, user.ID, user.Username, newSchemaReq.SchemaContent, newSchema.ID, newSchemaReq.MessageStructName, descriptor, true, tenantName) if err != nil { - s.Errorf("createNewSchema: " + err.Error()) + s.Errorf("[tenant: %v][user: %v]createNewSchema at db.InsertNewSchemaVersion: %v", tenantName, user.Username, err.Error()) return err } } diff --git a/server/memphis_handlers_stations.go b/server/memphis_handlers_stations.go index 999b521e4..950ee3447 100644 --- a/server/memphis_handlers_stations.go +++ b/server/memphis_handlers_stations.go @@ -15,6 +15,7 @@ import ( "encoding/hex" "encoding/json" "errors" + "fmt" "memphis/analytics" "memphis/conf" "memphis/db" @@ -161,7 +162,7 @@ func removeStationResources(s *Server, station models.Station, shouldDeleteStrea err = RemoveAllAuditLogsByStation(station.Name, station.TenantName) if err != nil { - serv.Errorf("removeStationResources: Station " + station.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v]removeStationResources: Station %v: %v", station.TenantName, station.Name, err.Error()) } return nil @@ -172,11 +173,11 @@ func (s *Server) createStationDirect(c *client, reply string, msg []byte) { var tenantName string tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("createStationDirect: " + err.Error()) + s.Errorf("[tenant: %v]createStationDirect at getTenantNameAndMessage: %v", tenantName, err.Error()) return } if err := json.Unmarshal([]byte(message), &csr); err != nil { - s.Errorf("createStationDirect: failed creating station: %v", err.Error()) + s.Errorf("[tenant: %v]createStationDirect: failed creating station: %v", tenantName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -193,7 +194,7 @@ func (s *Server) createStationDirectIntern(c *client, memphisGlobalAcc := s.GlobalAccount() stationName, err := StationNameFromStr(csr.StationName) if err != nil { - serv.Warnf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at StationNameFromStr: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -202,7 +203,7 @@ func (s *Server) createStationDirectIntern(c *client, // for NATS compatibility username, tenantId, err := getUserAndTenantIdFromString(csr.Username) if err != nil { - serv.Warnf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at getUserAndTenantIdFromString: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -210,14 +211,14 @@ func (s *Server) createStationDirectIntern(c *client, if tenantId != -1 { exist, t, err := db.GetTenantById(tenantId) if err != nil { - serv.Warnf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at db.GetTenantById: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return } if !exist { - msg := "createStationDirect: Station " + csr.StationName + ": Tenant with id " + strconv.Itoa(tenantId) + " does not exist" - serv.Warnf(msg) + msg := fmt.Sprintf("createStationDirect: Station %v: Tenant with id %v does not exist", csr.StationName, strconv.Itoa(tenantId)) + serv.Warnf("[tenant: %v][user:%v] %v", csr.TenantName, csr.Username, msg) err = errors.New(msg) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) @@ -228,15 +229,15 @@ func (s *Server) createStationDirectIntern(c *client, exist, _, err := db.GetStationByName(stationName.Ext(), csr.TenantName) if err != nil { - serv.Errorf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect at db.GetStationByName: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return } if exist { - errMsg := "Station " + stationName.Ext() + " already exists" - serv.Warnf("createStationDirect: " + errMsg) + errMsg := fmt.Sprintf("Station %v already exists", stationName.Ext()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect: %v", csr.TenantName, csr.Username, errMsg) jsApiResp.Error = NewJSStreamNameExistError() respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -248,14 +249,14 @@ func (s *Server) createStationDirectIntern(c *client, schemaName = strings.ToLower(csr.SchemaName) exist, schema, err := db.GetSchemaByName(schemaName, csr.TenantName) if err != nil { - serv.Errorf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect db.GetSchemaByName: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return } if !exist { - errMsg := "Schema " + csr.SchemaName + " does not exist" - serv.Warnf("createStationDirect: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", csr.SchemaName) + serv.Warnf("[tenant: %v][user:%v]createStationDirect: %v", csr.TenantName, csr.Username, errMsg) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -263,7 +264,7 @@ func (s *Server) createStationDirectIntern(c *client, schemaVersion, err := getActiveVersionBySchemaId(schema.ID) if err != nil { - serv.Errorf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect at getActiveVersionBySchemaId: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -277,7 +278,7 @@ func (s *Server) createStationDirectIntern(c *client, retentionType = strings.ToLower(csr.RetentionType) err = validateRetentionType(retentionType) if err != nil { - serv.Warnf("createStationDirect: " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at validateRetentionType: %v", csr.TenantName, csr.Username, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -293,7 +294,7 @@ func (s *Server) createStationDirectIntern(c *client, storageType = getStationStorageType(csr.StorageType) err = validateStorageType(storageType) if err != nil { - serv.Warnf("createStationDirect: " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at validateStorageType: %v", csr.TenantName, csr.Username, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -305,7 +306,7 @@ func (s *Server) createStationDirectIntern(c *client, replicas := getStationReplicas(csr.Replicas) err = validateReplicas(replicas) if err != nil { - serv.Warnf("createStationDirect: " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at validateReplicas: %v", csr.TenantName, csr.Username, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -319,7 +320,7 @@ func (s *Server) createStationDirectIntern(c *client, err = validateIdempotencyWindow(retentionType, retentionValue, csr.IdempotencyWindow) if err != nil { - serv.Warnf("createStationDirect: " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at validateIdempotencyWindow: %v", csr.TenantName, csr.Username, err.Error()) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -334,12 +335,12 @@ func (s *Server) createStationDirectIntern(c *client, err = s.CreateStream(csr.TenantName, stationName, retentionType, retentionValue, storageType, csr.IdempotencyWindow, replicas, csr.TieredStorageEnabled) if err != nil { if IsNatsErr(err, JSStreamReplicasNotSupportedErr) { - serv.Warnf("CreateStationDirect: Station " + stationName.Ext() + ": Station can not be created, probably since replicas count is larger than the cluster size") + serv.Warnf("[tenant: %v][user:%v]CreateStationDirect: Station %v: Station can not be created, probably since replicas count is larger than the cluster size", csr.TenantName, csr.Username, stationName.Ext()) respondWithErr(globalAccountName, s, reply, errors.New("station can not be created, probably since replicas count is larger than the cluster size")) return } - serv.Errorf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -347,20 +348,20 @@ func (s *Server) createStationDirectIntern(c *client, _, user, err := db.GetUserByUsername(username, csr.TenantName) if err != nil { - serv.Warnf("createStationDirect: " + err.Error()) + serv.Warnf("[tenant: %v][user:%v]createStationDirect at GetUserByUsername: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) } _, rowsUpdated, err := db.InsertNewStation(stationName.Ext(), user.ID, user.Username, retentionType, retentionValue, storageType, replicas, schemaDetails.SchemaName, schemaDetails.VersionNumber, csr.IdempotencyWindow, isNative, csr.DlsConfiguration, csr.TieredStorageEnabled, user.TenantName) if err != nil { if !strings.Contains(err.Error(), "already exist") { - serv.Errorf("createStationDirect: Station " + csr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect at InsertNewStation: Station %v: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) } respondWithErr(globalAccountName, s, reply, err) return } if rowsUpdated > 0 { message := "Station " + stationName.Ext() + " has been created by user " + username - serv.Noticef(message) + serv.Noticef("[tenant:%v][user: %v] %v", user.TenantName, user.Username, message) var auditLogs []interface{} newAuditLog := models.AuditLog{ StationName: stationName.Ext(), @@ -373,7 +374,7 @@ func (s *Server) createStationDirectIntern(c *client, auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("createStationDirect: Station " + csr.StationName + " - create audit logs error: " + err.Error()) + serv.Errorf("[tenant: %v][user:%v]createStationDirect: Station %v - create audit logs error: %v", csr.TenantName, csr.Username, csr.StationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -416,24 +417,24 @@ func (sh StationsHandler) GetStation(c *gin.Context) { stationName := strings.ToLower(body.StationName) user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetStation: " + err.Error()) + serv.Errorf("GetStation at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(stationName, user.TenantName) if err != nil { - serv.Errorf("GetStation: Station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStation at GetStationByName: Station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } else if !exist { - errMsg := "Station " + body.StationName + " does not exist" - serv.Warnf("GetStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", body.StationName) + serv.Warnf("[tenant: %v][user: %v]GetStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } tags, err := tagsHandler.GetTagsByEntityWithID("station", station.ID) if err != nil { - serv.Errorf("GetStation: Station " + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStation: Station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -690,13 +691,13 @@ func (sh StationsHandler) GetAllStationsDetails(shouldGetTags bool, tenantName s func (sh StationsHandler) GetStations(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Warnf("GetStations: Station " + err.Error()) + serv.Warnf("GetStations at getUserDetailsFromMiddleware: Station %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } stations, err := sh.GetStationsDetails(user.TenantName) if err != nil { - serv.Errorf("GetStations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetStations at GetStationsDetails: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -714,13 +715,13 @@ func (sh StationsHandler) GetStations(c *gin.Context) { func (sh StationsHandler) GetAllStations(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetAllStations: " + err.Error()) + serv.Errorf("GetAllStations at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } stations, _, _, err := sh.GetAllStationsDetails(true, user.TenantName) if err != nil { - serv.Errorf("GetAllStations: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetAllStations at GetAllStationsDetails: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -729,36 +730,37 @@ func (sh StationsHandler) GetAllStations(c *gin.Context) { } func (sh StationsHandler) CreateStation(c *gin.Context) { + var body models.CreateStationSchema ok := utils.Validate(c, &body, false, nil) if !ok { return } - stationName, err := StationNameFromStr(body.Name) + user, err := getUserDetailsFromMiddleware(c) + tenantName := user.TenantName if err != nil { - serv.Warnf("CreateStation: Station " + body.Name + ": " + err.Error()) - c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) + serv.Errorf("CreateStation at getUserDetailsFromMiddleware: At station %v: %v", body.Name, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } - user, err := getUserDetailsFromMiddleware(c) - tenantName := user.TenantName + stationName, err := StationNameFromStr(body.Name) if err != nil { - serv.Errorf("CreateStation: At station " + body.Name + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + serv.Warnf("[tenant: %v][user: %v]CreateStation at StationNameFromStr: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) + c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, _, err := db.GetStationByName(stationName.Ext(), tenantName) if err != nil { - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation GetStationByName: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if exist { - errMsg := "Station " + stationName.external + " already exists" - serv.Warnf("CreateStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v already exists", stationName.external) + serv.Warnf("[tenant: %v][user: %v]CreateStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -769,20 +771,20 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { schemaName = strings.ToLower(body.SchemaName) exist, schema, err := db.GetSchemaByName(schemaName, tenantName) if err != nil { - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation at GetSchemaByName: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } if !exist { - errMsg := "Schema " + schemaName + " does not exist" - serv.Warnf("CreateStation: Station " + body.Name + ": " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", schemaName) + serv.Warnf("[tenant: %v][user: %v]CreateStation: Station %v: %v", user.TenantName, user.Username, body.Name, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } schemaVersion, err := getActiveVersionBySchemaId(schema.ID) if err != nil { - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation at getActiveVersionBySchemaId: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } @@ -798,7 +800,7 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { retentionType = strings.ToLower(body.RetentionType) err = validateRetentionType(retentionType) if err != nil { - serv.Warnf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateStation at validateRetentionType: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -811,7 +813,7 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { body.StorageType = getStationStorageType(body.StorageType) err = validateStorageType(body.StorageType) if err != nil { - serv.Warnf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateStation at validateStorageType: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -827,14 +829,14 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { body.Replicas = getStationReplicas(body.Replicas) err = validateReplicas(body.Replicas) if err != nil { - serv.Warnf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateStation at validateReplicas: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } err = validateIdempotencyWindow(body.RetentionType, body.RetentionValue, body.IdempotencyWindow) if err != nil { - serv.Warnf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]CreateStation at validateIdempotencyWindow: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -847,15 +849,15 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { newStation, rowsUpdated, err := db.InsertNewStation(stationName.Ext(), user.ID, user.Username, retentionType, body.RetentionValue, body.StorageType, body.Replicas, schemaName, schemaVersionNumber, body.IdempotencyWindow, true, body.DlsConfiguration, body.TieredStorageEnabled, tenantName) if err != nil { - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation at db.InsertNewStation: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } //rowsUpdated == 0 means that the row already exists if rowsUpdated == 0 { - errMsg := "Station " + newStation.Name + " already exists" - serv.Warnf("CreateStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v already exists", newStation.Name) + serv.Warnf("[tenant: %v][user: %v]CreateStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -863,12 +865,12 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { err = sh.S.CreateStream(tenantName, stationName, retentionType, body.RetentionValue, body.StorageType, body.IdempotencyWindow, body.Replicas, body.TieredStorageEnabled) if err != nil { if IsNatsErr(err, JSInsufficientResourcesErr) { - serv.Warnf("CreateStation: Station " + body.Name + ": Station can not be created, probably since replicas count is larger than the cluster size") + serv.Warnf("[tenant: %v][user: %v]CreateStation: Station %v: Station can not be created, probably since replicas count is larger than the cluster size", user.TenantName, user.Username, body.Name) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Station can not be created, probably since replicas count is larger than the cluster size"}) return } - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation at CreateStream: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -876,13 +878,13 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { if len(body.Tags) > 0 { err = AddTagsToEntity(body.Tags, "station", newStation.ID, newStation.TenantName) if err != nil { - serv.Errorf("CreateStation: : Station " + body.Name + " Failed adding tags: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation: : Station %v Failed adding tags: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } } message := "Station " + stationName.Ext() + " has been created by " + user.Username - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v] %v ", user.TenantName, user.Username, message) var auditLogs []interface{} newAuditLog := models.AuditLog{ StationName: stationName.Ext(), @@ -895,7 +897,7 @@ func (sh StationsHandler) CreateStation(c *gin.Context) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("CreateStation: Station " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateStation at CreateAuditLogs: Station %v: %v", user.TenantName, user.Username, body.Name, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -968,7 +970,7 @@ func (sh StationsHandler) RemoveStation(c *gin.Context) { for _, name := range body.StationNames { stationName, err := StationNameFromStr(name) if err != nil { - serv.Warnf("RemoveStation: Station " + name + ": " + err.Error()) + serv.Warnf("RemoveStation: Station %v: %v", name, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -976,27 +978,27 @@ func (sh StationsHandler) RemoveStation(c *gin.Context) { stationNames = append(stationNames, stationName.Ext()) user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveStation: " + err.Error()) + serv.Errorf("RemoveStation at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("RemoveStation: Station " + stationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveStation at GetStationByName: Station %v: %v", user.TenantName, user.Username, stationName.external, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + name + " does not exist" - serv.Warnf("RemoveStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", name) + serv.Warnf("[tenant: %v][user: %v]RemoveStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } err = removeStationResources(sh.S, station, true) if err != nil { - serv.Errorf("RemoveStation: Station " + stationName.external + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveStation at removeStationResources: Station %v: %v", user.TenantName, user.Username, stationName.external, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1004,13 +1006,13 @@ func (sh StationsHandler) RemoveStation(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveStation: " + err.Error()) + serv.Errorf("RemoveStation at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } err = db.DeleteStationsByNames(stationNames, user.TenantName) if err != nil { - serv.Errorf("RemoveStation: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveStation at DeleteStationsByNames: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1023,17 +1025,17 @@ func (sh StationsHandler) RemoveStation(c *gin.Context) { for _, name := range body.StationNames { stationName, err := StationNameFromStr(name) if err != nil { - serv.Warnf("RemoveStation: Station " + name + ": " + err.Error()) + serv.Warnf("RemoveStation at StationNameFromStr: Station %v: %v", name, err.Error()) continue } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveStation: Station " + name + ": " + err.Error()) + serv.Errorf("RemoveStation at getUserDetailsFromMiddleware: Station %v: %v", name, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) } - serv.Noticef("Station " + stationName.Ext() + " has been deleted by user " + user.Username) + serv.Noticef("[tenant: %v][user: %v]Station %v has been deleted by user %v", user.TenantName, user.Username, stationName.Ext(), user.Username) removeStationUpdate := models.SdkClientsUpdates{ StationName: stationName.Intern(), @@ -1048,12 +1050,12 @@ func (s *Server) removeStationDirect(c *client, reply string, msg []byte) { var dsr destroyStationRequest tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("removeStationDirect: " + err.Error()) + s.Errorf("removeStationDirect at getTenantNameAndMessage: %v", err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if err := json.Unmarshal([]byte(message), &dsr); err != nil { - s.Errorf("removeStationDirect: " + err.Error()) + s.Errorf("[tenant: %v]removeStationDirect at json.Unmarshal: %v", tenantName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -1073,7 +1075,7 @@ func (s *Server) removeStationDirectIntern(c *client, // for NATS compatibility username, tenantId, err := getUserAndTenantIdFromString(dsr.Username) if err != nil { - serv.Warnf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]removeStationDirectIntern at getUserAndTenantIdFromString: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) jsApiResp.Error = NewJSStreamDeleteError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -1081,14 +1083,14 @@ func (s *Server) removeStationDirectIntern(c *client, if tenantId != -1 { exist, t, err := db.GetTenantById(tenantId) if err != nil { - serv.Warnf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]removeStationDirectIntern at GetTenantById: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) jsApiResp.Error = NewJSStreamDeleteError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return } if !exist { - msg := "removeStationDirectIntern: Station " + dsr.StationName + ": Tenant with id " + strconv.Itoa(tenantId) + " does not exist" - serv.Warnf(msg) + msg := fmt.Sprintf("removeStationDirectIntern: Station %v: Tenant with id %v does not exist", dsr.StationName, strconv.Itoa(tenantId)) + serv.Warnf("[tenant: %v][user: %v]: %v", dsr.TenantName, dsr.Username, msg) err = errors.New(msg) jsApiResp.Error = NewJSStreamCreateError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) @@ -1100,7 +1102,7 @@ func (s *Server) removeStationDirectIntern(c *client, stationName, err := StationNameFromStr(dsr.StationName) if err != nil { - serv.Warnf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]removeStationDirectIntern at StationNameFromStr: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) jsApiResp.Error = NewJSStreamDeleteError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return @@ -1108,14 +1110,14 @@ func (s *Server) removeStationDirectIntern(c *client, exist, station, err := db.GetStationByName(stationName.Ext(), dsr.TenantName) if err != nil { - serv.Errorf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]removeStationDirectIntern at GetStationByName: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) jsApiResp.Error = NewJSStreamDeleteError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) return } if !exist { - errMsg := "Station " + station.Name + " does not exist" - serv.Warnf("removeStationDirectIntern: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", station.Name) + serv.Warnf("[tenant: %v][user: %v]removeStationDirectIntern: %v", dsr.TenantName, dsr.Username, errMsg) err := errors.New(errMsg) jsApiResp.Error = NewJSStreamDeleteError(err) respondWithErrOrJsApiRespWithEcho(!isNative, c, memphisGlobalAcc, _EMPTY_, reply, _EMPTY_, jsApiResp, err) @@ -1124,26 +1126,26 @@ func (s *Server) removeStationDirectIntern(c *client, err = removeStationResources(s, station, shouldDeleteStream) if err != nil { - serv.Errorf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]removeStationDirectIntern at removeStationResources: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } err = db.DeleteStation(station.Name, station.TenantName) if err != nil { - serv.Errorf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]removeStationDirectIntern at DeleteStation: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } _, user, err := db.GetUserByUsername(dsr.Username, dsr.TenantName) if err != nil { - serv.Errorf("removeStationDirectIntern: Station " + dsr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]removeStationDirectIntern at GetUserByUsername: Station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } message := "Station " + stationName.Ext() + " has been deleted by user " + dsr.Username - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v] %v ", user.TenantName, user.Username, message) if isNative { var auditLogs []interface{} newAuditLog := models.AuditLog{ @@ -1157,7 +1159,7 @@ func (s *Server) removeStationDirectIntern(c *client, auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Warnf("removeStationDirectIntern: Station " + stationName.Ext() + " - create audit logs error: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]removeStationDirectIntern: Station %v - create audit logs error: %v", dsr.TenantName, dsr.Username, stationName.Ext(), err.Error()) } } @@ -1232,14 +1234,14 @@ func (sh StationsHandler) GetPoisonMessageJourney(c *gin.Context) { } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetPoisonMessageJourney: " + err.Error()) + serv.Errorf("GetPoisonMessageJourney at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } poisonMsgsHandler := PoisonMessagesHandler{S: sh.S} poisonMessage, err := poisonMsgsHandler.GetDlsMessageDetailsById(body.MessageId, "poison", user.TenantName) if err != nil { - serv.Errorf("GetPoisonMessageJourney: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetPoisonMessageJourney at GetDlsMessageDetailsById: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1261,7 +1263,7 @@ func (sh StationsHandler) DropDlsMessages(c *gin.Context) { err := db.DropDlsMessages(body.DlsMessageIds) if err != nil { - serv.Errorf("DropDlsMessages: " + err.Error()) + serv.Errorf("DropDlsMessages at db.DropDlsMessages: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1284,7 +1286,7 @@ func (sh StationsHandler) ResendPoisonMessages(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("ResendPoisonMessages: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("ResendPoisonMessages at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -1292,14 +1294,14 @@ func (sh StationsHandler) ResendPoisonMessages(c *gin.Context) { stationName := strings.ToLower(body.StationName) exist, station, err := db.GetStationByName(stationName, user.TenantName) if err != nil { - serv.Errorf("ResendPoisonMessages: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]ResendPoisonMessages at GetStationByName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + stationName + " does not exist" - serv.Warnf("ResendPoisonMessages: %s", errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", stationName) + serv.Warnf("[tenant: %v][user: %v]ResendPoisonMessages at GetStationByName: %s", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -1307,7 +1309,7 @@ func (sh StationsHandler) ResendPoisonMessages(c *gin.Context) { for _, id := range body.PoisonMessageIds { _, dlsMsg, err := db.GetDlsMessageById(id) if err != nil { - serv.Errorf("ResendPoisonMessages: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]ResendPoisonMessages at db.GetDlsMessageById: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1322,20 +1324,20 @@ func (sh StationsHandler) ResendPoisonMessages(c *gin.Context) { headers, err := json.Marshal(headersJson) if err != nil { - serv.Errorf("ResendPoisonMessages: Poisoned consumer group: " + cgName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]ResendPoisonMessages at json.Marshal: Poisoned consumer group: %v: %v", user.TenantName, user.Username, cgName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } data, err := hex.DecodeString(dlsMsg.MessageDetails.Data) if err != nil { - serv.Errorf("ResendPoisonMessages: Poisoned consumer group: " + cgName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]ResendPoisonMessages at DecodeString: Poisoned consumer group: %v: %v", user.TenantName, user.Username, cgName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } err = sh.S.ResendPoisonMessage(station.TenantName, "$memphis_dls_"+replaceDelimiters(stationName)+"_"+replaceDelimiters(cgName), []byte(data), headers) if err != nil { - serv.Errorf("ResendPoisonMessages: Poisoned consumer group: " + cgName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]ResendPoisonMessages at ResendPoisonMessage: Poisoned consumer group: %v: %v", user.TenantName, user.Username, cgName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1362,7 +1364,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetMessageDetails: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("GetMessageDetails at getUserDetailsFromMiddlewares: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -1371,7 +1373,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { if body.IsDls { dlsMessage, err := poisonMsgsHandler.GetDlsMessageDetailsById(body.MessageId, body.DlsType, user.TenantName) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetDlsMessageDetailsById: Message ID: %v :%v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1382,21 +1384,21 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Warnf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]GetMessageDetails at StationNameFromStr: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetStationByName: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + stationName.external + " does not exist" - serv.Warnf("GetMessageDetails: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", stationName.external) + serv.Warnf("[tenant: %v][user: %v]GetMessageDetails: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -1407,7 +1409,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "The message was not found since it had probably already been deleted"}) return } - serv.Errorf("GetMessageDetails: Message ID: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetMessage: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1416,7 +1418,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { if sm.Header != nil { headersJson, err = DecodeHeader(sm.Header) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at DecodeHeader: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1458,7 +1460,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { connectionIdHeader = headersJson["connectionId"] producedByHeader = strings.ToLower(headersJson["producedBy"]) if connectionIdHeader == "" || producedByHeader == "" { - serv.Warnf("GetMessageDetails: missing mandatory message headers, please upgrade the SDK version you are using") + serv.Warnf("[tenant: %v][user: %v]GetMessageDetails: missing mandatory message headers, please upgrade the SDK version you are using", user.TenantName, user.Username) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "missing mandatory message headers, please upgrade the SDK version you are using"}) return } @@ -1470,7 +1472,7 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { if station.IsNative { poisonedCgs, err = GetPoisonedCgsByMessage(station, int(sm.Sequence)) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetPoisonedCgsByMessage: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1478,14 +1480,14 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { for i, cg := range poisonedCgs { cgInfo, err := sh.S.GetCgInfo(station.TenantName, stationName, cg.CgName) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetCgInfo: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } cgMembers, err := GetConsumerGroupMembers(cg.CgName, station) if err != nil { - serv.Errorf("GetMessageDetails: Message ID: " + strconv.Itoa(msgId) + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetConsumerGroupMembers: Message ID: %v: %v", user.TenantName, user.Username, strconv.Itoa(msgId), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1507,20 +1509,20 @@ func (sh StationsHandler) GetMessageDetails(c *gin.Context) { exist, producer, err := db.GetProducerByStationIDAndUsername(producedByHeader, station.ID, connectionId) if err != nil { - serv.Errorf("GetMessageDetails: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetProducerByStationIDAndUsername: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { errMsg := "Some parts of the message data are missing, probably the message/the station have been deleted" - serv.Warnf("GetMessageDetails: " + errMsg) + serv.Warnf("[tenant: %v][user: %v]GetMessageDetails: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } _, conn, err := db.GetConnectionByID(connectionId) if err != nil { - serv.Errorf("GetMessageDetails: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetMessageDetails at GetConnectionByID: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -1556,7 +1558,7 @@ func (sh StationsHandler) UseSchema(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("UseSchema at getUserDetailsFromMiddleware: Schema %v: %v", body.SchemaName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -1565,20 +1567,20 @@ func (sh StationsHandler) UseSchema(c *gin.Context) { schemaName := strings.ToLower(body.SchemaName) exist, schema, err := db.GetSchemaByName(schemaName, tenantName) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at GetSchemaByName: Schema %v :%v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server Error"}) return } if !exist { - errMsg := "Schema " + schemaName + " does not exist" - serv.Warnf("UseSchema: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", schemaName) + serv.Warnf("[tenant: %v][user: %v]UseSchema: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } schemaVersion, err := getActiveVersionBySchemaId(schema.ID) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at getActiveVersionBySchemaId: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } @@ -1593,33 +1595,33 @@ func (sh StationsHandler) UseSchema(c *gin.Context) { for _, stationName := range body.StationNames { stationName, err := StationNameFromStr(stationName) if err != nil { - serv.Warnf("UseSchema: Schema " + body.SchemaName + " at station " + stationName.Ext() + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]UseSchema at StationNameFromStr: Schema %v at station %v : %v", user.TenantName, user.Username, body.SchemaName, stationName.Ext(), err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(stationName.Ext(), tenantName) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + " at station " + stationName.Ext() + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at GetStationByName: Schema %v at station %v : %v", user.TenantName, user.Username, body.SchemaName, stationName.Ext(), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + station.Name + " does not exist" - serv.Warnf("UseSchema: Schema " + body.SchemaName + ": " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", station.Name) + serv.Warnf("[tenant: %v][user: %v]UseSchema at GetStationByName: Schema %v: %v", user.TenantName, user.Username, body.SchemaName, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } err = db.AttachSchemaToStation(stationName.Ext(), schemaName, schemaVersion.VersionNumber, station.TenantName) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + " at station " + stationName.Ext() + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at AttachSchemaToStation: Schema %v at station %v : %v", user.TenantName, user.Username, body.SchemaName, stationName.Ext(), err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } message := "Schema " + schemaName + " has been attached to station " + stationName.Ext() + " by user " + user.Username - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v] %v ", user.TenantName, user.Username, message) var auditLogs []interface{} newAuditLog := models.AuditLog{ @@ -1633,12 +1635,12 @@ func (sh StationsHandler) UseSchema(c *gin.Context) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + " at station " + stationName.Ext() + " - create audit logs: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at CreateAuditLogs: Schema %v at station %v - create audit logs: %v", user.TenantName, user.Username, body.SchemaName, stationName.Ext(), err.Error()) } updateContent, err := generateSchemaUpdateInit(schema) if err != nil { - serv.Errorf("UseSchema: Schema " + body.SchemaName + " at station " + stationName.Ext() + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UseSchema at generateSchemaUpdateInit: Schema %v at station %v : %v", user.TenantName, user.Username, body.SchemaName, stationName.Ext(), err.Error()) return } update := models.ProducerSchemaUpdate{ @@ -1668,14 +1670,14 @@ func (s *Server) useSchemaDirect(c *client, reply string, msg []byte) { var asr attachSchemaRequest tenantName, attachSchemaMessage, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("useSchemaDirect: " + err.Error()) + s.Errorf("useSchemaDirect at getTenantNameAndMessage: %v", err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if err := json.Unmarshal([]byte(attachSchemaMessage), &asr); err != nil { - errMsg := "failed attaching schema " + asr.Name + ": " + err.Error() - s.Errorf("useSchemaDirect: At station " + asr.StationName + " " + errMsg) + errMsg := fmt.Sprintf("failed attaching schema %v: %v", asr.Name, err.Error()) + s.Errorf("[tenant: %v]useSchemaDirect: At station %v %v", tenantName, asr.StationName, errMsg) respondWithErr(globalAccountName, s, reply, errors.New(errMsg)) return } @@ -1683,56 +1685,56 @@ func (s *Server) useSchemaDirect(c *client, reply string, msg []byte) { asr.TenantName = tenantName stationName, err := StationNameFromStr(asr.StationName) if err != nil { - serv.Warnf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]useSchemaDirect at StationNameFromStr: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } exist, station, err := db.GetStationByName(stationName.Ext(), asr.TenantName) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at GetStationByName: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if !exist { - errMsg := "Station " + stationName.external + " does not exist" - serv.Warnf("useSchemaDirect: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", stationName.external) + serv.Warnf("[tenant: %v][user: %v]useSchemaDirect: %v", asr.TenantName, asr.Username, errMsg) respondWithErr(globalAccountName, s, reply, errors.New("memphis: "+errMsg)) return } schemaName := strings.ToLower(asr.Name) exist, schema, err := db.GetSchemaByName(schemaName, station.TenantName) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at GetSchemaByName: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if !exist { - errMsg := "Schema " + schemaName + " does not exist" - serv.Warnf("useSchemaDirect: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", schemaName) + serv.Warnf("[tenant: %v][user: %v]useSchemaDirect: %v", asr.TenantName, asr.Username, errMsg) respondWithErr(globalAccountName, s, reply, errors.New(errMsg)) return } schemaVersion, err := getActiveVersionBySchemaId(schema.ID) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at getActiveVersionBySchemaId: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } err = db.AttachSchemaToStation(stationName.Ext(), schemaName, schemaVersion.VersionNumber, station.TenantName) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at db.AttachSchemaToStation: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } - message := "Schema " + schemaName + " has been attached to station " + stationName.Ext() + " by user " + asr.Username - serv.Noticef(message) + message := fmt.Sprintf("Schema %v has been attached to station %v by user %v", schemaName, stationName.Ext(), asr.Username) + serv.Noticef("[tenant: %v][user: %v]: %v", asr.TenantName, asr.Username, message) _, user, err := db.GetUserByUsername(asr.Username, asr.TenantName) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at GetUserByUsername: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -1748,7 +1750,7 @@ func (s *Server) useSchemaDirect(c *client, reply string, msg []byte) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("useSchemaDirect : Schema " + asr.Name + " at station " + asr.StationName + " - create audit logs: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect : Schema %v at station %v - create audit logs %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -1767,7 +1769,7 @@ func (s *Server) useSchemaDirect(c *client, reply string, msg []byte) { updateContent, err := generateSchemaUpdateInit(schema) if err != nil { - serv.Errorf("useSchemaDirect: Schema " + asr.Name + " at station " + asr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]useSchemaDirect at generateSchemaUpdateInit: Schema %v at station %v: %v", asr.TenantName, asr.Username, asr.Name, asr.StationName, err.Error()) return } @@ -1786,7 +1788,7 @@ func removeSchemaFromStation(s *Server, sn StationName, updateDB bool, tenantNam return err } if !exist { - return errors.New("Station " + sn.external + " does not exist") + return fmt.Errorf("station %v does not exist", sn.external) } if updateDB { @@ -1808,13 +1810,13 @@ func (s *Server) removeSchemaFromStationDirect(c *client, reply string, msg []by var dsr detachSchemaRequest tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("removeSchemaFromStationDirect: " + err.Error()) + s.Errorf("removeSchemaFromStationDirect at getTenantNameAndMessage: %v", err.Error()) respondWithErr(globalAccountName, s, reply, err) return } if err := json.Unmarshal([]byte(message), &dsr); err != nil { - s.Errorf("removeSchemaFromStationDirect: failed removing schema at station " + dsr.StationName + ": " + err.Error()) + s.Errorf("[tenant: %v]removeSchemaFromStationDirect at json.Unmarshal: failed removing schema at station %v: %v", tenantName, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -1822,14 +1824,14 @@ func (s *Server) removeSchemaFromStationDirect(c *client, reply string, msg []by dsr.TenantName = tenantName stationName, err := StationNameFromStr(dsr.StationName) if err != nil { - serv.Warnf("removeSchemaFromStationDirect: At station " + dsr.StationName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]removeSchemaFromStationDirec at StationNameFromStrt: At station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } err = removeSchemaFromStation(serv, stationName, true, dsr.TenantName) if err != nil { - serv.Errorf("removeSchemaFromStationDirect: At station " + dsr.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]removeSchemaFromStationDirect at removeSchemaFromStation: At station %v: %v", dsr.TenantName, dsr.Username, dsr.StationName, err.Error()) respondWithErr(globalAccountName, s, reply, err) return } @@ -1851,25 +1853,25 @@ func (sh StationsHandler) RemoveSchemaFromStation(c *gin.Context) { stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Warnf("RemoveSchemaFromStation: At station" + body.StationName + ": " + err.Error()) + serv.Warnf("RemoveSchemaFromStation at StationNameFromStr: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveSchemaFromStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("RemoveSchemaFromStation at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("RemoveSchemaFromStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchemaFromStation at GetStationByName: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + body.StationName + " does not exist" - serv.Warnf("RemoveSchemaFromStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", body.StationName) + serv.Warnf("[tenant: %v][user: %v]RemoveSchemaFromStation at GetStationByName: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -1881,12 +1883,12 @@ func (sh StationsHandler) RemoveSchemaFromStation(c *gin.Context) { err = removeSchemaFromStation(sh.S, stationName, true, tenantName) if err != nil { - serv.Errorf("RemoveSchemaFromStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchemaFromStation: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } - message := "Schema " + station.SchemaName + " has been deleted from station " + stationName.Ext() + " by user " + user.Username - serv.Noticef(message) + message := fmt.Sprintf("Schema %v has been deleted from station %v by user %v", station.SchemaName, stationName.Ext(), user.Username) + serv.Noticef("[tenant: %v][user: %v]: %v", user.TenantName, user.Username, message) var auditLogs []interface{} newAuditLog := models.AuditLog{ StationName: stationName.Intern(), @@ -1899,7 +1901,7 @@ func (sh StationsHandler) RemoveSchemaFromStation(c *gin.Context) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Errorf("RemoveSchemaFromStation: At station" + body.StationName + " - create audit logs error: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveSchemaFromStation: At station %v - create audit logs error: %v", user.TenantName, user.Username, body.StationName, err.Error()) } shouldSendAnalytics, _ := shouldSendAnalytics() @@ -1917,43 +1919,43 @@ func (sh StationsHandler) GetUpdatesForSchemaByStation(c *gin.Context) { return } - stationName, err := StationNameFromStr(body.StationName) + user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Warnf("GetUpdatesForSchemaByStation: At station" + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) + serv.Errorf("GetUpdatesForSchemaByStation at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } - user, err := getUserDetailsFromMiddleware(c) + stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Errorf("GetUpdatesForSchemaByStation: At station" + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + serv.Warnf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation at StationNameFromStr: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) + c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("GetUpdatesForSchemaByStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation at GetStationByName: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + body.StationName + " does not exist" - serv.Warnf("GetUpdatesForSchemaByStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", body.StationName) + serv.Warnf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } exist, schema, err := db.GetSchemaByName(station.SchemaName, station.TenantName) if err != nil { - serv.Errorf("GetUpdatesForSchemaByStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation at GetSchemaByName: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Schema " + station.SchemaName + " does not exist" - serv.Warnf("GetUpdatesForSchemaByStation: " + errMsg) + errMsg := fmt.Sprintf("Schema %v does not exist", station.SchemaName) + serv.Warnf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation at GetSchemaByName: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -1962,7 +1964,7 @@ func (sh StationsHandler) GetUpdatesForSchemaByStation(c *gin.Context) { extedndedSchemaDetails, err := schemasHandler.getExtendedSchemaDetailsUpdateAvailable(station.SchemaVersionNumber, schema, user.TenantName) if err != nil { - serv.Errorf("GetUpdatesForSchemaByStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetUpdatesForSchemaByStation at getExtendedSchemaDetailsUpdateAvailable: At station %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": err.Error()}) return } @@ -1992,29 +1994,29 @@ func (sh StationsHandler) UpdateDlsConfig(c *gin.Context) { return } - stationName, err := StationNameFromStr(body.StationName) + user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Warnf("DlsConfiguration: At station" + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) + serv.Errorf("UpdateDlsConfig at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } - user, err := getUserDetailsFromMiddleware(c) + stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Errorf("UpdateDlsConfig: At station" + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + serv.Warnf("[tenant: %v][user: %v]UpdateDlsConfig at StationNameFromStr: At station, %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) + c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("DlsConfiguration: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateDlsConfig at GetStationByName: At station, %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + body.StationName + " does not exist" - serv.Warnf("DlsConfiguration: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", body.StationName) + serv.Warnf("[tenant: %v][user: %v]UpdateDlsConfig: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -2024,7 +2026,7 @@ func (sh StationsHandler) UpdateDlsConfig(c *gin.Context) { if poisonConfigChanged || schemaverseConfigChanged { err = db.UpdateStationDlsConfig(station.Name, body.Poison, body.Schemaverse, station.TenantName) if err != nil { - serv.Errorf("DlsConfiguration: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateDlsConfig at db.UpdateStationDlsConfig: At station, %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -2048,27 +2050,27 @@ func (sh StationsHandler) PurgeStation(c *gin.Context) { stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Warnf("PurgeStation: station name: " + body.StationName + ": " + err.Error()) + serv.Warnf("PurgeStation: station name at StationNameFromStr: %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveSchemaFromStation: At station" + body.StationName + ": " + err.Error()) + serv.Errorf("PurgeStation at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("PurgeStation: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]PurgeStation at GetStationByName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + stationName.external + " does not exist" - serv.Warnf("PurgeStation: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", stationName.external) + serv.Warnf("[tenant: %v][user: %v]PurgeStation: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -2076,7 +2078,7 @@ func (sh StationsHandler) PurgeStation(c *gin.Context) { if body.PurgeStation { err = sh.S.PurgeStream(station.TenantName, stationName.Intern()) if err != nil && !IsNatsErr(err, JSStreamNotFoundErr) { - serv.Errorf("PurgeStation: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]PurgeStation: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -2085,7 +2087,7 @@ func (sh StationsHandler) PurgeStation(c *gin.Context) { if body.PurgeDls { err := db.PurgeDlsMsgsFromStation(station.ID) if err != nil { - serv.Errorf("PurgeStation dls: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]PurgeStation dls at PurgeDlsMsgsFromStation: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -2105,29 +2107,29 @@ func (sh StationsHandler) RemoveMessages(c *gin.Context) { return } - stationName, err := StationNameFromStr(body.StationName) + user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Warnf("RemoveMessages: station name: " + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) + serv.Errorf("RemoveMessages at getUserDetailsFromMiddleware: At station %v: %v", body.StationName, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } - user, err := getUserDetailsFromMiddleware(c) + stationName, err := StationNameFromStr(body.StationName) if err != nil { - serv.Errorf("RemoveMessages: At station" + body.StationName + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + serv.Warnf("[tenant: %v][user: %v]RemoveMessages at StationNameFromStr: station name: %v: %v", user.TenantName, user.Username, body.StationName, err.Error()) + c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(stationName.Ext(), user.TenantName) if err != nil { - serv.Errorf("RemoveMessages: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveMessages at GetStationByName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { - errMsg := "Station " + stationName.external + " does not exist" - serv.Warnf("RemoveMessages: " + errMsg) + errMsg := fmt.Sprintf("Station %v does not exist", stationName.external) + serv.Warnf("[tenant: %v][user: %v]RemoveMessages at GetStationByName: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -2138,7 +2140,7 @@ func (sh StationsHandler) RemoveMessages(c *gin.Context) { if IsNatsErr(err, JSStreamNotFoundErr) || IsNatsErr(err, JSStreamMsgDeleteFailedF) { continue } - serv.Errorf("RemoveMessages: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveMessages at RemoveMsg: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } diff --git a/server/memphis_handlers_tags.go b/server/memphis_handlers_tags.go index df788a0a3..9c018bcb0 100644 --- a/server/memphis_handlers_tags.go +++ b/server/memphis_handlers_tags.go @@ -13,6 +13,7 @@ package server import ( "errors" + "fmt" "memphis/analytics" "memphis/db" "memphis/models" @@ -90,7 +91,7 @@ func AddTagsToEntity(tags []models.CreateTag, entity_type string, entity_id int, func DeleteTagsFromStation(id int) { err := db.RemoveAllTagsFromEntity("stations", id) if err != nil { - serv.Errorf("DeleteTagsFromStation: Station ID " + strconv.Itoa(id) + ": " + err.Error()) + serv.Errorf("DeleteTagsFromStation: Station ID %v: %v", strconv.Itoa(id), err.Error()) return } } @@ -98,7 +99,7 @@ func DeleteTagsFromStation(id int) { func DeleteTagsFromSchema(id int) { err := db.RemoveAllTagsFromEntity("schemas", id) if err != nil { - serv.Errorf("DeleteTagsFromSchema: Schema ID " + strconv.Itoa(id) + ": " + err.Error()) + serv.Errorf("DeleteTagsFromSchema: Schema ID %v: %v", strconv.Itoa(id), err.Error()) return } } @@ -106,7 +107,7 @@ func DeleteTagsFromSchema(id int) { func DeleteTagsFromUser(id int) { err := db.RemoveAllTagsFromEntity("users", id) if err != nil { - serv.Errorf("DeleteTagsFromUser: User ID " + strconv.Itoa(id) + ": " + err.Error()) + serv.Errorf("DeleteTagsFromUser: User ID %v: %v", strconv.Itoa(id), err.Error()) return } } @@ -121,7 +122,7 @@ func (th TagsHandler) CreateNewTag(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) tenantName := user.TenantName if err != nil { - serv.Errorf("CreateNewTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("CreateNewTag at getUserDetailsFromMiddleware: Tag %v: %v", body.Name, err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -129,13 +130,13 @@ func (th TagsHandler) CreateNewTag(c *gin.Context) { name := strings.ToLower(body.Name) exist, _, err := db.GetTagByName(name, tenantName) if err != nil { - serv.Errorf("CreateNewTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewTag at db.GetTagByName: Tag %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if exist { - errMsg := "Tag with the name " + body.Name + " already exists" - serv.Warnf("CreateNewTag: " + errMsg) + errMsg := fmt.Sprintf("Tag with the name %v already exists", body.Name) + serv.Warnf("[tenant: %v][user: %v]CreateNewTag: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } @@ -150,12 +151,12 @@ func (th TagsHandler) CreateNewTag(c *gin.Context) { userArr := []int{} newTag, err := db.InsertNewTag(name, color, stationArr, schemaArr, userArr, tenantName) if err != nil { - serv.Errorf("CreateNewTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateNewTag at db.InsertNewTag: Tag %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } - message := "New Tag " + newTag.Name + " has been created " + " by user " + user.Username + message := fmt.Sprintf("[tenant: %v][user: %v]New Tag %v has been created ", user.TenantName, user.Username, newTag.Name) serv.Noticef(message) c.IndentedJSON(200, newTag) @@ -167,11 +168,19 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { if !ok { return } + + user, err := getUserDetailsFromMiddleware(c) + if err != nil { + serv.Errorf("RemoveTag at getUserDetailsFromMiddleware: Tag %v: %v", body.Name, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + return + } + name := strings.ToLower(body.Name) entity := strings.ToLower(body.EntityType) - err := validateEntityType(entity) + err = validateEntityType(entity) if err != nil { - serv.Warnf("RemoveTag: Tag " + body.Name + " at " + entity + " " + body.EntityName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]RemoveTag at validateEntityType: Tag %v at %v %v: %v", user.TenantName, user.Username, body.Name, entity, body.EntityName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -179,25 +188,18 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { var stationName string var message string - user, err := getUserDetailsFromMiddleware(c) - if err != nil { - serv.Errorf("RemoveTag: Tag " + body.Name + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) - return - } - tenantName := user.TenantName switch entity { case "station": station_name, err := StationNameFromStr(body.EntityName) if err != nil { - serv.Warnf("RemoveTag: Tag " + body.Name + " at " + entity + " " + body.EntityName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]RemoveTag at StationNameFromStr: Tag %v at %v %v: %v", user.TenantName, user.Username, body.Name, entity, body.EntityName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(station_name.Ext(), tenantName) if err != nil { - serv.Errorf("RemoveTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveTag at GetStationByName: Tag %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -207,12 +209,12 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { } entity_id = station.ID stationName = station_name.Ext() - message = "Tag " + name + " has been deleted from station " + stationName + " by user " + user.Username + message = fmt.Sprintf("Tag %v has been deleted from station %v by user %v", name, stationName, user.Username) case "schema": exist, schema, err := db.GetSchemaByName(body.EntityName, tenantName) if err != nil { - serv.Errorf("RemoveTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveTag at GetSchemaByName: Tag %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -221,7 +223,7 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { return } entity_id = schema.ID - message = "Tag " + name + " has been deleted from schema" + schema.Name + " by user " + user.Username + message = fmt.Sprintf("Tag %v has been deleted from schema %v by user name %v", name, schema.Name, user.Username) // case "user": // exist, user, err := db.GetUserByUsername(body.EntityName) @@ -237,14 +239,14 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { // entity_id = user.ID default: - serv.Warnf("RemoveTag: Tag " + body.Name + " at " + entity + " " + body.EntityName + ": unsupported entity type") + serv.Warnf("[tenant: %v][user: %v]RemoveTag: Tag %v at %v %v: unsupported entity type", user.TenantName, user.Username, body.Name, entity, body.EntityName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Could not remove tag " + body.Name + ", unsupported entity type"}) return } err = db.RemoveTagFromEntity(name, entity, entity_id) if err != nil { - serv.Errorf("RemoveTag: Tag " + body.Name + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveTag: Tag %v: %v", user.TenantName, user.Username, body.Name, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -263,7 +265,7 @@ func (th TagsHandler) RemoveTag(c *gin.Context) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Warnf("RemoveTag: Tag " + body.Name + " at " + entity + " " + body.EntityName + " - create audit logs error: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]RemoveTag: Tag %v at %v %v - create audit logs error: %v", user.TenantName, user.Username, body.Name, entity, body.EntityName, err.Error()) } } @@ -276,18 +278,20 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { if !ok { return } - entity := strings.ToLower(body.EntityType) - err := validateEntityType(entity) - var entity_id int + + user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Warnf("UpdateTagsForEntity: " + entity + " " + body.EntityName + ": " + err.Error()) - c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) + serv.Errorf("UpdateTagsForEntity at getUserDetailsFromMiddleware: %v %v: %v", body.EntityType, body.EntityName, err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } - user, err := getUserDetailsFromMiddleware(c) + + entity := strings.ToLower(body.EntityType) + err = validateEntityType(entity) + var entity_id int if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + serv.Warnf("[tenant: %v][user: %v]UpdateTagsForEntity at validateEntityType: %v %v: %v", user.TenantName, user.Username, entity, body.EntityName, err.Error()) + c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } @@ -298,13 +302,13 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { case "station": station_name, err := StationNameFromStr(body.EntityName) if err != nil { - serv.Warnf("UpdateTagsForEntity: " + entity + " " + body.EntityName + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]UpdateTagsForEntity at StationNameFromStr: %v %v: %v", user.TenantName, user.Username, entity, body.EntityName, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } exist, station, err := db.GetStationByName(station_name.Ext(), tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: Station " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at db.GetStationByName: Station %v: %v", user.TenantName, user.Username, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -318,7 +322,7 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { case "schema": exist, schema, err := db.GetSchemaByName(body.EntityName, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: Schema " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity db.GetSchemaByName: Schema %v: %v", user.TenantName, user.Username, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -343,7 +347,7 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { // entity_id = user.ID default: - serv.Warnf("UpdateTagsForEntity: " + entity + " " + body.EntityName + ": unsupported entity type") + serv.Warnf("[tenant: %v][user: %v]UpdateTagsForEntity: %v %v: unsupproted entity type", user.TenantName, user.Username, entity, body.EntityName) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "Could not remove tags, unsupported entity type"}) return } @@ -354,21 +358,21 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { name := strings.ToLower(tagToAdd.Name) exist, tag, err := db.GetTagByName(name, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at GetTagByName: %v %v: %v", user.TenantName, user.Username, body.EntityType, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if !exist { err = CreateTag(name, body.EntityType, entity_id, tagToAdd.Color, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at CreateTag: %v %v: %v", user.TenantName, user.Username, body.EntityType, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } } else { err = db.InsertEntityToTag(tag.Name, entity, entity_id, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at db.InsertEntityToTag: %v %v: %v", user.TenantName, user.Username, body.EntityType, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -392,7 +396,7 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { auditLogs = append(auditLogs, newAuditLog) err = CreateAuditLogs(auditLogs) if err != nil { - serv.Warnf("UpdateTagsForEntity: " + entity + " " + body.EntityName + " - create audit logs error: " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]UpdateTagsForEntity: %v %v - create audit logs error: %v", user.TenantName, user.Username, entity, body.EntityName, err.Error()) } analyticsEventName = "user-tag-station" @@ -429,7 +433,7 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { analytics.SendEventWithParams(user.TenantName, user.Username, analyticsParams, analyticsEventName) } - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v] %v", user.TenantName, user.Username, message) } } if len(body.TagsToRemove) > 0 { @@ -437,14 +441,14 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { name := strings.ToLower(tagToRemove) exist, tag, err := db.GetTagByName(name, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at GetTagByName: %v %v: %v", user.TenantName, user.Username, body.EntityType, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if exist { err = db.InsertEntityToTag(tag.Name, entity, entity_id, tenantName) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + body.EntityType + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at InsertEntityToTag: %v %v: %v", user.TenantName, user.Username, body.EntityType, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -473,12 +477,12 @@ func (th TagsHandler) UpdateTagsForEntity(c *gin.Context) { message = "Tag " + name + " has been deleted " + "by user " + user.Username } - serv.Noticef(message) + serv.Noticef("[tenant: %v][user: %v] %v", user.TenantName, user.Username, message) } } tags, err := th.GetTagsByEntityWithID(entity, entity_id) if err != nil { - serv.Errorf("UpdateTagsForEntity: " + entity + " " + body.EntityName + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]UpdateTagsForEntity at GetTagsByEntityWithID: %v %v: %v", user.TenantName, user.Username, entity, body.EntityName, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -509,21 +513,23 @@ func (th TagsHandler) GetTags(c *gin.Context) { if !ok { return } + + user, err := getUserDetailsFromMiddleware(c) + if err != nil { + serv.Errorf("GetTags: %v", err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + return + } + entity := strings.ToLower(body.EntityType) if entity != "" { err := validateEntityType(entity) if err != nil { - serv.Warnf("GetTags: " + body.EntityType + ": " + err.Error()) + serv.Warnf("[tenant: %v][user: %v]GetTags at validateEntityType: %v: %v", user.TenantName, user.Username, body.EntityType, err.Error()) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": err.Error()}) return } } - user, err := getUserDetailsFromMiddleware(c) - if err != nil { - serv.Errorf("GetTags: " + err.Error()) - c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) - return - } tags, err := db.GetTagsByEntityType(entity, user.TenantName) if err != nil { @@ -533,7 +539,7 @@ func (th TagsHandler) GetTags(c *gin.Context) { } else { desc = entity } - serv.Errorf("GetTags: " + desc + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetTags at GetTagsByEntityType: %v: %v", user.TenantName, user.Username, desc, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -554,13 +560,13 @@ func (th TagsHandler) GetTags(c *gin.Context) { func (th TagsHandler) GetUsedTags(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetUsedTags: " + err.Error()) + serv.Errorf("GetUsedTags: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } tags, err := db.GetAllUsedTags(user.TenantName) if err != nil { - serv.Errorf("GetUsedTags: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetUsedTags at db.GetAllUsedTags: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } diff --git a/server/memphis_handlers_user_mgmt.go b/server/memphis_handlers_user_mgmt.go index 1d0b29292..9e25e6a10 100644 --- a/server/memphis_handlers_user_mgmt.go +++ b/server/memphis_handlers_user_mgmt.go @@ -14,6 +14,7 @@ package server import ( "encoding/base64" "errors" + "fmt" "memphis/analytics" "memphis/db" "memphis/models" @@ -74,7 +75,7 @@ func authenticateUser(username string, password string) (bool, models.User, erro func validateUserType(userType string) error { if userType != "application" && userType != "management" { - return errors.New("user type has to be application/management") + return fmt.Errorf("user type has to be application/management and not %v", userType) } return nil } @@ -279,31 +280,31 @@ func (umh UserMgmtHandler) ChangePassword(c *gin.Context) { username := strings.ToLower(body.Username) user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("EditPassword: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditPassword at getUserDetailsFromMiddleware: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } if username == ROOT_USERNAME && user.UserType != "root" { errMsg := "Change root password: This operation can be done only by the root user" - serv.Warnf("EditPassword: " + errMsg) + serv.Warnf("[tenant: %v][user: %v]EditPassword: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } else if username != strings.ToLower(user.Username) && strings.ToLower(user.Username) != ROOT_USERNAME { errMsg := "Change user password: This operation can be done only by the user or the root user" - serv.Warnf("EditPassword: " + errMsg) + serv.Warnf("[tenant: %v][user: %v]EditPassword: %v", user.TenantName, user.Username, errMsg) c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": errMsg}) return } hashedPwd, err := bcrypt.GenerateFromPassword([]byte(body.Password), bcrypt.MinCost) if err != nil { - serv.Errorf("EditPassword: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditPassword at GenerateFromPassword: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } hashedPwdString := string(hashedPwd) err = db.ChangeUserPassword(username, hashedPwdString, user.TenantName) if err != nil { - serv.Errorf("EditPassword: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditPassword at ChangeUserPassword: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -314,7 +315,7 @@ func (umh UserMgmtHandler) GetSignUpFlag(c *gin.Context) { showSignup := true loggedIn, err := isRootUserLoggedIn() if err != nil { - serv.Errorf("GetSignUpFlag: " + err.Error()) + serv.Errorf("GetSignUpFlag: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -323,7 +324,7 @@ func (umh UserMgmtHandler) GetSignUpFlag(c *gin.Context) { } else { count, err := db.CountAllUsers() if err != nil { - serv.Errorf("GetSignUpFlag: " + err.Error()) + serv.Errorf("GetSignUpFlag: %v", err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -340,6 +341,14 @@ func (umh UserMgmtHandler) GetSignUpFlag(c *gin.Context) { } func (umh UserMgmtHandler) AddUserSignUp(c *gin.Context) { + + user, err := getUserDetailsFromMiddleware(c) + if err != nil { + serv.Errorf("AddUserSignUp: %v", err.Error()) + c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) + return + } + var body models.AddUserSchema ok := utils.Validate(c, &body, false, nil) if !ok { @@ -357,7 +366,7 @@ func (umh UserMgmtHandler) AddUserSignUp(c *gin.Context) { hashedPwd, err := bcrypt.GenerateFromPassword([]byte(body.Password), bcrypt.MinCost) if err != nil { - serv.Errorf("CreateUserSignUp: User " + body.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateUserSignUp at GenerateFromPassword: User %v: %v", user.TenantName, user.Username, body.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -370,15 +379,15 @@ func (umh UserMgmtHandler) AddUserSignUp(c *gin.Context) { c.AbortWithStatusJSON(SHOWABLE_ERROR_STATUS_CODE, gin.H{"message": "User already exist"}) return } - serv.Errorf("CreateUserSignUp error: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateUserSignUp error at db.CreateUser: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } - serv.Noticef("User " + username + " has been signed up") + serv.Noticef("[tenant: %v][user: %v]User %v has been signed up", user.TenantName, user.Username, username) token, refreshToken, err := CreateTokens(newUser) if err != nil { - serv.Errorf("CreateUserSignUp error: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]CreateUserSignUp error at CreateTokens: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -435,14 +444,14 @@ func (umh UserMgmtHandler) AddUserSignUp(c *gin.Context) { func (umh UserMgmtHandler) GetAllUsers(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetAllUsers: " + err.Error()) + serv.Errorf("GetAllUsers: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } users, err := db.GetAllUsers(user.TenantName) if err != nil { - serv.Errorf("GetAllUsers: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetAllUsers: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -474,13 +483,13 @@ func (umh UserMgmtHandler) GetAllUsers(c *gin.Context) { func (umh UserMgmtHandler) GetApplicationUsers(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetApplicationUsers: " + err.Error()) + serv.Errorf("GetApplicationUsers: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } users, err := db.GetAllUsersByTypeAndTenantName([]string{"application"}, user.TenantName) if err != nil { - serv.Errorf("GetApplicationUsers: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetApplicationUsers at GetAllUsersByTypeAndTenantName: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -506,14 +515,14 @@ func (umh UserMgmtHandler) EditAvatar(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("EditAvatar: " + err.Error()) + serv.Errorf("EditAvatar: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } err = db.EditAvatar(user.Username, avatarId, user.TenantName) if err != nil { - serv.Errorf("EditAvatar: User " + user.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditAvatar: User %v: %v", user.TenantName, user.Username, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -537,21 +546,21 @@ func (umh UserMgmtHandler) EditCompanyLogo(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("EditCompanyLogo: " + err.Error()) + serv.Errorf("EditCompanyLogo at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } fileName := "company_logo" + filepath.Ext(file.Filename) if err := c.SaveUploadedFile(&file, fileName); err != nil { - serv.Errorf("EditCompanyLogo: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditCompanyLogo at SaveUploadedFile: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } base64Encoding, err := imageToBase64(fileName) if err != nil { - serv.Errorf("EditCompanyLogo: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditCompanyLogo at imageToBase64: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -560,7 +569,7 @@ func (umh UserMgmtHandler) EditCompanyLogo(c *gin.Context) { err = db.InsertImage("company_logo", base64Encoding, user.TenantName) if err != nil { - serv.Errorf("EditCompanyLogo: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]EditCompanyLogo error insertin image to db: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -571,13 +580,13 @@ func (umh UserMgmtHandler) EditCompanyLogo(c *gin.Context) { func (umh UserMgmtHandler) RemoveCompanyLogo(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("RemoveCompanyLogo: " + err.Error()) + serv.Errorf("RemoveCompanyLogo at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } err = db.DeleteImage("company_logo", user.TenantName) if err != nil { - serv.Errorf("RemoveCompanyLogo: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]RemoveCompanyLogo at deleting from the db: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -588,13 +597,13 @@ func (umh UserMgmtHandler) RemoveCompanyLogo(c *gin.Context) { func (umh UserMgmtHandler) GetCompanyLogo(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetCompanyLogo: " + err.Error()) + serv.Errorf("GetCompanyLogo at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } exist, image, err := db.GetImage("company_logo", user.TenantName) if err != nil { - serv.Errorf("GetCompanyLogo: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetCompanyLogo at db.GetImage: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -619,7 +628,7 @@ func (umh UserMgmtHandler) DoneNextSteps(c *gin.Context) { func (umh UserMgmtHandler) SkipGetStarted(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("SkipGetStarted: " + err.Error()) + serv.Errorf("SkipGetStarted at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -627,7 +636,7 @@ func (umh UserMgmtHandler) SkipGetStarted(c *gin.Context) { username := strings.ToLower(user.Username) err = db.UpdateSkipGetStarted(username, user.TenantName) if err != nil { - serv.Errorf("SkipGetStarted: User " + user.Username + ": " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]SkipGetStarted at UpdateSkipGetStarted: User %v: %v", user.TenantName, user.Username, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -682,7 +691,7 @@ func (umh UserMgmtHandler) GetFilterDetails(c *gin.Context) { user, err := getUserDetailsFromMiddleware(c) if err != nil { - serv.Errorf("GetFilterDetails: " + err.Error()) + serv.Errorf("GetFilterDetails at getUserDetailsFromMiddleware: %v", err.Error()) c.AbortWithStatusJSON(401, gin.H{"message": "Unauthorized"}) return } @@ -691,14 +700,14 @@ func (umh UserMgmtHandler) GetFilterDetails(c *gin.Context) { case "stations": users, err := umh.GetActiveUsers(tenantName) if err != nil { - serv.Errorf("GetFilterDetails: GetActiveUsers: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetFilterDetails: GetActiveUsers: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } tags, err := umh.GetActiveTags(tenantName) if err != nil { - serv.Errorf("GetFilterDetails: GetActiveTags: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetFilterDetails: GetActiveTags: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -709,14 +718,14 @@ func (umh UserMgmtHandler) GetFilterDetails(c *gin.Context) { case "schemaverse": users, err := umh.GetActiveUsers(tenantName) if err != nil { - serv.Errorf("GetFilterDetails: GetActiveUsers: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetFilterDetails: GetActiveUsers: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } tags, err := umh.GetActiveTags(tenantName) if err != nil { - serv.Errorf("GetFilterDetails: GetActiveTags: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetFilterDetails: GetActiveTags: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } @@ -729,7 +738,7 @@ func (umh UserMgmtHandler) GetFilterDetails(c *gin.Context) { logType := []string{"info", "warn", "err"} v, err := serv.Varz(nil) if err != nil { - serv.Errorf("GetFilterDetails: " + err.Error()) + serv.Errorf("[tenant: %v][user: %v]GetFilterDetails: %v", user.TenantName, user.Username, err.Error()) c.AbortWithStatusJSON(500, gin.H{"message": "Server error"}) return } diff --git a/server/memphis_handlers_ws.go b/server/memphis_handlers_ws.go index d7ee4c4f4..a0ca542be 100644 --- a/server/memphis_handlers_ws.go +++ b/server/memphis_handlers_ws.go @@ -97,24 +97,24 @@ func memphisWSLoop(s *Server, subs *concurrentMap[memphisWSReqTenantsToFiller], for tenant, filler := range updateFiller.tenants { acc, err := s.lookupAccount(tenant) if err != nil { - s.Errorf("memphisWSLoop: tenant " + tenant + ": " + err.Error()) + s.Errorf("[tenant: %v]memphisWSLoop at lookupAccount: %v ", tenant, err.Error()) continue } if !acc.SubscriptionInterest(replySubj) { - s.Debugf("removing tenant "+tenant+" ws subscription %s", replySubj) + s.Debugf("removing tenant %v ws subscription %s", tenant, replySubj) deleteTenantFromSub(tenant, subs, k) continue } update, err := filler(tenant) if err != nil { if !IsNatsErr(err, JSStreamNotFoundErr) && !strings.Contains(err.Error(), "not exist") && !strings.Contains(err.Error(), "alphanumeric") { - s.Errorf("memphisWSLoop: tenant " + tenant + ": " + err.Error()) + s.Errorf("[tenant: %v]memphisWSLoop at filler: %v", tenant, err.Error()) } continue } updateRaw, err := json.Marshal(update) if err != nil { - s.Errorf("memphisWSLoop: " + err.Error()) + s.Errorf("[tenant: %v]memphisWSLoop at json.Marshal: %v", tenant, err.Error()) continue } @@ -149,10 +149,10 @@ func (s *Server) createWSRegistrationHandler(h *Handlers) simplifiedMsgHandler { return func(c *client, subj, reply string, msg []byte) { tenantName, message, err := s.getTenantNameAndMessage(msg) if err != nil { - s.Errorf("memphis websocket: " + err.Error()) + s.Errorf("memphis websocket at getTenantNameAndMessage: %v", err.Error()) return } - s.Debugf("memphisWS registration - %s,%s", subj, message) + s.Debugf("[tenant: %v]memphisWS registration - %s,%s", tenantName, subj, message) subscriptions := s.memphis.ws.subscriptions filteredSubj := tokensFromToEnd(subj, 2) trimmedMsg := strings.TrimSuffix(message, "\r\n") @@ -160,7 +160,7 @@ func (s *Server) createWSRegistrationHandler(h *Handlers) simplifiedMsgHandler { case memphisWS_SubscribeMsg: reqFiller, err := memphisWSGetReqFillerFromSubj(s, h, filteredSubj, tenantName) if err != nil { - s.Errorf("memphis websocket: " + err.Error()) + s.Errorf("[tenant: %v]memphis websocket at memphisWSGetReqFillerFromSubj: %v", tenantName, err.Error()) return } if _, ok := subscriptions.Load(filteredSubj); !ok { @@ -168,12 +168,12 @@ func (s *Server) createWSRegistrationHandler(h *Handlers) simplifiedMsgHandler { } else { err := addTenantToSub(tenantName, subscriptions, filteredSubj, reqFiller) if err != nil { - s.Errorf("memphis websocket: " + err.Error()) + s.Errorf("[tenant: %v]memphis websocket: %v", tenantName, err.Error()) } } default: - s.Errorf("memphis websocket: invalid sub/unsub operation") + s.Errorf("[tenant: %v]memphis websocket: invalid sub/unsub operation", tenantName) } type brokerName struct { @@ -184,7 +184,7 @@ func (s *Server) createWSRegistrationHandler(h *Handlers) simplifiedMsgHandler { serverName, err := json.Marshal(broName) if err != nil { - s.Errorf("memphis websocket: " + err.Error()) + s.Errorf("[tenant: %v]memphis websocket at json.Marshal: %v", tenantName, err.Error()) return } s.sendInternalAccountMsgWithEcho(s.GlobalAccount(), reply, serverName) diff --git a/server/memphis_helper.go b/server/memphis_helper.go index ca3725449..ab95e8725 100644 --- a/server/memphis_helper.go +++ b/server/memphis_helper.go @@ -139,7 +139,7 @@ func jsApiRequest[R any](tenantName string, s *Server, subject, kind string, msg break case <-timeout: s.unsubscribeOnAcc(account, sub) - return fmt.Errorf("jsapi request timeout for request type %q on %q", kind, subject) + return fmt.Errorf("[tenant name: %v]jsapi request timeout for request type %q on %q", tenantName, kind, subject) } return json.Unmarshal(rawResp, resp) @@ -242,7 +242,7 @@ func (s *Server) CreateInternalJetStreamResources() { go tryCreateInternalJetStreamResources(s, retentionDur, successCh, false) err := <-successCh if err != nil { - s.Errorf("CreateInternalJetStreamResources: system streams creation failed: " + err.Error()) + s.Errorf("CreateInternalJetStreamResources: system streams creation failed: %v", err.Error()) } } else { s.WaitForLeaderElection() @@ -255,13 +255,13 @@ func (s *Server) CreateInternalJetStreamResources() { s.Warnf("CreateInternalJetStreamResources: system streams creation takes more than a minute") err := <-successCh if err != nil { - s.Warnf("CreateInternalJetStreamResources: " + err.Error()) + s.Warnf("CreateInternalJetStreamResources: %v", err.Error()) continue } ready = true case err := <-successCh: if err != nil { - s.Warnf("CreateInternalJetStreamResources: " + err.Error()) + s.Warnf("CreateInternalJetStreamResources: %v", err.Error()) <-timeout.C continue } @@ -914,7 +914,7 @@ func (s *Server) memphisGetMsgs(tenantName, filterSubj, streamName string, start intTs, err := strconv.Atoi(rawTs) if err != nil { - s.Errorf("memphisGetMsgs: " + err.Error()) + s.Errorf("memphisGetMsgs: %v", err.Error()) return } @@ -1313,6 +1313,10 @@ func GetMemphisOpts(opts Options, reload bool) (*Account, Options, error) { if err != nil { return &Account{}, Options{}, err } +<<<<<<< HEAD + +======= +>>>>>>> d6b17c619eec270e5aced1f2e47d546aba7cd7e7 tenantsId := map[string]int{} appUsers := []*User{} accounts := []*Account{} diff --git a/server/memphis_jsapi_wrappers.go b/server/memphis_jsapi_wrappers.go index 41f2270ce..584489139 100644 --- a/server/memphis_jsapi_wrappers.go +++ b/server/memphis_jsapi_wrappers.go @@ -51,7 +51,7 @@ func memphisCreateNonNativeStationIfNeeded(s *Server, reply string, cfg StreamCo go func(msg []byte, respCh chan *JSApiStreamCreateResponse) { var resp JSApiStreamCreateResponse if err := json.Unmarshal(msg, &resp); err != nil { - s.Errorf("memphisJSApiWrapStreamCreate: unmarshal error: " + err.Error()) + s.Errorf("memphisJSApiWrapStreamCreate: unmarshal error: %v", err.Error()) respCh <- nil return } @@ -59,7 +59,7 @@ func memphisCreateNonNativeStationIfNeeded(s *Server, reply string, cfg StreamCo }(copyBytes(msg), respCh) }) if err != nil { - s.Errorf("memphisJSApiWrapStreamCreate: failed to subscribe: " + err.Error()) + s.Errorf("memphisJSApiWrapStreamCreate: failed to subscribe: %v", err.Error()) return } @@ -121,7 +121,7 @@ func memphisDeleteNonNativeStationIfNeeded(s *Server, reply string, streamName s go func(msg []byte, respCh chan *JSApiStreamDeleteResponse) { var resp JSApiStreamDeleteResponse if err := json.Unmarshal(msg, &resp); err != nil { - s.Errorf("memphisJSApiWrapStreamDelete: unmarshal error: " + err.Error()) + s.Errorf("memphisJSApiWrapStreamDelete: unmarshal error: %v", err.Error()) respCh <- nil return } @@ -129,7 +129,7 @@ func memphisDeleteNonNativeStationIfNeeded(s *Server, reply string, streamName s }(copyBytes(msg), respCh) }) if err != nil { - s.Errorf("memphisJSApiWrapStreamDelete: failed to subscribe: " + err.Error()) + s.Errorf("memphisJSApiWrapStreamDelete: failed to subscribe: %v", err.Error()) return } diff --git a/server/memphis_sdk_handlers.go b/server/memphis_sdk_handlers.go index 1a3f02941..89d573ffe 100644 --- a/server/memphis_sdk_handlers.go +++ b/server/memphis_sdk_handlers.go @@ -272,12 +272,12 @@ func respondWithErrOrJsApiRespWithEcho[T any](jsApi bool, c *client, acc *Accoun func respondWithResp(tenantName string, s *Server, replySubject string, resp memphisResponse) { account, err := s.lookupAccount(tenantName) if err != nil { - serv.Errorf("respondWithResp: " + err.Error()) + serv.Errorf("[tenant: %v]respondWithResp at lookupAccount: %v", tenantName, err.Error()) return } rawResp, err := json.Marshal(resp) if err != nil { - serv.Errorf("respondWithResp: response marshal error: " + err.Error()) + serv.Errorf("[tenant: %v]respondWithResp: response marshal error: %v", tenantName, err.Error()) return } s.sendInternalAccountMsgWithEcho(account, replySubject, rawResp) @@ -292,7 +292,7 @@ func (s *Server) SendUpdateToClients(sdkClientsUpdate models.SdkClientsUpdates) subject := sdkClientsUpdatesSubject msg, err := json.Marshal(sdkClientsUpdate) if err != nil { - s.Errorf("SendUpdateToClients: " + err.Error()) + s.Errorf("SendUpdateToClients: %v", err.Error()) return } s.sendInternalAccountMsg(s.GlobalAccount(), subject, msg) diff --git a/server/memphis_zombie_resources.go b/server/memphis_zombie_resources.go index 57c47b3b5..e8967b5d2 100644 --- a/server/memphis_zombie_resources.go +++ b/server/memphis_zombie_resources.go @@ -24,21 +24,21 @@ import ( func (srv *Server) removeStaleStations() { stations, err := db.GetActiveStations() if err != nil { - srv.Errorf("removeStaleStations: " + err.Error()) + srv.Errorf("removeStaleStations: %v", err.Error()) } for _, s := range stations { go func(srv *Server, s models.Station) { stationName, _ := StationNameFromStr(s.Name) _, err = srv.memphisStreamInfo(s.TenantName, stationName.Intern()) if IsNatsErr(err, JSStreamNotFoundErr) { - srv.Warnf("removeStaleStations: Found zombie station to delete: " + s.Name) + srv.Warnf("[tenant: %v]removeStaleStations: Found zombie station to delete: %v", s.TenantName, s.Name) err := removeStationResources(srv, s, false) if err != nil { - srv.Errorf("removeStaleStations: " + err.Error()) + srv.Errorf("[tenant: %v]removeStaleStations at removeStationResources: %v", s.TenantName, err.Error()) } err = db.DeleteStation(s.Name, s.TenantName) if err != nil { - srv.Errorf("removeStaleStations: " + err.Error()) + srv.Errorf("[tenant: %v]removeStaleStations at DeleteStation: %v", s.TenantName, err.Error()) } } }(srv, s) @@ -49,19 +49,19 @@ func updateSystemLiveness() { stationsHandler := StationsHandler{S: serv} stations, totalMessages, totalDlsMsgs, err := stationsHandler.GetAllStationsDetails(false, "") if err != nil { - serv.Warnf("updateSystemLiveness: " + err.Error()) + serv.Warnf("updateSystemLiveness: %v", err.Error()) return } producersCount, err := db.CountAllActiveProudcers() if err != nil { - serv.Warnf("updateSystemLiveness: " + err.Error()) + serv.Warnf("updateSystemLiveness: %v", err.Error()) return } consumersCount, err := db.CountAllActiveConsumers() if err != nil { - serv.Warnf("updateSystemLiveness: " + err.Error()) + serv.Warnf("updateSystemLiveness: %v", err.Error()) return } @@ -86,7 +86,7 @@ func updateSystemLiveness() { Value: strconv.Itoa(int(consumersCount)), } analyticsParams := []analytics.EventParam{param1, param2, param3, param4, param5} - analytics.SendEventWithParams("", "", analyticsParams, "system-is-up") + analytics.SendEventWithParams("", "", analyticsParams, "system-is-up") } func aggregateClientConnections(s *Server) (map[string]string, error) { @@ -98,7 +98,7 @@ func aggregateClientConnections(s *Server) (map[string]string, error) { var incomingConnIds map[string]string err := json.Unmarshal(msg, &incomingConnIds) if err != nil { - s.Errorf("aggregateClientConnections: " + err.Error()) + s.Errorf("aggregateClientConnections: %v", err.Error()) return } @@ -124,7 +124,7 @@ func aggregateClientConnections(s *Server) (map[string]string, error) { func killFunc(s *Server) { connections, err := db.GetActiveConnections() if err != nil { - serv.Errorf("killFunc: GetActiveConnections: " + err.Error()) + serv.Errorf("killFunc: GetActiveConnections: %v", err.Error()) return } @@ -132,7 +132,7 @@ func killFunc(s *Server) { var zombieConnections []string clientConnectionIds, err := aggregateClientConnections(s) if err != nil { - serv.Errorf("killFunc: aggregateClientConnections: " + err.Error()) + serv.Errorf("killFunc: aggregateClientConnections: %v", err.Error()) return } for _, conn := range connections { @@ -147,15 +147,15 @@ func killFunc(s *Server) { serv.Warnf("Zombie connections found, killing") err := db.KillRelevantConnections(zombieConnections) if err != nil { - serv.Errorf("killFunc: killRelevantConnections: " + err.Error()) + serv.Errorf("killFunc: killRelevantConnections: %v", err.Error()) } err = db.KillProducersByConnections(zombieConnections) if err != nil { - serv.Errorf("killFunc: killProducersByConnections: " + err.Error()) + serv.Errorf("killFunc: killProducersByConnections: %v", err.Error()) } err = db.KillConsumersByConnections(zombieConnections) if err != nil { - serv.Errorf("killFunc: killConsumersByConnections: " + err.Error()) + serv.Errorf("killFunc: killConsumersByConnections: %v", err.Error()) } } } diff --git a/server/server.go b/server/server.go index 945fc5035..f9ee173df 100644 --- a/server/server.go +++ b/server/server.go @@ -347,7 +347,7 @@ func NewServer(opts *Options) (*Server, db.MetadataStorage, error) { err = EncryptOldUnencryptedValues() if err != nil { - err = errors.New("Failed encrypt old unencrypted values: " + err.Error()) + err = fmt.Errorf("Failed encrypt old unencrypted values: %v", err.Error()) return nil, db.MetadataStorage{}, err }