Compare commits
5 Commits
c1aa9e397a
...
51f9f80cc2
| Author | SHA1 | Date |
|---|---|---|
|
|
51f9f80cc2 | |
|
|
7e46187d75 | |
|
|
c2fe3007e5 | |
|
|
3e1a90dc45 | |
|
|
eb91b8a171 |
|
|
@ -16,7 +16,6 @@
|
||||||
"https://deno.land/std@0.160.0/bytes/mod.ts": "b2e342fd3669176a27a4e15061e9d588b89c1aaf5008ab71766e23669565d179",
|
"https://deno.land/std@0.160.0/bytes/mod.ts": "b2e342fd3669176a27a4e15061e9d588b89c1aaf5008ab71766e23669565d179",
|
||||||
"https://deno.land/std@0.160.0/encoding/base64.ts": "c57868ca7fa2fbe919f57f88a623ad34e3d970d675bdc1ff3a9d02bba7409db2",
|
"https://deno.land/std@0.160.0/encoding/base64.ts": "c57868ca7fa2fbe919f57f88a623ad34e3d970d675bdc1ff3a9d02bba7409db2",
|
||||||
"https://deno.land/std@0.160.0/flags/mod.ts": "686b6b36e14b00f11c9e26cecf439021158436a6e34f60eeb0d927f0b169ae20",
|
"https://deno.land/std@0.160.0/flags/mod.ts": "686b6b36e14b00f11c9e26cecf439021158436a6e34f60eeb0d927f0b169ae20",
|
||||||
"https://deno.land/std@0.160.0/fmt/colors.ts": "9e36a716611dcd2e4865adea9c4bec916b5c60caad4cdcdc630d4974e6bb8bd4",
|
|
||||||
"https://deno.land/std@0.160.0/io/buffer.ts": "fae02290f52301c4e0188670e730cd902f9307fb732d79c4aa14ebdc82497289",
|
"https://deno.land/std@0.160.0/io/buffer.ts": "fae02290f52301c4e0188670e730cd902f9307fb732d79c4aa14ebdc82497289",
|
||||||
"https://deno.land/std@0.160.0/io/mod.ts": "6e781ebafd5cdccf9ab4afa1f499b08c513602d023cb08ceebc58758501f78bd",
|
"https://deno.land/std@0.160.0/io/mod.ts": "6e781ebafd5cdccf9ab4afa1f499b08c513602d023cb08ceebc58758501f78bd",
|
||||||
"https://deno.land/std@0.160.0/io/readers.ts": "45847ad404afd2f605eae1cff193f223462bc55eeb9ae313c2f3db28aada0fd6",
|
"https://deno.land/std@0.160.0/io/readers.ts": "45847ad404afd2f605eae1cff193f223462bc55eeb9ae313c2f3db28aada0fd6",
|
||||||
|
|
@ -32,9 +31,6 @@
|
||||||
"https://deno.land/std@0.160.0/path/posix.ts": "6b63de7097e68c8663c84ccedc0fd977656eb134432d818ecd3a4e122638ac24",
|
"https://deno.land/std@0.160.0/path/posix.ts": "6b63de7097e68c8663c84ccedc0fd977656eb134432d818ecd3a4e122638ac24",
|
||||||
"https://deno.land/std@0.160.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9",
|
"https://deno.land/std@0.160.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9",
|
||||||
"https://deno.land/std@0.160.0/path/win32.ts": "ee8826dce087d31c5c81cd414714e677eb68febc40308de87a2ce4b40e10fb8d",
|
"https://deno.land/std@0.160.0/path/win32.ts": "ee8826dce087d31c5c81cd414714e677eb68febc40308de87a2ce4b40e10fb8d",
|
||||||
"https://deno.land/std@0.160.0/testing/_diff.ts": "a23e7fc2b4d8daa3e158fa06856bedf5334ce2a2831e8bf9e509717f455adb2c",
|
|
||||||
"https://deno.land/std@0.160.0/testing/_format.ts": "cd11136e1797791045e639e9f0f4640d5b4166148796cad37e6ef75f7d7f3832",
|
|
||||||
"https://deno.land/std@0.160.0/testing/asserts.ts": "1e340c589853e82e0807629ba31a43c84ebdcdeca910c4a9705715dfdb0f5ce8",
|
|
||||||
"https://deno.land/std@0.160.0/uuid/_common.ts": "76e1fdfb03aecf733f7b3a5edc900f5734f2433b359fdb1535f8de72873bdb3f",
|
"https://deno.land/std@0.160.0/uuid/_common.ts": "76e1fdfb03aecf733f7b3a5edc900f5734f2433b359fdb1535f8de72873bdb3f",
|
||||||
"https://deno.land/std@0.160.0/uuid/mod.ts": "e57ba10200d75f2b17570f13eba19faa6734b1be2da5091e2c01039df41274a5",
|
"https://deno.land/std@0.160.0/uuid/mod.ts": "e57ba10200d75f2b17570f13eba19faa6734b1be2da5091e2c01039df41274a5",
|
||||||
"https://deno.land/std@0.160.0/uuid/v1.ts": "7123410ef9ce980a4f2e54a586ccde5ed7063f6f119a70d86eebd92f8e100295",
|
"https://deno.land/std@0.160.0/uuid/v1.ts": "7123410ef9ce980a4f2e54a586ccde5ed7063f6f119a70d86eebd92f8e100295",
|
||||||
|
|
@ -60,7 +56,6 @@
|
||||||
"https://deno.land/x/msgpack@v1.4/utils/stream.ts": "1315e29af5c1a40d97bfa6f1c4f7f73d26067b912236f56851981f2f049500b8",
|
"https://deno.land/x/msgpack@v1.4/utils/stream.ts": "1315e29af5c1a40d97bfa6f1c4f7f73d26067b912236f56851981f2f049500b8",
|
||||||
"https://deno.land/x/msgpack@v1.4/utils/typedArrays.ts": "bb819c2f28cf7f85ed50b2e57f108462715555cc61ce315e8134cf1eef2ae662",
|
"https://deno.land/x/msgpack@v1.4/utils/typedArrays.ts": "bb819c2f28cf7f85ed50b2e57f108462715555cc61ce315e8134cf1eef2ae662",
|
||||||
"https://deno.land/x/msgpack@v1.4/utils/utf8.ts": "93183055a7a41986080eeb711e83d553e7c8b121642da4379a5adf253b7beefd",
|
"https://deno.land/x/msgpack@v1.4/utils/utf8.ts": "93183055a7a41986080eeb711e83d553e7c8b121642da4379a5adf253b7beefd",
|
||||||
"https://deno.land/x/murmurhash@v1.0.0/mod.ts": "13fd2c5534dfd22ffbfcd4255ea13e47a2f2b99e9c90a83dc43e814a0e278829",
|
|
||||||
"https://deno.land/x/progress@v1.2.8/deps.ts": "e0abdc972a0c152508b28ced5ae9c4be26a5773f0aa4a3caa72371c84d2e28a2",
|
"https://deno.land/x/progress@v1.2.8/deps.ts": "e0abdc972a0c152508b28ced5ae9c4be26a5773f0aa4a3caa72371c84d2e28a2",
|
||||||
"https://deno.land/x/progress@v1.2.8/mod.ts": "5ef7c7ff079d71effed5055666af81cc58a566bc98e2df8473526bd6457976c5",
|
"https://deno.land/x/progress@v1.2.8/mod.ts": "5ef7c7ff079d71effed5055666af81cc58a566bc98e2df8473526bd6457976c5",
|
||||||
"https://deno.land/x/progress@v1.2.8/multi.ts": "392553552243204539d83ee53cadda990db20b1b421520411318ff9bd0320646",
|
"https://deno.land/x/progress@v1.2.8/multi.ts": "392553552243204539d83ee53cadda990db20b1b421520411318ff9bd0320646",
|
||||||
|
|
|
||||||
2
s3si.ts
2
s3si.ts
|
|
@ -28,7 +28,7 @@ Options:
|
||||||
--profile-path <path>, -p Path to config file (default: ./profile.json)
|
--profile-path <path>, -p Path to config file (default: ./profile.json)
|
||||||
--exporter <exporter>, -e Exporter list to use (default: stat.ink)
|
--exporter <exporter>, -e Exporter list to use (default: stat.ink)
|
||||||
Multiple exporters can be separated by commas
|
Multiple exporters can be separated by commas
|
||||||
(e.g. "stat.ink,file")
|
(e.g. "stat.ink,file,mongodb")
|
||||||
--no-progress, -n Disable progress bar
|
--no-progress, -n Disable progress bar
|
||||||
--monitor, -m Monitor mode
|
--monitor, -m Monitor mode
|
||||||
--skip-mode <mode>, -s Skip mode (default: null)
|
--skip-mode <mode>, -s Skip mode (default: null)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
import { MongoDB } from "../deps.ts";
|
||||||
|
import { DEFAULT_ENV } from "../src/env.ts";
|
||||||
|
import { MongoDBExporter } from "../src/exporters/mongodb.ts";
|
||||||
|
import { FileStateBackend, Profile } from "../src/state.ts";
|
||||||
|
|
||||||
|
const OLD_BATTLES_END_DATE = new Date('2023-02-28T03:42:47.000+00:00');
|
||||||
|
|
||||||
|
const env = DEFAULT_ENV;
|
||||||
|
const stateBackend = new FileStateBackend("./profile.json");
|
||||||
|
const profile = new Profile({ stateBackend, env });
|
||||||
|
await profile.readState();
|
||||||
|
|
||||||
|
if (!profile.state.mongoDbUri) {
|
||||||
|
console.error("MongoDB URI not set");
|
||||||
|
Deno.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const mongoDbClient = new MongoDB.MongoClient(profile.state.mongoDbUri);
|
||||||
|
const battlesCollection = mongoDbClient.db("splashcat").collection("battles");
|
||||||
|
|
||||||
|
const filter = {
|
||||||
|
"exportDate": {
|
||||||
|
"$lte": OLD_BATTLES_END_DATE,
|
||||||
|
},
|
||||||
|
"gameId": undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
const cursor = battlesCollection.find(filter);
|
||||||
|
|
||||||
|
const oldDocuments = await battlesCollection.countDocuments(filter);
|
||||||
|
|
||||||
|
console.log(`Found ${oldDocuments} old battles to update...`);
|
||||||
|
|
||||||
|
for await (const doc of cursor) {
|
||||||
|
const { splatNetData, _id } = doc;
|
||||||
|
|
||||||
|
const splatNetId = splatNetData.id;
|
||||||
|
const uniqueId = MongoDBExporter.getGameId(splatNetId);
|
||||||
|
|
||||||
|
await battlesCollection.updateOne({ _id }, { "$set": {
|
||||||
|
gameId: uniqueId,
|
||||||
|
}});
|
||||||
|
|
||||||
|
console.log(`Updated ${splatNetId} to ${uniqueId}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Done!")
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { MongoDB } from "../../deps.ts";
|
import { MongoDB } from "../../deps.ts";
|
||||||
import { AGENT_VERSION, NSOAPP_VERSION, S3SI_VERSION } from "../constant.ts";
|
import { AGENT_VERSION, NSOAPP_VERSION, S3SI_VERSION } from "../constant.ts";
|
||||||
import { CoopHistoryDetail, ExportResult, Game, GameExporter, VsHistoryDetail } from "../types.ts";
|
import { CoopHistoryDetail, ExportResult, Game, GameExporter, Summary, VsHistoryDetail } from "../types.ts";
|
||||||
import { parseHistoryDetailId } from "../utils.ts";
|
import { parseHistoryDetailId } from "../utils.ts";
|
||||||
import { FileExporterTypeCommon } from "./file.ts";
|
import { FileExporterTypeCommon } from "./file.ts";
|
||||||
|
|
||||||
|
|
@ -10,14 +10,16 @@ export class MongoDBExporter implements GameExporter {
|
||||||
mongoDb: MongoDB.Db;
|
mongoDb: MongoDB.Db;
|
||||||
battlesCollection: MongoDB.Collection;
|
battlesCollection: MongoDB.Collection;
|
||||||
jobsCollection: MongoDB.Collection;
|
jobsCollection: MongoDB.Collection;
|
||||||
|
summariesCollection: MongoDB.Collection;
|
||||||
constructor(private mongoDbUri: string) {
|
constructor(private mongoDbUri: string) {
|
||||||
this.mongoDbClient = new MongoDB.MongoClient(mongoDbUri);
|
this.mongoDbClient = new MongoDB.MongoClient(mongoDbUri);
|
||||||
this.mongoDb = this.mongoDbClient.db("splashcat");
|
this.mongoDb = this.mongoDbClient.db("splashcat");
|
||||||
this.battlesCollection = this.mongoDb.collection("battles");
|
this.battlesCollection = this.mongoDb.collection("battles");
|
||||||
this.jobsCollection = this.mongoDb.collection("jobs");
|
this.jobsCollection = this.mongoDb.collection("jobs");
|
||||||
|
this.summariesCollection = this.mongoDb.collection("summaries");
|
||||||
}
|
}
|
||||||
|
|
||||||
getGameId(id: string) { // very similar to the file exporter
|
static getGameId(id: string) { // very similar to the file exporter
|
||||||
const { uid, timestamp } = parseHistoryDetailId(id);
|
const { uid, timestamp } = parseHistoryDetailId(id);
|
||||||
|
|
||||||
return `${uid}_${timestamp}Z`;
|
return `${uid}_${timestamp}Z`;
|
||||||
|
|
@ -32,12 +34,10 @@ export class MongoDBExporter implements GameExporter {
|
||||||
// countOldStorage can be removed later eventually when all old documents
|
// countOldStorage can be removed later eventually when all old documents
|
||||||
// are gone from SplatNet 3
|
// are gone from SplatNet 3
|
||||||
const countOldStorage = await collection.countDocuments({
|
const countOldStorage = await collection.countDocuments({
|
||||||
splatNetData: {
|
"splatNetData.id": id,
|
||||||
id: id,
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const uniqueId = this.getGameId(id);
|
const uniqueId = MongoDBExporter.getGameId(id);
|
||||||
const countNewStorage = await collection.countDocuments({
|
const countNewStorage = await collection.countDocuments({
|
||||||
gameId: uniqueId,
|
gameId: uniqueId,
|
||||||
});
|
});
|
||||||
|
|
@ -51,7 +51,7 @@ export class MongoDBExporter implements GameExporter {
|
||||||
}
|
}
|
||||||
|
|
||||||
async exportGame(game: Game): Promise<ExportResult> {
|
async exportGame(game: Game): Promise<ExportResult> {
|
||||||
const uniqueId = this.getGameId(game.detail.id);
|
const uniqueId = MongoDBExporter.getGameId(game.detail.id);
|
||||||
|
|
||||||
const common = {
|
const common = {
|
||||||
// this seems like useful data to store...
|
// this seems like useful data to store...
|
||||||
|
|
@ -59,7 +59,7 @@ export class MongoDBExporter implements GameExporter {
|
||||||
nsoVersion: NSOAPP_VERSION,
|
nsoVersion: NSOAPP_VERSION,
|
||||||
agentVersion: AGENT_VERSION,
|
agentVersion: AGENT_VERSION,
|
||||||
s3siVersion: S3SI_VERSION,
|
s3siVersion: S3SI_VERSION,
|
||||||
exportTime: new Date(),
|
exportDate: new Date(),
|
||||||
};
|
};
|
||||||
const body:
|
const body:
|
||||||
{
|
{
|
||||||
|
|
@ -86,4 +86,17 @@ export class MongoDBExporter implements GameExporter {
|
||||||
url: `https://new.splatoon.catgirlin.space/battle/${objectId.toString()}`,
|
url: `https://new.splatoon.catgirlin.space/battle/${objectId.toString()}`,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async exportSummary(summary: Summary): Promise<ExportResult> {
|
||||||
|
const id = summary.uid;
|
||||||
|
|
||||||
|
await this.summariesCollection.insertOne({
|
||||||
|
summaryId: id,
|
||||||
|
...summary,
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
status: "success",
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import {
|
import {
|
||||||
AGENT_NAME,
|
AGENT_NAME,
|
||||||
|
COMBINED_VERSION,
|
||||||
S3SI_VERSION,
|
S3SI_VERSION,
|
||||||
SPLATNET3_STATINK_MAP,
|
SPLATNET3_STATINK_MAP,
|
||||||
USERAGENT,
|
USERAGENT,
|
||||||
|
|
@ -456,7 +457,7 @@ export class StatInkExporter implements GameExporter {
|
||||||
),
|
),
|
||||||
|
|
||||||
agent: AGENT_NAME,
|
agent: AGENT_NAME,
|
||||||
agent_version: S3SI_VERSION,
|
agent_version: COMBINED_VERSION,
|
||||||
agent_variables: {
|
agent_variables: {
|
||||||
"Upload Mode": this.uploadMode,
|
"Upload Mode": this.uploadMode,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue