Class: OAISchedules::Manager
- Inherits:
-
Object
- Object
- OAISchedules::Manager
show all
- Defined in:
- lib/oai_schedules/manager.rb
Defined Under Namespace
Modules: EventHarvesting, StateHarvesting
Classes: IntervalTooSmall
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path_dir_schedules: nil, path_dir_state: nil, f_digest: nil) ⇒ Manager
Returns a new instance of Manager.
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/oai_schedules/manager.rb', line 133
def initialize(path_dir_schedules: nil, path_dir_state: nil, f_digest: nil)
@logger = Logger.new(STDOUT)
@path_dir_state = path_dir_state
@schedules = {}
@path_dir_schedules = path_dir_schedules
@listener_dir_schedules = nil
unless path_dir_schedules.nil?
set_listener_dir_schedules(path_dir_schedules)
end
@f_digest = f_digest
end
|
Instance Attribute Details
#path_dir_state ⇒ Object
Returns the value of attribute path_dir_state.
131
132
133
|
# File 'lib/oai_schedules/manager.rb', line 131
def path_dir_state
@path_dir_state
end
|
Instance Method Details
#add_schedule(name, content) ⇒ Object
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
# File 'lib/oai_schedules/manager.rb', line 189
def add_schedule(name, content)
path_file_state = get_path_state_file_from_schedule_name(name)
state = {}
if File.file?(path_file_state)
state = read_state_file(path_file_state)
else
init_schedule_state(state)
write_state_file(path_file_state, state)
end
task = Concurrent::TimerTask.new(run_now: false) {
logic(
name,
@schedules[name][:content],
@schedules[name][:state_machine],
@schedules[name][:state]
)
}
task.add_observer(TaskObserver.new(@logger, name))
@schedules[name] = {
content: deep_copy(content),
task: task,
state_machine: StateMachineHarvesting.new,
state: state
}
handle_schedule_task(name)
end
|
#listener_dir_schedules_running? ⇒ Boolean
185
186
187
|
# File 'lib/oai_schedules/manager.rb', line 185
def listener_dir_schedules_running?
@listener_dir_schedules.processing?
end
|
#modify_schedule(name, content) ⇒ Object
229
230
231
232
233
|
# File 'lib/oai_schedules/manager.rb', line 229
def modify_schedule(name, content)
handle_schedule_state_at_schedule_change(name, content)
@schedules[name][:content] = deep_copy(content)
handle_schedule_task(name)
end
|
#remove_schedule(name) ⇒ Object
222
223
224
225
|
# File 'lib/oai_schedules/manager.rb', line 222
def remove_schedule(name)
@schedules[name][:task].shutdown
@schedules[name].delete(name)
end
|
#run_listener_dir_schedules(block: true) ⇒ Object
168
169
170
171
172
173
174
175
176
|
# File 'lib/oai_schedules/manager.rb', line 168
def run_listener_dir_schedules(block: true)
if !@listener_dir_schedules.nil?
@logger.info("running listener in #{@path_dir_schedules}...")
@listener_dir_schedules.start
if block then sleep end
else
@logger.warn("no listening provided")
end
end
|
#set_listener_dir_schedules(path_dir_schedules) ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/oai_schedules/manager.rb', line 146
def set_listener_dir_schedules(path_dir_schedules)
@path_dir_schedules = path_dir_schedules
paths_files_in_dir_schedules = get_all_files_in_dir(@path_dir_schedules)
@logger.info("schedules found in #{@path_dir_schedules}:")
@logger.info(paths_files_in_dir_schedules)
paths_files_in_dir_schedules.each do |fp|
handle_file_added(fp)
end
@listener_dir_schedules = Listen.to(@path_dir_schedules, only: /\.json$/) do |modified, added, removed|
modified.each do |fp|
handle_file_modified(fp)
end
added.each do |fp|
handle_file_added(fp)
end
removed.each do |fp|
handle_file_removed(fp)
end
end
end
|
#stop_listener_dir_schedules ⇒ Object
179
180
181
182
|
# File 'lib/oai_schedules/manager.rb', line 179
def stop_listener_dir_schedules()
@logger.info("stopping listener in #{@path_dir_schedules}...")
@listener_dir_schedules.stop
end
|