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  }