Mercurial > prosody-modules
annotate mod_rest/example/app.py @ 5668:ecfd7aece33b
mod_measure_modules: Report module statuses via OpenMetrics
Someone in the chat asked about a health check endpoint, which reminded
me of mod_http_status, which provides access to module statuses with
full details. After that, this idea came about, which seems natural.
As noted in the README, it could be used to monitor that critical
modules are in fact loaded correctly.
As more modules use the status API, the more useful this module and
mod_http_status becomes.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 06 Oct 2023 18:34:39 +0200 |
parents | f3fbfde9683d |
children |
rev | line source |
---|---|
3853 | 1 from flask import Flask, Response, request, jsonify |
2 | |
3 app = Flask("echobot") | |
4 | |
5 | |
3861
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
6 @app.route("/api", methods=["OPTIONS"]) |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
7 def options(): |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
8 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
9 Startup check. Return an appropriate Accept header to confirm the |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
10 data type to use. |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
11 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
12 |
3861
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
13 return Response(status=200, headers={"accept": "application/json"}) |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
14 |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
15 |
3853 | 16 @app.route("/api", methods=["POST"]) |
17 def hello(): | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
18 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
19 Example RESTful JSON format stanza handler. |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
20 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
21 |
3853 | 22 print(request.data) |
23 if request.is_json: | |
24 data = request.get_json() | |
25 | |
26 if "kind" not in data: | |
27 return Response(status=400) | |
28 | |
29 if data["kind"] == "message" and "body" in data: | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
30 # Reply to a message |
3853 | 31 return jsonify({"body": "Yes this is flask app"}) |
32 | |
33 elif data["kind"] == "iq" and data["type"] == "get": | |
4248
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
34 if "disco" in data: |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
35 # Return supported features |
3853 | 36 return jsonify( |
37 { | |
38 "disco": { | |
39 "identities": [ | |
40 { | |
41 "category": "component", | |
42 "type": "generic", | |
43 "name": "Flask app", | |
44 } | |
45 ], | |
46 "features": [ | |
47 "http://jabber.org/protocol/disco#info", | |
48 "http://jabber.org/protocol/disco#items", | |
4246
53ae1df31950
mod_rest/example: Advertise version query support
Kim Alvefur <zash@zash.se>
parents:
3863
diff
changeset
|
49 "jabber:iq:version", |
3853 | 50 "urn:xmpp:ping", |
51 ], | |
52 } | |
53 } | |
54 ) | |
55 | |
56 elif "items" in data: | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
57 # Disco items |
3853 | 58 return jsonify( |
59 {"items": [{"jid": "example.org", "name": "Example Dot Org"}]} | |
60 ) | |
61 | |
3854
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
62 elif "version" in data: |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
63 # Version info |
3854
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
64 return jsonify({"version": {"name": "app.py", "version": "0"}}) |
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
65 |
4248
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
66 elif "ping" in data: |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
67 # Respond to ping |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
68 return Response(status=204) |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
69 |
3853 | 70 return Response(status=501) |
71 | |
72 | |
73 if __name__ == "__main__": | |
74 app.run() |