/
listener.go
60 lines (44 loc) · 1.51 KB
/
listener.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
package rpcmonitor
import (
"go.uber.org/zap"
"github.com/aporeto-inc/trireme-lib/internal/monitor/rpc/eventserver"
"github.com/aporeto-inc/trireme-lib/internal/monitor/rpc/registerer"
"github.com/aporeto-inc/trireme-lib/internal/monitor/rpc/server"
)
const (
// DefaultRPCAddress is the default Linux socket for the RPC monitor
DefaultRPCAddress = "/var/run/trireme.sock"
// DefaultRootRPCAddress creates an RPC listener that requires root credentials
DefaultRootRPCAddress = "/var/run/triremeroot.sock"
)
// listener implements the RPC connection
type listener struct {
// rpcServer is our RPC channel
rpcServer rpcserver.RPCServer
// eventProcessor uses rpcServer with a type event.EventInfo and mux's the events
// for a given type to an event processor.
eventProcessor eventserver.Processor
registerer registerer.Registerer
}
// New returns a base RPC listener. Processors must be registered externally
func New(rpcAddress string, root bool) (Listener, registerer.Registerer, error) {
l := &listener{
rpcServer: rpcserver.New(rpcAddress, root),
}
l.eventProcessor, l.registerer = eventserver.New(root)
if err := l.rpcServer.Register(l.eventProcessor); err != nil {
return nil, nil, err
}
return l, l.registerer, nil
}
// Start monitoring RPC events.
func (l *listener) Start() (err error) {
zap.L().Debug("Starting RPC monitor")
return l.rpcServer.Start()
}
// Stop monitoring RPC events.
func (l *listener) Stop() error {
zap.L().Debug("Stopping RPC monitor")
l.rpcServer.Stop()
return nil
}