Class: Ruote::DefaultHistory
- Inherits:
-
Object
- Object
- Ruote::DefaultHistory
- Includes:
- Enumerable
- Defined in:
- lib/ruote/log/default_history.rb
Overview
A default history implementation, only keeps the most recent stuff in memory.
This class includes Enumerable.
NOTE:
This default history is worthless when there are multiple workers. It only keeps track of the msgs processed by the worker in the same context. Msgs processed by other workers (in different Ruby runtimes) are not seen (they are tracked by the DefaultHistory next to those workers).
By default, this history keeps track of the latest 1’000 msgs. This can be changed by passing a ‘history_max_size’ option to the storage when initializing ruote (‘history_max_size’ => 0) is acceptable.
Constant Summary collapse
- DATE_REGEX =
/!(\d{4}-\d{2}-\d{2})!/
- DEFAULT_MAX_SIZE =
1000
Instance Method Summary collapse
-
#all ⇒ Object
Returns all the msgs (events), most recent one is last.
- #by_date(date) ⇒ Object
-
#by_process(wfid) ⇒ Object
(also: #by_wfid)
Returns all the msgs (events) for a given wfid.
-
#clear! ⇒ Object
Forgets all the stored msgs.
-
#each(&block) ⇒ Object
Enabling Enumerable…
-
#initialize(context, options = {}) ⇒ DefaultHistory
constructor
A new instance of DefaultHistory.
-
#on_msg(msg) ⇒ Object
This method is called by the worker via the context.
-
#range ⇒ Object
Returns an array [ most recent date, oldest date ] (Time instances).
-
#wfids ⇒ Object
Returns all the wfids for which some piece of history is kept.
Methods included from Enumerable
Constructor Details
#initialize(context, options = {}) ⇒ DefaultHistory
Returns a new instance of DefaultHistory.
52 53 54 55 56 57 58 59 60 |
# File 'lib/ruote/log/default_history.rb', line 52 def initialize(context, ={}) @context = context = @max_size = context['history_max_size'] || DEFAULT_MAX_SIZE @history = [] end |
Instance Method Details
#all ⇒ Object
Returns all the msgs (events), most recent one is last.
64 65 66 67 |
# File 'lib/ruote/log/default_history.rb', line 64 def all @history end |
#by_date(date) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/ruote/log/default_history.rb', line 106 def by_date(date) d = Time.parse(date.to_s).utc.strftime('%Y-%m-%d') @history.select { |m| Time.parse(m['seen_at']).strftime('%Y-%m-%d') == d } end |
#by_process(wfid) ⇒ Object Also known as: by_wfid
Returns all the msgs (events) for a given wfid. (Well, all the msgs that are kept.
88 89 90 91 92 93 |
# File 'lib/ruote/log/default_history.rb', line 88 def by_process(wfid) @history.select { |msg| (msg['wfid'] || (msg['fei']['wfid'] rescue nil)) == wfid } end |
#clear! ⇒ Object
Forgets all the stored msgs.
119 120 121 122 |
# File 'lib/ruote/log/default_history.rb', line 119 def clear! @history.clear end |
#each(&block) ⇒ Object
Enabling Enumerable…
71 72 73 74 |
# File 'lib/ruote/log/default_history.rb', line 71 def each(&block) @history.each(&block) end |
#on_msg(msg) ⇒ Object
This method is called by the worker via the context. Successfully processed msgs are passed here.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/ruote/log/default_history.rb', line 127 def on_msg(msg) return if @max_size < 1 msg = Ruote.fulldup(msg) msg['seen_at'] = Ruote.now_to_utc_s @history << msg while (@history.size > @max_size) do @history.shift end rescue => e $stderr.puts '>' + '-' * 79 $stderr.puts "#{self.class} issue, skipping" $stderr.puts e.inspect $stderr.puts e.backtrace[0, 2] $stderr.puts '<' + '-' * 79 end |
#range ⇒ Object
Returns an array [ most recent date, oldest date ] (Time instances).
98 99 100 101 102 103 104 |
# File 'lib/ruote/log/default_history.rb', line 98 def range now = Time.now [ (Time.parse(@history.first['seen_at']) rescue now), (Time.parse(@history.last['seen_at']) rescue now) ] end |
#wfids ⇒ Object
Returns all the wfids for which some piece of history is kept.
78 79 80 81 82 83 |
# File 'lib/ruote/log/default_history.rb', line 78 def wfids @history.collect { |msg| msg['wfid'] || (msg['fei']['wfid'] rescue nil) }.compact.uniq.sort end |