Merge pull request #4 from tribalwarshelp/bump-shared

Bump shared
This commit is contained in:
Dawid Wysokiński 2021-05-06 15:59:50 +02:00 committed by GitHub
commit e38704663c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 231 additions and 281 deletions

View File

@ -12,23 +12,23 @@ RUN go mod download
# Copy the source from the current directory to the Working Directory inside the container # Copy the source from the current directory to the Working Directory inside the container
COPY . . COPY . .
RUN go build -o main . RUN go build -o twcron .
######## Start a new stage from scratch ####### ######## Start a new stage from scratch #######
FROM alpine:latest FROM alpine:latest
RUN apk --no-cache add ca-certificates RUN apk --no-cache add ca-certificates
WORKDIR /root/ WORKDIR /root/
# Copy the Pre-built binary file from the previous stage # Copy the Pre-built binary file from the previous stage
COPY --from=builder /app/main . COPY --from=builder /app/twcron .
ENV MODE=production ENV APP_MODE=production
EXPOSE 8080 EXPOSE 8080
RUN apk add --no-cache tzdata RUN apk add --no-cache tzdata
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait ./wait ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait ./wait
RUN chmod +x ./wait RUN chmod +x ./wait
CMD ./wait && ./main CMD ./wait && ./twcron

View File

@ -3,13 +3,13 @@
Features: Features:
- Adds automatically new servers. - Adds automatically new servers.
- Fetches and updates servers data (players, tribes, ODA, ODD, ODS, OD, conquers, configs). - Fetches and updates server data (players, tribes, ODA, ODD, ODS, OD, conquers, configs).
- Saves daily player/tribe stats, player/tribe history, tribe changes, player name changes, server stats. - Saves daily player/tribe stats, player/tribe history, tribe changes, player name changes, server stats.
- Cleans the database from old player/tribe stats, player/tribe history. - Clears database from old player/tribe stats, player/tribe history.
## Development ## Development
**Required env variables:** **Required ENV variables:**
``` ```
DB_USER=your_db_user DB_USER=your_db_user

7
go.mod
View File

@ -3,8 +3,9 @@ module github.com/tribalwarshelp/cron
go 1.16 go 1.16
require ( require (
github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210428180109-fb97298564d9 github.com/Kichiyaki/appmode v0.0.0-20210502105643-0a26207c548d
github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210502060056-ad595ba7b858
github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7
github.com/go-pg/pg/v10 v10.9.1 github.com/go-pg/pg/v10 v10.9.1
github.com/go-redis/redis/v8 v8.8.2 github.com/go-redis/redis/v8 v8.8.2
github.com/go-redis/redis_rate/v9 v9.1.1 // indirect github.com/go-redis/redis_rate/v9 v9.1.1 // indirect
@ -13,7 +14,7 @@ require (
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/sirupsen/logrus v1.8.1 github.com/sirupsen/logrus v1.8.1
github.com/tribalwarshelp/shared v0.0.0-20210501144726-b8f533bc97be github.com/tribalwarshelp/shared v0.0.0-20210505113409-79d8dc192942
github.com/vmihailenco/taskq/v3 v3.2.3 github.com/vmihailenco/taskq/v3 v3.2.3
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7 // indirect golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7 // indirect
) )

16
go.sum
View File

@ -2,10 +2,17 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210428180109-fb97298564d9 h1:S/08K0AD4bXYeSPJKei8ZbumDy1JNARZsgYbNZgr9Tk= github.com/Kichiyaki/appmode v0.0.0-20210502105643-0a26207c548d h1:ApX13STtfJc2YPH5D2JnBa6+4AM2vt7a81so/MPr/bA=
github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210428180109-fb97298564d9/go.mod h1:ADHVWnGlWcRn1aGthuh7I1Lrn6zzsjkVJju151dXyDw= github.com/Kichiyaki/appmode v0.0.0-20210502105643-0a26207c548d/go.mod h1:41p1KTy/fiVocPnJR2h/iXh2NvWWVBdNoZrN8TWVXUI=
github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210502060056-ad595ba7b858 h1:O7EPPY5lWaKbYB/5yJzE8WMesismUYuje7gOemo1UNo=
github.com/Kichiyaki/go-pg-logrus-query-logger/v10 v10.0.0-20210502060056-ad595ba7b858/go.mod h1:ADHVWnGlWcRn1aGthuh7I1Lrn6zzsjkVJju151dXyDw=
github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM=
github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4=
github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f h1:/kJmv8B59cMHdTmsko0RyAOeRC9WpsQPDmLtRXOAU6c=
github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f/go.mod h1:MSAEhr8oeK+Rhjhqyl31/8/AI88thYky80OyD8mheDA=
github.com/Kichiyaki/goutil v0.0.0-20210502095630-318d17091eab/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4=
github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7 h1:OU3ZA5H8fHTzaYIw9UBfH3gtWRL0XmnczlhH3E2PjV4=
github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4=
github.com/aws/aws-sdk-go v1.35.28 h1:S2LuRnfC8X05zgZLC8gy/Sb82TGv2Cpytzbzz7tkeHc= github.com/aws/aws-sdk-go v1.35.28 h1:S2LuRnfC8X05zgZLC8gy/Sb82TGv2Cpytzbzz7tkeHc=
github.com/aws/aws-sdk-go v1.35.28/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go v1.35.28/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
github.com/bsm/redislock v0.7.0 h1:RL7aZJhCKkuBjQbnSTKCeedTRifBWxd/ffP+GZ599Mo= github.com/bsm/redislock v0.7.0 h1:RL7aZJhCKkuBjQbnSTKCeedTRifBWxd/ffP+GZ599Mo=
@ -111,7 +118,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@ -122,8 +128,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo=
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs=
github.com/tribalwarshelp/shared v0.0.0-20210501144726-b8f533bc97be h1:NSdGqXTiWYk67US87sqE8sHlGEsL/dLIfQpb0jDPbTI= github.com/tribalwarshelp/shared v0.0.0-20210505113409-79d8dc192942 h1:4N3ajmOaZCFz04TpqtrcJnRquzSRsMCWlLwUYE926FA=
github.com/tribalwarshelp/shared v0.0.0-20210501144726-b8f533bc97be/go.mod h1:CDQvesBYmSyGDl5X37xfa+ub55ZbikrHDuIZ4AcfM8I= github.com/tribalwarshelp/shared v0.0.0-20210505113409-79d8dc192942/go.mod h1:GBnSKQrxL8Nmi3MViIzZVbyP9+ugd28gWArsSvw1iVU=
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/v5 v5.0.0/go.mod h1:HVxBVPUK/+fZMonk4bi1islLa8V3cfnBug0+4dykPzo= github.com/vmihailenco/msgpack/v5 v5.0.0/go.mod h1:HVxBVPUK/+fZMonk4bi1islLa8V3cfnBug0+4dykPzo=

View File

@ -6,9 +6,9 @@ import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/robfig/cron/v3" "github.com/robfig/cron/v3"
"github.com/tribalwarshelp/shared/models"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
"github.com/tribalwarshelp/cron/internal/cron/tasks" "github.com/tribalwarshelp/cron/internal/cron/tasks"
@ -44,7 +44,7 @@ func New(cfg *Config) (*Cron, error) {
} }
func (c *Cron) init() error { func (c *Cron) init() error {
var versions []*models.Version var versions []*twmodel.Version
if err := c.db.Model(&versions).DistinctOn("timezone").Select(); err != nil { if err := c.db.Model(&versions).DistinctOn("timezone").Select(); err != nil {
return errors.Wrap(err, "Cron.init: couldn't load versions") return errors.Wrap(err, "Cron.init: couldn't load versions")
} }

View File

@ -1,14 +1,13 @@
package tasks package tasks
import ( import (
"github.com/tribalwarshelp/shared/tw/dataloader" "github.com/tribalwarshelp/shared/tw/twdataloader"
"github.com/tribalwarshelp/shared/tw/twmodel"
"net/http" "net/http"
"time" "time"
"github.com/tribalwarshelp/shared/models"
) )
func countPlayerVillages(villages []*models.Village) int { func countPlayerVillages(villages []*twmodel.Village) int {
count := 0 count := 0
for _, village := range villages { for _, village := range villages {
if village.PlayerID != 0 { if village.PlayerID != 0 {
@ -39,15 +38,15 @@ func newHTTPClient() *http.Client {
} }
} }
func newDataloader(url string) dataloader.DataLoader { func newServerDataLoader(url string) twdataloader.ServerDataLoader {
return dataloader.New(&dataloader.Config{ return twdataloader.NewServerDataLoader(&twdataloader.ServerDataLoaderConfig{
BaseURL: url, BaseURL: url,
Client: newHTTPClient(), Client: newHTTPClient(),
}) })
} }
type playersSearchableByID struct { type playersSearchableByID struct {
players []*models.Player players []*twmodel.Player
} }
func (searchable playersSearchableByID) getID(index int) int { func (searchable playersSearchableByID) getID(index int) int {
@ -59,7 +58,7 @@ func (searchable playersSearchableByID) len() int {
} }
type tribesSearchableByID struct { type tribesSearchableByID struct {
tribes []*models.Tribe tribes []*twmodel.Tribe
} }
func (searchable tribesSearchableByID) getID(index int) int { func (searchable tribesSearchableByID) getID(index int) int {
@ -71,7 +70,7 @@ func (searchable tribesSearchableByID) len() int {
} }
type villagesSearchableByID struct { type villagesSearchableByID struct {
villages []*models.Village villages []*twmodel.Village
} }
func (searchable villagesSearchableByID) getID(index int) int { func (searchable villagesSearchableByID) getID(index int) int {
@ -83,7 +82,7 @@ func (searchable villagesSearchableByID) len() int {
} }
type ennoblementsSearchableByNewOwnerID struct { type ennoblementsSearchableByNewOwnerID struct {
ennoblements []*models.Ennoblement ennoblements []*twmodel.Ennoblement
} }
func (searchable ennoblementsSearchableByNewOwnerID) getID(index int) int { func (searchable ennoblementsSearchableByNewOwnerID) getID(index int) int {

View File

@ -2,9 +2,9 @@ package tasks
import ( import (
"context" "context"
"fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/shared/tw/twurlbuilder"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
) )
@ -14,11 +14,11 @@ type taskDeleteNonExistentVillages struct {
} }
func (t *taskDeleteNonExistentVillages) execute() error { func (t *taskDeleteNonExistentVillages) execute() error {
var servers []*models.Server var servers []*twmodel.Server
err := t.db. err := t.db.
Model(&servers). Model(&servers).
Relation("Version"). Relation("Version").
Where("status = ?", models.ServerStatusOpen). Where("status = ?", twmodel.ServerStatusOpen).
Relation("Version"). Relation("Version").
Select() Select()
if err != nil { if err != nil {
@ -36,7 +36,7 @@ func (t *taskDeleteNonExistentVillages) execute() error {
Get(TaskNameServerDeleteNonExistentVillages). Get(TaskNameServerDeleteNonExistentVillages).
WithArgs( WithArgs(
context.Background(), context.Background(),
fmt.Sprintf("https://%s.%s", server.Key, server.Version.Host), twurlbuilder.BuildServerURL(server.Key, server.Version.Host),
s, s,
), ),
) )

View File

@ -2,64 +2,70 @@ package tasks
import ( import (
"context" "context"
"fmt"
phpserialize "github.com/Kichiyaki/go-php-serialize"
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twdataloader"
"io/ioutil" "github.com/tribalwarshelp/shared/tw/twmodel"
"net/http"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
"github.com/tribalwarshelp/cron/internal/db" "github.com/tribalwarshelp/cron/internal/postgres"
)
const (
endpointGetServers = "/backend/get_servers.php"
) )
type taskLoadServersAndUpdateData struct { type taskLoadServersAndUpdateData struct {
*task *task
} }
func (t *taskLoadServersAndUpdateData) execute(version *models.Version) error { type serverWithURL struct {
*twmodel.Server `pg:",inherit"`
url string
}
func (t *taskLoadServersAndUpdateData) execute(version *twmodel.Version) error {
if err := t.validatePayload(version); err != nil { if err := t.validatePayload(version); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
} }
entry := log.WithField("host", version.Host) entry := log.WithField("host", version.Host)
entry.Infof("taskLoadServersAndUpdateData.execute: %s: Loading servers", version.Host) entry.Infof("taskLoadServersAndUpdateData.execute: %s: Loading servers", version.Host)
data, err := t.getServers(version) loadedServers, err := twdataloader.
NewVersionDataLoader(&twdataloader.VersionDataLoaderConfig{
Host: version.Host,
Client: newHTTPClient(),
}).
LoadServers()
if err != nil { if err != nil {
log.Errorln(err) log.Errorln(err)
return err return err
} }
var serverKeys []string var serverKeys []string
var servers []*models.Server var servers []*serverWithURL
for serverKey := range data { for _, loadedServer := range loadedServers {
if version.SpecialServers.Contains(serverKey) { if version.SpecialServers.Contains(loadedServer.Key) {
continue continue
} }
server := &models.Server{ server := &twmodel.Server{
Key: serverKey, Key: loadedServer.Key,
Status: models.ServerStatusOpen, Status: twmodel.ServerStatusOpen,
VersionCode: version.Code, VersionCode: version.Code,
Version: version, Version: version,
} }
if err := db.CreateSchema(t.db, server); err != nil { if err := postgres.CreateSchema(t.db, server); err != nil {
logrus.Warn(errors.Wrapf(err, "taskLoadServersAndUpdateData.execute: %s: couldn't create the schema", server.Key)) logrus.Warn(errors.Wrapf(err, "taskLoadServersAndUpdateData.execute: %s: couldn't create the schema", server.Key))
continue continue
} }
servers = append(servers, server) servers = append(servers, &serverWithURL{
serverKeys = append(serverKeys, serverKey) Server: server,
url: loadedServer.URL,
})
serverKeys = append(serverKeys, server.Key)
} }
if len(servers) > 0 { if len(servers) > 0 {
if _, err := t.db.Model(&servers). if _, err := t.db.Model(&servers).
OnConflict("(key) DO UPDATE"). OnConflict("(key) DO UPDATE").
Set("status = ?", models.ServerStatusOpen). Set("status = ?", twmodel.ServerStatusOpen).
Set("version_code = EXCLUDED.version_code"). Set("version_code = EXCLUDED.version_code").
Returning("*"). Returning("*").
Insert(); err != nil { Insert(); err != nil {
@ -69,8 +75,8 @@ func (t *taskLoadServersAndUpdateData) execute(version *models.Version) error {
} }
} }
if _, err := t.db.Model(&models.Server{}). if _, err := t.db.Model(&twmodel.Server{}).
Set("status = ?", models.ServerStatusClosed). Set("status = ?", twmodel.ServerStatusClosed).
Where("key NOT IN (?) AND version_code = ?", pg.In(serverKeys), version.Code). Where("key NOT IN (?) AND version_code = ?", pg.In(serverKeys), version.Code).
Update(); err != nil { Update(); err != nil {
err = errors.Wrap(err, "taskLoadServersAndUpdateData.execute: couldn't update server statuses") err = errors.Wrap(err, "taskLoadServersAndUpdateData.execute: couldn't update server statuses")
@ -79,44 +85,16 @@ func (t *taskLoadServersAndUpdateData) execute(version *models.Version) error {
} }
for _, server := range servers { for _, server := range servers {
s := server t.queue.Add(queue.MainQueue, Get(TaskNameUpdateServerData).WithArgs(context.Background(), server.url, server.Server))
t.queue.Add(queue.MainQueue, Get(TaskNameUpdateServerData).WithArgs(context.Background(), data[s.Key], s))
} }
entry.Infof("%s: Servers have been loaded", version.Host) entry.Infof("%s: Servers have been loaded", version.Host)
return nil return nil
} }
func (t *taskLoadServersAndUpdateData) validatePayload(version *models.Version) error { func (t *taskLoadServersAndUpdateData) validatePayload(version *twmodel.Version) error {
if version == nil { if version == nil {
return errors.New("taskLoadServersAndUpdateData.validatePayload: Expected *models.Version, got nil") return errors.New("taskLoadServersAndUpdateData.validatePayload: Expected *twmodel.Version, got nil")
} }
return nil return nil
} }
func (t *taskLoadServersAndUpdateData) getServers(version *models.Version) (map[string]string, error) {
resp, err := http.Get(fmt.Sprintf("https://%s%s", version.Host, endpointGetServers))
if err != nil {
return nil, errors.Wrapf(err, "%s: taskLoadServersAndUpdateData.loadServers couldn't load servers", version.Host)
}
defer resp.Body.Close()
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, errors.Wrapf(err, "%s: taskLoadServersAndUpdateData.loadServers couldn't read the response body", version.Host)
}
body, err := phpserialize.Decode(string(bodyBytes))
if err != nil {
return nil, errors.Wrapf(err, "%s: taskLoadServersAndUpdateData.loadServers couldn't decode the response body into the go value", version.Host)
}
result := make(map[string]string)
for serverKey, url := range body.(map[interface{}]interface{}) {
serverKeyStr := serverKey.(string)
urlStr := url.(string)
if serverKeyStr != "" && urlStr != "" {
result[serverKeyStr] = urlStr
}
}
return result, nil
}

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
) )
@ -13,7 +13,7 @@ type taskLoadVersionsAndUpdateServerData struct {
} }
func (t *taskLoadVersionsAndUpdateServerData) execute() error { func (t *taskLoadVersionsAndUpdateServerData) execute() error {
var versions []*models.Version var versions []*twmodel.Version
log.Debug("taskLoadVersionsAndUpdateServerData.execute: Loading versions...") log.Debug("taskLoadVersionsAndUpdateServerData.execute: Loading versions...")
if err := t.db.Model(&versions).Relation("SpecialServers").Select(); err != nil { if err := t.db.Model(&versions).Relation("SpecialServers").Select(); err != nil {
err = errors.Wrap(err, "taskLoadVersionsAndUpdateServerData.execute: couldn't load versions") err = errors.Wrap(err, "taskLoadVersionsAndUpdateServerData.execute: couldn't load versions")

View File

@ -3,15 +3,15 @@ package tasks
import ( import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twdataloader"
"github.com/tribalwarshelp/shared/tw/dataloader" "github.com/tribalwarshelp/shared/tw/twmodel"
) )
type taskServerDeleteNonExistentVillages struct { type taskServerDeleteNonExistentVillages struct {
*task *task
} }
func (t *taskServerDeleteNonExistentVillages) execute(url string, server *models.Server) error { func (t *taskServerDeleteNonExistentVillages) execute(url string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -20,7 +20,7 @@ func (t *taskServerDeleteNonExistentVillages) execute(url string, server *models
entry.Infof("taskServerDeleteNonExistentVillages.execute: %s: Deleting non-existent villages...", server.Key) entry.Infof("taskServerDeleteNonExistentVillages.execute: %s: Deleting non-existent villages...", server.Key)
err := (&workerDeleteNonExistentVillages{ err := (&workerDeleteNonExistentVillages{
db: t.db.WithParam("SERVER", pg.Safe(server.Key)), db: t.db.WithParam("SERVER", pg.Safe(server.Key)),
dataloader: newDataloader(url), dataloader: newServerDataLoader(url),
server: server, server: server,
}).delete() }).delete()
if err != nil { if err != nil {
@ -32,9 +32,9 @@ func (t *taskServerDeleteNonExistentVillages) execute(url string, server *models
return nil return nil
} }
func (t *taskServerDeleteNonExistentVillages) validatePayload(server *models.Server) error { func (t *taskServerDeleteNonExistentVillages) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.New("taskUpdateServerData.validatePayload: Expected *models.Server, got nil") return errors.New("taskUpdateServerData.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -42,8 +42,8 @@ func (t *taskServerDeleteNonExistentVillages) validatePayload(server *models.Ser
type workerDeleteNonExistentVillages struct { type workerDeleteNonExistentVillages struct {
db *pg.DB db *pg.DB
dataloader dataloader.DataLoader dataloader twdataloader.ServerDataLoader
server *models.Server server *twmodel.Server
} }
func (w *workerDeleteNonExistentVillages) delete() error { func (w *workerDeleteNonExistentVillages) delete() error {
@ -54,9 +54,9 @@ func (w *workerDeleteNonExistentVillages) delete() error {
var idsToDelete []int var idsToDelete []int
searchableByVillageID := &villagesSearchableByID{villages} searchableByVillageID := &villagesSearchableByID{villages}
if err := w.db. if err := w.db.
Model(&models.Village{}). Model(&twmodel.Village{}).
Column("id"). Column("id").
ForEach(func(village *models.Village) error { ForEach(func(village *twmodel.Village) error {
index := searchByID(searchableByVillageID, village.ID) index := searchByID(searchableByVillageID, village.ID)
if index < 0 { if index < 0 {
idsToDelete = append(idsToDelete, village.ID) idsToDelete = append(idsToDelete, village.ID)
@ -68,7 +68,7 @@ func (w *workerDeleteNonExistentVillages) delete() error {
totalDeleted := 0 totalDeleted := 0
if len(idsToDelete) > 0 { if len(idsToDelete) > 0 {
result, err := w.db.Model(&models.Village{}).Where("id = ANY(?)", pg.Array(idsToDelete)).Delete() result, err := w.db.Model(&twmodel.Village{}).Where("id = ANY(?)", pg.Array(idsToDelete)).Delete()
if err != nil { if err != nil {
return errors.Wrap(err, "workerDeleteNonExistentVillages.delete") return errors.Wrap(err, "workerDeleteNonExistentVillages.delete")
} }

View File

@ -2,9 +2,9 @@ package tasks
import ( import (
"context" "context"
"fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/shared/tw/twurlbuilder"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
) )
@ -14,11 +14,11 @@ type taskUpdateEnnoblements struct {
} }
func (t *taskUpdateEnnoblements) execute() error { func (t *taskUpdateEnnoblements) execute() error {
var servers []*models.Server var servers []*twmodel.Server
err := t.db. err := t.db.
Model(&servers). Model(&servers).
Relation("Version"). Relation("Version").
Where("status = ?", models.ServerStatusOpen). Where("status = ?", twmodel.ServerStatusOpen).
Select() Select()
if err != nil { if err != nil {
err = errors.Wrap(err, "taskUpdateEnnoblements.execute") err = errors.Wrap(err, "taskUpdateEnnoblements.execute")
@ -31,7 +31,7 @@ func (t *taskUpdateEnnoblements) execute() error {
err := t.queue.Add( err := t.queue.Add(
queue.EnnoblementsQueue, queue.EnnoblementsQueue,
Get(TaskUpdateServerEnnoblements). Get(TaskUpdateServerEnnoblements).
WithArgs(context.Background(), fmt.Sprintf("https://%s.%s", server.Key, server.Version.Host), s), WithArgs(context.Background(), twurlbuilder.BuildServerURL(server.Key, server.Version.Host), s),
) )
if err != nil { if err != nil {
log.Warn( log.Warn(

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
@ -23,12 +23,12 @@ func (t *taskUpdateHistory) execute(timezone string) error {
} }
year, month, day := time.Now().In(location).Date() year, month, day := time.Now().In(location).Date()
date := time.Date(year, month, day, 1, 30, 0, 0, location) date := time.Date(year, month, day, 1, 30, 0, 0, location)
var servers []*models.Server var servers []*twmodel.Server
err = t.db. err = t.db.
Model(&servers). Model(&servers).
Where( Where(
"status = ? AND (history_updated_at IS NULL OR history_updated_at < ?) AND timezone = ?", "status = ? AND (history_updated_at IS NULL OR history_updated_at < ?) AND timezone = ?",
models.ServerStatusOpen, twmodel.ServerStatusOpen,
date, date,
timezone, timezone,
). ).

View File

@ -5,8 +5,8 @@ import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm" "github.com/go-pg/pg/v10/orm"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twdataloader"
"github.com/tribalwarshelp/shared/tw/dataloader" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
) )
@ -14,7 +14,7 @@ type taskUpdateServerData struct {
*task *task
} }
func (t *taskUpdateServerData) execute(url string, server *models.Server) error { func (t *taskUpdateServerData) execute(url string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -24,7 +24,7 @@ func (t *taskUpdateServerData) execute(url string, server *models.Server) error
entry.Infof("taskUpdateServerData.execute: %s: Update of the server data has started...", server.Key) entry.Infof("taskUpdateServerData.execute: %s: Update of the server data has started...", server.Key)
err := (&workerUpdateServerData{ err := (&workerUpdateServerData{
db: t.db.WithParam("SERVER", pg.Safe(server.Key)), db: t.db.WithParam("SERVER", pg.Safe(server.Key)),
dataloader: newDataloader(url), dataloader: newServerDataLoader(url),
server: server, server: server,
}).update() }).update()
if err != nil { if err != nil {
@ -42,9 +42,9 @@ func (t *taskUpdateServerData) execute(url string, server *models.Server) error
return nil return nil
} }
func (t *taskUpdateServerData) validatePayload(server *models.Server) error { func (t *taskUpdateServerData) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.New("taskUpdateServerData.validatePayload: Expected *models.Server, got nil") return errors.New("taskUpdateServerData.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -52,20 +52,20 @@ func (t *taskUpdateServerData) validatePayload(server *models.Server) error {
type workerUpdateServerData struct { type workerUpdateServerData struct {
db *pg.DB db *pg.DB
dataloader dataloader.DataLoader dataloader twdataloader.ServerDataLoader
server *models.Server server *twmodel.Server
} }
type loadPlayersResult struct { type loadPlayersResult struct {
ids []int ids []int
players []*models.Player players []*twmodel.Player
playersToServer []*models.PlayerToServer playersToServer []*twmodel.PlayerToServer
deletedPlayers []int deletedPlayers []int
numberOfPlayers int numberOfPlayers int
} }
func (w *workerUpdateServerData) loadPlayers(od map[int]*models.OpponentsDefeated) (loadPlayersResult, error) { func (w *workerUpdateServerData) loadPlayers(od map[int]*twmodel.OpponentsDefeated) (loadPlayersResult, error) {
var ennoblements []*models.Ennoblement var ennoblements []*twmodel.Ennoblement
result := loadPlayersResult{} result := loadPlayersResult{}
if err := w.db. if err := w.db.
Model(&ennoblements). Model(&ennoblements).
@ -83,7 +83,7 @@ func (w *workerUpdateServerData) loadPlayers(od map[int]*models.OpponentsDefeate
result.numberOfPlayers = len(result.players) result.numberOfPlayers = len(result.players)
now := time.Now() now := time.Now()
result.playersToServer = make([]*models.PlayerToServer, result.numberOfPlayers) result.playersToServer = make([]*twmodel.PlayerToServer, result.numberOfPlayers)
result.ids = make([]int, result.numberOfPlayers) result.ids = make([]int, result.numberOfPlayers)
searchableByNewOwnerID := &ennoblementsSearchableByNewOwnerID{ennoblements} searchableByNewOwnerID := &ennoblementsSearchableByNewOwnerID{ennoblements}
for index, player := range result.players { for index, player := range result.players {
@ -99,7 +99,7 @@ func (w *workerUpdateServerData) loadPlayers(od map[int]*models.OpponentsDefeate
player.DailyGrowth = calcPlayerDailyGrowth(diffInDays, player.Points) player.DailyGrowth = calcPlayerDailyGrowth(diffInDays, player.Points)
} }
result.playersToServer[index] = &models.PlayerToServer{ result.playersToServer[index] = &twmodel.PlayerToServer{
PlayerID: player.ID, PlayerID: player.ID,
ServerKey: w.server.Key, ServerKey: w.server.Key,
} }
@ -109,10 +109,10 @@ func (w *workerUpdateServerData) loadPlayers(od map[int]*models.OpponentsDefeate
searchablePlayers := &playersSearchableByID{result.players} searchablePlayers := &playersSearchableByID{result.players}
if err := w.db. if err := w.db.
Model(&models.Player{}). Model(&twmodel.Player{}).
Column("id"). Column("id").
Where("exists = true"). Where("exists = true").
ForEach(func(player *models.Player) error { ForEach(func(player *twmodel.Player) error {
if index := searchByID(searchablePlayers, player.ID); index < 0 { if index := searchByID(searchablePlayers, player.ID); index < 0 {
result.deletedPlayers = append(result.deletedPlayers, player.ID) result.deletedPlayers = append(result.deletedPlayers, player.ID)
} }
@ -126,12 +126,12 @@ func (w *workerUpdateServerData) loadPlayers(od map[int]*models.OpponentsDefeate
type loadTribesResult struct { type loadTribesResult struct {
ids []int ids []int
tribes []*models.Tribe tribes []*twmodel.Tribe
deletedTribes []int deletedTribes []int
numberOfTribes int numberOfTribes int
} }
func (w *workerUpdateServerData) loadTribes(od map[int]*models.OpponentsDefeated, numberOfVillages int) (loadTribesResult, error) { func (w *workerUpdateServerData) loadTribes(od map[int]*twmodel.OpponentsDefeated, numberOfVillages int) (loadTribesResult, error) {
var err error var err error
result := loadTribesResult{} result := loadTribesResult{}
result.tribes, err = w.dataloader.LoadTribes() result.tribes, err = w.dataloader.LoadTribes()
@ -156,10 +156,10 @@ func (w *workerUpdateServerData) loadTribes(od map[int]*models.OpponentsDefeated
searchableTribes := &tribesSearchableByID{result.tribes} searchableTribes := &tribesSearchableByID{result.tribes}
if err := w.db. if err := w.db.
Model(&models.Tribe{}). Model(&twmodel.Tribe{}).
Column("id"). Column("id").
Where("exists = true"). Where("exists = true").
ForEach(func(tribe *models.Tribe) error { ForEach(func(tribe *twmodel.Tribe) error {
if index := searchByID(searchableTribes, tribe.ID); index < 0 { if index := searchByID(searchableTribes, tribe.ID); index < 0 {
result.deletedTribes = append(result.deletedTribes, tribe.ID) result.deletedTribes = append(result.deletedTribes, tribe.ID)
} }
@ -171,8 +171,8 @@ func (w *workerUpdateServerData) loadTribes(od map[int]*models.OpponentsDefeated
return result, nil return result, nil
} }
func (w *workerUpdateServerData) calculateODifference(od1 models.OpponentsDefeated, od2 models.OpponentsDefeated) models.OpponentsDefeated { func (w *workerUpdateServerData) calculateODifference(od1 twmodel.OpponentsDefeated, od2 twmodel.OpponentsDefeated) twmodel.OpponentsDefeated {
return models.OpponentsDefeated{ return twmodel.OpponentsDefeated{
RankAtt: (od1.RankAtt - od2.RankAtt) * -1, RankAtt: (od1.RankAtt - od2.RankAtt) * -1,
ScoreAtt: od1.ScoreAtt - od2.ScoreAtt, ScoreAtt: od1.ScoreAtt - od2.ScoreAtt,
RankDef: (od1.RankDef - od2.RankDef) * -1, RankDef: (od1.RankDef - od2.RankDef) * -1,
@ -185,16 +185,16 @@ func (w *workerUpdateServerData) calculateODifference(od1 models.OpponentsDefeat
} }
func (w *workerUpdateServerData) calculateTodaysTribeStats( func (w *workerUpdateServerData) calculateTodaysTribeStats(
tribes []*models.Tribe, tribes []*twmodel.Tribe,
history []*models.TribeHistory, history []*twmodel.TribeHistory,
) []*models.DailyTribeStats { ) []*twmodel.DailyTribeStats {
var todaysStats []*models.DailyTribeStats var todaysStats []*twmodel.DailyTribeStats
searchableTribes := &tribesSearchableByID{tribes} searchableTribes := &tribesSearchableByID{tribes}
for _, historyRecord := range history { for _, historyRecord := range history {
if index := searchByID(searchableTribes, historyRecord.TribeID); index != -1 { if index := searchByID(searchableTribes, historyRecord.TribeID); index != -1 {
tribe := tribes[index] tribe := tribes[index]
todaysStats = append(todaysStats, &models.DailyTribeStats{ todaysStats = append(todaysStats, &twmodel.DailyTribeStats{
TribeID: tribe.ID, TribeID: tribe.ID,
Members: tribe.TotalMembers - historyRecord.TotalMembers, Members: tribe.TotalMembers - historyRecord.TotalMembers,
Villages: tribe.TotalVillages - historyRecord.TotalVillages, Villages: tribe.TotalVillages - historyRecord.TotalVillages,
@ -212,16 +212,16 @@ func (w *workerUpdateServerData) calculateTodaysTribeStats(
} }
func (w *workerUpdateServerData) calculateDailyPlayerStats( func (w *workerUpdateServerData) calculateDailyPlayerStats(
players []*models.Player, players []*twmodel.Player,
history []*models.PlayerHistory, history []*twmodel.PlayerHistory,
) []*models.DailyPlayerStats { ) []*twmodel.DailyPlayerStats {
var todaysStats []*models.DailyPlayerStats var todaysStats []*twmodel.DailyPlayerStats
searchablePlayers := &playersSearchableByID{players} searchablePlayers := &playersSearchableByID{players}
for _, historyRecord := range history { for _, historyRecord := range history {
if index := searchByID(searchablePlayers, historyRecord.PlayerID); index != -1 { if index := searchByID(searchablePlayers, historyRecord.PlayerID); index != -1 {
player := players[index] player := players[index]
todaysStats = append(todaysStats, &models.DailyPlayerStats{ todaysStats = append(todaysStats, &twmodel.DailyPlayerStats{
PlayerID: player.ID, PlayerID: player.ID,
Villages: player.TotalVillages - historyRecord.TotalVillages, Villages: player.TotalVillages - historyRecord.TotalVillages,
Points: player.Points - historyRecord.Points, Points: player.Points - historyRecord.Points,
@ -281,7 +281,7 @@ func (w *workerUpdateServerData) update() error {
defer cancel() defer cancel()
return w.db.RunInTransaction(ctx, func(tx *pg.Tx) error { return w.db.RunInTransaction(ctx, func(tx *pg.Tx) error {
if len(tribesResult.deletedTribes) > 0 { if len(tribesResult.deletedTribes) > 0 {
if _, err := tx.Model(&models.Tribe{}). if _, err := tx.Model(&twmodel.Tribe{}).
Where("tribe.id = ANY (?)", pg.Array(tribesResult.deletedTribes)). Where("tribe.id = ANY (?)", pg.Array(tribesResult.deletedTribes)).
Set("exists = false"). Set("exists = false").
Set("deleted_at = now()"). Set("deleted_at = now()").
@ -309,7 +309,7 @@ func (w *workerUpdateServerData) update() error {
return errors.Wrap(err, "couldn't insert tribes") return errors.Wrap(err, "couldn't insert tribes")
} }
var tribesHistory []*models.TribeHistory var tribesHistory []*twmodel.TribeHistory
if err := tx. if err := tx.
Model(&tribesHistory). Model(&tribesHistory).
DistinctOn("tribe_id"). DistinctOn("tribe_id").
@ -339,7 +339,7 @@ func (w *workerUpdateServerData) update() error {
} }
if len(playersResult.deletedPlayers) > 0 { if len(playersResult.deletedPlayers) > 0 {
if _, err := tx.Model(&models.Player{}). if _, err := tx.Model(&twmodel.Player{}).
Where("player.id = ANY (?)", pg.Array(playersResult.deletedPlayers)). Where("player.id = ANY (?)", pg.Array(playersResult.deletedPlayers)).
Set("exists = false"). Set("exists = false").
Set("deleted_at = now()"). Set("deleted_at = now()").
@ -365,7 +365,7 @@ func (w *workerUpdateServerData) update() error {
return errors.Wrap(err, "couldn't insert players") return errors.Wrap(err, "couldn't insert players")
} }
var playerHistory []*models.PlayerHistory var playerHistory []*twmodel.PlayerHistory
if err := tx.Model(&playerHistory). if err := tx.Model(&playerHistory).
DistinctOn("player_id"). DistinctOn("player_id").
Column("player_history.*"). Column("player_history.*").

View File

@ -3,15 +3,15 @@ package tasks
import ( import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twdataloader"
"github.com/tribalwarshelp/shared/tw/dataloader" "github.com/tribalwarshelp/shared/tw/twmodel"
) )
type taskUpdateServerEnnoblements struct { type taskUpdateServerEnnoblements struct {
*task *task
} }
func (t *taskUpdateServerEnnoblements) execute(url string, server *models.Server) error { func (t *taskUpdateServerEnnoblements) execute(url string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -20,7 +20,7 @@ func (t *taskUpdateServerEnnoblements) execute(url string, server *models.Server
entry.Debugf("%s: update of the ennoblements has started...", server.Key) entry.Debugf("%s: update of the ennoblements has started...", server.Key)
err := (&workerUpdateServerEnnoblements{ err := (&workerUpdateServerEnnoblements{
db: t.db.WithParam("SERVER", pg.Safe(server.Key)), db: t.db.WithParam("SERVER", pg.Safe(server.Key)),
dataloader: newDataloader(url), dataloader: newServerDataLoader(url),
}).update() }).update()
if err != nil { if err != nil {
err = errors.Wrap(err, "taskUpdateServerEnnoblements.execute") err = errors.Wrap(err, "taskUpdateServerEnnoblements.execute")
@ -32,9 +32,9 @@ func (t *taskUpdateServerEnnoblements) execute(url string, server *models.Server
return nil return nil
} }
func (t *taskUpdateServerEnnoblements) validatePayload(server *models.Server) error { func (t *taskUpdateServerEnnoblements) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.Errorf("taskUpdateServerEnnoblements.validatePayload: Expected *models.Server, got nil") return errors.Errorf("taskUpdateServerEnnoblements.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -42,11 +42,11 @@ func (t *taskUpdateServerEnnoblements) validatePayload(server *models.Server) er
type workerUpdateServerEnnoblements struct { type workerUpdateServerEnnoblements struct {
db *pg.DB db *pg.DB
dataloader dataloader.DataLoader dataloader twdataloader.ServerDataLoader
} }
func (w *workerUpdateServerEnnoblements) loadEnnoblements() ([]*models.Ennoblement, error) { func (w *workerUpdateServerEnnoblements) loadEnnoblements() ([]*twmodel.Ennoblement, error) {
lastEnnoblement := &models.Ennoblement{} lastEnnoblement := &twmodel.Ennoblement{}
if err := w.db. if err := w.db.
Model(lastEnnoblement). Model(lastEnnoblement).
Limit(1). Limit(1).
@ -55,7 +55,7 @@ func (w *workerUpdateServerEnnoblements) loadEnnoblements() ([]*models.Ennobleme
return nil, errors.Wrapf(err, "couldn't load last ennoblement") return nil, errors.Wrapf(err, "couldn't load last ennoblement")
} }
return w.dataloader.LoadEnnoblements(&dataloader.LoadEnnoblementsConfig{ return w.dataloader.LoadEnnoblements(&twdataloader.LoadEnnoblementsConfig{
EnnobledAtGT: lastEnnoblement.EnnobledAt, EnnobledAtGT: lastEnnoblement.EnnobledAt,
}) })
} }

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
) )
@ -11,7 +11,7 @@ type taskUpdateServerHistory struct {
*task *task
} }
func (t *taskUpdateServerHistory) execute(timezone string, server *models.Server) error { func (t *taskUpdateServerHistory) execute(timezone string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -39,9 +39,9 @@ func (t *taskUpdateServerHistory) execute(timezone string, server *models.Server
return nil return nil
} }
func (t *taskUpdateServerHistory) validatePayload(server *models.Server) error { func (t *taskUpdateServerHistory) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.New("taskUpdateServerHistory.validatePayload: Expected *models.Server, got nil") return errors.New("taskUpdateServerHistory.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -49,21 +49,21 @@ func (t *taskUpdateServerHistory) validatePayload(server *models.Server) error {
type workerUpdateServerHistory struct { type workerUpdateServerHistory struct {
db *pg.DB db *pg.DB
server *models.Server server *twmodel.Server
location *time.Location location *time.Location
} }
func (w *workerUpdateServerHistory) update() error { func (w *workerUpdateServerHistory) update() error {
var players []*models.Player var players []*twmodel.Player
if err := w.db.Model(&players).Where("exists = true").Select(); err != nil { if err := w.db.Model(&players).Where("exists = true").Select(); err != nil {
return errors.Wrap(err, "couldn't load players") return errors.Wrap(err, "couldn't load players")
} }
now := time.Now().In(w.location) now := time.Now().In(w.location)
createDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) createDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC)
var ph []*models.PlayerHistory var ph []*twmodel.PlayerHistory
for _, player := range players { for _, player := range players {
ph = append(ph, &models.PlayerHistory{ ph = append(ph, &twmodel.PlayerHistory{
OpponentsDefeated: player.OpponentsDefeated, OpponentsDefeated: player.OpponentsDefeated,
PlayerID: player.ID, PlayerID: player.ID,
TotalVillages: player.TotalVillages, TotalVillages: player.TotalVillages,
@ -74,13 +74,13 @@ func (w *workerUpdateServerHistory) update() error {
}) })
} }
var tribes []*models.Tribe var tribes []*twmodel.Tribe
if err := w.db.Model(&tribes).Where("exists = true").Select(); err != nil { if err := w.db.Model(&tribes).Where("exists = true").Select(); err != nil {
return errors.Wrap(err, "couldn't load tribes") return errors.Wrap(err, "couldn't load tribes")
} }
var th []*models.TribeHistory var th []*twmodel.TribeHistory
for _, tribe := range tribes { for _, tribe := range tribes {
th = append(th, &models.TribeHistory{ th = append(th, &twmodel.TribeHistory{
OpponentsDefeated: tribe.OpponentsDefeated, OpponentsDefeated: tribe.OpponentsDefeated,
TribeID: tribe.ID, TribeID: tribe.ID,
TotalMembers: tribe.TotalMembers, TotalMembers: tribe.TotalMembers,
@ -97,7 +97,7 @@ func (w *workerUpdateServerHistory) update() error {
if err != nil { if err != nil {
return err return err
} }
defer func(s *models.Server) { defer func(s *twmodel.Server) {
if err := tx.Close(); err != nil { if err := tx.Close(); err != nil {
log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key)) log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key))
} }

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
) )
@ -11,7 +11,7 @@ type taskUpdateServerStats struct {
*task *task
} }
func (t *taskUpdateServerStats) execute(timezone string, server *models.Server) error { func (t *taskUpdateServerStats) execute(timezone string, server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -39,9 +39,9 @@ func (t *taskUpdateServerStats) execute(timezone string, server *models.Server)
return nil return nil
} }
func (t *taskUpdateServerStats) validatePayload(server *models.Server) error { func (t *taskUpdateServerStats) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.New("taskUpdateServerStats.validatePayload: Expected *models.Server, got nil") return errors.New("taskUpdateServerStats.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -49,51 +49,51 @@ func (t *taskUpdateServerStats) validatePayload(server *models.Server) error {
type workerUpdateServerStats struct { type workerUpdateServerStats struct {
db *pg.DB db *pg.DB
server *models.Server server *twmodel.Server
location *time.Location location *time.Location
} }
func (w *workerUpdateServerStats) prepare() (*models.ServerStats, error) { func (w *workerUpdateServerStats) prepare() (*twmodel.ServerStats, error) {
activePlayers, err := w.db.Model(&models.Player{}).Where("exists = true").Count() activePlayers, err := w.db.Model(&twmodel.Player{}).Where("exists = true").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count active players") return nil, errors.Wrap(err, "cannot count active players")
} }
inactivePlayers, err := w.db.Model(&models.Player{}).Where("exists = false").Count() inactivePlayers, err := w.db.Model(&twmodel.Player{}).Where("exists = false").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count inactive players") return nil, errors.Wrap(err, "cannot count inactive players")
} }
players := activePlayers + inactivePlayers players := activePlayers + inactivePlayers
activeTribes, err := w.db.Model(&models.Tribe{}).Where("exists = true").Count() activeTribes, err := w.db.Model(&twmodel.Tribe{}).Where("exists = true").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count active tribes") return nil, errors.Wrap(err, "cannot count active tribes")
} }
inactiveTribes, err := w.db.Model(&models.Tribe{}).Where("exists = false").Count() inactiveTribes, err := w.db.Model(&twmodel.Tribe{}).Where("exists = false").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count inactive tribes") return nil, errors.Wrap(err, "cannot count inactive tribes")
} }
tribes := activeTribes + inactiveTribes tribes := activeTribes + inactiveTribes
barbarianVillages, err := w.db.Model(&models.Village{}).Where("player_id = 0").Count() barbarianVillages, err := w.db.Model(&twmodel.Village{}).Where("player_id = 0").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count barbarian villages") return nil, errors.Wrap(err, "cannot count barbarian villages")
} }
bonusVillages, err := w.db.Model(&models.Village{}).Where("bonus <> 0").Count() bonusVillages, err := w.db.Model(&twmodel.Village{}).Where("bonus <> 0").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count bonus villages") return nil, errors.Wrap(err, "cannot count bonus villages")
} }
playerVillages, err := w.db.Model(&models.Village{}).Where("player_id <> 0").Count() playerVillages, err := w.db.Model(&twmodel.Village{}).Where("player_id <> 0").Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count player villages") return nil, errors.Wrap(err, "cannot count player villages")
} }
villages, err := w.db.Model(&models.Village{}).Count() villages, err := w.db.Model(&twmodel.Village{}).Count()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cannot count villages") return nil, errors.Wrap(err, "cannot count villages")
} }
now := time.Now().In(w.location) now := time.Now().In(w.location)
createDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) createDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC)
return &models.ServerStats{ return &twmodel.ServerStats{
ActivePlayers: activePlayers, ActivePlayers: activePlayers,
InactivePlayers: inactivePlayers, InactivePlayers: inactivePlayers,
Players: players, Players: players,
@ -120,7 +120,7 @@ func (w *workerUpdateServerStats) update() error {
if err != nil { if err != nil {
return err return err
} }
defer func(s *models.Server) { defer func(s *twmodel.Server) {
if err := tx.Close(); err != nil { if err := tx.Close(); err != nil {
log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key)) log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key))
} }

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
@ -23,12 +23,12 @@ func (t *taskUpdateStats) execute(timezone string) error {
} }
year, month, day := time.Now().In(location).Date() year, month, day := time.Now().In(location).Date()
date := time.Date(year, month, day, 1, 45, 0, 0, location) date := time.Date(year, month, day, 1, 45, 0, 0, location)
var servers []*models.Server var servers []*twmodel.Server
err = t.db. err = t.db.
Model(&servers). Model(&servers).
Where( Where(
"status = ? AND (stats_updated_at IS NULL OR stats_updated_at < ?) AND timezone = ?", "status = ? AND (stats_updated_at IS NULL OR stats_updated_at < ?) AND timezone = ?",
models.ServerStatusOpen, twmodel.ServerStatusOpen,
date, date,
location.String(), location.String(),
). ).

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/cron/internal/cron/queue" "github.com/tribalwarshelp/cron/internal/cron/queue"
) )
@ -13,7 +13,7 @@ type taskVacuum struct {
} }
func (t *taskVacuum) execute() error { func (t *taskVacuum) execute() error {
var servers []*models.Server var servers []*twmodel.Server
err := t.db. err := t.db.
Model(&servers). Model(&servers).
Select() Select()

View File

@ -3,7 +3,7 @@ package tasks
import ( import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
"time" "time"
) )
@ -15,7 +15,7 @@ type taskVacuumServerDB struct {
*task *task
} }
func (t *taskVacuumServerDB) execute(server *models.Server) error { func (t *taskVacuumServerDB) execute(server *twmodel.Server) error {
if err := t.validatePayload(server); err != nil { if err := t.validatePayload(server); err != nil {
log.Debug(err) log.Debug(err)
return nil return nil
@ -36,9 +36,9 @@ func (t *taskVacuumServerDB) execute(server *models.Server) error {
return nil return nil
} }
func (t *taskVacuumServerDB) validatePayload(server *models.Server) error { func (t *taskVacuumServerDB) validatePayload(server *twmodel.Server) error {
if server == nil { if server == nil {
return errors.New("taskVacuumServerDB.validatePayload: Expected *models.Server, got nil") return errors.New("taskVacuumServerDB.validatePayload: Expected *twmodel.Server, got nil")
} }
return nil return nil
@ -46,7 +46,7 @@ func (t *taskVacuumServerDB) validatePayload(server *models.Server) error {
type workerVacuumServerDB struct { type workerVacuumServerDB struct {
db *pg.DB db *pg.DB
server *models.Server server *twmodel.Server
} }
func (w *workerVacuumServerDB) vacuum() error { func (w *workerVacuumServerDB) vacuum() error {
@ -54,16 +54,16 @@ func (w *workerVacuumServerDB) vacuum() error {
if err != nil { if err != nil {
return err return err
} }
defer func(s *models.Server) { defer func(s *twmodel.Server) {
if err := tx.Close(); err != nil { if err := tx.Close(); err != nil {
log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key)) log.Warn(errors.Wrapf(err, "%s: Couldn't rollback the transaction", s.Key))
} }
}(w.server) }(w.server)
withNonExistentPlayers := w.db.Model(&models.Player{}).Column("id").Where("exists = false and NOW() - deleted_at > '14 days'") withNonExistentPlayers := w.db.Model(&twmodel.Player{}).Column("id").Where("exists = false and NOW() - deleted_at > '14 days'")
withNonExistentTribes := w.db.Model(&models.Tribe{}).Column("id").Where("exists = false and NOW() - deleted_at > '1 days'") withNonExistentTribes := w.db.Model(&twmodel.Tribe{}).Column("id").Where("exists = false and NOW() - deleted_at > '1 days'")
_, err = tx.Model(&models.PlayerHistory{}). _, err = tx.Model(&twmodel.PlayerHistory{}).
With("players", withNonExistentPlayers). With("players", withNonExistentPlayers).
Where("player_id IN (Select id FROM players) OR player_history.create_date < ?", time.Now().Add(-1*day*180)). Where("player_id IN (Select id FROM players) OR player_history.create_date < ?", time.Now().Add(-1*day*180)).
Delete() Delete()
@ -71,7 +71,7 @@ func (w *workerVacuumServerDB) vacuum() error {
return errors.Wrap(err, "couldn't delete the old player history records") return errors.Wrap(err, "couldn't delete the old player history records")
} }
_, err = tx.Model(&models.TribeHistory{}). _, err = tx.Model(&twmodel.TribeHistory{}).
With("tribes", withNonExistentTribes). With("tribes", withNonExistentTribes).
Where("tribe_id IN (Select id FROM tribes) OR tribe_history.create_date < ?", time.Now().Add(-1*day*180)). Where("tribe_id IN (Select id FROM tribes) OR tribe_history.create_date < ?", time.Now().Add(-1*day*180)).
Delete() Delete()
@ -79,7 +79,7 @@ func (w *workerVacuumServerDB) vacuum() error {
return errors.Wrap(err, "couldn't delete the old tribe history records") return errors.Wrap(err, "couldn't delete the old tribe history records")
} }
_, err = tx.Model(&models.DailyPlayerStats{}). _, err = tx.Model(&twmodel.DailyPlayerStats{}).
With("players", withNonExistentPlayers). With("players", withNonExistentPlayers).
Where("player_id IN (Select id FROM players) OR daily_player_stats.create_date < ?", time.Now().Add(-1*day*180)). Where("player_id IN (Select id FROM players) OR daily_player_stats.create_date < ?", time.Now().Add(-1*day*180)).
Delete() Delete()
@ -87,7 +87,7 @@ func (w *workerVacuumServerDB) vacuum() error {
return errors.Wrap(err, "couldn't delete the old player stats records") return errors.Wrap(err, "couldn't delete the old player stats records")
} }
_, err = tx.Model(&models.DailyTribeStats{}). _, err = tx.Model(&twmodel.DailyTribeStats{}).
With("tribes", withNonExistentTribes). With("tribes", withNonExistentTribes).
Where("tribe_id IN (Select id FROM tribes) OR daily_tribe_stats.create_date < ?", time.Now().Add(-1*day*180)). Where("tribe_id IN (Select id FROM tribes) OR daily_tribe_stats.create_date < ?", time.Now().Add(-1*day*180)).
Delete() Delete()

View File

@ -113,10 +113,7 @@ func Get(taskName string) *taskq.Task {
} }
func validateConfig(cfg *Config) error { func validateConfig(cfg *Config) error {
if cfg == nil { if cfg == nil || cfg.DB == nil {
return errors.New("Config hasn't been provided")
}
if cfg.DB == nil {
return errors.New("cfg.DB is required") return errors.New("cfg.DB is required")
} }
if cfg.Queue == nil { if cfg.Queue == nil {

View File

@ -1,35 +1,34 @@
package db package postgres
import ( import (
"fmt" "fmt"
gopglogrusquerylogger "github.com/Kichiyaki/go-pg-logrus-query-logger/v10" "github.com/Kichiyaki/go-pg-logrus-query-logger/v10"
"github.com/Kichiyaki/goutil/envutil"
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm" "github.com/go-pg/pg/v10/orm"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/tw/twmodel"
envutils "github.com/tribalwarshelp/cron/internal/utils/env"
) )
var log = logrus.WithField("package", "db") var log = logrus.WithField("package", "postgres")
type Config struct { type Config struct {
LogQueries bool LogQueries bool
} }
func New(cfg *Config) (*pg.DB, error) { func Connect(cfg *Config) (*pg.DB, error) {
db := pg.Connect(prepareOptions()) db := pg.Connect(prepareOptions())
if cfg != nil && cfg.LogQueries { if cfg != nil && cfg.LogQueries {
db.AddQueryHook(gopglogrusquerylogger.QueryLogger{ db.AddQueryHook(querylogger.Logger{
Log: log, Log: log,
MaxQueryLength: 5000, MaxQueryLength: 5000,
}) })
} }
if err := prepareDB(db); err != nil { if err := prepareDB(db); err != nil {
return nil, errors.Wrap(err, "New") return nil, errors.Wrap(err, "Connect")
} }
return db, nil return db, nil
@ -37,11 +36,11 @@ func New(cfg *Config) (*pg.DB, error) {
func prepareOptions() *pg.Options { func prepareOptions() *pg.Options {
return &pg.Options{ return &pg.Options{
User: envutils.GetenvString("DB_USER"), User: envutil.GetenvString("DB_USER"),
Password: envutils.GetenvString("DB_PASSWORD"), Password: envutil.GetenvString("DB_PASSWORD"),
Database: envutils.GetenvString("DB_NAME"), Database: envutil.GetenvString("DB_NAME"),
Addr: envutils.GetenvString("DB_HOST") + ":" + envutils.GetenvString("DB_PORT"), Addr: envutil.GetenvString("DB_HOST") + ":" + envutil.GetenvString("DB_PORT"),
PoolSize: envutils.GetenvInt("DB_POOL_SIZE"), PoolSize: envutil.GetenvInt("DB_POOL_SIZE"),
} }
} }
@ -57,11 +56,11 @@ func prepareDB(db *pg.DB) error {
}() }()
dbModels := []interface{}{ dbModels := []interface{}{
(*models.SpecialServer)(nil), (*twmodel.SpecialServer)(nil),
(*models.Server)(nil), (*twmodel.Server)(nil),
(*models.Version)(nil), (*twmodel.Version)(nil),
(*models.PlayerToServer)(nil), (*twmodel.PlayerToServer)(nil),
(*models.PlayerNameChange)(nil), (*twmodel.PlayerNameChange)(nil),
} }
for _, model := range dbModels { for _, model := range dbModels {
@ -105,7 +104,7 @@ func prepareDB(db *pg.DB) error {
return errors.Wrap(err, "Couldn't commit changes") return errors.Wrap(err, "Couldn't commit changes")
} }
var servers []*models.Server var servers []*twmodel.Server
if err := db.Model(&servers).Select(); err != nil { if err := db.Model(&servers).Select(); err != nil {
return errors.Wrap(err, "Couldn't load servers") return errors.Wrap(err, "Couldn't load servers")
} }
@ -119,7 +118,7 @@ func prepareDB(db *pg.DB) error {
return nil return nil
} }
func CreateSchema(db *pg.DB, server *models.Server) error { func CreateSchema(db *pg.DB, server *twmodel.Server) error {
return createSchema(db, server, false) return createSchema(db, server, false)
} }
@ -135,7 +134,7 @@ func SchemaExists(db *pg.DB, schemaName string) bool {
return exists return exists
} }
func createSchema(db *pg.DB, server *models.Server, init bool) error { func createSchema(db *pg.DB, server *twmodel.Server, init bool) error {
if !init && SchemaExists(db, server.Key) { if !init && SchemaExists(db, server.Key) {
return nil return nil
} }
@ -155,16 +154,16 @@ func createSchema(db *pg.DB, server *models.Server, init bool) error {
} }
dbModels := []interface{}{ dbModels := []interface{}{
(*models.Tribe)(nil), (*twmodel.Tribe)(nil),
(*models.Player)(nil), (*twmodel.Player)(nil),
(*models.Village)(nil), (*twmodel.Village)(nil),
(*models.Ennoblement)(nil), (*twmodel.Ennoblement)(nil),
(*models.ServerStats)(nil), (*twmodel.ServerStats)(nil),
(*models.TribeHistory)(nil), (*twmodel.TribeHistory)(nil),
(*models.PlayerHistory)(nil), (*twmodel.PlayerHistory)(nil),
(*models.TribeChange)(nil), (*twmodel.TribeChange)(nil),
(*models.DailyPlayerStats)(nil), (*twmodel.DailyPlayerStats)(nil),
(*models.DailyTribeStats)(nil), (*twmodel.DailyTribeStats)(nil),
} }
for _, model := range dbModels { for _, model := range dbModels {

View File

@ -1,4 +1,4 @@
package db package postgres
const ( const (
allSpecialServersPGInsertStatements = ` allSpecialServersPGInsertStatements = `

View File

@ -1,30 +0,0 @@
package envutils
import (
"os"
"strconv"
)
func GetenvInt(key string) int {
str := GetenvString(key)
if str == "" {
return 0
}
i, err := strconv.Atoi(str)
if err != nil {
return 0
}
return i
}
func GetenvBool(key string) bool {
str := GetenvString(key)
if str == "" {
return false
}
return str == "true" || str == "1"
}
func GetenvString(key string) string {
return os.Getenv(key)
}

28
main.go
View File

@ -2,6 +2,8 @@ package main
import ( import (
"context" "context"
"github.com/Kichiyaki/appmode"
"github.com/Kichiyaki/goutil/envutil"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"github.com/pkg/errors" "github.com/pkg/errors"
"os" "os"
@ -10,11 +12,9 @@ import (
"time" "time"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tribalwarshelp/shared/mode"
twhelpcron "github.com/tribalwarshelp/cron/internal/cron" twhelpcron "github.com/tribalwarshelp/cron/internal/cron"
"github.com/tribalwarshelp/cron/internal/db" "github.com/tribalwarshelp/cron/internal/postgres"
envutils "github.com/tribalwarshelp/cron/internal/utils/env"
"github.com/joho/godotenv" "github.com/joho/godotenv"
"github.com/robfig/cron/v3" "github.com/robfig/cron/v3"
@ -38,7 +38,7 @@ func main() {
} }
}() }()
dbConn, err := db.New(&db.Config{LogQueries: envutils.GetenvBool("LOG_DB_QUERIES")}) dbConn, err := postgres.Connect(&postgres.Config{LogQueries: envutil.GetenvBool("LOG_DB_QUERIES")})
if err != nil { if err != nil {
logrus.Fatal(errors.Wrap(err, "Couldn't connect to the db")) logrus.Fatal(errors.Wrap(err, "Couldn't connect to the db"))
} }
@ -50,9 +50,9 @@ func main() {
c, err := twhelpcron.New(&twhelpcron.Config{ c, err := twhelpcron.New(&twhelpcron.Config{
DB: dbConn, DB: dbConn,
RunOnInit: envutils.GetenvBool("RUN_ON_INIT"), RunOnInit: envutil.GetenvBool("RUN_ON_INIT"),
Redis: redisClient, Redis: redisClient,
WorkerLimit: envutils.GetenvInt("WORKER_LIMIT"), WorkerLimit: envutil.GetenvInt("WORKER_LIMIT"),
Opts: []cron.Option{ Opts: []cron.Option{
cron.WithChain( cron.WithChain(
cron.SkipIfStillRunning( cron.SkipIfStillRunning(
@ -68,7 +68,7 @@ func main() {
logrus.Fatal(err) logrus.Fatal(err)
} }
logrus.Info("Cron is running!") logrus.Info("Cron is up and running!")
channel := make(chan os.Signal, 1) channel := make(chan os.Signal, 1)
signal.Notify(channel, os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT) signal.Notify(channel, os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT)
@ -86,7 +86,7 @@ func setupENVs() error {
return errors.Wrap(err, "setupENVs") return errors.Wrap(err, "setupENVs")
} }
if mode.Get() == mode.DevelopmentMode { if appmode.Equals(appmode.DevelopmentMode) {
err := godotenv.Load(".env.local") err := godotenv.Load(".env.local")
if err != nil { if err != nil {
return errors.Wrap(err, "setupENVs") return errors.Wrap(err, "setupENVs")
@ -97,12 +97,12 @@ func setupENVs() error {
} }
func setupLogger() { func setupLogger() {
if mode.Get() == mode.DevelopmentMode { if appmode.Equals(appmode.DevelopmentMode) {
logrus.SetLevel(logrus.DebugLevel) logrus.SetLevel(logrus.DebugLevel)
} }
timestampFormat := "2006-01-02 15:04:05" timestampFormat := "2006-01-02 15:04:05"
if mode.Get() == mode.ProductionMode { if appmode.Equals(appmode.ProductionMode) {
customFormatter := new(logrus.JSONFormatter) customFormatter := new(logrus.JSONFormatter)
customFormatter.TimestampFormat = timestampFormat customFormatter.TimestampFormat = timestampFormat
logrus.SetFormatter(customFormatter) logrus.SetFormatter(customFormatter)
@ -116,10 +116,10 @@ func setupLogger() {
func initializeRedis() (redis.UniversalClient, error) { func initializeRedis() (redis.UniversalClient, error) {
client := redis.NewClient(&redis.Options{ client := redis.NewClient(&redis.Options{
Addr: envutils.GetenvString("REDIS_ADDR"), Addr: envutil.GetenvString("REDIS_ADDR"),
Username: envutils.GetenvString("REDIS_USERNAME"), Username: envutil.GetenvString("REDIS_USERNAME"),
Password: envutils.GetenvString("REDIS_PASSWORD"), Password: envutil.GetenvString("REDIS_PASSWORD"),
DB: envutils.GetenvInt("REDIS_DB"), DB: envutil.GetenvInt("REDIS_DB"),
}) })
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() defer cancel()