Add more gitignore
This commit is contained in:
@ -11,11 +11,6 @@ type CaptureService struct {
|
||||
p models.Persistence
|
||||
}
|
||||
|
||||
var mockCaptures = []models.Capture{
|
||||
{ID: 1, Host: "80.57.28.137", Port: "28960", Active: true, Name: "Gungame HAW-LAN 11", Start: time.Now().Add(-1 * time.Hour)},
|
||||
{ID: 1, Host: "80.57.28.137", Port: "28960", Active: true, Name: "Gungame HAW-LAN 12", Start: time.Now().Add(-5 * time.Minute)},
|
||||
}
|
||||
|
||||
func NewCaptureService(persistence models.Persistence) *CaptureService {
|
||||
return &CaptureService{
|
||||
p: persistence,
|
||||
@ -26,6 +21,10 @@ func (cs *CaptureService) CreateCapture(ctx context.Context, capture *models.Cap
|
||||
return cs.p.CreateCapture(ctx, capture)
|
||||
}
|
||||
|
||||
func (cs *CaptureService) DeleteCapture(ctx context.Context, id int64) error {
|
||||
return cs.p.DeleteCapture(ctx, id)
|
||||
}
|
||||
|
||||
func (cs *CaptureService) GetActiveCapures(ctx context.Context) ([]models.Capture, error) {
|
||||
captures, err := cs.p.GetCaptures(ctx)
|
||||
if err != nil {
|
||||
@ -42,26 +41,20 @@ func (cs *CaptureService) GetActiveCapures(ctx context.Context) ([]models.Captur
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (cs *CaptureService) GetCaptureById(id int) (*models.Capture, error) {
|
||||
capture := mockCaptures[0]
|
||||
func (cs *CaptureService) GetServerStatus(ctx context.Context, capture *models.Capture) (*models.CoD4ServerStatus, error) {
|
||||
server, err := models.NewCOD4ServerStatus(capture.Host, capture.Port, time.Second)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
status, err := server.GetServerStatus()
|
||||
return server.GetServerStatus()
|
||||
}
|
||||
|
||||
func (cs *CaptureService) GetCaptureById(ctx context.Context, id int64) (*models.Capture, error) {
|
||||
capture, err := cs.p.GetCapturesByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
capture.MapScores = []models.MapScore{
|
||||
{
|
||||
ID: 0,
|
||||
StartTime: status.MapStartTime,
|
||||
Map: status.MapName,
|
||||
ScoreList: status.Score,
|
||||
},
|
||||
}
|
||||
|
||||
return &capture, nil
|
||||
return capture, nil
|
||||
}
|
||||
|
||||
97
services/scanner.go
Normal file
97
services/scanner.go
Normal file
@ -0,0 +1,97 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"gitea.henriburau.de/haw-lan/cod4watcher/models"
|
||||
)
|
||||
|
||||
type Scanner struct {
|
||||
p models.Persistence
|
||||
done chan bool
|
||||
interval time.Duration
|
||||
}
|
||||
|
||||
func NewScanner(p models.Persistence, interval time.Duration, done chan bool) (*Scanner, error) {
|
||||
return &Scanner{
|
||||
p, done, interval,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Scanner) Scan() {
|
||||
ticker := time.NewTicker(s.interval)
|
||||
for {
|
||||
select {
|
||||
case <-s.done:
|
||||
return
|
||||
case <-ticker.C:
|
||||
ctx := context.Background()
|
||||
slog.Info("starting update")
|
||||
|
||||
captures, err := s.p.GetCaptures(ctx)
|
||||
if err != nil {
|
||||
slog.Error("cannot get captures", "err", err)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, capture := range captures {
|
||||
if capture.Active {
|
||||
err := s.fetchInformation(ctx, capture)
|
||||
if err != nil {
|
||||
slog.Error("failed to update captures", "err", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *Scanner) fetchInformation(ctx context.Context, capture models.Capture) error {
|
||||
server, err := models.NewCOD4ServerStatus(capture.Host, capture.Port, time.Second)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
status, err := server.GetServerStatus()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
slog.Info("fetched data", "host", capture.Host, "map", status.MapName)
|
||||
|
||||
recentMap, err := s.p.GetRecentMapScore(ctx, capture.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if recentMap == nil || recentMap.StartTime.Before(status.MapStartTime) {
|
||||
newMap := models.MapScore{
|
||||
CaptureID: capture.ID,
|
||||
StartTime: status.MapStartTime,
|
||||
Map: status.MapName,
|
||||
}
|
||||
|
||||
err := s.p.CreateMapScore(ctx, &newMap)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
recentMap, err = s.p.GetRecentMapScore(ctx, capture.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var scores []models.Score
|
||||
for _, score := range status.Score {
|
||||
score.MapScoreID = recentMap.ID
|
||||
scores = append(scores, score)
|
||||
}
|
||||
|
||||
return s.p.CreateOrUpdateScores(ctx, scores)
|
||||
}
|
||||
Reference in New Issue
Block a user