This commit is contained in:
Axel Kittenberger 2010-11-06 10:10:57 +00:00
parent ebf0e3f0c2
commit 6e779475b4

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,9 +705,53 @@ 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 StatusFile = (function()
-----
-- Timestamp when the status file has been written.
local lastWritten = false
-----
-- Timestamp when a statusfile should be written
local alarm = false
-----
-- Returns when the statusfile should be written
--
local function getAlarm()
return alarm
end
-----
-- Called to check if to write a status file.
--
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") local f, err = io.open(settings.statusfile, "w")
if not f then if not f then
log("Error", "Cannot open statusfile '"..settings.statusfile.. log("Error", "Cannot open statusfile '"..settings.statusfile..
@ -719,6 +763,10 @@ local function write_statusfile()
f:close() f:close()
end 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.
-- This happens in case of -- This happens in case of
@ -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 },