Mercurial > prosody-modules
annotate mod_statistics_mem/mod_statistics_mem.lua @ 5668:ecfd7aece33b
mod_measure_modules: Report module statuses via OpenMetrics
Someone in the chat asked about a health check endpoint, which reminded
me of mod_http_status, which provides access to module statuses with
full details. After that, this idea came about, which seems natural.
As noted in the README, it could be used to monitor that critical
modules are in fact loaded correctly.
As more modules use the status API, the more useful this module and
mod_http_status becomes.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 06 Oct 2023 18:34:39 +0200 |
parents | 403d5cd924eb |
children |
rev | line source |
---|---|
1379
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Probably Linux-specific memory statistics |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 module:set_global(); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local human; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 do |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local tostring = tostring; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local s_format = string.format; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local m_floor = math.floor; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local m_max = math.max; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local prefixes = "kMGTPEZY"; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local multiplier = 1024; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 function human(num) |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 num = tonumber(num) or 0; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local m = 0; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 while num >= multiplier and m < #prefixes do |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 num = num / multiplier; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 m = m + 1; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 end |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB", |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 num, m > 0 and (prefixes:sub(m,m) .. "i") or ""); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 end |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local pagesize = 4096; -- according to getpagesize() |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 module:provides("statistics", { |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 statistics = { |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 memory_total = { -- virtual memory |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 get = function () |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 local statm, err = io.open"/proc/self/statm"; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 if statm then |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 local total = statm:read"*n"; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 statm:close(); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 return total * pagesize; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 else |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 module:log("debug", err); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 end |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 end; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 tostring = human; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 }; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 memory_rss = { -- actual in-memory data size |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 get = function () |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 local statm, err = io.open"/proc/self/statm"; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 if statm then |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 statm:read"*n"; -- Total size, ignore |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 local rss = statm:read"*n"; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 statm:close(); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 return rss * pagesize; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 else |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 module:log("debug", err); |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 end |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 end; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 tostring = human; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 }; |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 } |
403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 }); |