UNPKG

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
"use strict"; 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); } }