view mod_measure_cpu/mod_measure_cpu.lua @ 4249:64aa1d9d70ac

mod_rest: Catch and log errors in callback promise chain From the code it looks like it should be possible to reply to an error stanza, but it did not. Turns out I was saved by my local developer mode module which throws errors if an attempt is made to create an errror reply to an error stanza. However nothing collects this error from the promise, so all I got was confusion.
author Kim Alvefur <zash@zash.se>
date Sun, 15 Nov 2020 16:25:49 +0100
parents 2af0301af734
children
line wrap: on
line source

module:set_global();

local measure = require"core.statsmanager".measure;
local mt = require"util.multitable";
local get_time = require "socket".gettime;
local get_clock = os.clock;

local measure_cpu_now = measure("amount", "cpu.percent"); -- Current percentage
local measure_cpu_total = measure("counter", "cpu.clock", { units = "seconds" });

local last_cpu_wall, last_cpu_clock;
module:hook("stats-update", function ()
	local new_wall, new_clock = get_time(), get_clock();
	local pc = 0;
	if last_cpu_wall then
		pc = 100/((new_wall-last_cpu_wall)/(new_clock-last_cpu_clock));
	end
	last_cpu_wall, last_cpu_clock = new_wall, new_clock;

	measure_cpu_now(pc);
	measure_cpu_total(new_clock);
end);

-- Some metadata for mod_munin
local munin_meta = mt.new(); munin_meta.data = module:shared"munin/meta";
local key = "global_cpu_amount";

munin_meta:set(key, "", "graph_args", "--base 1000 -r --lower-limit 0 --upper-limit 100");
munin_meta:set(key, "", "graph_title", "Prosody CPU Usage");
munin_meta:set(key, "", "graph_vlabel", "%");
munin_meta:set(key, "", "graph_category", "cpu");

munin_meta:set(key, "percent", "label", "CPU Usage");
munin_meta:set(key, "percent", "min", "0");