refactored some functions, added demo download retry

This commit is contained in:
2021-10-09 19:10:38 +02:00
parent 15b273f052
commit e938b05f52
13 changed files with 242 additions and 322 deletions

69
main.go
View File

@@ -37,8 +37,6 @@ var (
db *utils.DBWithLock
rdb *redis.Client
rdc *cache.Cache
sendGC chan *csgo.Demo
demoParser = &csgo.DemoParser{}
firstHK = true
rL ratelimit.Limiter
configFlag = flag.String("config", "config.yaml", "Set config to use")
@@ -89,6 +87,7 @@ func housekeeping() {
}
firstHK = false
// update players from steam
db.Lock.RLock()
tPlayerNeedSteamUpdate, err := db.Client.Player.Query().Where(
player.SteamUpdatedLTE(time.Now().UTC().AddDate(0, 0, -1)),
@@ -103,6 +102,7 @@ func housekeeping() {
_, err = utils.UpdatePlayerFromSteam(tPlayer, conf.Steam.APIKey, db.Lock, rL)
}
// getting new sharecodes
if !demoLoader.GCReady {
log.Warningf("[HK] GC not ready, skipping sharecode refresh")
continue
@@ -131,11 +131,28 @@ func housekeeping() {
}
for _, code := range shareCodes {
sendGC <- &csgo.Demo{
err := demoLoader.LoadDemo(&csgo.Demo{
ShareCode: code,
})
if err != nil {
log.Warningf("[HK] Failure to queue match: %v", err)
}
}
}
// try parsing demos not parsed
tMatches, err := db.Client.Match.Query().Where(match.And(match.DateGT(time.Now().UTC().AddDate(0, 0, -30)), match.DemoParsed(false))).All(context.Background())
if err != nil {
log.Warningf("[HK] Failure getting matches to retry parsing: %v", err)
continue
}
for _, m := range tMatches {
err := demoLoader.LoadDemo(&csgo.Demo{MatchId: m.ID, ShareCode: m.ShareCode})
if err != nil {
log.Warningf("[HK] Failure trying to parse match %d: %v", m.ID, err)
}
}
}
}
@@ -294,7 +311,12 @@ func postPlayerTrackMe(w http.ResponseWriter, r *http.Request) {
}
if shareCode != "" && utils.ShareCodeRegEx.MatchString(shareCode) {
sendGC <- &csgo.Demo{ShareCode: shareCode}
err := demoLoader.LoadDemo(&csgo.Demo{ShareCode: shareCode})
if err != nil {
log.Warningf("[PPTM] unable to queue match: %v", err)
w.WriteHeader(http.StatusServiceUnavailable)
return
}
}
w.WriteHeader(http.StatusOK)
@@ -310,8 +332,13 @@ func getMatchParse(w http.ResponseWriter, r *http.Request) {
return
}
sendGC <- &csgo.Demo{
err := demoLoader.LoadDemo(&csgo.Demo{
ShareCode: shareCode,
})
if err != nil {
log.Warningf("[PPTM] unable to queue match: %v", err)
w.WriteHeader(http.StatusServiceUnavailable)
return
}
w.WriteHeader(http.StatusOK)
@@ -407,13 +434,19 @@ func main() {
flag.Parse()
confStr, err := os.ReadFile(*configFlag)
utils.Check(err)
if err != nil {
log.Fatalf("Unable to open config: %v", err)
}
err = yaml.Unmarshal(confStr, &conf)
utils.Check(err)
if err != nil {
log.Fatalf("Unable to parse config: %v", err)
}
lvl, err := log.ParseLevel(conf.Logging.Level)
utils.Check(err)
if err != nil {
log.Fatalf("Failure setting logging level: %v", err)
}
log.SetLevel(lvl)
if *journalLogFlag {
journalhook.Enable()
@@ -428,7 +461,7 @@ func main() {
log.Panicf("Failed to open database %s: %v", "opencsgo.db", err)
}
defer func(dbSQLite *ent.Client) {
utils.Check(dbSQLite.Close())
_ = dbSQLite.Close()
}(db.Client)
if err := db.Client.Schema.Create(context.Background(), migrate.WithDropIndex(true), migrate.WithDropColumn(true)); err != nil {
@@ -447,8 +480,21 @@ func main() {
})
rL = ratelimit.New(conf.Steam.RatePerSecond)
// setup GC
err = demoLoader.Setup(conf.Steam.Username, conf.Steam.Password, *authCodeFlag, conf.Steam.Sentry, conf.Steam.LoginKey, conf.Steam.ServerList)
err = demoLoader.Setup(&csgo.DemoMatchLoaderConfig{
Username: conf.Steam.Username,
Password: conf.Steam.Password,
AuthCode: *authCodeFlag,
Sentry: conf.Steam.Sentry,
LoginKey: conf.Steam.LoginKey,
ServerList: conf.Steam.ServerList,
Db: db.Client,
Lock: db.Lock,
Worker: conf.Parser.Worker,
ApiKey: conf.Steam.APIKey,
RateLimit: rL,
})
if err != nil {
log.Fatalf("Unbale to setup DemoLoader: %v", err)
}
@@ -459,9 +505,6 @@ func main() {
}
log.Info("GC ready, starting HTTP server")
sendGC = make(chan *csgo.Demo, 100)
utils.Check(demoParser.Setup(db.Client, db.Lock, conf.Parser.Worker))
go utils.GCInfoParser(sendGC, demoLoader, demoParser, db, conf.Steam.APIKey, rL)
go housekeeping()
// Define routes