Implemented stats page
This commit is contained in:
+2
-2
@@ -8,7 +8,7 @@ let CronJob = require('cron').CronJob;
|
||||
let { logDiagnostics } = require('./diagnostics.js');
|
||||
let { log } = require('../common/utilities.js');
|
||||
|
||||
let { getStatistics, isAttacking, logActivity } = require('./utilities.js');
|
||||
let { getEquipmentStatistics, isAttacking, logActivity } = require('./utilities.js');
|
||||
|
||||
const attackRequest = (connection) => (req, res) => {
|
||||
//verify the attacker's credentials (only the attacker can launch an attack)
|
||||
@@ -197,7 +197,7 @@ const runCombatTick = (connection) => {
|
||||
if (err) throw err;
|
||||
|
||||
//get the global equipment stats
|
||||
getStatistics((err, { statistics }) => {
|
||||
getEquipmentStatistics((err, { statistics }) => {
|
||||
if (err) throw err;
|
||||
|
||||
//get the combat boosts from equipment, from highest to lowest
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@ require('dotenv').config();
|
||||
//utilities
|
||||
let { log } = require('../common/utilities.js');
|
||||
|
||||
let { getStatistics, getOwned, isAttacking, isSpying, logActivity } = require('./utilities.js');
|
||||
let { getEquipmentStatistics, getOwned, isAttacking, isSpying, logActivity } = require('./utilities.js');
|
||||
|
||||
const equipmentRequest = (connection) => (req, res) => {
|
||||
//validate the credentials
|
||||
@@ -21,7 +21,7 @@ const equipmentRequest = (connection) => (req, res) => {
|
||||
//if no field received, send everything
|
||||
if (!req.body.field) {
|
||||
//compose the returned objects
|
||||
return getStatistics((err, statisticsObj) => {
|
||||
return getEquipmentStatistics((err, statisticsObj) => {
|
||||
if (err) {
|
||||
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
||||
res.end();
|
||||
@@ -45,7 +45,7 @@ const equipmentRequest = (connection) => (req, res) => {
|
||||
//send specific fields
|
||||
switch(req.body.field) {
|
||||
case 'statistics':
|
||||
return getStatistics((err, obj) => {
|
||||
return getEquipmentStatistics((err, obj) => {
|
||||
if (err) {
|
||||
res.status(400).write(log(err, req.body.id, req.body.token, req.body.field));
|
||||
} else {
|
||||
@@ -117,7 +117,7 @@ const purchaseRequest = (connection) => (req, res) => {
|
||||
}
|
||||
|
||||
//get the stats for all objects
|
||||
getStatistics((err, { statistics }) => {
|
||||
getEquipmentStatistics((err, { statistics }) => {
|
||||
if (err) throw err;
|
||||
|
||||
//valid parameters
|
||||
@@ -235,7 +235,7 @@ const sellRequest = (connection) => (req, res) => {
|
||||
}
|
||||
|
||||
//get the stats for all objects
|
||||
getStatistics((err, { statistics }) => {
|
||||
getEquipmentStatistics((err, { statistics }) => {
|
||||
if (err) throw err;
|
||||
|
||||
//valid parameters
|
||||
|
||||
@@ -26,6 +26,10 @@ let connection = connectToDatabase(); //uses .env
|
||||
let diagnostics = require('./diagnostics.js');
|
||||
diagnostics.runDailyDiagnostics(connection);
|
||||
|
||||
//game statistics
|
||||
let statistics = require('./statistics.js');
|
||||
app.post('/statisticsrequest', statistics.statisticsRequest(connection));
|
||||
|
||||
//handle accounts
|
||||
let accounts = require('./accounts.js');
|
||||
app.post('/signuprequest', accounts.signupRequest(connection));
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@ let CronJob = require('cron').CronJob;
|
||||
let { logDiagnostics } = require('./diagnostics.js');
|
||||
let { log } = require('../common/utilities.js');
|
||||
|
||||
let { getStatistics, isSpying, isAttacking, logActivity } = require('./utilities.js'); //TODO: rename getStatistics to getEquipmentStatistics
|
||||
let { getEquipmentStatistics, isSpying, isAttacking, logActivity } = require('./utilities.js');
|
||||
|
||||
const spyRequest = (connection) => (req, res) => {
|
||||
//verify the attacker's credentials (only the attacker can launch an attack)
|
||||
@@ -292,7 +292,7 @@ const spyStealEquipmentInner = (connection, attackerId, defenderId, attackingUni
|
||||
connection.query(query, [defenderId], (err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
getStatistics((err, { statistics }) => {
|
||||
getEquipmentStatistics((err, { statistics }) => {
|
||||
if (err) throw err;
|
||||
|
||||
//don't steal certain items
|
||||
@@ -349,7 +349,7 @@ const spyStealEquipmentInner = (connection, attackerId, defenderId, attackingUni
|
||||
};
|
||||
|
||||
const removeForEachSoldier = (results, soldiers, cb) => {
|
||||
getStatistics((err, { statistics }) => {
|
||||
getEquipmentStatistics((err, { statistics }) => {
|
||||
if (err) throw err;
|
||||
|
||||
results.sort((a, b) => statistics[a.type][a.name].combatBoost < statistics[b.type][b.name].combatBoost);
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
//environment variables
|
||||
require('dotenv').config();
|
||||
|
||||
const round = (x) => Math.round(x * 100) / 100;
|
||||
|
||||
const statisticsRequest = (connection) => (req, res) => {
|
||||
let query = 'SELECT COUNT(*) AS playerCount, SUM(gold) / COUNT(*) AS goldAverage FROM profiles;';
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
let playerCount = results[0].playerCount;
|
||||
let goldAverage = results[0].goldAverage;
|
||||
|
||||
//determine the correct tick rate based on the current gold average
|
||||
//NOTE: copy/pasted
|
||||
let tickRate = (() => {
|
||||
if (results[0].goldAverage < 120) return 5;
|
||||
if (results[0].goldAverage < 130) return 15;
|
||||
if (results[0].goldAverage < 140) return 30;
|
||||
return 60; //slow it way down
|
||||
})();
|
||||
|
||||
let nextTick = tickRate - (new Date()).getMinutes() % tickRate;
|
||||
|
||||
let query = 'SELECT COUNT(*) AS activity FROM accounts WHERE lastActivityTime >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY);';
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) throw err;
|
||||
|
||||
let activity = results[0].activity;
|
||||
let activePercentage = round(activity / playerCount * 100);
|
||||
|
||||
res.status(200).json({
|
||||
'Player Count': playerCount,
|
||||
'Active Players': activity,
|
||||
'Active Percentage': { string: `${activePercentage}%`, color: activePercentage >= 10 ? 'lightgreen' : activePercentage >= 5 ? 'yellow' : 'red'},
|
||||
'Gold Average': `${round(goldAverage)}`,
|
||||
'Tick Rate': `${tickRate} minutes`,
|
||||
'Next Tick': `${nextTick} minute${nextTick === 1 ? '' : 's'} from now`
|
||||
});
|
||||
res.end();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
statisticsRequest: statisticsRequest
|
||||
};
|
||||
+2
-2
@@ -4,7 +4,7 @@ require('dotenv').config();
|
||||
//utilities
|
||||
let { log } = require('../common/utilities.js');
|
||||
|
||||
const getStatistics = (cb) => {
|
||||
const getEquipmentStatistics = (cb) => {
|
||||
//TODO: apiVisible field
|
||||
return cb(undefined, { 'statistics': require('./equipment_statistics.json') });
|
||||
};
|
||||
@@ -94,7 +94,7 @@ const logActivity = (connection, id) => {
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getStatistics: getStatistics,
|
||||
getEquipmentStatistics: getEquipmentStatistics,
|
||||
getOwned: getOwned,
|
||||
isAttacking: isAttacking,
|
||||
isSpying: isSpying,
|
||||
|
||||
Reference in New Issue
Block a user