From ed3eabc64de8960175b6fd2515e36a411cbf3138 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sat, 24 Oct 2020 20:38:11 +0200 Subject: [PATCH] rename file worker.go -> handler.go, update tribalwarshelp/shared package, small refactor --- cron/cron.go | 26 +++++--- cron/{worker.go => handler.go} | 90 ++++++++++----------------- discord/coords_translation.go | 4 +- discord/observations.go | 6 +- discord/public_commands.go | 3 +- go.mod | 2 +- go.sum | 4 +- utils/language_tag_from_world_name.go | 12 ---- 8 files changed, 62 insertions(+), 85 deletions(-) rename cron/{worker.go => handler.go} (75%) delete mode 100644 utils/language_tag_from_world_name.go diff --git a/cron/cron.go b/cron/cron.go index dcf7f9a..a5cf2de 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -3,6 +3,8 @@ package cron import ( "time" + sharedutils "github.com/tribalwarshelp/shared/utils" + "github.com/sirupsen/logrus" "github.com/tribalwarshelp/golang-sdk/sdk" "github.com/tribalwarshelp/shared/mode" @@ -27,7 +29,7 @@ type Config struct { } func Attach(c *cron.Cron, cfg Config) { - w := &worker{ + h := &handler{ lastEnnoblementAt: make(map[string]time.Time), serverRepo: cfg.ServerRepo, observationRepo: cfg.ObservationRepo, @@ -36,16 +38,22 @@ func Attach(c *cron.Cron, cfg Config) { api: cfg.API, status: cfg.Status, } - c.AddFunc("@every 1m", w.checkEnnoblements) - c.AddFunc("@every 30m", w.checkBotServers) - c.AddFunc("@every 2h10m", w.deleteClosedTribalWarsServers) - c.AddFunc("@every 2h", w.updateBotStatus) + checkEnnoblements := sharedutils.TrackExecutionTime(log, h.checkEnnoblements, "checkEnnoblements") + checkBotServers := sharedutils.TrackExecutionTime(log, h.checkBotServers, "checkBotServers") + deleteClosedTribalWarsServers := sharedutils.TrackExecutionTime(log, + h.deleteClosedTribalWarsServers, + "deleteClosedTribalWarsServers") + updateBotStatus := sharedutils.TrackExecutionTime(log, h.updateBotStatus, "updateBotStatus") + c.AddFunc("@every 1m", checkEnnoblements) + c.AddFunc("@every 30m", checkBotServers) + c.AddFunc("@every 2h10m", deleteClosedTribalWarsServers) + c.AddFunc("@every 2h", updateBotStatus) go func() { - w.checkBotServers() - w.deleteClosedTribalWarsServers() - w.updateBotStatus() + checkBotServers() + deleteClosedTribalWarsServers() + updateBotStatus() if mode.Get() == mode.DevelopmentMode { - w.checkEnnoblements() + checkEnnoblements() } }() } diff --git a/cron/worker.go b/cron/handler.go similarity index 75% rename from cron/worker.go rename to cron/handler.go index d8e4428..b4f5412 100644 --- a/cron/worker.go +++ b/cron/handler.go @@ -5,6 +5,8 @@ import ( "fmt" "time" + sharedutils "github.com/tribalwarshelp/shared/utils" + "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/tribalwarshelp/dcbot/message" @@ -21,7 +23,7 @@ import ( "github.com/tribalwarshelp/golang-sdk/sdk" ) -type worker struct { +type handler struct { lastEnnoblementAt map[string]time.Time serverRepo server.Repository observationRepo observation.Repository @@ -31,7 +33,7 @@ type worker struct { status string } -func (w *worker) loadEnnoblements(servers []string) (map[string]ennoblements, error) { +func (h *handler) loadEnnoblements(servers []string) (map[string]ennoblements, error) { m := make(map[string]ennoblements) if len(servers) == 0 { @@ -61,12 +63,12 @@ func (w *worker) loadEnnoblements(servers []string) (map[string]ennoblements, er resp := make(map[string]ennoblements) - if err := w.api.Post(fmt.Sprintf(`query { %s }`, query), &resp); err != nil { + if err := h.api.Post(fmt.Sprintf(`query { %s }`, query), &resp); err != nil { return m, errors.Wrap(err, "loadEnnoblements") } for server, ennoblements := range resp { - lastEnnoblementAt, ok := w.lastEnnoblementAt[server] + lastEnnoblementAt, ok := h.lastEnnoblementAt[server] if !ok { lastEnnoblementAt = time.Now().Add(-1 * time.Minute) } @@ -80,24 +82,28 @@ func (w *worker) loadEnnoblements(servers []string) (map[string]ennoblements, er if lastEnnoblement != nil { lastEnnoblementAt = lastEnnoblement.EnnobledAt } - w.lastEnnoblementAt[server] = lastEnnoblementAt + h.lastEnnoblementAt[server] = lastEnnoblementAt } return m, nil } -func (w *worker) loadLangVersions(servers []string) ([]*shared_models.LangVersion, error) { +func (h *handler) loadLangVersions(servers []string) ([]*shared_models.LangVersion, error) { languageTags := []shared_models.LanguageTag{} cache := make(map[shared_models.LanguageTag]bool) for _, server := range servers { - languageTag := utils.LanguageTagFromServerKey(server) + languageTag := sharedutils.LanguageTagFromServerKey(server) if languageTag.IsValid() && !cache[languageTag] { cache[languageTag] = true languageTags = append(languageTags, languageTag) } } - langVersionList, err := w.api.LangVersions.Browse(&shared_models.LangVersionFilter{ + if len(languageTags) == 0 { + return []*shared_models.LangVersion{}, nil + } + + langVersionList, err := h.api.LangVersions.Browse(&shared_models.LangVersionFilter{ Tag: languageTags, }) if err != nil { @@ -107,21 +113,17 @@ func (w *worker) loadLangVersions(servers []string) ([]*shared_models.LangVersio return langVersionList.Items, nil } -func (w *worker) checkEnnoblements() { - start := time.Now() - log. - Infoln("checkEnnoblements: called") - - servers, err := w.observationRepo.FetchServers(context.Background()) +func (h *handler) checkEnnoblements() { + servers, err := h.observationRepo.FetchServers(context.Background()) if err != nil { log.Errorln("checkEnnoblements:", err.Error()) return } log. WithField("servers", servers). - Info("checkEnnoblements: Loaded servers") + Info("checkEnnoblements: loaded servers") - groups, total, err := w.groupRepo.Fetch(context.Background(), nil) + groups, total, err := h.groupRepo.Fetch(context.Background(), nil) if err != nil { log.Errorln("checkEnnoblements:", err.Error()) return @@ -130,7 +132,7 @@ func (w *worker) checkEnnoblements() { WithField("numberOfGroups", total). Info("checkEnnoblements: Loaded groups") - langVersions, err := w.loadLangVersions(servers) + langVersions, err := h.loadLangVersions(servers) if err != nil { log.Errorln("checkEnnoblements:", err) return @@ -139,7 +141,7 @@ func (w *worker) checkEnnoblements() { WithField("numberOfLangVersions", len(langVersions)). Info("checkEnnoblements: Loaded lang versions") - ennoblementsByServerKey, err := w.loadEnnoblements(servers) + ennoblementsByServerKey, err := h.loadEnnoblements(servers) if err != nil { log.Errorln("checkEnnoblements:", err) } @@ -154,7 +156,7 @@ func (w *worker) checkEnnoblements() { conqueredVillagesMsg := &discord.MessageEmbed{} for _, observation := range group.Observations { ennoblements, ok := ennoblementsByServerKey[observation.Server] - langVersion := utils.FindLangVersionByTag(langVersions, utils.LanguageTagFromServerKey(observation.Server)) + langVersion := utils.FindLangVersionByTag(langVersions, sharedutils.LanguageTagFromServerKey(observation.Server)) if ok && langVersion != nil && langVersion.Host != "" { if group.LostVillagesChannelID != "" { for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) { @@ -201,7 +203,7 @@ func (w *worker) checkEnnoblements() { DefaultMessage: message.FallbackMsg(message.CronConqueredVillagesTitle, "Conquered villages"), }) - go w.discord.SendEmbed(group.ConqueredVillagesChannelID, + go h.discord.SendEmbed(group.ConqueredVillagesChannelID, discord. NewEmbed(). SetTitle(title). @@ -217,7 +219,7 @@ func (w *worker) checkEnnoblements() { DefaultMessage: message.FallbackMsg(message.CronLostVillagesTitle, "Lost villages"), }) - go w.discord.SendEmbed(group.LostVillagesChannelID, + go h.discord.SendEmbed(group.LostVillagesChannelID, discord. NewEmbed(). SetTitle(title). @@ -227,35 +229,27 @@ func (w *worker) checkEnnoblements() { MessageEmbed) } } - - log. - WithField("executionTime", time.Since(start).String()). - Infoln("checkEnnoblements: finished executing") } -func (w *worker) checkBotServers() { - start := time.Now() - log.Info("checkBotServers: called") - - servers, total, err := w.serverRepo.Fetch(context.Background(), nil) +func (h *handler) checkBotServers() { + servers, total, err := h.serverRepo.Fetch(context.Background(), nil) if err != nil { log.Error("checkBotServers: " + err.Error()) return } log. - WithField("executionTime", time.Since(start)). WithField("numberOfServers", total). Info("checkBotServers: loaded servers") idsToDelete := []string{} for _, server := range servers { - if isGuildMember, _ := w.discord.IsGuildMember(server.ID); !isGuildMember { + if isGuildMember, _ := h.discord.IsGuildMember(server.ID); !isGuildMember { idsToDelete = append(idsToDelete, server.ID) } } if len(idsToDelete) > 0 { - deleted, err := w.serverRepo.Delete(context.Background(), &models.ServerFilter{ + deleted, err := h.serverRepo.Delete(context.Background(), &models.ServerFilter{ ID: idsToDelete, }) if err != nil { @@ -266,17 +260,10 @@ func (w *worker) checkBotServers() { Info("checkBotServers: deleted servers") } } - - log. - WithField("executionTime", time.Since(start).String()). - Infoln("checkBotServers: finished executing") } -func (w *worker) deleteClosedTribalWarsServers() { - start := time.Now() - log.Info("deleteClosedTribalWarsServers: called") - - servers, err := w.observationRepo.FetchServers(context.Background()) +func (h *handler) deleteClosedTribalWarsServers() { + servers, err := h.observationRepo.FetchServers(context.Background()) if err != nil { log.Error("deleteClosedTribalWarsServers: " + err.Error()) return @@ -285,7 +272,7 @@ func (w *worker) deleteClosedTribalWarsServers() { WithField("servers", servers). Info("deleteClosedTribalWarsServers: loaded servers") - list, err := w.api.Servers.Browse(&shared_models.ServerFilter{ + list, err := h.api.Servers.Browse(&shared_models.ServerFilter{ Key: servers, Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed}, }, nil) @@ -303,7 +290,7 @@ func (w *worker) deleteClosedTribalWarsServers() { } if len(keys) > 0 { - deleted, err := w.observationRepo.Delete(context.Background(), &models.ObservationFilter{ + deleted, err := h.observationRepo.Delete(context.Background(), &models.ObservationFilter{ Server: keys, }) if err != nil { @@ -314,21 +301,10 @@ func (w *worker) deleteClosedTribalWarsServers() { Infof("deleteClosedTribalWarsServers: deleted observations") } } - - log. - WithField("executionTime", time.Since(start).String()). - Infoln("deleteClosedTribalWarsServers: finished executing") } -func (w *worker) updateBotStatus() { - start := time.Now() - log.Info("updateBotStatus: updating bot status...") - - if err := w.discord.UpdateStatus(w.status); err != nil { +func (h *handler) updateBotStatus() { + if err := h.discord.UpdateStatus(h.status); err != nil { log.Error("updateBotStatus: " + err.Error()) } - - log. - WithField("executionTime", time.Since(start).String()). - Infoln("updateBotStatus: bot status has been updated") } diff --git a/discord/coords_translation.go b/discord/coords_translation.go index 9b79ec9..64314cf 100644 --- a/discord/coords_translation.go +++ b/discord/coords_translation.go @@ -4,6 +4,8 @@ import ( "context" "regexp" + sharedutils "github.com/tribalwarshelp/shared/utils" + "github.com/bwmarrin/discordgo" "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/tribalwarshelp/dcbot/message" @@ -85,7 +87,7 @@ func (s *Session) translateCoords(ctx *commandCtx, m *discordgo.MessageCreate) { coords := extractAllCoordsFromMessage(m.Content) coordsLen := len(coords) if coordsLen > 0 { - langVersion, err := s.cfg.API.LangVersions.Read(utils.LanguageTagFromServerKey(ctx.server.CoordsTranslation)) + langVersion, err := s.cfg.API.LangVersions.Read(sharedutils.LanguageTagFromServerKey(ctx.server.CoordsTranslation)) if err != nil || langVersion == nil { return } diff --git a/discord/observations.go b/discord/observations.go index 44c610a..00cb456 100644 --- a/discord/observations.go +++ b/discord/observations.go @@ -5,6 +5,8 @@ import ( "fmt" "strconv" + sharedutils "github.com/tribalwarshelp/shared/utils" + "github.com/bwmarrin/discordgo" "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/tribalwarshelp/dcbot/message" @@ -686,7 +688,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag langTags := []shared_models.LanguageTag{} for _, observation := range observations { tribeIDsByServer[observation.Server] = append(tribeIDsByServer[observation.Server], observation.TribeID) - currentLangTag := utils.LanguageTagFromServerKey(observation.Server) + currentLangTag := sharedutils.LanguageTagFromServerKey(observation.Server) unique := true for _, langTag := range langTags { if langTag == currentLangTag { @@ -736,7 +738,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag if observation.Tribe != nil { tag = observation.Tribe.Tag } - lv := utils.FindLangVersionByTag(langVersionList.Items, utils.LanguageTagFromServerKey(observation.Server)) + lv := utils.FindLangVersionByTag(langVersionList.Items, sharedutils.LanguageTagFromServerKey(observation.Server)) tribeURL := "" if lv != nil { tribeURL = utils.FormatTribeURL(observation.Server, lv.Host, observation.TribeID) diff --git a/discord/public_commands.go b/discord/public_commands.go index 0448b22..8b3f7ad 100644 --- a/discord/public_commands.go +++ b/discord/public_commands.go @@ -13,6 +13,7 @@ import ( "github.com/bwmarrin/discordgo" "github.com/tribalwarshelp/dcbot/utils" "github.com/tribalwarshelp/golang-sdk/sdk" + sharedutils "github.com/tribalwarshelp/shared/utils" ) const ( @@ -397,7 +398,7 @@ func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate return } - langTag := utils.LanguageTagFromServerKey(world) + langTag := sharedutils.LanguageTagFromServerKey(world) langVersion, err := s.cfg.API.LangVersions.Read(langTag) if err != nil || langVersion == nil { s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ diff --git a/go.mod b/go.mod index 9a8cc4d..ae6e50e 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/robfig/cron/v3 v3.0.1 github.com/sirupsen/logrus v1.7.0 github.com/tribalwarshelp/golang-sdk v0.0.0-20200903125555-7b6975e64f6f - github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3 + github.com/tribalwarshelp/shared v0.0.0-20201024182030-eeb4645da4ca golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0 // indirect golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd // indirect diff --git a/go.sum b/go.sum index 72c4f62..4aa9692 100644 --- a/go.sum +++ b/go.sum @@ -129,8 +129,8 @@ github.com/tribalwarshelp/golang-sdk v0.0.0-20200903125555-7b6975e64f6f h1:TZfJ3 github.com/tribalwarshelp/golang-sdk v0.0.0-20200903125555-7b6975e64f6f/go.mod h1:o1ViLff0Fwg4LH86VDaBtUQqIIMIqp+leUBx+fZLz/U= github.com/tribalwarshelp/shared v0.0.0-20200809125423-2bc2e8dfde95 h1:mO3ZR+o5UlYN8uGX4L32H5HNpB0uHpLdZ3YiDA6ciW4= github.com/tribalwarshelp/shared v0.0.0-20200809125423-2bc2e8dfde95/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac= -github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3 h1:KNH15DdQLxZAahSfX+4U4KUhsqRWj7uxjuOkxxhrQZk= -github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac= +github.com/tribalwarshelp/shared v0.0.0-20201024182030-eeb4645da4ca h1:YUm2O7+N75k3Oyu7GKqyxW6G1TmThh2N0LdbkZN67ZU= +github.com/tribalwarshelp/shared v0.0.0-20201024182030-eeb4645da4ca/go.mod h1:EsUl4FRcNDPvJg7ig3t0pEHOPxZnw5SXKYbxaI0IQJU= github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94= github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= github.com/vmihailenco/msgpack/v4 v4.3.11 h1:Q47CePddpNGNhk4GCnAx9DDtASi2rasatE0cd26cZoE= diff --git a/utils/language_tag_from_world_name.go b/utils/language_tag_from_world_name.go deleted file mode 100644 index 34699d9..0000000 --- a/utils/language_tag_from_world_name.go +++ /dev/null @@ -1,12 +0,0 @@ -package utils - -import ( - "github.com/tribalwarshelp/shared/models" -) - -func LanguageTagFromServerKey(key string) models.LanguageTag { - if len(key) < 2 { - return "" - } - return models.LanguageTag(key[0:2]) -}