Mercurial > prosody-modules
comparison mod_server_status/mod_server_status.lua @ 649:dfd7f1ed7782
mod_server_status: updated to current HTTP API.
| author | Marco Cirillo <maranda@lightwitch.org> |
|---|---|
| date | Sun, 29 Apr 2012 13:06:26 +0000 |
| parents | edb4afb6a227 |
| children | 74bd7ebe5792 |
comparison
equal
deleted
inserted
replaced
| 648:6f0e0d6790a7 | 649:dfd7f1ed7782 |
|---|---|
| 1 -- (C) 2011, Marco Cirillo (LW.Org) | 1 -- (C) 2011, Marco Cirillo (LW.Org) |
| 2 -- Display server stats in readable XML or JSON format | 2 -- Display server stats in readable XML or JSON format |
| 3 | 3 |
| 4 module:depends("http") | |
| 4 module:set_global() | 5 module:set_global() |
| 5 | 6 |
| 6 local ports = module:get_option_array("server_status_http_ports", {{ port = 5280 }}) | 7 local base_path = module:get_option_array("server_status_basepath", "/server-status/") |
| 7 local show_hosts = module:get_option_array("server_status_show_hosts", nil) | 8 local show_hosts = module:get_option_array("server_status_show_hosts", nil) |
| 8 local show_comps = module:get_option_array("server_status_show_comps", nil) | 9 local show_comps = module:get_option_array("server_status_show_comps", nil) |
| 9 local json_output = module:get_option_boolean("server_status_json", false) | 10 local json_output = module:get_option_boolean("server_status_json", false) |
| 10 | 11 |
| 11 local httpserver = require "net.httpserver" | |
| 12 local json_encode = require "util.json".encode | 12 local json_encode = require "util.json".encode |
| 13 | 13 |
| 14 -- code begin | 14 -- code begin |
| 15 | 15 |
| 16 if not prosody.stanza_counter and not show_hosts and not show_comps then | 16 if not prosody.stanza_counter and not show_hosts and not show_comps then |
| 17 module:log ("error", "mod_server_status requires at least one of the following things:") | 17 module:log ("error", "mod_server_status requires at least one of the following things:") |
| 18 module:log ("error", "mod_stanza_counter loaded, or either server_status_show_hosts or server_status_show_comps configuration values set.") | 18 module:log ("error", "mod_stanza_counter loaded, or either server_status_show_hosts or server_status_show_comps configuration values set.") |
| 19 module:log ("error", "check the module wiki at: http://code.google.com/p/prosody-modules/wiki/mod_server_status") | 19 module:log ("error", "check the module wiki at: http://code.google.com/p/prosody-modules/wiki/mod_server_status") |
| 20 return false | 20 return false |
| 21 end | 21 end |
| 22 | |
| 23 local r_err = "\n<html>\n<head>\n<title>Prosody's Server Status - 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" | |
| 24 | 22 |
| 25 local response_table = {} | 23 local response_table = {} |
| 26 response_table.header = '<?xml version="1.0" encoding="UTF-8" ?>' | 24 response_table.header = '<?xml version="1.0" encoding="UTF-8" ?>' |
| 27 response_table.doc_header = '<document>' | 25 response_table.doc_header = '<document>' |
| 28 response_table.doc_closure = '</document>' | 26 response_table.doc_closure = '</document>' |
| 109 return json_encode(result) | 107 return json_encode(result) |
| 110 end | 108 end |
| 111 | 109 |
| 112 -- http handlers | 110 -- http handlers |
| 113 | 111 |
| 114 local function response(code, r, h) | 112 local function request(event) |
| 115 local response = { status = code, body = r } | 113 local response = event.response |
| 116 | 114 if not json_output then |
| 117 if h then response.headers = h end | 115 response.headers.content_type = "application/json" |
| 118 return response | 116 response:send(forge_response_xml()) |
| 119 end | |
| 120 | |
| 121 local function request(method, body, request) | |
| 122 if method == "GET" then | |
| 123 if not json_output then return response(200, forge_response_xml()) else return response(200, forge_response_json()) end | |
| 124 else | 117 else |
| 125 local err405 = r_err:format("405", "Only GET is supported") | 118 response.headers.content_type = "text/xml" |
| 126 return response(405, err405, {["Allow"] = "GET"}) | 119 response:send(forge_response_json()) |
| 127 end | 120 end |
| 128 end | 121 end |
| 129 | 122 |
| 130 -- initialization. | 123 -- initialization. |
| 131 -- init http interface | |
| 132 | 124 |
| 133 local function setup() | 125 module:provides("http", { |
| 134 httpserver.new_from_config(ports, request, { base = "server-status" }) | 126 default_path = base_path, |
| 135 end | 127 route = { |
| 128 ["GET /"] = request | |
| 129 } | |
| 130 }) | |
| 136 | 131 |
| 137 if prosody.start_time then | |
| 138 setup() | |
| 139 else | |
| 140 module:hook("server-started", setup) | |
| 141 end |
