-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefault_observer.go
50 lines (40 loc) · 1.19 KB
/
default_observer.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
package natsby
import "time"
// DefaultObserver Default concrete Observer implementation
type DefaultObserver struct {
collector Collector
}
// NewDefaultObserver creates a default observer instance
func NewDefaultObserver(c Collector) *DefaultObserver {
o := &DefaultObserver{
collector: c,
}
return o
}
// ObserveSubjectReceived collect metrics when subject is received
func (o *DefaultObserver) ObserveSubjectReceived(c *Context) {
o.collector.CollectSubjectReceived(c.Msg.Subject)
}
// ObserveLatency collect metrics on handler chain latency
func (o *DefaultObserver) ObserveLatency(c *Context, latency time.Duration) {
o.collector.CollectLatency(c.Msg.Subject, latency)
}
// ObserveReply collect metrics on replies
func (o *DefaultObserver) ObserveReply(c *Context) {
_, ok := c.GetByteReplyPayload()
if ok == true {
o.collector.CollectReply(c.Msg.Subject)
}
// TODO: ObserveReply with JSON reply
}
// ObserveError collect metrics on replies
func (o *DefaultObserver) ObserveError(c *Context) {
if c.Err != nil {
o.collector.CollectError(c.Msg.Subject)
}
}
// Observe start observing and collecting metrics
func (o *DefaultObserver) Observe() error {
o.collector.Collect()
return nil
}