annotate mod_measure_process/mod_measure_process.lua @ 4876:0f5f2d4475b9

mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
author Matthew Wild <mwild1@gmail.com>
date Tue, 18 Jan 2022 17:01:18 +0000
parents 025cf93acfe9
children adc6241e5d16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4554
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
1 module:set_global()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
2
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
3 local get_cpu_time = os.clock
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
4
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
5 local custom_metric = require "core.statsmanager".metric
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
6 local cpu_time = custom_metric(
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
7 "counter", "process_cpu", "seconds",
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
8 "CPU time used by Prosody as reported by clock(3)."
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
9 ):with_labels()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
10
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
11 local lfs = require "lfs"
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
12
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
13 module:hook("stats-update", function ()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
14 cpu_time:set(get_cpu_time())
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
15 end);
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
16
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
17 if lfs.attributes("/proc/self/statm", "mode") == "file" then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
18 local pagesize = module:get_option_number("memory_pagesize", 4096); -- getconf PAGESIZE
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
19
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
20 local vsz = custom_metric(
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
21 "gauge", "process_virtual_memory", "bytes",
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
22 "Virtual memory size in bytes."
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
23 ):with_labels()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
24 local rss = custom_metric(
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
25 "gauge", "process_resident_memory", "bytes",
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
26 "Resident memory size in bytes."
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
27 ):with_labels()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
28
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
29 module:hook("stats-update", function ()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
30 local statm, err = io.open("/proc/self/statm");
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
31 if not statm then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
32 module:log("error", tostring(err));
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
33 return;
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
34 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
35 -- virtual memory (caches, opened librarys, everything)
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
36 vsz:set(statm:read("*n") * pagesize);
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
37 -- resident set size (actually used memory)
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
38 rss:set(statm:read("*n") * pagesize);
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
39 statm:close();
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
40 end);
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
41 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
42
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
43 if lfs.attributes("/proc/self/fd", "mode") == "directory" then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
44 local open_fds = custom_metric(
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
45 "gauge", "process_open_fds", "",
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
46 "Number of open file descriptors."
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
47 ):with_labels()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
48
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
49 local has_posix, posix = pcall(require, "util.pposix")
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
50 local max_fds
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
51 if has_posix then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
52 max_fds = custom_metric(
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
53 "gauge", "process_max_fds", "",
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
54 "Maximum number of open file descriptors"
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
55 ):with_labels()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
56 else
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
57 module:log("warn", "not reporting maximum number of file descriptors because mod_posix is not available")
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
58 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
59
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
60 module:hook("stats-update", function ()
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
61 local count = 0
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
62 for _ in lfs.dir("/proc/self/fd") do
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
63 count = count + 1
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
64 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
65 open_fds:set(count)
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
66
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
67 if has_posix then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
68 local ok, soft, hard = posix.getrlimit("NOFILE")
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
69 if ok then
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
70 max_fds:set(hard)
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
71 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
72 end
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
73 end);
025cf93acfe9 mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
74 end