From acfcaff6c46362275c588927ddb8418755231c3b Mon Sep 17 00:00:00 2001
From: Xunzhuo $schema: metaprotocol.aeraki.io.v1alpha1.ApplicationProtocol
$title: Application Protocol
@@ -154,6 +154,28 @@ MetaRoute
beginning of document). Weights associated with the service version
determine the proportion of traffic it receives.
mirror
Destination
mirrorPercentage
Percent
Percentage of the traffic to be mirrored by the mirror
field.
+If this field is absent, all the traffic (100%) will be mirrored.
+Max value is 100.
Percent specifies a percentage in the range of [0.0, 100.0].
+ + +Configures a token bucket which is used for rate limiting.
diff --git a/api/metaprotocol/v1alpha1/metaprotocol_metarouter.pb.go b/api/metaprotocol/v1alpha1/metaprotocol_metarouter.pb.go index 8a4fd6b43..a2da4ce83 100644 --- a/api/metaprotocol/v1alpha1/metaprotocol_metarouter.pb.go +++ b/api/metaprotocol/v1alpha1/metaprotocol_metarouter.pb.go @@ -54,6 +54,7 @@ package v1alpha1 import ( + encoding_binary "encoding/binary" fmt "fmt" proto "github.com/gogo/protobuf/proto" types "github.com/gogo/protobuf/types" @@ -176,7 +177,12 @@ type MetaRoute struct { // can be one of several versions of a service (see glossary in // beginning of document). Weights associated with the service version // determine the proportion of traffic it receives. - Route []*MetaRouteDestination `protobuf:"bytes,3,rep,name=route,proto3" json:"route,omitempty"` + Route []*MetaRouteDestination `protobuf:"bytes,3,rep,name=route,proto3" json:"route,omitempty"` + Mirror *Destination `protobuf:"bytes,5,opt,name=mirror,proto3" json:"mirror,omitempty"` + // Percentage of the traffic to be mirrored by the `mirror` field. + // If this field is absent, all the traffic (100%) will be mirrored. + // Max value is 100. + MirrorPercentage *Percent `protobuf:"bytes,6,opt,name=mirror_percentage,json=mirrorPercentage,proto3" json:"mirror_percentage,omitempty"` // Specifies a list of key-value pairs that should be mutated for each request. How to interpret the key-value pairs // depends on the codec implementation RequestMutation []*KeyValue `protobuf:"bytes,19,rep,name=request_mutation,json=requestMutation,proto3" json:"request_mutation,omitempty"` @@ -242,6 +248,20 @@ func (m *MetaRoute) GetRoute() []*MetaRouteDestination { return nil } +func (m *MetaRoute) GetMirror() *Destination { + if m != nil { + return m.Mirror + } + return nil +} + +func (m *MetaRoute) GetMirrorPercentage() *Percent { + if m != nil { + return m.MirrorPercentage + } + return nil +} + func (m *MetaRoute) GetRequestMutation() []*KeyValue { if m != nil { return m.RequestMutation @@ -1014,6 +1034,54 @@ func (m *GlobalRateLimit_Descriptor) GetDescriptorKey() string { return "" } +// Percent specifies a percentage in the range of [0.0, 100.0]. +type Percent struct { + Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Percent) Reset() { *m = Percent{} } +func (m *Percent) String() string { return proto.CompactTextString(m) } +func (*Percent) ProtoMessage() {} +func (*Percent) Descriptor() ([]byte, []int) { + return fileDescriptor_1e2715e051935576, []int{10} +} +func (m *Percent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Percent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Percent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Percent) XXX_Merge(src proto.Message) { + xxx_messageInfo_Percent.Merge(m, src) +} +func (m *Percent) XXX_Size() int { + return m.Size() +} +func (m *Percent) XXX_DiscardUnknown() { + xxx_messageInfo_Percent.DiscardUnknown(m) +} + +var xxx_messageInfo_Percent proto.InternalMessageInfo + +func (m *Percent) GetValue() float64 { + if m != nil { + return m.Value + } + return 0 +} + func init() { proto.RegisterType((*MetaRouter)(nil), "metaprotocol.aeraki.io.v1alpha1.MetaRouter") proto.RegisterType((*MetaRoute)(nil), "metaprotocol.aeraki.io.v1alpha1.MetaRoute") @@ -1029,6 +1097,7 @@ func init() { proto.RegisterType((*LocalRateLimit_Condition)(nil), "metaprotocol.aeraki.io.v1alpha1.LocalRateLimit.Condition") proto.RegisterType((*GlobalRateLimit)(nil), "metaprotocol.aeraki.io.v1alpha1.GlobalRateLimit") proto.RegisterType((*GlobalRateLimit_Descriptor)(nil), "metaprotocol.aeraki.io.v1alpha1.GlobalRateLimit.Descriptor") + proto.RegisterType((*Percent)(nil), "metaprotocol.aeraki.io.v1alpha1.Percent") } func init() { @@ -1036,71 +1105,74 @@ func init() { } var fileDescriptor_1e2715e051935576 = []byte{ - // 1010 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x6e, 0x1b, 0x45, - 0x14, 0xc7, 0xbb, 0xfe, 0x52, 0x7c, 0x9c, 0x0f, 0x77, 0x08, 0xc5, 0x35, 0x90, 0x44, 0xbe, 0x0a, - 0x15, 0x5d, 0x93, 0x54, 0xa8, 0x40, 0x91, 0x50, 0xdc, 0xa4, 0xb4, 0x4d, 0x23, 0xaa, 0x49, 0xa8, - 0x14, 0x84, 0x58, 0x8d, 0xd7, 0x27, 0xf6, 0x28, 0xbb, 0x3b, 0xcb, 0xec, 0x6c, 0x1a, 0x5f, 0x22, - 0x1e, 0x84, 0xc7, 0xe0, 0x86, 0x4b, 0x2e, 0xb8, 0x44, 0x3c, 0x00, 0x2a, 0x79, 0x12, 0xb4, 0x33, - 0xb3, 0xf6, 0x3a, 0x50, 0x39, 0x81, 0xde, 0xf9, 0x9c, 0xe3, 0xff, 0x6f, 0xce, 0x9c, 0x19, 0xff, - 0xc7, 0x70, 0x9f, 0xc5, 0xbc, 0x1b, 0xa2, 0x62, 0xb1, 0x14, 0x4a, 0xf8, 0x22, 0xe8, 0x9e, 0x6d, - 0xb1, 0x20, 0x1e, 0xb1, 0xad, 0x99, 0xac, 0x97, 0x05, 0x52, 0xa4, 0x0a, 0xa5, 0xab, 0x73, 0x64, - 0xbd, 0x58, 0x76, 0x19, 0x4a, 0x76, 0xca, 0x5d, 0x2e, 0xdc, 0x5c, 0xde, 0x5e, 0x1f, 0x0a, 0x31, - 0x0c, 0xb0, 0x9b, 0x2d, 0x70, 0xc2, 0x31, 0x18, 0x78, 0x7d, 0x1c, 0xb1, 0x33, 0x2e, 0x2c, 0xa1, - 0xbd, 0x66, 0xbf, 0xa0, 0xa3, 0x7e, 0x7a, 0xd2, 0x1d, 0xa4, 0x92, 0x29, 0x2e, 0xa2, 0xd7, 0xd5, - 0x5f, 0x4a, 0x16, 0xc7, 0x28, 0x13, 0x53, 0xef, 0xfc, 0x54, 0x02, 0x38, 0x40, 0xc5, 0xa8, 0x6e, - 0x8b, 0xac, 0x42, 0x75, 0x24, 0x12, 0x95, 0xb4, 0x9c, 0x8d, 0xf2, 0x66, 0x9d, 0x9a, 0x80, 0xf4, - 0xa0, 0xa6, 0xdb, 0x4e, 0x5a, 0xa5, 0x8d, 0xf2, 0x66, 0x63, 0xfb, 0x8e, 0x3b, 0xa7, 0x6f, 0x77, - 0x82, 0xa4, 0x56, 0x49, 0x8e, 0xa1, 0x19, 0x08, 0x9f, 0x05, 0x9e, 0x64, 0x0a, 0xbd, 0x80, 0x87, - 0x5c, 0xb5, 0xca, 0x1b, 0xce, 0x66, 0x63, 0xbb, 0x3b, 0x97, 0xf6, 0x2c, 0x13, 0x52, 0xa6, 0xf0, - 0x59, 0x26, 0xa3, 0xcb, 0xc1, 0x4c, 0x4c, 0xbe, 0x85, 0x9b, 0xc3, 0x40, 0xf4, 0x67, 0xd9, 0x15, - 0xcd, 0xfe, 0x68, 0x2e, 0xfb, 0x4b, 0xad, 0x9c, 0xc2, 0x57, 0x86, 0xb3, 0x89, 0xce, 0x5f, 0x25, - 0xa8, 0x4f, 0xb6, 0x43, 0x08, 0x54, 0x22, 0x16, 0x62, 0xcb, 0xd9, 0x70, 0x36, 0xeb, 0x54, 0x7f, - 0x26, 0x7b, 0x50, 0x0d, 0x99, 0xf2, 0x47, 0xad, 0xd2, 0x15, 0xf7, 0x33, 0xc1, 0x1d, 0x64, 0x32, - 0x6a, 0xd4, 0x64, 0x1f, 0xaa, 0x7a, 0x56, 0xad, 0xb2, 0x1e, 0xf2, 0xc7, 0x57, 0xc7, 0xec, 0x62, - 0xa2, 0x78, 0xa4, 0x8f, 0x9d, 0x1a, 0x06, 0x39, 0x82, 0xa6, 0xc4, 0xef, 0x53, 0x4c, 0x94, 0x17, - 0xa6, 0x4a, 0x97, 0x5a, 0x6f, 0x69, 0xee, 0x07, 0x73, 0xb9, 0xfb, 0x38, 0x7e, 0xc1, 0x82, 0x14, - 0xe9, 0x8a, 0x45, 0x1c, 0x58, 0x02, 0x79, 0x01, 0x37, 0x25, 0x26, 0xb1, 0x88, 0x12, 0x9c, 0x62, - 0x57, 0xaf, 0x8b, 0x6d, 0xe6, 0x8c, 0x9c, 0xdb, 0xf9, 0x1c, 0x16, 0xf2, 0x2a, 0x79, 0x1b, 0xca, - 0xa7, 0x38, 0x36, 0x03, 0xee, 0x95, 0x5f, 0xed, 0x94, 0x68, 0x16, 0x93, 0xdb, 0x50, 0x3d, 0xcb, - 0xea, 0x7a, 0xc8, 0xb6, 0x60, 0x32, 0x9d, 0x3f, 0x1d, 0x58, 0x9e, 0x1d, 0x29, 0xf1, 0x00, 0x98, - 0x52, 0x92, 0xf7, 0xf5, 0xad, 0x75, 0x74, 0x87, 0x5f, 0x5c, 0xf3, 0x5c, 0xdc, 0x9d, 0x09, 0x61, - 0x2f, 0x52, 0x72, 0x4c, 0x0b, 0xc8, 0xf6, 0x29, 0xac, 0x5c, 0x2a, 0x93, 0x66, 0xa1, 0x71, 0xd3, - 0x73, 0xaf, 0xd8, 0x73, 0x63, 0xfb, 0xc3, 0xb9, 0x0d, 0x1c, 0x2a, 0xc9, 0xa3, 0xa1, 0xbd, 0x15, - 0x5a, 0xfa, 0x59, 0xe9, 0x13, 0xa7, 0x83, 0xd0, 0x28, 0x54, 0xc8, 0x2d, 0xa8, 0xe2, 0x39, 0xf3, - 0x95, 0x59, 0xea, 0xf1, 0x0d, 0x6a, 0x42, 0xd2, 0x82, 0x5a, 0x2c, 0xf1, 0x84, 0x9f, 0x9b, 0x19, - 0x3d, 0xbe, 0x41, 0x6d, 0x9c, 0x29, 0x24, 0x0e, 0xf1, 0x5c, 0xff, 0xe2, 0xb4, 0x42, 0x87, 0xbd, - 0x45, 0x00, 0x7d, 0xf7, 0x3c, 0x35, 0x8e, 0xb1, 0xf3, 0xa3, 0x03, 0xab, 0xff, 0x76, 0xa7, 0xc8, - 0x21, 0x34, 0x06, 0xd3, 0x50, 0x2f, 0x7b, 0x95, 0xdd, 0x14, 0x10, 0xe6, 0xbc, 0x8a, 0x14, 0x72, - 0x0b, 0x6a, 0x2f, 0x91, 0x0f, 0x47, 0x4a, 0x77, 0xbb, 0x44, 0x6d, 0xd4, 0xf9, 0xc1, 0x81, 0x46, - 0x71, 0xf1, 0x77, 0xa0, 0x92, 0xb9, 0x50, 0xf1, 0x42, 0xe8, 0x44, 0x06, 0x48, 0xd2, 0x7e, 0x82, - 0x06, 0x50, 0xa7, 0x36, 0x22, 0x3b, 0x50, 0x89, 0x85, 0xcc, 0xdd, 0xe5, 0xee, 0xdc, 0x36, 0x9f, - 0x0b, 0xa9, 0x0e, 0x31, 0x40, 0x5f, 0x09, 0x49, 0xb5, 0xb4, 0xb3, 0x0d, 0x8b, 0xc5, 0x6c, 0xb6, - 0x54, 0x94, 0x86, 0x7d, 0x94, 0xba, 0x8b, 0x25, 0x6a, 0xa3, 0xa7, 0x95, 0x85, 0x52, 0xb3, 0x6c, - 0x5c, 0xa0, 0xf3, 0x6b, 0x05, 0x96, 0x67, 0x8d, 0x8a, 0x7c, 0x07, 0x8b, 0x4a, 0x9c, 0x62, 0xe4, - 0xf5, 0x53, 0xff, 0x14, 0x95, 0x1d, 0xdc, 0x83, 0x6b, 0xfa, 0x9d, 0x7b, 0x94, 0x31, 0x7a, 0x1a, - 0x41, 0x1b, 0x6a, 0x1a, 0x90, 0x63, 0x00, 0x5f, 0x44, 0x03, 0x9e, 0xcd, 0x29, 0xf7, 0xe6, 0x4f, - 0xaf, 0x4b, 0x7f, 0x98, 0x13, 0x68, 0x01, 0xd6, 0xfe, 0xd9, 0x81, 0x46, 0x61, 0x5d, 0xf2, 0x7e, - 0x76, 0x53, 0xce, 0x3d, 0xbd, 0x7a, 0x62, 0xa7, 0x50, 0x0f, 0xd9, 0xb9, 0xfe, 0x4e, 0x42, 0x76, - 0x61, 0xc5, 0x94, 0xbc, 0x18, 0xa5, 0x77, 0xc2, 0x83, 0xc0, 0xde, 0xf9, 0xf7, 0x5c, 0xf3, 0x00, - 0xb9, 0xf9, 0x03, 0xe4, 0x7e, 0xfd, 0x24, 0x52, 0xf7, 0xb6, 0x8d, 0x13, 0x2c, 0x19, 0xd1, 0x73, - 0x94, 0x8f, 0x78, 0x10, 0x90, 0x87, 0xb0, 0x94, 0x49, 0x3d, 0x1e, 0x29, 0x94, 0x67, 0x2c, 0xb0, - 0x47, 0x78, 0xfb, 0x1f, 0x8c, 0x5d, 0xfb, 0xc8, 0x99, 0xeb, 0xb0, 0x98, 0x89, 0x9e, 0x58, 0x4d, - 0xfb, 0x17, 0x07, 0xea, 0x93, 0x3d, 0x91, 0xa7, 0xb9, 0x37, 0x3b, 0xff, 0xc9, 0x9b, 0xad, 0xcf, - 0x18, 0x83, 0xf6, 0x2f, 0x1d, 0x67, 0xe9, 0x7f, 0x1f, 0xa7, 0xfd, 0x59, 0x14, 0xce, 0xb4, 0xf3, - 0x47, 0x19, 0x56, 0x2e, 0xbd, 0x49, 0x6f, 0x74, 0x13, 0xef, 0x42, 0x6d, 0x20, 0x42, 0xc6, 0xa3, - 0xa2, 0x91, 0xda, 0x14, 0xe9, 0x41, 0x6e, 0xf9, 0x9e, 0xe2, 0x21, 0x8a, 0x54, 0xcd, 0x3d, 0x02, - 0xba, 0x6c, 0x15, 0x47, 0x46, 0x40, 0x36, 0x60, 0x71, 0x80, 0xd1, 0xd8, 0x13, 0x91, 0x77, 0xc2, - 0x78, 0xa0, 0x1f, 0xe2, 0x05, 0x0a, 0x59, 0xee, 0xab, 0xe8, 0x11, 0xe3, 0x01, 0xd9, 0x02, 0x32, - 0x7d, 0xa8, 0xbd, 0x04, 0xe5, 0x19, 0xf7, 0xb1, 0x55, 0x9d, 0xb6, 0xd3, 0x94, 0xf9, 0xd6, 0x0f, - 0x4d, 0x91, 0xf4, 0xb5, 0x03, 0xf9, 0x92, 0xc7, 0x4a, 0xc8, 0xa4, 0x55, 0xd3, 0x57, 0xfd, 0xc1, - 0x75, 0x1f, 0xf7, 0xcc, 0x91, 0x2c, 0x63, 0x6a, 0x48, 0x39, 0xb4, 0x7d, 0x0c, 0x30, 0xad, 0x93, - 0x75, 0x58, 0x88, 0xa5, 0x88, 0x51, 0xaa, 0x99, 0xb7, 0x68, 0x92, 0x24, 0x77, 0x60, 0x79, 0xaa, - 0xf6, 0x32, 0xe7, 0x2f, 0x0c, 0x74, 0x69, 0x5a, 0xda, 0xc7, 0x71, 0x6f, 0xef, 0xb7, 0x8b, 0x35, - 0xe7, 0xf7, 0x8b, 0x35, 0xe7, 0xd5, 0xc5, 0x9a, 0xf3, 0xcd, 0xfd, 0x21, 0x57, 0xa3, 0xb4, 0xef, - 0xfa, 0x22, 0xec, 0x9a, 0xa6, 0xef, 0x86, 0x98, 0x8c, 0xec, 0xe7, 0xee, 0x6b, 0xff, 0x4c, 0xf6, - 0x6b, 0x3a, 0x75, 0xef, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xa5, 0x27, 0xd2, 0x70, 0x0a, - 0x00, 0x00, + // 1069 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x5d, 0x6f, 0x1b, 0x45, + 0x17, 0xc7, 0xbb, 0x7e, 0x7b, 0xe2, 0xe3, 0xbc, 0x38, 0xf3, 0x84, 0xe2, 0x1a, 0x48, 0x22, 0x5f, + 0x85, 0x8a, 0xae, 0x49, 0x2a, 0x54, 0xa0, 0x48, 0x28, 0x6e, 0x52, 0xda, 0xa6, 0x11, 0xd1, 0x26, + 0xad, 0x14, 0x84, 0x58, 0x8d, 0xd7, 0x27, 0xf6, 0x28, 0xbb, 0x3b, 0xcb, 0xec, 0x38, 0x8d, 0x2f, + 0x11, 0x1f, 0x84, 0x8f, 0xc1, 0x0d, 0x97, 0x5c, 0x70, 0x89, 0xf8, 0x00, 0xa8, 0xca, 0x07, 0x41, + 0x68, 0x5e, 0xd6, 0x5e, 0x07, 0x2a, 0xc7, 0xc0, 0x9d, 0xcf, 0x39, 0xfe, 0xff, 0xe6, 0xcc, 0xcc, + 0xd9, 0x73, 0x06, 0x1e, 0xd0, 0x84, 0xb5, 0x23, 0x94, 0x34, 0x11, 0x5c, 0xf2, 0x80, 0x87, 0xed, + 0x8b, 0x6d, 0x1a, 0x26, 0x03, 0xba, 0x3d, 0xe5, 0xf5, 0x95, 0x21, 0xf8, 0x50, 0xa2, 0x70, 0xb5, + 0x8f, 0x6c, 0xe4, 0xc3, 0x2e, 0x45, 0x41, 0xcf, 0x99, 0xcb, 0xb8, 0x9b, 0xc9, 0x9b, 0x1b, 0x7d, + 0xce, 0xfb, 0x21, 0xb6, 0xd5, 0x02, 0x67, 0x0c, 0xc3, 0x9e, 0xdf, 0xc5, 0x01, 0xbd, 0x60, 0xdc, + 0x12, 0x9a, 0xeb, 0xf6, 0x0f, 0xda, 0xea, 0x0e, 0xcf, 0xda, 0xbd, 0xa1, 0xa0, 0x92, 0xf1, 0xf8, + 0x4d, 0xf1, 0x57, 0x82, 0x26, 0x09, 0x8a, 0xd4, 0xc4, 0x5b, 0x3f, 0x14, 0x00, 0x0e, 0x51, 0x52, + 0x4f, 0xa7, 0x45, 0xd6, 0xa0, 0x3c, 0xe0, 0xa9, 0x4c, 0x1b, 0xce, 0x66, 0x71, 0xab, 0xea, 0x19, + 0x83, 0x74, 0xa0, 0xa2, 0xd3, 0x4e, 0x1b, 0x85, 0xcd, 0xe2, 0x56, 0x6d, 0xe7, 0xae, 0x3b, 0x23, + 0x6f, 0x77, 0x8c, 0xf4, 0xac, 0x92, 0x9c, 0x42, 0x3d, 0xe4, 0x01, 0x0d, 0x7d, 0x41, 0x25, 0xfa, + 0x21, 0x8b, 0x98, 0x6c, 0x14, 0x37, 0x9d, 0xad, 0xda, 0x4e, 0x7b, 0x26, 0xed, 0xb9, 0x12, 0x7a, + 0x54, 0xe2, 0x73, 0x25, 0xf3, 0x96, 0xc3, 0x29, 0x9b, 0x7c, 0x0d, 0xab, 0xfd, 0x90, 0x77, 0xa7, + 0xd9, 0x25, 0xcd, 0xfe, 0x70, 0x26, 0xfb, 0x0b, 0xad, 0x9c, 0xc0, 0x57, 0xfa, 0xd3, 0x8e, 0xd6, + 0x1f, 0x45, 0xa8, 0x8e, 0xb7, 0x43, 0x08, 0x94, 0x62, 0x1a, 0x61, 0xc3, 0xd9, 0x74, 0xb6, 0xaa, + 0x9e, 0xfe, 0x4d, 0xf6, 0xa1, 0x1c, 0x51, 0x19, 0x0c, 0x1a, 0x85, 0x1b, 0xee, 0x67, 0x8c, 0x3b, + 0x54, 0x32, 0xcf, 0xa8, 0xc9, 0x01, 0x94, 0xf5, 0x59, 0x35, 0x8a, 0xfa, 0x90, 0x3f, 0xba, 0x39, + 0x66, 0x0f, 0x53, 0xc9, 0x62, 0x7d, 0xed, 0x9e, 0x61, 0x90, 0x3d, 0xa8, 0x44, 0x4c, 0x08, 0x2e, + 0x1a, 0x65, 0x9d, 0xd4, 0x07, 0x33, 0x69, 0x79, 0x88, 0xd5, 0x92, 0x17, 0xb0, 0x6a, 0x7e, 0xf9, + 0x09, 0x8a, 0x00, 0x63, 0x49, 0xfb, 0xd8, 0xa8, 0x68, 0xe0, 0xd6, 0x4c, 0xe0, 0x91, 0x91, 0x78, + 0x75, 0x83, 0x38, 0x1a, 0x13, 0xc8, 0x09, 0xd4, 0x05, 0x7e, 0x3b, 0xc4, 0x54, 0xfa, 0xd1, 0x50, + 0xea, 0x25, 0x1b, 0xff, 0xd7, 0x9b, 0x7e, 0x7f, 0x26, 0xf5, 0x00, 0x47, 0x2f, 0x69, 0x38, 0x44, + 0x6f, 0xc5, 0x22, 0x0e, 0x2d, 0x81, 0xbc, 0x84, 0x55, 0x81, 0x69, 0xc2, 0xe3, 0x14, 0x27, 0xd8, + 0xb5, 0x79, 0xb1, 0xf5, 0x8c, 0x91, 0x71, 0x5b, 0x9f, 0xc1, 0x42, 0x16, 0x25, 0x6f, 0x41, 0xf1, + 0x1c, 0x47, 0xe6, 0xf6, 0x3b, 0xc5, 0xd7, 0xbb, 0x05, 0x4f, 0xd9, 0xe4, 0x0e, 0x94, 0x2f, 0x54, + 0x5c, 0x57, 0x80, 0x0d, 0x18, 0x4f, 0xeb, 0x77, 0x07, 0x96, 0xa7, 0xef, 0x9b, 0xf8, 0x00, 0x54, + 0x4a, 0xc1, 0xba, 0xfa, 0x93, 0x72, 0x74, 0x86, 0x9f, 0xcf, 0x59, 0x34, 0xee, 0xee, 0x98, 0xb0, + 0x1f, 0x4b, 0x31, 0xf2, 0x72, 0xc8, 0xe6, 0x39, 0xac, 0x5c, 0x0b, 0x93, 0x7a, 0x2e, 0x71, 0x93, + 0x73, 0x27, 0x9f, 0xf3, 0x4d, 0x0a, 0xe4, 0x58, 0x0a, 0x16, 0xf7, 0x6d, 0xc9, 0x6a, 0xe9, 0xa7, + 0x85, 0x8f, 0x9d, 0x16, 0x42, 0x2d, 0x17, 0x21, 0xb7, 0xa1, 0x8c, 0x97, 0x34, 0x90, 0x66, 0xa9, + 0x27, 0xb7, 0x3c, 0x63, 0x92, 0x06, 0x54, 0x12, 0x81, 0x67, 0xec, 0xd2, 0x9c, 0xd1, 0x93, 0x5b, + 0x9e, 0xb5, 0x95, 0x42, 0x60, 0x1f, 0x2f, 0x75, 0x3b, 0xd0, 0x0a, 0x6d, 0x76, 0x16, 0x01, 0xf4, + 0x87, 0xe1, 0xcb, 0x51, 0x82, 0xad, 0xef, 0x1d, 0x58, 0xfb, 0xbb, 0x82, 0x27, 0xc7, 0x50, 0xeb, + 0x4d, 0x4c, 0xbd, 0xec, 0x9c, 0xe5, 0x6e, 0xee, 0x2b, 0x4f, 0x21, 0xb7, 0xa1, 0xf2, 0x0a, 0x59, + 0x7f, 0x20, 0x75, 0xb6, 0x4b, 0x9e, 0xb5, 0x5a, 0xdf, 0x39, 0x50, 0xcb, 0x2f, 0xfe, 0x36, 0x94, + 0x54, 0x8b, 0xcc, 0x17, 0x84, 0x76, 0x28, 0x40, 0x3a, 0xec, 0xa6, 0x68, 0x00, 0x55, 0xcf, 0x5a, + 0x64, 0x17, 0x4a, 0x09, 0x17, 0x59, 0xeb, 0xbb, 0x37, 0xfb, 0x23, 0xe2, 0x42, 0x1e, 0x63, 0x88, + 0x81, 0xe4, 0xc2, 0xd3, 0xd2, 0xd6, 0x0e, 0x2c, 0xe6, 0xbd, 0x6a, 0xa9, 0x78, 0x18, 0x75, 0x51, + 0xe8, 0x2c, 0x96, 0x3c, 0x6b, 0x3d, 0x2b, 0x2d, 0x14, 0xea, 0x45, 0xd3, 0xa2, 0x5a, 0x3f, 0x97, + 0x60, 0x79, 0xba, 0x8b, 0x92, 0x6f, 0x60, 0x51, 0xf2, 0x73, 0x8c, 0xfd, 0xee, 0x30, 0x38, 0x47, + 0x69, 0x0f, 0xee, 0xe1, 0x9c, 0xcd, 0xd8, 0x3d, 0x51, 0x8c, 0x8e, 0x46, 0x78, 0x35, 0x39, 0x31, + 0xc8, 0x29, 0x40, 0xc0, 0xe3, 0x1e, 0x53, 0xe7, 0x94, 0x0d, 0x8e, 0x4f, 0xe6, 0xa5, 0x3f, 0xca, + 0x08, 0x5e, 0x0e, 0xd6, 0xfc, 0xd1, 0x81, 0x5a, 0x6e, 0x5d, 0xf2, 0x9e, 0xaa, 0x94, 0x4b, 0x5f, + 0xaf, 0x9e, 0xda, 0x53, 0xa8, 0x46, 0xf4, 0x52, 0xff, 0x27, 0x25, 0x7b, 0xb0, 0x62, 0x42, 0xaa, + 0x8b, 0xf9, 0x67, 0x2c, 0x0c, 0x6d, 0xcd, 0xbf, 0xeb, 0x9a, 0xe9, 0xe8, 0x66, 0xd3, 0xd1, 0x7d, + 0xf1, 0x34, 0x96, 0xf7, 0x77, 0x4c, 0x27, 0x58, 0x32, 0xa2, 0x23, 0x14, 0x8f, 0x59, 0x18, 0x92, + 0x47, 0xb0, 0xa4, 0xa4, 0x3e, 0x8b, 0x25, 0x8a, 0x0b, 0x1a, 0xda, 0x2b, 0xbc, 0xf3, 0x17, 0xc6, + 0x9e, 0x9d, 0xc0, 0xa6, 0x1c, 0x16, 0x95, 0xe8, 0xa9, 0xd5, 0x34, 0x7f, 0x72, 0xa0, 0x3a, 0xde, + 0x13, 0x79, 0x96, 0x0d, 0x0e, 0xe7, 0x1f, 0x0d, 0x0e, 0xdb, 0x67, 0xcc, 0xf4, 0x08, 0xae, 0x5d, + 0x67, 0xe1, 0x5f, 0x5f, 0xa7, 0xfd, 0x2c, 0x72, 0x77, 0xda, 0xfa, 0xad, 0x08, 0x2b, 0xd7, 0x06, + 0xe6, 0x7f, 0xba, 0x89, 0x77, 0xa0, 0xd2, 0xe3, 0x11, 0x65, 0x71, 0xbe, 0x91, 0x5a, 0x17, 0xe9, + 0x40, 0xd6, 0xf2, 0x7d, 0xc9, 0x22, 0xe4, 0x43, 0x39, 0xf3, 0x0a, 0xbc, 0x65, 0xab, 0x38, 0x31, + 0x02, 0xb2, 0x09, 0x8b, 0x3d, 0x8c, 0x47, 0x3e, 0x8f, 0xfd, 0x33, 0xca, 0x42, 0xfd, 0x4a, 0x58, + 0xf0, 0x40, 0xf9, 0xbe, 0x8c, 0x1f, 0x53, 0x16, 0x92, 0x6d, 0x20, 0x93, 0x57, 0x84, 0x9f, 0xa2, + 0xb8, 0x60, 0x01, 0xea, 0x21, 0x6a, 0xd3, 0xa9, 0x8b, 0x6c, 0xeb, 0xc7, 0x26, 0x48, 0xba, 0xba, + 0x03, 0x05, 0x82, 0x25, 0x92, 0x8b, 0xb4, 0x51, 0xd1, 0xa5, 0xfe, 0x70, 0xde, 0x97, 0x87, 0xea, + 0x48, 0x96, 0x31, 0x69, 0x48, 0x19, 0xb4, 0x79, 0x0a, 0x30, 0x89, 0x93, 0x0d, 0x58, 0x48, 0x04, + 0x4f, 0x50, 0xc8, 0xa9, 0x59, 0x34, 0x76, 0x92, 0xbb, 0xb0, 0x3c, 0x51, 0xfb, 0xaa, 0xf3, 0xe7, + 0x0e, 0x74, 0x69, 0x12, 0x3a, 0xc0, 0x51, 0x6b, 0x03, 0xfe, 0x67, 0x67, 0xb3, 0x7a, 0xfe, 0x99, + 0x99, 0xa0, 0xa0, 0x8e, 0xed, 0xf2, 0x9d, 0xfd, 0x5f, 0xae, 0xd6, 0x9d, 0x5f, 0xaf, 0xd6, 0x9d, + 0xd7, 0x57, 0xeb, 0xce, 0x57, 0x0f, 0xfa, 0x4c, 0x0e, 0x86, 0x5d, 0x37, 0xe0, 0x51, 0xdb, 0xec, + 0xea, 0x5e, 0x84, 0xe9, 0xc0, 0xfe, 0x6e, 0xbf, 0xf1, 0x29, 0xdc, 0xad, 0x68, 0xd7, 0xfd, 0x3f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xae, 0xf6, 0xad, 0x2e, 0x2e, 0x0b, 0x00, 0x00, } func (m *MetaRouter) Marshal() (dAtA []byte, err error) { @@ -1233,6 +1305,30 @@ func (m *MetaRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x9a } } + if m.MirrorPercentage != nil { + { + size, err := m.MirrorPercentage.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMetaprotocolMetarouter(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.Mirror != nil { + { + size, err := m.Mirror.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMetaprotocolMetarouter(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if len(m.Route) > 0 { for iNdEx := len(m.Route) - 1; iNdEx >= 0; iNdEx-- { { @@ -1860,6 +1956,39 @@ func (m *GlobalRateLimit_Descriptor) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *Percent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Percent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Percent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Value != 0 { + i -= 8 + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Value)))) + i-- + dAtA[i] = 0x9 + } + return len(dAtA) - i, nil +} + func encodeVarintMetaprotocolMetarouter(dAtA []byte, offset int, v uint64) int { offset -= sovMetaprotocolMetarouter(v) base := offset @@ -1923,6 +2052,14 @@ func (m *MetaRoute) Size() (n int) { n += 1 + l + sovMetaprotocolMetarouter(uint64(l)) } } + if m.Mirror != nil { + l = m.Mirror.Size() + n += 1 + l + sovMetaprotocolMetarouter(uint64(l)) + } + if m.MirrorPercentage != nil { + l = m.MirrorPercentage.Size() + n += 1 + l + sovMetaprotocolMetarouter(uint64(l)) + } if len(m.RequestMutation) > 0 { for _, e := range m.RequestMutation { l = e.Size() @@ -2211,6 +2348,21 @@ func (m *GlobalRateLimit_Descriptor) Size() (n int) { return n } +func (m *Percent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Value != 0 { + n += 9 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovMetaprotocolMetarouter(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -2540,6 +2692,78 @@ func (m *MetaRoute) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Mirror", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetaprotocolMetarouter + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Mirror == nil { + m.Mirror = &Destination{} + } + if err := m.Mirror.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MirrorPercentage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetaprotocolMetarouter + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MirrorPercentage == nil { + m.MirrorPercentage = &Percent{} + } + if err := m.MirrorPercentage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 19: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field RequestMutation", wireType) @@ -4177,6 +4401,71 @@ func (m *GlobalRateLimit_Descriptor) Unmarshal(dAtA []byte) error { } return nil } +func (m *Percent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetaprotocolMetarouter + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Percent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Percent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Value = float64(math.Float64frombits(v)) + default: + iNdEx = preIndex + skippy, err := skipMetaprotocolMetarouter(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthMetaprotocolMetarouter + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipMetaprotocolMetarouter(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/api/metaprotocol/v1alpha1/metaprotocol_metarouter.proto b/api/metaprotocol/v1alpha1/metaprotocol_metarouter.proto index 1935a4ac8..dc360dbca 100644 --- a/api/metaprotocol/v1alpha1/metaprotocol_metarouter.proto +++ b/api/metaprotocol/v1alpha1/metaprotocol_metarouter.proto @@ -114,12 +114,12 @@ message MetaRoute { //MetaFaultInjection fault = 4; - //MetaDestination mirror = 5; + Destination mirror = 5; // Percentage of the traffic to be mirrored by the `mirror` field. // If this field is absent, all the traffic (100%) will be mirrored. // Max value is 100. - // Percent mirror_percentage = 6; + Percent mirror_percentage = 6; // Specifies a list of key-value pairs that should be mutated for each request. How to interpret the key-value pairs // depends on the codec implementation @@ -295,4 +295,9 @@ message GlobalRateLimit { // Defines what properties in the requests should be sent to the rate limit service repeated GlobalRateLimit.Descriptor descriptors = 6 [(google.api.field_behavior) = REQUIRED]; +} + +// Percent specifies a percentage in the range of [0.0, 100.0]. +message Percent { + double value = 1; } \ No newline at end of file diff --git a/api/metaprotocol/v1alpha1/metaprotocol_metarouter_deepcopy.gen.go b/api/metaprotocol/v1alpha1/metaprotocol_metarouter_deepcopy.gen.go index a6f676b05..d15746c52 100644 --- a/api/metaprotocol/v1alpha1/metaprotocol_metarouter_deepcopy.gen.go +++ b/api/metaprotocol/v1alpha1/metaprotocol_metarouter_deepcopy.gen.go @@ -338,3 +338,24 @@ func (in *GlobalRateLimit_Descriptor) DeepCopy() *GlobalRateLimit_Descriptor { func (in *GlobalRateLimit_Descriptor) DeepCopyInterface() interface{} { return in.DeepCopy() } + +// DeepCopyInto supports using Percent within kubernetes types, where deepcopy-gen is used. +func (in *Percent) DeepCopyInto(out *Percent) { + p := proto.Clone(in).(*Percent) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Percent. Required by controller-gen. +func (in *Percent) DeepCopy() *Percent { + if in == nil { + return nil + } + out := new(Percent) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Percent. Required by controller-gen. +func (in *Percent) DeepCopyInterface() interface{} { + return in.DeepCopy() +} diff --git a/api/metaprotocol/v1alpha1/metaprotocol_metarouter_json.gen.go b/api/metaprotocol/v1alpha1/metaprotocol_metarouter_json.gen.go index 6d5e2a799..ea991cebc 100644 --- a/api/metaprotocol/v1alpha1/metaprotocol_metarouter_json.gen.go +++ b/api/metaprotocol/v1alpha1/metaprotocol_metarouter_json.gen.go @@ -211,6 +211,17 @@ func (this *GlobalRateLimit_Descriptor) UnmarshalJSON(b []byte) error { return MetaprotocolMetarouterUnmarshaler.Unmarshal(bytes.NewReader(b), this) } +// MarshalJSON is a custom marshaler for Percent +func (this *Percent) MarshalJSON() ([]byte, error) { + str, err := MetaprotocolMetarouterMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for Percent +func (this *Percent) UnmarshalJSON(b []byte) error { + return MetaprotocolMetarouterUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + var ( MetaprotocolMetarouterMarshaler = &github_com_gogo_protobuf_jsonpb.Marshaler{} MetaprotocolMetarouterUnmarshaler = &github_com_gogo_protobuf_jsonpb.Unmarshaler{AllowUnknownFields: true} diff --git a/crd/kubernetes/customresourcedefinitions.gen.yaml b/crd/kubernetes/customresourcedefinitions.gen.yaml index 90869fbe6..b4ef37821 100644 --- a/crd/kubernetes/customresourcedefinitions.gen.yaml +++ b/crd/kubernetes/customresourcedefinitions.gen.yaml @@ -392,6 +392,32 @@ spec: attribute is specified, presence of the attribute is checked. type: object type: object + mirror: + properties: + host: + description: The name of a service from the service registry. + format: string + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + format: string + type: string + type: object + mirrorPercentage: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + properties: + value: + format: double + type: number + type: object name: description: The name assigned to the route for debugging purposes. format: string diff --git a/k8s/crd.yaml b/k8s/crd.yaml index 90869fbe6..b4ef37821 100644 --- a/k8s/crd.yaml +++ b/k8s/crd.yaml @@ -392,6 +392,32 @@ spec: attribute is specified, presence of the attribute is checked. type: object type: object + mirror: + properties: + host: + description: The name of a service from the service registry. + format: string + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + format: string + type: string + type: object + mirrorPercentage: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + properties: + value: + format: double + type: number + type: object name: description: The name assigned to the route for debugging purposes. format: string