123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // handles custom metering / monitoring values in pm2
- const io = require("@pm2/io");
- const fs = require("fs-extra");
- const debug = require("./verboseLogging");
- const settings = require("../settings");
- var req1mMeter = null;
- var req10mMeter = null;
- var req1hMeter = null;
- var reqtotalMeter = null;
- var submissionMeter = null;
- var m1 = 0;
- var m10 = 0;
- var h1 = 0;
- var tot = 0;
- var subms = 0;
- /**
- * Initializes the meter module
- * @returns {Promise}
- */
- function init()
- {
- return new Promise((resolve, reject) => {
- try
- {
- req1mMeter = io.metric({
- name: "Reqs / 1m",
- unit: "req"
- });
- req1mMeter.set(-1);
- setInterval(() => {
- req1mMeter.set(m1);
- m1 = 0;
- }, 1000 * 60);
- req10mMeter = io.metric({
- name: "Reqs / 10m",
- unit: "req"
- });
- req10mMeter.set(-1);
- setInterval(() => {
- req10mMeter.set(m10);
- m10 = 0;
- }, 1000 * 60 * 10);
- req1hMeter = io.metric({
- name: "Reqs / 1h",
- unit: "req"
- });
- req1hMeter.set(-1);
- setInterval(() => {
- req1hMeter.set(h1);
- h1 = 0;
- }, 1000 * 60 * 60);
- reqtotalMeter = io.metric({
- name: "Total Reqs",
- unit: "req"
- });
- reqtotalMeter.set(-1);
- submissionMeter = io.metric({
- name: "Submissions",
- unit: "sub"
- });
- subms = fs.readdirSync(settings.jokes.jokeSubmissionPath).length;
- submissionMeter.set(subms);
- setInterval(() => {
- subms = fs.readdirSync(settings.jokes.jokeSubmissionPath).length;
- submissionMeter.set(subms);
- }, 1000 * 60 * 10);
- }
- catch(err)
- {
- return reject(err);
- }
- return resolve();
- });
- }
- /**
- * Adds a number to a meter
- * @param {"req1min"|"req10mins"|"req1hour"|"reqtotal"|"submission"} meterName
- * @param {Number|undefined} addValue
- */
- function update(meterName, addValue)
- {
- if(typeof addValue == "undefined")
- addValue = 1;
- debug("Meter", `Updating meter ${meterName} - adding value ${addValue}`);
-
- if(typeof addValue != "number")
- throw new TypeError(`meter.update(): "addValue" has wrong type "${typeof addValue}" - expected "number"`);
- switch(meterName)
- {
- case "req1min":
- m1 += addValue;
- break;
- case "req10min":
- m10 += addValue;
- break;
- case "req1hour":
- h1 += addValue;
- break;
- case "reqtotal":
- tot += addValue;
- reqtotalMeter.set(tot);
- break;
- case "submission":
- subms += addValue;
- submissionMeter.set(subms);
- break;
- default:
- throw new Error(`meter.update(): "meterName" has incorrect value`);
- }
- return;
- }
- module.exports = { init, update };
|