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  }