Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Outfit wars support #314

Merged
merged 80 commits into from
Sep 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
452f6a7
Update submodules for nexus data
ryanjsims Jul 29, 2022
763b4a6
Bump constants submodule to nexus branch
ryanjsims Jul 29, 2022
70026bf
Start adding data types to API for outfit wars instances
ryanjsims Jul 30, 2022
f99836b
Add outfit-wars API as alias of instance endpoint(s)
ryanjsims Aug 11, 2022
a5656e6
Merge branch 'dev' into outfit-wars
Maelstromeous Aug 11, 2022
e32623d
Fix module updater and point to OW branch
Maelstromeous Aug 11, 2022
6401a39
Updated constants
Maelstromeous Aug 11, 2022
cf46694
Created and updated various DTOs and entities to implement the outfit…
Maelstromeous Aug 11, 2022
9e262ea
Changed from team1 etc to use blue vs red.
Maelstromeous Aug 11, 2022
e8e2165
Updated constants ref
Maelstromeous Aug 11, 2022
3aa0d2b
Removed previously migrated interfaces
Maelstromeous Aug 11, 2022
686ed61
Updated constants
Maelstromeous Aug 11, 2022
35f5ecb
Updated outfit wars controller
Maelstromeous Aug 11, 2022
6dd3286
Fixed DTOs
Maelstromeous Aug 11, 2022
593473a
Minor fix to instance metagame controller
Maelstromeous Aug 11, 2022
c900ca3
Fixed facility control entity referencing the wrong thing
Maelstromeous Aug 11, 2022
8013339
Updated constants ref
Maelstromeous Aug 11, 2022
6f6ca5b
Corrected various wonkies with the outfitwars entity
Maelstromeous Aug 11, 2022
19c7671
Fixed instanceId example in OW entity
Maelstromeous Aug 11, 2022
f36cd15
Live metagame now supports ps2alertsEventType and creates it for new …
Maelstromeous Aug 11, 2022
007ebc4
Fixed outfit wars update DTO
Maelstromeous Aug 12, 2022
73897c7
Update constants commit
ryanjsims Aug 12, 2022
9642c19
Removed deprecated census endpoints for oshur data, this is now serve…
Maelstromeous Aug 13, 2022
2618bb8
Deleted reverse engineered oshur data
Maelstromeous Aug 13, 2022
8fc3e46
Updated description
Maelstromeous Aug 13, 2022
daa9d76
Fully supporting OW facility control events now
Maelstromeous Aug 14, 2022
d6acd14
Update constants commit
ryanjsims Aug 14, 2022
2a32bd1
Update constants commit
ryanjsims Aug 15, 2022
dafaf7e
Add API support for outfit wars instance metadata embed
ryanjsims Aug 23, 2022
714bd3b
Revert outfitwars team updates being handled by API, now handled in a…
ryanjsims Aug 23, 2022
4256b62
Added an Outfitwars Ranking cron job that will pull data from Falcon'…
ryanjsims Aug 24, 2022
c7b52c9
Add Rankings API
ryanjsims Aug 24, 2022
7a640a9
Bump constants commit
ryanjsims Aug 24, 2022
153d82c
Add census service id variable for outfitwars ranking cron fallback
ryanjsims Aug 24, 2022
0525185
Add upsertMany, which uses one conditional per doc to upsert
ryanjsims Aug 24, 2022
dbd5908
Update outfitwars rankings to use round numbers from constants
ryanjsims Aug 24, 2022
4374256
Reset the cron interval to once per week
ryanjsims Aug 24, 2022
885b0e0
Make round a query parameter on both outfit-wars/rankings and outfit-…
ryanjsims Aug 24, 2022
8695c3e
Merge branch 'dev' into outfit-wars
Maelstromeous Aug 24, 2022
fd3789b
Cleaned up code slightly to use a response type interface and just ma…
Maelstromeous Aug 24, 2022
3227fed
Updated consts
Maelstromeous Aug 24, 2022
267d7fb
Fixed healthcheck for outfit wars cron, set it to run at top of every…
Maelstromeous Aug 24, 2022
f2f2b6b
eslint fix
Maelstromeous Aug 24, 2022
16ec760
Fixed various documentation issues
Maelstromeous Aug 24, 2022
874c2c7
Use null coalese not or coalese
Maelstromeous Aug 24, 2022
478d9c0
Added OutfitwarsRankingInterface and made the embeds implement it - f…
Maelstromeous Aug 24, 2022
5ca1887
Changed cron back to running on Sundays, removed the indicator
Maelstromeous Aug 24, 2022
6c20694
Increase default page size for ranking to accomodate all matches
ryanjsims Aug 25, 2022
fe90d3d
Handle cases where falcon ranking interface may not be updated yet
ryanjsims Aug 25, 2022
b222a9f
Merge branch 'dev' into outfit-wars
Maelstromeous Aug 25, 2022
a530852
Removed old vars.local.yml location
Maelstromeous Aug 25, 2022
ad7618a
Bump API constants commit
ryanjsims Aug 28, 2022
be4a734
Eslint
Maelstromeous Aug 28, 2022
f4d8dfb
Added ps2AlertsEventType as a property to all relevant aggregates
Maelstromeous Aug 28, 2022
9b525bf
Corrected various inconsistently named entities for ps2AlertsEventType.
Maelstromeous Aug 29, 2022
b7198fc
Undone a booboo
Maelstromeous Aug 29, 2022
39e8b1e
Removed zone being in the common implicit as it simply isn't always n…
Maelstromeous Aug 29, 2022
80a284d
Merge branch 'outfit-wars' into ps2alerts-event-type
Maelstromeous Aug 29, 2022
11b9f3e
Updated constants ref
Maelstromeous Aug 29, 2022
ae31925
Corrected casing on Ps2AlertsEventState to match constants repo
Maelstromeous Aug 29, 2022
58705ac
Merge branch 'outfit-wars' into ps2alerts-event-type
Maelstromeous Aug 29, 2022
c92477b
Added BaseAggregatorController and Bracket and Ps2AlertsEventType pipes
Maelstromeous Aug 29, 2022
3a25033
Add instanceId to outfitwars ranking entity
ryanjsims Aug 30, 2022
ce0f655
bump constants
ryanjsims Aug 30, 2022
0a3c376
Use :outfit not {outfit}
ryanjsims Aug 31, 2022
4a7e5cb
Bump constants commit
ryanjsims Aug 31, 2022
20c564b
Make round of ranking be based on number of matches played
ryanjsims Aug 31, 2022
329335e
Added BaseAggregatorController and Bracket and Ps2AlertsEventType pipes
Maelstromeous Aug 31, 2022
0536c38
Merge remote-tracking branch 'origin/ps2alerts-event-type' into ps2al…
Maelstromeous Aug 31, 2022
8057928
Linting
Maelstromeous Aug 31, 2022
9b29c37
Rewrote the transformGlobal bracket handling to make more sense
Maelstromeous Aug 31, 2022
65ea95d
Added character.name as an index for global character entity, it'll b…
Maelstromeous Aug 31, 2022
b659135
Temp change to change cron running for OW to every 5 mins for initial…
Maelstromeous Aug 31, 2022
0a0c763
Merge branch 'dev' into outfit-wars
Maelstromeous Aug 31, 2022
7ba73db
Added ps2AlertsEventType query options to each appropriate endpoint
Maelstromeous Aug 31, 2022
efbe056
Fixed OW instances not getting combat history
Maelstromeous Aug 31, 2022
0901e4b
Reverted an ps2AlertsEventType where it does not exist
Maelstromeous Sep 1, 2022
46ced39
Add support to cron job for outfit war matches falcon endpoint
ryanjsims Sep 1, 2022
c2bda7c
Only use $setOnInsert since data should not be modified after creation
ryanjsims Sep 1, 2022
16e5c5b
Injecting service ID into API containers
Maelstromeous Sep 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/node_modules

# Provisioning
provisioning/vars.local.yml
vars.local.yml

# Logs
logs
Expand Down
1 change: 1 addition & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[submodule "src/modules/data/ps2alerts-constants"]
path = src/modules/data/ps2alerts-constants
url = https://github.com/ps2alerts/constants
branch = outfit-wars
[submodule "provisioning/helm"]
path = provisioning/helm
url = https://github.com/ps2alerts/helm-charts
Expand Down
2 changes: 2 additions & 0 deletions provisioning/dev/start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
- hosts: localhost
vars_files:
- "{{ playbook_dir }}/../vars.yml"
- ../../vars.local.yml
# - "{{ playbook_dir }}/../vars_local.yml"
tasks:
- debug:
Expand Down Expand Up @@ -46,6 +47,7 @@
REST_ENABLED: "true"
INTERNAL_API_USER: "ps2alerts"
INTERNAL_API_PASS: "foobar"
CENSUS_SERVICE_ID: "{{ census_service_id }}"
labels:
traefik.enable: "true"
traefik.http.routers.ps2alerts_api_http.rule: "Host(`dev.api.ps2alerts.com`)"
Expand Down
6 changes: 6 additions & 0 deletions provisioning/production/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ deployments:
value: "${{ secrets.INTERNAL_API_USER }}"
- name: INTERNAL_API_PASS
value: "${{ secrets.INTERNAL_API_PASS }}"
- name: CENSUS_SERVICE_ID
value: "${{ secrets.CENSUS_SERVICE_ID }}"
scaling:
enabled: true
min: 2
Expand Down Expand Up @@ -175,6 +177,8 @@ deployments:
value: "${{ secrets.INTERNAL_API_USER }}"
- name: INTERNAL_API_PASS
value: "${{ secrets.INTERNAL_API_PASS }}"
- name: CENSUS_SERVICE_ID
value: "${{ secrets.CENSUS_SERVICE_ID }}"
scaling:
enabled: true
min: 1
Expand Down Expand Up @@ -254,6 +258,8 @@ deployments:
value: "${{ secrets.INTERNAL_API_USER }}"
- name: INTERNAL_API_PASS
value: "${{ secrets.INTERNAL_API_PASS }}"
- name: CENSUS_SERVICE_ID
value: "${{ secrets.CENSUS_SERVICE_ID }}"
nodeSelector:
nodepool: perm-pool
scaling:
Expand Down
2 changes: 2 additions & 0 deletions provisioning/staging/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ deployments:
value: "${{ secrets.INTERNAL_API_USER }}"
- name: INTERNAL_API_PASS
value: "${{ secrets.INTERNAL_API_PASS }}"
- name: CENSUS_SERVICE_ID
value: "${{ secrets.CENSUS_SERVICE_ID }}"
# nodeSelector:
# nodepool: perm-pool
scaling:
Expand Down
4 changes: 4 additions & 0 deletions src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ export const config = () => ({

env: process.env.NODE_ENV,

census: {
serviceId: process.env.CENSUS_SERVICE_ID
},

database: {
mongo: {
type: 'mongodb',
Expand Down
4 changes: 0 additions & 4 deletions src/interfaces/Ps2AlertsFeaturesInterface.ts

This file was deleted.

12 changes: 0 additions & 12 deletions src/interfaces/Ps2AlertsInstanceResultInterface.ts

This file was deleted.

63 changes: 29 additions & 34 deletions src/modules/aggregator/aggregator.data.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {Inject, Injectable, Logger} from '@nestjs/common';
import MongoOperationsService from '../../services/mongo/mongo.operations.service';
import GlobalAggregatorMessageInterface from './interfaces/global.aggregator.message.interface';
import InstanceMetagameTerritoryEntity from '../data/entities/instance/instance.metagame.territory.entity';
import {Ps2alertsEventState} from '../data/ps2alerts-constants/ps2alertsEventState';
import {Ps2AlertsEventState} from '../data/ps2alerts-constants/ps2AlertsEventState';
import {Bracket} from '../data/ps2alerts-constants/bracket';

@Injectable()
Expand Down Expand Up @@ -88,45 +88,40 @@ export default class AggregatorDataHandler {
public async transformGlobal(data: GlobalAggregatorMessageInterface): Promise<GlobalAggregatorMessageInterface> {
const newConditionals: any[] = [];

// If bracket has been supplied intentionally (such as the "Total" bracket (0)) then add it in now
if (data.bracket === Bracket.TOTAL) {
data.conditionals.forEach((conditional) => {
// Format for any dates
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
conditional = this.transformDateConditional(conditional);
for (let conditional of data.conditionals) {
// Format for any dates
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
conditional = this.transformDateConditional(conditional);

newConditionals.push(Object.assign(conditional, {
bracket: Bracket.TOTAL,
}));
});
} else {
let instance: InstanceMetagameTerritoryEntity;

try {
// If none is found an exception will throw (fineOneOrFail)
instance = await this.mongoOperationsService.findOne(
InstanceMetagameTerritoryEntity,
{instanceId: data.instance},
);
} catch (e) {
throw new Error(`Instance ${data.instance} does not exist.`);
}
let bracket: Bracket;

// Pull out conditionals and apply bracket to them
if (instance.state === Ps2alertsEventState.ENDED) {
data.conditionals.forEach((conditional) => {
// Format for any dates
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
conditional = this.transformDateConditional(conditional);
newConditionals.push(Object.assign(conditional, {
bracket: instance.bracket,
}));
});
// If total bracket was not supplied, we are going to pull in the instance and get it's bracket
if (data.bracket === Bracket.TOTAL) {
bracket = Bracket.TOTAL;
} else {
this.logger.error(`Received Global Aggregate message for unfinished instance ${data.instance}`);
let instance: InstanceMetagameTerritoryEntity;

try {
// If none is found an exception will throw (fineOneOrFail)
instance = await this.mongoOperationsService.findOne(
InstanceMetagameTerritoryEntity,
{instanceId: data.instance},
);
} catch (e) {
throw new Error(`Instance ${data.instance} does not exist.`);
}

if (instance.state === Ps2AlertsEventState.ENDED) {
bracket = instance.bracket;
} else {
throw new Error(`Received Global Aggregate message for unfinished instance ${data.instance}`);
}
}

newConditionals.push(Object.assign(conditional, {bracket}));
}

// Reassign the conditionals to the newly generated conditions
data.conditionals = newConditionals;

return data;
Expand Down
7 changes: 6 additions & 1 deletion src/modules/cron/CronModule.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import {CacheModule, Module} from '@nestjs/common';
import {CacheModule, HttpModule, Module} from '@nestjs/common';
import {CombatHistoryCron} from './combat.history.cron';
import MongoOperationsService from '../../services/mongo/mongo.operations.service';
import {TypeOrmModule} from '@nestjs/typeorm';
Expand All @@ -14,13 +14,17 @@ import {ConfigService} from '@nestjs/config';
import * as redisStore from 'cache-manager-ioredis';
import {RedisCacheService} from '../../services/cache/redis.cache.service';
import {XpmCron} from './xpm.cron';
import { OutfitWarsRankingsCron } from './outfitwars.rankings.cron';
import OutfitwarsRankingEntity from '../data/entities/instance/outfitwars.ranking.entity';

@Module({
imports: [
HttpModule,
TypeOrmModule.forFeature([
InstanceCombatHistoryAggregateEntity,
InstanceFactionCombatAggregateEntity,
InstanceMetagameTerritoryEntity,
OutfitwarsRankingEntity,
]),
CacheModule.registerAsync({
imports: [ConfigModule],
Expand All @@ -41,6 +45,7 @@ import {XpmCron} from './xpm.cron';
RedisCacheService,
CombatHistoryCron,
BracketCron,
OutfitWarsRankingsCron,
XpmCron,
],
})
Expand Down
4 changes: 2 additions & 2 deletions src/modules/cron/bracket.cron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import {Inject, Injectable, Logger} from '@nestjs/common';
import {Cron, CronExpression} from '@nestjs/schedule';
import MongoOperationsService from '../../services/mongo/mongo.operations.service';
import {Ps2alertsEventState} from '../data/ps2alerts-constants/ps2alertsEventState';
import {Ps2AlertsEventState} from '../data/ps2alerts-constants/ps2AlertsEventState';
import InstanceMetagameTerritoryEntity from '../data/entities/instance/instance.metagame.territory.entity';
import InstancePopulationAggregateEntity
from '../data/entities/aggregate/instance/instance.population.aggregate.entity';
Expand Down Expand Up @@ -38,7 +38,7 @@ export class BracketCron {

// Grab the current actives
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const actives: InstanceMetagameTerritoryEntity[] = await this.mongoOperationsService.findMany(InstanceMetagameTerritoryEntity, {state: Ps2alertsEventState.STARTED});
const actives: InstanceMetagameTerritoryEntity[] = await this.mongoOperationsService.findMany(InstanceMetagameTerritoryEntity, {state: Ps2AlertsEventState.STARTED});

for await (const instance of actives) {
// If Jaeger, skip and keep as 0 (N/A)
Expand Down
11 changes: 7 additions & 4 deletions src/modules/cron/combat.history.cron.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import {Inject, Injectable, Logger} from '@nestjs/common';
import {Cron, CronExpression} from '@nestjs/schedule';
import MongoOperationsService from '../../services/mongo/mongo.operations.service';
import {Ps2alertsEventState} from '../data/ps2alerts-constants/ps2alertsEventState';
import {Ps2AlertsEventState} from '../data/ps2alerts-constants/ps2AlertsEventState';
import InstanceMetagameTerritoryEntity from '../data/entities/instance/instance.metagame.territory.entity';
import InstanceFactionCombatAggregateEntity
from '../data/entities/aggregate/instance/instance.faction.combat.aggregate.entity';
import InstanceCombatHistoryAggregateEntity
from '../data/entities/aggregate/instance/instance.combat.history.aggregate.entity';
import {RedisCacheService} from '../../services/cache/redis.cache.service';
import InstanceOutfitWarsTerritoryEntity from '../data/entities/instance/instance.outfitwars.territory.entity';

@Injectable()
export class CombatHistoryCron {
Expand All @@ -24,10 +25,12 @@ export class CombatHistoryCron {
const documents = [];

// Grab the current actives
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const actives: InstanceMetagameTerritoryEntity[] = await this.mongoOperationsService.findMany(InstanceMetagameTerritoryEntity, {state: Ps2alertsEventState.STARTED});
const territoryActives: InstanceMetagameTerritoryEntity[] = await this.mongoOperationsService.findMany(InstanceMetagameTerritoryEntity, {state: Ps2AlertsEventState.STARTED});
const outfitWarsActives: InstanceOutfitWarsTerritoryEntity[] = await this.mongoOperationsService.findMany(InstanceOutfitWarsTerritoryEntity, {state: Ps2AlertsEventState.STARTED});

for await (const row of actives) {
const combinedActives = [...territoryActives, ...outfitWarsActives];

for await (const row of combinedActives) {
// If instance is overdue, don't process
if (Date.now() > (row.timeStarted.getTime() + row.duration)) {
this.logger.warn(`Instance [${row.instanceId}] is overdue, skipping combat history job`);
Expand Down
Loading