package main import ( "context" "encoding/json" "flag" "fmt" "os" "time" pb "git.ipng.ch/ipng/nginx-logtail/proto/logtailpb" ) func runTargets(args []string) { fs := flag.NewFlagSet("targets", flag.ExitOnError) sf, target := bindShared(fs) fs.Usage = func() { fmt.Fprintln(os.Stderr, "usage: logtail-cli targets [--target host:port] [--json]") fs.PrintDefaults() } fs.Parse(args) sf.resolve(*target) for _, addr := range sf.targets { conn, client, err := dial(addr) if err != nil { fmt.Fprintf(os.Stderr, "targets: cannot connect to %s: %v\n", addr, err) continue } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) resp, err := client.ListTargets(ctx, &pb.ListTargetsRequest{}) cancel() conn.Close() if err != nil { fmt.Fprintf(os.Stderr, "targets: %s: %v\n", addr, err) continue } if sf.jsonOut { type row struct { QueryTarget string `json:"query_target"` Name string `json:"name"` Addr string `json:"addr"` } for _, t := range resp.Targets { json.NewEncoder(os.Stdout).Encode(row{QueryTarget: addr, Name: t.Name, Addr: t.Addr}) } } else { if len(sf.targets) > 1 { fmt.Println(targetHeader(addr, "", len(sf.targets))) } for _, t := range resp.Targets { addrCol := t.Addr if addrCol == "" { addrCol = "(self)" } fmt.Printf("%-40s %s\n", t.Name, addrCol) } } } }