| Class | OpenWFE::YamlErrorJournal |
| In: |
lib/openwfe/expool/errorjournal.rb
|
| Parent: | ErrorJournal |
A Journal that only keep track of error in process execution.
| workdir | [R] |
# File lib/openwfe/expool/errorjournal.rb, line 329
329: def initialize (service_name, application_context)
330:
331: require 'openwfe/storage/yamlcustom'
332: # making sure this file has been required at this point
333: # this yamlcustom thing prevents the whole OpenWFE ecosystem
334: # to get serialized :)
335:
336: super
337:
338: @workdir = get_work_directory + "/ejournal"
339:
340: FileUtils.makedirs(@workdir) unless File.exist?(@workdir)
341: end
Copies the error log of a process instance to a give path (and filename).
Could be useful when one has to perform replay operations and wants to keep a copy of the original error[s].
# File lib/openwfe/expool/errorjournal.rb, line 366
366: def copy_error_log_to (wfid, path)
367:
368: original_path = get_path wfid
369: FileUtils.copy_file original_path, path
370: end
Returns a list (older first) of the errors for a process instance identified by its fei or wfid.
Will return an empty list if there a no errors for the process instances.
# File lib/openwfe/expool/errorjournal.rb, line 350
350: def get_error_log (wfid)
351:
352: path = get_path wfid
353:
354: return [] unless File.exist?(path)
355:
356: read_error_log_from path
357: end
Reads all the error logs currently stored. Returns a hash wfid —> error list.
# File lib/openwfe/expool/errorjournal.rb, line 438
438: def get_error_logs
439:
440: result = {}
441:
442: Find.find(@workdir) do |path|
443: next unless path.endswith(".ejournal")
444: wfid = path[0..-9]
445: log = read_error_log wfid
446: result[wfid] = log
447: end
448:
449: result
450: end
Reads an error log from a specific file (possibly as copied over via copy_error_log_to()).
# File lib/openwfe/expool/errorjournal.rb, line 376
376: def read_error_log_from (path)
377:
378: raise "no error log file at #{path}" unless File.exist?(path)
379:
380: File.open(path) do |f|
381: s = YAML.load_stream f
382: s.documents
383: end
384: end
Removes the error log of a specific process instance. Could be a good idea after a succesful replay operation.
‘wfid’ may be either a workflow instance id (String) either a FlowExpressionId instance.
# File lib/openwfe/expool/errorjournal.rb, line 393
393: def remove_error_log (wfid)
394:
395: path = get_path wfid
396:
397: File.delete(path) if File.exist?(path)
398: end
Removes a list of errors from this error journal.
# File lib/openwfe/expool/errorjournal.rb, line 403
403: def remove_errors (wfid, errors)
404:
405: errors = Array(errors)
406:
407: # load all errors
408:
409: log = get_error_log wfid
410:
411: # remove the given errors
412:
413: errors.each do |e|
414: log.delete e
415: end
416:
417: # rewrite error file
418:
419: path = get_path wfid
420:
421: if log.size > 0
422:
423: File.open(path, "w") do |f|
424: log.each do |e|
425: f.puts e.to_yaml
426: end
427: end
428: else
429:
430: File.delete path
431: end
432: end
Returns the path to the error log file of a specific process instance.
# File lib/openwfe/expool/errorjournal.rb, line 471
471: def get_path (fei_or_wfid)
472:
473: @workdir + "/" + extract_wfid(fei_or_wfid, true) + ".ejournal"
474: end
logs the error as a yaml string in an error log file (there is one error log file per workflow instance).
# File lib/openwfe/expool/errorjournal.rb, line 458
458: def record_error (error)
459:
460: path = get_path error.fei
461:
462: File.open(path, "a+") do |f|
463: f.puts error.to_yaml
464: end
465: end