Mercurial Hosting > luan
annotate host/admin/src/private/lib/monitor.luan @ 2021:b8e5d53c4fc9
admin monitors scheduler
| author | Franklin Schmidt <fschmidt@gmail.com> | 
|---|---|
| date | Mon, 20 Oct 2025 14:45:27 -0600 | 
| parents | 301a6561fb6b | 
| children | 969291201e12 | 
| rev | line source | 
|---|---|
| 1995 | 1 local Luan = require "luan:Luan.luan" | 
| 2 local error = Luan.error | |
| 3 local Io = require "luan:Io.luan" | |
| 4 local uri = Io.uri or error() | |
| 5 local String = require "luan:String.luan" | |
| 6 local trim = String.trim or error() | |
| 7 local Time = require "luan:Time.luan" | |
| 8 local Thread = require "luan:Thread.luan" | |
| 9 local Http = require "luan:http/Http.luan" | |
| 10 local Config = require "site:/private/Config.luan" | |
| 11 local Utils = require "site:/private/lib/Utils.luan" | |
| 12 local Logging = require "luan:logging/Logging.luan" | |
| 13 local logger = Logging.logger "monitor" | |
| 14 | |
| 15 | |
| 16 local who_monitors_who = { | |
| 17 ["admin.s1.luan.software"] = "admin.s2.luan.software" | |
| 18 ["admin.s2.luan.software"] = "admin.s1.luan.software" | |
| 19 } | |
| 20 local frequency = Time.period{minutes=2} | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 21 local url | 
| 1995 | 22 | 
| 23 --[[ -- for development | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 24 who_monitors_who["admin.me.luan.software"] = "admin.me.luan.software" | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 25 url = "http://admin.me.luan.software:8080/hi.txt" | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 26 frequency = Time.period{seconds=30} | 
| 1995 | 27 Config.email_to = "fschmidt@gmail.com" | 
| 28 --]] | |
| 29 | |
| 30 | |
| 31 | |
| 32 local domain = who_monitors_who[Utils.domain] | |
| 33 | |
| 34 if domain == nil then | |
| 35 logger.info "nothing to monitor" | |
| 36 return true | |
| 37 end | |
| 38 | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 39 url = url or "https://"..domain.."/hi.txt" | 
| 1995 | 40 local options = { time_out = Time.period{seconds=20} } | 
| 41 | |
| 42 local function init_check() | |
| 43 local fails = 0 | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 44 local last_page | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 45 | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 46 local function fail() | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 47 fails = fails + 1 | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 48 if fails < 2 then return end | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 49 try | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 50 local s = Utils.ssh(domain,"/Users/administrator/luan/host/restart.sh monitoring") | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 51 if trim(s) == "stopped with stop script" then | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 52 logger.info("stopped with stop script") | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 53 else | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 54 logger.error("restart successful\n"..s) | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 55 Utils.send_mail { | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 56 Subject = domain.." restarted" | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 57 body = s | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 58 } | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 59 end | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 60 fails = 0 | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 61 catch e | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 62 logger.error("restart failed: "..e.get_message()) | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 63 if fails < 5 then | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 64 Utils.send_mail { | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 65 Subject = domain.." restart failed" | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 66 body = e.get_message() | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 67 } | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 68 end | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 69 end | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 70 end | 
| 1995 | 71 | 
| 72 return function() | |
| 73 try | |
| 74 local page = uri(url,options).read_text() | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 75 if page == last_page then | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 76 logger.error("Scheduler not working on "..domain) | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 77 fail() | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 78 return | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 79 end | 
| 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 80 last_page = page | 
| 1995 | 81 fails = 0 | 
| 82 logger.info(domain.." is okay") | |
| 83 catch e | |
| 84 logger.error("Error connecting to "..domain..": "..e.get_message()) | |
| 2021 
b8e5d53c4fc9
admin monitors scheduler
 Franklin Schmidt <fschmidt@gmail.com> parents: 
1995diff
changeset | 85 fail() | 
| 1995 | 86 end | 
| 87 end | |
| 88 end | |
| 89 | |
| 90 Thread.schedule_closure(init_check,{repeating_delay=frequency}) | |
| 91 | |
| 92 logger.info("monitoring "..domain) | |
| 93 | |
| 94 return true | 
