mod_measure_cpu/mod_measure_cpu.lua
author Kim Alvefur <zash@zash.se>
Thu, 23 Apr 2015 17:00:59 +0200
changeset 1681 2a4c632a24cb
child 3435 8357cabc31f6
permissions -rw-r--r--
mod_measure_cpu: Collect CPU usage statistic
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
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local last_cpu_wall, last_cpu_clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
module:hook("stats-update", function ()
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	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
    13
	local pc = 0;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	if last_cpu_wall then
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		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
    16
	end
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
	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
    18
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	measure_cpu_now(pc);
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
end);
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
-- Some metadata for mod_munin
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
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
    24
local key = "global_cpu_amount";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
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
    27
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
    28
munin_meta:set(key, "", "graph_vlabel", "%");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
munin_meta:set(key, "", "graph_category", "cpu");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
munin_meta:set(key, "percent", "label", "CPU Usage");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
munin_meta:set(key, "percent", "min", "0");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33