Add support for sending stats to Matrix, split out some code into more generic classes. #1
144
index.js
144
index.js
|
@ -22,54 +22,105 @@ function getYesterday() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} query
|
||||||
|
* @param {any} params
|
||||||
|
* @returns {Promise<int>}
|
||||||
|
*/
|
||||||
|
async function queryScalarAsync(query, ...params) {
|
||||||
|
const connection = await mysql.createConnection({
|
||||||
|
host: process.env.DATABASE_HOST,
|
||||||
|
user: process.env.DATABASE_USER,
|
||||||
|
password: process.env.DATABASE_PASSWORD,
|
||||||
|
database: process.env.DATABASE_NAME
|
||||||
|
});
|
||||||
|
await connection.connect();
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
connection.query(query, params, (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(results[0]);
|
||||||
|
}
|
||||||
|
connection.end();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch call statistics
|
* Fetch call statistics
|
||||||
* @returns {Promise<CallStats>}
|
* @returns {Promise<CallStats>}
|
||||||
*/
|
*/
|
||||||
async function getPreviousDayData() {
|
async function getPreviousDayData() {
|
||||||
return new Promise(async (resolve, reject) => {
|
const [ callsYesterday, callsThisMonth, callsTotal ] = Promise.all([
|
||||||
const yesterday = getYesterday();
|
queryScalarAsync(`
|
||||||
const connection = await mysql.createConnection({
|
|
||||||
host: process.env.DATABASE_HOST,
|
|
||||||
user: process.env.DATABASE_USER,
|
|
||||||
password: process.env.DATABASE_PASSWORD,
|
|
||||||
database: process.env.DATABASE_NAME,
|
|
||||||
multipleStatements: true
|
|
||||||
});
|
|
||||||
await connection.connect();
|
|
||||||
await connection.query(`
|
|
||||||
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
FROM cdr
|
FROM cdr
|
||||||
WHERE calldate BETWEEN ? AND ?;
|
WHERE calldate BETWEEN ? AND ?;
|
||||||
|
`, getYesterday().startDate, getYesterday().endDate),
|
||||||
|
queryScalarAsync(`
|
||||||
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
FROM cdr
|
FROM cdr
|
||||||
WHERE MONTH (calldate) = MONTH (?) AND YEAR (calldate) = YEAR (?);
|
WHERE MONTH (calldate) = MONTH (?) AND YEAR (calldate) = YEAR (?);
|
||||||
|
`, getYesterday().startDate, getYesterday().startDate),
|
||||||
|
queryScalarAsync(`
|
||||||
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
FROM cdr;
|
FROM cdr;
|
||||||
`, [ yesterday.start, yesterday.end, yesterday.start, yesterday.start ], (err, res) => {
|
`)
|
||||||
if (err) {
|
]);
|
||||||
reject(err);
|
const stats = new CallStats({
|
||||||
}
|
totalCallsMade: callsYesterday,
|
||||||
connection.end();
|
totalCallsThisMonth: callsThisMonth,
|
||||||
// let output = {
|
totalCallsEverPlaced: callsTotal
|
||||||
// "Calls Made": res[0][0].call_count,
|
|
||||||
// "Monthly Total": res[1][0].call_count,
|
|
||||||
// "Total Calls Ever Placed": res[2][0].call_count,
|
|
||||||
// "System Uptime": getSystemUptime().toString(false, false),
|
|
||||||
// "All Time Record": null, // Placeholder
|
|
||||||
// }
|
|
||||||
|
|
||||||
const stats = new CallStats({
|
|
||||||
callsMadeToday: res[0][0].call_count,
|
|
||||||
totalCallsThisMonth: res[1][0].call_count,
|
|
||||||
totalCallsEverPlaced: res[2][0].call_count,
|
|
||||||
allTimeRecord: null // Placeholder
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log(stats);
|
|
||||||
resolve(stats);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
console.log("Got stats:", stats);
|
||||||
|
return stats;
|
||||||
|
// return new Promise(async (resolve, reject) => {
|
||||||
|
// const yesterday = getYesterday();
|
||||||
|
// const connection = await mysql.createConnection({
|
||||||
|
// host: process.env.DATABASE_HOST,
|
||||||
|
// user: process.env.DATABASE_USER,
|
||||||
|
// password: process.env.DATABASE_PASSWORD,
|
||||||
|
// database: process.env.DATABASE_NAME,
|
||||||
|
// multipleStatements: true
|
||||||
|
// });
|
||||||
|
// await connection.connect();
|
||||||
|
// await connection.query(`
|
||||||
|
// SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
|
// FROM cdr
|
||||||
|
// WHERE calldate BETWEEN ? AND ?;
|
||||||
|
//
|
||||||
|
// SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
|
// FROM cdr
|
||||||
|
// WHERE MONTH (calldate) = MONTH (?) AND YEAR (calldate) = YEAR (?);
|
||||||
|
//
|
||||||
|
// SELECT COUNT(DISTINCT uniqueid) AS call_count
|
||||||
|
// FROM cdr;
|
||||||
|
// `, [ yesterday.start, yesterday.end, yesterday.start, yesterday.start ], (err, res) => {
|
||||||
|
// if (err) {
|
||||||
|
// reject(err);
|
||||||
|
// }
|
||||||
|
// connection.end();
|
||||||
|
// // let output = {
|
||||||
|
// // "Calls Made": res[0][0].call_count,
|
||||||
|
// // "Monthly Total": res[1][0].call_count,
|
||||||
|
// // "Total Calls Ever Placed": res[2][0].call_count,
|
||||||
|
// // "System Uptime": getSystemUptime().toString(false, false),
|
||||||
|
// // "All Time Record": null, // Placeholder
|
||||||
|
// // }
|
||||||
|
//
|
||||||
|
// const stats = new CallStats({
|
||||||
|
// callsMadeToday: res[0][0].call_count,
|
||||||
|
// totalCallsThisMonth: res[1][0].call_count,
|
||||||
|
// totalCallsEverPlaced: res[2][0].call_count,
|
||||||
|
// allTimeRecord: null // Placeholder
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// console.log(stats);
|
||||||
|
// resolve(stats);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSystemUptime() {
|
function getSystemUptime() {
|
||||||
|
@ -118,30 +169,39 @@ async function sendSummary() {
|
||||||
console.log("Preparing summary.");
|
console.log("Preparing summary.");
|
||||||
const data = await getPreviousDayData();
|
const data = await getPreviousDayData();
|
||||||
console.log("Updating records...");
|
console.log("Updating records...");
|
||||||
const updatedData = await updateRecords(data, records);
|
const stats = await updateRecords(data, records);
|
||||||
console.log("Saving.");
|
console.log("Saving.");
|
||||||
await records.toJSONFile(JSON_FILE);
|
await records.toJSONFile(JSON_FILE);
|
||||||
|
|
||||||
const yesterday = getYesterday();
|
const yesterday = getYesterday();
|
||||||
const makeField = (name, value) => ({ name, value: value === undefined ? "***ERR: UNDEFINED***" : value.toString(), inline: false });
|
|
||||||
|
await sendSummaryDiscord(yesterday, stats)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function sendSummaryDiscord(yesterday, stats) {
|
||||||
|
const makeField = (name, value) => ({
|
||||||
|
name,
|
||||||
|
value: value === undefined ? "***ERR: UNDEFINED***" : value.toString(),
|
||||||
|
inline: false
|
||||||
|
});
|
||||||
|
|
||||||
let embed = {
|
let embed = {
|
||||||
title: `Summary from <t:${Math.floor(yesterday.start / 1000)}:f> to <t:${Math.floor(yesterday.end / 1000)}:f>`,
|
title: `Summary from <t:${Math.floor(yesterday.start / 1000)}:f> to <t:${Math.floor(yesterday.end / 1000)}:f>`,
|
||||||
color: 0x1E90FF,
|
color: 0x1E90FF,
|
||||||
fields: [
|
fields: [
|
||||||
makeField("Calls Made", updatedData.totalCallsMade),
|
makeField("Calls Made", stats.totalCallsMade),
|
||||||
makeField("Monthly Total", updatedData.totalCallsThisMonth),
|
makeField("Monthly Total", stats.totalCallsThisMonth),
|
||||||
makeField("Total Calls Ever Placed", updatedData.totalCallsEverPlaced),
|
makeField("Total Calls Ever Placed", stats.totalCallsEverPlaced),
|
||||||
makeField("System Uptime", getSystemUptime().toString(false, false)),
|
makeField("System Uptime", getSystemUptime().toString(false, false)),
|
||||||
makeField("All Time Record", updatedData.allTimeRecord)
|
makeField("All Time Record", stats.allTimeRecord)
|
||||||
],
|
],
|
||||||
timestamp: new Date(),
|
timestamp: new Date(),
|
||||||
footer: {}
|
footer: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updatedData.isNewRecord) {
|
if (stats.isNewRecord) {
|
||||||
embed.color = 0xFFD700; // Gold color for new record
|
embed.color = 0xFFD700; // Gold color for new record
|
||||||
embed.fields.push(makeField("🎉 NEW RECORD! 🎉", `A new record has been set, at ${updatedData.totalCallsMade}!`));
|
embed.fields.push(makeField("🎉 NEW RECORD! 🎉", `A new record has been set, at ${stats.totalCallsMade}!`));
|
||||||
}
|
}
|
||||||
|
|
||||||
const payload = { embeds: [ embed ] };
|
const payload = { embeds: [ embed ] };
|
||||||
|
|
Loading…
Reference in a new issue