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:
1995
diff
changeset
|
21 local url |
1995 | 22 |
23 --[[ -- for development | |
2021
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
24 who_monitors_who["admin.me.luan.software"] = "admin.me.luan.software" |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
25 url = "http://admin.me.luan.software:8080/hi.txt" |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
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:
1995
diff
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:
1995
diff
changeset
|
44 local last_page |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
45 |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
46 local function fail() |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
47 fails = fails + 1 |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
48 if fails < 2 then return end |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
49 try |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
50 local s = Utils.ssh(domain,"/Users/administrator/luan/host/restart.sh monitoring") |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
51 if trim(s) == "stopped with stop script" then |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
52 logger.info("stopped with stop script") |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
53 else |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
54 logger.error("restart successful\n"..s) |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
55 Utils.send_mail { |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
56 Subject = domain.." restarted" |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
57 body = s |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
58 } |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
59 end |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
60 fails = 0 |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
61 catch e |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
62 logger.error("restart failed: "..e.get_message()) |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
63 if fails < 5 then |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
64 Utils.send_mail { |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
65 Subject = domain.." restart failed" |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
66 body = e.get_message() |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
67 } |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
68 end |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
69 end |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
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:
1995
diff
changeset
|
75 if page == last_page then |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
76 logger.error("Scheduler not working on "..domain) |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
77 fail() |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
78 return |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
changeset
|
79 end |
b8e5d53c4fc9
admin monitors scheduler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1995
diff
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:
1995
diff
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 |