Software /
code /
prosody-modules
Comparison
mod_inotify_reload/mod_inotify_reload.lua @ 5673:0eb2d5ea2428
merge
author | Stephen Paul Weber <singpolyma@singpolyma.net> |
---|---|
date | Sat, 06 May 2023 19:40:23 -0500 |
parent | 5395:82207f936f1f |
comparison
equal
deleted
inserted
replaced
5672:2c69577b28c2 | 5673:0eb2d5ea2428 |
---|---|
10 local inh = inotify.init(); | 10 local inh = inotify.init(); |
11 | 11 |
12 local watches = {}; | 12 local watches = {}; |
13 local watch_ids = {}; | 13 local watch_ids = {}; |
14 | 14 |
15 -- Fake socket object around inotify | 15 require"net.server".watchfd(inh:fileno(), function() |
16 local inh_conn = { | 16 local events = inh:read(); |
17 getfd = function () return inh:fileno(); end; | 17 for _, event in ipairs(events) do |
18 dirty = function (self) return false; end; | 18 local mod = watches[watch_ids[event.wd]]; |
19 settimeout = function () end; | 19 if mod then |
20 send = function (_, d) return #d, 0; end; | 20 local host, name = mod.host, mod.name; |
21 close = function () end; | 21 module:log("debug", "Reloading changed module mod_%s on %s", name, host); |
22 receive = function () | 22 modulemanager.reload(host, name); |
23 local events = inh:read(); | 23 else |
24 for _, event in ipairs(events) do | 24 module:log("warn", "no watch for %d", event.wd); |
25 local mod = watches[watch_ids[event.wd]]; | |
26 if mod then | |
27 local host, name = mod.host, mod.name; | |
28 module:log("debug", "Reloading changed module mod_%s on %s", name, host); | |
29 modulemanager.reload(host, name); | |
30 else | |
31 module:log("warn", "no watch for %d", event.wd); | |
32 end | |
33 end | 25 end |
34 return ""; | |
35 end | 26 end |
36 }; | 27 end); |
37 require "net.server".wrapclient(inh_conn, "inotify", inh:fileno(), { | |
38 onincoming = function () end, ondisconnect = function () end | |
39 }, "*a"); | |
40 | 28 |
41 function watch_module(name, host, path) | 29 function watch_module(name, host, path) |
42 local id, err = inh:addwatch(path, inotify.IN_CLOSE_WRITE); | 30 local id, err = inh:addwatch(path, inotify.IN_CLOSE_WRITE); |
43 if not id then return nil, err; end | 31 if not id then return nil, err; end |
44 local k = host.."\0"..name; | 32 local k = host.."\0"..name; |