From 0bee08c542c939c3f85c760326f673540f4906c1 Mon Sep 17 00:00:00 2001 From: Minoru Osuka Date: Wed, 28 Aug 2019 20:12:41 +0900 Subject: [PATCH] Add swagger specification experimentaly --- Makefile | 6 +- go.mod | 21 +- go.sum | 21 + protobuf/distribute/distribute.swagger.json | 362 +++++++++++++ protobuf/index/index.swagger.json | 557 ++++++++++++++++++++ protobuf/management/management.pb.go | 159 +++--- protobuf/management/management.proto | 10 + protobuf/management/management.swagger.json | 409 ++++++++++++++ 8 files changed, 1459 insertions(+), 86 deletions(-) create mode 100644 protobuf/distribute/distribute.swagger.json create mode 100644 protobuf/index/index.swagger.json create mode 100644 protobuf/management/management.swagger.json diff --git a/Makefile b/Makefile index c77e6f4..f017c30 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,9 @@ endif protoc: @echo ">> generating proto3 code" @echo " GRPC_GATEWAY_PATH = $(GRPC_GATEWAY_PATH)" - @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --go_out=plugins=grpc:$(GOPATH)/src $$proto_dir/*.proto || exit 1; done - @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --grpc-gateway_out=logtostderr=true,allow_delete_body=true:$(GOPATH)/src $$proto_dir/*.proto || exit 1; done -# @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --swagger_out=logtostderr=true,allow_delete_body=true:. $$proto_dir/*.proto || exit 1; done + @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH} --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --go_out=plugins=grpc:$(GOPATH)/src $$proto_dir/*.proto || exit 1; done + @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH} --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --grpc-gateway_out=logtostderr=true,allow_delete_body=true:$(GOPATH)/src $$proto_dir/*.proto || exit 1; done + @for proto_dir in $(PROTOBUFS); do echo $$proto_dir; protoc --proto_path=. --proto_path=${GRPC_GATEWAY_PATH} --proto_path=${GRPC_GATEWAY_PATH}/third_party/googleapis --proto_path=$$proto_dir --swagger_out=logtostderr=true,allow_delete_body=true:. $$proto_dir/*.proto || exit 1; done .PHONY: format format: diff --git a/go.mod b/go.mod index 99b2de5..2adb2ee 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/mosuka/blast go 1.12 require ( - cloud.google.com/go v0.43.0 // indirect + cloud.google.com/go v0.44.3 // indirect github.com/blevesearch/bleve v0.7.0 github.com/blevesearch/blevex v0.0.0-20180227211930-4b158bb555a3 // indirect github.com/blevesearch/cld2 v0.0.0-20150916130542-10f17c049ec9 // indirect @@ -24,7 +24,7 @@ require ( github.com/gorilla/mux v1.7.0 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/grpc-ecosystem/grpc-gateway v1.9.5 + github.com/grpc-ecosystem/grpc-gateway v1.9.6 github.com/hashicorp/golang-lru v0.5.3 // indirect github.com/hashicorp/raft v1.1.0 github.com/hashicorp/raft-boltdb v0.0.0-20190605210249-ef2e128ed477 @@ -42,6 +42,7 @@ require ( github.com/prometheus/procfs v0.0.0-20190322151404-55ae3d9d5573 // indirect github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001 // indirect github.com/rogpeppe/fastuuid v1.2.0 // indirect + github.com/rogpeppe/go-internal v1.3.1 // indirect github.com/stretchr/objx v0.1.1 github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tebeka/snowball v0.0.0-20130405174319-16e884df4e19 // indirect @@ -50,13 +51,15 @@ require ( go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 - golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect - golang.org/x/mobile v0.0.0-20190806162312-597adff16ade // indirect - golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect - golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa // indirect - golang.org/x/tools v0.0.0-20190808195139-e713427fea3f // indirect - google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 - google.golang.org/grpc v1.22.1 + golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 // indirect + golang.org/x/image v0.0.0-20190823064033-3a9bac650e44 // indirect + golang.org/x/mobile v0.0.0-20190826170111-cafc553e1ac5 // indirect + golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect + golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 // indirect + golang.org/x/tools v0.0.0-20190827205025-b29f5f60c37a // indirect + google.golang.org/api v0.9.0 // indirect + google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 + google.golang.org/grpc v1.23.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.2.2 honnef.co/go/tools v0.0.1-2019.2.2 // indirect diff --git a/go.sum b/go.sum index c57d73c..1fe5def 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,9 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= @@ -116,6 +119,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.6 h1:8p0pcgLlw2iuZVsdHdPaMUXFOA+6gDixcXbHEMzSyW8= +github.com/grpc-ecosystem/grpc-gateway v1.9.6/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v0.9.1 h1:9PZfAcVEvez4yhLH2TBU64/h/z4xlFI80cWXRrxuKuM= github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= @@ -206,6 +211,7 @@ github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001/go.mod h1:qq github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= @@ -248,11 +254,13 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190823064033-3a9bac650e44/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -260,6 +268,7 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190806162312-597adff16ade/go.mod h1:AlhUtkH4DA4asiFC5RgK7ZKmauvtkAVcy9L0epCzlWo= +golang.org/x/mobile v0.0.0-20190826170111-cafc553e1ac5/go.mod h1:mJOp/i0LXPxJZ9weeIadcPqKVfS05Ai7m6/t9z1Hs/Y= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -279,6 +288,8 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -304,6 +315,8 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa h1:KIDDMLT1O0Nr7TSxp8xM5tJcdn8tgyAONntO829og1M= golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -324,9 +337,13 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190827205025-b29f5f60c37a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/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= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -339,11 +356,15 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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.22.1 h1:/7cs52RnTJmD43s3uxzlq2U7nqVTd/37viQwMrMNlOM= google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/protobuf/distribute/distribute.swagger.json b/protobuf/distribute/distribute.swagger.json new file mode 100644 index 0000000..8ddf64d --- /dev/null +++ b/protobuf/distribute/distribute.swagger.json @@ -0,0 +1,362 @@ +{ + "swagger": "2.0", + "info": { + "title": "protobuf/distribute/distribute.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/bulk": { + "delete": { + "operationId": "BulkDelete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/distributeBulkDeleteResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/distributeBulkDeleteRequest" + } + } + ], + "tags": [ + "Distribute" + ] + }, + "put": { + "operationId": "BulkIndex", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/distributeBulkIndexResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/distributeBulkIndexRequest" + } + } + ], + "tags": [ + "Distribute" + ] + } + }, + "/v1/documents": { + "put": { + "operationId": "Index", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/distributeIndexRequest" + } + } + ], + "tags": [ + "Distribute" + ] + } + }, + "/v1/documents/{id}": { + "get": { + "operationId": "Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/distributeGetResponse" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Distribute" + ] + }, + "delete": { + "operationId": "Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Distribute" + ] + }, + "put": { + "operationId": "Index2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/distributeIndexRequest" + } + } + ], + "tags": [ + "Distribute" + ] + } + }, + "/v1/node/healthcheck": { + "get": { + "operationId": "NodeHealthCheck", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/distributeNodeHealthCheckResponse" + } + } + }, + "parameters": [ + { + "name": "probe", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + } + ], + "tags": [ + "Distribute" + ] + } + }, + "/v1/search": { + "post": { + "operationId": "Search", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/distributeSearchResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/distributeSearchRequest" + } + } + ], + "tags": [ + "Distribute" + ] + } + } + }, + "definitions": { + "distributeBulkDeleteRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "distributeBulkDeleteResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "distributeBulkIndexRequest": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "$ref": "#/definitions/indexDocument" + } + } + } + }, + "distributeBulkIndexResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "distributeGetResponse": { + "type": "object", + "properties": { + "fields": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "distributeIndexRequest": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "fields": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "distributeNodeHealthCheckRequestProbe": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + }, + "distributeNodeHealthCheckResponse": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/distributeNodeHealthCheckResponseState" + } + } + }, + "distributeNodeHealthCheckResponseState": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHY", + "UNHEALTHY", + "ALIVE", + "DEAD", + "READY", + "NOT_READY" + ], + "default": "UNKNOWN" + }, + "distributeSearchRequest": { + "type": "object", + "properties": { + "search_request": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "distributeSearchResponse": { + "type": "object", + "properties": { + "search_result": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "indexDocument": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "fields": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } + } +} diff --git a/protobuf/index/index.swagger.json b/protobuf/index/index.swagger.json new file mode 100644 index 0000000..5d96593 --- /dev/null +++ b/protobuf/index/index.swagger.json @@ -0,0 +1,557 @@ +{ + "swagger": "2.0", + "info": { + "title": "protobuf/index/index.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/bulk": { + "delete": { + "operationId": "BulkDelete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexBulkDeleteResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/indexBulkDeleteRequest" + } + } + ], + "tags": [ + "Index" + ] + }, + "put": { + "operationId": "BulkIndex", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexBulkIndexResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/indexBulkIndexRequest" + } + } + ], + "tags": [ + "Index" + ] + } + }, + "/v1/cluster/status": { + "get": { + "operationId": "ClusterInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexClusterInfoResponse" + } + } + }, + "tags": [ + "Index" + ] + } + }, + "/v1/documents": { + "put": { + "operationId": "Index", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/indexIndexRequest" + } + } + ], + "tags": [ + "Index" + ] + } + }, + "/v1/documents/{id}": { + "get": { + "operationId": "Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexGetResponse" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Index" + ] + }, + "delete": { + "operationId": "Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Index" + ] + }, + "put": { + "operationId": "Index2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/indexIndexRequest" + } + } + ], + "tags": [ + "Index" + ] + } + }, + "/v1/node/healthcheck": { + "get": { + "operationId": "NodeHealthCheck", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexNodeHealthCheckResponse" + } + } + }, + "parameters": [ + { + "name": "probe", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + } + ], + "tags": [ + "Index" + ] + } + }, + "/v1/node/status": { + "get": { + "operationId": "NodeInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexNodeInfoResponse" + } + } + }, + "tags": [ + "Index" + ] + } + }, + "/v1/search": { + "post": { + "operationId": "Search", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/indexSearchResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/indexSearchRequest" + } + } + ], + "tags": [ + "Index" + ] + } + } + }, + "definitions": { + "NodeHealthCheckRequestProbe": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + }, + "indexBulkDeleteRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "indexBulkDeleteResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "indexBulkIndexRequest": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "$ref": "#/definitions/indexDocument" + } + } + } + }, + "indexBulkIndexResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "indexCluster": { + "type": "object", + "properties": { + "nodes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/indexNode" + } + } + } + }, + "indexClusterInfoResponse": { + "type": "object", + "properties": { + "cluster": { + "$ref": "#/definitions/indexCluster" + } + } + }, + "indexClusterWatchResponse": { + "type": "object", + "properties": { + "event": { + "$ref": "#/definitions/indexClusterWatchResponseEvent" + }, + "node": { + "$ref": "#/definitions/indexNode" + }, + "cluster": { + "$ref": "#/definitions/indexCluster" + } + } + }, + "indexClusterWatchResponseEvent": { + "type": "string", + "enum": [ + "UNKNOWN", + "JOIN", + "LEAVE", + "UPDATE" + ], + "default": "UNKNOWN" + }, + "indexDocument": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "fields": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "indexGetIndexConfigResponse": { + "type": "object", + "properties": { + "index_config": { + "$ref": "#/definitions/indexIndexConfig" + } + } + }, + "indexGetIndexStatsResponse": { + "type": "object", + "properties": { + "index_stats": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "indexGetResponse": { + "type": "object", + "properties": { + "fields": { + "$ref": "#/definitions/protobufAny", + "title": "Document document = 1;" + } + } + }, + "indexIndexConfig": { + "type": "object", + "properties": { + "index_mapping": { + "$ref": "#/definitions/protobufAny" + }, + "index_type": { + "type": "string" + }, + "index_storage_type": { + "type": "string" + } + } + }, + "indexIndexRequest": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "fields": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "indexMetadata": { + "type": "object", + "properties": { + "grpc_address": { + "type": "string" + }, + "grpc_gateway_address": { + "type": "string" + }, + "http_address": { + "type": "string" + } + } + }, + "indexNode": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "bind_address": { + "type": "string" + }, + "state": { + "$ref": "#/definitions/indexNodeState" + }, + "metadata": { + "$ref": "#/definitions/indexMetadata" + } + } + }, + "indexNodeHealthCheckResponse": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/indexNodeHealthCheckResponseState" + } + } + }, + "indexNodeHealthCheckResponseState": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHY", + "UNHEALTHY", + "ALIVE", + "DEAD", + "READY", + "NOT_READY" + ], + "default": "UNKNOWN" + }, + "indexNodeInfoResponse": { + "type": "object", + "properties": { + "node": { + "$ref": "#/definitions/indexNode" + } + } + }, + "indexNodeState": { + "type": "string", + "enum": [ + "UNKNOWN", + "FOLLOWER", + "CANDIDATE", + "LEADER", + "SHUTDOWN" + ], + "default": "UNKNOWN" + }, + "indexSearchRequest": { + "type": "object", + "properties": { + "search_request": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "indexSearchResponse": { + "type": "object", + "properties": { + "search_result": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeStreamError": { + "type": "object", + "properties": { + "grpc_code": { + "type": "integer", + "format": "int32" + }, + "http_code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "http_status": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + }, + "x-stream-definitions": { + "indexClusterWatchResponse": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/indexClusterWatchResponse" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of indexClusterWatchResponse" + } + } +} diff --git a/protobuf/management/management.pb.go b/protobuf/management/management.pb.go index 430c2e5..40577fb 100644 --- a/protobuf/management/management.pb.go +++ b/protobuf/management/management.pb.go @@ -9,6 +9,7 @@ import ( proto "github.com/golang/protobuf/proto" any "github.com/golang/protobuf/ptypes/any" empty "github.com/golang/protobuf/ptypes/empty" + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -758,6 +759,15 @@ func (m *GetRequest) GetKey() string { } type GetResponse struct { + // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + // json_schema: { + // required: ["value"] + // }, + // example: { + // value: '{ "fields": { "field1": "Get Example", "field2": "This is an example Get response." } }' + // } + // }; + // google.protobuf.Any value = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {type: 6}]; Value *any.Any `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1064,82 +1074,83 @@ func init() { } var fileDescriptor_5e030ad796566078 = []byte{ - // 1193 bytes of a gzipped FileDescriptorProto + // 1213 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcd, 0x72, 0xda, 0x56, 0x14, 0x8e, 0x10, 0x18, 0x7c, 0x20, 0xb1, 0x72, 0xcd, 0xf8, 0x87, 0x7a, 0x52, 0x5b, 0x4d, 0x33, - 0xae, 0xd3, 0x80, 0xe3, 0xb6, 0x33, 0xa9, 0xfb, 0x4b, 0x2c, 0xd5, 0xc6, 0x26, 0xe0, 0x0a, 0x6c, - 0x8f, 0xbb, 0xf1, 0x5c, 0xe0, 0x06, 0x18, 0x40, 0xa2, 0xe8, 0xe2, 0x96, 0xe9, 0x74, 0x93, 0x6d, - 0x97, 0xdd, 0xf6, 0x3d, 0xba, 0xc8, 0x63, 0xf4, 0x05, 0xba, 0xe8, 0x74, 0xd3, 0x97, 0xe8, 0xdc, - 0x1f, 0xc9, 0x12, 0x16, 0xb6, 0xdb, 0x9d, 0x74, 0xce, 0x77, 0xbe, 0xf3, 0x9d, 0x73, 0x8f, 0xce, - 0x05, 0x78, 0x3c, 0x1c, 0x39, 0xd4, 0x69, 0x8c, 0x5f, 0x17, 0x06, 0xd8, 0xc6, 0x6d, 0x32, 0x20, - 0x36, 0x0d, 0x3c, 0xe6, 0xb9, 0x1b, 0xc1, 0x95, 0x25, 0xb7, 0xda, 0x76, 0x9c, 0x76, 0x9f, 0x14, - 0xfc, 0x40, 0x6c, 0x4f, 0x04, 0x2c, 0xf7, 0xce, 0xb4, 0x8b, 0x0c, 0x86, 0xd4, 0x73, 0xae, 0x49, - 0x27, 0x1e, 0x76, 0x0b, 0xd8, 0xb6, 0x1d, 0x8a, 0x69, 0xd7, 0xb1, 0x5d, 0xe1, 0xd5, 0x7f, 0x53, - 0x60, 0xa9, 0xe2, 0xb4, 0xc8, 0x01, 0xc1, 0x7d, 0xda, 0xd9, 0xeb, 0x90, 0x66, 0xcf, 0x22, 0xdf, - 0x8f, 0x89, 0x4b, 0xd1, 0x97, 0x90, 0x18, 0x8e, 0x9c, 0x06, 0x59, 0x51, 0xd6, 0x95, 0xcd, 0x07, - 0x3b, 0x9b, 0xf9, 0x80, 0xbc, 0xe8, 0x90, 0xfc, 0x31, 0xc3, 0x5b, 0x22, 0x4c, 0x7f, 0x09, 0x09, - 0xfe, 0x8e, 0xd2, 0x90, 0x3c, 0xa9, 0x1c, 0x55, 0xaa, 0x67, 0x15, 0xed, 0x1e, 0x5a, 0x80, 0xf4, - 0x81, 0x59, 0x2c, 0xd7, 0x0f, 0x4a, 0x15, 0xb3, 0x56, 0xd3, 0x14, 0x94, 0x81, 0x54, 0xb9, 0x74, - 0x6a, 0xf2, 0xb7, 0x18, 0xba, 0x0f, 0xf3, 0x96, 0x59, 0x34, 0x84, 0x53, 0xd5, 0xdf, 0x2a, 0xb0, - 0x7c, 0x2d, 0x97, 0x3b, 0x74, 0x6c, 0x97, 0xa0, 0xaf, 0x20, 0xe1, 0x52, 0x4c, 0x3d, 0x7d, 0x1f, - 0xdc, 0xa8, 0x4f, 0xc4, 0xe4, 0x6b, 0x2c, 0xc0, 0x12, 0x71, 0xfa, 0x05, 0x24, 0xf8, 0x7b, 0x58, - 0x60, 0x1a, 0x92, 0x42, 0xe0, 0xb9, 0xa6, 0x30, 0x39, 0x27, 0x15, 0xef, 0x35, 0x86, 0xe6, 0x21, - 0x51, 0x64, 0x62, 0x35, 0x15, 0xa5, 0x20, 0x6e, 0x98, 0x45, 0x43, 0x8b, 0x33, 0x23, 0x93, 0x7c, - 0xae, 0x25, 0x18, 0xbc, 0x52, 0xad, 0x5f, 0x88, 0xd7, 0x39, 0xfd, 0x8d, 0x02, 0xa9, 0x57, 0x84, - 0xe2, 0x16, 0xa6, 0x18, 0x6d, 0x40, 0xa6, 0x3d, 0x1a, 0x36, 0x2f, 0x70, 0xab, 0x35, 0x22, 0xae, - 0xcb, 0x55, 0xcf, 0x5b, 0x69, 0x66, 0x2b, 0x0a, 0x13, 0xda, 0x86, 0x2c, 0x87, 0xb4, 0x31, 0x25, - 0x3f, 0xe0, 0x89, 0x0f, 0x8d, 0x71, 0x28, 0x62, 0xbe, 0x7d, 0xe1, 0xf2, 0x22, 0x36, 0x20, 0xd3, - 0xa1, 0x74, 0xe8, 0x23, 0x55, 0x41, 0xca, 0x6c, 0x12, 0xa2, 0xff, 0xad, 0x40, 0x9c, 0xb5, 0x03, - 0x3d, 0x80, 0x58, 0xb7, 0x25, 0xd3, 0xc6, 0xba, 0x2d, 0x16, 0xdb, 0xe8, 0xda, 0xad, 0xa9, 0x2c, - 0x69, 0x66, 0xf3, 0xe8, 0x3f, 0xf4, 0x5a, 0xac, 0xf2, 0x16, 0x2f, 0x4d, 0xb7, 0x38, 0xd4, 0x4f, - 0xb4, 0x0d, 0xa9, 0x81, 0xac, 0x76, 0x25, 0xbe, 0xae, 0x6c, 0xa6, 0x77, 0xb2, 0xc1, 0x00, 0xaf, - 0x13, 0x96, 0x8f, 0xd2, 0x8f, 0x22, 0x4f, 0x20, 0x03, 0xa9, 0x6f, 0xaa, 0xe5, 0x72, 0xf5, 0xcc, - 0xb4, 0xc4, 0x11, 0xec, 0x15, 0x2b, 0x46, 0xc9, 0x28, 0xd6, 0x4d, 0x2d, 0x86, 0x00, 0xe6, 0xca, - 0x66, 0xd1, 0x30, 0x2d, 0x4d, 0x65, 0xc0, 0xda, 0xc1, 0x49, 0xdd, 0x60, 0x61, 0x71, 0xfd, 0x17, - 0x05, 0x92, 0x7b, 0xfd, 0xb1, 0x4b, 0xc9, 0x08, 0x7d, 0x0c, 0x09, 0xdb, 0x69, 0x11, 0xd6, 0x65, - 0x75, 0x33, 0xbd, 0xf3, 0x28, 0xa8, 0x43, 0x62, 0x78, 0x01, 0xae, 0x69, 0xd3, 0xd1, 0xc4, 0x12, - 0xe0, 0xdc, 0x21, 0xc0, 0x95, 0x11, 0x69, 0xa0, 0xf6, 0xc8, 0x44, 0x36, 0x8c, 0x3d, 0xa2, 0x27, - 0x90, 0xb8, 0xc4, 0xfd, 0x31, 0xe1, 0xad, 0x4a, 0xef, 0x68, 0xd3, 0xed, 0xb0, 0x84, 0x7b, 0x37, - 0xf6, 0x42, 0xd1, 0x5f, 0x80, 0xc6, 0x4c, 0x25, 0xfb, 0xb5, 0xe3, 0x4f, 0xec, 0x63, 0x88, 0xb3, - 0x44, 0x9c, 0x32, 0x2a, 0x9c, 0x7b, 0xf5, 0x5d, 0x40, 0x52, 0xe2, 0xa1, 0xd3, 0xb5, 0xbd, 0xaf, - 0xf1, 0x6e, 0xb1, 0xef, 0xc3, 0xa2, 0x8c, 0x2d, 0x13, 0x7c, 0x49, 0xbc, 0xe0, 0xa9, 0xa3, 0xd7, - 0x0d, 0x1f, 0x16, 0xd2, 0xf7, 0x0c, 0x92, 0x4d, 0x61, 0x96, 0x69, 0x16, 0x23, 0xfa, 0x66, 0x79, - 0x18, 0xfd, 0x4f, 0x05, 0xb2, 0xd2, 0x78, 0x86, 0x69, 0xb3, 0xe3, 0xf3, 0x7c, 0x0e, 0x09, 0x72, - 0x49, 0x6c, 0x2a, 0xbf, 0xcc, 0x27, 0x11, 0x2c, 0xa1, 0x80, 0xbc, 0xc9, 0xd0, 0x96, 0x08, 0xf2, - 0x2b, 0x8d, 0xdd, 0x54, 0x69, 0x50, 0xab, 0x7a, 0x07, 0xad, 0x9f, 0x40, 0x82, 0x27, 0x09, 0x4f, - 0x5a, 0x0a, 0xe2, 0x87, 0xd5, 0x52, 0x45, 0x53, 0xd8, 0x47, 0x5c, 0x36, 0x8b, 0xa7, 0x72, 0xc2, - 0x4e, 0x8e, 0xf9, 0xb4, 0xa9, 0xfa, 0x01, 0xa4, 0x8e, 0xc8, 0xe4, 0x94, 0x9d, 0x6a, 0xc4, 0x3c, - 0x6c, 0x85, 0xe7, 0x21, 0x9b, 0x17, 0xab, 0x36, 0xef, 0xed, 0xe1, 0x7c, 0xd1, 0x9e, 0xc8, 0x99, - 0xd0, 0x1f, 0x01, 0xec, 0x13, 0xea, 0x1d, 0xc8, 0x35, 0x2e, 0xfd, 0x53, 0x48, 0x73, 0xbf, 0x6c, - 0xa1, 0x4f, 0xad, 0xdc, 0x4e, 0x7d, 0x08, 0x50, 0xbb, 0x81, 0xfa, 0x3f, 0xc9, 0xdc, 0x80, 0xfb, - 0x06, 0xe9, 0x13, 0x4a, 0x66, 0x2b, 0x5d, 0x87, 0x8c, 0x3c, 0xbd, 0x59, 0x88, 0xdf, 0x15, 0xb8, - 0x1f, 0x9e, 0x88, 0xcf, 0x20, 0xd9, 0x74, 0x06, 0x03, 0x6c, 0xb7, 0xe4, 0x4c, 0x6c, 0x04, 0x4f, - 0x2b, 0x3c, 0x0c, 0x7b, 0x02, 0x68, 0x79, 0x11, 0x5e, 0x82, 0x58, 0x44, 0x45, 0xea, 0xed, 0x15, - 0x3d, 0x85, 0xa4, 0x64, 0x0c, 0x9f, 0x7d, 0x12, 0xd4, 0x9a, 0x59, 0xd7, 0x14, 0x76, 0xde, 0x86, - 0x59, 0x36, 0xd9, 0x76, 0xd1, 0xff, 0x51, 0x20, 0x75, 0x3c, 0x72, 0x86, 0x8e, 0x8b, 0xfb, 0x68, - 0x3b, 0x3c, 0xc6, 0xb9, 0xa0, 0x64, 0x0f, 0xf4, 0x7f, 0x46, 0xf7, 0x39, 0xcc, 0xf7, 0xc8, 0xe4, - 0x22, 0x5c, 0x41, 0x00, 0xea, 0x4d, 0x9c, 0x95, 0xea, 0xc9, 0x27, 0xbd, 0x1e, 0x39, 0xbe, 0x6c, - 0xff, 0x99, 0xf5, 0x8b, 0x4a, 0xd5, 0x30, 0x35, 0x85, 0xdd, 0xac, 0xa2, 0x0e, 0x61, 0xe0, 0x77, - 0x29, 0x73, 0x9f, 0x16, 0xcb, 0x27, 0xec, 0xc6, 0xd2, 0x20, 0x23, 0xfd, 0xc2, 0x12, 0xdf, 0x79, - 0x9b, 0x04, 0x78, 0xe5, 0xe7, 0x45, 0x3f, 0xc2, 0xc2, 0xd4, 0xbd, 0x89, 0xf4, 0xdb, 0x2f, 0xfd, - 0xdc, 0x7b, 0x77, 0xb8, 0x78, 0xf5, 0xb5, 0x37, 0x7f, 0xfc, 0xf5, 0x6b, 0x6c, 0x09, 0x65, 0x0b, - 0x97, 0xcf, 0x0b, 0xac, 0x0b, 0x85, 0x0e, 0x47, 0x35, 0x79, 0x9a, 0x73, 0x48, 0x79, 0xcb, 0x12, - 0x2d, 0x5d, 0x3b, 0x4c, 0x93, 0xfd, 0x9a, 0xc9, 0xad, 0x4d, 0xa7, 0x09, 0xae, 0x2e, 0x7d, 0x99, - 0xf3, 0x3f, 0x44, 0x0b, 0x3e, 0x3f, 0xbb, 0x93, 0xc6, 0x2e, 0xda, 0x87, 0x74, 0x60, 0x9b, 0xa2, - 0xa8, 0x9b, 0x20, 0xb0, 0x66, 0x73, 0x33, 0xb2, 0xeb, 0xf7, 0x50, 0x09, 0x32, 0xc1, 0xd5, 0x8a, - 0xde, 0x8d, 0x60, 0x0a, 0x2e, 0xdd, 0x1b, 0xa8, 0x1a, 0xbe, 0xa6, 0x1b, 0x2b, 0x8e, 0xca, 0x10, - 0x2a, 0x3a, 0xc7, 0x8b, 0xce, 0x22, 0xc4, 0x8a, 0x96, 0x9b, 0xce, 0xab, 0xbb, 0xec, 0xcb, 0xe5, - 0x5f, 0xd7, 0xcc, 0x24, 0xeb, 0xb7, 0x2d, 0x67, 0xfd, 0xde, 0xb6, 0x82, 0xbe, 0x05, 0x75, 0x9f, - 0x50, 0x14, 0xfa, 0x01, 0x70, 0xb5, 0xce, 0x72, 0xcb, 0xd7, 0xec, 0x32, 0x76, 0x95, 0x2b, 0x5c, - 0x44, 0x0f, 0x99, 0x42, 0x76, 0xe5, 0x17, 0x7e, 0xea, 0x91, 0xc9, 0x17, 0x5b, 0x5b, 0x3f, 0xa3, - 0x1a, 0xa8, 0xb5, 0x69, 0xca, 0xab, 0x35, 0x36, 0xb3, 0x7b, 0x72, 0x90, 0x72, 0xd7, 0x19, 0x77, - 0x95, 0x2d, 0x74, 0x0a, 0x73, 0x62, 0x7d, 0xa1, 0xd5, 0x20, 0x6f, 0x68, 0xa5, 0xcd, 0xa4, 0x96, - 0x62, 0xb7, 0x22, 0xc4, 0x7e, 0x0d, 0x09, 0xd1, 0xc6, 0x95, 0x88, 0xbd, 0x25, 0x58, 0x57, 0x67, - 0x6e, 0x34, 0xde, 0xc1, 0x63, 0x48, 0xd5, 0x6c, 0x3c, 0x74, 0x3b, 0x0e, 0x9d, 0x79, 0x16, 0xb3, - 0x84, 0x65, 0xb9, 0xb0, 0x07, 0x28, 0xc3, 0x84, 0xb9, 0x92, 0xe5, 0xe5, 0xb3, 0xef, 0x9e, 0xb6, - 0xbb, 0xb4, 0x33, 0x6e, 0xe4, 0x9b, 0xce, 0xa0, 0x30, 0x70, 0xdc, 0x71, 0x0f, 0x17, 0x1a, 0x7d, - 0xec, 0xd2, 0x42, 0xc4, 0x9f, 0x8b, 0xc6, 0x1c, 0x37, 0x7e, 0xf4, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x57, 0x7b, 0x42, 0x0c, 0x7a, 0x0c, 0x00, 0x00, + 0xae, 0x13, 0x83, 0xe3, 0xb6, 0x33, 0xa9, 0xfb, 0x4b, 0x8c, 0x6a, 0x63, 0x13, 0x70, 0x05, 0xb6, + 0xc7, 0xdd, 0x78, 0x2e, 0x70, 0x03, 0x0c, 0x20, 0x51, 0x74, 0x71, 0xca, 0x74, 0xba, 0xc9, 0xb6, + 0xcb, 0x6e, 0xfb, 0x1e, 0x5d, 0xe4, 0x31, 0xfa, 0x02, 0x5d, 0x74, 0xba, 0xe9, 0x4b, 0x74, 0xee, + 0x8f, 0x64, 0x09, 0x84, 0xed, 0x76, 0x65, 0xe9, 0x9c, 0xef, 0x7c, 0xe7, 0x3b, 0xe7, 0x1e, 0x9d, + 0x8b, 0xe1, 0xf1, 0x60, 0x68, 0x53, 0xbb, 0x3e, 0x7a, 0x9d, 0xeb, 0x63, 0x0b, 0xb7, 0x48, 0x9f, + 0x58, 0xd4, 0xf7, 0x98, 0xe5, 0x6e, 0x04, 0xd7, 0x96, 0xcc, 0x6a, 0xcb, 0xb6, 0x5b, 0x3d, 0x92, + 0xf3, 0x02, 0xb1, 0x35, 0x16, 0xb0, 0xcc, 0x7b, 0x93, 0x2e, 0xd2, 0x1f, 0x50, 0xd7, 0xb9, 0x26, + 0x9d, 0x78, 0xd0, 0xc9, 0x61, 0xcb, 0xb2, 0x29, 0xa6, 0x1d, 0xdb, 0x72, 0xa4, 0xf7, 0x19, 0xff, + 0xd3, 0xd8, 0x6e, 0x11, 0x6b, 0xdb, 0x79, 0x83, 0x5b, 0x2d, 0x32, 0xcc, 0xd9, 0x03, 0x8e, 0x98, + 0x46, 0xeb, 0xbf, 0x29, 0xb0, 0x54, 0xb6, 0x9b, 0xe4, 0x90, 0xe0, 0x1e, 0x6d, 0xef, 0xb7, 0x49, + 0xa3, 0x6b, 0x92, 0x1f, 0x46, 0xc4, 0xa1, 0xe8, 0x2b, 0x88, 0x0d, 0x86, 0x76, 0x9d, 0xac, 0x28, + 0xeb, 0xca, 0xe6, 0x83, 0xdd, 0xcd, 0xac, 0xaf, 0x98, 0xf0, 0x90, 0xec, 0x09, 0xc3, 0x9b, 0x22, + 0x4c, 0x7f, 0x09, 0x31, 0xfe, 0x8e, 0x92, 0x10, 0x3f, 0x2d, 0x1f, 0x97, 0x2b, 0xe7, 0x65, 0xed, + 0x1e, 0x5a, 0x80, 0xe4, 0xa1, 0x91, 0x2f, 0xd5, 0x0e, 0x8b, 0x65, 0xa3, 0x5a, 0xd5, 0x14, 0x94, + 0x82, 0x44, 0xa9, 0x78, 0x66, 0xf0, 0xb7, 0x08, 0xba, 0x0f, 0xf3, 0xa6, 0x91, 0x2f, 0x08, 0xa7, + 0xaa, 0xbf, 0x53, 0x60, 0x79, 0x2a, 0x97, 0x33, 0xb0, 0x2d, 0x87, 0xa0, 0xaf, 0x21, 0xe6, 0x50, + 0x4c, 0x5d, 0x7d, 0x1f, 0xdd, 0xa8, 0x4f, 0xc4, 0x64, 0xab, 0x2c, 0xc0, 0x14, 0x71, 0xfa, 0x25, + 0xc4, 0xf8, 0x7b, 0x50, 0x60, 0x12, 0xe2, 0x42, 0xe0, 0x85, 0xa6, 0x30, 0x39, 0xa7, 0x65, 0xf7, + 0x35, 0x82, 0xe6, 0x21, 0x96, 0x67, 0x62, 0x35, 0x15, 0x25, 0x20, 0x5a, 0x30, 0xf2, 0x05, 0x2d, + 0xca, 0x8c, 0x4c, 0xf2, 0x85, 0x16, 0x63, 0xf0, 0x72, 0xa5, 0x76, 0x29, 0x5e, 0xe7, 0xf4, 0xb7, + 0x0a, 0x24, 0x5e, 0x11, 0x8a, 0x9b, 0x98, 0x62, 0xb4, 0x01, 0xa9, 0xd6, 0x70, 0xd0, 0xb8, 0xc4, + 0xcd, 0xe6, 0x90, 0x38, 0x0e, 0x57, 0x3d, 0x6f, 0x26, 0x99, 0x2d, 0x2f, 0x4c, 0x68, 0x07, 0xd2, + 0x1c, 0xd2, 0xc2, 0x94, 0xbc, 0xc1, 0x63, 0x0f, 0x1a, 0xe1, 0x50, 0xc4, 0x7c, 0x07, 0xc2, 0xe5, + 0x46, 0x6c, 0x40, 0xaa, 0x4d, 0xe9, 0xc0, 0x43, 0xaa, 0x82, 0x94, 0xd9, 0x24, 0x44, 0xff, 0x5b, + 0x81, 0x28, 0x6b, 0x07, 0x7a, 0x00, 0x91, 0x4e, 0x53, 0xa6, 0x8d, 0x74, 0x9a, 0x2c, 0xb6, 0xde, + 0xb1, 0x9a, 0x13, 0x59, 0x92, 0xcc, 0xe6, 0xd2, 0x3f, 0x73, 0x5b, 0xac, 0xf2, 0x16, 0x2f, 0x4d, + 0xb6, 0x38, 0xd0, 0x4f, 0xb4, 0x03, 0x89, 0xbe, 0xac, 0x76, 0x25, 0xba, 0xae, 0x6c, 0x26, 0x77, + 0xd3, 0xfe, 0x00, 0xb7, 0x13, 0xa6, 0x87, 0xd2, 0x8f, 0x43, 0x4f, 0x20, 0x05, 0x89, 0x6f, 0x2b, + 0xa5, 0x52, 0xe5, 0xdc, 0x30, 0xc5, 0x11, 0xec, 0xe7, 0xcb, 0x85, 0x62, 0x21, 0x5f, 0x33, 0xb4, + 0x08, 0x02, 0x98, 0x2b, 0x19, 0xf9, 0x82, 0x61, 0x6a, 0x2a, 0x03, 0x56, 0x0f, 0x4f, 0x6b, 0x05, + 0x16, 0x16, 0xd5, 0x7f, 0x51, 0x20, 0xbe, 0xdf, 0x1b, 0x39, 0x94, 0x0c, 0xd1, 0x27, 0x10, 0xb3, + 0xec, 0x26, 0x61, 0x5d, 0x56, 0x37, 0x93, 0xbb, 0x8f, 0xfc, 0x3a, 0x24, 0x86, 0x17, 0xe0, 0x18, + 0x16, 0x1d, 0x8e, 0x4d, 0x01, 0xce, 0x1c, 0x01, 0x5c, 0x1b, 0x91, 0x06, 0x6a, 0x97, 0x8c, 0x65, + 0xc3, 0xd8, 0x23, 0x7a, 0x02, 0xb1, 0x2b, 0xdc, 0x1b, 0x11, 0xde, 0xaa, 0xe4, 0xae, 0x36, 0xd9, + 0x0e, 0x53, 0xb8, 0xf7, 0x22, 0x2f, 0x14, 0xfd, 0x05, 0x68, 0xcc, 0x54, 0xb4, 0x5e, 0xdb, 0xde, + 0xc4, 0x3e, 0x86, 0x28, 0x4b, 0xc4, 0x29, 0xc3, 0xc2, 0xb9, 0x57, 0xdf, 0x03, 0x24, 0x25, 0x1e, + 0xd9, 0x1d, 0xcb, 0xfd, 0x1a, 0xef, 0x16, 0xfb, 0x21, 0x2c, 0xca, 0xd8, 0x12, 0xc1, 0x57, 0xc4, + 0x0d, 0x9e, 0x38, 0x7a, 0xbd, 0xe0, 0xc1, 0x02, 0xfa, 0xb6, 0x21, 0xde, 0x10, 0x66, 0x99, 0x66, + 0x31, 0xa4, 0x6f, 0xa6, 0x8b, 0xd1, 0xff, 0x54, 0x20, 0x2d, 0x8d, 0xe7, 0x98, 0x36, 0xda, 0x1e, + 0xcf, 0x17, 0x10, 0x23, 0x57, 0xc4, 0xa2, 0xf2, 0xcb, 0x7c, 0x12, 0xc2, 0x12, 0x08, 0xc8, 0x1a, + 0x0c, 0x6d, 0x8a, 0x20, 0xaf, 0xd2, 0xc8, 0x4d, 0x95, 0xfa, 0xb5, 0xaa, 0x77, 0xd0, 0xfa, 0x29, + 0xc4, 0x78, 0x92, 0xe0, 0xa4, 0x25, 0x20, 0x7a, 0x54, 0x29, 0x96, 0x35, 0x85, 0x7d, 0xc4, 0x25, + 0x23, 0x7f, 0x26, 0x27, 0xec, 0xf4, 0x84, 0x4f, 0x9b, 0xaa, 0x1f, 0x42, 0xe2, 0x98, 0x8c, 0xcf, + 0xd8, 0xa9, 0x86, 0xcc, 0xc3, 0x56, 0x70, 0x1e, 0xd2, 0x59, 0xb1, 0x98, 0xb3, 0xee, 0xd6, 0xce, + 0xe6, 0xad, 0xb1, 0x9c, 0x09, 0xfd, 0x11, 0xc0, 0x01, 0xa1, 0xee, 0x81, 0x4c, 0x71, 0xe9, 0x9f, + 0x41, 0x92, 0xfb, 0x65, 0x0b, 0x3d, 0x6a, 0xe5, 0x76, 0xea, 0x23, 0x80, 0xea, 0x0d, 0xd4, 0xff, + 0x49, 0xe6, 0x06, 0xdc, 0x2f, 0x90, 0x1e, 0xa1, 0x64, 0xb6, 0xd2, 0x75, 0x48, 0xc9, 0xd3, 0x9b, + 0x85, 0xf8, 0x5d, 0x81, 0xfb, 0xc1, 0x89, 0xf8, 0x1c, 0xe2, 0x0d, 0xbb, 0xdf, 0xc7, 0x56, 0x53, + 0xce, 0xc4, 0x86, 0xff, 0xb4, 0x82, 0xc3, 0xb0, 0x2f, 0x80, 0xa6, 0x1b, 0xe1, 0x26, 0x88, 0x84, + 0x54, 0xa4, 0xde, 0x5e, 0xd1, 0x53, 0x88, 0x4b, 0xc6, 0xe0, 0xd9, 0xc7, 0x41, 0xad, 0x1a, 0x35, + 0x4d, 0x61, 0xe7, 0x5d, 0x30, 0x4a, 0x06, 0xdb, 0x2e, 0xfa, 0x3f, 0x0a, 0x24, 0x4e, 0x86, 0xf6, + 0xc0, 0x76, 0x70, 0x0f, 0xed, 0x04, 0xc7, 0x38, 0xe3, 0x97, 0xec, 0x82, 0xfe, 0xcf, 0xe8, 0x3e, + 0x87, 0xf9, 0x2e, 0x19, 0x5f, 0x06, 0x2b, 0xf0, 0x41, 0xdd, 0x89, 0x33, 0x13, 0x5d, 0xf9, 0xa4, + 0xd7, 0x42, 0xc7, 0x97, 0xed, 0x3f, 0xa3, 0x76, 0x59, 0xae, 0x14, 0x0c, 0x4d, 0x61, 0x37, 0xab, + 0xa8, 0x43, 0x18, 0xf8, 0x5d, 0xca, 0xdc, 0x67, 0xf9, 0xd2, 0x29, 0xbb, 0xb1, 0x34, 0x48, 0x49, + 0xbf, 0xb0, 0x44, 0x77, 0xdf, 0xc5, 0x01, 0x5e, 0x79, 0x79, 0xd1, 0x8f, 0xb0, 0x30, 0x71, 0x6f, + 0x22, 0xfd, 0xf6, 0x4b, 0x3f, 0xf3, 0xc1, 0x1d, 0x2e, 0x5e, 0x7d, 0xed, 0xed, 0x1f, 0x7f, 0xfd, + 0x1a, 0x59, 0x42, 0xe9, 0xdc, 0xd5, 0xf3, 0x1c, 0xeb, 0x42, 0xae, 0xcd, 0x51, 0x0d, 0x9e, 0xe6, + 0x02, 0x12, 0xee, 0xb2, 0x44, 0x4b, 0x53, 0x87, 0x69, 0xb0, 0xdf, 0x3e, 0x99, 0xb5, 0xc9, 0x34, + 0xfe, 0xd5, 0xa5, 0x2f, 0x73, 0xfe, 0x87, 0x68, 0xc1, 0xe3, 0x67, 0x77, 0xd2, 0xc8, 0x41, 0x07, + 0x90, 0xf4, 0x6d, 0x53, 0x14, 0x76, 0x13, 0xf8, 0xd6, 0x6c, 0x66, 0x46, 0x76, 0xfd, 0x1e, 0x2a, + 0x42, 0xca, 0xbf, 0x5a, 0xd1, 0xfb, 0x21, 0x4c, 0xfe, 0xa5, 0x7b, 0x03, 0x55, 0xdd, 0xd3, 0x74, + 0x63, 0xc5, 0x61, 0x19, 0x02, 0x45, 0x67, 0x78, 0xd1, 0x69, 0x84, 0x58, 0xd1, 0x72, 0xd3, 0xb9, + 0x75, 0x97, 0x3c, 0xb9, 0xfc, 0xeb, 0x9a, 0x99, 0x64, 0xfd, 0xb6, 0xe5, 0xac, 0xdf, 0xdb, 0x51, + 0xd0, 0x77, 0xa0, 0x1e, 0x10, 0x8a, 0x02, 0x3f, 0x00, 0xae, 0xd7, 0x59, 0x66, 0x79, 0xca, 0x2e, + 0x63, 0x57, 0xb9, 0xc2, 0x45, 0xf4, 0x90, 0x29, 0x64, 0x57, 0x7e, 0xee, 0xa7, 0x2e, 0x19, 0x7f, + 0xb9, 0xb5, 0xf5, 0x33, 0xaa, 0x82, 0x5a, 0x9d, 0xa4, 0xbc, 0x5e, 0x63, 0x33, 0xbb, 0x27, 0x07, + 0x29, 0x33, 0xcd, 0xb8, 0xa7, 0x6c, 0xa1, 0x33, 0x98, 0x13, 0xeb, 0x0b, 0xad, 0xfa, 0x79, 0x03, + 0x2b, 0x6d, 0x26, 0xb5, 0x14, 0xbb, 0x15, 0x22, 0xf6, 0x1b, 0x88, 0x89, 0x36, 0xae, 0x84, 0xec, + 0x2d, 0xc1, 0xba, 0x3a, 0x73, 0xa3, 0xf1, 0x0e, 0x9e, 0x40, 0xa2, 0x6a, 0xe1, 0x81, 0xd3, 0xb6, + 0xe9, 0xcc, 0xb3, 0x98, 0x25, 0x2c, 0xcd, 0x85, 0x3d, 0x40, 0x29, 0x26, 0xcc, 0x91, 0x2c, 0x2f, + 0xb7, 0xbf, 0x7f, 0xda, 0xea, 0xd0, 0xf6, 0xa8, 0x9e, 0x6d, 0xd8, 0xfd, 0x5c, 0xdf, 0x76, 0x46, + 0x5d, 0x9c, 0xab, 0xf7, 0xb0, 0x43, 0x73, 0x21, 0xff, 0x8a, 0xd4, 0xe7, 0xb8, 0xf1, 0xe3, 0x7f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x28, 0xf6, 0xde, 0xbe, 0xa8, 0x0c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/protobuf/management/management.proto b/protobuf/management/management.proto index 621603b..e3c8429 100644 --- a/protobuf/management/management.proto +++ b/protobuf/management/management.proto @@ -17,6 +17,7 @@ syntax = "proto3"; import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/api/annotations.proto"; +import "protoc-gen-swagger/options/annotations.proto"; package management; @@ -152,6 +153,15 @@ message GetRequest { } message GetResponse { +// option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { +// json_schema: { +// required: ["value"] +// }, +// example: { +// value: '{ "fields": { "field1": "Get Example", "field2": "This is an example Get response." } }' +// } +// }; +// google.protobuf.Any value = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {type: 6}]; google.protobuf.Any value = 1; } diff --git a/protobuf/management/management.swagger.json b/protobuf/management/management.swagger.json new file mode 100644 index 0000000..18f1ed1 --- /dev/null +++ b/protobuf/management/management.swagger.json @@ -0,0 +1,409 @@ +{ + "swagger": "2.0", + "info": { + "title": "protobuf/management/management.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/cluster/status": { + "get": { + "operationId": "ClusterInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/managementClusterInfoResponse" + } + } + }, + "tags": [ + "Management" + ] + } + }, + "/v1/data/{key}": { + "get": { + "operationId": "Get", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/managementGetResponse" + } + } + }, + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Management" + ] + }, + "delete": { + "operationId": "Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Management" + ] + }, + "put": { + "operationId": "Set", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/managementSetRequest" + } + } + ], + "tags": [ + "Management" + ] + } + }, + "/v1/node/healthcheck": { + "get": { + "operationId": "NodeHealthCheck", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/managementNodeHealthCheckResponse" + } + } + }, + "parameters": [ + { + "name": "probe", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + } + ], + "tags": [ + "Management" + ] + } + }, + "/v1/node/status": { + "get": { + "operationId": "NodeInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/managementNodeInfoResponse" + } + } + }, + "tags": [ + "Management" + ] + } + }, + "/v1/snapshot": { + "get": { + "operationId": "Snapshot", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "tags": [ + "Management" + ] + } + } + }, + "definitions": { + "NodeHealthCheckRequestProbe": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHINESS", + "LIVENESS", + "READINESS" + ], + "default": "UNKNOWN" + }, + "WatchResponseCommand": { + "type": "string", + "enum": [ + "UNKNOWN", + "SET", + "DELETE" + ], + "default": "UNKNOWN" + }, + "managementCluster": { + "type": "object", + "properties": { + "nodes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/managementNode" + } + } + } + }, + "managementClusterInfoResponse": { + "type": "object", + "properties": { + "cluster": { + "$ref": "#/definitions/managementCluster" + } + } + }, + "managementClusterWatchResponse": { + "type": "object", + "properties": { + "event": { + "$ref": "#/definitions/managementClusterWatchResponseEvent" + }, + "node": { + "$ref": "#/definitions/managementNode" + }, + "cluster": { + "$ref": "#/definitions/managementCluster" + } + } + }, + "managementClusterWatchResponseEvent": { + "type": "string", + "enum": [ + "UNKNOWN", + "JOIN", + "LEAVE", + "UPDATE" + ], + "default": "UNKNOWN" + }, + "managementGetResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/protobufAny", + "title": "option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = {\n json_schema: {\n required: [\"value\"]\n },\n example: {\n value: '{ \"fields\": { \"field1\": \"Get Example\", \"field2\": \"This is an example Get response.\" } }'\n }\n };\n google.protobuf.Any value = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {type: 6}];" + } + } + }, + "managementMetadata": { + "type": "object", + "properties": { + "grpc_address": { + "type": "string" + }, + "grpc_gateway_address": { + "type": "string" + }, + "http_address": { + "type": "string" + } + } + }, + "managementNode": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "bind_address": { + "type": "string" + }, + "state": { + "$ref": "#/definitions/managementNodeState" + }, + "metadata": { + "$ref": "#/definitions/managementMetadata" + } + } + }, + "managementNodeHealthCheckResponse": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/managementNodeHealthCheckResponseState" + } + } + }, + "managementNodeHealthCheckResponseState": { + "type": "string", + "enum": [ + "UNKNOWN", + "HEALTHY", + "UNHEALTHY", + "ALIVE", + "DEAD", + "READY", + "NOT_READY" + ], + "default": "UNKNOWN" + }, + "managementNodeInfoResponse": { + "type": "object", + "properties": { + "node": { + "$ref": "#/definitions/managementNode" + } + } + }, + "managementNodeState": { + "type": "string", + "enum": [ + "UNKNOWN", + "FOLLOWER", + "CANDIDATE", + "LEADER", + "SHUTDOWN" + ], + "default": "UNKNOWN" + }, + "managementSetRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "managementWatchResponse": { + "type": "object", + "properties": { + "command": { + "$ref": "#/definitions/WatchResponseCommand" + }, + "key": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeStreamError": { + "type": "object", + "properties": { + "grpc_code": { + "type": "integer", + "format": "int32" + }, + "http_code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "http_status": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + }, + "x-stream-definitions": { + "managementClusterWatchResponse": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/managementClusterWatchResponse" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of managementClusterWatchResponse" + }, + "managementWatchResponse": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/managementWatchResponse" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of managementWatchResponse" + } + } +}