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 (
"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()
}
}()
}

View File

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

View File

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

View File

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

View File

@ -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{

2
go.mod
View File

@ -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

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/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=

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