Annotate

mod_measure_storage/mod_measure_storage.lua @ 5461:06640647d193

mod_http_oauth2: Fix use of arbitrary ports in loopback redirect URIs Per draft-ietf-oauth-v2-1-08#section-8.4.2 > The authorization server MUST allow any port to be specified at the > time of the request for loopback IP redirect URIs, to accommodate > clients that obtain an available ephemeral port from the operating > system at the time of the request. Uncertain if it should normalize the host part, but it also seems harmless to treat IPv6 and IPv4 the same here. One thing is that "localhost" is NOT RECOMMENDED because it can sometimes be pointed to non-loopback interfaces via DNS or hosts file.
author Kim Alvefur <zash@zash.se>
date Wed, 17 May 2023 13:51:30 +0200
parent 2693:04ae5b45e6c7
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