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/03/04 04:03:36 UTC

[skywalking-cli] branch graphql/schema created (now 766eb86)

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

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


      at 766eb86  Generate GraphQL codes dynamically

This branch includes the following new commits:

     new 766eb86  Generate GraphQL codes dynamically

The 1 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/01: Generate GraphQL codes dynamically

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

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

commit 766eb869df94f474ea5b4271f6757795761c50bf
Author: kezhenxu94 <ke...@163.com>
AuthorDate: Wed Mar 4 12:03:14 2020 +0800

    Generate GraphQL codes dynamically
---
 .gitignore                   |   3 +-
 .gitmodules                  |   3 +
 Makefile                     |  10 +-
 dist/LICENSE                 |   3 +-
 dist/licenses/LICENSE-gqlgen |  19 ++
 go.mod                       |   4 +-
 go.sum                       |  63 ++++
 gqlgen.yml                   |  28 ++
 graphql/schema/schema.go     | 754 -------------------------------------------
 query-protocol               |   1 +
 10 files changed, 128 insertions(+), 760 deletions(-)

diff --git a/.gitignore b/.gitignore
index aed147e..e6e7bf9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 .idea
 bin
-coverage.txt
\ No newline at end of file
+coverage.txt
+graphql/schema/schema.go
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..5ba3c21
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "query-protocol"]
+	path = query-protocol
+	url = http://github.com/apache/skywalking-query-protocol/
diff --git a/Makefile b/Makefile
index 29e4332..d08c29a 100644
--- a/Makefile
+++ b/Makefile
@@ -41,11 +41,16 @@ ARCH = amd64
 
 SHELL = /bin/bash
 
-all: clean deps lint test license build
+all: clean deps codegen lint test license build
 
 deps:
 	$(GO_GET) -v -t -d ./...
 
+codegen:
+	echo 'scalar Long' > query-protocol/schema.graphqls
+	$(GO) run github.com/99designs/gqlgen generate
+	-rm -rf generated.go
+
 .PHONY: $(PLATFORMS)
 $(PLATFORMS):
 	mkdir -p $(OUT_DIR)
@@ -66,7 +71,7 @@ build: deps windows linux darwin
 .PHONY: license
 license: clean
 	$(GO_LICENSER) -version || GO111MODULE=off $(GO_GET) -u github.com/elastic/go-licenser
-	$(GO_LICENSER) -d -licensor='Apache Software Foundation (ASF)' .
+	$(GO_LICENSER) -exclude graphql/schema/ -d -licensor='Apache Software Foundation (ASF)' .
 
 .PHONY: verify
 verify: clean lint test license
@@ -98,6 +103,7 @@ release-src: clean
 	--exclude .DS_Store \
 	--exclude .github \
 	--exclude $(RELEASE_SRC).tgz \
+	--exclude graphql/schema/schema.go \
 	.
 
 release-bin: build
diff --git a/dist/LICENSE b/dist/LICENSE
index 4c59e67..3ce03a7 100644
--- a/dist/LICENSE
+++ b/dist/LICENSE
@@ -209,7 +209,7 @@ The text of each license is the standard Apache 2.0 license.
 
 	machinebox (graphql) 0.2.2: https://github.com/machinebox/graphql Apache 2.0
 	mum4k (termdash) 0.10.0: https://github.com/mum4k/termdash Apache 2.0
-	yaml.v2 2.2.2: https://gopkg.in/yaml.v2 Apache 2.0
+	yaml.v2 2.2.4: https://gopkg.in/yaml.v2 Apache 2.0
 
 ========================================================================
 MIT licenses
@@ -222,6 +222,7 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
 	sirupsen (logrus) 1.4.2: https://github.com/sirupsen/logrus MIT
 	urfave (cli) 1.22.1: https://github.com/urfave/cli MIT
 	nsf (termbox-go) 0.0.0-20190817171036-93860e161317: https://github.com/nsf/termbox-go MIT
+	99designs (gqlgen) 0.11.1: https://github.com/99designs/gqlgen MIT
 
 ========================================================================
 BSD licenses
diff --git a/dist/licenses/LICENSE-gqlgen b/dist/licenses/LICENSE-gqlgen
new file mode 100644
index 0000000..1221b9d
--- /dev/null
+++ b/dist/licenses/LICENSE-gqlgen
@@ -0,0 +1,19 @@
+Copyright (c) 2018 Adam Scarr
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 9ab591f..f28ffcc 100644
--- a/go.mod
+++ b/go.mod
@@ -3,12 +3,12 @@ module github.com/apache/skywalking-cli
 go 1.13
 
 require (
+	github.com/99designs/gqlgen v0.11.1 // indirect
 	github.com/machinebox/graphql v0.2.2
 	github.com/mum4k/termdash v0.10.0
 	github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 // indirect
 	github.com/olekukonko/tablewriter v0.0.2
-	github.com/pkg/errors v0.8.1 // indirect
 	github.com/sirupsen/logrus v1.4.2
 	github.com/urfave/cli v1.22.1
-	gopkg.in/yaml.v2 v2.2.2
+	gopkg.in/yaml.v2 v2.2.4
 )
diff --git a/go.sum b/go.sum
index 3d6e7a9..cd718b5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,16 +1,43 @@
+github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
+github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
+github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
+github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
+github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
+github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
+github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
+github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
+github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
 github.com/lytics/logrus v0.0.0-20170528191427-4389a17ed024 h1:QaKVrqyQRNPbdBNCpiU0Ei3iDQko3qoiUUXMiTWhzZM=
 github.com/lytics/logrus v0.0.0-20170528191427-4389a17ed024/go.mod h1:SkQviJ2s7rFyzyuxdVp6osZceHOabU91ZhKsEXF0RWg=
 github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo=
 github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA=
+github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
+github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mum4k/termdash v0.10.0 h1:uqM6ePiMf+smecb1tJJeON36o1hREeCfOmLFG0iz4a0=
 github.com/mum4k/termdash v0.10.0/go.mod h1:l3tO+lJi9LZqXRq7cu7h5/8rDIK3AzelSuq2v/KncxI=
 github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 h1:hhGN4SFXgXo61Q4Sjj/X9sBjyeSa2kdpaOzCO+8EVQw=
@@ -18,21 +45,57 @@ github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317/go.mod h1:IuKpRQcYE
 github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.2 h1:sq53g+DWf0J6/ceFUHpQ0nAEb6WgM++fq16MZ91cS6o=
 github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ=
+github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
+github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
+github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
 github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
 github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
+github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
+github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
+golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
+sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
diff --git a/gqlgen.yml b/gqlgen.yml
new file mode 100644
index 0000000..81cf26e
--- /dev/null
+++ b/gqlgen.yml
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+schema:
+  - query-protocol/*.graphqls
+
+skip_validation: true
+
+model:
+  filename: graphql/schema/schema.go
+  package: schema
+
+models:
+  Long:
+    model: github.com/99designs/gqlgen/graphql.Int64
\ No newline at end of file
diff --git a/graphql/schema/schema.go b/graphql/schema/schema.go
deleted file mode 100644
index 16eaa64..0000000
--- a/graphql/schema/schema.go
+++ /dev/null
@@ -1,754 +0,0 @@
-// 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.
-
-package schema
-
-import (
-	"fmt"
-	"io"
-	"strconv"
-)
-
-type AlarmMessage struct {
-	StartTime int64  `json:"startTime"`
-	Scope     *Scope `json:"scope"`
-	ID        string `json:"id"`
-	Message   string `json:"message"`
-}
-
-type AlarmTrend struct {
-	NumOfAlarm []*int `json:"numOfAlarm"`
-}
-
-type Alarms struct {
-	Msgs  []*AlarmMessage `json:"msgs"`
-	Total int             `json:"total"`
-}
-
-type Attribute struct {
-	Name  string `json:"name"`
-	Value string `json:"value"`
-}
-
-type BasicTrace struct {
-	SegmentID     string   `json:"segmentId"`
-	EndpointNames []string `json:"endpointNames"`
-	Duration      int      `json:"duration"`
-	Start         string   `json:"start"`
-	IsError       *bool    `json:"isError"`
-	TraceIds      []string `json:"traceIds"`
-}
-
-type BatchMetricConditions struct {
-	Name string   `json:"name"`
-	Ids  []string `json:"ids"`
-}
-
-type Call struct {
-	Source           string        `json:"source"`
-	SourceComponents []string      `json:"sourceComponents"`
-	Target           string        `json:"target"`
-	TargetComponents []string      `json:"targetComponents"`
-	ID               string        `json:"id"`
-	DetectPoints     []DetectPoint `json:"detectPoints"`
-}
-
-type ClusterBrief struct {
-	NumOfService  int `json:"numOfService"`
-	NumOfEndpoint int `json:"numOfEndpoint"`
-	NumOfDatabase int `json:"numOfDatabase"`
-	NumOfCache    int `json:"numOfCache"`
-	NumOfMq       int `json:"numOfMQ"`
-}
-
-type Database struct {
-	ID   string `json:"id"`
-	Name string `json:"name"`
-	Type string `json:"type"`
-}
-
-type Duration struct {
-	Start string `json:"start"`
-	End   string `json:"end"`
-	Step  Step   `json:"step"`
-}
-
-type Endpoint struct {
-	ID   string `json:"id"`
-	Name string `json:"name"`
-}
-
-type EndpointInfo struct {
-	ID          string `json:"id"`
-	Name        string `json:"name"`
-	ServiceID   string `json:"serviceId"`
-	ServiceName string `json:"serviceName"`
-}
-
-type IntValues struct {
-	Values []*KVInt `json:"values"`
-}
-
-type KVInt struct {
-	ID    string `json:"id"`
-	Value int64  `json:"value"`
-}
-
-type KeyValue struct {
-	Key   string  `json:"key"`
-	Value *string `json:"value"`
-}
-
-type Log struct {
-	ServiceName         *string     `json:"serviceName"`
-	ServiceID           *string     `json:"serviceId"`
-	ServiceInstanceName *string     `json:"serviceInstanceName"`
-	ServiceInstanceID   *string     `json:"serviceInstanceId"`
-	EndpointName        *string     `json:"endpointName"`
-	EndpointID          *string     `json:"endpointId"`
-	TraceID             *string     `json:"traceId"`
-	Timestamp           string      `json:"timestamp"`
-	IsError             *bool       `json:"isError"`
-	StatusCode          *string     `json:"statusCode"`
-	ContentType         ContentType `json:"contentType"`
-	Content             *string     `json:"content"`
-}
-
-type LogEntity struct {
-	Time int64       `json:"time"`
-	Data []*KeyValue `json:"data"`
-}
-
-type LogQueryCondition struct {
-	MetricName        *string     `json:"metricName"`
-	ServiceID         *string     `json:"serviceId"`
-	ServiceInstanceID *string     `json:"serviceInstanceId"`
-	EndpointID        *string     `json:"endpointId"`
-	TraceID           *string     `json:"traceId"`
-	QueryDuration     *Duration   `json:"queryDuration"`
-	State             LogState    `json:"state"`
-	StateCode         *string     `json:"stateCode"`
-	Paging            *Pagination `json:"paging"`
-}
-
-type Logs struct {
-	Logs  []*Log `json:"logs"`
-	Total int    `json:"total"`
-}
-
-type MetricCondition struct {
-	Name string  `json:"name"`
-	ID   *string `json:"id"`
-}
-
-type Node struct {
-	ID     string  `json:"id"`
-	Name   string  `json:"name"`
-	Type   *string `json:"type"`
-	IsReal bool    `json:"isReal"`
-}
-
-type Pagination struct {
-	PageNum   *int  `json:"pageNum"`
-	PageSize  int   `json:"pageSize"`
-	NeedTotal *bool `json:"needTotal"`
-}
-
-type Ref struct {
-	TraceID         string  `json:"traceId"`
-	ParentSegmentID string  `json:"parentSegmentId"`
-	ParentSpanID    int     `json:"parentSpanId"`
-	Type            RefType `json:"type"`
-}
-
-type Service struct {
-	ID   string `json:"id"`
-	Name string `json:"name"`
-}
-
-type ServiceInstance struct {
-	ID           string       `json:"id"`
-	Name         string       `json:"name"`
-	Attributes   []*Attribute `json:"attributes"`
-	Language     Language     `json:"language"`
-	InstanceUUID string       `json:"instanceUUID"`
-}
-
-type Span struct {
-	TraceID      string       `json:"traceId"`
-	SegmentID    string       `json:"segmentId"`
-	SpanID       int          `json:"spanId"`
-	ParentSpanID int          `json:"parentSpanId"`
-	Refs         []*Ref       `json:"refs"`
-	ServiceCode  string       `json:"serviceCode"`
-	StartTime    int64        `json:"startTime"`
-	EndTime      int64        `json:"endTime"`
-	EndpointName *string      `json:"endpointName"`
-	Type         string       `json:"type"`
-	Peer         *string      `json:"peer"`
-	Component    *string      `json:"component"`
-	IsError      *bool        `json:"isError"`
-	Layer        *string      `json:"layer"`
-	Tags         []*KeyValue  `json:"tags"`
-	Logs         []*LogEntity `json:"logs"`
-}
-
-type Thermodynamic struct {
-	Nodes     [][]*int `json:"nodes"`
-	AxisYStep int      `json:"axisYStep"`
-}
-
-type TimeInfo struct {
-	Timezone         *string `json:"timezone"`
-	CurrentTimestamp *int64  `json:"currentTimestamp"`
-}
-
-type TopNEntity struct {
-	Name  string `json:"name"`
-	ID    string `json:"id"`
-	Value int64  `json:"value"`
-}
-
-type TopNRecord struct {
-	Statement *string `json:"statement"`
-	Latency   int64   `json:"latency"`
-	TraceID   *string `json:"traceId"`
-}
-
-type TopNRecordsCondition struct {
-	ServiceID  string    `json:"serviceId"`
-	MetricName string    `json:"metricName"`
-	TopN       int       `json:"topN"`
-	Order      Order     `json:"order"`
-	Duration   *Duration `json:"duration"`
-}
-
-type Topology struct {
-	Nodes []*Node `json:"nodes"`
-	Calls []*Call `json:"calls"`
-}
-
-type Trace struct {
-	Spans []*Span `json:"spans"`
-}
-
-type TraceBrief struct {
-	Traces []*BasicTrace `json:"data"`
-	Total  int           `json:"total"`
-}
-
-type TraceQueryCondition struct {
-	ServiceID         *string     `json:"serviceId"`
-	ServiceInstanceID *string     `json:"serviceInstanceId"`
-	TraceID           *string     `json:"traceId"`
-	EndpointID        *string     `json:"endpointId"`
-	EndpointName      *string     `json:"endpointName"`
-	QueryDuration     *Duration   `json:"queryDuration"`
-	MinTraceDuration  *int        `json:"minTraceDuration"`
-	MaxTraceDuration  *int        `json:"maxTraceDuration"`
-	TraceState        TraceState  `json:"traceState"`
-	QueryOrder        QueryOrder  `json:"queryOrder"`
-	Paging            *Pagination `json:"paging"`
-}
-
-type ContentType string
-
-const (
-	ContentTypeText ContentType = "TEXT"
-	ContentTypeJSON ContentType = "JSON"
-	ContentTypeNone ContentType = "NONE"
-)
-
-var AllContentType = []ContentType{
-	ContentTypeText,
-	ContentTypeJSON,
-	ContentTypeNone,
-}
-
-func (e ContentType) IsValid() bool {
-	switch e {
-	case ContentTypeText, ContentTypeJSON, ContentTypeNone:
-		return true
-	}
-	return false
-}
-
-func (e ContentType) String() string {
-	return string(e)
-}
-
-func (e *ContentType) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = ContentType(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid ContentType", str)
-	}
-	return nil
-}
-
-func (e ContentType) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type DetectPoint string
-
-const (
-	DetectPointClient DetectPoint = "CLIENT"
-	DetectPointServer DetectPoint = "SERVER"
-	DetectPointProxy  DetectPoint = "PROXY"
-)
-
-var AllDetectPoint = []DetectPoint{
-	DetectPointClient,
-	DetectPointServer,
-	DetectPointProxy,
-}
-
-func (e DetectPoint) IsValid() bool {
-	switch e {
-	case DetectPointClient, DetectPointServer, DetectPointProxy:
-		return true
-	}
-	return false
-}
-
-func (e DetectPoint) String() string {
-	return string(e)
-}
-
-func (e *DetectPoint) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = DetectPoint(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid DetectPoint", str)
-	}
-	return nil
-}
-
-func (e DetectPoint) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type Language string
-
-const (
-	LanguageUnknown Language = "UNKNOWN"
-	LanguageJava    Language = "JAVA"
-	LanguageDotnet  Language = "DOTNET"
-	LanguageNodejs  Language = "NODEJS"
-	LanguagePython  Language = "PYTHON"
-	LanguageRuby    Language = "RUBY"
-)
-
-var AllLanguage = []Language{
-	LanguageUnknown,
-	LanguageJava,
-	LanguageDotnet,
-	LanguageNodejs,
-	LanguagePython,
-	LanguageRuby,
-}
-
-func (e Language) IsValid() bool {
-	switch e {
-	case LanguageUnknown, LanguageJava, LanguageDotnet, LanguageNodejs, LanguagePython, LanguageRuby:
-		return true
-	}
-	return false
-}
-
-func (e Language) String() string {
-	return string(e)
-}
-
-func (e *Language) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = Language(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid Language", str)
-	}
-	return nil
-}
-
-func (e Language) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type LogState string
-
-const (
-	LogStateAll     LogState = "ALL"
-	LogStateSuccess LogState = "SUCCESS"
-	LogStateError   LogState = "ERROR"
-)
-
-var AllLogState = []LogState{
-	LogStateAll,
-	LogStateSuccess,
-	LogStateError,
-}
-
-func (e LogState) IsValid() bool {
-	switch e {
-	case LogStateAll, LogStateSuccess, LogStateError:
-		return true
-	}
-	return false
-}
-
-func (e LogState) String() string {
-	return string(e)
-}
-
-func (e *LogState) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = LogState(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid LogState", str)
-	}
-	return nil
-}
-
-func (e LogState) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type NodeType string
-
-const (
-	NodeTypeService  NodeType = "SERVICE"
-	NodeTypeEndpoint NodeType = "ENDPOINT"
-	NodeTypeUser     NodeType = "USER"
-)
-
-var AllNodeType = []NodeType{
-	NodeTypeService,
-	NodeTypeEndpoint,
-	NodeTypeUser,
-}
-
-func (e NodeType) IsValid() bool {
-	switch e {
-	case NodeTypeService, NodeTypeEndpoint, NodeTypeUser:
-		return true
-	}
-	return false
-}
-
-func (e NodeType) String() string {
-	return string(e)
-}
-
-func (e *NodeType) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = NodeType(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid NodeType", str)
-	}
-	return nil
-}
-
-func (e NodeType) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type Order string
-
-const (
-	OrderAsc Order = "ASC"
-	OrderDes Order = "DES"
-)
-
-var AllOrder = []Order{
-	OrderAsc,
-	OrderDes,
-}
-
-func (e Order) IsValid() bool {
-	switch e {
-	case OrderAsc, OrderDes:
-		return true
-	}
-	return false
-}
-
-func (e Order) String() string {
-	return string(e)
-}
-
-func (e *Order) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = Order(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid Order", str)
-	}
-	return nil
-}
-
-func (e Order) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type QueryOrder string
-
-const (
-	QueryOrderByStartTime QueryOrder = "BY_START_TIME"
-	QueryOrderByDuration  QueryOrder = "BY_DURATION"
-)
-
-var AllQueryOrder = []QueryOrder{
-	QueryOrderByStartTime,
-	QueryOrderByDuration,
-}
-
-func (e QueryOrder) IsValid() bool {
-	switch e {
-	case QueryOrderByStartTime, QueryOrderByDuration:
-		return true
-	}
-	return false
-}
-
-func (e QueryOrder) String() string {
-	return string(e)
-}
-
-func (e *QueryOrder) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = QueryOrder(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid QueryOrder", str)
-	}
-	return nil
-}
-
-func (e QueryOrder) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type RefType string
-
-const (
-	RefTypeCrossProcess RefType = "CROSS_PROCESS"
-	RefTypeCrossThread  RefType = "CROSS_THREAD"
-)
-
-var AllRefType = []RefType{
-	RefTypeCrossProcess,
-	RefTypeCrossThread,
-}
-
-func (e RefType) IsValid() bool {
-	switch e {
-	case RefTypeCrossProcess, RefTypeCrossThread:
-		return true
-	}
-	return false
-}
-
-func (e RefType) String() string {
-	return string(e)
-}
-
-func (e *RefType) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = RefType(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid RefType", str)
-	}
-	return nil
-}
-
-func (e RefType) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type Scope string
-
-const (
-	ScopeService                 Scope = "Service"
-	ScopeServiceInstance         Scope = "ServiceInstance"
-	ScopeEndpoint                Scope = "Endpoint"
-	ScopeServiceRelation         Scope = "ServiceRelation"
-	ScopeServiceInstanceRelation Scope = "ServiceInstanceRelation"
-	ScopeEndpointRelation        Scope = "EndpointRelation"
-)
-
-var AllScope = []Scope{
-	ScopeService,
-	ScopeServiceInstance,
-	ScopeEndpoint,
-	ScopeServiceRelation,
-	ScopeServiceInstanceRelation,
-	ScopeEndpointRelation,
-}
-
-func (e Scope) IsValid() bool {
-	switch e {
-	case ScopeService,
-		ScopeServiceInstance,
-		ScopeEndpoint,
-		ScopeServiceRelation,
-		ScopeServiceInstanceRelation,
-		ScopeEndpointRelation:
-		return true
-	}
-	return false
-}
-
-func (e Scope) String() string {
-	return string(e)
-}
-
-func (e *Scope) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = Scope(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid Scope", str)
-	}
-	return nil
-}
-
-func (e Scope) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type Step string
-
-const (
-	StepMonth  Step = "MONTH"
-	StepDay    Step = "DAY"
-	StepHour   Step = "HOUR"
-	StepMinute Step = "MINUTE"
-	StepSecond Step = "SECOND"
-)
-
-var AllStep = []Step{
-	StepMonth,
-	StepDay,
-	StepHour,
-	StepMinute,
-	StepSecond,
-}
-
-func (e Step) IsValid() bool {
-	switch e {
-	case StepMonth, StepDay, StepHour, StepMinute, StepSecond:
-		return true
-	}
-	return false
-}
-
-func (e Step) String() string {
-	return string(e)
-}
-
-func (e *Step) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = Step(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid Step", str)
-	}
-	return nil
-}
-
-func (e Step) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
-
-type TraceState string
-
-const (
-	TraceStateAll     TraceState = "ALL"
-	TraceStateSuccess TraceState = "SUCCESS"
-	TraceStateError   TraceState = "ERROR"
-)
-
-var AllTraceState = []TraceState{
-	TraceStateAll,
-	TraceStateSuccess,
-	TraceStateError,
-}
-
-func (e TraceState) IsValid() bool {
-	switch e {
-	case TraceStateAll, TraceStateSuccess, TraceStateError:
-		return true
-	}
-	return false
-}
-
-func (e TraceState) String() string {
-	return string(e)
-}
-
-func (e *TraceState) UnmarshalGQL(v interface{}) error {
-	str, ok := v.(string)
-	if !ok {
-		return fmt.Errorf("enums must be strings")
-	}
-
-	*e = TraceState(str)
-	if !e.IsValid() {
-		return fmt.Errorf("%s is not a valid TraceState", str)
-	}
-	return nil
-}
-
-func (e TraceState) MarshalGQL(w io.Writer) {
-	fmt.Fprint(w, strconv.Quote(e.String()))
-}
diff --git a/query-protocol b/query-protocol
new file mode 160000
index 0000000..8c9a8c4
--- /dev/null
+++ b/query-protocol
@@ -0,0 +1 @@
+Subproject commit 8c9a8c45b9dbe954efa6de50202d05b1ef8e6be2