Database logging via sqlite3
This commit is contained in:
parent
0571107eee
commit
01f977b16e
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ node_modules/
|
|||||||
*.log
|
*.log
|
||||||
.idea/
|
.idea/
|
||||||
production/
|
production/
|
||||||
|
database.sql
|
@ -10,9 +10,11 @@ You can see an up-to-date copy of the master branch running on http://rewrite.mi
|
|||||||
2. Run ```npm install```.
|
2. Run ```npm install```.
|
||||||
2. Run ```node app.js``` to boot the system (may need sudo!)
|
2. Run ```node app.js``` to boot the system (may need sudo!)
|
||||||
|
|
||||||
(There's also ```install.sh``` and ```start.sh```, but they may not for your installations.)
|
(There's also ```install.sh``` and ```start.sh```, but they may not work for your OS.)
|
||||||
|
|
||||||
|
Database logging is disabled by default. You can enable it in ```config.json``` by setting ```logToDatabase``` to true.
|
||||||
|
This requires sqlite3 drivers to be installed.
|
||||||
|
|
||||||
#### TODO
|
#### TODO
|
||||||
- Add public API (similiar to old server.json)
|
- Add public API (similiar to old server.json)
|
||||||
- Add ingame server, similiar to old mc.minetrack.me
|
- Add ingame server, similiar to old mc.minetrack.me
|
||||||
- History graphs (database?)
|
|
||||||
|
13
app.js
13
app.js
@ -3,6 +3,7 @@ var ping = require('./lib/ping');
|
|||||||
var logger = require('./lib/logger');
|
var logger = require('./lib/logger');
|
||||||
var mojang = require('./lib/mojang_services');
|
var mojang = require('./lib/mojang_services');
|
||||||
var util = require('./lib/util');
|
var util = require('./lib/util');
|
||||||
|
var db = require('./lib/database');
|
||||||
|
|
||||||
var config = require('./config.json');
|
var config = require('./config.json');
|
||||||
|
|
||||||
@ -73,6 +74,11 @@ function pingAll() {
|
|||||||
if (_networkHistory.length > 72) { // 60/2.5 = 24, so 24 is one minute
|
if (_networkHistory.length > 72) { // 60/2.5 = 24, so 24 is one minute
|
||||||
_networkHistory.shift();
|
_networkHistory.shift();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log it to the database if needed.
|
||||||
|
if (config.logToDatabase) {
|
||||||
|
db.log(network.ip, util.getCurrentTimeMs(), res ? res.players.online : 0);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
})(servers[i]);
|
})(servers[i]);
|
||||||
}
|
}
|
||||||
@ -89,6 +95,13 @@ function startMainLoop() {
|
|||||||
}, config.rates.upateMojangStatus);
|
}, config.rates.upateMojangStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.logToDatabase) {
|
||||||
|
// Setup our database.
|
||||||
|
db.setup();
|
||||||
|
} else {
|
||||||
|
logger.warn('Database logging is not enabled. You can enable it by setting "logToDatabase" to true in config.json. This requires sqlite3 to be installed.');
|
||||||
|
}
|
||||||
|
|
||||||
server.start(function() {
|
server.start(function() {
|
||||||
// Track how many people are currently connected.
|
// Track how many people are currently connected.
|
||||||
server.io.on('connect', function(client) {
|
server.io.on('connect', function(client) {
|
||||||
|
@ -192,5 +192,6 @@
|
|||||||
"mojangStatusTimeout": 3500,
|
"mojangStatusTimeout": 3500,
|
||||||
"pingAll": 3000,
|
"pingAll": 3000,
|
||||||
"connectTimeout": 2500
|
"connectTimeout": 2500
|
||||||
}
|
},
|
||||||
|
"logToDatabase": true
|
||||||
}
|
}
|
||||||
|
17
lib/database.js
Normal file
17
lib/database.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
var sqlite = require('sqlite3');
|
||||||
|
var fs = require('fs');
|
||||||
|
var util = require('./util');
|
||||||
|
|
||||||
|
var db = new sqlite.Database('database.sql');
|
||||||
|
|
||||||
|
exports.log = function(ip, timestamp, playerCount) {
|
||||||
|
var insertStatement = db.prepare('INSERT INTO pings (timestamp, ip, player) VALUES (?, ?, ?)');
|
||||||
|
|
||||||
|
insertStatement.run(timestamp, ip, playerCount);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.setup = function(fileName) {
|
||||||
|
db.serialize(function() {
|
||||||
|
db.run('CREATE TABLE IF NOT EXISTS pings (id INT AUTO INCREMENT PRIMARY KEY, timestamp BIGINT NOT NULL, ip TINYTEXT, player MEDIUMINT)');
|
||||||
|
});
|
||||||
|
};
|
@ -9,6 +9,7 @@
|
|||||||
"mime": "^1.3.4",
|
"mime": "^1.3.4",
|
||||||
"request": "^2.65.0",
|
"request": "^2.65.0",
|
||||||
"socket.io": "^1.3.7",
|
"socket.io": "^1.3.7",
|
||||||
|
"sqlite3": "^3.1.1",
|
||||||
"winston": "^2.0.0"
|
"winston": "^2.0.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
apt-get install git npm nodejs
|
apt-get install git npm nodejs sqlite3
|
||||||
npm install
|
npm install
|
||||||
sh start.sh
|
sh start.sh
|
Loading…
Reference in New Issue
Block a user