diff --git a/README_ru.md b/README_ru.md index c576ee8..8bcf899 100644 --- a/README_ru.md +++ b/README_ru.md @@ -100,8 +100,8 @@ ui:prepare_context_menu({ # Сетевые функции * `http:get(url, [id])` - выполняет запрос HTTP GET, id - строка-идентификатор запрос (см. ниже); -* `http:post(url, string, [id])` - выполняет запрос HTTP POST, второй аргумент - JSON-строка; -* `http:put(url, [id])` - выполняет запрос HTTP PUT; +* `http:post(url, body, media_type, [id])` - выполняет запрос HTTP POST; +* `http:put(url, body, media_type, [id])` - выполняет запрос HTTP; * `http:delete(url, [id])` - выполняет запрос HTTP DELETE. Эти функции не возвращают никакого значения, а вместо этого вызывают колбек `on_network_result(string, [code])`. Первый аргумент: тело ответа, второй (опциональный) - код (200, 404 и т.д.). diff --git a/main/updatimerobot-widget.lua b/main/updatimerobot-widget.lua new file mode 100644 index 0000000..b0071ac --- /dev/null +++ b/main/updatimerobot-widget.lua @@ -0,0 +1,53 @@ +-- name = "Uptimerobot" +-- description = "Shows uptime information from uptimerobot.com. Needs api key." +-- data_source = "https://uptimerobot.com" +-- type = "widget" +-- author = "Evgeny Zobnin (zobnin@gmail.com) +-- version = "1.0" +-- arguments_help = "Enter your API key" + +local json = require "json" +local md_colors = require "md_colors" + +-- constants +local api_url = "https://api.uptimerobot.com/v2/" +local media_type = "application/x-www-form-urlencoded" + +function on_alarm() + if (next(aio:get_args()) == nil) then + ui:show_text("Enter API key in the settings") + return + end + + local key = aio:get_args()[1] + local body = "api_key="..key.."&format=json" + + http:post(api_url.."getMonitors", body, media_type) +end + +function on_network_result(result) + local parsed = json.decode(result) + + if (parsed.stat ~= "ok") then + ui:show_text("Error: "..parsed.error.message) + return + end + + local strings_tab = {} + + for k,v in ipairs(parsed.monitors) do + strings_tab[k] = v.friendly_name..": "..format_status(v.status) + end + + ui:show_lines(strings_tab) +end + +-- utils + +function format_status(status) + local statuses = { "down", "up" } + local status_colors = { "red_500", "green_500" } + + return ""..statuses[status].."" +end +