From bb0e8899343e3905bd9423c561a86c1d03e7d5b9 Mon Sep 17 00:00:00 2001 From: BurnyLlama Date: Mon, 1 Nov 2021 21:58:19 +0100 Subject: [PATCH 1/3] Small refacor of SQL statements. --- libs/database/generate.js | 17 +++++++++++------ libs/database/tasks.js | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libs/database/generate.js b/libs/database/generate.js index e3214a3..a65fdb0 100644 --- a/libs/database/generate.js +++ b/libs/database/generate.js @@ -67,7 +67,8 @@ export function generateDB() { "time" float NOT NULL DEFAULT 0, "date" timestamp NOT NULL DEFAULT current_timestamp, "server" char(4) NOT NULL DEFAULT '', - "rank" INTEGER NOT NULL); + "rank" INTEGER NOT NULL + ) `) log("Calculating rankings for each map...") @@ -96,7 +97,8 @@ export function generateDB() { "time" float NOT NULL DEFAULT 0, "date" timestamp NOT NULL DEFAULT current_timestamp, "server" char(4) NOT NULL DEFAULT '', - "teamrank" INTEGER NOT NULL); + "teamrank" INTEGER NOT NULL + ) `) log("Calculating teamrankings for each map...") @@ -113,7 +115,8 @@ export function generateDB() { CREATE TABLE IF NOT EXISTS "points" ( "rank" INTEGER NOT NULL, "player" varchar(16) NOT NULL, - "points" INTEGER NOT NULL); + "points" INTEGER NOT NULL + ) `) log("Generating graphRecordCache...") @@ -123,13 +126,14 @@ export function generateDB() { "player" varchar(16) NOT NULL, "time" float NOT NULL DEFAULT 0, "date" timestamp NOT NULL DEFAULT current_timestamp, - "server" char(4) NOT NULL DEFAULT ''); + "server" char(4) NOT NULL DEFAULT '' + ) `) tasks.processTimeGraph() execMany([ `CREATE INDEX IF NOT EXISTS "idx_graphCache_player" ON "graphRecordCache" ("player")`, - `CREATE INDEX IF NOT EXISTS "idx_graphCache_map" ON "graphRecordCache" ("map");` + `CREATE INDEX IF NOT EXISTS "idx_graphCache_map" ON "graphRecordCache" ("map")` ]) log("Inserting points to DB...") @@ -146,6 +150,7 @@ export function generateDB() { "colorBodyRaw" INTEGER NOT NULL, "colorBodyHex" varchar(8) NOT NULL, "colorFeetRaw" INTEGER NOT NULL, - "colorFeetHex" varchar(8) NOT NULL); + "colorFeetHex" varchar(8) NOT NULL + ) `) } diff --git a/libs/database/tasks.js b/libs/database/tasks.js index 47ac4fe..265bd50 100644 --- a/libs/database/tasks.js +++ b/libs/database/tasks.js @@ -146,7 +146,7 @@ export function processAllPoints() { "rank" INTEGER NOT NULL, "player" varchar(16) NOT NULL, "points" INTEGER NOT NULL - ); + ) `) /* Insert data */ From c92d71c66ffccc3e5ce584770b9be17ca7d9f082 Mon Sep 17 00:00:00 2001 From: BurnyLlama Date: Mon, 1 Nov 2021 22:15:13 +0100 Subject: [PATCH 2/3] Refactored env settings. --- .gitignore | 4 +--- dotenv-template | 11 ----------- index.js | 7 +++---- libs/database/init.js | 4 ++-- libs/database/tasks.js | 2 +- template.env | 22 ++++++++++++++++++++++ 6 files changed, 29 insertions(+), 21 deletions(-) delete mode 100644 dotenv-template create mode 100644 template.env diff --git a/.gitignore b/.gitignore index 7603cfd..2cbaf56 100644 --- a/.gitignore +++ b/.gitignore @@ -119,7 +119,5 @@ dist package-lock.json pnpm-lock.yaml -*.sql* -players.msgpack .env -ddnss/ \ No newline at end of file +data/* \ No newline at end of file diff --git a/dotenv-template b/dotenv-template deleted file mode 100644 index 140d847..0000000 --- a/dotenv-template +++ /dev/null @@ -1,11 +0,0 @@ -# The database connect string -MONGO_URI = "mongodb://user:passwd@host/db" - -# The port on which the server starts... -PORT = 12345 - -# Should the server try to generate the database? -GENERATE_DB = "false" - -# The API paginates. How many entries per page? -ENTRIES_PER_PAGE = 50 \ No newline at end of file diff --git a/index.js b/index.js index 5efdcc6..ddfbd09 100644 --- a/index.js +++ b/index.js @@ -1,15 +1,14 @@ import express from 'express' -import dotenv from 'dotenv' +import { config as loadEnv } from 'dotenv' import api from './api/api.js' import { generateDB } from './libs/database/generate.js' import { dbInit } from './libs/database/init.js' -dotenv.config() - +loadEnv() dbInit() generateDB() const Server = express() Server.use('/api', api) -Server.listen(process.env.PORT, () => console.log(`Server started and listening on port ${process.env.PORT}.`)) +Server.listen(process.env.PORT ?? 12345, () => console.log(`Server started and listening on port ${process.env.PORT ?? 12345}.`)) diff --git a/libs/database/init.js b/libs/database/init.js index 4498804..281f7be 100644 --- a/libs/database/init.js +++ b/libs/database/init.js @@ -15,8 +15,8 @@ export function dbInit() { log("Starting up databases...") /* load in db using better-sqlite3 */ - sqlite = new Database('ddnet.sqlite', { verbose: console.log }); - skinDB = new Database('skindata.sqlite', { }); + sqlite = new Database(process.env.DDNET_SQLITE_PATH ?? 'data/ddnet.sqlite', { verbose: console.log }); + skinDB = new Database(process.env.DDNSS_SQLITE_PATH ?? 'data/skindata.sqlite', { }); /* WAL mode */ sqlite.pragma('journal_mode = WAL'); diff --git a/libs/database/tasks.js b/libs/database/tasks.js index 265bd50..93c69f6 100644 --- a/libs/database/tasks.js +++ b/libs/database/tasks.js @@ -9,7 +9,7 @@ import { sqlite } from './init.js' * @module db/decodeMsgpack */ export function decodeMsgpack() { - const data = fs.readFileSync('players.msgpack') + const data = fs.readFileSync(process.env.MSGPACK_PATH ?? 'data/players.msgpack') const decoded = msgpack.decodeMulti(data, { wrap: true }) const order = ['categories', 'maps', 'totalPoints', 'pointsRanks', 'pointsThisWeek', 'pointsThisMonth', 'teamRankPoints', 'rankPoints', 'serverRanks'] let final = {} diff --git a/template.env b/template.env new file mode 100644 index 0000000..a6a9cf1 --- /dev/null +++ b/template.env @@ -0,0 +1,22 @@ +# +# You should copy this file to '.env' +# and set all settings there. +# + + +# MongoDB connection URI +MONGO_URI = "mongodb://user:passwd@host/db" + +# Paths to SQLite databases... +DDNET_SQLITE_PATH = "data/ddnet.sqlite" +DDNSS_SQLITE_PATH = "data/skindata.sqlite" +MSGPACK_PATH = "data/players.msgpack" + +# Should the server try to generate the database? +GENERATE_DB = "true" + +# The port on which the server listens... +PORT = 12345 + +# The API paginates. How many entries per page? +ENTRIES_PER_PAGE = 50 \ No newline at end of file From bf2a8b3bc0329c676dbe319f3d87b2d00d1dc492 Mon Sep 17 00:00:00 2001 From: BurnyLlama Date: Mon, 1 Nov 2021 22:20:13 +0100 Subject: [PATCH 3/3] Moved decodeMsgpack to seprate file. --- libs/database/decodeMsgpack.js | 21 +++++++++++++++++++++ libs/database/tasks.js | 21 +-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 libs/database/decodeMsgpack.js diff --git a/libs/database/decodeMsgpack.js b/libs/database/decodeMsgpack.js new file mode 100644 index 0000000..47f1a8b --- /dev/null +++ b/libs/database/decodeMsgpack.js @@ -0,0 +1,21 @@ +import msgpack from '@msgpack/msgpack' +import fs from 'fs' + + +/** + * This module parses the msgpack provided by DDNet... + * @module db/decodeMsgpack + */ +export default function decodeMsgpack() { + const data = fs.readFileSync(process.env.MSGPACK_PATH ?? 'data/players.msgpack') + const decoded = msgpack.decodeMulti(data, { wrap: true }) + const order = ['categories', 'maps', 'totalPoints', 'pointsRanks', 'pointsThisWeek', 'pointsThisMonth', 'teamRankPoints', 'rankPoints', 'serverRanks'] + let final = {} + + let i = 0 + for (const part of decoded) { + final[order[i]] = part + ++i + } + return final +} diff --git a/libs/database/tasks.js b/libs/database/tasks.js index 93c69f6..93ccbfc 100644 --- a/libs/database/tasks.js +++ b/libs/database/tasks.js @@ -1,26 +1,7 @@ -import msgpack from '@msgpack/msgpack' -import fs from 'fs' +import decodeMsgpack from './decodeMsgpack.js' import { execMany } from './helper.js' - import { sqlite } from './init.js' -/** - * This module parses the msgpack provided by DDNet... - * @module db/decodeMsgpack - */ -export function decodeMsgpack() { - const data = fs.readFileSync(process.env.MSGPACK_PATH ?? 'data/players.msgpack') - const decoded = msgpack.decodeMulti(data, { wrap: true }) - const order = ['categories', 'maps', 'totalPoints', 'pointsRanks', 'pointsThisWeek', 'pointsThisMonth', 'teamRankPoints', 'rankPoints', 'serverRanks'] - let final = {} - - let i = 0 - for (const part of decoded) { - final[order[i]] = part - ++i - } - return final -} /** * This generates rankings for each map...