spigot-anti-piracy-csv-exporter
Version:
A helper utility to generate a csv export for the spigot-anti-piracy-backend
78 lines (77 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const json2csv_1 = require("json2csv");
const readline_1 = require("readline");
const instream = fs_1.createReadStream(process.env.LOG_FILE || 'request.log');
const rl = readline_1.createInterface({
input: instream,
terminal: false,
});
const rawLogEntires = [];
rl.on('line', line => rawLogEntires.push(JSON.parse(line))).on('close', () => filterLogEntries());
function filterLogEntries() {
const users = rawLogEntires.reduce((_users, logEntry) => {
const userId = logEntry.userId;
let ip = logEntry.ip;
const port = logEntry.port;
if (port) {
ip += `:${port}`;
}
const blacklisted = logEntry.blacklisted;
if (!_users) {
_users = [];
}
if (userId && ip && !blacklisted) {
_users = processUserEntry(_users, userId, ip);
}
return _users;
}, []);
writeToCSV(users);
}
function processUserEntry(users, userId, ip) {
const included = users.some(elem => elem.userId === userId);
if (included) {
users = updateUser(users, userId, ip);
}
else {
createNewUser(ip, userId, users);
}
return users;
}
function updateUser(users, userId, ip) {
users = users.map(user => {
if (user.userId === userId) {
const ips = new Set(user.ips);
ips.add(ip);
user.ips = Array.from(ips);
user.count = ips.size;
}
return user;
});
return users;
}
function createNewUser(ip, userId, users) {
const newUser = {
count: 1,
ips: [ip],
userId,
};
users.push(newUser);
}
function writeToCSV(users) {
const fields = ['userId', 'count', 'ips'];
try {
const parser = new json2csv_1.Parser({ fields, delimiter: ',' });
const csv = parser.parse(users);
fs_1.writeFile(process.env.CSV_FILE || 'users.csv', csv, _err => {
if (_err) {
throw _err;
}
console.log(`Wrote ${users.length} user ids to the csv.`);
});
}
catch (err) {
console.error(err);
}
}