Skip to content

Commit efd1d6f

Browse files
authored
Merge pull request #21 from myrunes/dev
add asset crawler
2 parents cb7b62e + 2376928 commit efd1d6f

File tree

26 files changed

+694
-122
lines changed

26 files changed

+694
-122
lines changed

.github/workflows/main.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ jobs:
1212
runs-on: ubuntu-latest
1313
steps:
1414

15-
- name: Set up Go 1.13
15+
- name: Set up Go
1616
uses: actions/setup-go@v1
1717
with:
18-
go-version: 1.13
19-
id: go
18+
go-version: ^1.14
2019

2120
- name: Check out code
2221
uses: actions/checkout@v1

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ yarn-error.log*
4343
*.sln
4444
*.sw?
4545

46-
__debug_bin
46+
__debug_bin
47+
48+
fsdata/

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.13-alpine as build
1+
FROM golang:1.14-alpine as build
22
ARG RELEASE=TRUE
33
WORKDIR /var/myrunes
44
ADD . .

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ lint:
7272
PHONY += run
7373
run:
7474
$(GO) run -v \
75-
$(CURDIR)/cmd/server/*.go -c $(CONFIG)
75+
$(CURDIR)/cmd/server/*.go -c $(CONFIG) -skipFetch
7676

7777
PHONY += cleanup
7878
cleanup:

cmd/server/main.go

+100-19
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,95 @@
11
package main
22

33
import (
4+
"errors"
45
"flag"
56
"os"
67
"os/signal"
78
"strings"
89
"syscall"
10+
"time"
911

12+
"github.com/myrunes/backend/pkg/ddragon"
13+
"github.com/myrunes/backend/pkg/lifecycletimer"
14+
15+
"github.com/myrunes/backend/internal/assets"
1016
"github.com/myrunes/backend/internal/caching"
1117
"github.com/myrunes/backend/internal/config"
1218
"github.com/myrunes/backend/internal/database"
13-
"github.com/myrunes/backend/internal/ddragon"
1419
"github.com/myrunes/backend/internal/logger"
1520
"github.com/myrunes/backend/internal/mailserver"
21+
"github.com/myrunes/backend/internal/storage"
1622
"github.com/myrunes/backend/internal/webserver"
1723
)
1824

1925
var (
20-
flagConfig = flag.String("c", "config.yml", "config file location")
26+
flagConfig = flag.String("c", "config.yml", "config file location")
27+
flagSkipFetch = flag.Bool("skipFetch", false, "skip avatar asset fetching")
2128
)
2229

30+
func initStorage(c *config.Main) (st storage.Middleware, err error) {
31+
var cfg interface{}
32+
33+
switch c.Storage.Typ {
34+
case "file", "fs":
35+
st = new(storage.File)
36+
cfg = *c.Storage.File
37+
case "minio", "s3":
38+
st = new(storage.Minio)
39+
cfg = *c.Storage.Minio
40+
default:
41+
return nil, errors.New("invalid storage type")
42+
}
43+
44+
if cfg == nil {
45+
return nil, errors.New("invalid storage config")
46+
}
47+
48+
err = st.Init(cfg)
49+
50+
return
51+
}
52+
53+
func fetchAssets(a *assets.AvatarHandler) error {
54+
if *flagSkipFetch {
55+
return nil
56+
}
57+
58+
cChamps := make(chan string)
59+
cError := make(chan error)
60+
61+
go a.FetchAll(cChamps, cError)
62+
63+
go func() {
64+
for _, c := range ddragon.DDragonInstance.Champions {
65+
cChamps <- c.UID
66+
}
67+
close(cChamps)
68+
}()
69+
70+
for err := range cError {
71+
if err != nil {
72+
return err
73+
}
74+
}
75+
76+
return nil
77+
}
78+
79+
func refetch(a *assets.AvatarHandler) {
80+
var err error
81+
82+
logger.Info("DDRAGON :: refetch")
83+
if ddragon.DDragonInstance, err = ddragon.Fetch("latest"); err != nil {
84+
logger.Error("DDRAGON :: failed polling data from ddragon: %s", err.Error())
85+
}
86+
87+
logger.Info("ASSETHANDLER :: refetch")
88+
if err = fetchAssets(a); err != nil {
89+
logger.Fatal("ASSETHANDLER :: failed fetching assets: %s", err.Error())
90+
}
91+
}
92+
2393
func main() {
2494
flag.Parse()
2595

@@ -79,14 +149,31 @@ func main() {
79149
db.Close()
80150
}()
81151

82-
logger.Info("MAILSERVER :: initialization")
83-
ms, err := mailserver.NewMailServer(cfg.MailServer, "[email protected]", "myrunes")
152+
logger.Info("STORAGE :: initialization")
153+
st, err := initStorage(cfg)
84154
if err != nil {
85-
logger.Fatal("MAILSERVER :: failed connecting to mail account: %s", err.Error())
155+
logger.Fatal("STORAGE :: failed initializing storage: %s", err.Error())
156+
}
157+
158+
logger.Info("ASSETHANDLER :: initialization")
159+
avatarAssetsHandler := assets.NewAvatarHandler(st)
160+
if err = fetchAssets(avatarAssetsHandler); err != nil {
161+
logger.Fatal("ASSETHANDLER :: failed fetching assets: %s", err.Error())
162+
}
163+
164+
var ms *mailserver.MailServer
165+
if cfg.MailServer != nil {
166+
logger.Info("MAILSERVER :: initialization")
167+
ms, err = mailserver.NewMailServer(cfg.MailServer, "[email protected]", "myrunes")
168+
if err != nil {
169+
logger.Fatal("MAILSERVER :: failed connecting to mail account: %s", err.Error())
170+
}
171+
logger.Info("MAILSERVER :: started")
172+
} else {
173+
logger.Warning("MAILSERVER :: mail server is disabled due to missing configuration")
86174
}
87-
logger.Info("MAILSERVER :: started")
88175

89-
var cache caching.Middleware
176+
var cache caching.CacheMiddleware
90177
if cfg.Redis != nil && cfg.Redis.Enabled {
91178
cache = caching.NewRedis(cfg.Redis)
92179
} else {
@@ -95,7 +182,7 @@ func main() {
95182
cache.SetDatabase(db)
96183

97184
logger.Info("WEBSERVER :: initialization")
98-
ws, err := webserver.NewWebServer(db, cache, ms, cfg.WebServer)
185+
ws, err := webserver.NewWebServer(db, cache, ms, avatarAssetsHandler, cfg.WebServer)
99186
if err != nil {
100187
logger.Fatal("WEBSERVER :: failed creating web server: %s", err.Error())
101188
}
@@ -106,17 +193,11 @@ func main() {
106193
}()
107194
logger.Info("WEBSERVER :: started")
108195

109-
// Lifecycle Timer was used to clean up expierd
110-
// sessions which is no more necessary after
111-
// implementation of JWT tokens.
112-
// Just keeping this here in case of this may
113-
// be needed some time later.
114-
// lct := lifecycletimer.New(5 * time.Minute).
115-
// Handle(func() {
116-
// }).
117-
// Start()
118-
// defer lct.Stop()
119-
// logger.Info("LIFECYCLETIMER :: started")
196+
lct := lifecycletimer.New(24 * time.Hour).
197+
Handle(func() { refetch(avatarAssetsHandler) }).
198+
Start()
199+
defer lct.Stop()
200+
logger.Info("LIFECYCLETIMER :: started")
120201

121202
sc := make(chan os.Signal, 1)
122203
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)

cmd/testing/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package main
33
import (
44
"fmt"
55

6-
"github.com/myrunes/backend/internal/ddragon"
6+
"github.com/myrunes/backend/pkg/ddragon"
77
)
88

99
func main() {

go.mod

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
module github.com/myrunes/backend
22

3-
go 1.13
3+
go 1.14
44

55
require (
66
github.com/alexedwards/argon2id v0.0.0-20200420065805-90c52fcb498a
77
github.com/bwmarrin/snowflake v0.3.0
88
github.com/dgrijalva/jwt-go v3.2.0+incompatible
99
github.com/ghodss/yaml v1.0.0
10+
github.com/go-ini/ini v1.60.2 // indirect
1011
github.com/go-ozzo/ozzo-routing v2.1.4+incompatible // indirect
11-
github.com/go-redis/redis v6.15.7+incompatible
12-
github.com/golang/gddo v0.0.0-20200324184333-3c2cc9a6329d // indirect
13-
github.com/onsi/ginkgo v1.12.0 // indirect
14-
github.com/onsi/gomega v1.9.0 // indirect
12+
github.com/go-redis/redis v6.15.9+incompatible
13+
github.com/minio/minio-go v6.0.14+incompatible
14+
github.com/mitchellh/go-homedir v1.1.0 // indirect
1515
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
1616
github.com/qiangxue/fasthttp-routing v0.0.0-20160225050629-6ccdc2a18d87
17-
github.com/valyala/fasthttp v1.12.0
17+
github.com/valyala/fasthttp v1.15.1
1818
github.com/zekroTJA/ratelimit v0.0.0-20190321090824-219ca33049a5
19-
github.com/zekroTJA/timedmap v0.0.0-20200421070859-4302645f33f5
20-
go.mongodb.org/mongo-driver v1.3.2
21-
golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a
19+
github.com/zekroTJA/shinpuru v0.0.0-20200829092918-bf62c98441a9
20+
github.com/zekroTJA/timedmap v1.2.0
21+
go.mongodb.org/mongo-driver v1.3.3
22+
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
2223
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
2324
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
2425
)

0 commit comments

Comments
 (0)