Skip to content

Commit a0d249f

Browse files
fix(httpDispatcher): bug. No logger passed in causing a crash. (#254)
* fix httpDispatcher bug. No logger passed in * fix lint error * make Http HTTP
1 parent 8fc5386 commit a0d249f

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

pkg/event/dispatcher.go

+17-6
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ type Dispatcher interface {
3737
DispatchEvent(event LogEvent) (bool, error)
3838
}
3939

40-
// HTTPEventDispatcher is the HTTP implementation of the Dispatcher interface
41-
type HTTPEventDispatcher struct {
40+
// httpEventDispatcher is the HTTP implementation of the Dispatcher interface
41+
type httpEventDispatcher struct {
4242
requester *utils.HTTPRequester
4343
logger logging.OptimizelyLogProducer
4444
}
4545

4646
// DispatchEvent dispatches event with callback
47-
func (ed *HTTPEventDispatcher) DispatchEvent(event LogEvent) (bool, error) {
47+
func (ed *httpEventDispatcher) DispatchEvent(event LogEvent) (bool, error) {
4848

4949
_, _, code, err := ed.requester.Post(event.EndPoint, event.Event)
5050

@@ -65,6 +65,18 @@ func (ed *HTTPEventDispatcher) DispatchEvent(event LogEvent) (bool, error) {
6565
return success, err
6666
}
6767

68+
// NewHTTPEventDispatcher creates a full http dispatcher. The requester and logger parameters can be nil.
69+
func NewHTTPEventDispatcher(sdkKey string, requester *utils.HTTPRequester, logger logging.OptimizelyLogProducer) Dispatcher {
70+
if requester == nil {
71+
requester = utils.NewHTTPRequester(logging.GetLogger(sdkKey, "HTTPRequester"))
72+
}
73+
if logger == nil {
74+
logger = logging.GetLogger(sdkKey, "httpEventDispatcher")
75+
}
76+
77+
return &httpEventDispatcher{requester: requester, logger: logger}
78+
}
79+
6880
// QueueEventDispatcher is a queued version of the event Dispatcher that queues, returns success, and dispatches events in the background
6981
type QueueEventDispatcher struct {
7082
eventQueue Queue
@@ -161,9 +173,8 @@ func NewQueueEventDispatcher(sdkKey string, metricsRegistry metrics.Registry) *Q
161173
}
162174

163175
return &QueueEventDispatcher{
164-
eventQueue: NewInMemoryQueue(defaultQueueSize),
165-
Dispatcher: &HTTPEventDispatcher{requester: utils.NewHTTPRequester(logging.GetLogger(sdkKey, "HTTPRequester"))},
166-
176+
eventQueue: NewInMemoryQueue(defaultQueueSize),
177+
Dispatcher: NewHTTPEventDispatcher(sdkKey, nil, nil),
167178
queueSize: dispatcherMetricsRegistry.GetGauge(metrics.DispatcherQueueSize),
168179
retryFlushCounter: dispatcherMetricsRegistry.GetCounter(metrics.DispatcherRetryFlush),
169180
failFlushCounter: dispatcherMetricsRegistry.GetCounter(metrics.DispatcherFailedFlush),

pkg/event/dispatcher_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ func TestQueueEventDispatcher_DispatchEvent(t *testing.T) {
104104
metricsRegistry := NewMetricsRegistry()
105105

106106
q := NewQueueEventDispatcher("", metricsRegistry)
107+
108+
assert.True(t, q.Dispatcher != nil)
109+
if d,ok := q.Dispatcher.(*httpEventDispatcher); ok {
110+
assert.True(t, d.requester != nil && d.logger != nil)
111+
} else {
112+
assert.True(t, false)
113+
}
107114
sender := &MockDispatcher{Events: NewInMemoryQueue(100)}
108115
q.Dispatcher = sender
109116

pkg/event/processor_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ func TestChanQueueEventProcessor_ProcessImpression(t *testing.T) {
425425
processor := NewBatchEventProcessor(
426426
WithQueueSize(100),
427427
WithQueue(NewInMemoryQueue(100)),
428-
WithEventDispatcher(&HTTPEventDispatcher{requester: utils.NewHTTPRequester(logging.GetLogger("", "NewHTTPRequester"))}))
428+
WithEventDispatcher(NewHTTPEventDispatcher("", nil, nil)))
429429

430430
eg.Go(processor.Start)
431431

0 commit comments

Comments
 (0)