1
0
mirror of https://github.com/elisspace/FxLifeSheet.git synced 2026-08-29 15:44:00 +00:00

Add additional rolling averages on new entries

This commit is contained in:
Felix Krause
2022-05-02 12:00:38 +02:00
parent 242b70195b
commit 73cf9bcfb7
2 changed files with 107 additions and 0 deletions

View File

@@ -11,6 +11,9 @@ var currentlyAskedQuestionObject = null;
var currentlyAskedQuestionMessageId = null;
var currentlyAskedQuestionQueue = [];
initBot();
function roundNumberExactly(number, decimals) {
return (Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals)).toFixed(decimals);
}
function getButtonText(number) {
var emojiNumber = {
"0": "0⃣",
@@ -93,6 +96,46 @@ function printGraph(key, ctx, numberOfRecentValuesToPrint, additionalValue, skip
url: url
});
}
var queryToUse = "SELECT";
var weekTimestamp = moment()
.subtract(7, "days")
.unix() * 1000;
var monthTimestamp = moment()
.subtract(30, "days")
.unix() * 1000;
var quarterTimestamp = moment()
.subtract(90, "days")
.unix() * 1000;
var yearTimestamp = moment()
.subtract(365, "days")
.unix() * 1000;
var athTimestamp = moment("2019-04-12").unix() * 1000;
if (key == "mood") {
athTimestamp = moment("2018-02-01").unix() * 1000;
}
queryToUse += "(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > " + weekTimestamp + " AND key='" + key + "') as " + key + "Week,";
queryToUse += "(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > " + monthTimestamp + " AND key='" + key + "') as " + key + "Month,";
queryToUse += "(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > " + quarterTimestamp + " AND key='" + key + "') as " + key + "Quarter,";
queryToUse += "(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > " + yearTimestamp + " AND key='" + key + "') as " + key + "Year,";
queryToUse += "(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > " + athTimestamp + " AND key='" + key + "') as " + key + "AllTime,";
queryToUse += "(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > " + weekTimestamp + " AND key='" + key + "') as " + key + "WeekCount,";
queryToUse += "(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > " + monthTimestamp + " AND key='" + key + "') as " + key + "MonthCount,";
queryToUse += "(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > " + quarterTimestamp + " AND key='" + key + "') as " + key + "QuarterCount,";
queryToUse += "(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > " + yearTimestamp + " AND key='" + key + "') as " + key + "YearCount,";
queryToUse += "(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > " + athTimestamp + " AND key='" + key + "') as " + key + "AllTimeCount";
console.log(queryToUse);
postgres.client.query({
text: queryToUse
}, function (err, res) {
var rows = ["week", "month", "quarter", "year", "alltime"];
var c = res.rows[0];
console.log(c);
var finalText = [];
for (var i = 0; i < rows.length; i++) {
finalText.push(roundNumberExactly(c[key + rows[i]], 2) + " - " + rows[i]);
}
ctx.reply(finalText.join("\n"));
});
});
}
function triggerNextQuestionFromQueue(ctx) {

View File

@@ -19,6 +19,12 @@ let currentlyAskedQuestionQueue: Array<QuestionToAsk> = []; // keep track of all
initBot();
function roundNumberExactly(number, decimals) {
return (
Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals)
).toFixed(decimals);
}
function getButtonText(number) {
let emojiNumber = {
"0": "0⃣",
@@ -130,6 +136,64 @@ function printGraph(
url: url
});
}
// Now render the week/month/quarter/year average
let queryToUse = "SELECT";
const weekTimestamp =
moment()
.subtract(7, "days")
.unix() * 1000;
const monthTimestamp =
moment()
.subtract(30, "days")
.unix() * 1000;
const quarterTimestamp =
moment()
.subtract(90, "days")
.unix() * 1000;
const yearTimestamp =
moment()
.subtract(365, "days")
.unix() * 1000;
let athTimestamp = moment("2019-04-12").unix() * 1000;
if (key == "mood") {
athTimestamp = moment("2018-02-01").unix() * 1000;
}
queryToUse += `(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > ${weekTimestamp} AND key='${key}') as ${key}Week,`;
queryToUse += `(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > ${monthTimestamp} AND key='${key}') as ${key}Month,`;
queryToUse += `(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > ${quarterTimestamp} AND key='${key}') as ${key}Quarter,`;
queryToUse += `(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > ${yearTimestamp} AND key='${key}') as ${key}Year,`;
queryToUse += `(SELECT ROUND(AVG(value::numeric), 4) FROM raw_data WHERE timestamp > ${athTimestamp} AND key='${key}') as ${key}AllTime,`;
queryToUse += `(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > ${weekTimestamp} AND key='${key}') as ${key}WeekCount,`;
queryToUse += `(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > ${monthTimestamp} AND key='${key}') as ${key}MonthCount,`;
queryToUse += `(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > ${quarterTimestamp} AND key='${key}') as ${key}QuarterCount,`;
queryToUse += `(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > ${yearTimestamp} AND key='${key}') as ${key}YearCount,`;
queryToUse += `(SELECT COUNT(value::numeric) FROM raw_data WHERE timestamp > ${athTimestamp} AND key='${key}') as ${key}AllTimeCount`;
console.log(queryToUse);
postgres.client.query(
{
text: queryToUse
},
(err, res) => {
const rows = ["week", "month", "quarter", "year", "alltime"];
let c = res.rows[0];
console.log(c);
let finalText = [];
for (let i = 0; i < rows.length; i++) {
// let spaces = "";
// for (let j = 0; j < "alltime".length - rows[i].length; j++) {
// spaces += " ";
// }
finalText.push(
roundNumberExactly(c[key + rows[i]], 2) + " - " + rows[i]
);
}
ctx.reply(finalText.join("\n"));
}
);
}
);
}