This commit is contained in:
Axel Kittenberger 2010-11-06 10:10:57 +00:00
parent ebf0e3f0c2
commit 6e779475b4
1 changed files with 74 additions and 16 deletions

View File

@ -389,8 +389,8 @@ local Syncs = (function()
end end
optional("action") optional("action")
optional("max_processes") optional("maxProcesses")
optional("collapse_table") optional("collapseTable")
local s = Sync.new(config) local s = Sync.new(config)
table.insert(list, s) table.insert(list, s)
end end
@ -705,19 +705,67 @@ end
---- ----
-- Called from core to get a status report written into a file descriptor -- Writes a status report file at most every [statusintervall] seconds.
-- --
local function write_statusfile() --
local f, err = io.open(settings.statusfile, "w") local StatusFile = (function()
if not f then -----
log("Error", "Cannot open statusfile '"..settings.statusfile.. -- Timestamp when the status file has been written.
"' :"..err) local lastWritten = false
return
-----
-- Timestamp when a statusfile should be written
local alarm = false
-----
-- Returns when the statusfile should be written
--
local function getAlarm()
return alarm
end end
f:write("Lsyncd status report at ", os.date(), "\n\n")
Inotifies.status_report(f) -----
f:close() -- Called to check if to write a status file.
end --
local function write(now)
log("Function", "write(", now, ")")
-- some logic to not write too often
if settings.statusIntervall > 0 then
-- already waiting
if alarm and lsyncd.earlier(now, alarm) then
log("Statusfile", "waiting")
return
end
-- when a next Write will be possible
if not alarm then
local nextWrite = lastWritten and
lsyncd.addto_clock(now, settings.statusIntervall)
if nextWrite and lsyncd.earlier(now, nextWrite) then
log("Statusfile", "setting alarm", nextWrite)
alarm = nextWrite
return
end
end
lastWritten = now
alarm = false
end
log("Statusfile", "writing now")
local f, err = io.open(settings.statusfile, "w")
if not f then
log("Error", "Cannot open statusfile '"..settings.statusfile..
"' :"..err)
return
end
f:write("Lsyncd status report at ", os.date(), "\n\n")
Inotifies.status_report(f)
f:close()
end
-- public interface
return {write = write, getAlarm = getAlarm}
end)()
---- ----
-- Called from core everytime a masterloop cycle runs through. -- Called from core everytime a masterloop cycle runs through.
@ -733,7 +781,7 @@ function lsyncd_cycle(now)
-- goes through all targets and spawns more actions -- goes through all targets and spawns more actions
-- if possible -- if possible
if settings.statusfile then if settings.statusfile then
write_statusfile() StatusFile.write(now)
end end
for _, s in Syncs.iwalk() do for _, s in Syncs.iwalk() do
if s.processes:size() < s.config.max_processes then if s.processes:size() < s.config.max_processes then
@ -919,6 +967,11 @@ function lsyncd_get_alarm()
end end
end end
end end
local sa = StatusFile.getAlarm()
if sa then
alarm = lsyncd.earlier(sa, alarm)
end
log("Debug", "lysncd_get_alarm returns: ",alarm) log("Debug", "lysncd_get_alarm returns: ",alarm)
return alarm return alarm
end end
@ -1023,12 +1076,17 @@ default = {
----- -----
-- TODO -- TODO
-- --
max_processes = 1, maxProcesses = 1,
------
-- Minimum seconds between two writes of a status file.
--
statusIntervall = 60,
------ ------
-- TODO -- TODO
-- --
collapse_table = { collapseTable = {
Attrib = { Attrib = "Attrib", Modify = "Modify", Create = "Create", Delete = "Delete" }, Attrib = { Attrib = "Attrib", Modify = "Modify", Create = "Create", Delete = "Delete" },
Modify = { Attrib = "Modify", Modify = "Modify", Create = "Create", Delete = "Delete" }, Modify = { Attrib = "Modify", Modify = "Modify", Create = "Create", Delete = "Delete" },
Create = { Attrib = "Create", Modify = "Create", Create = "Create", Delete = -1 }, Create = { Attrib = "Create", Modify = "Create", Create = "Create", Delete = -1 },