| Class | OpenWFE::FileListener |
| In: |
lib/openwfe/listeners/listeners.rb
|
| Parent: | Service |
Polls a directory for incoming workitems (as files).
Workitems can be instances of InFlowWorkItem or LaunchItem.
require 'openwfe/listeners/listeners'
engine.add_workitem_listener(OpenWFE::FileListener, "500")
In this example, the directory ./work/in/ will be polled every 500 milliseconds for incoming workitems (or launchitems).
You can override the load_object(path) method to manage other formats then YAML.
| workdir | [R] |
# File lib/openwfe/listeners/listeners.rb, line 75
75: def initialize (service_name, application_context)
76:
77: super
78:
79: @workdir = get_work_directory + "/in/"
80:
81: linfo { "new() workdir is '#{@workdir}'" }
82: end
Will ‘find’ files in the work directory (by default ./work/in/), extract the workitem in them and feed it back to the engine.
# File lib/openwfe/listeners/listeners.rb, line 88
88: def trigger (params)
89: # no synchronization for now
90:
91: ldebug { "trigger()" }
92:
93: FileUtils.makedirs(@workdir) unless File.exist?(@workdir)
94:
95: Find.find(@workdir) do |path|
96:
97: next if File.stat(path).directory?
98:
99: ldebug { "trigger() considering file '#{path}'" }
100:
101: begin
102:
103: object = load_object(path)
104:
105: handle_item(object) if object
106:
107: rescue Exception => e
108:
109: linfo do
110: "trigger() failure while loading from '#{path}'. " +
111: "Resuming... \n" +
112: OpenWFE::exception_to_s(e)
113: end
114: end
115: end
116: end
Turns a file into a Ruby instance. This base implementation does it via YAML.
# File lib/openwfe/listeners/listeners.rb, line 124
124: def load_object (path)
125:
126: return nil unless path.match ".*\.yaml$"
127:
128: object = YAML.load_file(path)
129:
130: File.delete(path)
131:
132: return object
133: end