github.com/Cloud-Foundations/Dominator@v0.3.4/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 {"get-stack-trace", "", 0, 0, getStackTraceSubcommand}, 40 {"print", " args...", 1, -1, printSubcommand}, 41 {"set-debug-level", "level", 1, 1, setDebugLevelSubcommand}, 42 {"watch", " level", 1, 1, watchSubcommand}, 43 } 44 45 func dial(allowMultiClient bool) ([]*srpc.Client, []string, error) { 46 if addrs, err := net.LookupHost(*loggerHostname); err != nil { 47 return nil, nil, err 48 } else if len(addrs) < 1 { 49 return nil, nil, fmt.Errorf("no addresses for: %s", *loggerHostname) 50 } else if !allowMultiClient && len(addrs) > 1 { 51 return nil, nil, fmt.Errorf("multiple endpoints not supported") 52 } else { 53 clients, err := dialAll(addrs) 54 return clients, addrs, err 55 } 56 } 57 58 func dialAll(addrs []string) ([]*srpc.Client, error) { 59 clients := make([]*srpc.Client, 0, len(addrs)) 60 for _, addr := range addrs { 61 clientName := fmt.Sprintf("%s:%d", addr, *loggerPortNum) 62 if client, err := srpc.DialHTTP("tcp", clientName, 0); err != nil { 63 return nil, err 64 } else { 65 clients = append(clients, client) 66 } 67 } 68 return clients, nil 69 } 70 71 func doMain() int { 72 if err := loadflags.LoadForCli("logtool"); err != nil { 73 fmt.Fprintln(os.Stderr, err) 74 return 1 75 } 76 flag.Usage = printUsage 77 flag.Parse() 78 if flag.NArg() < 1 { 79 printUsage() 80 return 2 81 } 82 logger := cmdlogger.New() 83 srpc.SetDefaultLogger(logger) 84 if err := setupclient.SetupTls(true); err != nil { 85 logger.Fatalln(err) 86 } 87 return commands.RunCommands(subcommands, printUsage, logger) 88 } 89 90 func main() { 91 os.Exit(doMain()) 92 }