@@ -11,13 +11,16 @@ module Agents |
||
| 11 | 11 |
|
| 12 | 12 |
`expected_receive_period_in_days` is used to determine if the Agent is working. Set it to the maximum number of days |
| 13 | 13 |
that you anticipate passing without this Agent receiving an incoming Event. |
| 14 |
+ |
|
| 15 |
+ `max_emitted_events` is used to limit the number of the maximum events which should be created. If you omit this DelayAgent will create events for every event stored in the memory. |
|
| 14 | 16 |
MD |
| 15 | 17 |
|
| 16 | 18 |
def default_options |
| 17 | 19 |
{
|
| 18 | 20 |
'expected_receive_period_in_days' => "10", |
| 19 | 21 |
'max_events' => "100", |
| 20 |
- 'keep' => 'newest' |
|
| 22 |
+ 'keep' => 'newest', |
|
| 23 |
+ 'max_emitted_events' => "100" |
|
| 21 | 24 |
} |
| 22 | 25 |
end |
| 23 | 26 |
|
@@ -55,11 +58,17 @@ module Agents |
||
| 55 | 58 |
|
| 56 | 59 |
def check |
| 57 | 60 |
if memory['event_ids'] && memory['event_ids'].length > 0 |
| 58 |
- received_events.where(id: memory['event_ids']).reorder('events.id asc').each do |event|
|
|
| 61 |
+ events = received_events.where(id: memory['event_ids']).reorder('events.id asc')
|
|
| 62 |
+ |
|
| 63 |
+ if options['max_emitted_events'].present? |
|
| 64 |
+ events = events.slice(0, options['max_emitted_events'].to_i) |
|
| 65 |
+ end |
|
| 66 |
+ |
|
| 67 |
+ events.each do |event| |
|
| 59 | 68 |
create_event payload: event.payload |
| 69 |
+ memory['event_ids'].delete(event.id) |
|
| 60 | 70 |
end |
| 61 |
- memory['event_ids'] = [] |
|
| 62 | 71 |
end |
| 63 | 72 |
end |
| 64 | 73 |
end |
| 65 |
-end |
|
| 74 |
+end |
@@ -108,5 +108,20 @@ describe Agents::DelayAgent do |
||
| 108 | 108 |
|
| 109 | 109 |
expect(agent.memory['event_ids']).to eq [] |
| 110 | 110 |
end |
| 111 |
+ |
|
| 112 |
+ it "re-emits max_emitted_events and clears just them from the memory" do |
|
| 113 |
+ agent.options['max_emitted_events'] = 1 |
|
| 114 |
+ agent.receive([first_event, second_event, third_event]) |
|
| 115 |
+ expect(agent.memory['event_ids']).to eq [second_event.id, third_event.id] |
|
| 116 |
+ |
|
| 117 |
+ expect {
|
|
| 118 |
+ agent.check |
|
| 119 |
+ }.to change { agent.events.count }.by(1)
|
|
| 120 |
+ |
|
| 121 |
+ events = agent.events.reorder('events.id desc')
|
|
| 122 |
+ expect(agent.memory['event_ids']).to eq [third_event.id] |
|
| 123 |
+ expect(events.first.payload).to eq second_event.payload |
|
| 124 |
+ |
|
| 125 |
+ end |
|
| 111 | 126 |
end |
| 112 | 127 |
end |