diff --git a/src/client/client.ts b/src/client/client.ts index 6df0016..f8686db 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -1,23 +1,24 @@ import { Router } from 'express' -import serverWeapons from './serverWeapons' -import playerWeapons from './playerWeapons' -import serverPlayers from './serverPlayers' -import player from './player' +import serverWeapons from './routes/serverWeapons' +import playerWeapons from './routes/playerWeapons' +import serverPlayers from './routes/serverPlayers' +import serverList from './routes/serverList' +import player from './routes/player' const router = Router() //timeout middleware ? router.get('/*', (req, res, next) => { next() }) -router.get('/weapons/', (req, res, next) => {}) +//router.get('/weapons/', (req, res, next) => {}) -router.get('/maps/', (req, res, next) => {}) +//router.get('/maps/', (req, res, next) => {}) -router.get('/players', (req, res, next) => {}) -router.get('/players/:playerId', (req, res, next) => {}) +//router.get('/players', (req, res, next) => {}) +//router.get('/players/:playerId', (req, res, next) => {}) -router.get('/servers/', (req, res, next) => {}) -router.get('/servers/:serverId/', (req, res, next) => {}) +router.get('/servers/', serverList) +//router.get('/servers/:serverId/', (req, res, next) => {}) router.get('/servers/:serverId/players', serverPlayers) router.get('/servers/:serverId/players/:playerId', player) router.get('/servers/:serverId/players/:playerId/weapons', playerWeapons) diff --git a/src/client/process.ts b/src/client/process.ts new file mode 100644 index 0000000..03cc84e --- /dev/null +++ b/src/client/process.ts @@ -0,0 +1,35 @@ +import db from '../db/db' +import cache from '../cache/redis' +import { processServerPlayers } from './routes/serverPlayers' +import { processServerWeapons } from './routes/serverWeapons' +import { processPlayerWeapons } from './routes/playerWeapons' +import { processPlayerReport } from './routes/player' + +async function processAll() { + const servers = await db.selectFrom('server').selectAll().execute() + const promises: Promise[] = [] + servers.forEach((e) => { + promises.push(processServer(e.id)) + }) + await Promise.all(promises) + setTimeout(processAll, 60000) +} + +async function processServer(server: number) { + await processServerPlayers(server) + const promises: Promise[] = [] + promises.push(processServerWeapons(server)) + const players = await cache.SMEMBERS(`servers:${server}:players`) + players.forEach((player) => { + promises.push(processPlayer(server, Number(player))) + }) + await Promise.all(promises) +} + +async function processPlayer(server: number, player: number) { + const promises: Promise[] = [] + promises.push(processPlayerWeapons(server, player)) + promises.push(processPlayerReport(server, player)) +} + +export default processAll diff --git a/src/client/player.ts b/src/client/routes/player.ts similarity index 91% rename from src/client/player.ts rename to src/client/routes/player.ts index 57d1280..77a8b73 100644 --- a/src/client/player.ts +++ b/src/client/routes/player.ts @@ -1,9 +1,9 @@ import { RequestHandler } from 'express' import { param } from 'express-validator' -import { validateErrors } from '../common' -import cache from '../cache/redis' +import { validateErrors } from '../../common' +import cache from '../../cache/redis' import { sql } from 'kysely' -import db from '../db/db' +import db from '../../db/db' import { getPlayerWeapons } from './playerWeapons' const { count, max, min, avg } = db.fn @@ -14,7 +14,7 @@ const middlewares: RequestHandler[] = [ async (req, res) => { const server = Number(req.params.serverId) const player = Number(req.params.playerId) - await processPlayerReport(server, player) + //await processPlayerReport(server, player) const data = await getPlayerReport(server, player) const weapons = await getPlayerWeapons(server, player) res.status(200).send({ ...data, weapons }) @@ -27,7 +27,7 @@ async function getPlayerReport(server: number, player: number) { return data } -async function processPlayerReport(server: number, player: number) { +export async function processPlayerReport(server: number, player: number) { let last_entry = Number( await cache.HGET(`servers:${server}:players:${player}`, 'last_entry') @@ -85,7 +85,6 @@ async function processPlayerReport(server: number, player: number) { .orderBy('kills', 'desc') .execute() //if no new kills - console.log(newData) if (newData.length == 0) { return } @@ -96,7 +95,7 @@ async function processPlayerReport(server: number, player: number) { cache.HSET( `servers:${server}:players:${player}`, key.toString(), - value.toString() + (value || '').toString() ) ) }) diff --git a/src/client/playerWeapons.ts b/src/client/routes/playerWeapons.ts similarity index 95% rename from src/client/playerWeapons.ts rename to src/client/routes/playerWeapons.ts index 54a28be..fb5ec50 100644 --- a/src/client/playerWeapons.ts +++ b/src/client/routes/playerWeapons.ts @@ -1,9 +1,9 @@ import { RequestHandler } from 'express' import { param } from 'express-validator' -import { validateErrors } from '../common' -import cache from '../cache/redis' +import { validateErrors } from '../../common' +import cache from '../../cache/redis' import { sql } from 'kysely' -import db from '../db/db' +import db from '../../db/db' const { count, max, avg } = db.fn @@ -13,7 +13,7 @@ const middlewares: RequestHandler[] = [ async (req, res) => { const server = Number(req.params.serverId) const player = Number(req.params.playerId) - await processPlayerWeapons(server, player) + //await processPlayerWeapons(server, player) const data = await getPlayerWeapons(server, player) res.status(200).send(data) } @@ -51,7 +51,7 @@ export async function getPlayerWeapons(server: number, player: number) { return data } -async function processPlayerWeapons(server: number, player: number) { +export async function processPlayerWeapons(server: number, player: number) { let last_entry = Number( await cache.HGET( diff --git a/src/client/routes/serverList.ts b/src/client/routes/serverList.ts new file mode 100644 index 0000000..1153fa5 --- /dev/null +++ b/src/client/routes/serverList.ts @@ -0,0 +1,17 @@ +import { RequestHandler } from 'express' +import { param } from 'express-validator' +import { validateErrors } from '../../common' +import db from '../../db/db' + +const middlewares: RequestHandler[] = [ + async (req, res) => { + const data = await db.selectFrom('server').selectAll().execute() + res.status(200).send( + data.map((e) => { + return { name: e.name, id: e.id, description: e.description } + }) + ) + } +] + +export default middlewares diff --git a/src/client/serverPlayers.ts b/src/client/routes/serverPlayers.ts similarity index 88% rename from src/client/serverPlayers.ts rename to src/client/routes/serverPlayers.ts index 74fa2b5..2f8d2eb 100644 --- a/src/client/serverPlayers.ts +++ b/src/client/routes/serverPlayers.ts @@ -1,9 +1,9 @@ import { RequestHandler } from 'express' import { param } from 'express-validator' -import { validateErrors } from '../common' -import cache from '../cache/redis' +import { validateErrors } from '../../common' +import cache from '../../cache/redis' import { sql } from 'kysely' -import db from '../db/db' +import db from '../../db/db' const { count, max } = db.fn @@ -12,7 +12,7 @@ const middlewares: RequestHandler[] = [ validateErrors, async (req, res) => { const server = Number(req.params.serverId) - await processServerPlayers(server) + //await processServerPlayers(server) let data = await getServerPlayers(server) res.status(200).send(data) } @@ -40,7 +40,7 @@ async function getServerPlayers(server: number) { return data } -async function processServerPlayers(server: number) { +export async function processServerPlayers(server: number) { let last_entry = Number(await cache.GET(`servers:${server}:players:last_entry`)) || 0 const newData = await db diff --git a/src/client/serverWeapons.ts b/src/client/routes/serverWeapons.ts similarity index 94% rename from src/client/serverWeapons.ts rename to src/client/routes/serverWeapons.ts index 1c9e8e5..f704450 100644 --- a/src/client/serverWeapons.ts +++ b/src/client/routes/serverWeapons.ts @@ -1,9 +1,9 @@ import { RequestHandler } from 'express' import { param } from 'express-validator' -import { validateErrors } from '../common' -import cache from '../cache/redis' +import { validateErrors } from '../../common' +import cache from '../../cache/redis' import { sql } from 'kysely' -import db from '../db/db' +import db from '../../db/db' const { count, max, avg } = db.fn @@ -12,7 +12,7 @@ const middlewares: RequestHandler[] = [ validateErrors, async (req, res) => { const server = Number(req.params.serverId) - await processServerWeapons(server) + //await processServerWeapons(server) const data = await getServerWeapons(server) res.status(200).send(data) } @@ -43,7 +43,7 @@ export async function getServerWeapons(server: number) { return data } -async function processServerWeapons(server: number) { +export async function processServerWeapons(server: number) { let last_entry = Number(await cache.HGET(`servers:${server}:weapons`, 'last_entry')) || 0 const newData = await db diff --git a/src/clientMain.ts b/src/clientMain.ts index fdd75db..287a84e 100644 --- a/src/clientMain.ts +++ b/src/clientMain.ts @@ -5,6 +5,7 @@ import cors from 'cors' import client from './client/client' import { dbReady } from './db/db' import { cacheReady } from './cache/redis' +import processAll from './client/process' const app = express() const port = 3001 @@ -20,8 +21,10 @@ app.use('/v1/client', client) dbReady().then((e) => { cacheReady().then((e) => { - app.listen(port, '0.0.0.0', () => { - console.log(`Example app listening on port ${port}`) + processAll().then((e) => { + app.listen(port, '0.0.0.0', () => { + console.log(`Example app listening on port ${port}`) + }) }) }) }) diff --git a/src/db/db.ts b/src/db/db.ts index e300267..143c244 100644 --- a/src/db/db.ts +++ b/src/db/db.ts @@ -14,6 +14,9 @@ const db = new Kysely({ }) }), log(event) { + if (process.env.ENVIRONMENT != 'production') { + return + } if (event.level === 'query') { console.log(event.query.sql) console.log(event.query.parameters)