Annotate

mod_stanza_counter/mod_stanza_counter_http.lua @ 4876:0f5f2d4475b9

mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
author Matthew Wild <mwild1@gmail.com>
date Tue, 18 Jan 2022 17:01:18 +0000
parent 1343:7dbde05b48a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
1 -- (C) 2011, Marco Cirillo (LW.Org)
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
2 -- Exposes stats on HTTP for the stanza counter module.
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
3
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
4 module:depends("http")
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
5
678
429be98872dc mod_stanza_counter_http: change the skipped get_option_array to get_option_string it was supposed to.
Marco Cirillo <maranda@lightwitch.org>
parents: 659
diff changeset
6 local base_path = module:get_option_string("stanza_counter_basepath", "/stanza-counter/")
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
7
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
8 -- http handlers
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
9
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
10 local r_200 = "\n<html>\n<head>\n<title>Prosody's Stanza Counter</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>Incoming and Outgoing stanzas divided per type</h3>\n<p><strong>Incoming IQs</strong>: %d<br/>\n<strong>Outgoing IQs</strong>: %d<br/>\n<strong>Incoming Messages</strong>: %d<br/>\n<strong>Outgoing Messages</strong>: %d<br/>\n<strong>Incoming Presences</strong>: %d<br/>\n<strong>Outgoing Presences</strong>: %d<p>\n</body>\n\n</html>\n"
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
11
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
12 local r_err = "\n<html>\n<head>\n<title>Prosody's Stanza Counter - Error %s</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>%s</h3>\n</body>\n\n</html>\n"
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
13
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
14 local function res(event, code, body, extras)
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
15 local response = event.response
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 678
diff changeset
16
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
17 if extras then
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
18 for header, data in pairs(extras) do response.headers[header] = data end
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
19 end
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
20
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
21 response.status_code = code
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
22 response:send(body)
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
23 end
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
24
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
25 local function req(event)
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
26 if not prosody.stanza_counter then
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
27 local err500 = r_err:format(event, 500, "Stats not found, is the counter module loaded?")
437
78a2a6b2bea3 mod_stanza_counter: missing end.
Marco Cirillo <maranda@lightwitch.org>
parents: 436
diff changeset
28 return res(500, err500) end
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
29 if method == "GET" then
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
30 local forge_res = r_200:format(prosody.stanza_counter.iq["incoming"],
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
31 prosody.stanza_counter.iq["outgoing"],
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
32 prosody.stanza_counter.message["incoming"],
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
33 prosody.stanza_counter.message["outgoing"],
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
34 prosody.stanza_counter.presence["incoming"],
535
39c7115be370 mod_stanza_counter_http: replaced prosody.events.add_handler with module:hook.
Marco Cirillo <maranda@lightwitch.org>
parents: 518
diff changeset
35 prosody.stanza_counter.presence["outgoing"])
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
36 return res(event, 200, forge_res)
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
37 else
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
38 local err405 = r_err:format(405, "Only GET is supported")
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
39 return res(event, 405, err405, {["Allow"] = "GET"})
436
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
40 end
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
41 end
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
42
e4a1f0425380 mod_stanza_counter: splitted plugin :/
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
43 -- initialization.
562
b3f8435e661c mod_stanza_counter_http: added cleanup function (from mod_register_json)
Marco Cirillo <maranda@lightwitch.org>
parents: 535
diff changeset
44
650
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
45 module:provides("http", {
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
46 default_path = base_path,
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
47 route = {
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
48 ["GET /"] = req,
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
49 ["POST /"] = req
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
50 }
34e7093cf419 mod_stanza_counter_http: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 608
diff changeset
51 })