You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/11/11 13:52:55 UTC
[skywalking-cli] branch master updated: [Feature] Support instance
list command (#10)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git
The following commit(s) were added to refs/heads/master by this push:
new cb6e2ce [Feature] Support instance list command (#10)
cb6e2ce is described below
commit cb6e2ce077ccdb933ce321ea8f4ece50b8205b75
Author: zhang-wei <pk...@outlook.com>
AuthorDate: Mon Nov 11 21:52:50 2019 +0800
[Feature] Support instance list command (#10)
* add instance command
* add instance command
* fix license
* fix
* fix analyzers took error
* list command
* list command
* list command
* add instance command
* Add command manual and documentations (#8)
* Add command manual and ˆdocumentation
* Rename GitHub Action and display build status and coverage badge
* Update documentation to add developer guide and polishing
---
README.md | 18 +++++-
.../client/client.go => commands/flags/instance.go | 44 ++++----------
.../client.go => commands/instance/instance.go | 36 +++---------
commands/instance/list.go | 68 ++++++++++++++++++++++
graphql/client/client.go | 65 ++++++++++++++++++---
swctl/main.go | 5 +-
6 files changed, 166 insertions(+), 70 deletions(-)
diff --git a/README.md b/README.md
index aacbdf8..d8f3678 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,8 @@ This section covers all the available commands in SkyWalking CLI and their usage
- [`swctl`](#swctl-top-level-command)
- [`service`](#service-second-level-command) (second level command)
- [`list`, `ls`](#service-list---startstart-time---endend-time)
+- [`instance`](#instance-second-level-command) (second level command)
+ - [`list`, `ls`](#instance-list---service-idservice-id---service-nameservice-name---startstart-time---endend-time)
### `swctl` top-level command
`swctl` is the top-level command, which has some options that will take effects globally.
@@ -86,6 +88,20 @@ and it also has some options and third-level commands.
| `--start` | See [Common options](#common-options) | See [Common options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common options](#common-options) |
+### `instance` second-level command
+`instance` second-level command is an entry for all operations related to instances,
+and it also has some options and third-level commands.
+
+#### `instance list [--service-id=<service id>] [--service-name=<service name>] [--start=<start time>] [--end=<end time>]`
+`instance list` lists all the instances in the time range of \[`start`, `end`\] and given --service-id or --service-name.
+
+| option | description | default |
+| :--- | :--- | :--- |
+| `--service-id` | Query service id (priority over --service-name)| |
+| `--service-name` | Query service name | |
+| `--start` | See [Common options](#common-options) | See [Common options](#common-options) |
+| `--end` | See [Common options](#common-options) | See [Common options](#common-options) |
+
# Developer guide
## Compiling and building
@@ -118,4 +134,4 @@ go test -v ./...
```
# License
-[Apache 2.0 License.](/LICENSE)
+[Apache 2.0 License.](/LICENSE)
\ No newline at end of file
diff --git a/graphql/client/client.go b/commands/flags/instance.go
similarity index 51%
copy from graphql/client/client.go
copy to commands/flags/instance.go
index 2bbb412..70839b1 100644
--- a/graphql/client/client.go
+++ b/commands/flags/instance.go
@@ -16,37 +16,17 @@
*
*/
-package client
+package flags
-import (
- "context"
- "github.com/apache/skywalking-cli/graphql/schema"
- "github.com/apache/skywalking-cli/logger"
- "github.com/machinebox/graphql"
- "github.com/urfave/cli"
-)
-
-func Services(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
- client := graphql.NewClient(cliCtx.GlobalString("base-url"))
- client.Log = func(msg string) {
- logger.Log.Debugln(msg)
- }
-
- var response map[string][]schema.Service
- request := graphql.NewRequest(`
- query ($duration: Duration!) {
- services: getAllServices(duration: $duration) {
- id name
- }
- }
- `)
- request.Var("duration", duration)
+import "github.com/urfave/cli"
- ctx := context.Background()
- if err := client.Run(ctx, request, &response); err != nil {
- logger.Log.Fatalln(err)
- panic(err)
- }
-
- return response["services"]
-}
+var InstanceServiceIdFlags = append(DurationFlags,
+ cli.StringFlag{
+ Name: "service-id",
+ Usage: "query service `ID` (priority over \"--service-name\")",
+ },
+ cli.StringFlag{
+ Name: "service-name",
+ Usage: "query service `Name`",
+ },
+)
diff --git a/graphql/client/client.go b/commands/instance/instance.go
similarity index 53%
copy from graphql/client/client.go
copy to commands/instance/instance.go
index 2bbb412..12dae3c 100644
--- a/graphql/client/client.go
+++ b/commands/instance/instance.go
@@ -16,37 +16,17 @@
*
*/
-package client
+package instance
import (
- "context"
- "github.com/apache/skywalking-cli/graphql/schema"
- "github.com/apache/skywalking-cli/logger"
- "github.com/machinebox/graphql"
"github.com/urfave/cli"
)
-func Services(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
- client := graphql.NewClient(cliCtx.GlobalString("base-url"))
- client.Log = func(msg string) {
- logger.Log.Debugln(msg)
- }
-
- var response map[string][]schema.Service
- request := graphql.NewRequest(`
- query ($duration: Duration!) {
- services: getAllServices(duration: $duration) {
- id name
- }
- }
- `)
- request.Var("duration", duration)
-
- ctx := context.Background()
- if err := client.Run(ctx, request, &response); err != nil {
- logger.Log.Fatalln(err)
- panic(err)
- }
-
- return response["services"]
+var Command = cli.Command{
+ Name: "instance",
+ ShortName: "i",
+ Usage: "Instance related sub-command",
+ Subcommands: cli.Commands{
+ ListCommand,
+ },
}
diff --git a/commands/instance/list.go b/commands/instance/list.go
new file mode 100644
index 0000000..7b56c29
--- /dev/null
+++ b/commands/instance/list.go
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 instance
+
+import (
+ "github.com/apache/skywalking-cli/commands/flags"
+ "github.com/apache/skywalking-cli/commands/interceptor"
+ "github.com/apache/skywalking-cli/commands/model"
+ "github.com/apache/skywalking-cli/display"
+ "github.com/apache/skywalking-cli/graphql/client"
+ "github.com/apache/skywalking-cli/graphql/schema"
+ "github.com/apache/skywalking-cli/logger"
+ "github.com/urfave/cli"
+)
+
+var ListCommand = cli.Command{
+ Name: "list",
+ ShortName: "ls",
+ Usage: "List all available instance by given --service-id or --service-name parameter",
+ Flags: flags.InstanceServiceIdFlags,
+ Before: interceptor.BeforeChain([]cli.BeforeFunc{
+ interceptor.DurationInterceptor,
+ }),
+ Action: func(ctx *cli.Context) error {
+ serviceId := ctx.String("service-id")
+ serviceName := ctx.String("service-name")
+
+ if serviceId == "" && serviceName == "" {
+ logger.Log.Fatalf("flags \"service-id, service-name\" must set one")
+ }
+
+ if serviceId == "" && serviceName != "" {
+ service, err := client.SearchService(ctx, serviceName)
+ if err != nil {
+ logger.Log.Fatalln(err)
+ }
+ serviceId = service.ID
+ }
+
+ end := ctx.String("end")
+ start := ctx.String("start")
+ step := ctx.Generic("step")
+
+ instances := client.Instances(ctx, serviceId, schema.Duration{
+ Start: start,
+ End: end,
+ Step: step.(*model.StepEnumValue).Selected,
+ })
+
+ return display.Display(ctx, instances)
+ },
+}
diff --git a/graphql/client/client.go b/graphql/client/client.go
index 2bbb412..d72bc06 100644
--- a/graphql/client/client.go
+++ b/graphql/client/client.go
@@ -20,18 +20,30 @@ package client
import (
"context"
+ "fmt"
"github.com/apache/skywalking-cli/graphql/schema"
"github.com/apache/skywalking-cli/logger"
"github.com/machinebox/graphql"
"github.com/urfave/cli"
)
-func Services(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
- client := graphql.NewClient(cliCtx.GlobalString("base-url"))
+func newClient(cliCtx *cli.Context) (client *graphql.Client) {
+ client = graphql.NewClient(cliCtx.GlobalString("base-url"))
client.Log = func(msg string) {
logger.Log.Debugln(msg)
}
+ return
+}
+
+func executeQuery(cliCtx *cli.Context, request *graphql.Request, response interface{}) {
+ client := newClient(cliCtx)
+ ctx := context.Background()
+ if err := client.Run(ctx, request, response); err != nil {
+ logger.Log.Fatalln(err)
+ }
+}
+func Services(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
var response map[string][]schema.Service
request := graphql.NewRequest(`
query ($duration: Duration!) {
@@ -42,11 +54,48 @@ func Services(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
`)
request.Var("duration", duration)
- ctx := context.Background()
- if err := client.Run(ctx, request, &response); err != nil {
- logger.Log.Fatalln(err)
- panic(err)
- }
-
+ executeQuery(cliCtx, request, &response)
return response["services"]
}
+
+func Instances(cliCtx *cli.Context, serviceId string, duration schema.Duration) []schema.ServiceInstance {
+ var response map[string][]schema.ServiceInstance
+ request := graphql.NewRequest(`
+ query ($serviceId: ID!, $duration: Duration!) {
+ instances: getServiceInstances(duration: $duration, serviceId: $serviceId) {
+ id
+ name
+ language
+ instanceUUID
+ attributes {
+ name
+ value
+ }
+ }
+ }
+ `)
+ request.Var("serviceId", serviceId)
+ request.Var("duration", duration)
+
+ executeQuery(cliCtx, request, &response)
+ return response["instances"]
+}
+
+func SearchService(cliCtx *cli.Context, serviceCode string) (service schema.Service, err error) {
+ var response map[string]schema.Service
+ request := graphql.NewRequest(`
+ query searchService($serviceCode: String!) {
+ service: searchService(serviceCode: $serviceCode) {
+ id name
+ }
+ }
+ `)
+ request.Var("serviceCode", serviceCode)
+
+ executeQuery(cliCtx, request, &response)
+ service = response["service"]
+ if service.ID == "" {
+ return service, fmt.Errorf("no such service [%s]", serviceCode)
+ }
+ return service, nil
+}
diff --git a/swctl/main.go b/swctl/main.go
index 0667211..e0ec990 100644
--- a/swctl/main.go
+++ b/swctl/main.go
@@ -19,6 +19,7 @@
package main
import (
+ "github.com/apache/skywalking-cli/commands/instance"
"github.com/apache/skywalking-cli/commands/interceptor"
"github.com/apache/skywalking-cli/commands/service"
"github.com/apache/skywalking-cli/logger"
@@ -60,12 +61,14 @@ func main() {
altsrc.NewStringFlag(cli.StringFlag{
Name: "display",
Required: false,
- Usage: "display `style` of the result, supported styles are: json, yaml",
+ Usage: "display `style` of the result, supported styles are: json, yaml, table",
+ Value: "json",
}),
}
app.Commands = []cli.Command{
service.Command,
+ instance.Command,
}
app.Before = interceptor.BeforeChain([]cli.BeforeFunc{