package main import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" "strconv" "github.com/tangerine-network/tan-monitor/monitor" "github.com/urfave/cli" ) var app *cli.App func init() { app = cli.NewApp() app.Name = filepath.Base(os.Args[0]) app.Usage = "Tangerine Newtwork Monitor" app.Commands = []cli.Command{ commandStart, commandGetNodeStatus, } } func getLines(path string) ([]string, error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() var lines []string scanner := bufio.NewScanner(file) for scanner.Scan() { lines = append(lines, scanner.Text()) } return lines, scanner.Err() } var commandGetNodeStatus = cli.Command{ Name: "get_nodes_status", Usage: "Get nodes' status", ArgsUsage: "", Description: `Print out current nodes's status`, Flags: []cli.Flag{}, Action: func(ctx *cli.Context) error { networkID := 411 backend := monitor.NewBlockchainBackend(networkID) nodes := backend.NodeSet() for _, node := range nodes { node.Print() } return nil }, } var commandStart = cli.Command{ Name: "start", Usage: "Start monitor job", ArgsUsage: "<networkID> <ethThreshold>", Description: `Start network monitor with <networkID> and <ethThreshold> <ethThreshold>'s unit is ETH`, Flags: []cli.Flag{ cli.StringFlag{ Name: "emailPassword", Value: "./email.password", Usage: "Path to the email sender password", }, cli.StringFlag{ Name: "ccList", Value: "./cc.txt", Usage: "Path to the cc list", }, cli.StringFlag{ Name: "skipList", Value: "./skip-list.txt", Usage: "Path to the skip list", }, }, Action: func(ctx *cli.Context) error { if len(ctx.Args()) != 2 { log.Fatalf("invalid argument count") } networkID, err := strconv.Atoi(ctx.Args()[0]) if err != nil { panic(err) } threshold := ctx.Args()[1] emailPassword, err := ioutil.ReadFile(ctx.String("emailPassword")) if err != nil { panic(err) } ccList, _ := ioutil.ReadFile(ctx.String("ccList")) skipList, _ := getLines(ctx.String("skipList")) fmt.Println("skip list:") for _, skip := range skipList { fmt.Println(skip) } backend := monitor.NewBlockchainBackend(networkID) m := monitor.NewMonitor(networkID, backend, threshold) email := monitor.NewEmail( "no-reply@byzantine-lab.io", string(emailPassword), "smtp-relay.gmail.com", string(ccList), skipList, ) m.Register(email) m.Run() return nil }, } func main() { if err := app.Run(os.Args); err != nil { fmt.Println("app.Run error:", err) os.Exit(1) } }