annotate mod_measure_storage/mod_measure_storage.lua @ 4738:5aee8d86629a

mod_bookmarks2: Fix handling of nick and password elements This form of child retrieval fails when the stanza elements internally don't have an 'xmlns' attribute, which can happen sometimes for some reason, including when they have been constructed via the stanza builder API. When that is the case then the explicit namespace arguemnt does not match the nil value of the internal attribute. Calling `:get_child()` without the namespace argument does the right thing here, with both nil and the parent namespace as valid values for the internal attribute.
author Kim Alvefur <zash@zash.se>
date Wed, 03 Nov 2021 21:11:55 +0100
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