Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add gRPC protocol definition for necoperf #5

Merged
merged 2 commits into from
Sep 21, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@
# Generated files
/bin
/docs/book
/include
27 changes: 27 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@ BIN_DIR := $(shell pwd)/bin

# Tool versions
MDBOOK_VERSION = 0.4.27
PROTOC_VERSION = 24.2
PROTOC_GEN_GO_VERSION = 1.31.0
PROTOC_GEN_GO_GRPC_VERSION = 1.3.0
PROTOC_GEN_DOC_VERSION = 1.5.1
MDBOOK := $(BIN_DIR)/mdbook

# Test tools
PROTOC := PATH=$(PWD)/bin:'$(PATH)' $(PWD)/bin/protoc -I=$(PWD)/include:.
PROTOC_OUTPUTS = pkg/rpc/necoperf.pb.go pkg/rpc/necoperf_grpc.pb.go docs/necoperf-grpc.md
STATICCHECK = $(BIN_DIR)/staticcheck

.PHONY: all
Expand All @@ -30,9 +36,30 @@ test-go: test-tools
go test -race -v ./...
go vet ./...

.PHONY: generate
generate:
$(MAKE) $(PROTOC_OUTPUTS)

pkg/rpc/necoperf.pb.go: pkg/rpc/necoperf.proto
$(PROTOC) --go_out=module=github.com/cybozu-go/necoperf:. $<

pkg/rpc/necoperf_grpc.pb.go: pkg/rpc/necoperf.proto
$(PROTOC) --go-grpc_out=module=github.com/cybozu-go/necoperf:. $<

docs/necoperf-grpc.md: pkg/rpc/necoperf.proto
$(PROTOC) --doc_out=docs --doc_opt=markdown,$@ $<

##@ Tools

.PHONY: setup
setup:
curl -sfL -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)-linux-x86_64.zip
unzip -o protoc.zip bin/protoc 'include/*'
rm -f protoc.zip
GOBIN=$(PWD)/bin go install google.golang.org/protobuf/cmd/protoc-gen-go@v$(PROTOC_GEN_GO_VERSION)
GOBIN=$(PWD)/bin go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v$(PROTOC_GEN_GO_GRPC_VERSION)
GOBIN=$(PWD)/bin go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v$(PROTOC_GEN_DOC_VERSION)

$(MDBOOK):
mkdir -p bin
curl -fsL https://github.com/rust-lang/mdBook/releases/download/v$(MDBOOK_VERSION)/mdbook-v$(MDBOOK_VERSION)-x86_64-unknown-linux-gnu.tar.gz | tar -C bin -xzf -
Expand Down
92 changes: 92 additions & 0 deletions docs/necoperf-grpc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Protocol Documentation
<a name="top"></a>

## Table of Contents

- [pkg/rpc/necoperf.proto](#pkg_rpc_necoperf-proto)
- [PerfProfileRequest](#necoperf-PerfProfileRequest)
- [PerfProfileResponse](#necoperf-PerfProfileResponse)

- [NecoPerf](#necoperf-NecoPerf)

- [Scalar Value Types](#scalar-value-types)



<a name="pkg_rpc_necoperf-proto"></a>
<p align="right"><a href="#top">Top</a></p>

## pkg/rpc/necoperf.proto



<a name="necoperf-PerfProfileRequest"></a>

### PerfProfileRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| container_id | [string](#string) | | |
| timeout_seconds | [int64](#int64) | | |






<a name="necoperf-PerfProfileResponse"></a>

### PerfProfileResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| data | [bytes](#bytes) | | |












<a name="necoperf-NecoPerf"></a>

### NecoPerf


| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
| Profile | [PerfProfileRequest](#necoperf-PerfProfileRequest) | [PerfProfileResponse](#necoperf-PerfProfileResponse) stream | |





## Scalar Value Types

| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |
| <a name="double" /> double | | double | double | float | float64 | double | float | Float |
| <a name="float" /> float | | float | float | float | float32 | float | float | Float |
| <a name="int32" /> int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| <a name="int64" /> int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| <a name="uint32" /> uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| <a name="uint64" /> uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| <a name="sint32" /> sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| <a name="sint64" /> sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| <a name="fixed32" /> fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
| <a name="fixed64" /> fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
| <a name="sfixed32" /> sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| <a name="sfixed64" /> sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| <a name="bool" /> bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |
| <a name="string" /> string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| <a name="bytes" /> bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |

224 changes: 224 additions & 0 deletions pkg/rpc/necoperf.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions pkg/rpc/necoperf.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
syntax = "proto3";

option go_package = "pkg/rpc";

package necoperf;

service NecoPerf {
rpc Profile(PerfProfileRequest) returns (stream PerfProfileResponse);
}

message PerfProfileRequest {
string container_id = 1;
int64 timeout_seconds = 2;
}

message PerfProfileResponse {
bytes data = 1;
}
Loading