github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/logtool/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "net" 7 "os" 8 9 "github.com/Cloud-Foundations/Dominator/lib/flags/commands" 10 "github.com/Cloud-Foundations/Dominator/lib/flags/loadflags" 11 "github.com/Cloud-Foundations/Dominator/lib/log/cmdlogger" 12 "github.com/Cloud-Foundations/Dominator/lib/srpc" 13 "github.com/Cloud-Foundations/Dominator/lib/srpc/setupclient" 14 ) 15 16 var ( 17 excludeRegex = flag.String("excludeRegex", "", 18 "The exclude regular expression to filter out when watching (after include)") 19 includeRegex = flag.String("includeRegex", "", 20 "The include regular expression to filter for when watching") 21 loggerHostname = flag.String("loggerHostname", "localhost", 22 "Hostname of log server") 23 loggerName = flag.String("loggerName", "", "Name of logger") 24 loggerPortNum = flag.Uint("loggerPortNum", 0, "Port number of log server") 25 ) 26 27 func printUsage() { 28 w := flag.CommandLine.Output() 29 fmt.Fprintln(w, 30 "Usage: logtool [flags...] debug|print|set-debug-level [args...]") 31 fmt.Fprintln(w, "Common flags:") 32 flag.PrintDefaults() 33 fmt.Fprintln(w, "Commands:") 34 commands.PrintCommands(w, subcommands) 35 } 36 37 var subcommands = []commands.Command{ 38 {"debug", " level args...", 2, -1, debugSubcommand}, 39 {"print", " args...", 1, -1, printSubcommand}, 40 {"set-debug-level", "level", 1, 1, setDebugLevelSubcommand}, 41 {"watch", " level", 1, 1, watchSubcommand}, 42 } 43 44 func dial(allowMultiClient bool) ([]*srpc.Client, []string, error) { 45 if addrs, err := net.LookupHost(*loggerHostname); err != nil { 46 return nil, nil, err 47 } else if len(addrs) < 1 { 48 return nil, nil, fmt.Errorf("no addresses for: %s", *loggerHostname) 49 } else if !allowMultiClient && len(addrs) > 1 { 50 return nil, nil, fmt.Errorf("multiple endpoints not supported") 51 } else { 52 clients, err := dialAll(addrs) 53 return clients, addrs, err 54 } 55 } 56 57 func dialAll(addrs []string) ([]*srpc.Client, error) { 58 clients := make([]*srpc.Client, 0, len(addrs)) 59 for _, addr := range addrs { 60 clientName := fmt.Sprintf("%s:%d", addr, *loggerPortNum) 61 if client, err := srpc.DialHTTP("tcp", clientName, 0); err != nil { 62 return nil, err 63 } else { 64 clients = append(clients, client) 65 } 66 } 67 return clients, nil 68 } 69 70 func doMain() int { 71 if err := loadflags.LoadForCli("logtool"); err != nil { 72 fmt.Fprintln(os.Stderr, err) 73 return 1 74 } 75 flag.Usage = printUsage 76 flag.Parse() 77 if flag.NArg() < 1 { 78 printUsage() 79 return 2 80 } 81 logger := cmdlogger.New() 82 if err := setupclient.SetupTls(true); err != nil { 83 logger.Fatalln(err) 84 } 85 return commands.RunCommands(subcommands, printUsage, logger) 86 } 87 88 func main() { 89 os.Exit(doMain()) 90 }