Mercurial > prosody-modules
annotate mod_log_http/mod_log_http.lua @ 4362:116c88c28532
mod_http_admin_api: restructure group-related info in API
- Return the members of the group right in the get_group_by_id
call. This is an O(1) of extra work.
- Remove the groups attribute from get_user_by_name as that is
O(n) of work and rarely immediately needed.
The replacement for the group membership information in the user
is for now to use the group API and iterate; future work may fix
that.
| author | Jonas Schäfer <jonas@wielicki.name> |
|---|---|
| date | Wed, 20 Jan 2021 15:30:29 +0100 |
| parents | 456b9f608fcf |
| children | 3bd725430f40 |
| rev | line source |
|---|---|
|
4317
456b9f608fcf
mod_log_http: Switch to line buffering (thanks Zash+Ge0rG)
Matthew Wild <mwild1@gmail.com>
parents:
2705
diff
changeset
|
1 Addmodule:set_global(); |
|
2700
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+")); |
|
4317
456b9f608fcf
mod_log_http: Switch to line buffering (thanks Zash+Ge0rG)
Matthew Wild <mwild1@gmail.com>
parents:
2705
diff
changeset
|
8 log:setvbuf("line"); |
|
2700
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 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
|
11 local headers = {}; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 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
|
13 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
|
14 end |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local queryString = {}; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 if req.query then |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 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
|
18 table.insert(queryString, pair); |
|
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 end |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 log:write("<<<", json.encode({ |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 id = id; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 type = "request"; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 method = req.method; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 url = req.url; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 httpVersion = "HTTP/1.1"; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 cookies = {}; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 headers = headers; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 queryString = queryString; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 postData = req.body and { |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 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
|
32 text = req.body; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 } or nil; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 headersSize = -1; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 bodySize = -1; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 }), "\n"); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 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
|
40 local headers = {}; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 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
|
42 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
|
43 end |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 log:write(">>>", json.encode({ |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 id = id; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 type = "response"; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 status = resp.code; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 statusText = codes[resp.code]; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 httpVersion = resp.httpversion; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 cookies = {}; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 headers = headers; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 content = resp.body and { |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 size = #resp.body; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 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
|
55 text = resp.body; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 } or nil; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 headersSize = -1; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 bodySize = -1; |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 }), "\n"); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 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
|
63 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
|
64 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
|
65 end); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 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
|
68 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
|
69 end); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 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
|
72 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
|
73 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
|
74 end); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 function module.unload() |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 log:close(); |
|
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 end |
