Skip to content

Commit

Permalink
Escape more queries
Browse files Browse the repository at this point in the history
  • Loading branch information
jkelin committed Aug 18, 2018
1 parent 9a6816c commit 50c4303
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 72 deletions.
3 changes: 2 additions & 1 deletion scripts/recalculate_identities.ts
Expand Up @@ -106,7 +106,8 @@ function expandIdentities(identities: Identity[], nameCounts: Dictionary<Diction
async function main() {
console.info('Downloading data');
const data: { fullReport?: { players?: { name: string, ip: string }[] } }[] = await db.Match
.find({}, { 'fullReport.players.name': true, 'fullReport.players.ip': true })
.select({ 'fullReport.players.name': true, 'fullReport.players.ip': true })
.exec();
// .limit(1000);
console.info('Generting graph');

Expand Down
52 changes: 25 additions & 27 deletions src/chat.ts
Expand Up @@ -144,34 +144,32 @@ function getServerChat(serverId: string, server: string, username: string, passw
});
}

setInterval(() => {
Server
.where('chat', { $exists: true })
.where('chat.enabled').equals(true)
.find(function (err, servers: IServerModel[]) {
if (err) throw err;

servers.forEach(server => {
if(activeChatRequests[server._id]) return;

activeChatRequests[server._id] = getServerChat(server._id, server.chat.server, server.chat.username, server.chat.password)
.then(x => {
winston.debug("Got server chat from", {id: server._id});

server.chat.ok = true;
server.save();
delete activeChatRequests[server._id];
})
.catch(x => {
winston.info("Error getting chat from " + server._id, x.message);
winston.debug(x);

server.chat.ok = false;
server.save();
delete activeChatRequests[server._id];
});
setInterval(async () => {
const servers: IServerModel[] = await Server
.where('chat').exists(true)
.where('chat.enabled').equals(true)
.exec();

servers.forEach(server => {
if(activeChatRequests[server._id]) return;

activeChatRequests[server._id] = getServerChat(server._id, server.chat.server, server.chat.username, server.chat.password)
.then(x => {
winston.debug("Got server chat from", {id: server._id});

server.chat.ok = true;
server.save();
delete activeChatRequests[server._id];
})
});
.catch(x => {
winston.info("Error getting chat from " + server._id, x.message);
winston.debug(x);

server.chat.ok = false;
server.save();
delete activeChatRequests[server._id];
});
})
}, 1000);

export function getChatFor(server: string) {
Expand Down
34 changes: 21 additions & 13 deletions src/index.ts
Expand Up @@ -107,7 +107,7 @@ if (STATS_WEB) {
var promises = [
Player.find().sort({ kills: -1 }).limit(20).exec(),
Player.find().sort({ minutesonline: -1 }).limit(20).exec(),
Server.find().where({ lastseen: { "$gte": compDate } }).limit(20).exec(),
Server.find().where('lastseen').gte(compDate.getTime()).limit(20).exec(),
tribes_news
] as Promise<any>[];

Expand All @@ -126,22 +126,30 @@ if (STATS_WEB) {
next(error);
});
})

app.get('/search', function (req, res) {
var name = req.query.name !== undefined ? req.query.name : "";
Player
.where('_id')
.regex(new RegExp(name, "i"))

function searchPlayers(name: string) {
return Player
.where('_id').regex(new RegExp(name, "i"))
.sort({ lastseen: -1 })
.select(['_id', 'score', 'kills', 'deaths', 'offense', 'defense', 'style', 'minutesonline', 'lastseen', 'stats.flagCaptureStat'])
.find()
.exec(function (err, data: IPlayerModel[]) {
if (err) throw err;
res.render('players', {
data: data,
alerts: [{ text: data.length + " results" }]
});
.exec();
}

app.get('/search', async function (req, res) {
var name = req.query.name !== undefined ? decodeURIComponent(req.query.name) : "";
const data = await searchPlayers(name);
res.render('players', {
data: data,
alerts: [{ text: data.length + " results" }]
});
})

app.get('/search.json', async function (req, res) {
var name = req.query.name !== undefined ? decodeURIComponent(req.query.name) : "";
const data = await searchPlayers(name);
res.json(data);
})
}

app.get('/status.json', function(req, res) {
Expand Down
30 changes: 15 additions & 15 deletions src/matches.ts
Expand Up @@ -82,18 +82,18 @@ function generateResultInfo(data: ITribesServerQueryResponse) {

function getMatchData(id: string) {
return Match
.where('_id').equals(id)
.findOne()
.exec()
.then((data: IMatchModel) => ({
id: data._id,
when: data.when,
result: generateResultInfo(data.basicReport) ,
info: { ...data.basicReport, players: undefined },
team1: getPlayersForTeam(data, data.basicReport.teamone),
team2: getPlayersForTeam(data, data.basicReport.teamtwo),
stats: prepareStats(data),
}));
.where('_id').equals(id)
.findOne()
.exec()
.then((data: IMatchModel) => ({
id: data._id,
when: data.when,
result: generateResultInfo(data.basicReport) ,
info: { ...data.basicReport, players: undefined },
team1: getPlayersForTeam(data, data.basicReport.teamone),
team2: getPlayersForTeam(data, data.basicReport.teamtwo),
stats: prepareStats(data),
}));
}

router.get('/matches/:id.json', function (req, res, next) {
Expand All @@ -107,9 +107,9 @@ router.get('/matches/:id', function (req, res, next) {
async function getMatchesData(page: number) {
const perPage = 50;

const [data, count] = await Promise.all([
const [data, count] = await Promise.all<IMatchModel[], number>([
Match
.find({ 'basicReport.numplayers': { $ne: '0' }})
.where('basicReport.numplayers').ne(0)
.sort('-when')
.select({
basicReport: true,
Expand All @@ -119,7 +119,7 @@ async function getMatchesData(page: number) {
.limit(perPage)
.exec(),
Match
.find({ 'basicReport.numplayers': { $ne: '0' }})
.where('basicReport.numplayers').ne(0)
.count()
.exec()
]);
Expand Down
13 changes: 10 additions & 3 deletions src/players.ts
Expand Up @@ -2,14 +2,18 @@ import express from "express";
import winston from "winston";
import { sortBy, toPairs } from "lodash";

import {Player, Identity, IPlayerModel} from "./db";
import {Player, Identity, IPlayerModel, IIdentityModel, IIdentity} from "./db";
import { cleanPlayerName } from "./helpers";

let router = express.Router();

async function findRelatedNicknames(name: string) {
name = cleanPlayerName(name);
const data = await Identity.find({ 'namesAndIps': { $in: [ name ] } }, { names: true }).findOne();
const data: IIdentity = await Identity
.where('namesAndIps').in([ name ])
.select({ names: true })
.findOne()
.exec();

if(data) {
return sortBy(toPairs(data.names), x => -x[1])
Expand All @@ -34,7 +38,10 @@ router.get('/player/:name.json', async function (req, res) {
router.get('/player/:name', async function (req, res) {
var name = decodeURIComponent(req.params["name"]);
const similar = await findRelatedNicknames(name);
const data: IPlayerModel = await Player.where('_id').equals(name).findOne().exec();
const data: IPlayerModel = await Player
.where('_id').equals(name)
.findOne()
.exec();

res.render('player', {
data: data,
Expand Down
4 changes: 2 additions & 2 deletions src/servers.ts
Expand Up @@ -33,8 +33,8 @@ router.get('/server/:id', async function (req, res, next) {
d.setDate(d.getDate() - numDays);

try {
const data = await Promise.all([
Server.where('_id', id).findOne().exec() as Promise<IServerModel>,
const data = await Promise.all<IServerModel, Record<number, number>>([
Server.where('_id', id).findOne().exec(),
getServerChartData(id, numDays)
]);

Expand Down
18 changes: 7 additions & 11 deletions src/tracker.ts
Expand Up @@ -24,9 +24,9 @@ export async function handleTribesServerData(data: ITribesServerQueryResponse) {
winston.debug("Handling data from", id);

let server: IServerModel = await Server
.where('_id')
.equals(id)
.findOne();
.where('_id').equals(id)
.findOne()
.exec();

if (server === null) {
server = new Server(<IServer>{
Expand Down Expand Up @@ -126,8 +126,7 @@ export function pushPlayersTrackings(serverIdIn: string, data: ITribesServerQuer
export function timePlayer(player: IUploadedPlayer) {
if(!player.player) return winston.error('[timePlayer] Player does not have a name', player);
Player
.where('_id')
.equals(player.player)
.where('_id').equals(player.player)
.findOne(function (err, pl: IPlayerModel) {
if (err) throw err;
if (pl === null) {
Expand Down Expand Up @@ -161,8 +160,7 @@ export function handlePlayer(input: IUploadedPlayer, ip: string, port: number) {
if(!input.name) return winston.error('Player does not have a name');

Player
.where('_id')
.equals(input.name)
.where('_id').equals(input.name)
.findOne(function (err, player: IPlayerModel) {
if (err) throw err;
var changeCountry = false;
Expand Down Expand Up @@ -242,8 +240,7 @@ export function handlePlayer(input: IUploadedPlayer, ip: string, port: number) {
export function addServerLastFullReport(ip: string, port: number) {
var id = ip + ":" + port;
Server
.where('_id')
.equals(id)
.where('_id').equals(id)
.findOne(function (err, server: IServerModel) {
if (err) throw err;
if (server == null) {
Expand Down Expand Up @@ -278,8 +275,7 @@ export function saveMatchResult(ip: string, port: number, fullReport: IUploadedD

// Server.where({ _id: '45.32.157.166:8777' })
Server
.where('_id')
.equals(id)
.where('_id').equals(id)
.findOne(function (err, server: IServerModel) {
if (err) {
console.error('Could not find saveMatchResult')
Expand Down

0 comments on commit 50c4303

Please sign in to comment.