mod_measure_cpu/mod_measure_cpu.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 4043 2af0301af734
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1681
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
module:set_global();
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local measure = require"core.statsmanager".measure;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local mt = require"util.multitable";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local get_time = require "socket".gettime;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local get_clock = os.clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
local measure_cpu_now = measure("amount", "cpu.percent"); -- Current percentage
4043
2af0301af734 mod_measure_cpu: Specify units of total CPU time as seconds
Kim Alvefur <zash@zash.se>
parents: 3448
diff changeset
     9
local measure_cpu_total = measure("counter", "cpu.clock", { units = "seconds" });
1681
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
local last_cpu_wall, last_cpu_clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
module:hook("stats-update", function ()
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
	local new_wall, new_clock = get_time(), get_clock();
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	local pc = 0;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
	if last_cpu_wall then
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
		pc = 100/((new_wall-last_cpu_wall)/(new_clock-last_cpu_clock));
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
	end
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	last_cpu_wall, last_cpu_clock = new_wall, new_clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
	measure_cpu_now(pc);
3448
e0fb97f47212 mod_measure_cpu: Rename counter metric to avoid name clash (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 3435
diff changeset
    21
	measure_cpu_total(new_clock);
1681
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
end);
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
-- Some metadata for mod_munin
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
local munin_meta = mt.new(); munin_meta.data = module:shared"munin/meta";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
local key = "global_cpu_amount";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
munin_meta:set(key, "", "graph_args", "--base 1000 -r --lower-limit 0 --upper-limit 100");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
munin_meta:set(key, "", "graph_title", "Prosody CPU Usage");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
munin_meta:set(key, "", "graph_vlabel", "%");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
munin_meta:set(key, "", "graph_category", "cpu");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
munin_meta:set(key, "percent", "label", "CPU Usage");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
munin_meta:set(key, "percent", "min", "0");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35