refactored some functions, added demo download retry
This commit is contained in:
69
main.go
69
main.go
@@ -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
|
||||
|
Reference in New Issue
Block a user