diff --git a/cmd/logcli/client.go b/cmd/logcli/client.go index ed4bd3d9c83abc1d75d79b55a1cd5687309f3709..257fd027187176efb1ccbeda34a27c771f1c2a49 100644 --- a/cmd/logcli/client.go +++ b/cmd/logcli/client.go @@ -54,7 +54,8 @@ func listLabelValues(name string) (*logproto.LabelResponse, error) { } func doRequest(path string, out interface{}) error { - url := *addr + path + addrURL.Path = path + url := addrURL.String() if !*quiet { log.Print(url) } @@ -71,7 +72,7 @@ func doRequest(path string, out interface{}) error { CAFile: *tlsCACertPath, CertFile: *tlsClientCertPath, KeyFile: *tlsClientCertKeyPath, - ServerName: url, + ServerName: addrURL.Host, InsecureSkipVerify: *tlsSkipVerify, }, } @@ -110,14 +111,15 @@ func wsConnect(path string) (*websocket.Conn, error) { CAFile: *tlsCACertPath, CertFile: *tlsClientCertPath, KeyFile: *tlsClientCertKeyPath, - ServerName: *addr, + ServerName: addrURL.Host, InsecureSkipVerify: *tlsSkipVerify, }) if err != nil { return nil, err } - url := *addr + path + addrURL.Path = path + url := addrURL.String() if strings.HasPrefix(url, "https") { url = strings.Replace(url, "https", "wss", 1) } else if strings.HasPrefix(url, "http") { diff --git a/cmd/logcli/main.go b/cmd/logcli/main.go index 10eff49b2ea8fac260e24d1f3e059ed347ac0772..86cb8bcf81a22d9385140d0197d87e36b2140ac3 100644 --- a/cmd/logcli/main.go +++ b/cmd/logcli/main.go @@ -2,9 +2,10 @@ package main import ( "log" + "net/url" "os" - kingpin "gopkg.in/alecthomas/kingpin.v2" + "gopkg.in/alecthomas/kingpin.v2" ) var ( @@ -12,7 +13,9 @@ var ( quiet = app.Flag("quiet", "suppress everything but log lines").Default("false").Short('q').Bool() outputMode = app.Flag("output", "specify output mode [default, raw, jsonl]").Default("default").Short('o').Enum("default", "raw", "jsonl") - addr = app.Flag("addr", "Server address.").Default("https://logs-us-west1.grafana.net").Envar("GRAFANA_ADDR").String() + addr = app.Flag("addr", "Server address.").Default("https://logs-us-west1.grafana.net").Envar("GRAFANA_ADDR").String() + addrURL url.URL + username = app.Flag("username", "Username for HTTP basic auth.").Default("").Envar("GRAFANA_USERNAME").String() password = app.Flag("password", "Password for HTTP basic auth.").Default("").Envar("GRAFANA_PASSWORD").String() @@ -35,19 +38,27 @@ var ( ignoreLabelsKey = queryCmd.Flag("exclude-label", "Exclude labels given the provided key during output.").Strings() showLabelsKey = queryCmd.Flag("include-label", "Include labels given the provided key during output.").Strings() fixedLabelsLen = queryCmd.Flag("labels-length", "Set a fixed padding to labels").Default("0").Int() - - labelsCmd = app.Command("labels", "Find values for a given label.") - labelName = labelsCmd.Arg("label", "The name of the label.").HintAction(listLabels).String() + labelsCmd = app.Command("labels", "Find values for a given label.") + labelName = labelsCmd.Arg("label", "The name of the label.").HintAction(listLabels).String() ) func main() { log.SetOutput(os.Stderr) - switch kingpin.MustParse(app.Parse(os.Args[1:])) { + cmd := kingpin.MustParse(app.Parse(os.Args[1:])) + + if *addr == "" { + log.Fatalln("Server address cannot be empty") + } + + u, err := url.Parse(*addr) + if err != nil { + log.Fatalf("Failed to parse addr into URL: %v", err) + } + addrURL = *u + + switch cmd { case queryCmd.FullCommand(): - if *addr == "" { - log.Fatalln("Server address cannot be empty") - } doQuery() case labelsCmd.FullCommand(): doLabels()