diff --git a/server/combat.js b/server/combat.js index cb7b127..3173c79 100644 --- a/server/combat.js +++ b/server/combat.js @@ -5,6 +5,7 @@ require('dotenv').config(); let CronJob = require('cron').CronJob; //utilities +let { logDiagnostics } = require('./diagnostics.js'); let { log } = require('../common/utilities.js'); let { getStatistics, isAttacking } = require('./utilities.js'); @@ -226,6 +227,7 @@ const runCombatTick = (connection) => { if (err) throw err; log('Combat executed', pendingCombat.attackerId, pendingCombat.defenderId, victor, spoilsGold); + logDiagnostics(connection, 'death', attackerCasualties); //clean the database let query = 'DELETE FROM equipment WHERE quantity <= 0;'; diff --git a/server/diagnostics.js b/server/diagnostics.js new file mode 100644 index 0000000..7ec9c0f --- /dev/null +++ b/server/diagnostics.js @@ -0,0 +1,39 @@ +//environment variables +require('dotenv').config(); + +//libraries +let CronJob = require('cron').CronJob; + +//utilities +let { log } = require('../common/utilities.js'); + +const runDailyDiagnostics = (connection) => { + let dailyJob = new CronJob('0 0 * * * *', () => { + let query = 'INSERT INTO diagnostics (playerCount, totalGold, totalRecruitments, totalDeaths, totalCombats) VALUES ((SELECT COUNT(*) FROM profiles), (SELECT SUM(gold) FROM profiles), (IFNULL((SELECT SUM(quantity) FROM diagnosticsEvents WHERE eventName = "recruit"), 0)), (IFNULL((SELECT SUM(quantity) FROM diagnosticsEvents WHERE eventName = "death"), 0)), (SELECT COUNT(*) FROM pastCombat WHERE eventTime >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)));'; + connection.query(query, (err) => { + if (err) throw err; + + let query = 'DELETE FROM diagnosticsEvents;'; + connection.query(query, (err) => { + if (err) throw err; + + log('Daily diagnostics taken'); + }); + }); + }); + + dailyJob.start(); +}; + +//current name parameters: 'recruit', 'death' +const logDiagnostics = (connection, name, quantity) => { + let query = 'INSERT INTO diagnosticsEvents (eventName, quantity) VALUES (?, ?);'; + connection.query(query, [name, quantity], (err) => { + if (err) throw err; + }); +}; + +module.exports = { + runDailyDiagnostics: runDailyDiagnostics, + logDiagnostics: logDiagnostics +}; \ No newline at end of file diff --git a/server/index.js b/server/index.js index 1f1d544..09e93ef 100644 --- a/server/index.js +++ b/server/index.js @@ -22,6 +22,10 @@ app.post('/newsrequest', news.newsRequest()); let { connectToDatabase } = require('./database.js'); let connection = connectToDatabase(); //uses .env +//handle diagnostics +let diagnostics = require('./diagnostics.js'); +diagnostics.runDailyDiagnostics(connection); + //handle accounts let accounts = require('./accounts.js'); app.post('/signuprequest', accounts.signupRequest(connection)); diff --git a/server/profiles.js b/server/profiles.js index be3adc4..d686548 100644 --- a/server/profiles.js +++ b/server/profiles.js @@ -7,6 +7,7 @@ let CronJob = require('cron').CronJob; let { isAttacking } = require('./utilities.js'); //utilities +let { logDiagnostics } = require('./diagnostics.js'); let { log } = require('../common/utilities.js'); //profile creation & requesting @@ -152,6 +153,7 @@ const recruitRequest = (connection) => (req, res) => { res.end(); log('Recruit successful', results[0].username, req.body.id, req.body.token); + logDiagnostics(connection, 'recruit', 1); }); }); }); diff --git a/sql/create_database_structure.sql b/sql/create_database_structure.sql index 913e433..da0568e 100644 --- a/sql/create_database_structure.sql +++ b/sql/create_database_structure.sql @@ -1,3 +1,23 @@ +#diagnostic system +CREATE TABLE IF NOT EXISTS diagnostics ( + id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY UNIQUE, + td TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), + + playerCount INTEGER NOT NULL DEFAULT 0, + totalGold INTEGER NOT NULL DEFAULT 0, + totalRecruitments INTEGER NOT NULL DEFAULT 0, + totalDeaths INTEGER NOT NULL DEFAULT 0, + totalCombats INTEGER NOT NULL DEFAULT 0 +); + +CREATE TABLE IF NOT EXISTS diagnosticsEvents ( + id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY UNIQUE, + td TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), + + eventName VARCHAR(50), + quantity INTEGER NOT NULL DEFAULT 1 +); + # account system CREATE TABLE IF NOT EXISTS signups ( email VARCHAR(320) UNIQUE,