...
1 package main
2
3 import (
4 "context"
5 "flag"
6 "fmt"
7 "golang.conradwood.net/apis/common"
8 ge "golang.conradwood.net/apis/getestservice"
9 "golang.conradwood.net/apis/registry"
10 "golang.conradwood.net/go-easyops/auth"
11 "golang.conradwood.net/go-easyops/authremote"
12 "golang.conradwood.net/go-easyops/client"
13 _ "golang.conradwood.net/go-easyops/http"
14 "golang.conradwood.net/go-easyops/linux"
15 "golang.conradwood.net/go-easyops/tokens"
16 "golang.conradwood.net/go-easyops/utils"
17 "os"
18 "strings"
19 "time"
20 )
21
22 var (
23 loop = flag.Bool("loop", false, "continously ping")
24 ctr = 0
25 port = flag.Int("port", 12322, "grpc port")
26 role = flag.String("role", "", "role of this binary (simple|authproxy|client|service|simpleping|load|register|myip")
27 servicetokens []string
28 )
29
30 func main() {
31 flag.Parse()
32 b, err := utils.ReadFile("/etc/cnw/servicetokens")
33 utils.Bail("failed to read tokens", err)
34 for _, s := range strings.Split(string(b), "\n") {
35 if len(s) > 5 {
36 servicetokens = append(servicetokens, s)
37 }
38 }
39 if *role == "register" {
40 Register()
41 } else if *role == "myip" {
42 MyIP()
43 } else if *role == "authproxy" {
44 StartAuthProxy()
45 } else if *role == "client" {
46 StartClient()
47 } else if *role == "load" {
48 LoadClient()
49 } else if *role == "simple" {
50 StartSimple()
51 } else if *role == "simpleping" {
52 SimplePing()
53 } else if *role == "service" {
54 tokens.DisableUserToken()
55
56
57 panic("cannot do server anymore")
58 } else {
59 fmt.Printf("Invalid -role specified: %s\n", *role)
60 os.Exit(10)
61 }
62 fmt.Printf("Done (%s)\n", *role)
63 }
64
65 type testserver struct{}
66
67 func (t *testserver) SimplePing(ctx context.Context, req *common.Void) (*common.Void, error) {
68 fmt.Printf("%s Simpleping received\n", utils.TimeString(time.Now()))
69 return &common.Void{}, nil
70 }
71 func (t *testserver) Ping(ctx context.Context, req *ge.Chain) (*ge.Chain, error) {
72 var err error
73 s := auth.GetService(ctx)
74 u := auth.GetUser(ctx)
75 sn := "[NONE]"
76 if s != nil {
77 sn = s.ID
78 }
79 reqid := ""
80 ctr++
81 fmt.Printf("%s %04d Pinged by user %s\n", utils.TimeString(time.Now()), ctr, u)
82 if u == nil {
83 return req, nil
84 }
85 call := &ge.Call{
86 RequestID: reqid,
87 Position: req.Position,
88 UserID: u.ID,
89 ServiceID: sn}
90 req.Calls = append(req.Calls, call)
91
92 if len(req.Calls) < 10 {
93 req.Position = req.Position + 1
94 svtok := servicetokens[int(req.Position)%len(servicetokens)]
95 tokens.SetServiceTokenParameter(svtok)
96 req, err = ge.GetEasyOpsTestClient().Ping(ctx, req)
97 if err != nil {
98 return nil, err
99 }
100 }
101 return req, nil
102 }
103
104
105 func StartSimple() {
106 ctx := authremote.Context()
107 lreq := ®istry.V2ListRequest{}
108 resp, err := client.GetRegistryClient().ListRegistrations(ctx, lreq)
109 utils.Bail("Failed to query registry", err)
110 for _, gr := range resp.Registrations {
111 fmt.Printf("Result: %s (%s)\n", gr.Target.ServiceName, gr.Target.RoutingInfo)
112 fmt.Printf(" %s:%d\n", gr.Target.IP, gr.Target.Port)
113 }
114 os.Exit(0)
115 }
116
117 func MyIP() {
118 l := linux.New()
119 s := l.MyIP()
120 fmt.Printf("My IP: \"%s\"\n", s)
121 }
122
View as plain text