--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- gpfs-direct -- -- A (Layer 2) configuration. -- -- Author: Jan Meyer <jan.meyer@desy.de> -- --~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- -- configuration parameters -- settings { statusFile = "/space/projects/live-viewer/lsyncd.stat", statusInterval = 1, nodaemon = true } local formats = { jpg = true, tif = true, cbf = true, log = true } local folders = { "/local", "/current/raw", "/commissioning/raw" } gpfs = { -- maxProcesses = 50, onCreate = function(event) -- check if in relevant subfolder local location = false for i, path in ipairs(folders) do if string.sub(event.path, 1, string.len(path)) == path then location = true break end end if location == false then return end if event.isdir then for i, path in ipairs(folders) do if path == event.pathname then return end end spawn( event, '/bin/mkdir', event.targetPath ) else -- check filetype local extension = string.match(event.name, ".*%.([^.]+)$") if formats[extension] ~= true then return end spawn ( event, '/usr/bin/python', '/space/projects/live-viewer/ZeroMQTunnel/wrapper_script.py', '--mv_source', event.sourcePath, '--mv_target', event.targetPathdir ) -- spawn( -- event, -- '/bin/mv', -- event.sourcePath, -- event.targetPathdir -- ) end end, onModify = function(event) if event.isdir then error("Do not know how to handle 'Modify' on dirs") else -- check if in relevant subfolder local location = false for i, path in ipairs(folders) do if string.sub(event.path, 1, string.len(path)) == path then location = true break end end if location == false then return end -- check filetype local extension = string.match(event.name, ".*%.([^.]+)$") if formats[extension] ~= true then return end spawn ( event, '/usr/bin/python', '/space/projects/live-viewer/ZeroMQTunnel/wrapper_script.py', '--mv_source', event.sourcePath, '--mv_target', event.targetPathdir ) -- spawn( -- event, -- '/bin/mv', -- event.sourcePath, -- event.targetPathdir -- ) end end, -- -- Called when collecting a finished child process -- collect = function(agent, exitcode) local config = agent.config if not agent.isList and agent.etype == "Blanket" then if exitcode == 0 then log("Normal", "Startup of '",agent.source,"' finished.") elseif config.exitcodes and config.exitcodes[exitcode] == "again" then log("Normal", "Retrying startup of '",agent.source,"'.") return "again" else log("Error", "Failure on startup of '",agent.source,"'.") end return end local rc = config.exitcodes and config.exitcodes[exitcode] if rc == "die" then return rc end if agent.isList then if rc == "again" then log("Normal", "Retrying a list on exitcode = ",exitcode) else log("Normal", "Finished a list = ",exitcode) end else if rc == "again" then log("Normal", "Retrying ", agent.etype, " on ", agent.sourcePath, " = ", exitcode) else log("Normal", "Finished ", agent.etype, " on ", agent.sourcePath, " = ", exitcode) end end return rc end, } sync { gpfs, delay=0, init=false, source="/space/projects/live-viewer/source", target="/space/projects/live-viewer/target", }