annotate mod_measure_storage/mod_measure_storage.lua @ 4515:2e33eeafe962

mod_muc_markers: Prevent any markers from reaching the archive, even if untracked Original intention was to leave alone things that this module isn't handling. However markers in archives are just problematic without more advanced logic about what is markable and what is not. It also requires a more advanced query in mod_muc_rai to determine the latest markable message instead of the latest archived message. I'd rather keep the "is archivable" and "is markable" definition the same for simplicity. I don't want to introduce yet another set of rules for no reason. No markers in MAM.
author Matthew Wild <mwild1@gmail.com>
date Mon, 22 Mar 2021 15:55:02 +0000
parents 04ae5b45e6c7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2297
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 module:set_global()
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local function return_args_after_calling(f, ...)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 f();
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 return ...
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local function time_method(module, store_name, store_type, method_name, method_function)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local opt_use_tags = module:get_option_boolean("measure_storage_tagged_metric", false);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 local metric_name, metric_tags;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 if opt_use_tags then
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 metric_name, metric_tags = "storage_operation", ("store_name:%s,store_type:%s,store_operation:%s"):format(store_name, store_type, method_name);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 else
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 metric_name = store_name.."_"..store_type.."_"..method_name;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 end
2686
39cb2a51e779 mod_measure_storage: Pass the measurement type, fixes traceback
Kim Alvefur <zash@zash.se>
parents: 2297
diff changeset
17 local measure_operation_started = module:measure(metric_name, "times", metric_tags);
2297
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 return function (...)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 module:log("debug", "Measuring storage operation %s (%s)", metric_name, metric_tags or "no tags");
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local measure_operation_complete = measure_operation_started();
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 return return_args_after_calling(measure_operation_complete, method_function(...));
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 end;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 local function wrap_store(module, store_name, store_type, store)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 local new_store = setmetatable({}, {
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 __index = function (t, method_name)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local original_method = store[method_name];
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 if type(original_method) ~= "function" then
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 if original_method then
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 rawset(t, method_name, original_method);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 return original_method;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 local timed_method = time_method(module, store_name, store_type, method_name, original_method);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 rawset(t, method_name, timed_method);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 return timed_method;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 end;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 });
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 return new_store;
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 local function hook_event(module)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 module:hook("store-opened", function(event)
2693
04ae5b45e6c7 mod_measure_storage: Assume store type is "keyval" if missing
Kim Alvefur <zash@zash.se>
parents: 2686
diff changeset
46 event.store = wrap_store(module, event.store_name, event.store_type or "keyval", event.store);
2297
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 end);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 function module.load()
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 hook_event(module);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 end
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 function module.add_host(module)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 hook_event(module);
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 end