-
Notifications
You must be signed in to change notification settings - Fork 4
/
main.go
115 lines (100 loc) · 2.68 KB
/
main.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// rlpreader: a tool that reads messages from RLP.
package main
import (
"context"
"flag"
"fmt"
"log"
"strings"
"google.golang.org/grpc"
"code.cloudfoundry.org/go-loggregator/rpc/loggregator_v2"
"code.cloudfoundry.org/loggregator-release/src/plumbing"
)
var (
target = flag.String("target", "localhost:8082", "the host:port of the target rlp")
certFile = flag.String("cert", "", "cert to use to connect to rlp")
keyFile = flag.String("key", "", "key to use to connect to rlp")
caFile = flag.String("ca", "", "ca cert to use to connect to rlp")
shardID = flag.String("shard-id", "a-shard-id", "shard ID for stream sharding")
selectorTypes = flag.String("types", "", "comma separated list of envelope types to select on. default is all types.")
)
func main() {
flag.Parse()
transportCreds, err := plumbing.NewClientCredentials(
*certFile,
*keyFile,
*caFile,
"reverselogproxy",
)
if err != nil {
log.Fatal(err)
}
conn, err := grpc.Dial(*target, grpc.WithTransportCredentials(transportCreds))
if err != nil {
log.Fatal(err)
}
client := loggregator_v2.NewEgressClient(conn)
req := &loggregator_v2.EgressRequest{
ShardId: *shardID,
UsePreferredTags: true,
}
if *selectorTypes != "" {
req.Selectors = buildSelectors(*selectorTypes)
}
receiver, err := client.Receiver(context.TODO(), req)
if err != nil {
log.Fatal(err)
}
for {
env, err := receiver.Recv()
if err != nil {
log.Fatalf("failed to receive from stream: %s", err)
}
fmt.Printf("%+v\n", env)
}
}
func buildSelectors(types string) []*loggregator_v2.Selector {
chunks := strings.Split(types, ",")
var selectors []*loggregator_v2.Selector
for _, c := range chunks {
selectors = append(selectors, stringToSelector(c))
}
return selectors
}
func stringToSelector(selectorType string) *loggregator_v2.Selector {
switch strings.TrimSpace(strings.ToLower(selectorType)) {
case "log":
return &loggregator_v2.Selector{
Message: &loggregator_v2.Selector_Log{
Log: &loggregator_v2.LogSelector{},
},
}
case "counter":
return &loggregator_v2.Selector{
Message: &loggregator_v2.Selector_Counter{
Counter: &loggregator_v2.CounterSelector{},
},
}
case "gauge":
return &loggregator_v2.Selector{
Message: &loggregator_v2.Selector_Gauge{
Gauge: &loggregator_v2.GaugeSelector{},
},
}
case "timer":
return &loggregator_v2.Selector{
Message: &loggregator_v2.Selector_Timer{
Timer: &loggregator_v2.TimerSelector{},
},
}
case "event":
return &loggregator_v2.Selector{
Message: &loggregator_v2.Selector_Event{
Event: &loggregator_v2.EventSelector{},
},
}
default:
log.Fatalf("Unknown selector type: %s", selectorType)
}
return nil
}