You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/12/18 10:46:07 UTC

[skywalking-cli] branch chore/project-layout created (now b752d69)

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a change to branch chore/project-layout
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git.


      at b752d69  chore: add an example of skywalking.yaml

This branch includes the following new commits:

     new 2ed3443  chore: reorganize the project layout
     new b752d69  chore: add an example of skywalking.yaml

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking-cli] 01/02: chore: reorganize the project layout

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch chore/project-layout
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git

commit 2ed3443179b3995f44d5588c66716fe24b6f0341
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Fri Dec 18 18:42:19 2020 +0800

    chore: reorganize the project layout
---
 CONTRIBUTING.md                                    | 12 +++---
 Makefile                                           | 10 ++---
 README.md                                          |  4 +-
 {graphql/schema => api}/schema.go                  |  2 +-
 assets/assets.go                                   |  2 +-
 cmd/{ => swctl}/main.go                            | 22 +++++-----
 {example => examples}/global.yml                   |  0
 go.mod                                             |  3 +-
 go.sum                                             | 33 ++++++++++++++-
 gqlgen.yml                                         |  6 +--
 .../commands}/dashboard/dashboard.go               |  2 +-
 .../commands}/dashboard/global/global.go           | 17 ++++----
 .../commands}/dashboard/global/metrics.go          | 17 ++++----
 .../commands}/endpoint/endpoint.go                 |  0
 {commands => internal/commands}/endpoint/list.go   |  6 +--
 .../commands/healthcheck/healthcheck.go            | 10 ++---
 .../commands}/instance/instance.go                 |  4 +-
 {commands => internal/commands}/instance/list.go   | 16 ++++----
 {commands => internal/commands}/instance/search.go | 18 ++++----
 .../commands}/interceptor/duration.go              | 14 +++----
 .../commands}/interceptor/duration_test.go         | 13 +++---
 .../commands}/interceptor/entity.go                | 23 +++++------
 .../commands}/interceptor/entity_test.go           | 35 ++++++++--------
 .../commands}/interceptor/interceptor.go           |  0
 .../commands}/interceptor/timezone.go              |  4 +-
 .../commands}/metrics/aggregation/topn.go          | 25 ++++++-----
 .../commands}/metrics/linear/linear-metrics.go     | 20 ++++-----
 .../metrics/linear/multiple-linear-metrics.go      | 22 +++++-----
 .../commands}/metrics/list/list-metrics.go         |  6 +--
 {commands => internal/commands}/metrics/metrics.go | 10 ++---
 .../commands}/metrics/single/single-metrics.go     | 19 ++++-----
 .../metrics/thermodynamic/thermodynamic.go         | 19 ++++-----
 {commands => internal/commands}/service/list.go    | 20 ++++-----
 {commands => internal/commands}/service/service.go |  0
 {commands => internal/commands}/trace/list.go      | 28 ++++++-------
 {commands => internal/commands}/trace/trace.go     |  6 +--
 {commands => internal}/flags/duration.go           | 12 +++---
 {commands => internal}/flags/entity.go             |  0
 {commands => internal}/flags/flags.go              |  0
 {commands => internal}/flags/instance.go           |  0
 {commands => internal}/flags/metrics.go            | 11 +++--
 {commands => internal}/flags/search.go             |  0
 {logger => internal/logger}/log.go                 |  0
 {commands => internal}/model/order.go              | 13 +++---
 {commands => internal}/model/scope.go              | 13 +++---
 {commands => internal}/model/step.go               | 13 +++---
 {display => pkg/display}/display.go                | 10 ++---
 .../display}/displayable/displayable.go            |  6 ++-
 {display => pkg/display}/graph/dashboard/global.go | 24 +++++------
 {display => pkg/display}/graph/gauge/gauge.go      | 14 +++----
 {display => pkg/display}/graph/graph.go            | 24 +++++------
 {display => pkg/display}/graph/heatmap/heatmap.go  | 16 ++++----
 {display => pkg/display}/graph/linear/linear.go    |  0
 {display => pkg/display}/graph/tree/adapter.go     | 28 ++++++-------
 {display => pkg/display}/graph/tree/list.go        | 22 +++++-----
 {display => pkg/display}/graph/tree/tree.go        |  2 +-
 {display => pkg/display}/json/json.go              |  2 +-
 {display => pkg/display}/json/json_test.go         | 13 +++---
 {display => pkg/display}/table/table.go            |  4 +-
 {display => pkg/display}/table/table_test.go       | 13 +++---
 {display => pkg/display}/yaml/yaml.go              |  2 +-
 {display => pkg/display}/yaml/yaml_test.go         | 13 +++---
 {graphql => pkg/graphql}/client/client.go          |  2 +-
 {graphql => pkg/graphql}/common/common.go          | 10 ++---
 {graphql => pkg/graphql}/dashboard/global.go       | 48 +++++++++++-----------
 {graphql => pkg/graphql}/metadata/metadata.go      | 26 ++++++------
 {graphql => pkg/graphql}/metrics/metrics.go        | 27 ++++++------
 {graphql => pkg/graphql}/trace/trace.go            | 12 +++---
 {graphql => pkg/graphql}/utils/adapter.go          | 12 +++---
 {graphql => pkg/graphql}/utils/adapter_test.go     | 17 ++++----
 {graphql => pkg/graphql}/utils/constants.go        | 23 +++++------
 grpc/health.go => pkg/healthcheck/grpc.go          |  4 +-
 {lib => pkg}/heatmap/axes/axes.go                  |  0
 {lib => pkg}/heatmap/axes/label.go                 |  2 +-
 {lib => pkg}/heatmap/heatmap.go                    |  2 +-
 {lib => pkg}/heatmap/options.go                    |  0
 {util => pkg/util}/io.go                           |  2 +-
 {util => pkg/util}/lang.go                         |  0
 {util => pkg/util}/math.go                         |  0
 {hack => scripts}/boilerplate.go.txt               |  0
 {hack => scripts}/build-header.sh                  |  0
 {test => scripts}/test_commands.sh                 |  0
 82 files changed, 452 insertions(+), 438 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9688f0d..6a9d939 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -47,17 +47,17 @@ make
 ```
 
 ## Writing a new command
-All commands files locate in directory [`commands`](commands), and an individual directory for each second-level command,
-an individual `go` file for each third-level command, for example, there is a directory [`service`](commands/service) for command `swctl service`, 
-and a [`list.go`](commands/service/list.go) file for `swctl service list` command.
+All commands files locate in directory [`commands`](internal/commands), and an individual directory for each second-level command,
+an individual `go` file for each third-level command, for example, there is a directory [`service`](internal/commands/service) for command `swctl service`, 
+and a [`list.go`](internal/commands/service/list.go) file for `swctl service list` command.
 
 Determine what entity your command will operate on, and put your command `go` file into that directory, or create one if it doesn't exist,
 for example, if you want to create a command to `list` all the `instance`s of a service, create a directory `commands/instance`,
 and a `go` file `commands/instance/list.go`.
 
 ## Reusing common options
-There're some [common options](#common-options) that can be shared by multiple commands, check [`commands/flags`](commands/flags)
-to get all the shared options, and reuse them when possible, an example shares the options is [`commands/service/list.go`](commands/service/list.go#L35)
+There're some [common options](#common-options) that can be shared by multiple commands, check [`commands/flags`](internal/flags)
+to get all the shared options, and reuse them when possible, an example shares the options is [`commands/service/list.go`](internal/commands/service/list.go#L35)
 
 ## Linting your codes
 We have some rules for the code style and please lint your codes locally before opening a pull request
@@ -99,4 +99,4 @@ This section guides committers and PMC members to release SkyWalking CLI in Apac
 - [Send internal announcement](docs/How-to-release.md#make-the-internal-announcements)
 - [Wait at least 48 hours for test responses](docs/How-to-release.md#wait-at-least-48-hours-for-test-responses)
 - [Call for vote](docs/How-to-release.md#call-a-vote-in-dev)
-- [Publish release](docs/How-to-release.md#publish-release)
\ No newline at end of file
+- [Publish release](docs/How-to-release.md#publish-release)
diff --git a/Makefile b/Makefile
index e8017d5..2f70003 100644
--- a/Makefile
+++ b/Makefile
@@ -63,14 +63,14 @@ assets: tools
 	cd assets \
 		&& $(GO_BINDATA) --nocompress --nometadata --pkg assets --ignore '.*\.go' \
 			-o "assets.gen.go" ./... \
-		&& ../hack/build-header.sh assets.gen.go \
+		&& ../scripts/build-header.sh assets.gen.go \
 		&& cd ..
 
 gqlgen: tools
 	echo 'scalar Long' > query-protocol/schema.graphqls
 	$(GQL_GEN) generate
 	-rm -rf generated.go
-	-hack/build-header.sh graphql/schema/schema.go
+	-scripts/build-header.sh api/schema.go
 	-rm query-protocol/schema.graphqls
 	
 codegen: clean assets gqlgen
@@ -79,7 +79,7 @@ codegen: clean assets gqlgen
 .PHONY: $(PLATFORMS)
 $(PLATFORMS):
 	mkdir -p $(OUT_DIR)
-	GOOS=$(os) GOARCH=$(ARCH) $(GO_BUILD) $(GO_BUILD_FLAGS) -ldflags "$(GO_BUILD_LDFLAGS)" -o $(OUT_DIR)/$(BINARY)-$(VERSION)-$(os)-$(ARCH) cmd/main.go
+	GOOS=$(os) GOARCH=$(ARCH) $(GO_BUILD) $(GO_BUILD_FLAGS) -ldflags "$(GO_BUILD_LDFLAGS)" -o $(OUT_DIR)/$(BINARY)-$(VERSION)-$(os)-$(ARCH) cmd/swctl/main.go
 
 .PHONY: lint
 lint: codegen tools
@@ -163,6 +163,6 @@ test-commands:
 		docker container prune -f; \
 		docker run --name oap -p 12800:12800 -p 11800:11800 -d -e SW_HEALTH_CHECKER=default -e SW_TELEMETRY=prometheus apache/skywalking-oap-server:latest; \
 	fi
-	./test/test_commands.sh
+	./scripts/test_commands.sh
 	@docker container stop oap
-	@docker container prune -f
\ No newline at end of file
+	@docker container prune -f
diff --git a/README.md b/README.md
index 0c28b09..5a8a915 100644
--- a/README.md
+++ b/README.md
@@ -322,7 +322,7 @@ Ascii Graph, like coloring in terminal, so please use `json`  or `yaml` instead.
 | `--start` | See [Common options](#common-options) | See [Common options](#common-options) |
 | `--end` | See [Common options](#common-options) | See [Common options](#common-options) |
 
-You can imitate the content of [the default template file](example/global.yml) to customize the dashboard.
+You can imitate the content of [the default template file](examples/global.yml) to customize the dashboard.
 
 </details>
 
@@ -341,7 +341,7 @@ You can imitate the content of [the default template file](example/global.yml) t
 | `--start` | See [Common options](#common-options) | See [Common options](#common-options) |
 | `--end` | See [Common options](#common-options) | See [Common options](#common-options) |
 
-You can imitate the content of [the default template file](example/global.yml) to customize the dashboard.
+You can imitate the content of [the default template file](examples/global.yml) to customize the dashboard.
 
 </details>
 
diff --git a/graphql/schema/schema.go b/api/schema.go
similarity index 99%
rename from graphql/schema/schema.go
rename to api/schema.go
index 8c0b78c..6b45fac 100644
--- a/graphql/schema/schema.go
+++ b/api/schema.go
@@ -17,7 +17,7 @@
 
 // Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
 
-package schema
+package api
 
 import (
 	"fmt"
diff --git a/assets/assets.go b/assets/assets.go
index 8983ff9..665e0c3 100644
--- a/assets/assets.go
+++ b/assets/assets.go
@@ -18,7 +18,7 @@
 package assets
 
 import (
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 // Read reads all content from a file under assets, which is packed in to the binary
diff --git a/cmd/main.go b/cmd/swctl/main.go
similarity index 85%
rename from cmd/main.go
rename to cmd/swctl/main.go
index 189bd5a..46c7acb 100644
--- a/cmd/main.go
+++ b/cmd/swctl/main.go
@@ -21,24 +21,24 @@ import (
 	"io/ioutil"
 	"os"
 
-	"github.com/apache/skywalking-cli/commands/common"
-	"github.com/apache/skywalking-cli/commands/trace"
+	"github.com/apache/skywalking-cli/internal/commands/healthcheck"
+	"github.com/apache/skywalking-cli/internal/commands/trace"
 
-	"github.com/apache/skywalking-cli/commands/dashboard"
+	"github.com/apache/skywalking-cli/internal/commands/dashboard"
 
-	"github.com/apache/skywalking-cli/commands/metrics"
+	"github.com/apache/skywalking-cli/internal/commands/metrics"
 
-	"github.com/apache/skywalking-cli/commands/endpoint"
-	"github.com/apache/skywalking-cli/commands/instance"
+	"github.com/apache/skywalking-cli/internal/commands/endpoint"
+	"github.com/apache/skywalking-cli/internal/commands/instance"
 
 	"github.com/sirupsen/logrus"
 	"github.com/urfave/cli"
 	"github.com/urfave/cli/altsrc"
 
-	"github.com/apache/skywalking-cli/commands/interceptor"
-	"github.com/apache/skywalking-cli/commands/service"
-	"github.com/apache/skywalking-cli/logger"
-	"github.com/apache/skywalking-cli/util"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/commands/service"
+	"github.com/apache/skywalking-cli/internal/logger"
+	"github.com/apache/skywalking-cli/pkg/util"
 )
 
 var log *logrus.Logger
@@ -108,7 +108,7 @@ func main() {
 		service.Command,
 		metrics.Command,
 		trace.Command,
-		common.Command,
+		healthcheck.Command,
 		dashboard.Command,
 	}
 
diff --git a/example/global.yml b/examples/global.yml
similarity index 100%
rename from example/global.yml
rename to examples/global.yml
diff --git a/go.mod b/go.mod
index caf1f12..4dffc4f 100644
--- a/go.mod
+++ b/go.mod
@@ -20,7 +20,8 @@ require (
 	github.com/urfave/cli v1.22.1
 	golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
 	golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
-	google.golang.org/grpc v1.24.0
+	google.golang.org/grpc v1.27.0
+	google.golang.org/protobuf v1.25.0 // indirect
 	gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
 	gopkg.in/yaml.v2 v2.4.0
 )
diff --git a/go.sum b/go.sum
index e44a9b5..1f05b71 100644
--- a/go.sum
+++ b/go.sum
@@ -25,6 +25,7 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
@@ -40,6 +41,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -65,10 +68,21 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -177,6 +191,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -326,6 +341,8 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -346,11 +363,23 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
 google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a h1:Ob5/580gVHBJZgXnff1cZDbG+xLtMVE5mDRTe+nIsX4=
 google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s=
-google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/gqlgen.yml b/gqlgen.yml
index 81cf26e..c613e5e 100644
--- a/gqlgen.yml
+++ b/gqlgen.yml
@@ -20,9 +20,9 @@ schema:
 skip_validation: true
 
 model:
-  filename: graphql/schema/schema.go
-  package: schema
+  filename: api/schema.go
+  package: api
 
 models:
   Long:
-    model: github.com/99designs/gqlgen/graphql.Int64
\ No newline at end of file
+    model: github.com/99designs/gqlgen/graphql.Int64
diff --git a/commands/dashboard/dashboard.go b/internal/commands/dashboard/dashboard.go
similarity index 93%
rename from commands/dashboard/dashboard.go
rename to internal/commands/dashboard/dashboard.go
index cb1c7c7..5d270da 100644
--- a/commands/dashboard/dashboard.go
+++ b/internal/commands/dashboard/dashboard.go
@@ -20,7 +20,7 @@ package dashboard
 import (
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/commands/dashboard/global"
+	"github.com/apache/skywalking-cli/internal/commands/dashboard/global"
 )
 
 var Command = cli.Command{
diff --git a/commands/dashboard/global/global.go b/internal/commands/dashboard/global/global.go
similarity index 80%
rename from commands/dashboard/global/global.go
rename to internal/commands/dashboard/global/global.go
index 577abde..b38fe20 100644
--- a/commands/dashboard/global/global.go
+++ b/internal/commands/dashboard/global/global.go
@@ -18,17 +18,16 @@
 package global
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/commands/model"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/display/displayable"
-
-	"github.com/apache/skywalking-cli/commands/flags"
-	"github.com/apache/skywalking-cli/commands/interceptor"
-	"github.com/apache/skywalking-cli/display"
-	"github.com/apache/skywalking-cli/graphql/dashboard"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/graphql/dashboard"
 )
 
 var GlobalCommand = cli.Command{
@@ -62,7 +61,7 @@ var GlobalCommand = cli.Command{
 		start := ctx.String("start")
 		step := ctx.Generic("step")
 
-		globalData := dashboard.Global(ctx, schema.Duration{
+		globalData := dashboard.Global(ctx, api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
diff --git a/commands/dashboard/global/metrics.go b/internal/commands/dashboard/global/metrics.go
similarity index 78%
rename from commands/dashboard/global/metrics.go
rename to internal/commands/dashboard/global/metrics.go
index d5ffa40..87723a0 100644
--- a/commands/dashboard/global/metrics.go
+++ b/internal/commands/dashboard/global/metrics.go
@@ -18,14 +18,13 @@
 package global
 
 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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/dashboard"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/api"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/dashboard"
 	"github.com/urfave/cli"
 )
 
@@ -52,7 +51,7 @@ var Metrics = cli.Command{
 		start := ctx.String("start")
 		step := ctx.Generic("step")
 
-		globalMetrics := dashboard.Metrics(ctx, schema.Duration{
+		globalMetrics := dashboard.Metrics(ctx, api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
diff --git a/commands/endpoint/endpoint.go b/internal/commands/endpoint/endpoint.go
similarity index 100%
rename from commands/endpoint/endpoint.go
rename to internal/commands/endpoint/endpoint.go
diff --git a/commands/endpoint/list.go b/internal/commands/endpoint/list.go
similarity index 91%
rename from commands/endpoint/list.go
rename to internal/commands/endpoint/list.go
index 3c6767b..a1e66e0 100644
--- a/commands/endpoint/list.go
+++ b/internal/commands/endpoint/list.go
@@ -20,11 +20,11 @@ package endpoint
 import (
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 
-	"github.com/apache/skywalking-cli/display"
+	"github.com/apache/skywalking-cli/pkg/display"
 )
 
 var ListCommand = cli.Command{
diff --git a/commands/common/common.go b/internal/commands/healthcheck/healthcheck.go
similarity index 87%
rename from commands/common/common.go
rename to internal/commands/healthcheck/healthcheck.go
index 7457569..8827557 100644
--- a/commands/common/common.go
+++ b/internal/commands/healthcheck/healthcheck.go
@@ -15,14 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package common
+package healthcheck
 
 import (
+	"github.com/apache/skywalking-cli/pkg/healthcheck"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/common"
-	"github.com/apache/skywalking-cli/grpc"
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
+	"github.com/apache/skywalking-cli/pkg/graphql/common"
 )
 
 var Command = cli.Command{
@@ -56,7 +56,7 @@ var Command = cli.Command{
 		if !ctx.BoolT("grpc") {
 			return nil
 		}
-		retCode := grpc.HealthCheck(ctx.String("grpcAddr"), ctx.Bool("grpcTLS"))
+		retCode := healthcheck.HealthCheck(ctx.String("grpcAddr"), ctx.Bool("grpcTLS"))
 		if retCode != 0 {
 			return cli.NewExitError("gRPC: failed to check health", retCode)
 		}
diff --git a/commands/instance/instance.go b/internal/commands/instance/instance.go
similarity index 93%
rename from commands/instance/instance.go
rename to internal/commands/instance/instance.go
index 29c86a7..9277086 100644
--- a/commands/instance/instance.go
+++ b/internal/commands/instance/instance.go
@@ -20,9 +20,9 @@ package instance
 import (
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 var Command = cli.Command{
diff --git a/commands/instance/list.go b/internal/commands/instance/list.go
similarity index 78%
rename from commands/instance/list.go
rename to internal/commands/instance/list.go
index 1cfcd88..800a7b1 100644
--- a/commands/instance/list.go
+++ b/internal/commands/instance/list.go
@@ -18,17 +18,17 @@
 package instance
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 
-	"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/schema"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
 )
 
 var ListCommand = cli.Command{
@@ -47,7 +47,7 @@ var ListCommand = cli.Command{
 		start := ctx.String("start")
 		step := ctx.Generic("step")
 
-		instances := metadata.Instances(ctx, serviceID, schema.Duration{
+		instances := metadata.Instances(ctx, serviceID, api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
diff --git a/commands/instance/search.go b/internal/commands/instance/search.go
similarity index 79%
rename from commands/instance/search.go
rename to internal/commands/instance/search.go
index 548606f..9a3ac62 100644
--- a/commands/instance/search.go
+++ b/internal/commands/instance/search.go
@@ -18,19 +18,19 @@
 package instance
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"regexp"
 
-	"github.com/apache/skywalking-cli/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 
 	"github.com/urfave/cli"
 
-	"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/schema"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
 )
 
 var SearchCommand = cli.Command{
@@ -50,13 +50,13 @@ var SearchCommand = cli.Command{
 
 		regex := ctx.String("regex")
 
-		instances := metadata.Instances(ctx, serviceID, schema.Duration{
+		instances := metadata.Instances(ctx, serviceID, api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
 		})
 
-		var result []schema.ServiceInstance
+		var result []api.ServiceInstance
 		if len(instances) > 0 {
 			for _, instance := range instances {
 				if ok, _ := regexp.Match(regex, []byte(instance.Name)); ok {
diff --git a/commands/interceptor/duration.go b/internal/commands/interceptor/duration.go
similarity index 91%
rename from commands/interceptor/duration.go
rename to internal/commands/interceptor/duration.go
index 6e382e0..47b2673 100644
--- a/commands/interceptor/duration.go
+++ b/internal/commands/interceptor/duration.go
@@ -18,18 +18,18 @@
 package interceptor
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"strconv"
 	"time"
 
-	"github.com/apache/skywalking-cli/graphql/utils"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
-func TryParseTime(unparsed string) (schema.Step, time.Time, error) {
+func TryParseTime(unparsed string) (api.Step, time.Time, error) {
 	var possibleError error = nil
 	for step, layout := range utils.StepFormats {
 		t, err := time.Parse(layout, unparsed)
@@ -38,7 +38,7 @@ func TryParseTime(unparsed string) (schema.Step, time.Time, error) {
 		}
 		possibleError = err
 	}
-	return schema.StepSecond, time.Time{}, possibleError
+	return api.StepSecond, time.Time{}, possibleError
 }
 
 // DurationInterceptor sets the duration if absent, and formats it accordingly,
@@ -70,7 +70,7 @@ func DurationInterceptor(ctx *cli.Context) error {
 //   then: end := now + 30 units, where unit is the precision of `start`, (hours, minutes, etc.)
 // if --start is absent, --end is given,
 //   then: start := end - 30 units, where unit is the precision of `end`, (hours, minutes, etc.)
-func ParseDuration(start, end, timezone string) (startTime, endTime time.Time, step schema.Step, dt utils.DurationType) {
+func ParseDuration(start, end, timezone string) (startTime, endTime time.Time, step api.Step, dt utils.DurationType) {
 	logger.Log.Debugln("Start time:", start, "end time:", end, "timezone:", timezone)
 
 	now := time.Now()
@@ -86,7 +86,7 @@ func ParseDuration(start, end, timezone string) (startTime, endTime time.Time, s
 
 	// both are absent
 	if start == "" && end == "" {
-		return now.Add(-30 * time.Minute), now, schema.StepMinute, utils.BothAbsent
+		return now.Add(-30 * time.Minute), now, api.StepMinute, utils.BothAbsent
 	}
 
 	var err error
diff --git a/commands/interceptor/duration_test.go b/internal/commands/interceptor/duration_test.go
similarity index 94%
rename from commands/interceptor/duration_test.go
rename to internal/commands/interceptor/duration_test.go
index 10c8de5..b6be6b3 100644
--- a/commands/interceptor/duration_test.go
+++ b/internal/commands/interceptor/duration_test.go
@@ -18,11 +18,10 @@
 package interceptor
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"reflect"
 	"testing"
 	"time"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 func TestParseDuration(t *testing.T) {
@@ -37,7 +36,7 @@ func TestParseDuration(t *testing.T) {
 		args            args
 		wantedStartTime time.Time
 		wantedEndTime   time.Time
-		wantedStep      schema.Step
+		wantedStep      api.Step
 	}{
 		{
 			name: "Should set current time if start is absent",
@@ -47,7 +46,7 @@ func TestParseDuration(t *testing.T) {
 			},
 			wantedStartTime: now.Add(-30 * time.Minute),
 			wantedEndTime:   now,
-			wantedStep:      schema.StepMinute,
+			wantedStep:      api.StepMinute,
 		},
 		{
 			name: "Should set current time if end is absent",
@@ -57,7 +56,7 @@ func TestParseDuration(t *testing.T) {
 			},
 			wantedStartTime: now,
 			wantedEndTime:   now.Add(30 * time.Minute),
-			wantedStep:      schema.StepMinute,
+			wantedStep:      api.StepMinute,
 		},
 		{
 			name: "Should keep both if both are present",
@@ -67,7 +66,7 @@ func TestParseDuration(t *testing.T) {
 			},
 			wantedStartTime: now.Add(-10 * time.Minute),
 			wantedEndTime:   now.Add(10 * time.Minute),
-			wantedStep:      schema.StepMinute,
+			wantedStep:      api.StepMinute,
 		},
 		{
 			name: "Should set both if both are absent",
@@ -77,7 +76,7 @@ func TestParseDuration(t *testing.T) {
 			},
 			wantedStartTime: now.Add(-30 * time.Minute),
 			wantedEndTime:   now,
-			wantedStep:      schema.StepMinute,
+			wantedStep:      api.StepMinute,
 		},
 	}
 	for _, tt := range tests {
diff --git a/commands/interceptor/entity.go b/internal/commands/interceptor/entity.go
similarity index 81%
rename from commands/interceptor/entity.go
rename to internal/commands/interceptor/entity.go
index f9544ca..e88cfee 100644
--- a/commands/interceptor/entity.go
+++ b/internal/commands/interceptor/entity.go
@@ -18,12 +18,11 @@
 package interceptor
 
 import (
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/api"
 	"github.com/urfave/cli"
 )
 
-func ParseEntity(ctx *cli.Context) *schema.Entity {
+func ParseEntity(ctx *cli.Context) *api.Entity {
 	service := ctx.String("service")
 	normal := ctx.BoolT("isNormal")
 	instance := ctx.String("instance")
@@ -34,7 +33,7 @@ func ParseEntity(ctx *cli.Context) *schema.Entity {
 	destInstance := ctx.String("destServiceInstance")
 	destEndpoint := ctx.String("destEndpoint")
 
-	entity := &schema.Entity{
+	entity := &api.Entity{
 		ServiceName:             &service,
 		Normal:                  &normal,
 		ServiceInstanceName:     &instance,
@@ -50,21 +49,21 @@ func ParseEntity(ctx *cli.Context) *schema.Entity {
 }
 
 // parseScope defines the scope based on the input parameters.
-func parseScope(entity *schema.Entity) schema.Scope {
-	scope := schema.ScopeAll
+func parseScope(entity *api.Entity) api.Scope {
+	scope := api.ScopeAll
 
 	if *entity.DestEndpointName != "" {
-		scope = schema.ScopeEndpointRelation
+		scope = api.ScopeEndpointRelation
 	} else if *entity.DestServiceInstanceName != "" {
-		scope = schema.ScopeServiceInstanceRelation
+		scope = api.ScopeServiceInstanceRelation
 	} else if *entity.DestServiceName != "" {
-		scope = schema.ScopeServiceRelation
+		scope = api.ScopeServiceRelation
 	} else if *entity.EndpointName != "" {
-		scope = schema.ScopeEndpoint
+		scope = api.ScopeEndpoint
 	} else if *entity.ServiceInstanceName != "" {
-		scope = schema.ScopeServiceInstance
+		scope = api.ScopeServiceInstance
 	} else if *entity.ServiceName != "" {
-		scope = schema.ScopeService
+		scope = api.ScopeService
 	}
 
 	return scope
diff --git a/commands/interceptor/entity_test.go b/internal/commands/interceptor/entity_test.go
similarity index 85%
rename from commands/interceptor/entity_test.go
rename to internal/commands/interceptor/entity_test.go
index da3a03a..ab55aed 100644
--- a/commands/interceptor/entity_test.go
+++ b/internal/commands/interceptor/entity_test.go
@@ -18,9 +18,8 @@
 package interceptor
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"testing"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 func Test_parseScope(t *testing.T) {
@@ -28,12 +27,12 @@ func Test_parseScope(t *testing.T) {
 	nonEmpty := "test"
 	tests := []struct {
 		name string
-		args *schema.Entity
-		want schema.Scope
+		args *api.Entity
+		want api.Scope
 	}{
 		{
 			name: "all of names are empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &empty,
 				ServiceInstanceName:     &empty,
 				EndpointName:            &empty,
@@ -41,11 +40,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &empty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeAll,
+			want: api.ScopeAll,
 		},
 		{
 			name: "all of names are not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &nonEmpty,
 				EndpointName:            &nonEmpty,
@@ -53,11 +52,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &nonEmpty,
 				DestEndpointName:        &nonEmpty,
 			},
-			want: schema.ScopeEndpointRelation,
+			want: api.ScopeEndpointRelation,
 		},
 		{
 			name: "only serviceName is not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &empty,
 				EndpointName:            &empty,
@@ -65,11 +64,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &empty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeService,
+			want: api.ScopeService,
 		},
 		{
 			name: "instanceName is not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &nonEmpty,
 				EndpointName:            &empty,
@@ -77,11 +76,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &empty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeServiceInstance,
+			want: api.ScopeServiceInstance,
 		},
 		{
 			name: "endpointName is not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &empty,
 				EndpointName:            &nonEmpty,
@@ -89,11 +88,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &empty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeEndpoint,
+			want: api.ScopeEndpoint,
 		},
 		{
 			name: "destService is not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &empty,
 				EndpointName:            &empty,
@@ -101,11 +100,11 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &empty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeServiceRelation,
+			want: api.ScopeServiceRelation,
 		},
 		{
 			name: "destInstance is not empty",
-			args: &schema.Entity{
+			args: &api.Entity{
 				ServiceName:             &nonEmpty,
 				ServiceInstanceName:     &nonEmpty,
 				EndpointName:            &empty,
@@ -113,7 +112,7 @@ func Test_parseScope(t *testing.T) {
 				DestServiceInstanceName: &nonEmpty,
 				DestEndpointName:        &empty,
 			},
-			want: schema.ScopeServiceInstanceRelation,
+			want: api.ScopeServiceInstanceRelation,
 		},
 	}
 	for _, tt := range tests {
diff --git a/commands/interceptor/interceptor.go b/internal/commands/interceptor/interceptor.go
similarity index 100%
rename from commands/interceptor/interceptor.go
rename to internal/commands/interceptor/interceptor.go
diff --git a/commands/interceptor/timezone.go b/internal/commands/interceptor/timezone.go
similarity index 93%
rename from commands/interceptor/timezone.go
rename to internal/commands/interceptor/timezone.go
index c724276..f75c318 100644
--- a/commands/interceptor/timezone.go
+++ b/internal/commands/interceptor/timezone.go
@@ -22,8 +22,8 @@ import (
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 )
 
 // TimezoneInterceptor sets the server timezone if the server supports the API,
diff --git a/commands/metrics/aggregation/topn.go b/internal/commands/metrics/aggregation/topn.go
similarity index 80%
rename from commands/metrics/aggregation/topn.go
rename to internal/commands/metrics/aggregation/topn.go
index a3505cf..8c383c3 100644
--- a/commands/metrics/aggregation/topn.go
+++ b/internal/commands/metrics/aggregation/topn.go
@@ -19,16 +19,15 @@ package aggregation
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strconv"
 
-	"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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
 	"github.com/urfave/cli"
 )
 
@@ -44,9 +43,9 @@ var TopN = cli.Command{
 				Name:  "order",
 				Usage: "the `order` by which the top entities are sorted",
 				Value: &model.OrderEnumValue{
-					Enum:     schema.AllOrder,
-					Default:  schema.OrderDes,
-					Selected: schema.OrderDes,
+					Enum:     api.AllOrder,
+					Default:  api.OrderDes,
+					Selected: api.OrderDes,
 				},
 			},
 		},
@@ -75,13 +74,13 @@ var TopN = cli.Command{
 			topN = nn
 		}
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step,
 		}
 
-		metricsValues := metrics.SortMetrics(ctx, schema.TopNCondition{
+		metricsValues := metrics.SortMetrics(ctx, api.TopNCondition{
 			Name:          metricsName,
 			ParentService: &parentService,
 			Normal:        &normal,
diff --git a/commands/metrics/linear/linear-metrics.go b/internal/commands/metrics/linear/linear-metrics.go
similarity index 76%
rename from commands/metrics/linear/linear-metrics.go
rename to internal/commands/metrics/linear/linear-metrics.go
index 717943c..9f0a11f 100644
--- a/commands/metrics/linear/linear-metrics.go
+++ b/internal/commands/metrics/linear/linear-metrics.go
@@ -18,14 +18,14 @@
 package linear
 
 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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/utils"
+	"github.com/apache/skywalking-cli/api"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
 
 	"github.com/urfave/cli"
 )
@@ -50,13 +50,13 @@ var Single = cli.Command{
 		metricsName := ctx.String("name")
 		entity := interceptor.ParseEntity(ctx)
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
 		}
 
-		metricsValues := metrics.LinearIntValues(ctx, schema.MetricsCondition{
+		metricsValues := metrics.LinearIntValues(ctx, api.MetricsCondition{
 			Name:   metricsName,
 			Entity: entity,
 		}, duration)
diff --git a/commands/metrics/linear/multiple-linear-metrics.go b/internal/commands/metrics/linear/multiple-linear-metrics.go
similarity index 77%
rename from commands/metrics/linear/multiple-linear-metrics.go
rename to internal/commands/metrics/linear/multiple-linear-metrics.go
index d5165cf..41d9af5 100644
--- a/commands/metrics/linear/multiple-linear-metrics.go
+++ b/internal/commands/metrics/linear/multiple-linear-metrics.go
@@ -19,16 +19,16 @@ package linear
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
 
-	"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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/utils"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
 
 	"github.com/urfave/cli"
 )
@@ -62,17 +62,17 @@ var Multiple = cli.Command{
 		labels := ctx.String("labels")
 		entity := interceptor.ParseEntity(ctx)
 
-		if *entity.ServiceName == "" && entity.Scope != schema.ScopeAll {
+		if *entity.ServiceName == "" && entity.Scope != api.ScopeAll {
 			return fmt.Errorf("the name of service should be specified when metrics' scope is not `All`")
 		}
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
 		}
 
-		metricsValuesArray := metrics.MultipleLinearIntValues(ctx, schema.MetricsCondition{
+		metricsValuesArray := metrics.MultipleLinearIntValues(ctx, api.MetricsCondition{
 			Name:   metricsName,
 			Entity: interceptor.ParseEntity(ctx),
 		}, strings.Split(labels, ","), duration)
diff --git a/commands/metrics/list/list-metrics.go b/internal/commands/metrics/list/list-metrics.go
similarity index 88%
rename from commands/metrics/list/list-metrics.go
rename to internal/commands/metrics/list/list-metrics.go
index 8b22349..8694b34 100644
--- a/commands/metrics/list/list-metrics.go
+++ b/internal/commands/metrics/list/list-metrics.go
@@ -20,9 +20,9 @@ package list
 import (
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display"
-	"github.com/apache/skywalking-cli/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
 )
 
 var Command = cli.Command{
diff --git a/commands/metrics/metrics.go b/internal/commands/metrics/metrics.go
similarity index 75%
rename from commands/metrics/metrics.go
rename to internal/commands/metrics/metrics.go
index 9ba471b..78196d7 100644
--- a/commands/metrics/metrics.go
+++ b/internal/commands/metrics/metrics.go
@@ -20,13 +20,13 @@ package metrics
 import (
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/commands/metrics/aggregation"
-	"github.com/apache/skywalking-cli/commands/metrics/list"
+	"github.com/apache/skywalking-cli/internal/commands/metrics/aggregation"
+	"github.com/apache/skywalking-cli/internal/commands/metrics/list"
 
-	"github.com/apache/skywalking-cli/commands/metrics/thermodynamic"
+	"github.com/apache/skywalking-cli/internal/commands/metrics/thermodynamic"
 
-	"github.com/apache/skywalking-cli/commands/metrics/linear"
-	"github.com/apache/skywalking-cli/commands/metrics/single"
+	"github.com/apache/skywalking-cli/internal/commands/metrics/linear"
+	"github.com/apache/skywalking-cli/internal/commands/metrics/single"
 )
 
 var Command = cli.Command{
diff --git a/commands/metrics/single/single-metrics.go b/internal/commands/metrics/single/single-metrics.go
similarity index 77%
rename from commands/metrics/single/single-metrics.go
rename to internal/commands/metrics/single/single-metrics.go
index 05469ec..9a1d826 100644
--- a/commands/metrics/single/single-metrics.go
+++ b/internal/commands/metrics/single/single-metrics.go
@@ -18,14 +18,13 @@
 package single
 
 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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/api"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
 	"github.com/urfave/cli"
 )
 
@@ -49,13 +48,13 @@ var Command = cli.Command{
 		metricsName := ctx.String("name")
 		entity := interceptor.ParseEntity(ctx)
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
 		}
 
-		metricsValue := metrics.IntValues(ctx, schema.MetricsCondition{
+		metricsValue := metrics.IntValues(ctx, api.MetricsCondition{
 			Name:   metricsName,
 			Entity: entity,
 		}, duration)
diff --git a/commands/metrics/thermodynamic/thermodynamic.go b/internal/commands/metrics/thermodynamic/thermodynamic.go
similarity index 78%
rename from commands/metrics/thermodynamic/thermodynamic.go
rename to internal/commands/metrics/thermodynamic/thermodynamic.go
index 63d3f94..6d1f5d9 100644
--- a/commands/metrics/thermodynamic/thermodynamic.go
+++ b/internal/commands/metrics/thermodynamic/thermodynamic.go
@@ -18,14 +18,13 @@
 package thermodynamic
 
 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/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/api"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
 	"github.com/urfave/cli"
 )
 
@@ -50,13 +49,13 @@ var Command = cli.Command{
 		metricsName := ctx.String("name")
 		entity := interceptor.ParseEntity(ctx)
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
 		}
 
-		metricsValues := metrics.Thermodynamic(ctx, schema.MetricsCondition{
+		metricsValues := metrics.Thermodynamic(ctx, api.MetricsCondition{
 			Name:   metricsName,
 			Entity: entity,
 		}, duration)
diff --git a/commands/service/list.go b/internal/commands/service/list.go
similarity index 77%
rename from commands/service/list.go
rename to internal/commands/service/list.go
index 14e2830..6b3983f 100644
--- a/commands/service/list.go
+++ b/internal/commands/service/list.go
@@ -18,17 +18,17 @@
 package service
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/graphql/metadata"
+	"github.com/apache/skywalking-cli/pkg/graphql/metadata"
 
-	"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/schema"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
 )
 
 var ListCommand = cli.Command{
@@ -47,17 +47,17 @@ var ListCommand = cli.Command{
 		start := ctx.String("start")
 		step := ctx.Generic("step")
 
-		var services []schema.Service
+		var services []api.Service
 
 		if args := ctx.Args(); len(args) == 0 {
-			services = metadata.AllServices(ctx, schema.Duration{
+			services = metadata.AllServices(ctx, api.Duration{
 				Start: start,
 				End:   end,
 				Step:  step.(*model.StepEnumValue).Selected,
 			})
 		} else {
 			service, _ := metadata.SearchService(ctx, args.First())
-			services = []schema.Service{service}
+			services = []api.Service{service}
 		}
 
 		return display.Display(ctx, &displayable.Displayable{Data: services})
diff --git a/commands/service/service.go b/internal/commands/service/service.go
similarity index 100%
rename from commands/service/service.go
rename to internal/commands/service/service.go
diff --git a/commands/trace/list.go b/internal/commands/trace/list.go
similarity index 80%
rename from commands/trace/list.go
rename to internal/commands/trace/list.go
index 0d875c7..f472160 100644
--- a/commands/trace/list.go
+++ b/internal/commands/trace/list.go
@@ -18,20 +18,20 @@
 package trace
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"strings"
 
-	"github.com/apache/skywalking-cli/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/commands/interceptor"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/commands/flags"
-	"github.com/apache/skywalking-cli/commands/model"
-	"github.com/apache/skywalking-cli/display"
+	"github.com/apache/skywalking-cli/internal/flags"
+	"github.com/apache/skywalking-cli/internal/model"
+	"github.com/apache/skywalking-cli/pkg/display"
 
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/trace"
+	"github.com/apache/skywalking-cli/pkg/graphql/trace"
 )
 
 const DefaultPageSize = 15
@@ -75,7 +75,7 @@ var ListCommand = cli.Command{
 		end := ctx.String("end")
 		step := ctx.Generic("step")
 
-		duration := schema.Duration{
+		duration := api.Duration{
 			Start: start,
 			End:   end,
 			Step:  step.(*model.StepEnumValue).Selected,
@@ -84,24 +84,24 @@ var ListCommand = cli.Command{
 		serviceInstanceID := ctx.String("service-instance-id")
 		traceID := ctx.String("trace-id")
 		tagStr := ctx.String("tags")
-		var tags []*schema.SpanTag = nil
+		var tags []*api.SpanTag = nil
 		if tagStr != "" {
 			tagArr := strings.Split(tagStr, ",")
 			for _, tag := range tagArr {
 				kv := strings.Split(tag, "=")
-				tags = append(tags, &schema.SpanTag{Key: kv[0], Value: &kv[1]})
+				tags = append(tags, &api.SpanTag{Key: kv[0], Value: &kv[1]})
 			}
 		}
 		pageNum := 1
 		needTotal := true
 
-		paging := schema.Pagination{
+		paging := api.Pagination{
 			PageNum:   &pageNum,
 			PageSize:  DefaultPageSize,
 			NeedTotal: &needTotal,
 		}
 
-		condition := &schema.TraceQueryCondition{
+		condition := &api.TraceQueryCondition{
 			ServiceID:         &serviceID,
 			ServiceInstanceID: &serviceInstanceID,
 			TraceID:           &traceID,
@@ -110,8 +110,8 @@ var ListCommand = cli.Command{
 			QueryDuration:     &duration,
 			MinTraceDuration:  nil,
 			MaxTraceDuration:  nil,
-			TraceState:        schema.TraceStateAll,
-			QueryOrder:        schema.QueryOrderByDuration,
+			TraceState:        api.TraceStateAll,
+			QueryOrder:        api.QueryOrderByDuration,
 			Tags:              tags,
 			Paging:            &paging,
 		}
diff --git a/commands/trace/trace.go b/internal/commands/trace/trace.go
similarity index 89%
rename from commands/trace/trace.go
rename to internal/commands/trace/trace.go
index a6dd408..32f4555 100644
--- a/commands/trace/trace.go
+++ b/internal/commands/trace/trace.go
@@ -22,9 +22,9 @@ import (
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display"
-	"github.com/apache/skywalking-cli/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/trace"
+	"github.com/apache/skywalking-cli/pkg/display"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/trace"
 )
 
 var Command = cli.Command{
diff --git a/commands/flags/duration.go b/internal/flags/duration.go
similarity index 83%
rename from commands/flags/duration.go
rename to internal/flags/duration.go
index 152ba0e..5e6e57c 100644
--- a/commands/flags/duration.go
+++ b/internal/flags/duration.go
@@ -18,13 +18,13 @@
 package flags
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/commands/model"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/internal/model"
 )
 
-// DurationFlags are common flags that involves a duration, composed
+// DurationFlags are healthcheck flags that involves a duration, composed
 // by a start time, an end time, and a step, which is commonly used
 // in most of the commands
 var DurationFlags = []cli.Flag{
@@ -40,9 +40,9 @@ var DurationFlags = []cli.Flag{
 		Name:   "step",
 		Hidden: true,
 		Value: &model.StepEnumValue{
-			Enum:     schema.AllStep,
-			Default:  schema.StepMinute,
-			Selected: schema.StepMinute,
+			Enum:     api.AllStep,
+			Default:  api.StepMinute,
+			Selected: api.StepMinute,
 		},
 	},
 	cli.StringFlag{
diff --git a/commands/flags/entity.go b/internal/flags/entity.go
similarity index 100%
rename from commands/flags/entity.go
rename to internal/flags/entity.go
diff --git a/commands/flags/flags.go b/internal/flags/flags.go
similarity index 100%
rename from commands/flags/flags.go
rename to internal/flags/flags.go
diff --git a/commands/flags/instance.go b/internal/flags/instance.go
similarity index 100%
rename from commands/flags/instance.go
rename to internal/flags/instance.go
diff --git a/commands/flags/metrics.go b/internal/flags/metrics.go
similarity index 87%
rename from commands/flags/metrics.go
rename to internal/flags/metrics.go
index cda10a3..cb653ac 100644
--- a/commands/flags/metrics.go
+++ b/internal/flags/metrics.go
@@ -18,9 +18,8 @@
 package flags
 
 import (
-	"github.com/apache/skywalking-cli/commands/model"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/api"
+	"github.com/apache/skywalking-cli/internal/model"
 	"github.com/urfave/cli"
 )
 
@@ -46,9 +45,9 @@ var MetricsFlags = []cli.Flag{
 		Name:  "scope",
 		Usage: "the scope of the metrics entity",
 		Value: &model.ScopeEnumValue{
-			Enum:     schema.AllScope,
-			Default:  schema.ScopeService,
-			Selected: schema.ScopeService,
+			Enum:     api.AllScope,
+			Default:  api.ScopeService,
+			Selected: api.ScopeService,
 		},
 	},
 }
diff --git a/commands/flags/search.go b/internal/flags/search.go
similarity index 100%
rename from commands/flags/search.go
rename to internal/flags/search.go
diff --git a/logger/log.go b/internal/logger/log.go
similarity index 100%
rename from logger/log.go
rename to internal/logger/log.go
diff --git a/commands/model/order.go b/internal/model/order.go
similarity index 86%
rename from commands/model/order.go
rename to internal/model/order.go
index 77a20ba..cb10ac7 100644
--- a/commands/model/order.go
+++ b/internal/model/order.go
@@ -19,16 +19,15 @@ package model
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 // OrderEnumValue defines the values domain of --order option
 type OrderEnumValue struct {
-	Enum     []schema.Order
-	Default  schema.Order
-	Selected schema.Order
+	Enum     []api.Order
+	Default  api.Order
+	Selected api.Order
 }
 
 // Set the --order value, from raw string to OrderEnumValue
@@ -39,8 +38,8 @@ func (s *OrderEnumValue) Set(value string) error {
 			return nil
 		}
 	}
-	orders := make([]string, len(schema.AllOrder))
-	for i, order := range schema.AllOrder {
+	orders := make([]string, len(api.AllOrder))
+	for i, order := range api.AllOrder {
 		orders[i] = order.String()
 	}
 	return fmt.Errorf("allowed orders are %s", strings.Join(orders, ", "))
diff --git a/commands/model/scope.go b/internal/model/scope.go
similarity index 86%
rename from commands/model/scope.go
rename to internal/model/scope.go
index 7adc5e2..bdf8f1c 100644
--- a/commands/model/scope.go
+++ b/internal/model/scope.go
@@ -19,16 +19,15 @@ package model
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 // ScopeEnumValue defines the values domain of --scope option
 type ScopeEnumValue struct {
-	Enum     []schema.Scope
-	Default  schema.Scope
-	Selected schema.Scope
+	Enum     []api.Scope
+	Default  api.Scope
+	Selected api.Scope
 }
 
 // Set the --scope value, from raw string to ScopeEnumValue
@@ -39,8 +38,8 @@ func (s *ScopeEnumValue) Set(value string) error {
 			return nil
 		}
 	}
-	scopes := make([]string, len(schema.AllScope))
-	for i, scope := range schema.AllScope {
+	scopes := make([]string, len(api.AllScope))
+	for i, scope := range api.AllScope {
 		scopes[i] = scope.String()
 	}
 	return fmt.Errorf("allowed scopes are %s", strings.Join(scopes, ", "))
diff --git a/commands/model/step.go b/internal/model/step.go
similarity index 87%
rename from commands/model/step.go
rename to internal/model/step.go
index 8f363be..9fc8e08 100644
--- a/commands/model/step.go
+++ b/internal/model/step.go
@@ -19,16 +19,15 @@ package model
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 // StepEnumValue defines the values domain of --step option
 type StepEnumValue struct {
-	Enum     []schema.Step
-	Default  schema.Step
-	Selected schema.Step
+	Enum     []api.Step
+	Default  api.Step
+	Selected api.Step
 }
 
 // Set the --step value, from raw string to StepEnumValue
@@ -39,8 +38,8 @@ func (s *StepEnumValue) Set(value string) error {
 			return nil
 		}
 	}
-	steps := make([]string, len(schema.AllStep))
-	for i, step := range schema.AllStep {
+	steps := make([]string, len(api.AllStep))
+	for i, step := range api.AllStep {
 		steps[i] = step.String()
 	}
 	return fmt.Errorf("allowed steps are %s", strings.Join(steps, ", "))
diff --git a/display/display.go b/pkg/display/display.go
similarity index 84%
rename from display/display.go
rename to pkg/display/display.go
index 9e7d132..9dd17b8 100644
--- a/display/display.go
+++ b/pkg/display/display.go
@@ -21,15 +21,15 @@ import (
 	"fmt"
 	"strings"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/display/graph"
+	"github.com/apache/skywalking-cli/pkg/display/graph"
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display/json"
-	"github.com/apache/skywalking-cli/display/table"
-	"github.com/apache/skywalking-cli/display/yaml"
+	"github.com/apache/skywalking-cli/pkg/display/json"
+	"github.com/apache/skywalking-cli/pkg/display/table"
+	"github.com/apache/skywalking-cli/pkg/display/yaml"
 )
 
 const (
diff --git a/display/displayable/displayable.go b/pkg/display/displayable/displayable.go
similarity index 91%
rename from display/displayable/displayable.go
rename to pkg/display/displayable/displayable.go
index d4678f4..eff05d0 100644
--- a/display/displayable/displayable.go
+++ b/pkg/display/displayable/displayable.go
@@ -17,11 +17,13 @@
 
 package displayable
 
-import "github.com/apache/skywalking-cli/graphql/schema"
+import (
+	"github.com/apache/skywalking-cli/api"
+)
 
 type Displayable struct {
 	Data      interface{}
 	Condition interface{}
-	Duration  schema.Duration
+	Duration  api.Duration
 	Title     string
 }
diff --git a/display/graph/dashboard/global.go b/pkg/display/graph/dashboard/global.go
similarity index 93%
rename from display/graph/dashboard/global.go
rename to pkg/display/graph/dashboard/global.go
index 0865a2e..74d1ab9 100644
--- a/display/graph/dashboard/global.go
+++ b/pkg/display/graph/dashboard/global.go
@@ -20,14 +20,14 @@ package dashboard
 import (
 	"context"
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"math"
 	"strings"
 	"time"
 
-	"github.com/apache/skywalking-cli/commands/interceptor"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/utils"
-	lib "github.com/apache/skywalking-cli/lib/heatmap"
+	"github.com/apache/skywalking-cli/internal/commands/interceptor"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
+	lib "github.com/apache/skywalking-cli/pkg/heatmap"
 
 	"github.com/mattn/go-runewidth"
 	"github.com/mum4k/termdash"
@@ -37,10 +37,10 @@ import (
 	"github.com/mum4k/termdash/terminal/terminalapi"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/display/graph/gauge"
-	"github.com/apache/skywalking-cli/display/graph/heatmap"
-	"github.com/apache/skywalking-cli/display/graph/linear"
-	"github.com/apache/skywalking-cli/graphql/dashboard"
+	"github.com/apache/skywalking-cli/pkg/display/graph/gauge"
+	"github.com/apache/skywalking-cli/pkg/display/graph/heatmap"
+	"github.com/apache/skywalking-cli/pkg/display/graph/linear"
+	"github.com/apache/skywalking-cli/pkg/graphql/dashboard"
 
 	"github.com/mum4k/termdash/cell"
 	"github.com/mum4k/termdash/container"
@@ -353,10 +353,10 @@ func refresh(con context.Context, ctx *cli.Context, interval time.Duration) {
 // updateDuration will check if the duration changes after adding the interval.
 // If the duration doesn't change, an error will be returned, and the dashboard will not refresh.
 // Otherwise, a new duration will be returned, which is used to get the latest global data.
-func updateDuration(interval time.Duration) (schema.Duration, error) {
+func updateDuration(interval time.Duration) (api.Duration, error) {
 	step, _, err := interceptor.TryParseTime(initStartStr)
 	if err != nil {
-		return schema.Duration{}, err
+		return api.Duration{}, err
 	}
 
 	curStartTime = curStartTime.Add(interval)
@@ -366,12 +366,12 @@ func updateDuration(interval time.Duration) (schema.Duration, error) {
 	curEndStr := curEndTime.Format(utils.StepFormats[step])
 
 	if curStartStr == initStartStr && curEndStr == initEndStr {
-		return schema.Duration{}, fmt.Errorf("the duration does not update")
+		return api.Duration{}, fmt.Errorf("the duration does not update")
 	}
 
 	initStartStr = curStartStr
 	initEndStr = curEndStr
-	return schema.Duration{
+	return api.Duration{
 		Start: curStartStr,
 		End:   curEndStr,
 		Step:  step,
diff --git a/display/graph/gauge/gauge.go b/pkg/display/graph/gauge/gauge.go
similarity index 93%
rename from display/graph/gauge/gauge.go
rename to pkg/display/graph/gauge/gauge.go
index a99234d..510732a 100644
--- a/display/graph/gauge/gauge.go
+++ b/pkg/display/graph/gauge/gauge.go
@@ -20,15 +20,15 @@ package gauge
 import (
 	"context"
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"math"
 	"strconv"
 	"strings"
 
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/dashboard"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/util"
+	"github.com/apache/skywalking-cli/pkg/graphql/dashboard"
+	"github.com/apache/skywalking-cli/pkg/util"
 
 	"github.com/mum4k/termdash"
 	"github.com/mum4k/termdash/cell"
@@ -50,7 +50,7 @@ type MetricColumn struct {
 }
 
 // Update updates the MetricColumn's `Absolute` and `BorderTitle`.
-func (mc *MetricColumn) Update(data []*schema.SelectedRecord) error {
+func (mc *MetricColumn) Update(data []*api.SelectedRecord) error {
 	for i, item := range data {
 		// The number of `SelectedRecord` data may exceed the number of gauges in a `MetricColumn`.
 		if i >= len(mc.gauges) {
@@ -79,7 +79,7 @@ func (mc *MetricColumn) Update(data []*schema.SelectedRecord) error {
 	return nil
 }
 
-func NewMetricColumn(column []*schema.SelectedRecord, config *dashboard.MetricTemplate) (*MetricColumn, error) {
+func NewMetricColumn(column []*api.SelectedRecord, config *dashboard.MetricTemplate) (*MetricColumn, error) {
 	var ret MetricColumn
 
 	t, err := text.New()
@@ -193,7 +193,7 @@ func layout(columns []grid.Element) ([]container.Option, error) {
 	return gridOpts, nil
 }
 
-func Display(ctx *cli.Context, metrics [][]*schema.SelectedRecord) error {
+func Display(ctx *cli.Context, metrics [][]*api.SelectedRecord) error {
 	t, err := termbox.New()
 	if err != nil {
 		return err
@@ -251,7 +251,7 @@ func Display(ctx *cli.Context, metrics [][]*schema.SelectedRecord) error {
 }
 
 // findMaxValue finds the maximum value in the array of `schema.SelectedRecord`.
-func findMaxValue(column []*schema.SelectedRecord) (int, error) {
+func findMaxValue(column []*api.SelectedRecord) (int, error) {
 	var ret int
 
 	for _, c := range column {
diff --git a/display/graph/graph.go b/pkg/display/graph/graph.go
similarity index 79%
rename from display/graph/graph.go
rename to pkg/display/graph/graph.go
index 22aad02..c050cfd 100644
--- a/display/graph/graph.go
+++ b/pkg/display/graph/graph.go
@@ -19,28 +19,28 @@ package graph
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"reflect"
 	"strings"
 
 	"github.com/urfave/cli"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
-	db "github.com/apache/skywalking-cli/display/graph/dashboard"
-	"github.com/apache/skywalking-cli/display/graph/gauge"
-	"github.com/apache/skywalking-cli/display/graph/heatmap"
-	"github.com/apache/skywalking-cli/display/graph/linear"
-	"github.com/apache/skywalking-cli/display/graph/tree"
-	"github.com/apache/skywalking-cli/graphql/dashboard"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
+	db "github.com/apache/skywalking-cli/pkg/display/graph/dashboard"
+	"github.com/apache/skywalking-cli/pkg/display/graph/gauge"
+	"github.com/apache/skywalking-cli/pkg/display/graph/heatmap"
+	"github.com/apache/skywalking-cli/pkg/display/graph/linear"
+	"github.com/apache/skywalking-cli/pkg/display/graph/tree"
+	"github.com/apache/skywalking-cli/pkg/graphql/dashboard"
 )
 
 type (
-	Thermodynamic      = schema.HeatMap
+	Thermodynamic      = api.HeatMap
 	LinearMetrics      = map[string]float64
 	MultiLinearMetrics = []LinearMetrics
-	Trace              = schema.Trace
-	TraceBrief         = schema.TraceBrief
-	GlobalMetrics      = [][]*schema.SelectedRecord
+	Trace              = api.Trace
+	TraceBrief         = api.TraceBrief
+	GlobalMetrics      = [][]*api.SelectedRecord
 	GlobalData         = dashboard.GlobalData
 )
 
diff --git a/display/graph/heatmap/heatmap.go b/pkg/display/graph/heatmap/heatmap.go
similarity index 86%
rename from display/graph/heatmap/heatmap.go
rename to pkg/display/graph/heatmap/heatmap.go
index 12f64d4..44ab961 100644
--- a/display/graph/heatmap/heatmap.go
+++ b/pkg/display/graph/heatmap/heatmap.go
@@ -20,6 +20,7 @@ package heatmap
 import (
 	"context"
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
 
 	"github.com/mum4k/termdash"
@@ -30,15 +31,14 @@ import (
 	"github.com/mum4k/termdash/terminal/terminalapi"
 	"github.com/mum4k/termdash/widgetapi"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/utils"
-	"github.com/apache/skywalking-cli/lib/heatmap"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
+	"github.com/apache/skywalking-cli/pkg/heatmap"
 )
 
 const rootID = "root"
 
-func NewHeatMapWidget(data schema.HeatMap) (hp *heatmap.HeatMap, err error) {
+func NewHeatMapWidget(data api.HeatMap) (hp *heatmap.HeatMap, err error) {
 	hp, err = heatmap.NewHeatMap()
 	if err != nil {
 		return hp, err
@@ -48,14 +48,14 @@ func NewHeatMapWidget(data schema.HeatMap) (hp *heatmap.HeatMap, err error) {
 	return
 }
 
-func SetData(hp *heatmap.HeatMap, data schema.HeatMap) {
+func SetData(hp *heatmap.HeatMap, data api.HeatMap) {
 	hpColumns, yLabels := processData(data)
 	hp.SetColumns(hpColumns)
 	hp.SetYLabels(yLabels)
 }
 
 // processData converts data into hpColumns and yValues for the heat map.
-func processData(data schema.HeatMap) (hpColumns map[string][]int64, yLabels []string) {
+func processData(data api.HeatMap) (hpColumns map[string][]int64, yLabels []string) {
 	hpColumns = utils.HeatMapToMap(&data)
 	yLabels = utils.BucketsToStrings(data.Buckets)
 	return
@@ -97,7 +97,7 @@ func Display(displayable *d.Displayable) error {
 		return err
 	}
 
-	data := displayable.Data.(schema.HeatMap)
+	data := displayable.Data.(api.HeatMap)
 	hp, err := NewHeatMapWidget(data)
 	if err != nil {
 		return err
diff --git a/display/graph/linear/linear.go b/pkg/display/graph/linear/linear.go
similarity index 100%
rename from display/graph/linear/linear.go
rename to pkg/display/graph/linear/linear.go
diff --git a/display/graph/tree/adapter.go b/pkg/display/graph/tree/adapter.go
similarity index 89%
rename from display/graph/tree/adapter.go
rename to pkg/display/graph/tree/adapter.go
index 895b5fd..bceae0b 100644
--- a/display/graph/tree/adapter.go
+++ b/pkg/display/graph/tree/adapter.go
@@ -19,13 +19,13 @@ package tree
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
 
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/util"
+	"github.com/apache/skywalking-cli/pkg/util"
 )
 
-func Adapt(trace schema.Trace) (roots []*Node, serviceNames []string) {
+func Adapt(trace api.Trace) (roots []*Node, serviceNames []string) {
 	all := make(map[string]*Node)
 	set := make(map[string]bool)
 	var traceID string
@@ -73,7 +73,7 @@ func Adapt(trace schema.Trace) (roots []*Node, serviceNames []string) {
 	return roots, serviceNames
 }
 
-func buildTree(all map[string]*Node, seen map[string]bool, trace schema.Trace) {
+func buildTree(all map[string]*Node, seen map[string]bool, trace api.Trace) {
 	for len(seen) < len(trace.Spans) {
 		for _, span := range trace.Spans {
 			if seen[id(span)] {
@@ -96,13 +96,13 @@ func buildTree(all map[string]*Node, seen map[string]bool, trace schema.Trace) {
 	}
 }
 
-func virtualSpan(spanID int, ref schema.Ref) *schema.Span {
+func virtualSpan(spanID int, ref api.Ref) *api.Span {
 	endpointName := fmt.Sprintf("VNode: %s", ref.ParentSegmentID)
 	component := fmt.Sprintf("VirtualNode: #%d", spanID)
 	peer := "No Peer"
 	fail := true
 	layer := "Broken"
-	span := schema.Span{
+	span := api.Span{
 		TraceID:      ref.TraceID,
 		SegmentID:    ref.ParentSegmentID,
 		SpanID:       spanID,
@@ -120,27 +120,27 @@ func virtualSpan(spanID int, ref schema.Ref) *schema.Span {
 	return &span
 }
 
-func isRoot(span *schema.Span) bool {
+func isRoot(span *api.Span) bool {
 	return span.SpanID == 0 && span.ParentSpanID == -1 && len(span.Refs) == 0
 }
 
-func id(span *schema.Span) string {
+func id(span *api.Span) string {
 	return fmt.Sprintf("%s:%s:%d", span.TraceID, span.SegmentID, span.SpanID)
 }
 
-func pid(span *schema.Span) string {
+func pid(span *api.Span) string {
 	return fmt.Sprintf("%s:%s:%d", span.TraceID, span.SegmentID, span.ParentSpanID)
 }
 
-func id0(ref *schema.Ref) string {
+func id0(ref *api.Ref) string {
 	return fmt.Sprintf("%s:%s:%d", ref.TraceID, ref.ParentSegmentID, ref.ParentSpanID)
 }
 
-func id1(ref *schema.Ref) string {
+func id1(ref *api.Ref) string {
 	return fmt.Sprintf("%s:%s:%d", ref.TraceID, ref.ParentSegmentID, ref.ParentSpanID-1)
 }
 
-func node(span *schema.Span) *Node {
+func node(span *api.Span) *Node {
 	return &Node{
 		Children: []*Node{},
 		Value:    util.Stringify{Str: value(span)},
@@ -148,7 +148,7 @@ func node(span *schema.Span) *Node {
 	}
 }
 
-func value(span *schema.Span) string {
+func value(span *api.Span) string {
 	if *span.IsError {
 		return fmt.Sprintf(
 			"[|%s| %s [%s/%s]](mod:bold,fg:white,bg:red)",
@@ -161,7 +161,7 @@ func value(span *schema.Span) string {
 	)
 }
 
-func detail(span *schema.Span) string {
+func detail(span *api.Span) string {
 	var lines []string
 
 	lines = append(lines,
diff --git a/display/graph/tree/list.go b/pkg/display/graph/tree/list.go
similarity index 90%
rename from display/graph/tree/list.go
rename to pkg/display/graph/tree/list.go
index 8fa53bc..3b73428 100644
--- a/display/graph/tree/list.go
+++ b/pkg/display/graph/tree/list.go
@@ -19,17 +19,17 @@ package tree
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 	"strings"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/trace"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
+	"github.com/apache/skywalking-cli/pkg/graphql/trace"
 
 	ui "github.com/gizak/termui/v3"
 	"github.com/gizak/termui/v3/widgets"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 const DefaultPageSize = 15
@@ -38,8 +38,8 @@ const Detail = " Detail "
 const Quit = "<C-c>"
 
 func DisplayList(ctx *cli.Context, displayable *d.Displayable) error {
-	data := displayable.Data.(schema.TraceBrief)
-	condition := displayable.Condition.(*schema.TraceQueryCondition)
+	data := displayable.Data.(api.TraceBrief)
+	condition := displayable.Condition.(*api.TraceQueryCondition)
 	if err := ui.Init(); err != nil {
 		logger.Log.Fatalf("failed to initialize termui: %v", err)
 	}
@@ -89,8 +89,8 @@ func DisplayList(ctx *cli.Context, displayable *d.Displayable) error {
 	return nil
 }
 
-func draw(list *widgets.List, tree *widgets.Tree, detail, help *widgets.Paragraph, data schema.TraceBrief,
-	ctx *cli.Context, condition *schema.TraceQueryCondition) {
+func draw(list *widgets.List, tree *widgets.Tree, detail, help *widgets.Paragraph, data api.TraceBrief,
+	ctx *cli.Context, condition *api.TraceQueryCondition) {
 	x, y := ui.TerminalDimensions()
 
 	if data.Total != 0 {
@@ -124,8 +124,8 @@ func totalPages(total int) int {
 	return total/DefaultPageSize + 1
 }
 
-func listenTracesKeyboard(list *widgets.List, tree *widgets.Tree, data schema.TraceBrief, ctx *cli.Context,
-	detail, help *widgets.Paragraph, condition *schema.TraceQueryCondition) {
+func listenTracesKeyboard(list *widgets.List, tree *widgets.Tree, data api.TraceBrief, ctx *cli.Context,
+	detail, help *widgets.Paragraph, condition *api.TraceQueryCondition) {
 	uiEvents := ui.PollEvents()
 	listActive := true
 	for {
@@ -214,7 +214,7 @@ func getNodeData(ctx *cli.Context, traceID string) (nodes []*widgets.TreeNode, s
 	return nodes, serviceNames
 }
 
-func rows(data schema.TraceBrief, subLen int) []string {
+func rows(data api.TraceBrief, subLen int) []string {
 	var rows []string
 
 	for _, t := range data.Traces {
diff --git a/display/graph/tree/tree.go b/pkg/display/graph/tree/tree.go
similarity index 99%
rename from display/graph/tree/tree.go
rename to pkg/display/graph/tree/tree.go
index ee0e168..916c94c 100644
--- a/display/graph/tree/tree.go
+++ b/pkg/display/graph/tree/tree.go
@@ -24,7 +24,7 @@ import (
 	ui "github.com/gizak/termui/v3"
 	"github.com/gizak/termui/v3/widgets"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 type Node struct {
diff --git a/display/json/json.go b/pkg/display/json/json.go
similarity index 94%
rename from display/json/json.go
rename to pkg/display/json/json.go
index 12a506f..e3f2cf8 100644
--- a/display/json/json.go
+++ b/pkg/display/json/json.go
@@ -21,7 +21,7 @@ import (
 	"encoding/json"
 	"fmt"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
 )
 
 func Display(displayable *d.Displayable) error {
diff --git a/display/json/json_test.go b/pkg/display/json/json_test.go
similarity index 79%
rename from display/json/json_test.go
rename to pkg/display/json/json_test.go
index 9d8ead4..fca6ec3 100644
--- a/display/json/json_test.go
+++ b/pkg/display/json/json_test.go
@@ -18,26 +18,25 @@
 package json
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"testing"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
 )
 
 func TestJsonDisplay(t *testing.T) {
-	var result []schema.Service
+	var result []api.Service
 	display(t, result)
-	result = make([]schema.Service, 0)
+	result = make([]api.Service, 0)
 	display(t, result)
-	result = append(result, schema.Service{
+	result = append(result, api.Service{
 		ID:   "1",
 		Name: "json",
 	})
 	display(t, result)
 }
 
-func display(t *testing.T, result []schema.Service) {
+func display(t *testing.T, result []api.Service) {
 	if err := Display(&d.Displayable{Data: result}); err != nil {
 		t.Error(err)
 	}
diff --git a/display/table/table.go b/pkg/display/table/table.go
similarity index 93%
rename from display/table/table.go
rename to pkg/display/table/table.go
index 8e2227d..0c82376 100644
--- a/display/table/table.go
+++ b/pkg/display/table/table.go
@@ -21,9 +21,9 @@ import (
 	"encoding/json"
 	"os"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 
 	"github.com/olekukonko/tablewriter"
 )
diff --git a/display/table/table_test.go b/pkg/display/table/table_test.go
similarity index 80%
rename from display/table/table_test.go
rename to pkg/display/table/table_test.go
index ec2b265..ce7728b 100644
--- a/display/table/table_test.go
+++ b/pkg/display/table/table_test.go
@@ -18,26 +18,25 @@
 package table
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"testing"
 
-	"github.com/apache/skywalking-cli/display/displayable"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 )
 
 func TestTableDisplay(t *testing.T) {
-	var result []schema.Service
+	var result []api.Service
 	display(t, result)
-	result = make([]schema.Service, 0)
+	result = make([]api.Service, 0)
 	display(t, result)
-	result = append(result, schema.Service{
+	result = append(result, api.Service{
 		ID:   "1",
 		Name: "table",
 	})
 	display(t, result)
 }
 
-func display(t *testing.T, result []schema.Service) {
+func display(t *testing.T, result []api.Service) {
 	if err := Display(&displayable.Displayable{Data: result}); err != nil {
 		t.Error(err)
 	}
diff --git a/display/yaml/yaml.go b/pkg/display/yaml/yaml.go
similarity index 94%
rename from display/yaml/yaml.go
rename to pkg/display/yaml/yaml.go
index 3f3c98b..4cfe9af 100644
--- a/display/yaml/yaml.go
+++ b/pkg/display/yaml/yaml.go
@@ -20,7 +20,7 @@ package yaml
 import (
 	"fmt"
 
-	d "github.com/apache/skywalking-cli/display/displayable"
+	d "github.com/apache/skywalking-cli/pkg/display/displayable"
 
 	"gopkg.in/yaml.v2"
 )
diff --git a/display/yaml/yaml_test.go b/pkg/display/yaml/yaml_test.go
similarity index 80%
rename from display/yaml/yaml_test.go
rename to pkg/display/yaml/yaml_test.go
index aaada3a..e7d1fcb 100644
--- a/display/yaml/yaml_test.go
+++ b/pkg/display/yaml/yaml_test.go
@@ -18,26 +18,25 @@
 package yaml
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"testing"
 
-	"github.com/apache/skywalking-cli/display/displayable"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/pkg/display/displayable"
 )
 
 func TestYamlDisplay(t *testing.T) {
-	var result []schema.Service
+	var result []api.Service
 	display(t, result)
-	result = make([]schema.Service, 0)
+	result = make([]api.Service, 0)
 	display(t, result)
-	result = append(result, schema.Service{
+	result = append(result, api.Service{
 		ID:   "1",
 		Name: "yaml",
 	})
 	display(t, result)
 }
 
-func display(t *testing.T, result []schema.Service) {
+func display(t *testing.T, result []api.Service) {
 	if err := Display(&displayable.Displayable{Data: result}); err != nil {
 		t.Error(err)
 	}
diff --git a/graphql/client/client.go b/pkg/graphql/client/client.go
similarity index 97%
rename from graphql/client/client.go
rename to pkg/graphql/client/client.go
index ebadd9c..846f662 100644
--- a/graphql/client/client.go
+++ b/pkg/graphql/client/client.go
@@ -24,7 +24,7 @@ import (
 	"github.com/machinebox/graphql"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 func newClient(cliCtx *cli.Context) (client *graphql.Client) {
diff --git a/graphql/common/common.go b/pkg/graphql/common/common.go
similarity index 79%
rename from graphql/common/common.go
rename to pkg/graphql/common/common.go
index 1f1c417..651d81b 100644
--- a/graphql/common/common.go
+++ b/pkg/graphql/common/common.go
@@ -18,19 +18,19 @@
 package common
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/machinebox/graphql"
 	"github.com/urfave/cli"
 
 	"github.com/apache/skywalking-cli/assets"
-	"github.com/apache/skywalking-cli/graphql/client"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/pkg/graphql/client"
 )
 
 // CheckHealth intends to query the health status of OAP server
-func CheckHealth(ctx *cli.Context) schema.HealthStatus {
-	var response map[string]schema.HealthStatus
+func CheckHealth(ctx *cli.Context) api.HealthStatus {
+	var response map[string]api.HealthStatus
 
-	request := graphql.NewRequest(assets.Read("graphqls/common/checkHealth.graphql"))
+	request := graphql.NewRequest(assets.Read("graphqls/healthcheck/checkHealth.graphql"))
 
 	client.ExecuteQueryOrFail(ctx, request, &response)
 
diff --git a/graphql/dashboard/global.go b/pkg/graphql/dashboard/global.go
similarity index 78%
rename from graphql/dashboard/global.go
rename to pkg/graphql/dashboard/global.go
index c004acd..fd9aa48 100644
--- a/graphql/dashboard/global.go
+++ b/pkg/graphql/dashboard/global.go
@@ -19,6 +19,7 @@ package dashboard
 
 import (
 	"bytes"
+	"github.com/apache/skywalking-cli/api"
 	"io/ioutil"
 	"strings"
 	"sync"
@@ -29,9 +30,8 @@ import (
 	"gopkg.in/yaml.v2"
 
 	"github.com/apache/skywalking-cli/assets"
-	"github.com/apache/skywalking-cli/graphql/metrics"
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/graphql/utils"
+	"github.com/apache/skywalking-cli/pkg/graphql/metrics"
+	"github.com/apache/skywalking-cli/pkg/graphql/utils"
 )
 
 type ButtonTemplate struct {
@@ -41,18 +41,18 @@ type ButtonTemplate struct {
 }
 
 type MetricTemplate struct {
-	Condition      schema.TopNCondition `mapstructure:"condition"`
-	Title          string               `mapstructure:"title"`
-	Aggregation    string               `mapstructure:"aggregation"`
-	AggregationNum string               `mapstructure:"aggregationNum"`
+	Condition      api.TopNCondition `mapstructure:"condition"`
+	Title          string            `mapstructure:"title"`
+	Aggregation    string            `mapstructure:"aggregation"`
+	AggregationNum string            `mapstructure:"aggregationNum"`
 }
 
 type ChartTemplate struct {
-	Condition   schema.MetricsCondition `mapstructure:"condition"`
-	Title       string                  `mapstructure:"title"`
-	Unit        string                  `mapstructure:"unit"`
-	Labels      string                  `mapstructure:"labels"`
-	LabelsIndex string                  `mapstructure:"labelsIndex"`
+	Condition   api.MetricsCondition `mapstructure:"condition"`
+	Title       string               `mapstructure:"title"`
+	Unit        string               `mapstructure:"unit"`
+	Labels      string               `mapstructure:"labels"`
+	LabelsIndex string               `mapstructure:"labelsIndex"`
 }
 
 type GlobalTemplate struct {
@@ -63,9 +63,9 @@ type GlobalTemplate struct {
 }
 
 type GlobalData struct {
-	Metrics         [][]*schema.SelectedRecord `json:"metrics"`
-	ResponseLatency []map[string]float64       `json:"responseLatency"`
-	HeatMap         schema.HeatMap             `json:"heatMap"`
+	Metrics         [][]*api.SelectedRecord `json:"metrics"`
+	ResponseLatency []map[string]float64    `json:"responseLatency"`
+	HeatMap         api.HeatMap             `json:"heatMap"`
 }
 
 // Use singleton pattern to make sure to load template only once.
@@ -138,8 +138,8 @@ func getButtonTexts(byteValue []byte) ([]string, error) {
 	return ret, nil
 }
 
-func Metrics(ctx *cli.Context, duration schema.Duration) [][]*schema.SelectedRecord {
-	var ret [][]*schema.SelectedRecord
+func Metrics(ctx *cli.Context, duration api.Duration) [][]*api.SelectedRecord {
+	var ret [][]*api.SelectedRecord
 
 	template, err := LoadTemplate(ctx.String("template"))
 	if err != nil {
@@ -158,7 +158,7 @@ func Metrics(ctx *cli.Context, duration schema.Duration) [][]*schema.SelectedRec
 	return ret
 }
 
-func responseLatency(ctx *cli.Context, duration schema.Duration) []map[string]float64 {
+func responseLatency(ctx *cli.Context, duration api.Duration) []map[string]float64 {
 	template, err := LoadTemplate(ctx.String("template"))
 	if err != nil {
 		return nil
@@ -179,21 +179,21 @@ func responseLatency(ctx *cli.Context, duration schema.Duration) []map[string]fl
 	return utils.MetricsValuesArrayToMap(duration, responseLatency)
 }
 
-func heatMap(ctx *cli.Context, duration schema.Duration) schema.HeatMap {
+func heatMap(ctx *cli.Context, duration api.Duration) api.HeatMap {
 	template, err := LoadTemplate(ctx.String("template"))
 	if err != nil {
-		return schema.HeatMap{}
+		return api.HeatMap{}
 	}
 
 	// Check if there is a template of heat map.
 	if template.HeatMap == (ChartTemplate{}) {
-		return schema.HeatMap{}
+		return api.HeatMap{}
 	}
 
 	return metrics.Thermodynamic(ctx, template.HeatMap.Condition, duration)
 }
 
-func Global(ctx *cli.Context, duration schema.Duration) *GlobalData {
+func Global(ctx *cli.Context, duration api.Duration) *GlobalData {
 	// Load template to `globalTemplate`, so the subsequent three calls can ues it directly.
 	_, err := LoadTemplate(ctx.String("template"))
 	if err != nil {
@@ -203,7 +203,7 @@ func Global(ctx *cli.Context, duration schema.Duration) *GlobalData {
 	// Use three goroutines to enable concurrent execution of three graphql queries.
 	var wg sync.WaitGroup
 	wg.Add(3)
-	var m [][]*schema.SelectedRecord
+	var m [][]*api.SelectedRecord
 	go func() {
 		m = Metrics(ctx, duration)
 		wg.Done()
@@ -213,7 +213,7 @@ func Global(ctx *cli.Context, duration schema.Duration) *GlobalData {
 		rl = responseLatency(ctx, duration)
 		wg.Done()
 	}()
-	var hm schema.HeatMap
+	var hm api.HeatMap
 	go func() {
 		hm = heatMap(ctx, duration)
 		wg.Done()
diff --git a/graphql/metadata/metadata.go b/pkg/graphql/metadata/metadata.go
similarity index 77%
rename from graphql/metadata/metadata.go
rename to pkg/graphql/metadata/metadata.go
index 49e88be..3866794 100644
--- a/graphql/metadata/metadata.go
+++ b/pkg/graphql/metadata/metadata.go
@@ -19,18 +19,18 @@ package metadata
 
 import (
 	"fmt"
+	"github.com/apache/skywalking-cli/api"
 
 	"github.com/apache/skywalking-cli/assets"
 
 	"github.com/machinebox/graphql"
 	"github.com/urfave/cli"
 
-	"github.com/apache/skywalking-cli/graphql/client"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/pkg/graphql/client"
 )
 
-func AllServices(cliCtx *cli.Context, duration schema.Duration) []schema.Service {
-	var response map[string][]schema.Service
+func AllServices(cliCtx *cli.Context, duration api.Duration) []api.Service {
+	var response map[string][]api.Service
 
 	request := graphql.NewRequest(assets.Read("graphqls/metadata/AllServices.graphql"))
 	request.Var("duration", duration)
@@ -39,8 +39,8 @@ func AllServices(cliCtx *cli.Context, duration schema.Duration) []schema.Service
 	return response["result"]
 }
 
-func SearchService(cliCtx *cli.Context, serviceCode string) (service schema.Service, err error) {
-	var response map[string]schema.Service
+func SearchService(cliCtx *cli.Context, serviceCode string) (service api.Service, err error) {
+	var response map[string]api.Service
 
 	request := graphql.NewRequest(assets.Read("graphqls/metadata/SearchService.graphql"))
 	request.Var("serviceCode", serviceCode)
@@ -56,8 +56,8 @@ func SearchService(cliCtx *cli.Context, serviceCode string) (service schema.Serv
 	return service, nil
 }
 
-func SearchEndpoints(cliCtx *cli.Context, serviceID, keyword string, limit int) []schema.Endpoint {
-	var response map[string][]schema.Endpoint
+func SearchEndpoints(cliCtx *cli.Context, serviceID, keyword string, limit int) []api.Endpoint {
+	var response map[string][]api.Endpoint
 
 	request := graphql.NewRequest(assets.Read("graphqls/metadata/SearchEndpoints.graphql"))
 	request.Var("serviceId", serviceID)
@@ -69,8 +69,8 @@ func SearchEndpoints(cliCtx *cli.Context, serviceID, keyword string, limit int)
 	return response["result"]
 }
 
-func Instances(cliCtx *cli.Context, serviceID string, duration schema.Duration) []schema.ServiceInstance {
-	var response map[string][]schema.ServiceInstance
+func Instances(cliCtx *cli.Context, serviceID string, duration api.Duration) []api.ServiceInstance {
+	var response map[string][]api.ServiceInstance
 
 	request := graphql.NewRequest(assets.Read("graphqls/metadata/Instances.graphql"))
 	request.Var("serviceId", serviceID)
@@ -81,13 +81,13 @@ func Instances(cliCtx *cli.Context, serviceID string, duration schema.Duration)
 	return response["result"]
 }
 
-func ServerTimeInfo(cliCtx *cli.Context) (schema.TimeInfo, error) {
-	var response map[string]schema.TimeInfo
+func ServerTimeInfo(cliCtx *cli.Context) (api.TimeInfo, error) {
+	var response map[string]api.TimeInfo
 
 	request := graphql.NewRequest(assets.Read("graphqls/metadata/ServerTimeInfo.graphql"))
 
 	if err := client.ExecuteQuery(cliCtx, request, &response); err != nil {
-		return schema.TimeInfo{}, err
+		return api.TimeInfo{}, err
 	}
 
 	return response["result"], nil
diff --git a/graphql/metrics/metrics.go b/pkg/graphql/metrics/metrics.go
similarity index 70%
rename from graphql/metrics/metrics.go
rename to pkg/graphql/metrics/metrics.go
index 8a73a58..094c12a 100644
--- a/graphql/metrics/metrics.go
+++ b/pkg/graphql/metrics/metrics.go
@@ -18,15 +18,14 @@
 package metrics
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/apache/skywalking-cli/assets"
-	"github.com/apache/skywalking-cli/graphql/client"
-	"github.com/apache/skywalking-cli/graphql/schema"
-
+	"github.com/apache/skywalking-cli/pkg/graphql/client"
 	"github.com/machinebox/graphql"
 	"github.com/urfave/cli"
 )
 
-func IntValues(ctx *cli.Context, condition schema.MetricsCondition, duration schema.Duration) int {
+func IntValues(ctx *cli.Context, condition api.MetricsCondition, duration api.Duration) int {
 	var response map[string]int
 
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/MetricsValue.graphql"))
@@ -39,8 +38,8 @@ func IntValues(ctx *cli.Context, condition schema.MetricsCondition, duration sch
 	return response["result"]
 }
 
-func LinearIntValues(ctx *cli.Context, condition schema.MetricsCondition, duration schema.Duration) schema.MetricsValues {
-	var response map[string]schema.MetricsValues
+func LinearIntValues(ctx *cli.Context, condition api.MetricsCondition, duration api.Duration) api.MetricsValues {
+	var response map[string]api.MetricsValues
 
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/MetricsValues.graphql"))
 
@@ -52,8 +51,8 @@ func LinearIntValues(ctx *cli.Context, condition schema.MetricsCondition, durati
 	return response["result"]
 }
 
-func MultipleLinearIntValues(ctx *cli.Context, condition schema.MetricsCondition, labels []string, duration schema.Duration) []schema.MetricsValues {
-	var response map[string][]schema.MetricsValues
+func MultipleLinearIntValues(ctx *cli.Context, condition api.MetricsCondition, labels []string, duration api.Duration) []api.MetricsValues {
+	var response map[string][]api.MetricsValues
 
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/LabeledMetricsValues.graphql"))
 
@@ -66,8 +65,8 @@ func MultipleLinearIntValues(ctx *cli.Context, condition schema.MetricsCondition
 	return response["result"]
 }
 
-func Thermodynamic(ctx *cli.Context, condition schema.MetricsCondition, duration schema.Duration) schema.HeatMap {
-	var response map[string]schema.HeatMap
+func Thermodynamic(ctx *cli.Context, condition api.MetricsCondition, duration api.Duration) api.HeatMap {
+	var response map[string]api.HeatMap
 
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/HeatMap.graphql"))
 
@@ -79,8 +78,8 @@ func Thermodynamic(ctx *cli.Context, condition schema.MetricsCondition, duration
 	return response["result"]
 }
 
-func SortMetrics(ctx *cli.Context, condition schema.TopNCondition, duration schema.Duration) []*schema.SelectedRecord {
-	var response map[string][]*schema.SelectedRecord
+func SortMetrics(ctx *cli.Context, condition api.TopNCondition, duration api.Duration) []*api.SelectedRecord {
+	var response map[string][]*api.SelectedRecord
 
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/SortMetrics.graphql"))
 	request.Var("condition", condition)
@@ -91,8 +90,8 @@ func SortMetrics(ctx *cli.Context, condition schema.TopNCondition, duration sche
 	return response["result"]
 }
 
-func ListMetrics(ctx *cli.Context, regex string) []*schema.MetricDefinition {
-	var response map[string][]*schema.MetricDefinition
+func ListMetrics(ctx *cli.Context, regex string) []*api.MetricDefinition {
+	var response map[string][]*api.MetricDefinition
 	request := graphql.NewRequest(assets.Read("graphqls/metrics/ListMetrics.graphql"))
 	request.Var("regex", regex)
 
diff --git a/graphql/trace/trace.go b/pkg/graphql/trace/trace.go
similarity index 80%
rename from graphql/trace/trace.go
rename to pkg/graphql/trace/trace.go
index fab21e7..f4de9f0 100644
--- a/graphql/trace/trace.go
+++ b/pkg/graphql/trace/trace.go
@@ -18,16 +18,16 @@
 package trace
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"github.com/machinebox/graphql"
 	"github.com/urfave/cli"
 
 	"github.com/apache/skywalking-cli/assets"
-	"github.com/apache/skywalking-cli/graphql/client"
-	"github.com/apache/skywalking-cli/graphql/schema"
+	"github.com/apache/skywalking-cli/pkg/graphql/client"
 )
 
-func Trace(ctx *cli.Context, traceID string) schema.Trace {
-	var response map[string]schema.Trace
+func Trace(ctx *cli.Context, traceID string) api.Trace {
+	var response map[string]api.Trace
 
 	request := graphql.NewRequest(assets.Read("graphqls/trace/Trace.graphql"))
 	request.Var("traceId", traceID)
@@ -37,8 +37,8 @@ func Trace(ctx *cli.Context, traceID string) schema.Trace {
 	return response["result"]
 }
 
-func Traces(ctx *cli.Context, condition *schema.TraceQueryCondition) schema.TraceBrief {
-	var response map[string]schema.TraceBrief
+func Traces(ctx *cli.Context, condition *api.TraceQueryCondition) api.TraceBrief {
+	var response map[string]api.TraceBrief
 
 	request := graphql.NewRequest(assets.Read("graphqls/trace/Traces.graphql"))
 	request.Var("condition", condition)
diff --git a/graphql/utils/adapter.go b/pkg/graphql/utils/adapter.go
similarity index 84%
rename from graphql/utils/adapter.go
rename to pkg/graphql/utils/adapter.go
index 1f5918f..1ada5f0 100644
--- a/graphql/utils/adapter.go
+++ b/pkg/graphql/utils/adapter.go
@@ -18,16 +18,16 @@
 package utils
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"strconv"
 	"strings"
 	"time"
 
-	"github.com/apache/skywalking-cli/graphql/schema"
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 // MetricsValuesArrayToMap converts Array of MetricsValues into a map that uses time as key.
-func MetricsValuesArrayToMap(duration schema.Duration, mvArray []schema.MetricsValues) []map[string]float64 {
+func MetricsValuesArrayToMap(duration api.Duration, mvArray []api.MetricsValues) []map[string]float64 {
 	ret := make([]map[string]float64, len(mvArray))
 	for _, mvs := range mvArray {
 		index, err := strconv.Atoi(strings.TrimSpace(*mvs.Label))
@@ -41,7 +41,7 @@ func MetricsValuesArrayToMap(duration schema.Duration, mvArray []schema.MetricsV
 }
 
 // MetricsValuesToMap converts MetricsValues into a map that uses time as key.
-func MetricsValuesToMap(duration schema.Duration, metricsValues schema.MetricsValues) map[string]float64 {
+func MetricsValuesToMap(duration api.Duration, metricsValues api.MetricsValues) map[string]float64 {
 	kvInts := metricsValues.Values.Values
 	ret := map[string]float64{}
 	format := StepFormats[duration.Step]
@@ -60,7 +60,7 @@ func MetricsValuesToMap(duration schema.Duration, metricsValues schema.MetricsVa
 }
 
 // HeatMapToMap converts a HeatMap into a map that uses time as key.
-func HeatMapToMap(hp *schema.HeatMap) map[string][]int64 {
+func HeatMapToMap(hp *api.HeatMap) map[string][]int64 {
 	ret := make(map[string][]int64)
 	for _, col := range hp.Values {
 		// col.id is a string represents date, like "202007292131",
@@ -78,7 +78,7 @@ func HeatMapToMap(hp *schema.HeatMap) map[string][]int64 {
 }
 
 // BucketsToStrings extracts strings from buckets as a chart's labels.
-func BucketsToStrings(buckets []*schema.Bucket) []string {
+func BucketsToStrings(buckets []*api.Bucket) []string {
 	var ret []string
 	for _, b := range buckets {
 		ret = append(ret, b.Min)
diff --git a/graphql/utils/adapter_test.go b/pkg/graphql/utils/adapter_test.go
similarity index 86%
rename from graphql/utils/adapter_test.go
rename to pkg/graphql/utils/adapter_test.go
index 1d8270d..f5d1444 100644
--- a/graphql/utils/adapter_test.go
+++ b/pkg/graphql/utils/adapter_test.go
@@ -18,16 +18,15 @@
 package utils
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"reflect"
 	"testing"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 func TestMetricsToMap(t *testing.T) {
 	type args struct {
-		duration      schema.Duration
-		metricsValues schema.MetricsValues
+		duration      api.Duration
+		metricsValues api.MetricsValues
 	}
 	tests := []struct {
 		name string
@@ -37,14 +36,14 @@ func TestMetricsToMap(t *testing.T) {
 		{
 			name: "Should convert to map",
 			args: args{
-				duration: schema.Duration{
+				duration: api.Duration{
 					Start: "2020-01-01 0000",
 					End:   "2020-01-01 0007",
-					Step:  schema.StepMinute,
+					Step:  api.StepMinute,
 				},
-				metricsValues: schema.MetricsValues{
-					Values: &schema.IntValues{
-						Values: []*schema.KVInt{
+				metricsValues: api.MetricsValues{
+					Values: &api.IntValues{
+						Values: []*api.KVInt{
 							{Value: 0},
 							{Value: 1},
 							{Value: 2},
diff --git a/graphql/utils/constants.go b/pkg/graphql/utils/constants.go
similarity index 74%
rename from graphql/utils/constants.go
rename to pkg/graphql/utils/constants.go
index 2f527e3..1b81b7a 100644
--- a/graphql/utils/constants.go
+++ b/pkg/graphql/utils/constants.go
@@ -18,25 +18,24 @@
 package utils
 
 import (
+	"github.com/apache/skywalking-cli/api"
 	"time"
-
-	"github.com/apache/skywalking-cli/graphql/schema"
 )
 
 // StepFormats is a mapping from schema.Step to its time format
-var StepFormats = map[schema.Step]string{
-	schema.StepSecond: "2006-01-02 150405",
-	schema.StepMinute: "2006-01-02 1504",
-	schema.StepHour:   "2006-01-02 15",
-	schema.StepDay:    "2006-01-02",
+var StepFormats = map[api.Step]string{
+	api.StepSecond: "2006-01-02 150405",
+	api.StepMinute: "2006-01-02 1504",
+	api.StepHour:   "2006-01-02 15",
+	api.StepDay:    "2006-01-02",
 }
 
 // StepDuration is a mapping from schema.Step to its time.Duration
-var StepDuration = map[schema.Step]time.Duration{
-	schema.StepSecond: time.Second,
-	schema.StepMinute: time.Minute,
-	schema.StepHour:   time.Hour,
-	schema.StepDay:    time.Hour * 24,
+var StepDuration = map[api.Step]time.Duration{
+	api.StepSecond: time.Second,
+	api.StepMinute: time.Minute,
+	api.StepHour:   time.Hour,
+	api.StepDay:    time.Hour * 24,
 }
 
 type DurationType string
diff --git a/grpc/health.go b/pkg/healthcheck/grpc.go
similarity index 97%
rename from grpc/health.go
rename to pkg/healthcheck/grpc.go
index 3b83ad2..f4c6357 100644
--- a/grpc/health.go
+++ b/pkg/healthcheck/grpc.go
@@ -15,14 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package grpc
+package healthcheck
 
 import (
 	"context"
 	"crypto/tls"
 	"time"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
diff --git a/lib/heatmap/axes/axes.go b/pkg/heatmap/axes/axes.go
similarity index 100%
rename from lib/heatmap/axes/axes.go
rename to pkg/heatmap/axes/axes.go
diff --git a/lib/heatmap/axes/label.go b/pkg/heatmap/axes/label.go
similarity index 97%
rename from lib/heatmap/axes/label.go
rename to pkg/heatmap/axes/label.go
index e797dae..f1d0b53 100644
--- a/lib/heatmap/axes/label.go
+++ b/pkg/heatmap/axes/label.go
@@ -108,7 +108,7 @@ func xLabels(yEnd image.Point, graphWidth int, stringLabels []string, cellWidth
 
 // paddedLabelLength calculates the length of the padded label and
 // the column index corresponding to the label.
-// For example, the longest label's length is 5, like '12:34', and the cell's width is 3.
+// For examples, the longest label's length is 5, like '12:34', and the cell's width is 3.
 // So in order to better display, every three cells will display a label,
 // the label belongs to the middle column of the three columns,
 // and the padded length is 3*3, which is 9.
diff --git a/lib/heatmap/heatmap.go b/pkg/heatmap/heatmap.go
similarity index 99%
rename from lib/heatmap/heatmap.go
rename to pkg/heatmap/heatmap.go
index cdc466f..5c87730 100644
--- a/lib/heatmap/heatmap.go
+++ b/pkg/heatmap/heatmap.go
@@ -25,7 +25,7 @@ import (
 	"sort"
 	"sync"
 
-	"github.com/apache/skywalking-cli/lib/heatmap/axes"
+	"github.com/apache/skywalking-cli/pkg/heatmap/axes"
 
 	"github.com/mum4k/termdash/cell"
 	"github.com/mum4k/termdash/private/area"
diff --git a/lib/heatmap/options.go b/pkg/heatmap/options.go
similarity index 100%
rename from lib/heatmap/options.go
rename to pkg/heatmap/options.go
diff --git a/util/io.go b/pkg/util/io.go
similarity index 96%
rename from util/io.go
rename to pkg/util/io.go
index ee65b8e..3e957f4 100644
--- a/util/io.go
+++ b/pkg/util/io.go
@@ -21,7 +21,7 @@ import (
 	"os/user"
 	"strings"
 
-	"github.com/apache/skywalking-cli/logger"
+	"github.com/apache/skywalking-cli/internal/logger"
 )
 
 // UserHomeDir returns the current user's home directory absolute path,
diff --git a/util/lang.go b/pkg/util/lang.go
similarity index 100%
rename from util/lang.go
rename to pkg/util/lang.go
diff --git a/util/math.go b/pkg/util/math.go
similarity index 100%
rename from util/math.go
rename to pkg/util/math.go
diff --git a/hack/boilerplate.go.txt b/scripts/boilerplate.go.txt
similarity index 100%
rename from hack/boilerplate.go.txt
rename to scripts/boilerplate.go.txt
diff --git a/hack/build-header.sh b/scripts/build-header.sh
similarity index 100%
rename from hack/build-header.sh
rename to scripts/build-header.sh
diff --git a/test/test_commands.sh b/scripts/test_commands.sh
similarity index 100%
rename from test/test_commands.sh
rename to scripts/test_commands.sh


[skywalking-cli] 02/02: chore: add an example of skywalking.yaml

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch chore/project-layout
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git

commit b752d69b16a1530df074d5f3c1323492d303a11d
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Fri Dec 18 18:43:38 2020 +0800

    chore: add an example of skywalking.yaml
---
 examples/skywalking.yaml | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/examples/skywalking.yaml b/examples/skywalking.yaml
new file mode 100644
index 0000000..04355cd
--- /dev/null
+++ b/examples/skywalking.yaml
@@ -0,0 +1,20 @@
+# Licensed to 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. Apache Software Foundation (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.
+
+base-url: http://demo.skywalking.apache.org/graphql
+username: basic-auth-username
+password: basic-auth-password