Skip to content

Commit

Permalink
Add gRPC protocol definition for necoperf (#5)
Browse files Browse the repository at this point in the history
* Add gRPC protocol definition for necoperf

Signed-off-by: zeroalphat <[email protected]>
  • Loading branch information
zeroalphat authored Sep 21, 2023
1 parent 82f4c77 commit a160f75
Show file tree
Hide file tree
Showing 6 changed files with 507 additions and 0 deletions.
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 | [google.protobuf.Duration](#google-protobuf-Duration) | | |






<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) |

232 changes: 232 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.

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

import "google/protobuf/duration.proto";

option go_package = "github.com/cybozu-go/necoperf/pkg/rpc";

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

message PerfProfileRequest {
string container_id = 1;
google.protobuf.Duration timeout = 2;
}

message PerfProfileResponse {
bytes data = 1;
}
Loading

0 comments on commit a160f75

Please sign in to comment.