Annotate

mod_measure_storage/mod_measure_storage.lua @ 2608:362ca94192ee

mod_smacks: Add resumed session to event "smacks-hibernation-end" Older versions of this event only have the "intermediate" session in event.session (the one used to resume the existing session), but not the resumed one. This adds event.resumed which contains the resumed one alongside to event.session.
author tmolitor <thilo@eightysoft.de>
date Sat, 11 Mar 2017 01:37:28 +0100
parent 2297:992e40dab31d
child 2686:39cb2a51e779
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
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 local measure_operation_started = module:measure(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
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)
992e40dab31d mod_measure_storage: Experimental new module to measure storage API operations (requires 0.10)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 event.store = wrap_store(module, event.store_name, event.store_type, event.store);
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