-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdevice_monitor.go
More file actions
59 lines (49 loc) · 1.45 KB
/
device_monitor.go
File metadata and controls
59 lines (49 loc) · 1.45 KB
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
package sdk
import (
"context"
"slices"
"time"
"golang.org/x/exp/maps"
"github.com/urnetwork/glog"
"github.com/urnetwork/connect"
)
type securityPolicyMonitor struct {
ctx context.Context
cancel context.CancelFunc
device Device
}
func newSecurityPolicyMonitor(ctx context.Context, device Device) *securityPolicyMonitor {
cancelCtx, cancel := context.WithCancel(ctx)
securityPolicyMonitor := &securityPolicyMonitor{
ctx: cancelCtx,
cancel: cancel,
device: device,
}
go connect.HandleError(securityPolicyMonitor.run, cancel)
return securityPolicyMonitor
}
func (self *securityPolicyMonitor) run() {
defer self.cancel()
for {
select {
case <-self.ctx.Done():
return
case <-time.After(30 * time.Second):
}
printSecurityPolicyStats("ingress", self.device.(device).ingressSecurityPolicy().Stats(false))
printSecurityPolicyStats("egress", self.device.(device).egressSecurityPolicy().Stats(false))
}
}
func printSecurityPolicyStats(prefix string, stats connect.SecurityPolicyStats) {
glog.Infof("%s security policy stats:", prefix)
for result, destinationCounts := range stats {
destinations := maps.Keys(destinationCounts)
slices.SortFunc(destinations, func(a connect.SecurityDestination, b connect.SecurityDestination) int {
return a.Cmp(b)
})
for _, destination := range destinations {
count := destinationCounts[destination]
glog.Infof("%s[%s] ->%s = %d", prefix, result.String(), destination.String(), count)
}
}
}