From 56a294da0c9bdd9cd5b13db594b6811332c3ffa3 Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Mon, 29 Jan 2024 08:51:41 +0100 Subject: [PATCH 1/3] [featureflag] expose feature flag API via frontend Also: * propagate the change from bool to float introduced in https://github.com/open-telemetry/opentelemetry-demo/pull/1237 more consistently via proto definitions by differentiating between the GetFlag operation (which evaluates the probabilty and therefore returns a bool) and all other operations, which need to operate with a float value/probability directly. To that end, the Flag grpc message has been split into two new types, FlagEvaluationResult and FlagDefinition. * Rename the UpdateFlag operation to UpdateFlagProbability, as it actually only updates the enabled/probability value, but not the description or the name. --- docker-compose.yml | 1 + pb/demo.proto | 24 +- regenerate-grpc-code.sh | 92 +++ restart-service.sh | 3 + .../genproto/oteldemo/demo.pb.go | 573 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 40 +- .../genproto/oteldemo/demo.pb.go | 573 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 40 +- src/featureflagservice/src/ffs_service.erl | 76 ++- .../gateways/rpc/FeatureFlag.gateway.ts | 63 ++ .../pages/api/featureflags/[name]/index.ts | 46 ++ src/frontend/pages/api/featureflags/index.ts | 32 + .../genproto/oteldemo/demo.pb.go | 573 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 40 +- 14 files changed, 1369 insertions(+), 807 deletions(-) create mode 100755 regenerate-grpc-code.sh create mode 100644 src/frontend/gateways/rpc/FeatureFlag.gateway.ts create mode 100644 src/frontend/pages/api/featureflags/[name]/index.ts create mode 100644 src/frontend/pages/api/featureflags/index.ts diff --git a/docker-compose.yml b/docker-compose.yml index 79fcfb69b0..2368377b86 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -286,6 +286,7 @@ services: - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR + - FEATURE_FLAG_GRPC_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_SERVICE_ADDR diff --git a/pb/demo.proto b/pb/demo.proto index aed0c2ce8b..76ce899e65 100644 --- a/pb/demo.proto +++ b/pb/demo.proto @@ -266,46 +266,52 @@ message Ad { service FeatureFlagService { rpc GetFlag(GetFlagRequest) returns (GetFlagResponse) {} rpc CreateFlag(CreateFlagRequest) returns (CreateFlagResponse) {} - rpc UpdateFlag(UpdateFlagRequest) returns (UpdateFlagResponse) {} + rpc UpdateFlagProbability(UpdateFlagProbabilityRequest) returns (UpdateFlagProbabilityResponse) {} rpc ListFlags(ListFlagsRequest) returns (ListFlagsResponse) {} rpc DeleteFlag(DeleteFlagRequest) returns (DeleteFlagResponse) {} } -message Flag { +message FlagEvaluationResult { string name = 1; string description = 2; bool enabled = 3; } +message FlagDefinition { + string name = 1; + string description = 2; + float enabled = 3; +} + message GetFlagRequest { string name = 1; } message GetFlagResponse { - Flag flag = 1; + FlagEvaluationResult flag = 1; } message CreateFlagRequest { string name = 1; string description = 2; - bool enabled = 3; + float enabled = 3; } message CreateFlagResponse { - Flag flag = 1; + FlagDefinition flag = 1; } -message UpdateFlagRequest { +message UpdateFlagProbabilityRequest { string name = 1; - bool enabled = 2; + float enabled = 2; } -message UpdateFlagResponse {} +message UpdateFlagProbabilityResponse {} message ListFlagsRequest {} message ListFlagsResponse { - repeated Flag flag = 1; + repeated FlagDefinition flag = 1; } message DeleteFlagRequest { diff --git a/regenerate-grpc-code.sh b/regenerate-grpc-code.sh new file mode 100755 index 0000000000..c50eb78b59 --- /dev/null +++ b/regenerate-grpc-code.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +set -euo pipefail + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# This script is used to update generated code after changing demo.proto. + +cd -P -- "$(dirname -- "$0")" +pwd + +command -v npm >/dev/null 2>&1 || { + cat <&2 +npm needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +command -v go >/dev/null 2>&1 || { + cat <&2 +go needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +command -v rebar3 >/dev/null 2>&1 || { + cat <&2 +rebar3 needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + + +command -v protoc >/dev/null 2>&1 || { + cat <&2 +protoc needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +echo "Regenerating typescript code in src/frontend based on demo.proto" +pushd src/frontend > /dev/null +# The npm script grpc:generate expects the pb directory to be available in the current directory (src/frontend) because it is +# intended to be used during Docker build, where pb is copied to the same working directory as src/frontend. To get around that +# difference, we temporarily create a symlink to pb and then remove it after the script is done. +ln -s ../../pb pb +npm run grpc:generate +rm pb +popd > /dev/null + +echo "Regenerating Go code in src/accountingservice based on demo.proto" +pushd src/accountingservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Go code in src/checkoutservice based on demo.proto" +pushd src/checkoutservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Go code in src/productcatalogservice based on demo.proto" +pushd src/productcatalogservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Java code in src/adservice based on demo.proto" +pushd src/adservice > /dev/null +./gradlew generateProto +popd > /dev/null + +echo "Recompiling Erlang code in src/featureflagservice based on demo.proto" +pushd src/featureflagservice > /dev/null +# The Erlang build expects the proto file to be available in src/featureflagservice/proto) because it is +# intended to be used during Docker build, where demo.proto is copied to the the proto directory in the same working directory +# as the Erlang source code. To get around that difference, we temporarily create a symlink to ../../pb as proto and then remove +# it after the script is done. +ln -s ../../pb proto +rebar3 grpc_regen +rm proto +popd > /dev/null + + +echo done \ No newline at end of file diff --git a/restart-service.sh b/restart-service.sh index 5f80919dbe..365edad3a8 100755 --- a/restart-service.sh +++ b/restart-service.sh @@ -1,4 +1,7 @@ #!/bin/sh + +set -euo pipefail + # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 diff --git a/src/accountingservice/genproto/oteldemo/demo.pb.go b/src/accountingservice/genproto/oteldemo/demo.pb.go index a788255384..d441e2da55 100644 --- a/src/accountingservice/genproto/oteldemo/demo.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags", diff --git a/src/checkoutservice/genproto/oteldemo/demo.pb.go b/src/checkoutservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..329c7b9603 100644 --- a/src/checkoutservice/genproto/oteldemo/demo.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags", diff --git a/src/featureflagservice/src/ffs_service.erl b/src/featureflagservice/src/ffs_service.erl index 421ce7ce23..fbebe53c20 100644 --- a/src/featureflagservice/src/ffs_service.erl +++ b/src/featureflagservice/src/ffs_service.erl @@ -18,7 +18,7 @@ -export([get_flag/2, create_flag/2, - update_flag/2, + update_flag_probability/2, list_flags/2, delete_flag/2]). @@ -32,6 +32,7 @@ get_flag(Ctx, #{name := Name}) -> case 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name) of nil -> {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', description := Description, enabled := Enabled @@ -48,25 +49,76 @@ get_flag(Ctx, #{name := Name}) -> description => Description, enabled => FlagEnabledValue}, - {ok, #{flag => Flag}, Ctx} + {ok, #{flag => Flag}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. -spec create_flag(ctx:t(), ffs_demo_pb:create_flag_request()) -> {ok, ffs_demo_pb:create_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -create_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to create flags.">>}}. +create_flag(Ctx, Flag) -> + 'Elixir.Featureflagservice.FeatureFlags':create_feature_flag(Flag), + {ok, #{}, Ctx}. + +-spec update_flag_probability(ctx:t(), ffs_demo_pb:update_flag_probability_request()) -> + {ok, ffs_demo_pb:update_flag_probability_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). +update_flag_probability(Ctx, #{name := Name, enabled := Probability}) -> + Flag = 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name), + case Flag of + nil -> + {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; --spec update_flag(ctx:t(), ffs_demo_pb:update_flag_request()) -> - {ok, ffs_demo_pb:update_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -update_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to update flags.">>}}. + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := _, + description := _, + enabled := _ + } -> + 'Elixir.Featureflagservice.FeatureFlags':update_feature_flag( + Flag, + #{enabled => Probability} + ), + {ok, #{}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. -spec list_flags(ctx:t(), ffs_demo_pb:list_flags_request()) -> {ok, ffs_demo_pb:list_flags_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -list_flags(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to view all flags.">>}}. +list_flags(Ctx, _) -> + Flags = lists:map(fun unpack_flag/1, 'Elixir.Featureflagservice.FeatureFlags':list_feature_flags()), + {ok, #{flag => Flags}, Ctx}. + +unpack_flag(Flag) -> + case Flag of + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := Name, + description := Description, + enabled := Probability + } -> + #{name => Name, + description => Description, + enabled => Probability} + end. -spec delete_flag(ctx:t(), ffs_demo_pb:delete_flag_request()) -> {ok, ffs_demo_pb:delete_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -delete_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to delete flags.">>}}. +delete_flag(Ctx, #{name := Name}) -> + Flag = 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name), + case Flag of + nil -> + {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; + + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := _, + description := _, + enabled := _ + } -> + 'Elixir.Featureflagservice.FeatureFlags':delete_feature_flag(Flag), + {ok, #{}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. diff --git a/src/frontend/gateways/rpc/FeatureFlag.gateway.ts b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts new file mode 100644 index 0000000000..39b9fa7f76 --- /dev/null +++ b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts @@ -0,0 +1,63 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import {ChannelCredentials, status} from '@grpc/grpc-js'; +import { + CreateFlagRequest, + CreateFlagResponse, + DeleteFlagResponse, + FeatureFlagServiceClient, + GetFlagResponse, + ListFlagsResponse, + UpdateFlagProbabilityRequest, + UpdateFlagProbabilityResponse +} from '../../protos/demo'; + +const {FEATURE_FLAG_GRPC_SERVICE_ADDR = ''} = process.env; + +const client = new FeatureFlagServiceClient(FEATURE_FLAG_GRPC_SERVICE_ADDR, ChannelCredentials.createInsecure()); + +const FeatureFlagGateway = () => ({ + + getFeatureFlag(name: string) { + return new Promise((resolve, reject) => + client.getFlag({name}, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + createFeatureFlag(flag: CreateFlagRequest) { + return new Promise((resolve, reject) => + client.createFlag(flag, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + updateFeatureFlag(name: string, flag: UpdateFlagProbabilityRequest) { + return new Promise((resolve, reject) => client.updateFlagProbability(flag, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + listFeatureFlags() { + return new Promise((resolve, reject) => + client.listFlags({}, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + deleteFeatureFlag(name: string) { + return new Promise((resolve, reject) => client.deleteFlag({name}, + (error, response) => { + if (error) { + if (error.code === status.NOT_FOUND) { + return resolve({} as DeleteFlagResponse) + } else { + return reject(error) + } + } + resolve(response) + } + ) + ); + }, + +}); + +export default FeatureFlagGateway(); diff --git a/src/frontend/pages/api/featureflags/[name]/index.ts b/src/frontend/pages/api/featureflags/[name]/index.ts new file mode 100644 index 0000000000..a677e0e379 --- /dev/null +++ b/src/frontend/pages/api/featureflags/[name]/index.ts @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type {NextApiRequest, NextApiResponse} from 'next'; +import FeatureFlagGateway from '../../../../gateways/rpc/FeatureFlag.gateway'; +import {Empty, FlagEvaluationResult, UpdateFlagProbabilityRequest} from '../../../../protos/demo'; + +type TResponse = FlagEvaluationResult | Empty; + +const handler = async ({method, query, body}: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'GET': { + const {name = ''} = query + const flag = await FeatureFlagGateway.getFeatureFlag(name as string); + return res.status(200).json(flag); + } + + case 'PUT': { + const {name} = query + if (!name || Array.isArray(name)) { + return res.status(400).end() + } + if (!body || typeof body.enabled !== 'number'){ + return res.status(400).end() + } + const updateFlagProbabilityRequest = body as UpdateFlagProbabilityRequest; + // The name is part of the resource path, and we do not want to require clients to repeat the name in the request + // body; but on the grpc level the name needs to be in the message body, so we move it there. + updateFlagProbabilityRequest.name = name; + await FeatureFlagGateway.updateFeatureFlag(name as string, updateFlagProbabilityRequest); + return res.status(204).end(); + } + + case 'DELETE': { + const {name = ''} = query + await FeatureFlagGateway.deleteFeatureFlag(name as string); + return res.status(204).end(); + } + + default: { + return res.status(405).end(); + } + } +}; + +export default handler; diff --git a/src/frontend/pages/api/featureflags/index.ts b/src/frontend/pages/api/featureflags/index.ts new file mode 100644 index 0000000000..0f7595fc5f --- /dev/null +++ b/src/frontend/pages/api/featureflags/index.ts @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type {NextApiRequest, NextApiResponse} from 'next'; +import FeatureFlagGateway from '../../../gateways/rpc/FeatureFlag.gateway'; +import {CreateFlagRequest, Empty, FlagDefinition} from '../../../protos/demo'; + +type TResponse = FlagDefinition[] | FlagDefinition | Empty; + +const handler = async ({method, body}: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'POST': { + if (!body || typeof body.name !== 'string' || typeof body.description !== 'string' || typeof body.enabled !== 'number') { + return res.status(400).end() + } + const flagFromRequest = body as CreateFlagRequest + const {flag: flagFromResponse} = await FeatureFlagGateway.createFeatureFlag(flagFromRequest); + return res.status(200).json(flagFromResponse!); + } + + case 'GET': { + const {flag: allFlags} = await FeatureFlagGateway.listFeatureFlags(); + return res.status(200).json(allFlags); + } + + default: { + return res.status(405).send(''); + } + } +}; + +export default handler; diff --git a/src/productcatalogservice/genproto/oteldemo/demo.pb.go b/src/productcatalogservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..329c7b9603 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags", From 3a07523f6d839c933bf978939c506a0f61a5551b Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Mon, 29 Jan 2024 16:59:58 +0100 Subject: [PATCH 2/3] [dash0] use images from AWS ECR repository --- .env | 2 +- .github/workflows/assign-reviewers.yml | 20 -- .github/workflows/build-images.yml | 19 +- .github/workflows/stale.yml | 23 -- .gitignore | 1 + Makefile | 22 +- kubernetes/opentelemetry-demo.yaml | 358 ++++++++++++------------- 7 files changed, 190 insertions(+), 255 deletions(-) delete mode 100644 .github/workflows/assign-reviewers.yml delete mode 100644 .github/workflows/stale.yml diff --git a/.env b/.env index 32614ca3c0..f9729f867f 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ # Images IMAGE_VERSION=1.7.2 -IMAGE_NAME=ghcr.io/open-telemetry/demo +IMAGE_NAME=718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo TRACETEST_IMAGE_VERSION=v0.14.5 # Demo Platform diff --git a/.github/workflows/assign-reviewers.yml b/.github/workflows/assign-reviewers.yml deleted file mode 100644 index 3dfd8bcbac..0000000000 --- a/.github/workflows/assign-reviewers.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 -# assigns reviewers to pull requests in a similar way as CODEOWNERS, but doesn't require reviewers -# to have write access to the repository -# see .github/component_owners.yaml for the list of components and their owners -name: Assign reviewers - -on: - # pull_request_target is needed instead of just pull_request - # because repository write permission is needed to assign reviewers - pull_request_target: - -jobs: - assign-reviewers: - runs-on: ubuntu-latest - steps: - - uses: dyladan/component-owners@main - with: - # using this action to request review only (not assignment) - assign-owners: false diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index aa0ac093e4..c762006b01 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -28,8 +28,7 @@ jobs: env: RELEASE_VERSION: "${{ github.event.release.tag_name }}" - DOCKERHUB_REPO: "otel/demo" - GHCR_REPO: "ghcr.io/open-telemetry/demo" + AWS_ECR_REPO: "718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo" strategy: fail-fast: false @@ -140,19 +139,6 @@ jobs: echo "Changes detected in ${{ matrix.file_tag.context }}, proceeding with build." echo "skip=false" >> "$GITHUB_OUTPUT" fi - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - if: ${{ inputs.push }} - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - if: ${{ inputs.push }} - name: Set up QEMU if: ${{ matrix.file_tag.setup-qemu }} uses: docker/setup-qemu-action@v3 @@ -173,7 +159,6 @@ jobs: platforms: linux/amd64,linux/arm64 push: ${{ inputs.push }} tags: | - ${{ env.DOCKERHUB_REPO }}:${{ inputs.version }}-${{matrix.file_tag.tag_suffix }} - ${{ env.GHCR_REPO }}:${{ inputs.version }}-${{ matrix.file_tag.tag_suffix }} + ${{ env.AWS_ECR_REPO }}:${{ inputs.version }}-${{ matrix.file_tag.tag_suffix }} cache-from: type=gha cache-to: type=gha diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 8b7a1dfd80..0000000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 -# Syntax: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions -# Github Actions Stale: https://github.com/actions/stale - -name: "Close stale pull requests" -on: - schedule: - - cron: "12 3 * * *" # arbitrary time not to DDOS GitHub - -jobs: - stale: - runs-on: ubuntu-latest - steps: - - uses: actions/stale@v8 - with: - stale-pr-message: 'This PR was marked stale due to lack of activity. It will be closed in 7 days.' - close-pr-message: 'Closed as inactive. Feel free to reopen if this PR is still being worked on.' - operations-per-run: 400 - days-before-pr-stale: 7 - days-before-issue-stale: -1 - days-before-pr-close: 7 - days-before-issue-close: -1 diff --git a/.gitignore b/.gitignore index 6bf28278f3..97fe9c2b38 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ composer.lock .venv .dockerhub.env .ghcr.env +.aws_ecr.env src/frontend/cypress/videos src/frontend/cypress/screenshots diff --git a/Makefile b/Makefile index 13c2766417..89630cb1f6 100644 --- a/Makefile +++ b/Makefile @@ -76,24 +76,16 @@ install-tools: $(MISSPELL) build: docker compose build -.PHONY: build-and-push-dockerhub -build-and-push-dockerhub: - docker compose --env-file .dockerhub.env -f docker-compose.yml build - docker compose --env-file .dockerhub.env -f docker-compose.yml push - -.PHONY: build-and-push-ghcr -build-and-push-ghcr: - docker compose --env-file .ghcr.env -f docker-compose.yml build - docker compose --env-file .ghcr.env -f docker-compose.yml push +.PHONY: build-and-push-aws-ecr +build-and-push-aws-ecr: + docker compose --env-file .aws_ecr.env -f docker-compose.yml build + docker compose --env-file .aws_ecr.env -f docker-compose.yml push .PHONY: build-env-file build-env-file: - cp .env .dockerhub.env - sed -i '/IMAGE_VERSION=.*/c\IMAGE_VERSION=${RELEASE_VERSION}' .dockerhub.env - sed -i '/IMAGE_NAME=.*/c\IMAGE_NAME=${DOCKERHUB_REPO}' .dockerhub.env - cp .env .ghcr.env - sed -i '/IMAGE_VERSION=.*/c\IMAGE_VERSION=${RELEASE_VERSION}' .ghcr.env - sed -i '/IMAGE_NAME=.*/c\IMAGE_NAME=${GHCR_REPO}' .ghcr.env + cp .env .aws_ecr.env + sed -i '/IMAGE_VERSION=.*/c\IMAGE_VERSION=${RELEASE_VERSION}' .aws_ecr.env + sed -i '/IMAGE_NAME=.*/c\IMAGE_NAME=${AWS_ECR_REPO}' .aws_ecr.env run-tests: docker compose run frontendTests diff --git a/kubernetes/opentelemetry-demo.yaml b/kubernetes/opentelemetry-demo.yaml index 0916e91228..8be08dde63 100644 --- a/kubernetes/opentelemetry-demo.yaml +++ b/kubernetes/opentelemetry-demo.yaml @@ -61,11 +61,11 @@ kind: ServiceAccount metadata: name: opentelemetry-demo labels: - + opentelemetry.io/name: opentelemetry-demo app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/name: opentelemetry-demo - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo --- # Source: opentelemetry-demo/charts/grafana/templates/secret.yaml @@ -80,7 +80,7 @@ metadata: app.kubernetes.io/version: "10.2.3" type: Opaque data: - + admin-user: "YWRtaW4=" admin-password: "YWRtaW4=" ldap-toml: "" @@ -96,7 +96,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "10.2.3" data: - + grafana.ini: | [analytics] check_for_updates = true @@ -163,7 +163,7 @@ metadata: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "0.92.0" - + data: relay: | connectors: @@ -353,14 +353,14 @@ metadata: name: opentelemetry-demo-grafana-dashboards namespace: otel-demo labels: - + opentelemetry.io/name: opentelemetry-demo app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/name: opentelemetry-demo - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo data: - + demo-dashboard.json: |- { "annotations": { @@ -8003,7 +8003,7 @@ metadata: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "0.92.0" - + rules: - apiGroups: [""] resources: ["pods", "namespaces"] @@ -8092,7 +8092,7 @@ metadata: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "0.92.0" - + roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole @@ -8277,12 +8277,12 @@ metadata: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "0.92.0" - + component: standalone-collector spec: type: ClusterIP ports: - + - name: jaeger-compact port: 6831 targetPort: 6831 @@ -8353,12 +8353,12 @@ kind: Service metadata: name: opentelemetry-demo-adservice labels: - + opentelemetry.io/name: opentelemetry-demo-adservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: adservice app.kubernetes.io/name: opentelemetry-demo-adservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8367,7 +8367,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-adservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8376,12 +8376,12 @@ kind: Service metadata: name: opentelemetry-demo-cartservice labels: - + opentelemetry.io/name: opentelemetry-demo-cartservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: cartservice app.kubernetes.io/name: opentelemetry-demo-cartservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8390,7 +8390,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-cartservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8399,12 +8399,12 @@ kind: Service metadata: name: opentelemetry-demo-checkoutservice labels: - + opentelemetry.io/name: opentelemetry-demo-checkoutservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: checkoutservice app.kubernetes.io/name: opentelemetry-demo-checkoutservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8413,7 +8413,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-checkoutservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8422,12 +8422,12 @@ kind: Service metadata: name: opentelemetry-demo-currencyservice labels: - + opentelemetry.io/name: opentelemetry-demo-currencyservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: currencyservice app.kubernetes.io/name: opentelemetry-demo-currencyservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8436,7 +8436,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-currencyservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8445,12 +8445,12 @@ kind: Service metadata: name: opentelemetry-demo-emailservice labels: - + opentelemetry.io/name: opentelemetry-demo-emailservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: emailservice app.kubernetes.io/name: opentelemetry-demo-emailservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8459,7 +8459,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-emailservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8468,12 +8468,12 @@ kind: Service metadata: name: opentelemetry-demo-featureflagservice labels: - + opentelemetry.io/name: opentelemetry-demo-featureflagservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: featureflagservice app.kubernetes.io/name: opentelemetry-demo-featureflagservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8485,7 +8485,7 @@ spec: name: http targetPort: 8081 selector: - + opentelemetry.io/name: opentelemetry-demo-featureflagservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8494,12 +8494,12 @@ kind: Service metadata: name: opentelemetry-demo-ffspostgres labels: - + opentelemetry.io/name: opentelemetry-demo-ffspostgres app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: ffspostgres app.kubernetes.io/name: opentelemetry-demo-ffspostgres - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8508,7 +8508,7 @@ spec: name: postgres targetPort: 5432 selector: - + opentelemetry.io/name: opentelemetry-demo-ffspostgres --- # Source: opentelemetry-demo/templates/component.yaml @@ -8517,12 +8517,12 @@ kind: Service metadata: name: opentelemetry-demo-frontend labels: - + opentelemetry.io/name: opentelemetry-demo-frontend app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontend app.kubernetes.io/name: opentelemetry-demo-frontend - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8531,7 +8531,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-frontend --- # Source: opentelemetry-demo/templates/component.yaml @@ -8540,12 +8540,12 @@ kind: Service metadata: name: opentelemetry-demo-frontendproxy labels: - + opentelemetry.io/name: opentelemetry-demo-frontendproxy app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontendproxy app.kubernetes.io/name: opentelemetry-demo-frontendproxy - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8554,7 +8554,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-frontendproxy --- # Source: opentelemetry-demo/templates/component.yaml @@ -8563,12 +8563,12 @@ kind: Service metadata: name: opentelemetry-demo-kafka labels: - + opentelemetry.io/name: opentelemetry-demo-kafka app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: kafka app.kubernetes.io/name: opentelemetry-demo-kafka - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8580,7 +8580,7 @@ spec: name: controller targetPort: 9093 selector: - + opentelemetry.io/name: opentelemetry-demo-kafka --- # Source: opentelemetry-demo/templates/component.yaml @@ -8589,12 +8589,12 @@ kind: Service metadata: name: opentelemetry-demo-loadgenerator labels: - + opentelemetry.io/name: opentelemetry-demo-loadgenerator app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: loadgenerator app.kubernetes.io/name: opentelemetry-demo-loadgenerator - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8603,7 +8603,7 @@ spec: name: tcp-service targetPort: 8089 selector: - + opentelemetry.io/name: opentelemetry-demo-loadgenerator --- # Source: opentelemetry-demo/templates/component.yaml @@ -8612,12 +8612,12 @@ kind: Service metadata: name: opentelemetry-demo-paymentservice labels: - + opentelemetry.io/name: opentelemetry-demo-paymentservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: paymentservice app.kubernetes.io/name: opentelemetry-demo-paymentservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8626,7 +8626,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-paymentservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8635,12 +8635,12 @@ kind: Service metadata: name: opentelemetry-demo-productcatalogservice labels: - + opentelemetry.io/name: opentelemetry-demo-productcatalogservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: productcatalogservice app.kubernetes.io/name: opentelemetry-demo-productcatalogservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8649,7 +8649,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-productcatalogservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8658,12 +8658,12 @@ kind: Service metadata: name: opentelemetry-demo-quoteservice labels: - + opentelemetry.io/name: opentelemetry-demo-quoteservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: quoteservice app.kubernetes.io/name: opentelemetry-demo-quoteservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8672,7 +8672,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-quoteservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8681,12 +8681,12 @@ kind: Service metadata: name: opentelemetry-demo-recommendationservice labels: - + opentelemetry.io/name: opentelemetry-demo-recommendationservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: recommendationservice app.kubernetes.io/name: opentelemetry-demo-recommendationservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8695,7 +8695,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-recommendationservice --- # Source: opentelemetry-demo/templates/component.yaml @@ -8704,12 +8704,12 @@ kind: Service metadata: name: opentelemetry-demo-redis labels: - + opentelemetry.io/name: opentelemetry-demo-redis app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: redis app.kubernetes.io/name: opentelemetry-demo-redis - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8718,7 +8718,7 @@ spec: name: redis targetPort: 6379 selector: - + opentelemetry.io/name: opentelemetry-demo-redis --- # Source: opentelemetry-demo/templates/component.yaml @@ -8727,12 +8727,12 @@ kind: Service metadata: name: opentelemetry-demo-shippingservice labels: - + opentelemetry.io/name: opentelemetry-demo-shippingservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: shippingservice app.kubernetes.io/name: opentelemetry-demo-shippingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8741,7 +8741,7 @@ spec: name: tcp-service targetPort: 8080 selector: - + opentelemetry.io/name: opentelemetry-demo-shippingservice --- # Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml @@ -8774,7 +8774,7 @@ spec: checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f kubectl.kubernetes.io/default-container: grafana spec: - + serviceAccountName: opentelemetry-demo-grafana automountServiceAccountToken: true securityContext: @@ -8895,7 +8895,7 @@ spec: annotations: prometheus.io/port: "14269" prometheus.io/scrape: "true" - spec: + spec: containers: - env: - name: METRICS_STORAGE_TYPE @@ -8973,7 +8973,7 @@ metadata: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/version: "0.92.0" - + spec: replicas: 1 revisionHistoryLimit: 10 @@ -8995,9 +8995,9 @@ spec: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo component: standalone-collector - + spec: - + serviceAccountName: opentelemetry-demo-otelcol securityContext: {} @@ -9011,7 +9011,7 @@ spec: image: "otel/opentelemetry-collector-contrib:0.92.0" imagePullPolicy: IfNotPresent ports: - + - name: jaeger-compact containerPort: 6831 protocol: UDP @@ -9166,23 +9166,23 @@ kind: Deployment metadata: name: opentelemetry-demo-accountingservice labels: - + opentelemetry.io/name: opentelemetry-demo-accountingservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: accountingservice app.kubernetes.io/name: opentelemetry-demo-accountingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-accountingservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-accountingservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: accountingservice @@ -9191,7 +9191,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: accountingservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-accountingservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-accountingservice' imagePullPolicy: IfNotPresent env: - name: OTEL_SERVICE_NAME @@ -9227,23 +9227,23 @@ kind: Deployment metadata: name: opentelemetry-demo-adservice labels: - + opentelemetry.io/name: opentelemetry-demo-adservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: adservice app.kubernetes.io/name: opentelemetry-demo-adservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-adservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-adservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: adservice @@ -9252,10 +9252,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: adservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-adservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-adservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9288,23 +9288,23 @@ kind: Deployment metadata: name: opentelemetry-demo-cartservice labels: - + opentelemetry.io/name: opentelemetry-demo-cartservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: cartservice app.kubernetes.io/name: opentelemetry-demo-cartservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-cartservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-cartservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: cartservice @@ -9313,10 +9313,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: cartservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-cartservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-cartservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9359,23 +9359,23 @@ kind: Deployment metadata: name: opentelemetry-demo-checkoutservice labels: - + opentelemetry.io/name: opentelemetry-demo-checkoutservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: checkoutservice app.kubernetes.io/name: opentelemetry-demo-checkoutservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-checkoutservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-checkoutservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: checkoutservice @@ -9384,10 +9384,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: checkoutservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-checkoutservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-checkoutservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9438,23 +9438,23 @@ kind: Deployment metadata: name: opentelemetry-demo-currencyservice labels: - + opentelemetry.io/name: opentelemetry-demo-currencyservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: currencyservice app.kubernetes.io/name: opentelemetry-demo-currencyservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-currencyservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-currencyservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: currencyservice @@ -9463,10 +9463,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: currencyservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-currencyservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-currencyservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9495,23 +9495,23 @@ kind: Deployment metadata: name: opentelemetry-demo-emailservice labels: - + opentelemetry.io/name: opentelemetry-demo-emailservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: emailservice app.kubernetes.io/name: opentelemetry-demo-emailservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-emailservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-emailservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: emailservice @@ -9520,10 +9520,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: emailservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-emailservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-emailservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9554,23 +9554,23 @@ kind: Deployment metadata: name: opentelemetry-demo-featureflagservice labels: - + opentelemetry.io/name: opentelemetry-demo-featureflagservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: featureflagservice app.kubernetes.io/name: opentelemetry-demo-featureflagservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-featureflagservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-featureflagservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: featureflagservice @@ -9579,10 +9579,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: featureflagservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-featureflagservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-featureflagservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 50053 name: grpc - containerPort: 8081 @@ -9633,23 +9633,23 @@ kind: Deployment metadata: name: opentelemetry-demo-ffspostgres labels: - + opentelemetry.io/name: opentelemetry-demo-ffspostgres app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: ffspostgres app.kubernetes.io/name: opentelemetry-demo-ffspostgres - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-ffspostgres template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-ffspostgres app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: ffspostgres @@ -9661,7 +9661,7 @@ spec: image: 'postgres:16.1' imagePullPolicy: IfNotPresent ports: - + - containerPort: 5432 name: postgres env: @@ -9696,23 +9696,23 @@ kind: Deployment metadata: name: opentelemetry-demo-frauddetectionservice labels: - + opentelemetry.io/name: opentelemetry-demo-frauddetectionservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frauddetectionservice app.kubernetes.io/name: opentelemetry-demo-frauddetectionservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-frauddetectionservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-frauddetectionservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frauddetectionservice @@ -9721,7 +9721,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frauddetectionservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-frauddetectionservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-frauddetectionservice' imagePullPolicy: IfNotPresent env: - name: OTEL_SERVICE_NAME @@ -9757,23 +9757,23 @@ kind: Deployment metadata: name: opentelemetry-demo-frontend labels: - + opentelemetry.io/name: opentelemetry-demo-frontend app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontend app.kubernetes.io/name: opentelemetry-demo-frontend - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-frontend template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-frontend app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontend @@ -9782,10 +9782,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frontend - image: 'ghcr.io/open-telemetry/demo:1.7.0-frontend' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-frontend' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9838,23 +9838,23 @@ kind: Deployment metadata: name: opentelemetry-demo-frontendproxy labels: - + opentelemetry.io/name: opentelemetry-demo-frontendproxy app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontendproxy app.kubernetes.io/name: opentelemetry-demo-frontendproxy - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-frontendproxy template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-frontendproxy app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontendproxy @@ -9863,10 +9863,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frontendproxy - image: 'ghcr.io/open-telemetry/demo:1.7.0-frontendproxy' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-frontendproxy' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -9923,23 +9923,23 @@ kind: Deployment metadata: name: opentelemetry-demo-kafka labels: - + opentelemetry.io/name: opentelemetry-demo-kafka app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: kafka app.kubernetes.io/name: opentelemetry-demo-kafka - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-kafka template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-kafka app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: kafka @@ -9948,10 +9948,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: kafka - image: 'ghcr.io/open-telemetry/demo:1.7.0-kafka' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-kafka' imagePullPolicy: IfNotPresent ports: - + - containerPort: 9092 name: plaintext - containerPort: 9093 @@ -9988,23 +9988,23 @@ kind: Deployment metadata: name: opentelemetry-demo-loadgenerator labels: - + opentelemetry.io/name: opentelemetry-demo-loadgenerator app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: loadgenerator app.kubernetes.io/name: opentelemetry-demo-loadgenerator - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-loadgenerator template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-loadgenerator app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: loadgenerator @@ -10013,10 +10013,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: loadgenerator - image: 'ghcr.io/open-telemetry/demo:1.7.0-loadgenerator' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-loadgenerator' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8089 name: service env: @@ -10057,23 +10057,23 @@ kind: Deployment metadata: name: opentelemetry-demo-paymentservice labels: - + opentelemetry.io/name: opentelemetry-demo-paymentservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: paymentservice app.kubernetes.io/name: opentelemetry-demo-paymentservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-paymentservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-paymentservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: paymentservice @@ -10082,10 +10082,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: paymentservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-paymentservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-paymentservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -10118,23 +10118,23 @@ kind: Deployment metadata: name: opentelemetry-demo-productcatalogservice labels: - + opentelemetry.io/name: opentelemetry-demo-productcatalogservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: productcatalogservice app.kubernetes.io/name: opentelemetry-demo-productcatalogservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-productcatalogservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-productcatalogservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: productcatalogservice @@ -10143,10 +10143,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: productcatalogservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-productcatalogservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-productcatalogservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -10177,23 +10177,23 @@ kind: Deployment metadata: name: opentelemetry-demo-quoteservice labels: - + opentelemetry.io/name: opentelemetry-demo-quoteservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: quoteservice app.kubernetes.io/name: opentelemetry-demo-quoteservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-quoteservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-quoteservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: quoteservice @@ -10202,10 +10202,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: quoteservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-quoteservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-quoteservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -10240,23 +10240,23 @@ kind: Deployment metadata: name: opentelemetry-demo-recommendationservice labels: - + opentelemetry.io/name: opentelemetry-demo-recommendationservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: recommendationservice app.kubernetes.io/name: opentelemetry-demo-recommendationservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-recommendationservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-recommendationservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: recommendationservice @@ -10265,10 +10265,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: recommendationservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-recommendationservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-recommendationservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: @@ -10305,23 +10305,23 @@ kind: Deployment metadata: name: opentelemetry-demo-redis labels: - + opentelemetry.io/name: opentelemetry-demo-redis app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: redis app.kubernetes.io/name: opentelemetry-demo-redis - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-redis template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-redis app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: redis @@ -10333,7 +10333,7 @@ spec: image: 'redis:7.2-alpine' imagePullPolicy: IfNotPresent ports: - + - containerPort: 6379 name: redis env: @@ -10362,23 +10362,23 @@ kind: Deployment metadata: name: opentelemetry-demo-shippingservice labels: - + opentelemetry.io/name: opentelemetry-demo-shippingservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: shippingservice app.kubernetes.io/name: opentelemetry-demo-shippingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.7.2" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 selector: matchLabels: - + opentelemetry.io/name: opentelemetry-demo-shippingservice template: metadata: labels: - + opentelemetry.io/name: opentelemetry-demo-shippingservice app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: shippingservice @@ -10387,10 +10387,10 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: shippingservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-shippingservice' + image: '718306648796.dkr.ecr.eu-west-1.amazonaws.com/opentelemetry-demo:1.7.2-shippingservice' imagePullPolicy: IfNotPresent ports: - + - containerPort: 8080 name: service env: From 946b738c8a34d12854f1777d84a413df7ede675a Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Mon, 29 Jan 2024 17:10:45 +0100 Subject: [PATCH 3/3] [dash0] remove qemu support --- .github/workflows/build-images.yml | 46 ++++++++++++++---------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index c762006b01..68244bb74e 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -18,6 +18,14 @@ on: default: 'dev' required: false type: string + awsAccessKeyId: + description: 'ECR Access key id with write permissions' + required: true + type: string + awsSecretAccessKey: + description: 'ECR secret access key' + required: true + type: string jobs: build_and_push_images: @@ -37,27 +45,21 @@ jobs: - file: ./src/adservice/Dockerfile tag_suffix: adservice context: ./ - setup-qemu: true - file: ./src/cartservice/src/Dockerfile tag_suffix: cartservice context: ./ - setup-qemu: false - file: ./src/checkoutservice/Dockerfile tag_suffix: checkoutservice context: ./ - setup-qemu: true - file: ./src/currencyservice/Dockerfile tag_suffix: currencyservice context: ./src/currencyservice - setup-qemu: true - file: ./src/emailservice/Dockerfile tag_suffix: emailservice context: ./src/emailservice - setup-qemu: true - file: ./src/ffspostgres/Dockerfile tag_suffix: ffspostgres context: ./ - setup-qemu: true # NOTE: # https://github.com/open-telemetry/opentelemetry-demo/issues/956 # Until dedicated ARM runners are available for GHA we cannot upgrade @@ -65,59 +67,45 @@ jobs: - file: ./src/featureflagservice/Dockerfile tag_suffix: featureflagservice context: ./ - setup-qemu: true - file: ./src/frontend/Dockerfile tag_suffix: frontend context: ./ - setup-qemu: true - file: ./src/frontendproxy/Dockerfile tag_suffix: frontendproxy context: ./ - setup-qemu: true - file: ./src/loadgenerator/Dockerfile tag_suffix: loadgenerator context: ./ - setup-qemu: true - file: ./src/paymentservice/Dockerfile tag_suffix: paymentservice context: ./ - setup-qemu: true - file: ./src/productcatalogservice/Dockerfile tag_suffix: productcatalogservice context: ./ - setup-qemu: true - file: ./src/quoteservice/Dockerfile tag_suffix: quoteservice context: ./ - setup-qemu: true - file: ./src/shippingservice/Dockerfile tag_suffix: shippingservice context: ./ - setup-qemu: true - file: ./src/recommendationservice/Dockerfile tag_suffix: recommendationservice context: ./ - setup-qemu: true - file: ./src/kafka/Dockerfile tag_suffix: kafka context: ./ - setup-qemu: true - file: ./src/accountingservice/Dockerfile tag_suffix: accountingservice context: ./ - setup-qemu: true - file: ./src/frauddetectionservice/Dockerfile tag_suffix: frauddetectionservice context: ./ - setup-qemu: true - file: ./src/frontend/Dockerfile.cypress tag_suffix: frontend-tests context: ./ - setup-qemu: true - file: ./test/Dockerfile tag_suffix: integrationTests context: ./ - setup-qemu: true steps: - uses: actions/checkout@v4 @@ -139,11 +127,21 @@ jobs: echo "Changes detected in ${{ matrix.file_tag.context }}, proceeding with build." echo "skip=false" >> "$GITHUB_OUTPUT" fi - - name: Set up QEMU - if: ${{ matrix.file_tag.setup-qemu }} - uses: docker/setup-qemu-action@v3 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 with: - image: tonistiigi/binfmt:master + aws-access-key-id: ${{inputs.awsAccessKeyId}} + aws-secret-access-key: ${{inputs.awsSecretAccessKey}} + aws-region: us-west-2 + mask-aws-account-id: true + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + with: + mask-password: true + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: