annotate mod_log_http/mod_log_http.lua @ 4220:0b1b7d671448

mod_log_ringbuffer: Document how to integrate with mod_debug_traceback
author Matthew Wild <mwild1@gmail.com>
date Fri, 16 Oct 2020 18:48:08 +0100
parents 3f44abfe7264
children 456b9f608fcf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2700
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 module:set_global();
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local http = require "net.http";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local codes = require "net.http.codes";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local json = require "util.json";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local log = assert(io.open(assert(module:get_option_string("log_http_file"), "Please supply log_http_file in the config"), "a+"));
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local function append_request(id, req)
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 local headers = {};
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 for k, v in pairs(req.headers) do
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 table.insert(headers, { name = k, value = v });
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local queryString = {};
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 if req.query then
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 for _, pair in ipairs(http.formdecode(req.query)) do
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 table.insert(queryString, pair);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 log:write("<<<", json.encode({
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 id = id;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 type = "request";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 method = req.method;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 url = req.url;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 httpVersion = "HTTP/1.1";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 cookies = {};
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 headers = headers;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 queryString = queryString;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 postData = req.body and {
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 mimeType = req.headers["Content-Type"];
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 text = req.body;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 } or nil;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 headersSize = -1;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 bodySize = -1;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 }), "\n");
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 local function append_response(id, resp)
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 local headers = {};
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 for k, v in pairs(resp.headers) do
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 table.insert(headers, { name = k, value = v });
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 log:write(">>>", json.encode({
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 id = id;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 type = "response";
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 status = resp.code;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 statusText = codes[resp.code];
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 httpVersion = resp.httpversion;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 cookies = {};
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 headers = headers;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 content = resp.body and {
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 size = #resp.body;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 mimeType = resp.headers.content_type;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 text = resp.body;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 } or nil;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 headersSize = -1;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 bodySize = -1;
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 }), "\n");
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 end
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 module:hook_object_event(http.events, "request", function (event)
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 module:log("warn", "Request to %s!", event.url);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 append_request(event.request.id, event.request);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 end);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 module:hook_object_event(http.events, "request-connection-error", function (event)
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 module:log("warn", "Failed to make request to %s!", event.url);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 end);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 module:hook_object_event(http.events, "response", function (event)
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 module:log("warn", "Received response %d from %s!", event.code, event.url);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 append_response(event.request.id, event.response);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end);
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 function module.unload()
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 log:close();
7a5dae85f26f mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 end