Skip to content

Commit

Permalink
Add status command (#2684)
Browse files Browse the repository at this point in the history
* Add status command
Signed-off-by: Chen Zhengwei <[email protected]>

Signed-off-by: chen zhengwei <[email protected]>

* Use make fmt
Signed-off-by: Chen Zhengwei <[email protected]>

* Add unit test
Signed-off-by: Chen Zhengwei <[email protected]>

Signed-off-by: chen zhengwei <[email protected]>

* Fix unit test.
Signed-off-by: Chen Zhengwei <[email protected]>

Signed-off-by: chen zhengwei <[email protected]>
  • Loading branch information
sniperking1234 authored Dec 11, 2020
1 parent 1b20947 commit 6d315d7
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cmd/agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/agent/app/reporter/grpc"
"github.com/jaegertracing/jaeger/cmd/docs"
"github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/version"
"github.com/jaegertracing/jaeger/ports"
Expand Down Expand Up @@ -95,6 +96,7 @@ func main() {

command.AddCommand(version.Command())
command.AddCommand(docs.Command(v))
command.AddCommand(status.Command(v, ports.AgentAdminHTTP))

config.AddFlags(
v,
Expand Down
2 changes: 2 additions & 0 deletions cmd/all-in-one/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/flags"
queryApp "github.com/jaegertracing/jaeger/cmd/query/app"
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/version"
ss "github.com/jaegertracing/jaeger/plugin/sampling/strategystore"
Expand Down Expand Up @@ -182,6 +183,7 @@ by default uses only in-memory database.`,
command.AddCommand(version.Command())
command.AddCommand(env.Command())
command.AddCommand(docs.Command(v))
command.AddCommand(status.Command(v, ports.CollectorAdminHTTP))

config.AddFlags(
v,
Expand Down
2 changes: 2 additions & 0 deletions cmd/collector/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/docs"
"github.com/jaegertracing/jaeger/cmd/env"
"github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/version"
ss "github.com/jaegertracing/jaeger/plugin/sampling/strategystore"
Expand Down Expand Up @@ -122,6 +123,7 @@ func main() {
command.AddCommand(version.Command())
command.AddCommand(env.Command())
command.AddCommand(docs.Command(v))
command.AddCommand(status.Command(v, ports.CollectorAdminHTTP))

config.AddFlags(
v,
Expand Down
2 changes: 2 additions & 0 deletions cmd/ingester/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/ingester/app"
"github.com/jaegertracing/jaeger/cmd/ingester/app/builder"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/version"
"github.com/jaegertracing/jaeger/plugin/storage"
Expand Down Expand Up @@ -99,6 +100,7 @@ func main() {
command.AddCommand(version.Command())
command.AddCommand(env.Command())
command.AddCommand(docs.Command(v))
command.AddCommand(status.Command(v, ports.IngesterAdminHTTP))

config.AddFlags(
v,
Expand Down
2 changes: 2 additions & 0 deletions cmd/query/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"github.com/jaegertracing/jaeger/cmd/flags"
"github.com/jaegertracing/jaeger/cmd/query/app"
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
"github.com/jaegertracing/jaeger/cmd/status"
"github.com/jaegertracing/jaeger/pkg/config"
"github.com/jaegertracing/jaeger/pkg/version"
"github.com/jaegertracing/jaeger/plugin/storage"
Expand Down Expand Up @@ -134,6 +135,7 @@ func main() {
command.AddCommand(version.Command())
command.AddCommand(env.Command())
command.AddCommand(docs.Command(v))
command.AddCommand(status.Command(v, ports.QueryAdminHTTP))

config.AddFlags(
v,
Expand Down
70 changes: 70 additions & 0 deletions cmd/status/command.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Copyright (c) 2020 The Jaeger Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package status

import (
"flag"
"fmt"
"io/ioutil"
"net/http"
"strings"

"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/jaegertracing/jaeger/ports"
)

const statusHTTPHostPort = "status.http.host-port"

// Command for check component status.
func Command(v *viper.Viper, adminPort int) *cobra.Command {
c := &cobra.Command{
Use: "status",
Short: "Print the status.",
Long: `Print Jaeger component status information, exit non-zero on any error.`,
RunE: func(cmd *cobra.Command, args []string) error {
url := convert(v.GetString(statusHTTPHostPort))
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("abnormal value of http status code: %v", resp.StatusCode)
}
return nil
},
}
c.Flags().AddGoFlagSet(flags(&flag.FlagSet{}, adminPort))
v.BindPFlags(c.Flags())
return c
}

func flags(flagSet *flag.FlagSet, adminPort int) *flag.FlagSet {
adminPortStr := ports.PortToHostPort(adminPort)
flagSet.String(statusHTTPHostPort, adminPortStr, fmt.Sprintf(
"The host:port (e.g. 127.0.0.1%s or %s) for the health check", adminPortStr, adminPortStr))
return flagSet
}

func convert(httpHostPort string) string {
if strings.HasPrefix(httpHostPort, ":") {
return fmt.Sprintf("http://127.0.0.1%s", httpHostPort)
}
return fmt.Sprintf("http://%s", httpHostPort)
}
72 changes: 72 additions & 0 deletions cmd/status/command_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright (c) 2020 The Jaeger Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package status

import (
"net/http"
"net/http/httptest"
"strings"
"testing"

"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
)

func readyHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("{\"status\":\"Server available\"}"))
}

func unavailableHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusServiceUnavailable)
w.Write([]byte("{\"status\":\"Server not available\"}"))
}

func TestReady(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(readyHandler))
defer ts.Close()
v := viper.New()
cmd := Command(v, 80)
cmd.ParseFlags([]string{"--status.http.host-port=" + strings.TrimPrefix(ts.URL, "http://")})
err := cmd.Execute()
assert.NoError(t, err)
}

func TestOnlyPortConfig(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(readyHandler))
defer ts.Close()
v := viper.New()
cmd := Command(v, 80)
cmd.ParseFlags([]string{"--status.http.host-port=:" + strings.Split(ts.URL, ":")[len(strings.Split(ts.URL, ":"))-1]})
err := cmd.Execute()
assert.NoError(t, err)
}

func TestUnready(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(unavailableHandler))
defer ts.Close()
v := viper.New()
cmd := Command(v, 80)
cmd.ParseFlags([]string{"--status.http.host-port=" + strings.TrimPrefix(ts.URL, "http://")})
err := cmd.Execute()
assert.Error(t, err)
}

func TestNoService(t *testing.T) {
v := viper.New()
cmd := Command(v, 12345)
err := cmd.Execute()
assert.Error(t, err)
}

0 comments on commit 6d315d7

Please sign in to comment.