sync
This commit is contained in:
parent
0fa1de3b4e
commit
a755b4d2c8
6 changed files with 59 additions and 15 deletions
|
@ -10,23 +10,25 @@ import (
|
||||||
"github.com/genudine/saerro-go/types"
|
"github.com/genudine/saerro-go/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getEventHandlerTestShim(t *testing.T) (EventHandler, context.Context, *storemock.MockPlayerStore) {
|
func getEventHandlerTestShim(t *testing.T) (EventHandler, context.Context, *storemock.MockPlayerStore, *storemock.MockVehicleStore) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
ps := new(storemock.MockPlayerStore)
|
ps := new(storemock.MockPlayerStore)
|
||||||
|
vs := new(storemock.MockVehicleStore)
|
||||||
|
|
||||||
return EventHandler{
|
return EventHandler{
|
||||||
Ingest: &ingest.Ingest{
|
Ingest: &ingest.Ingest{
|
||||||
PlayerStore: ps,
|
PlayerStore: ps,
|
||||||
|
VehicleStore: vs,
|
||||||
},
|
},
|
||||||
}, ctx, ps
|
}, ctx, ps, vs
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleDeath(t *testing.T) {
|
func TestHandleDeath(t *testing.T) {
|
||||||
eh, ctx, ps := getEventHandlerTestShim(t)
|
eh, ctx, ps, _ := getEventHandlerTestShim(t)
|
||||||
|
|
||||||
event := types.ESSEvent{
|
event := types.ESSEvent{
|
||||||
EventName: "Death",
|
EventName: "Death",
|
||||||
|
@ -52,7 +54,7 @@ func TestHandleDeath(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleExperience(t *testing.T) {
|
func TestHandleExperience(t *testing.T) {
|
||||||
eh, ctx, ps := getEventHandlerTestShim(t)
|
eh, ctx, ps, vs := getEventHandlerTestShim(t)
|
||||||
|
|
||||||
event := types.ESSEvent{
|
event := types.ESSEvent{
|
||||||
EventName: "GainExperience",
|
EventName: "GainExperience",
|
||||||
|
@ -66,14 +68,17 @@ func TestHandleExperience(t *testing.T) {
|
||||||
ExperienceID: 674,
|
ExperienceID: 674,
|
||||||
}
|
}
|
||||||
|
|
||||||
p := types.PopEventFromESSEvent(event, false).ToPlayer()
|
p := types.PopEventFromESSEvent(event, false)
|
||||||
ps.On("Insert", ctx, p).Return(nil)
|
v := p.ToVehicle()
|
||||||
|
v.VehicleName = "ant" // exp event translation
|
||||||
|
ps.On("Insert", ctx, p.ToPlayer()).Return(nil)
|
||||||
|
vs.On("Insert", ctx, v).Return(nil)
|
||||||
|
|
||||||
eh.HandleExperience(ctx, event)
|
eh.HandleExperience(ctx, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleAnalytics(t *testing.T) {
|
func TestHandleAnalytics(t *testing.T) {
|
||||||
eh, ctx, _ := getEventHandlerTestShim(t)
|
eh, ctx, _, _ := getEventHandlerTestShim(t)
|
||||||
event := types.ESSEvent{
|
event := types.ESSEvent{
|
||||||
EventName: "GainExperience",
|
EventName: "GainExperience",
|
||||||
WorldID: 17,
|
WorldID: 17,
|
||||||
|
@ -90,7 +95,7 @@ func TestHandleAnalytics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleEvent(t *testing.T) {
|
func TestHandleEvent(t *testing.T) {
|
||||||
eh, ctx, ps := getEventHandlerTestShim(t)
|
eh, ctx, ps, vs := getEventHandlerTestShim(t)
|
||||||
|
|
||||||
events := []types.ESSEvent{
|
events := []types.ESSEvent{
|
||||||
{
|
{
|
||||||
|
@ -124,11 +129,18 @@ func TestHandleEvent(t *testing.T) {
|
||||||
|
|
||||||
p1 := types.PopEventFromESSEvent(events[0], false).ToPlayer()
|
p1 := types.PopEventFromESSEvent(events[0], false).ToPlayer()
|
||||||
ps.On("Insert", ctx, p1).Return(nil).Once()
|
ps.On("Insert", ctx, p1).Return(nil).Once()
|
||||||
|
|
||||||
p2 := types.PopEventFromESSEvent(events[0], true).ToPlayer()
|
p2 := types.PopEventFromESSEvent(events[0], true).ToPlayer()
|
||||||
ps.On("Insert", ctx, p2).Return(nil).Once()
|
ps.On("Insert", ctx, p2).Return(nil).Once()
|
||||||
p3 := types.PopEventFromESSEvent(events[1], false).ToPlayer()
|
|
||||||
|
e3 := types.PopEventFromESSEvent(events[1], false)
|
||||||
|
p3 := e3.ToPlayer()
|
||||||
ps.On("Insert", ctx, p3).Return(nil).Once()
|
ps.On("Insert", ctx, p3).Return(nil).Once()
|
||||||
|
|
||||||
|
v3 := types.PopEventFromESSEvent(events[1], false).ToVehicle()
|
||||||
|
v3.VehicleName = "galaxy" // exp event translation
|
||||||
|
vs.On("Insert", ctx, v3).Return(nil).Once()
|
||||||
|
|
||||||
for _, event := range events {
|
for _, event := range events {
|
||||||
eh.HandleEvent(ctx, event)
|
eh.HandleEvent(ctx, event)
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ func TestTrackPopHappyPath(t *testing.T) {
|
||||||
TeamID: types.TR,
|
TeamID: types.TR,
|
||||||
LoadoutID: 4,
|
LoadoutID: 4,
|
||||||
ClassName: translators.CombatMedic,
|
ClassName: translators.CombatMedic,
|
||||||
|
VehicleName: "unknown",
|
||||||
CharacterID: "aaaa",
|
CharacterID: "aaaa",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +58,7 @@ func TestTrackPopFixup(t *testing.T) {
|
||||||
ZoneID: 4,
|
ZoneID: 4,
|
||||||
TeamID: 0,
|
TeamID: 0,
|
||||||
ClassName: "unknown",
|
ClassName: "unknown",
|
||||||
|
VehicleName: "unknown",
|
||||||
CharacterID: "bbbb",
|
CharacterID: "bbbb",
|
||||||
}
|
}
|
||||||
pastEventPlayer := event.ToPlayer()
|
pastEventPlayer := event.ToPlayer()
|
||||||
|
@ -77,6 +79,7 @@ func TestTrackPopFixupFailed(t *testing.T) {
|
||||||
ZoneID: 4,
|
ZoneID: 4,
|
||||||
TeamID: 0,
|
TeamID: 0,
|
||||||
ClassName: "unknown",
|
ClassName: "unknown",
|
||||||
|
VehicleName: "unknown",
|
||||||
CharacterID: "bbbb",
|
CharacterID: "bbbb",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
services:
|
services:
|
||||||
tsdb:
|
postgres:
|
||||||
image: docker.io/timescale/timescaledb:latest-pg14
|
image: docker.io/library/postgres
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: saerro321
|
POSTGRES_PASSWORD: saerro321
|
||||||
POSTGRES_USER: saerrouser
|
POSTGRES_USER: saerrouser
|
||||||
|
|
25
flake.nix
25
flake.nix
|
@ -10,6 +10,31 @@
|
||||||
systems = [ "x86_64-linux" "aarch64-linux" ];
|
systems = [ "x86_64-linux" "aarch64-linux" ];
|
||||||
perSystem = { config, self', pkgs, lib, system, ... }: {
|
perSystem = { config, self', pkgs, lib, system, ... }: {
|
||||||
devShells.default = import ./shell.nix { inherit pkgs; };
|
devShells.default = import ./shell.nix { inherit pkgs; };
|
||||||
|
|
||||||
|
packages = let
|
||||||
|
vendorHash = "sha256-A5hZxo0zZ3w6qryV24PjYaKQatN2G2heyuee6QaU55M=";
|
||||||
|
in rec {
|
||||||
|
default = saerro;
|
||||||
|
saerro = pkgs.buildGoModule {
|
||||||
|
inherit vendorHash;
|
||||||
|
name = "saerro-ws";
|
||||||
|
src = ./.;
|
||||||
|
subPackages = [
|
||||||
|
"cmd/ws"
|
||||||
|
"cmd/pruner"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
ws = pkgs.ociTools.buildContainer {
|
||||||
|
args = [
|
||||||
|
"${saerro}/ws"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
pruner = pkgs.ociTools.buildContainer {
|
||||||
|
args = [
|
||||||
|
"${saerro}/pruner"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
1
result
Symbolic link
1
result
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/aa9byv99dpxncm4pf9baih91ni4x23cw-join
|
|
@ -147,9 +147,12 @@ func (ps *VehicleStore) Prune(ctx context.Context) (int64, error) {
|
||||||
|
|
||||||
// Avoid using sql idioms here for portability
|
// Avoid using sql idioms here for portability
|
||||||
// SQLite and PgSQL do now() differently, we don't need to at all.
|
// SQLite and PgSQL do now() differently, we don't need to at all.
|
||||||
res, err := ps.DB.ExecContext(ctx, `
|
res, err := ps.DB.ExecContext(ctx,
|
||||||
DELETE FROM vehicles WHERE last_updated < $1;
|
`
|
||||||
`, time.Now().Add(-time.Minute*15))
|
DELETE FROM vehicles WHERE last_updated < $1;
|
||||||
|
`,
|
||||||
|
util.TimeToString(time.Now().Add(-time.Minute*15)),
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue