78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
|
|
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 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 cursor = battlesCollection.find();
|
||
|
|
|
||
|
|
const oldDocuments = await battlesCollection.countDocuments();
|
||
|
|
|
||
|
|
console.log(`Found ${oldDocuments} old battles to upload...`);
|
||
|
|
|
||
|
|
let count = 0;
|
||
|
|
|
||
|
|
const erroredBattles = [];
|
||
|
|
|
||
|
|
for await (const doc of cursor) {
|
||
|
|
const { splatNetData, _id } = doc;
|
||
|
|
|
||
|
|
// start time for performance tracking, needs to be very accurate
|
||
|
|
const startTime = new Date();
|
||
|
|
|
||
|
|
splatNetData.playedTime = splatNetData.playedTime.toISOString();
|
||
|
|
|
||
|
|
const response = await fetch("http://127.0.0.1:8000/battles/api/upload/", {
|
||
|
|
method: "POST",
|
||
|
|
headers: {
|
||
|
|
"Content-Type": "application/json",
|
||
|
|
"Authorization": `Bearer ${profile.state.splashcatApiKey}`,
|
||
|
|
},
|
||
|
|
body: JSON.stringify({
|
||
|
|
"data_type": "splatnet3",
|
||
|
|
"battle": splatNetData,
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
if (!response.ok) {
|
||
|
|
console.error(`Failed to upload ${splatNetData.id}`);
|
||
|
|
erroredBattles.push({
|
||
|
|
id: doc.gameId,
|
||
|
|
error: await response.text(),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// end time for performance tracking, needs to be very accurate
|
||
|
|
const endTime = new Date();
|
||
|
|
const timeTaken = endTime.getTime() - startTime.getTime();
|
||
|
|
|
||
|
|
console.log(`Uploaded ${splatNetData.id} (${timeTaken}ms)`);
|
||
|
|
count++;
|
||
|
|
console.log(`Uploaded ${count}/${oldDocuments} battles`)
|
||
|
|
|
||
|
|
if (count % 100 === 0) {
|
||
|
|
console.log("Updating error logs...");
|
||
|
|
if (erroredBattles.length > 0) {
|
||
|
|
await Deno.writeFile("./errored-battles.json", new TextEncoder().encode(JSON.stringify(erroredBattles, null, "\t")));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log("Done!");
|
||
|
|
|
||
|
|
if (erroredBattles.length > 0) {
|
||
|
|
await Deno.writeFile("./errored-battles.json", new TextEncoder().encode(JSON.stringify(erroredBattles, null, 2)));
|
||
|
|
}
|