/
start.go
120 lines (103 loc) · 3.28 KB
/
start.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
116
117
118
119
120
package cmd
import (
"fmt"
"github.com/NodeFactoryIo/vedran-daemon/internal/lb"
"github.com/NodeFactoryIo/vedran-daemon/internal/node"
"github.com/NodeFactoryIo/vedran-daemon/internal/run"
"github.com/NodeFactoryIo/vedran-daemon/internal/telemetry"
"github.com/NodeFactoryIo/vedran-daemon/internal/tunnel"
"github.com/NodeFactoryIo/vedran-daemon/pkg/logger"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"net/url"
"os"
)
var (
logLevel string
logFile string
nodeRPCURL string
nodeWSURL string
nodeMetricsURL string
id string
lbBaseURL string
payoutAddress string
lbURL *url.URL
metricsURL *url.URL
rpcURL *url.URL
wsURL *url.URL
)
var startCmd = &cobra.Command{
Use: "vedran-daemon",
Short: "Register vedran-daemon with load balancer and start sending telemetry",
RunE: start,
PreRunE: func(cmd *cobra.Command, args []string) error {
level, err := log.ParseLevel(logLevel)
if err != nil {
log.Fatalf("Invalid log level %s", logLevel)
}
err = logger.SetupLogger(level, logFile)
if err != nil {
return err
}
return nil
},
Args: func(cmd *cobra.Command, args []string) error {
var err error
lbURL, err = url.Parse(lbBaseURL)
if err != nil {
return fmt.Errorf("Failed parsing load balancer url: %v", err)
}
metricsURL, err = url.Parse(nodeMetricsURL)
if err != nil {
return fmt.Errorf("Failed parsing metrics url: %v", err)
}
rpcURL, err = url.Parse(nodeRPCURL)
if err != nil {
return fmt.Errorf("Failed parsing rpc url: %v", err)
}
wsURL, err = url.Parse(nodeWSURL)
if err != nil {
return fmt.Errorf("Failed parsing ws url: %v", err)
}
return nil
},
}
func init() {
startCmd.Flags().StringVar(&nodeRPCURL, "node-rpc", "http://localhost:9933", "Polkadot node rpc url")
startCmd.Flags().StringVar(&nodeWSURL, "node-ws", "ws://localhost:9944", "Polkadot node websocket url")
startCmd.Flags().StringVar(&nodeMetricsURL, "node-metrics", "http://localhost:9615", "Polkadot node metrics url")
startCmd.Flags().StringVar(&id, "id", "", "Vedran-daemon id string (required)")
startCmd.Flags().StringVar(&lbBaseURL, "lb", "", "Target load balancer url (required)")
startCmd.Flags().StringVar(&payoutAddress, "payout-address", "", "Payout address to which reward tokens will be sent (required)")
startCmd.Flags().StringVar(&logLevel, "log-level", "info", "Level of logging (eg. debug, info, warn, error)")
startCmd.Flags().StringVar(&logFile, "log-file", "", "Path to logfile. If not set defaults to stdout")
_ = startCmd.MarkFlagRequired("id")
_ = startCmd.MarkFlagRequired("lb")
_ = startCmd.MarkFlagRequired("payout-address")
}
func start(cmd *cobra.Command, _ []string) error {
DisplayBanner()
err := checkIfWsAvailable(wsURL)
if err != nil {
return err
}
lbClient := lb.NewClient(lbURL)
nodeClient := node.NewClient(rpcURL, metricsURL)
telemetry := telemetry.NewTelemetry()
tunnel := &tunnel.Tunnel{
NodeRPCURL: rpcURL,
NodeWSURL: wsURL,
}
err = run.Start(tunnel, lbClient, nodeClient, telemetry, id, payoutAddress)
if err != nil {
return fmt.Errorf("Failed starting vedran daemon, because of %v", err)
}
return nil
}
// Execute runs command
func Execute() {
if err := startCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}