Skip to content

Commit 6b590eb

Browse files
authored
feat: BatchEventProcessor as Default Event Processor (#378)
ForwardingEventProcessor sends calls in a synchronous manner so to reduce the time it is replaced with BatchEventProcessor which sends calls in an asynchronous manner.
1 parent 3b1a622 commit 6b590eb

File tree

3 files changed

+60
-43
lines changed

3 files changed

+60
-43
lines changed

optimizely/optimizely.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from .decision_service import Decision
2626
from .error_handler import NoOpErrorHandler as noop_error_handler
2727
from .event import event_factory, user_event_factory
28-
from .event.event_processor import ForwardingEventProcessor
28+
from .event.event_processor import BatchEventProcessor
2929
from .event_dispatcher import EventDispatcher as default_event_dispatcher
3030
from .helpers import enums, validator
3131
from .helpers.enums import DecisionSources
@@ -50,7 +50,8 @@ def __init__(
5050
notification_center=None,
5151
event_processor=None,
5252
datafile_access_token=None,
53-
default_decide_options=None
53+
default_decide_options=None,
54+
event_processor_options=None
5455
):
5556
""" Optimizely init method for managing Custom projects.
5657
@@ -78,6 +79,7 @@ def __init__(
7879
optimizely.event.event_processor.BatchEventProcessor.
7980
datafile_access_token: Optional string used to fetch authenticated datafile for a secure project environment.
8081
default_decide_options: Optional list of decide options used with the decide APIs.
82+
event_processor_options: Optional dict of options to be passed to the default batch event processor.
8183
"""
8284
self.logger_name = '.'.join([__name__, self.__class__.__name__])
8385
self.is_valid = True
@@ -86,8 +88,19 @@ def __init__(
8688
self.error_handler = error_handler or noop_error_handler
8789
self.config_manager = config_manager
8890
self.notification_center = notification_center or NotificationCenter(self.logger)
89-
self.event_processor = event_processor or ForwardingEventProcessor(
90-
self.event_dispatcher, logger=self.logger, notification_center=self.notification_center,
91+
event_processor_defaults = {
92+
'batch_size': 1,
93+
'flush_interval': 30,
94+
'timeout_interval': 5,
95+
'start_on_init': True
96+
}
97+
if event_processor_options:
98+
event_processor_defaults.update(event_processor_options)
99+
self.event_processor = event_processor or BatchEventProcessor(
100+
self.event_dispatcher,
101+
logger=self.logger,
102+
notification_center=self.notification_center,
103+
**event_processor_defaults
91104
)
92105

93106
if default_decide_options is None:

tests/test_event_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class BatchEventProcessorTest(base.BaseTest):
116116
MAX_BATCH_SIZE = 10
117117
MAX_DURATION_SEC = 0.2
118118
MAX_TIMEOUT_INTERVAL_SEC = 0.1
119-
TEST_TIMEOUT = 10
119+
TEST_TIMEOUT = 15
120120

121121
def setUp(self, *args, **kwargs):
122122
base.BaseTest.setUp(self, 'config_dict_with_multiple_experiments')

0 commit comments

Comments
 (0)