Mercurial Hosting > luan
diff host/admin/src/private/lib/monitor.luan @ 1995:301a6561fb6b
add host/admin
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 04 Jul 2025 10:25:38 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/host/admin/src/private/lib/monitor.luan Fri Jul 04 10:25:38 2025 -0600 @@ -0,0 +1,82 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local Io = require "luan:Io.luan" +local uri = Io.uri or error() +local String = require "luan:String.luan" +local trim = String.trim or error() +local Time = require "luan:Time.luan" +local Thread = require "luan:Thread.luan" +local Http = require "luan:http/Http.luan" +local Config = require "site:/private/Config.luan" +local Utils = require "site:/private/lib/Utils.luan" +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "monitor" + + +local who_monitors_who = { + -- ["admin.me.luan.software"] = "admin.me.luan.software" + ["admin.s1.luan.software"] = "admin.s2.luan.software" + ["admin.s2.luan.software"] = "admin.s1.luan.software" +} +local frequency = Time.period{minutes=2} + +--[[ -- for development +--who_monitors_who["admin.me.luan.software"] = "admin.me.luan.software" +frequency = Time.period{seconds=20} +Config.email_to = "fschmidt@gmail.com" +--]] + + + +local domain = who_monitors_who[Utils.domain] + +if domain == nil then + logger.info "nothing to monitor" + return true +end + +local url = "https://"..domain.."/hi" +local options = { time_out = Time.period{seconds=20} } + +local function init_check() + local fails = 0 + + return function() + try + local page = uri(url,options).read_text() + fails = 0 + logger.info(domain.." is okay") + catch e + logger.error("Error connecting to "..domain..": "..e.get_message()) + fails = fails + 1 + if fails < 2 then return end + try + local s = Utils.ssh(domain,"/Users/administrator/luan/host/restart.sh monitoring") + if trim(s) == "stopped with stop script" then + logger.info("stopped with stop script") + else + logger.error("restart successful\n"..s) + Utils.send_mail { + Subject = domain.." restarted" + body = s + } + end + fails = 0 + catch e + logger.error("restart failed: "..e.get_message()) + if fails < 5 then + Utils.send_mail { + Subject = domain.." restart failed" + body = e.get_message() + } + end + end + end + end +end + +Thread.schedule_closure(init_check,{repeating_delay=frequency}) + +logger.info("monitoring "..domain) + +return true