rename file worker.go -> handler.go, update tribalwarshelp/shared package, small refactor

This commit is contained in:
Dawid Wysokiński 2020-10-24 20:38:11 +02:00
parent 711760a568
commit ed3eabc64d
8 changed files with 62 additions and 85 deletions

View File

@ -3,6 +3,8 @@ package cron
import ( import (
"time" "time"
sharedutils "github.com/tribalwarshelp/shared/utils"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tribalwarshelp/golang-sdk/sdk" "github.com/tribalwarshelp/golang-sdk/sdk"
"github.com/tribalwarshelp/shared/mode" "github.com/tribalwarshelp/shared/mode"
@ -27,7 +29,7 @@ type Config struct {
} }
func Attach(c *cron.Cron, cfg Config) { func Attach(c *cron.Cron, cfg Config) {
w := &worker{ h := &handler{
lastEnnoblementAt: make(map[string]time.Time), lastEnnoblementAt: make(map[string]time.Time),
serverRepo: cfg.ServerRepo, serverRepo: cfg.ServerRepo,
observationRepo: cfg.ObservationRepo, observationRepo: cfg.ObservationRepo,
@ -36,16 +38,22 @@ func Attach(c *cron.Cron, cfg Config) {
api: cfg.API, api: cfg.API,
status: cfg.Status, status: cfg.Status,
} }
c.AddFunc("@every 1m", w.checkEnnoblements) checkEnnoblements := sharedutils.TrackExecutionTime(log, h.checkEnnoblements, "checkEnnoblements")
c.AddFunc("@every 30m", w.checkBotServers) checkBotServers := sharedutils.TrackExecutionTime(log, h.checkBotServers, "checkBotServers")
c.AddFunc("@every 2h10m", w.deleteClosedTribalWarsServers) deleteClosedTribalWarsServers := sharedutils.TrackExecutionTime(log,
c.AddFunc("@every 2h", w.updateBotStatus) 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() { go func() {
w.checkBotServers() checkBotServers()
w.deleteClosedTribalWarsServers() deleteClosedTribalWarsServers()
w.updateBotStatus() updateBotStatus()
if mode.Get() == mode.DevelopmentMode { if mode.Get() == mode.DevelopmentMode {
w.checkEnnoblements() checkEnnoblements()
} }
}() }()
} }

View File

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"time" "time"
sharedutils "github.com/tribalwarshelp/shared/utils"
"github.com/nicksnyder/go-i18n/v2/i18n" "github.com/nicksnyder/go-i18n/v2/i18n"
"github.com/tribalwarshelp/dcbot/message" "github.com/tribalwarshelp/dcbot/message"
@ -21,7 +23,7 @@ import (
"github.com/tribalwarshelp/golang-sdk/sdk" "github.com/tribalwarshelp/golang-sdk/sdk"
) )
type worker struct { type handler struct {
lastEnnoblementAt map[string]time.Time lastEnnoblementAt map[string]time.Time
serverRepo server.Repository serverRepo server.Repository
observationRepo observation.Repository observationRepo observation.Repository
@ -31,7 +33,7 @@ type worker struct {
status string 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) m := make(map[string]ennoblements)
if len(servers) == 0 { if len(servers) == 0 {
@ -61,12 +63,12 @@ func (w *worker) loadEnnoblements(servers []string) (map[string]ennoblements, er
resp := make(map[string]ennoblements) 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") return m, errors.Wrap(err, "loadEnnoblements")
} }
for server, ennoblements := range resp { for server, ennoblements := range resp {
lastEnnoblementAt, ok := w.lastEnnoblementAt[server] lastEnnoblementAt, ok := h.lastEnnoblementAt[server]
if !ok { if !ok {
lastEnnoblementAt = time.Now().Add(-1 * time.Minute) lastEnnoblementAt = time.Now().Add(-1 * time.Minute)
} }
@ -80,24 +82,28 @@ func (w *worker) loadEnnoblements(servers []string) (map[string]ennoblements, er
if lastEnnoblement != nil { if lastEnnoblement != nil {
lastEnnoblementAt = lastEnnoblement.EnnobledAt lastEnnoblementAt = lastEnnoblement.EnnobledAt
} }
w.lastEnnoblementAt[server] = lastEnnoblementAt h.lastEnnoblementAt[server] = lastEnnoblementAt
} }
return m, nil 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{} languageTags := []shared_models.LanguageTag{}
cache := make(map[shared_models.LanguageTag]bool) cache := make(map[shared_models.LanguageTag]bool)
for _, server := range servers { for _, server := range servers {
languageTag := utils.LanguageTagFromServerKey(server) languageTag := sharedutils.LanguageTagFromServerKey(server)
if languageTag.IsValid() && !cache[languageTag] { if languageTag.IsValid() && !cache[languageTag] {
cache[languageTag] = true cache[languageTag] = true
languageTags = append(languageTags, languageTag) 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, Tag: languageTags,
}) })
if err != nil { if err != nil {
@ -107,21 +113,17 @@ func (w *worker) loadLangVersions(servers []string) ([]*shared_models.LangVersio
return langVersionList.Items, nil return langVersionList.Items, nil
} }
func (w *worker) checkEnnoblements() { func (h *handler) checkEnnoblements() {
start := time.Now() servers, err := h.observationRepo.FetchServers(context.Background())
log.
Infoln("checkEnnoblements: called")
servers, err := w.observationRepo.FetchServers(context.Background())
if err != nil { if err != nil {
log.Errorln("checkEnnoblements:", err.Error()) log.Errorln("checkEnnoblements:", err.Error())
return return
} }
log. log.
WithField("servers", servers). 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 { if err != nil {
log.Errorln("checkEnnoblements:", err.Error()) log.Errorln("checkEnnoblements:", err.Error())
return return
@ -130,7 +132,7 @@ func (w *worker) checkEnnoblements() {
WithField("numberOfGroups", total). WithField("numberOfGroups", total).
Info("checkEnnoblements: Loaded groups") Info("checkEnnoblements: Loaded groups")
langVersions, err := w.loadLangVersions(servers) langVersions, err := h.loadLangVersions(servers)
if err != nil { if err != nil {
log.Errorln("checkEnnoblements:", err) log.Errorln("checkEnnoblements:", err)
return return
@ -139,7 +141,7 @@ func (w *worker) checkEnnoblements() {
WithField("numberOfLangVersions", len(langVersions)). WithField("numberOfLangVersions", len(langVersions)).
Info("checkEnnoblements: Loaded lang versions") Info("checkEnnoblements: Loaded lang versions")
ennoblementsByServerKey, err := w.loadEnnoblements(servers) ennoblementsByServerKey, err := h.loadEnnoblements(servers)
if err != nil { if err != nil {
log.Errorln("checkEnnoblements:", err) log.Errorln("checkEnnoblements:", err)
} }
@ -154,7 +156,7 @@ func (w *worker) checkEnnoblements() {
conqueredVillagesMsg := &discord.MessageEmbed{} conqueredVillagesMsg := &discord.MessageEmbed{}
for _, observation := range group.Observations { for _, observation := range group.Observations {
ennoblements, ok := ennoblementsByServerKey[observation.Server] 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 ok && langVersion != nil && langVersion.Host != "" {
if group.LostVillagesChannelID != "" { if group.LostVillagesChannelID != "" {
for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) { for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) {
@ -201,7 +203,7 @@ func (w *worker) checkEnnoblements() {
DefaultMessage: message.FallbackMsg(message.CronConqueredVillagesTitle, DefaultMessage: message.FallbackMsg(message.CronConqueredVillagesTitle,
"Conquered villages"), "Conquered villages"),
}) })
go w.discord.SendEmbed(group.ConqueredVillagesChannelID, go h.discord.SendEmbed(group.ConqueredVillagesChannelID,
discord. discord.
NewEmbed(). NewEmbed().
SetTitle(title). SetTitle(title).
@ -217,7 +219,7 @@ func (w *worker) checkEnnoblements() {
DefaultMessage: message.FallbackMsg(message.CronLostVillagesTitle, DefaultMessage: message.FallbackMsg(message.CronLostVillagesTitle,
"Lost villages"), "Lost villages"),
}) })
go w.discord.SendEmbed(group.LostVillagesChannelID, go h.discord.SendEmbed(group.LostVillagesChannelID,
discord. discord.
NewEmbed(). NewEmbed().
SetTitle(title). SetTitle(title).
@ -227,35 +229,27 @@ func (w *worker) checkEnnoblements() {
MessageEmbed) MessageEmbed)
} }
} }
log.
WithField("executionTime", time.Since(start).String()).
Infoln("checkEnnoblements: finished executing")
} }
func (w *worker) checkBotServers() { func (h *handler) checkBotServers() {
start := time.Now() servers, total, err := h.serverRepo.Fetch(context.Background(), nil)
log.Info("checkBotServers: called")
servers, total, err := w.serverRepo.Fetch(context.Background(), nil)
if err != nil { if err != nil {
log.Error("checkBotServers: " + err.Error()) log.Error("checkBotServers: " + err.Error())
return return
} }
log. log.
WithField("executionTime", time.Since(start)).
WithField("numberOfServers", total). WithField("numberOfServers", total).
Info("checkBotServers: loaded servers") Info("checkBotServers: loaded servers")
idsToDelete := []string{} idsToDelete := []string{}
for _, server := range servers { 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) idsToDelete = append(idsToDelete, server.ID)
} }
} }
if len(idsToDelete) > 0 { if len(idsToDelete) > 0 {
deleted, err := w.serverRepo.Delete(context.Background(), &models.ServerFilter{ deleted, err := h.serverRepo.Delete(context.Background(), &models.ServerFilter{
ID: idsToDelete, ID: idsToDelete,
}) })
if err != nil { if err != nil {
@ -266,17 +260,10 @@ func (w *worker) checkBotServers() {
Info("checkBotServers: deleted servers") Info("checkBotServers: deleted servers")
} }
} }
log.
WithField("executionTime", time.Since(start).String()).
Infoln("checkBotServers: finished executing")
} }
func (w *worker) deleteClosedTribalWarsServers() { func (h *handler) deleteClosedTribalWarsServers() {
start := time.Now() servers, err := h.observationRepo.FetchServers(context.Background())
log.Info("deleteClosedTribalWarsServers: called")
servers, err := w.observationRepo.FetchServers(context.Background())
if err != nil { if err != nil {
log.Error("deleteClosedTribalWarsServers: " + err.Error()) log.Error("deleteClosedTribalWarsServers: " + err.Error())
return return
@ -285,7 +272,7 @@ func (w *worker) deleteClosedTribalWarsServers() {
WithField("servers", servers). WithField("servers", servers).
Info("deleteClosedTribalWarsServers: loaded 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, Key: servers,
Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed}, Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed},
}, nil) }, nil)
@ -303,7 +290,7 @@ func (w *worker) deleteClosedTribalWarsServers() {
} }
if len(keys) > 0 { if len(keys) > 0 {
deleted, err := w.observationRepo.Delete(context.Background(), &models.ObservationFilter{ deleted, err := h.observationRepo.Delete(context.Background(), &models.ObservationFilter{
Server: keys, Server: keys,
}) })
if err != nil { if err != nil {
@ -314,21 +301,10 @@ func (w *worker) deleteClosedTribalWarsServers() {
Infof("deleteClosedTribalWarsServers: deleted observations") Infof("deleteClosedTribalWarsServers: deleted observations")
} }
} }
log.
WithField("executionTime", time.Since(start).String()).
Infoln("deleteClosedTribalWarsServers: finished executing")
} }
func (w *worker) updateBotStatus() { func (h *handler) updateBotStatus() {
start := time.Now() if err := h.discord.UpdateStatus(h.status); err != nil {
log.Info("updateBotStatus: updating bot status...")
if err := w.discord.UpdateStatus(w.status); err != nil {
log.Error("updateBotStatus: " + err.Error()) log.Error("updateBotStatus: " + err.Error())
} }
log.
WithField("executionTime", time.Since(start).String()).
Infoln("updateBotStatus: bot status has been updated")
} }

View File

@ -4,6 +4,8 @@ import (
"context" "context"
"regexp" "regexp"
sharedutils "github.com/tribalwarshelp/shared/utils"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/nicksnyder/go-i18n/v2/i18n" "github.com/nicksnyder/go-i18n/v2/i18n"
"github.com/tribalwarshelp/dcbot/message" "github.com/tribalwarshelp/dcbot/message"
@ -85,7 +87,7 @@ func (s *Session) translateCoords(ctx *commandCtx, m *discordgo.MessageCreate) {
coords := extractAllCoordsFromMessage(m.Content) coords := extractAllCoordsFromMessage(m.Content)
coordsLen := len(coords) coordsLen := len(coords)
if coordsLen > 0 { 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 { if err != nil || langVersion == nil {
return return
} }

View File

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"strconv" "strconv"
sharedutils "github.com/tribalwarshelp/shared/utils"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/nicksnyder/go-i18n/v2/i18n" "github.com/nicksnyder/go-i18n/v2/i18n"
"github.com/tribalwarshelp/dcbot/message" "github.com/tribalwarshelp/dcbot/message"
@ -686,7 +688,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag
langTags := []shared_models.LanguageTag{} langTags := []shared_models.LanguageTag{}
for _, observation := range observations { for _, observation := range observations {
tribeIDsByServer[observation.Server] = append(tribeIDsByServer[observation.Server], observation.TribeID) tribeIDsByServer[observation.Server] = append(tribeIDsByServer[observation.Server], observation.TribeID)
currentLangTag := utils.LanguageTagFromServerKey(observation.Server) currentLangTag := sharedutils.LanguageTagFromServerKey(observation.Server)
unique := true unique := true
for _, langTag := range langTags { for _, langTag := range langTags {
if langTag == currentLangTag { if langTag == currentLangTag {
@ -736,7 +738,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag
if observation.Tribe != nil { if observation.Tribe != nil {
tag = observation.Tribe.Tag tag = observation.Tribe.Tag
} }
lv := utils.FindLangVersionByTag(langVersionList.Items, utils.LanguageTagFromServerKey(observation.Server)) lv := utils.FindLangVersionByTag(langVersionList.Items, sharedutils.LanguageTagFromServerKey(observation.Server))
tribeURL := "" tribeURL := ""
if lv != nil { if lv != nil {
tribeURL = utils.FormatTribeURL(observation.Server, lv.Host, observation.TribeID) tribeURL = utils.FormatTribeURL(observation.Server, lv.Host, observation.TribeID)

View File

@ -13,6 +13,7 @@ import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/tribalwarshelp/dcbot/utils" "github.com/tribalwarshelp/dcbot/utils"
"github.com/tribalwarshelp/golang-sdk/sdk" "github.com/tribalwarshelp/golang-sdk/sdk"
sharedutils "github.com/tribalwarshelp/shared/utils"
) )
const ( const (
@ -397,7 +398,7 @@ func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate
return return
} }
langTag := utils.LanguageTagFromServerKey(world) langTag := sharedutils.LanguageTagFromServerKey(world)
langVersion, err := s.cfg.API.LangVersions.Read(langTag) langVersion, err := s.cfg.API.LangVersions.Read(langTag)
if err != nil || langVersion == nil { if err != nil || langVersion == nil {
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{

2
go.mod
View File

@ -12,7 +12,7 @@ require (
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/sirupsen/logrus v1.7.0 github.com/sirupsen/logrus v1.7.0
github.com/tribalwarshelp/golang-sdk v0.0.0-20200903125555-7b6975e64f6f 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/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect
golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0 // indirect golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0 // indirect
golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd // indirect golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd // indirect

4
go.sum
View File

@ -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/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 h1:mO3ZR+o5UlYN8uGX4L32H5HNpB0uHpLdZ3YiDA6ciW4=
github.com/tribalwarshelp/shared v0.0.0-20200809125423-2bc2e8dfde95/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac= 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-20201024182030-eeb4645da4ca h1:YUm2O7+N75k3Oyu7GKqyxW6G1TmThh2N0LdbkZN67ZU=
github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac= 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 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=
github.com/vmihailenco/msgpack/v4 v4.3.11 h1:Q47CePddpNGNhk4GCnAx9DDtASi2rasatE0cd26cZoE= github.com/vmihailenco/msgpack/v4 v4.3.11 h1:Q47CePddpNGNhk4GCnAx9DDtASi2rasatE0cd26cZoE=

View File

@ -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])
}