-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathsender.go
70 lines (60 loc) · 1.51 KB
/
sender.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package honeycomb
import (
"errors"
"github.com/honeycombio/libhoney-go/transmission"
)
// This has been submitted upstream as
// https://github.com/honeycombio/libhoney-go/pull/60
type MultiSender struct {
Senders []transmission.Sender
}
// Add calls Add on every configured Sender
func (s *MultiSender) Add(ev *transmission.Event) {
for _, tx := range s.Senders {
tx.Add(ev)
}
}
// Start calls Start on every configured Sender, aborting on the first error
func (s *MultiSender) Start() error {
if len(s.Senders) == 0 {
return errors.New("no senders configured")
}
for _, tx := range s.Senders {
if err := tx.Start(); err != nil {
return err
}
}
return nil
}
// Stop calls Stop on every configured Sender.
// It will call Stop on every Sender even if there are errors
func (s *MultiSender) Stop() error {
var result error
for _, tx := range s.Senders {
if err := tx.Stop(); err != nil {
result = err
}
}
return result
}
// TxResponses returns the response channel from the first Sender only
func (s *MultiSender) TxResponses() chan transmission.Response {
return s.Senders[0].TxResponses()
}
// SendResponse calls SendResponse on every configured Sender
func (s *MultiSender) SendResponse(resp transmission.Response) bool {
pending := false
for _, tx := range s.Senders {
pending = pending || tx.SendResponse(resp)
}
return pending
}
func (s *MultiSender) Flush() error {
var result error
for _, tx := range s.Senders {
if err := tx.Flush(); err != nil {
result = err
}
}
return result
}