ws and pruner done!!!

This commit is contained in:
41666 2024-10-28 13:46:52 -07:00
parent c5cc245e25
commit 74add408e6
34 changed files with 1455 additions and 221 deletions

55
cmd/ws/ingest/ingest.go Normal file
View file

@ -0,0 +1,55 @@
package ingest
import (
"context"
"fmt"
"log"
"github.com/genudine/saerro-go/store"
"github.com/genudine/saerro-go/types"
)
type Ingest struct {
PlayerStore store.IPlayerStore
}
func (i *Ingest) TrackPop(ctx context.Context, event types.PopEvent) {
player := event.ToPlayer()
err := i.fixupPlayer(ctx, player)
if err != nil {
log.Println("ingest: player fixup failed, dropping event", err)
return
}
err = i.PlayerStore.Insert(ctx, player)
if err != nil {
log.Println("TrackPop Insert failed", err)
}
}
func (i *Ingest) fixupPlayer(ctx context.Context, player *types.Player) error {
if player.ClassName != "unknown" && player.FactionID != 0 {
// all fixups are done
return nil
}
storedPlayer, err := i.PlayerStore.GetOne(ctx, player.CharacterID)
if err != nil {
return fmt.Errorf("ingest: fixupPlayer: fetching player %s failed: %w", player.CharacterID, err)
}
// probably VehicleDestroy
if player.ClassName == "unknown" {
// TODO: maybe get this from census, profile_id
player.ClassName = storedPlayer.ClassName
}
// probably PS4
if player.FactionID == 0 {
// TODO: get this from census
player.FactionID = storedPlayer.FactionID
}
return nil
}

View file

@ -0,0 +1,84 @@
package ingest_test
import (
"context"
"errors"
"testing"
"time"
"github.com/genudine/saerro-go/cmd/ws/ingest"
"github.com/genudine/saerro-go/store/storemock"
"github.com/genudine/saerro-go/translators"
"github.com/genudine/saerro-go/types"
)
func mkIngest(t *testing.T) (context.Context, *ingest.Ingest, *storemock.MockPlayerStore) {
t.Helper()
ps := new(storemock.MockPlayerStore)
ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
t.Cleanup(cancel)
i := &ingest.Ingest{
PlayerStore: ps,
}
return ctx, i, ps
}
func TestTrackPopHappyPath(t *testing.T) {
ctx, i, ps := mkIngest(t)
// Combat Medic on Emerald
event := types.PopEvent{
WorldID: 17,
ZoneID: 4,
TeamID: types.TR,
LoadoutID: 4,
ClassName: translators.CombatMedic,
CharacterID: "aaaa",
}
eventPlayer := event.ToPlayer()
ps.On("Insert", ctx, eventPlayer).Return(nil).Once()
i.TrackPop(ctx, event)
}
func TestTrackPopFixup(t *testing.T) {
ctx, i, ps := mkIngest(t)
event := types.PopEvent{
WorldID: 17,
ZoneID: 4,
TeamID: 0,
ClassName: "unknown",
CharacterID: "bbbb",
}
pastEventPlayer := event.ToPlayer()
pastEventPlayer.ClassName = "light_assault"
pastEventPlayer.FactionID = types.VS
ps.On("GetOne", ctx, event.CharacterID).Return(pastEventPlayer, nil).Once()
ps.On("Insert", ctx, pastEventPlayer).Return(nil).Once()
i.TrackPop(ctx, event)
}
func TestTrackPopFixupFailed(t *testing.T) {
ctx, i, ps := mkIngest(t)
event := types.PopEvent{
WorldID: 17,
ZoneID: 4,
TeamID: 0,
ClassName: "unknown",
CharacterID: "bbbb",
}
ps.On("GetOne", ctx, event.CharacterID).Return(nil, errors.New("ingest fixup failed")).Once()
i.TrackPop(ctx, event)
}