diff --git a/Makefile b/Makefile index a2cb1de..67af59a 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ PROTOC_OUT?=. gen-proto: $(PROTOC_GEN_GO) $(PROTOC_GEN_GO_VTPROTO) $(PROTOC) $(eval STRUCTS := $(shell grep '^message' proto/*.proto | cut -d ' ' -f2)) $(eval PROTOC_VT_STRUCTS := $(shell for s in $(STRUCTS); do echo --go-vtproto_opt=pool=./aggregationpb.$$s ;done)) - $(PROTOC) -I . --go_out=$(PROTOC_OUT) --plugin protoc-gen-go="$(PROTOC_GEN_GO)" \ + $(PROTOC) -I proto --go_out=$(PROTOC_OUT) --plugin protoc-gen-go="$(PROTOC_GEN_GO)" \ --go-vtproto_out=$(PROTOC_OUT) --plugin protoc-gen-go-vtproto="$(PROTOC_GEN_GO_VTPROTO)" \ --go-vtproto_opt=features=marshal+unmarshal+size+pool \ $(PROTOC_VT_STRUCTS) \ diff --git a/aggregationpb/aggregation.pb.go b/aggregationpb/aggregation.pb.go index fc001ac..0860496 100644 --- a/aggregationpb/aggregation.pb.go +++ b/aggregationpb/aggregation.pb.go @@ -6,7 +6,7 @@ // versions: // protoc-gen-go v1.28.1 // protoc v4.22.1 -// source: proto/aggregation.proto +// source: aggregation.proto package aggregationpb @@ -30,17 +30,17 @@ type CombinedMetrics struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ServiceMetrics []*KeyedServiceMetrics `protobuf:"bytes,1,rep,name=service_metrics,json=serviceMetrics,proto3" json:"service_metrics,omitempty"` - OverflowServices *Overflow `protobuf:"bytes,2,opt,name=overflow_services,json=overflowServices,proto3" json:"overflow_services,omitempty"` - OverflowServiceInstancesEstimator []byte `protobuf:"bytes,3,opt,name=overflow_service_instances_estimator,json=overflowServiceInstancesEstimator,proto3" json:"overflow_service_instances_estimator,omitempty"` - EventsTotal float64 `protobuf:"fixed64,4,opt,name=events_total,json=eventsTotal,proto3" json:"events_total,omitempty"` - YoungestEventTimestamp uint64 `protobuf:"varint,5,opt,name=youngest_event_timestamp,json=youngestEventTimestamp,proto3" json:"youngest_event_timestamp,omitempty"` + ServiceMetrics []*KeyedServiceMetrics `protobuf:"bytes,1,rep,name=service_metrics,json=serviceMetrics,proto3" json:"service_metrics,omitempty"` + OverflowServices *Overflow `protobuf:"bytes,2,opt,name=overflow_services,json=overflowServices,proto3" json:"overflow_services,omitempty"` + OverflowServicesEstimator []byte `protobuf:"bytes,3,opt,name=overflow_services_estimator,json=overflowServicesEstimator,proto3" json:"overflow_services_estimator,omitempty"` + EventsTotal float64 `protobuf:"fixed64,4,opt,name=events_total,json=eventsTotal,proto3" json:"events_total,omitempty"` + YoungestEventTimestamp uint64 `protobuf:"varint,5,opt,name=youngest_event_timestamp,json=youngestEventTimestamp,proto3" json:"youngest_event_timestamp,omitempty"` } func (x *CombinedMetrics) Reset() { *x = CombinedMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[0] + mi := &file_aggregation_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -53,7 +53,7 @@ func (x *CombinedMetrics) String() string { func (*CombinedMetrics) ProtoMessage() {} func (x *CombinedMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[0] + mi := &file_aggregation_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -66,7 +66,7 @@ func (x *CombinedMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use CombinedMetrics.ProtoReflect.Descriptor instead. func (*CombinedMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{0} + return file_aggregation_proto_rawDescGZIP(), []int{0} } func (x *CombinedMetrics) GetServiceMetrics() []*KeyedServiceMetrics { @@ -83,9 +83,9 @@ func (x *CombinedMetrics) GetOverflowServices() *Overflow { return nil } -func (x *CombinedMetrics) GetOverflowServiceInstancesEstimator() []byte { +func (x *CombinedMetrics) GetOverflowServicesEstimator() []byte { if x != nil { - return x.OverflowServiceInstancesEstimator + return x.OverflowServicesEstimator } return nil } @@ -116,7 +116,7 @@ type KeyedServiceMetrics struct { func (x *KeyedServiceMetrics) Reset() { *x = KeyedServiceMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[1] + mi := &file_aggregation_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -129,7 +129,7 @@ func (x *KeyedServiceMetrics) String() string { func (*KeyedServiceMetrics) ProtoMessage() {} func (x *KeyedServiceMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[1] + mi := &file_aggregation_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -142,7 +142,7 @@ func (x *KeyedServiceMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyedServiceMetrics.ProtoReflect.Descriptor instead. func (*KeyedServiceMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{1} + return file_aggregation_proto_rawDescGZIP(), []int{1} } func (x *KeyedServiceMetrics) GetKey() *ServiceAggregationKey { @@ -169,13 +169,17 @@ type ServiceAggregationKey struct { ServiceEnvironment string `protobuf:"bytes,3,opt,name=service_environment,json=serviceEnvironment,proto3" json:"service_environment,omitempty"` ServiceLanguageName string `protobuf:"bytes,4,opt,name=service_language_name,json=serviceLanguageName,proto3" json:"service_language_name,omitempty"` AgentName string `protobuf:"bytes,5,opt,name=agent_name,json=agentName,proto3" json:"agent_name,omitempty"` - GlobalLabelsStr []byte `protobuf:"bytes,6,opt,name=global_labels_str,json=globalLabelsStr,proto3" json:"global_labels_str,omitempty"` + // service_id is an identifier shared by all nodes of one service cluster. + // + // This forces the creation of separate time series for each cluster of + // a service. + ServiceId string `protobuf:"bytes,6,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` } func (x *ServiceAggregationKey) Reset() { *x = ServiceAggregationKey{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[2] + mi := &file_aggregation_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -188,7 +192,7 @@ func (x *ServiceAggregationKey) String() string { func (*ServiceAggregationKey) ProtoMessage() {} func (x *ServiceAggregationKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[2] + mi := &file_aggregation_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -201,7 +205,7 @@ func (x *ServiceAggregationKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceAggregationKey.ProtoReflect.Descriptor instead. func (*ServiceAggregationKey) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{2} + return file_aggregation_proto_rawDescGZIP(), []int{2} } func (x *ServiceAggregationKey) GetTimestamp() uint64 { @@ -239,11 +243,11 @@ func (x *ServiceAggregationKey) GetAgentName() string { return "" } -func (x *ServiceAggregationKey) GetGlobalLabelsStr() []byte { +func (x *ServiceAggregationKey) GetServiceId() string { if x != nil { - return x.GlobalLabelsStr + return x.ServiceId } - return nil + return "" } type ServiceMetrics struct { @@ -251,14 +255,20 @@ type ServiceMetrics struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ServiceInstanceMetrics []*KeyedServiceInstanceMetrics `protobuf:"bytes,1,rep,name=service_instance_metrics,json=serviceInstanceMetrics,proto3" json:"service_instance_metrics,omitempty"` - OverflowGroups *Overflow `protobuf:"bytes,2,opt,name=overflow_groups,json=overflowGroups,proto3" json:"overflow_groups,omitempty"` + // labels are arbitrary key-value pairs that are accumulated for aggregated + // service metrics, up to a limit. Once the limit is reached, additional + // labels are silently dropped. + Labels *GlobalLabels `protobuf:"bytes,1,opt,name=labels,proto3" json:"labels,omitempty"` + OverflowGroups *Overflow `protobuf:"bytes,2,opt,name=overflow_groups,json=overflowGroups,proto3" json:"overflow_groups,omitempty"` + TransactionMetrics []*KeyedTransactionMetrics `protobuf:"bytes,3,rep,name=transaction_metrics,json=transactionMetrics,proto3" json:"transaction_metrics,omitempty"` + ServiceTransactionMetrics []*KeyedServiceTransactionMetrics `protobuf:"bytes,4,rep,name=service_transaction_metrics,json=serviceTransactionMetrics,proto3" json:"service_transaction_metrics,omitempty"` + SpanMetrics []*KeyedSpanMetrics `protobuf:"bytes,5,rep,name=span_metrics,json=spanMetrics,proto3" json:"span_metrics,omitempty"` } func (x *ServiceMetrics) Reset() { *x = ServiceMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[3] + mi := &file_aggregation_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -271,7 +281,7 @@ func (x *ServiceMetrics) String() string { func (*ServiceMetrics) ProtoMessage() {} func (x *ServiceMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[3] + mi := &file_aggregation_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -284,12 +294,12 @@ func (x *ServiceMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceMetrics.ProtoReflect.Descriptor instead. func (*ServiceMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{3} + return file_aggregation_proto_rawDescGZIP(), []int{3} } -func (x *ServiceMetrics) GetServiceInstanceMetrics() []*KeyedServiceInstanceMetrics { +func (x *ServiceMetrics) GetLabels() *GlobalLabels { if x != nil { - return x.ServiceInstanceMetrics + return x.Labels } return nil } @@ -301,171 +311,27 @@ func (x *ServiceMetrics) GetOverflowGroups() *Overflow { return nil } -type ServiceInstanceAggregationKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GlobalLabelsStr []byte `protobuf:"bytes,1,opt,name=global_labels_str,json=globalLabelsStr,proto3" json:"global_labels_str,omitempty"` -} - -func (x *ServiceInstanceAggregationKey) Reset() { - *x = ServiceInstanceAggregationKey{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceInstanceAggregationKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceInstanceAggregationKey) ProtoMessage() {} - -func (x *ServiceInstanceAggregationKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[4] - 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 ServiceInstanceAggregationKey.ProtoReflect.Descriptor instead. -func (*ServiceInstanceAggregationKey) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{4} -} - -func (x *ServiceInstanceAggregationKey) GetGlobalLabelsStr() []byte { - if x != nil { - return x.GlobalLabelsStr - } - return nil -} - -type ServiceInstanceMetrics struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TransactionMetrics []*KeyedTransactionMetrics `protobuf:"bytes,1,rep,name=transaction_metrics,json=transactionMetrics,proto3" json:"transaction_metrics,omitempty"` - ServiceTransactionMetrics []*KeyedServiceTransactionMetrics `protobuf:"bytes,2,rep,name=service_transaction_metrics,json=serviceTransactionMetrics,proto3" json:"service_transaction_metrics,omitempty"` - SpanMetrics []*KeyedSpanMetrics `protobuf:"bytes,3,rep,name=span_metrics,json=spanMetrics,proto3" json:"span_metrics,omitempty"` -} - -func (x *ServiceInstanceMetrics) Reset() { - *x = ServiceInstanceMetrics{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceInstanceMetrics) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceInstanceMetrics) ProtoMessage() {} - -func (x *ServiceInstanceMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[5] - 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 ServiceInstanceMetrics.ProtoReflect.Descriptor instead. -func (*ServiceInstanceMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{5} -} - -func (x *ServiceInstanceMetrics) GetTransactionMetrics() []*KeyedTransactionMetrics { +func (x *ServiceMetrics) GetTransactionMetrics() []*KeyedTransactionMetrics { if x != nil { return x.TransactionMetrics } return nil } -func (x *ServiceInstanceMetrics) GetServiceTransactionMetrics() []*KeyedServiceTransactionMetrics { +func (x *ServiceMetrics) GetServiceTransactionMetrics() []*KeyedServiceTransactionMetrics { if x != nil { return x.ServiceTransactionMetrics } return nil } -func (x *ServiceInstanceMetrics) GetSpanMetrics() []*KeyedSpanMetrics { +func (x *ServiceMetrics) GetSpanMetrics() []*KeyedSpanMetrics { if x != nil { return x.SpanMetrics } return nil } -type KeyedServiceInstanceMetrics struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *ServiceInstanceAggregationKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Metrics *ServiceInstanceMetrics `protobuf:"bytes,2,opt,name=metrics,proto3" json:"metrics,omitempty"` -} - -func (x *KeyedServiceInstanceMetrics) Reset() { - *x = KeyedServiceInstanceMetrics{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyedServiceInstanceMetrics) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyedServiceInstanceMetrics) ProtoMessage() {} - -func (x *KeyedServiceInstanceMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[6] - 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 KeyedServiceInstanceMetrics.ProtoReflect.Descriptor instead. -func (*KeyedServiceInstanceMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{6} -} - -func (x *KeyedServiceInstanceMetrics) GetKey() *ServiceInstanceAggregationKey { - if x != nil { - return x.Key - } - return nil -} - -func (x *KeyedServiceInstanceMetrics) GetMetrics() *ServiceInstanceMetrics { - if x != nil { - return x.Metrics - } - return nil -} - type KeyedTransactionMetrics struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -478,7 +344,7 @@ type KeyedTransactionMetrics struct { func (x *KeyedTransactionMetrics) Reset() { *x = KeyedTransactionMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[7] + mi := &file_aggregation_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -491,7 +357,7 @@ func (x *KeyedTransactionMetrics) String() string { func (*KeyedTransactionMetrics) ProtoMessage() {} func (x *KeyedTransactionMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[7] + mi := &file_aggregation_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -504,7 +370,7 @@ func (x *KeyedTransactionMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyedTransactionMetrics.ProtoReflect.Descriptor instead. func (*KeyedTransactionMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{7} + return file_aggregation_proto_rawDescGZIP(), []int{4} } func (x *KeyedTransactionMetrics) GetKey() *TransactionAggregationKey { @@ -560,7 +426,7 @@ type TransactionAggregationKey struct { func (x *TransactionAggregationKey) Reset() { *x = TransactionAggregationKey{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[8] + mi := &file_aggregation_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -573,7 +439,7 @@ func (x *TransactionAggregationKey) String() string { func (*TransactionAggregationKey) ProtoMessage() {} func (x *TransactionAggregationKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[8] + mi := &file_aggregation_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -586,7 +452,7 @@ func (x *TransactionAggregationKey) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionAggregationKey.ProtoReflect.Descriptor instead. func (*TransactionAggregationKey) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{8} + return file_aggregation_proto_rawDescGZIP(), []int{5} } func (x *TransactionAggregationKey) GetTraceRoot() bool { @@ -803,7 +669,7 @@ type TransactionMetrics struct { func (x *TransactionMetrics) Reset() { *x = TransactionMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[9] + mi := &file_aggregation_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -816,7 +682,7 @@ func (x *TransactionMetrics) String() string { func (*TransactionMetrics) ProtoMessage() {} func (x *TransactionMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[9] + mi := &file_aggregation_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -829,7 +695,7 @@ func (x *TransactionMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionMetrics.ProtoReflect.Descriptor instead. func (*TransactionMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{9} + return file_aggregation_proto_rawDescGZIP(), []int{6} } func (x *TransactionMetrics) GetHistogram() *HDRHistogram { @@ -851,7 +717,7 @@ type KeyedServiceTransactionMetrics struct { func (x *KeyedServiceTransactionMetrics) Reset() { *x = KeyedServiceTransactionMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[10] + mi := &file_aggregation_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -864,7 +730,7 @@ func (x *KeyedServiceTransactionMetrics) String() string { func (*KeyedServiceTransactionMetrics) ProtoMessage() {} func (x *KeyedServiceTransactionMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[10] + mi := &file_aggregation_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -877,7 +743,7 @@ func (x *KeyedServiceTransactionMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyedServiceTransactionMetrics.ProtoReflect.Descriptor instead. func (*KeyedServiceTransactionMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{10} + return file_aggregation_proto_rawDescGZIP(), []int{7} } func (x *KeyedServiceTransactionMetrics) GetKey() *ServiceTransactionAggregationKey { @@ -905,7 +771,7 @@ type ServiceTransactionAggregationKey struct { func (x *ServiceTransactionAggregationKey) Reset() { *x = ServiceTransactionAggregationKey{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[11] + mi := &file_aggregation_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +784,7 @@ func (x *ServiceTransactionAggregationKey) String() string { func (*ServiceTransactionAggregationKey) ProtoMessage() {} func (x *ServiceTransactionAggregationKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[11] + mi := &file_aggregation_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +797,7 @@ func (x *ServiceTransactionAggregationKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceTransactionAggregationKey.ProtoReflect.Descriptor instead. func (*ServiceTransactionAggregationKey) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{11} + return file_aggregation_proto_rawDescGZIP(), []int{8} } func (x *ServiceTransactionAggregationKey) GetTransactionType() string { @@ -954,7 +820,7 @@ type ServiceTransactionMetrics struct { func (x *ServiceTransactionMetrics) Reset() { *x = ServiceTransactionMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[12] + mi := &file_aggregation_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -967,7 +833,7 @@ func (x *ServiceTransactionMetrics) String() string { func (*ServiceTransactionMetrics) ProtoMessage() {} func (x *ServiceTransactionMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[12] + mi := &file_aggregation_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -980,7 +846,7 @@ func (x *ServiceTransactionMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceTransactionMetrics.ProtoReflect.Descriptor instead. func (*ServiceTransactionMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{12} + return file_aggregation_proto_rawDescGZIP(), []int{9} } func (x *ServiceTransactionMetrics) GetHistogram() *HDRHistogram { @@ -1016,7 +882,7 @@ type KeyedSpanMetrics struct { func (x *KeyedSpanMetrics) Reset() { *x = KeyedSpanMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[13] + mi := &file_aggregation_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1029,7 +895,7 @@ func (x *KeyedSpanMetrics) String() string { func (*KeyedSpanMetrics) ProtoMessage() {} func (x *KeyedSpanMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[13] + mi := &file_aggregation_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1042,7 +908,7 @@ func (x *KeyedSpanMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyedSpanMetrics.ProtoReflect.Descriptor instead. func (*KeyedSpanMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{13} + return file_aggregation_proto_rawDescGZIP(), []int{10} } func (x *KeyedSpanMetrics) GetKey() *SpanAggregationKey { @@ -1074,7 +940,7 @@ type SpanAggregationKey struct { func (x *SpanAggregationKey) Reset() { *x = SpanAggregationKey{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[14] + mi := &file_aggregation_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1087,7 +953,7 @@ func (x *SpanAggregationKey) String() string { func (*SpanAggregationKey) ProtoMessage() {} func (x *SpanAggregationKey) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[14] + mi := &file_aggregation_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1100,7 +966,7 @@ func (x *SpanAggregationKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SpanAggregationKey.ProtoReflect.Descriptor instead. func (*SpanAggregationKey) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{14} + return file_aggregation_proto_rawDescGZIP(), []int{11} } func (x *SpanAggregationKey) GetSpanName() string { @@ -1150,7 +1016,7 @@ type SpanMetrics struct { func (x *SpanMetrics) Reset() { *x = SpanMetrics{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[15] + mi := &file_aggregation_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1163,7 +1029,7 @@ func (x *SpanMetrics) String() string { func (*SpanMetrics) ProtoMessage() {} func (x *SpanMetrics) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[15] + mi := &file_aggregation_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1176,7 +1042,7 @@ func (x *SpanMetrics) ProtoReflect() protoreflect.Message { // Deprecated: Use SpanMetrics.ProtoReflect.Descriptor instead. func (*SpanMetrics) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{15} + return file_aggregation_proto_rawDescGZIP(), []int{12} } func (x *SpanMetrics) GetCount() float64 { @@ -1205,7 +1071,7 @@ type CountValue struct { func (x *CountValue) Reset() { *x = CountValue{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[16] + mi := &file_aggregation_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1218,7 +1084,7 @@ func (x *CountValue) String() string { func (*CountValue) ProtoMessage() {} func (x *CountValue) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[16] + mi := &file_aggregation_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1231,7 +1097,7 @@ func (x *CountValue) ProtoReflect() protoreflect.Message { // Deprecated: Use CountValue.ProtoReflect.Descriptor instead. func (*CountValue) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{16} + return file_aggregation_proto_rawDescGZIP(), []int{13} } func (x *CountValue) GetCount() int64 { @@ -1263,7 +1129,7 @@ type HDRHistogram struct { func (x *HDRHistogram) Reset() { *x = HDRHistogram{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[17] + mi := &file_aggregation_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1276,7 +1142,7 @@ func (x *HDRHistogram) String() string { func (*HDRHistogram) ProtoMessage() {} func (x *HDRHistogram) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[17] + mi := &file_aggregation_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1289,7 +1155,7 @@ func (x *HDRHistogram) ProtoReflect() protoreflect.Message { // Deprecated: Use HDRHistogram.ProtoReflect.Descriptor instead. func (*HDRHistogram) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{17} + return file_aggregation_proto_rawDescGZIP(), []int{14} } func (x *HDRHistogram) GetLowestTrackableValue() int64 { @@ -1343,7 +1209,7 @@ type Overflow struct { func (x *Overflow) Reset() { *x = Overflow{} if protoimpl.UnsafeEnabled { - mi := &file_proto_aggregation_proto_msgTypes[18] + mi := &file_aggregation_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1356,7 +1222,7 @@ func (x *Overflow) String() string { func (*Overflow) ProtoMessage() {} func (x *Overflow) ProtoReflect() protoreflect.Message { - mi := &file_proto_aggregation_proto_msgTypes[18] + mi := &file_aggregation_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1369,7 +1235,7 @@ func (x *Overflow) ProtoReflect() protoreflect.Message { // Deprecated: Use Overflow.ProtoReflect.Descriptor instead. func (*Overflow) Descriptor() ([]byte, []int) { - return file_proto_aggregation_proto_rawDescGZIP(), []int{18} + return file_aggregation_proto_rawDescGZIP(), []int{15} } func (x *Overflow) GetOverflowTransactions() *TransactionMetrics { @@ -1414,364 +1280,340 @@ func (x *Overflow) GetOverflowSpansEstimator() []byte { return nil } -var File_proto_aggregation_proto protoreflect.FileDescriptor - -var file_proto_aggregation_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x65, 0x6c, 0x61, 0x73, 0x74, - 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x22, 0xce, 0x02, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x62, 0x69, - 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, - 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x42, 0x0a, 0x11, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, +var File_aggregation_proto protoreflect.FileDescriptor + +var file_aggregation_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, + 0x1a, 0x0c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbd, + 0x02, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6c, + 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x42, 0x0a, + 0x11, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, + 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x52, + 0x10, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x19, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x18, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x73, 0x74, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x73, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x82, + 0x01, 0x0a, 0x13, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, + 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, + 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x32, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, + 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x22, 0x89, 0x03, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, + 0x70, 0x6d, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x66, + 0x6c, 0x6f, 0x77, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4f, - 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x10, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x24, 0x6f, 0x76, 0x65, - 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x21, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x38, 0x0a, - 0x18, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x16, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x82, 0x01, 0x0a, 0x13, 0x4b, 0x65, 0x79, 0x65, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, - 0x34, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x88, 0x02, 0x0a, - 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x5f, 0x73, 0x74, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x53, 0x74, 0x72, 0x22, 0xb4, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x62, 0x0a, 0x18, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x65, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x16, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3e, - 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, - 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0e, - 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x4b, - 0x0a, 0x1d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, - 0x2a, 0x0a, 0x11, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x5f, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x53, 0x74, 0x72, 0x22, 0x9e, 0x02, 0x0a, 0x16, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, - 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x6b, 0x0a, - 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, - 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x70, - 0x61, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4b, - 0x65, 0x79, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x0b, 0x73, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x9a, 0x01, 0x0a, - 0x1b, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3c, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x6c, 0x61, 0x73, - 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6c, + 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, + 0x70, 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x6b, + 0x0a, 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, + 0x6d, 0x2e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x73, + 0x70, 0x61, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, + 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x0b, 0x73, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x8e, 0x01, + 0x0a, 0x17, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, + 0x70, 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xd6, + 0x09, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x13, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x6f, 0x64, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x50, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, + 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x16, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, + 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x68, 0x6f, 0x73, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x73, + 0x74, 0x5f, 0x6f, 0x73, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x4f, 0x73, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x75, 0x74, + 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, + 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x64, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x66, 0x61, 0x61, 0x73, 0x43, 0x6f, 0x6c, 0x64, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x61, 0x73, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x66, 0x61, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, + 0x61, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x66, 0x61, 0x61, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, + 0x11, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x61, 0x61, 0x73, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x37, 0x0a, + 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x48, + 0x44, 0x52, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x09, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0xa3, 0x01, 0x0a, 0x1e, 0x4b, 0x65, 0x79, 0x65, 0x64, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3f, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x17, 0x4b, 0x65, - 0x79, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x39, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xd6, 0x09, 0x0a, 0x19, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x50, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x30, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x6f, 0x73, 0x74, - 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6f, 0x73, - 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x4f, 0x73, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x23, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4f, 0x75, 0x74, - 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x61, 0x61, - 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x64, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x66, 0x61, 0x61, 0x73, 0x43, 0x6f, 0x6c, 0x64, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x17, 0x0a, 0x07, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x66, 0x61, 0x61, 0x73, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x61, 0x61, - 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x61, - 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x61, 0x73, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, - 0x61, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x61, 0x61, - 0x73, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x61, 0x61, 0x73, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, - 0x36, 0x0a, 0x17, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x15, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x4d, 0x0a, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, + 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x19, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x48, 0x44, 0x52, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x22, 0xa3, 0x01, 0x0a, 0x1e, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3f, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, - 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x4d, 0x0a, 0x20, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, - 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x48, 0x44, 0x52, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x23, - 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x79, 0x0a, 0x10, 0x4b, 0x65, 0x79, 0x65, - 0x64, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x31, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6c, 0x61, 0x73, - 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, - 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x53, 0x70, 0x61, 0x6e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, - 0x61, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, - 0x70, 0x61, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x35, 0x0a, 0x0b, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x38, 0x0a, 0x0a, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0xdf, 0x01, 0x0a, 0x0c, 0x48, 0x44, 0x52, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x14, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x68, 0x69, 0x67, 0x68, 0x65, - 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x2f, 0x0a, 0x13, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x5f, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x69, - 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x22, 0xe6, 0x03, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x12, - 0x54, 0x0a, 0x15, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x14, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x1d, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x1b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, - 0x61, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x6c, 0x61, 0x73, - 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x61, - 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x1f, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1d, 0x6f, 0x76, 0x65, - 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x55, 0x0a, 0x27, 0x6f, 0x76, - 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x24, 0x6f, 0x76, 0x65, - 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x38, 0x0a, 0x18, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, - 0x61, 0x6e, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x16, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x61, - 0x6e, 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x13, 0x48, 0x01, 0x5a, - 0x0f, 0x2e, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x79, 0x0a, 0x10, + 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x12, 0x31, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x70, 0x61, 0x6e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, + 0x70, 0x6d, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x53, 0x70, 0x61, 0x6e, + 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x70, 0x61, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, + 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x22, 0x35, 0x0a, 0x0b, 0x53, 0x70, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x38, 0x0a, 0x0a, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x0c, 0x48, 0x44, 0x52, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x5f, + 0x74, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, + 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x68, + 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x68, 0x69, + 0x67, 0x68, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x46, 0x69, 0x67, + 0x75, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0xe6, 0x03, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x66, + 0x6c, 0x6f, 0x77, 0x12, 0x54, 0x0a, 0x15, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x14, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x1d, 0x6f, 0x76, 0x65, + 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x1b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x53, 0x70, 0x61, 0x6e, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x1f, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x1d, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x55, + 0x0a, 0x27, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x24, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x73, 0x74, 0x69, + 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x18, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x5f, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x42, + 0x13, 0x48, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_proto_aggregation_proto_rawDescOnce sync.Once - file_proto_aggregation_proto_rawDescData = file_proto_aggregation_proto_rawDesc + file_aggregation_proto_rawDescOnce sync.Once + file_aggregation_proto_rawDescData = file_aggregation_proto_rawDesc ) -func file_proto_aggregation_proto_rawDescGZIP() []byte { - file_proto_aggregation_proto_rawDescOnce.Do(func() { - file_proto_aggregation_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_aggregation_proto_rawDescData) +func file_aggregation_proto_rawDescGZIP() []byte { + file_aggregation_proto_rawDescOnce.Do(func() { + file_aggregation_proto_rawDescData = protoimpl.X.CompressGZIP(file_aggregation_proto_rawDescData) }) - return file_proto_aggregation_proto_rawDescData + return file_aggregation_proto_rawDescData } -var file_proto_aggregation_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_proto_aggregation_proto_goTypes = []interface{}{ +var file_aggregation_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_aggregation_proto_goTypes = []interface{}{ (*CombinedMetrics)(nil), // 0: elastic.apm.CombinedMetrics (*KeyedServiceMetrics)(nil), // 1: elastic.apm.KeyedServiceMetrics (*ServiceAggregationKey)(nil), // 2: elastic.apm.ServiceAggregationKey (*ServiceMetrics)(nil), // 3: elastic.apm.ServiceMetrics - (*ServiceInstanceAggregationKey)(nil), // 4: elastic.apm.ServiceInstanceAggregationKey - (*ServiceInstanceMetrics)(nil), // 5: elastic.apm.ServiceInstanceMetrics - (*KeyedServiceInstanceMetrics)(nil), // 6: elastic.apm.KeyedServiceInstanceMetrics - (*KeyedTransactionMetrics)(nil), // 7: elastic.apm.KeyedTransactionMetrics - (*TransactionAggregationKey)(nil), // 8: elastic.apm.TransactionAggregationKey - (*TransactionMetrics)(nil), // 9: elastic.apm.TransactionMetrics - (*KeyedServiceTransactionMetrics)(nil), // 10: elastic.apm.KeyedServiceTransactionMetrics - (*ServiceTransactionAggregationKey)(nil), // 11: elastic.apm.ServiceTransactionAggregationKey - (*ServiceTransactionMetrics)(nil), // 12: elastic.apm.ServiceTransactionMetrics - (*KeyedSpanMetrics)(nil), // 13: elastic.apm.KeyedSpanMetrics - (*SpanAggregationKey)(nil), // 14: elastic.apm.SpanAggregationKey - (*SpanMetrics)(nil), // 15: elastic.apm.SpanMetrics - (*CountValue)(nil), // 16: elastic.apm.CountValue - (*HDRHistogram)(nil), // 17: elastic.apm.HDRHistogram - (*Overflow)(nil), // 18: elastic.apm.Overflow -} -var file_proto_aggregation_proto_depIdxs = []int32{ + (*KeyedTransactionMetrics)(nil), // 4: elastic.apm.KeyedTransactionMetrics + (*TransactionAggregationKey)(nil), // 5: elastic.apm.TransactionAggregationKey + (*TransactionMetrics)(nil), // 6: elastic.apm.TransactionMetrics + (*KeyedServiceTransactionMetrics)(nil), // 7: elastic.apm.KeyedServiceTransactionMetrics + (*ServiceTransactionAggregationKey)(nil), // 8: elastic.apm.ServiceTransactionAggregationKey + (*ServiceTransactionMetrics)(nil), // 9: elastic.apm.ServiceTransactionMetrics + (*KeyedSpanMetrics)(nil), // 10: elastic.apm.KeyedSpanMetrics + (*SpanAggregationKey)(nil), // 11: elastic.apm.SpanAggregationKey + (*SpanMetrics)(nil), // 12: elastic.apm.SpanMetrics + (*CountValue)(nil), // 13: elastic.apm.CountValue + (*HDRHistogram)(nil), // 14: elastic.apm.HDRHistogram + (*Overflow)(nil), // 15: elastic.apm.Overflow + (*GlobalLabels)(nil), // 16: elastic.apm.GlobalLabels +} +var file_aggregation_proto_depIdxs = []int32{ 1, // 0: elastic.apm.CombinedMetrics.service_metrics:type_name -> elastic.apm.KeyedServiceMetrics - 18, // 1: elastic.apm.CombinedMetrics.overflow_services:type_name -> elastic.apm.Overflow + 15, // 1: elastic.apm.CombinedMetrics.overflow_services:type_name -> elastic.apm.Overflow 2, // 2: elastic.apm.KeyedServiceMetrics.key:type_name -> elastic.apm.ServiceAggregationKey 3, // 3: elastic.apm.KeyedServiceMetrics.metrics:type_name -> elastic.apm.ServiceMetrics - 6, // 4: elastic.apm.ServiceMetrics.service_instance_metrics:type_name -> elastic.apm.KeyedServiceInstanceMetrics - 18, // 5: elastic.apm.ServiceMetrics.overflow_groups:type_name -> elastic.apm.Overflow - 7, // 6: elastic.apm.ServiceInstanceMetrics.transaction_metrics:type_name -> elastic.apm.KeyedTransactionMetrics - 10, // 7: elastic.apm.ServiceInstanceMetrics.service_transaction_metrics:type_name -> elastic.apm.KeyedServiceTransactionMetrics - 13, // 8: elastic.apm.ServiceInstanceMetrics.span_metrics:type_name -> elastic.apm.KeyedSpanMetrics - 4, // 9: elastic.apm.KeyedServiceInstanceMetrics.key:type_name -> elastic.apm.ServiceInstanceAggregationKey - 5, // 10: elastic.apm.KeyedServiceInstanceMetrics.metrics:type_name -> elastic.apm.ServiceInstanceMetrics - 8, // 11: elastic.apm.KeyedTransactionMetrics.key:type_name -> elastic.apm.TransactionAggregationKey - 9, // 12: elastic.apm.KeyedTransactionMetrics.metrics:type_name -> elastic.apm.TransactionMetrics - 17, // 13: elastic.apm.TransactionMetrics.histogram:type_name -> elastic.apm.HDRHistogram - 11, // 14: elastic.apm.KeyedServiceTransactionMetrics.key:type_name -> elastic.apm.ServiceTransactionAggregationKey - 12, // 15: elastic.apm.KeyedServiceTransactionMetrics.metrics:type_name -> elastic.apm.ServiceTransactionMetrics - 17, // 16: elastic.apm.ServiceTransactionMetrics.histogram:type_name -> elastic.apm.HDRHistogram - 14, // 17: elastic.apm.KeyedSpanMetrics.key:type_name -> elastic.apm.SpanAggregationKey - 15, // 18: elastic.apm.KeyedSpanMetrics.metrics:type_name -> elastic.apm.SpanMetrics - 9, // 19: elastic.apm.Overflow.overflow_transactions:type_name -> elastic.apm.TransactionMetrics - 12, // 20: elastic.apm.Overflow.overflow_service_transactions:type_name -> elastic.apm.ServiceTransactionMetrics - 15, // 21: elastic.apm.Overflow.overflow_spans:type_name -> elastic.apm.SpanMetrics - 22, // [22:22] is the sub-list for method output_type - 22, // [22:22] is the sub-list for method input_type - 22, // [22:22] is the sub-list for extension type_name - 22, // [22:22] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name -} - -func init() { file_proto_aggregation_proto_init() } -func file_proto_aggregation_proto_init() { - if File_proto_aggregation_proto != nil { + 16, // 4: elastic.apm.ServiceMetrics.labels:type_name -> elastic.apm.GlobalLabels + 15, // 5: elastic.apm.ServiceMetrics.overflow_groups:type_name -> elastic.apm.Overflow + 4, // 6: elastic.apm.ServiceMetrics.transaction_metrics:type_name -> elastic.apm.KeyedTransactionMetrics + 7, // 7: elastic.apm.ServiceMetrics.service_transaction_metrics:type_name -> elastic.apm.KeyedServiceTransactionMetrics + 10, // 8: elastic.apm.ServiceMetrics.span_metrics:type_name -> elastic.apm.KeyedSpanMetrics + 5, // 9: elastic.apm.KeyedTransactionMetrics.key:type_name -> elastic.apm.TransactionAggregationKey + 6, // 10: elastic.apm.KeyedTransactionMetrics.metrics:type_name -> elastic.apm.TransactionMetrics + 14, // 11: elastic.apm.TransactionMetrics.histogram:type_name -> elastic.apm.HDRHistogram + 8, // 12: elastic.apm.KeyedServiceTransactionMetrics.key:type_name -> elastic.apm.ServiceTransactionAggregationKey + 9, // 13: elastic.apm.KeyedServiceTransactionMetrics.metrics:type_name -> elastic.apm.ServiceTransactionMetrics + 14, // 14: elastic.apm.ServiceTransactionMetrics.histogram:type_name -> elastic.apm.HDRHistogram + 11, // 15: elastic.apm.KeyedSpanMetrics.key:type_name -> elastic.apm.SpanAggregationKey + 12, // 16: elastic.apm.KeyedSpanMetrics.metrics:type_name -> elastic.apm.SpanMetrics + 6, // 17: elastic.apm.Overflow.overflow_transactions:type_name -> elastic.apm.TransactionMetrics + 9, // 18: elastic.apm.Overflow.overflow_service_transactions:type_name -> elastic.apm.ServiceTransactionMetrics + 12, // 19: elastic.apm.Overflow.overflow_spans:type_name -> elastic.apm.SpanMetrics + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_aggregation_proto_init() } +func file_aggregation_proto_init() { + if File_aggregation_proto != nil { return } + file_labels_proto_init() if !protoimpl.UnsafeEnabled { - file_proto_aggregation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CombinedMetrics); i { case 0: return &v.state @@ -1783,7 +1625,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyedServiceMetrics); i { case 0: return &v.state @@ -1795,7 +1637,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAggregationKey); i { case 0: return &v.state @@ -1807,7 +1649,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceMetrics); i { case 0: return &v.state @@ -1819,43 +1661,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceInstanceAggregationKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_aggregation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceInstanceMetrics); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_aggregation_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyedServiceInstanceMetrics); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_aggregation_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyedTransactionMetrics); i { case 0: return &v.state @@ -1867,7 +1673,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionAggregationKey); i { case 0: return &v.state @@ -1879,7 +1685,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionMetrics); i { case 0: return &v.state @@ -1891,7 +1697,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyedServiceTransactionMetrics); i { case 0: return &v.state @@ -1903,7 +1709,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceTransactionAggregationKey); i { case 0: return &v.state @@ -1915,7 +1721,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceTransactionMetrics); i { case 0: return &v.state @@ -1927,7 +1733,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyedSpanMetrics); i { case 0: return &v.state @@ -1939,7 +1745,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SpanAggregationKey); i { case 0: return &v.state @@ -1951,7 +1757,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SpanMetrics); i { case 0: return &v.state @@ -1963,7 +1769,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CountValue); i { case 0: return &v.state @@ -1975,7 +1781,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HDRHistogram); i { case 0: return &v.state @@ -1987,7 +1793,7 @@ func file_proto_aggregation_proto_init() { return nil } } - file_proto_aggregation_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_aggregation_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Overflow); i { case 0: return &v.state @@ -2004,18 +1810,18 @@ func file_proto_aggregation_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_aggregation_proto_rawDesc, + RawDescriptor: file_aggregation_proto_rawDesc, NumEnums: 0, - NumMessages: 19, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_proto_aggregation_proto_goTypes, - DependencyIndexes: file_proto_aggregation_proto_depIdxs, - MessageInfos: file_proto_aggregation_proto_msgTypes, + GoTypes: file_aggregation_proto_goTypes, + DependencyIndexes: file_aggregation_proto_depIdxs, + MessageInfos: file_aggregation_proto_msgTypes, }.Build() - File_proto_aggregation_proto = out.File - file_proto_aggregation_proto_rawDesc = nil - file_proto_aggregation_proto_goTypes = nil - file_proto_aggregation_proto_depIdxs = nil + File_aggregation_proto = out.File + file_aggregation_proto_rawDesc = nil + file_aggregation_proto_goTypes = nil + file_aggregation_proto_depIdxs = nil } diff --git a/aggregationpb/aggregation_vtproto.pb.go b/aggregationpb/aggregation_vtproto.pb.go index 59cde22..002fb3e 100644 --- a/aggregationpb/aggregation_vtproto.pb.go +++ b/aggregationpb/aggregation_vtproto.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. // protoc-gen-go-vtproto version: v0.4.0 -// source: proto/aggregation.proto +// source: aggregation.proto package aggregationpb @@ -13,7 +13,6 @@ import ( fmt "fmt" io "io" math "math" - bits "math/bits" sync "sync" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -67,10 +66,10 @@ func (m *CombinedMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i-- dAtA[i] = 0x21 } - if len(m.OverflowServiceInstancesEstimator) > 0 { - i -= len(m.OverflowServiceInstancesEstimator) - copy(dAtA[i:], m.OverflowServiceInstancesEstimator) - i = encodeVarint(dAtA, i, uint64(len(m.OverflowServiceInstancesEstimator))) + if len(m.OverflowServicesEstimator) > 0 { + i -= len(m.OverflowServicesEstimator) + copy(dAtA[i:], m.OverflowServicesEstimator) + i = encodeVarint(dAtA, i, uint64(len(m.OverflowServicesEstimator))) i-- dAtA[i] = 0x1a } @@ -182,10 +181,10 @@ func (m *ServiceAggregationKey) MarshalToSizedBufferVT(dAtA []byte) (int, error) i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if len(m.GlobalLabelsStr) > 0 { - i -= len(m.GlobalLabelsStr) - copy(dAtA[i:], m.GlobalLabelsStr) - i = encodeVarint(dAtA, i, uint64(len(m.GlobalLabelsStr))) + if len(m.ServiceId) > 0 { + i -= len(m.ServiceId) + copy(dAtA[i:], m.ServiceId) + i = encodeVarint(dAtA, i, uint64(len(m.ServiceId))) i-- dAtA[i] = 0x32 } @@ -244,101 +243,6 @@ func (m *ServiceMetrics) MarshalToVT(dAtA []byte) (int, error) { } func (m *ServiceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error) { - if m == nil { - return 0, nil - } - i := len(dAtA) - _ = i - var l int - _ = l - if m.unknownFields != nil { - i -= len(m.unknownFields) - copy(dAtA[i:], m.unknownFields) - } - if m.OverflowGroups != nil { - size, err := m.OverflowGroups.MarshalToSizedBufferVT(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarint(dAtA, i, uint64(size)) - i-- - dAtA[i] = 0x12 - } - if len(m.ServiceInstanceMetrics) > 0 { - for iNdEx := len(m.ServiceInstanceMetrics) - 1; iNdEx >= 0; iNdEx-- { - size, err := m.ServiceInstanceMetrics[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarint(dAtA, i, uint64(size)) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ServiceInstanceAggregationKey) MarshalVT() (dAtA []byte, err error) { - if m == nil { - return nil, nil - } - size := m.SizeVT() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBufferVT(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ServiceInstanceAggregationKey) MarshalToVT(dAtA []byte) (int, error) { - size := m.SizeVT() - return m.MarshalToSizedBufferVT(dAtA[:size]) -} - -func (m *ServiceInstanceAggregationKey) MarshalToSizedBufferVT(dAtA []byte) (int, error) { - if m == nil { - return 0, nil - } - i := len(dAtA) - _ = i - var l int - _ = l - if m.unknownFields != nil { - i -= len(m.unknownFields) - copy(dAtA[i:], m.unknownFields) - } - if len(m.GlobalLabelsStr) > 0 { - i -= len(m.GlobalLabelsStr) - copy(dAtA[i:], m.GlobalLabelsStr) - i = encodeVarint(dAtA, i, uint64(len(m.GlobalLabelsStr))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ServiceInstanceMetrics) MarshalVT() (dAtA []byte, err error) { - if m == nil { - return nil, nil - } - size := m.SizeVT() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBufferVT(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ServiceInstanceMetrics) MarshalToVT(dAtA []byte) (int, error) { - size := m.SizeVT() - return m.MarshalToSizedBufferVT(dAtA[:size]) -} - -func (m *ServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -359,7 +263,7 @@ func (m *ServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error i -= size i = encodeVarint(dAtA, i, uint64(size)) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x2a } } if len(m.ServiceTransactionMetrics) > 0 { @@ -371,7 +275,7 @@ func (m *ServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error i -= size i = encodeVarint(dAtA, i, uint64(size)) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x22 } } if len(m.TransactionMetrics) > 0 { @@ -383,44 +287,11 @@ func (m *ServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error i -= size i = encodeVarint(dAtA, i, uint64(size)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x1a } } - return len(dAtA) - i, nil -} - -func (m *KeyedServiceInstanceMetrics) MarshalVT() (dAtA []byte, err error) { - if m == nil { - return nil, nil - } - size := m.SizeVT() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBufferVT(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyedServiceInstanceMetrics) MarshalToVT(dAtA []byte) (int, error) { - size := m.SizeVT() - return m.MarshalToSizedBufferVT(dAtA[:size]) -} - -func (m *KeyedServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, error) { - if m == nil { - return 0, nil - } - i := len(dAtA) - _ = i - var l int - _ = l - if m.unknownFields != nil { - i -= len(m.unknownFields) - copy(dAtA[i:], m.unknownFields) - } - if m.Metrics != nil { - size, err := m.Metrics.MarshalToSizedBufferVT(dAtA[:i]) + if m.OverflowGroups != nil { + size, err := m.OverflowGroups.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { return 0, err } @@ -429,8 +300,8 @@ func (m *KeyedServiceInstanceMetrics) MarshalToSizedBufferVT(dAtA []byte) (int, i-- dAtA[i] = 0x12 } - if m.Key != nil { - size, err := m.Key.MarshalToSizedBufferVT(dAtA[:i]) + if m.Labels != nil { + size, err := m.Labels.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { return 0, err } @@ -1334,18 +1205,6 @@ func (m *Overflow) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func encodeVarint(dAtA []byte, offset int, v uint64) int { - offset -= sov(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - var vtprotoPool_CombinedMetrics = sync.Pool{ New: func() interface{} { return &CombinedMetrics{} @@ -1359,10 +1218,10 @@ func (m *CombinedMetrics) ResetVT() { } f0 := m.ServiceMetrics[:0] m.OverflowServices.ReturnToVTPool() - f1 := m.OverflowServiceInstancesEstimator[:0] + f1 := m.OverflowServicesEstimator[:0] m.Reset() m.ServiceMetrics = f0 - m.OverflowServiceInstancesEstimator = f1 + m.OverflowServicesEstimator = f1 } func (m *CombinedMetrics) ReturnToVTPool() { if m != nil { @@ -1402,9 +1261,7 @@ var vtprotoPool_ServiceAggregationKey = sync.Pool{ } func (m *ServiceAggregationKey) ResetVT() { - f0 := m.GlobalLabelsStr[:0] m.Reset() - m.GlobalLabelsStr = f0 } func (m *ServiceAggregationKey) ReturnToVTPool() { if m != nil { @@ -1423,53 +1280,8 @@ var vtprotoPool_ServiceMetrics = sync.Pool{ } func (m *ServiceMetrics) ResetVT() { - for k, mm := range m.ServiceInstanceMetrics { - mm.ReturnToVTPool() - m.ServiceInstanceMetrics[k] = nil - } - f0 := m.ServiceInstanceMetrics[:0] + m.Labels.ReturnToVTPool() m.OverflowGroups.ReturnToVTPool() - m.Reset() - m.ServiceInstanceMetrics = f0 -} -func (m *ServiceMetrics) ReturnToVTPool() { - if m != nil { - m.ResetVT() - vtprotoPool_ServiceMetrics.Put(m) - } -} -func ServiceMetricsFromVTPool() *ServiceMetrics { - return vtprotoPool_ServiceMetrics.Get().(*ServiceMetrics) -} - -var vtprotoPool_ServiceInstanceAggregationKey = sync.Pool{ - New: func() interface{} { - return &ServiceInstanceAggregationKey{} - }, -} - -func (m *ServiceInstanceAggregationKey) ResetVT() { - f0 := m.GlobalLabelsStr[:0] - m.Reset() - m.GlobalLabelsStr = f0 -} -func (m *ServiceInstanceAggregationKey) ReturnToVTPool() { - if m != nil { - m.ResetVT() - vtprotoPool_ServiceInstanceAggregationKey.Put(m) - } -} -func ServiceInstanceAggregationKeyFromVTPool() *ServiceInstanceAggregationKey { - return vtprotoPool_ServiceInstanceAggregationKey.Get().(*ServiceInstanceAggregationKey) -} - -var vtprotoPool_ServiceInstanceMetrics = sync.Pool{ - New: func() interface{} { - return &ServiceInstanceMetrics{} - }, -} - -func (m *ServiceInstanceMetrics) ResetVT() { for k, mm := range m.TransactionMetrics { mm.ReturnToVTPool() m.TransactionMetrics[k] = nil @@ -1490,35 +1302,14 @@ func (m *ServiceInstanceMetrics) ResetVT() { m.ServiceTransactionMetrics = f1 m.SpanMetrics = f2 } -func (m *ServiceInstanceMetrics) ReturnToVTPool() { - if m != nil { - m.ResetVT() - vtprotoPool_ServiceInstanceMetrics.Put(m) - } -} -func ServiceInstanceMetricsFromVTPool() *ServiceInstanceMetrics { - return vtprotoPool_ServiceInstanceMetrics.Get().(*ServiceInstanceMetrics) -} - -var vtprotoPool_KeyedServiceInstanceMetrics = sync.Pool{ - New: func() interface{} { - return &KeyedServiceInstanceMetrics{} - }, -} - -func (m *KeyedServiceInstanceMetrics) ResetVT() { - m.Key.ReturnToVTPool() - m.Metrics.ReturnToVTPool() - m.Reset() -} -func (m *KeyedServiceInstanceMetrics) ReturnToVTPool() { +func (m *ServiceMetrics) ReturnToVTPool() { if m != nil { m.ResetVT() - vtprotoPool_KeyedServiceInstanceMetrics.Put(m) + vtprotoPool_ServiceMetrics.Put(m) } } -func KeyedServiceInstanceMetricsFromVTPool() *KeyedServiceInstanceMetrics { - return vtprotoPool_KeyedServiceInstanceMetrics.Get().(*KeyedServiceInstanceMetrics) +func ServiceMetricsFromVTPool() *ServiceMetrics { + return vtprotoPool_ServiceMetrics.Get().(*ServiceMetrics) } var vtprotoPool_KeyedTransactionMetrics = sync.Pool{ @@ -1785,7 +1576,7 @@ func (m *CombinedMetrics) SizeVT() (n int) { l = m.OverflowServices.SizeVT() n += 1 + l + sov(uint64(l)) } - l = len(m.OverflowServiceInstancesEstimator) + l = len(m.OverflowServicesEstimator) if l > 0 { n += 1 + l + sov(uint64(l)) } @@ -1842,7 +1633,7 @@ func (m *ServiceAggregationKey) SizeVT() (n int) { if l > 0 { n += 1 + l + sov(uint64(l)) } - l = len(m.GlobalLabelsStr) + l = len(m.ServiceId) if l > 0 { n += 1 + l + sov(uint64(l)) } @@ -1856,40 +1647,14 @@ func (m *ServiceMetrics) SizeVT() (n int) { } var l int _ = l - if len(m.ServiceInstanceMetrics) > 0 { - for _, e := range m.ServiceInstanceMetrics { - l = e.SizeVT() - n += 1 + l + sov(uint64(l)) - } + if m.Labels != nil { + l = m.Labels.SizeVT() + n += 1 + l + sov(uint64(l)) } if m.OverflowGroups != nil { l = m.OverflowGroups.SizeVT() n += 1 + l + sov(uint64(l)) } - n += len(m.unknownFields) - return n -} - -func (m *ServiceInstanceAggregationKey) SizeVT() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.GlobalLabelsStr) - if l > 0 { - n += 1 + l + sov(uint64(l)) - } - n += len(m.unknownFields) - return n -} - -func (m *ServiceInstanceMetrics) SizeVT() (n int) { - if m == nil { - return 0 - } - var l int - _ = l if len(m.TransactionMetrics) > 0 { for _, e := range m.TransactionMetrics { l = e.SizeVT() @@ -1912,24 +1677,6 @@ func (m *ServiceInstanceMetrics) SizeVT() (n int) { return n } -func (m *KeyedServiceInstanceMetrics) SizeVT() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Key != nil { - l = m.Key.SizeVT() - n += 1 + l + sov(uint64(l)) - } - if m.Metrics != nil { - l = m.Metrics.SizeVT() - n += 1 + l + sov(uint64(l)) - } - n += len(m.unknownFields) - return n -} - func (m *KeyedTransactionMetrics) SizeVT() (n int) { if m == nil { return 0 @@ -2285,12 +2032,6 @@ func (m *Overflow) SizeVT() (n int) { return n } -func sov(x uint64) (n int) { - return (bits.Len64(x|1) + 6) / 7 -} -func soz(x uint64) (n int) { - return sov(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} func (m *CombinedMetrics) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2399,7 +2140,7 @@ func (m *CombinedMetrics) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OverflowServiceInstancesEstimator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OverflowServicesEstimator", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -2426,9 +2167,9 @@ func (m *CombinedMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.OverflowServiceInstancesEstimator = append(m.OverflowServiceInstancesEstimator[:0], dAtA[iNdEx:postIndex]...) - if m.OverflowServiceInstancesEstimator == nil { - m.OverflowServiceInstancesEstimator = []byte{} + m.OverflowServicesEstimator = append(m.OverflowServicesEstimator[:0], dAtA[iNdEx:postIndex]...) + if m.OverflowServicesEstimator == nil { + m.OverflowServicesEstimator = []byte{} } iNdEx = postIndex case 4: @@ -2741,178 +2482,20 @@ func (m *ServiceAggregationKey) UnmarshalVT(dAtA []byte) error { if intStringLen < 0 { return ErrInvalidLength } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLength - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceLanguageName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AgentName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLength - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLength - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AgentName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GlobalLabelsStr", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLength - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLength - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GlobalLabelsStr = append(m.GlobalLabelsStr[:0], dAtA[iNdEx:postIndex]...) - if m.GlobalLabelsStr == nil { - m.GlobalLabelsStr = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServiceMetrics) UnmarshalVT(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 ErrIntOverflow - } - 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: ServiceMetrics: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceMetrics: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceInstanceMetrics", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLength - } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.ServiceInstanceMetrics) == cap(m.ServiceInstanceMetrics) { - m.ServiceInstanceMetrics = append(m.ServiceInstanceMetrics, &KeyedServiceInstanceMetrics{}) - } else { - m.ServiceInstanceMetrics = m.ServiceInstanceMetrics[:len(m.ServiceInstanceMetrics)+1] - if m.ServiceInstanceMetrics[len(m.ServiceInstanceMetrics)-1] == nil { - m.ServiceInstanceMetrics[len(m.ServiceInstanceMetrics)-1] = &KeyedServiceInstanceMetrics{} - } - } - if err := m.ServiceInstanceMetrics[len(m.ServiceInstanceMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ServiceLanguageName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OverflowGroups", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AgentName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflow @@ -2922,84 +2505,29 @@ func (m *ServiceMetrics) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF } - if m.OverflowGroups == nil { - m.OverflowGroups = OverflowFromVTPool() - } - if err := m.OverflowGroups.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AgentName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServiceInstanceAggregationKey) UnmarshalVT(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 ErrIntOverflow - } - 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: ServiceInstanceAggregationKey: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceInstanceAggregationKey: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GlobalLabelsStr", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServiceId", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflow @@ -3009,25 +2537,23 @@ func (m *ServiceInstanceAggregationKey) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLength } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF } - m.GlobalLabelsStr = append(m.GlobalLabelsStr[:0], dAtA[iNdEx:postIndex]...) - if m.GlobalLabelsStr == nil { - m.GlobalLabelsStr = []byte{} - } + m.ServiceId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3051,7 +2577,7 @@ func (m *ServiceInstanceAggregationKey) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *ServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { +func (m *ServiceMetrics) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3074,15 +2600,15 @@ func (m *ServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ServiceInstanceMetrics: wiretype end group for non-group") + return fmt.Errorf("proto: ServiceMetrics: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceInstanceMetrics: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ServiceMetrics: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TransactionMetrics", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3109,21 +2635,16 @@ func (m *ServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.TransactionMetrics) == cap(m.TransactionMetrics) { - m.TransactionMetrics = append(m.TransactionMetrics, &KeyedTransactionMetrics{}) - } else { - m.TransactionMetrics = m.TransactionMetrics[:len(m.TransactionMetrics)+1] - if m.TransactionMetrics[len(m.TransactionMetrics)-1] == nil { - m.TransactionMetrics[len(m.TransactionMetrics)-1] = &KeyedTransactionMetrics{} - } + if m.Labels == nil { + m.Labels = GlobalLabelsFromVTPool() } - if err := m.TransactionMetrics[len(m.TransactionMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Labels.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceTransactionMetrics", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OverflowGroups", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3150,21 +2671,16 @@ func (m *ServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.ServiceTransactionMetrics) == cap(m.ServiceTransactionMetrics) { - m.ServiceTransactionMetrics = append(m.ServiceTransactionMetrics, &KeyedServiceTransactionMetrics{}) - } else { - m.ServiceTransactionMetrics = m.ServiceTransactionMetrics[:len(m.ServiceTransactionMetrics)+1] - if m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1] == nil { - m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1] = &KeyedServiceTransactionMetrics{} - } + if m.OverflowGroups == nil { + m.OverflowGroups = OverflowFromVTPool() } - if err := m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.OverflowGroups.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpanMetrics", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TransactionMetrics", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3191,72 +2707,21 @@ func (m *ServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if len(m.SpanMetrics) == cap(m.SpanMetrics) { - m.SpanMetrics = append(m.SpanMetrics, &KeyedSpanMetrics{}) + if len(m.TransactionMetrics) == cap(m.TransactionMetrics) { + m.TransactionMetrics = append(m.TransactionMetrics, &KeyedTransactionMetrics{}) } else { - m.SpanMetrics = m.SpanMetrics[:len(m.SpanMetrics)+1] - if m.SpanMetrics[len(m.SpanMetrics)-1] == nil { - m.SpanMetrics[len(m.SpanMetrics)-1] = &KeyedSpanMetrics{} + m.TransactionMetrics = m.TransactionMetrics[:len(m.TransactionMetrics)+1] + if m.TransactionMetrics[len(m.TransactionMetrics)-1] == nil { + m.TransactionMetrics[len(m.TransactionMetrics)-1] = &KeyedTransactionMetrics{} } } - if err := m.SpanMetrics[len(m.SpanMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TransactionMetrics[len(m.TransactionMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyedServiceInstanceMetrics) UnmarshalVT(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 ErrIntOverflow - } - 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: KeyedServiceInstanceMetrics: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyedServiceInstanceMetrics: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServiceTransactionMetrics", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3283,16 +2748,21 @@ func (m *KeyedServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Key == nil { - m.Key = ServiceInstanceAggregationKeyFromVTPool() + if len(m.ServiceTransactionMetrics) == cap(m.ServiceTransactionMetrics) { + m.ServiceTransactionMetrics = append(m.ServiceTransactionMetrics, &KeyedServiceTransactionMetrics{}) + } else { + m.ServiceTransactionMetrics = m.ServiceTransactionMetrics[:len(m.ServiceTransactionMetrics)+1] + if m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1] == nil { + m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1] = &KeyedServiceTransactionMetrics{} + } } - if err := m.Key.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServiceTransactionMetrics[len(m.ServiceTransactionMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SpanMetrics", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3319,10 +2789,15 @@ func (m *KeyedServiceInstanceMetrics) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Metrics == nil { - m.Metrics = ServiceInstanceMetricsFromVTPool() + if len(m.SpanMetrics) == cap(m.SpanMetrics) { + m.SpanMetrics = append(m.SpanMetrics, &KeyedSpanMetrics{}) + } else { + m.SpanMetrics = m.SpanMetrics[:len(m.SpanMetrics)+1] + if m.SpanMetrics[len(m.SpanMetrics)-1] == nil { + m.SpanMetrics[len(m.SpanMetrics)-1] = &KeyedSpanMetrics{} + } } - if err := m.Metrics.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SpanMetrics[len(m.SpanMetrics)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5844,88 +5319,3 @@ func (m *Overflow) UnmarshalVT(dAtA []byte) error { } return nil } - -func skip(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLength - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroup - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLength - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLength = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflow = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroup = fmt.Errorf("proto: unexpected end of group") -) diff --git a/aggregationpb/labels.pb.go b/aggregationpb/labels.pb.go index ae92310..81eb1e5 100644 --- a/aggregationpb/labels.pb.go +++ b/aggregationpb/labels.pb.go @@ -6,7 +6,7 @@ // versions: // protoc-gen-go v1.28.1 // protoc v4.22.1 -// source: proto/labels.proto +// source: labels.proto package aggregationpb @@ -37,7 +37,7 @@ type GlobalLabels struct { func (x *GlobalLabels) Reset() { *x = GlobalLabels{} if protoimpl.UnsafeEnabled { - mi := &file_proto_labels_proto_msgTypes[0] + mi := &file_labels_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -50,7 +50,7 @@ func (x *GlobalLabels) String() string { func (*GlobalLabels) ProtoMessage() {} func (x *GlobalLabels) ProtoReflect() protoreflect.Message { - mi := &file_proto_labels_proto_msgTypes[0] + mi := &file_labels_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -63,7 +63,7 @@ func (x *GlobalLabels) ProtoReflect() protoreflect.Message { // Deprecated: Use GlobalLabels.ProtoReflect.Descriptor instead. func (*GlobalLabels) Descriptor() ([]byte, []int) { - return file_proto_labels_proto_rawDescGZIP(), []int{0} + return file_labels_proto_rawDescGZIP(), []int{0} } func (x *GlobalLabels) GetLabels() []*Label { @@ -93,7 +93,7 @@ type Label struct { func (x *Label) Reset() { *x = Label{} if protoimpl.UnsafeEnabled { - mi := &file_proto_labels_proto_msgTypes[1] + mi := &file_labels_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -106,7 +106,7 @@ func (x *Label) String() string { func (*Label) ProtoMessage() {} func (x *Label) ProtoReflect() protoreflect.Message { - mi := &file_proto_labels_proto_msgTypes[1] + mi := &file_labels_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -119,7 +119,7 @@ func (x *Label) ProtoReflect() protoreflect.Message { // Deprecated: Use Label.ProtoReflect.Descriptor instead. func (*Label) Descriptor() ([]byte, []int) { - return file_proto_labels_proto_rawDescGZIP(), []int{1} + return file_labels_proto_rawDescGZIP(), []int{1} } func (x *Label) GetKey() string { @@ -156,7 +156,7 @@ type NumericLabel struct { func (x *NumericLabel) Reset() { *x = NumericLabel{} if protoimpl.UnsafeEnabled { - mi := &file_proto_labels_proto_msgTypes[2] + mi := &file_labels_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -169,7 +169,7 @@ func (x *NumericLabel) String() string { func (*NumericLabel) ProtoMessage() {} func (x *NumericLabel) ProtoReflect() protoreflect.Message { - mi := &file_proto_labels_proto_msgTypes[2] + mi := &file_labels_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -182,7 +182,7 @@ func (x *NumericLabel) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericLabel.ProtoReflect.Descriptor instead. func (*NumericLabel) Descriptor() ([]byte, []int) { - return file_proto_labels_proto_rawDescGZIP(), []int{2} + return file_labels_proto_rawDescGZIP(), []int{2} } func (x *NumericLabel) GetKey() string { @@ -206,52 +206,51 @@ func (x *NumericLabel) GetValues() []float64 { return nil } -var File_proto_labels_proto protoreflect.FileDescriptor - -var file_proto_labels_proto_rawDesc = []byte{ - 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, - 0x6d, 0x22, 0x7c, 0x0a, 0x0c, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x40, 0x0a, - 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, - 0x61, 0x70, 0x6d, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, - 0x47, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x4e, 0x0a, 0x0c, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, - 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x13, 0x48, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, +var File_labels_proto protoreflect.FileDescriptor + +var file_labels_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, + 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x22, 0x7c, 0x0a, 0x0c, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6c, + 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x47, 0x0a, 0x05, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x4e, 0x0a, 0x0c, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x42, 0x13, 0x48, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_proto_labels_proto_rawDescOnce sync.Once - file_proto_labels_proto_rawDescData = file_proto_labels_proto_rawDesc + file_labels_proto_rawDescOnce sync.Once + file_labels_proto_rawDescData = file_labels_proto_rawDesc ) -func file_proto_labels_proto_rawDescGZIP() []byte { - file_proto_labels_proto_rawDescOnce.Do(func() { - file_proto_labels_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_labels_proto_rawDescData) +func file_labels_proto_rawDescGZIP() []byte { + file_labels_proto_rawDescOnce.Do(func() { + file_labels_proto_rawDescData = protoimpl.X.CompressGZIP(file_labels_proto_rawDescData) }) - return file_proto_labels_proto_rawDescData + return file_labels_proto_rawDescData } -var file_proto_labels_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_proto_labels_proto_goTypes = []interface{}{ +var file_labels_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_labels_proto_goTypes = []interface{}{ (*GlobalLabels)(nil), // 0: elastic.apm.GlobalLabels (*Label)(nil), // 1: elastic.apm.Label (*NumericLabel)(nil), // 2: elastic.apm.NumericLabel } -var file_proto_labels_proto_depIdxs = []int32{ +var file_labels_proto_depIdxs = []int32{ 1, // 0: elastic.apm.GlobalLabels.labels:type_name -> elastic.apm.Label 2, // 1: elastic.apm.GlobalLabels.numeric_labels:type_name -> elastic.apm.NumericLabel 2, // [2:2] is the sub-list for method output_type @@ -261,13 +260,13 @@ var file_proto_labels_proto_depIdxs = []int32{ 0, // [0:2] is the sub-list for field type_name } -func init() { file_proto_labels_proto_init() } -func file_proto_labels_proto_init() { - if File_proto_labels_proto != nil { +func init() { file_labels_proto_init() } +func file_labels_proto_init() { + if File_labels_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_proto_labels_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_labels_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GlobalLabels); i { case 0: return &v.state @@ -279,7 +278,7 @@ func file_proto_labels_proto_init() { return nil } } - file_proto_labels_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_labels_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Label); i { case 0: return &v.state @@ -291,7 +290,7 @@ func file_proto_labels_proto_init() { return nil } } - file_proto_labels_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_labels_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NumericLabel); i { case 0: return &v.state @@ -308,18 +307,18 @@ func file_proto_labels_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_labels_proto_rawDesc, + RawDescriptor: file_labels_proto_rawDesc, NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_proto_labels_proto_goTypes, - DependencyIndexes: file_proto_labels_proto_depIdxs, - MessageInfos: file_proto_labels_proto_msgTypes, + GoTypes: file_labels_proto_goTypes, + DependencyIndexes: file_labels_proto_depIdxs, + MessageInfos: file_labels_proto_msgTypes, }.Build() - File_proto_labels_proto = out.File - file_proto_labels_proto_rawDesc = nil - file_proto_labels_proto_goTypes = nil - file_proto_labels_proto_depIdxs = nil + File_labels_proto = out.File + file_labels_proto_rawDesc = nil + file_labels_proto_goTypes = nil + file_labels_proto_depIdxs = nil } diff --git a/aggregationpb/labels_vtproto.pb.go b/aggregationpb/labels_vtproto.pb.go index adad2f0..57a34b3 100644 --- a/aggregationpb/labels_vtproto.pb.go +++ b/aggregationpb/labels_vtproto.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. // protoc-gen-go-vtproto version: v0.4.0 -// source: proto/labels.proto +// source: labels.proto package aggregationpb @@ -13,6 +13,7 @@ import ( fmt "fmt" io "io" math "math" + bits "math/bits" sync "sync" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -194,6 +195,18 @@ func (m *NumericLabel) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func encodeVarint(dAtA []byte, offset int, v uint64) int { + offset -= sov(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} + var vtprotoPool_GlobalLabels = sync.Pool{ New: func() interface{} { return &GlobalLabels{} @@ -332,6 +345,12 @@ func (m *NumericLabel) SizeVT() (n int) { return n } +func sov(x uint64) (n int) { + return (bits.Len64(x|1) + 6) / 7 +} +func soz(x uint64) (n int) { + return sov(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} func (m *GlobalLabels) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -760,3 +779,88 @@ func (m *NumericLabel) UnmarshalVT(dAtA []byte) error { } return nil } + +func skip(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflow + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflow + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflow + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLength + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroup + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLength + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLength = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflow = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroup = fmt.Errorf("proto: unexpected end of group") +) diff --git a/aggregators/codec.go b/aggregators/codec.go index 19b29fd..e03be51 100644 --- a/aggregators/codec.go +++ b/aggregators/codec.go @@ -84,7 +84,6 @@ func (m *CombinedMetrics) ToProto() *aggregationpb.CombinedMetrics { pb.ServiceMetrics = append(pb.ServiceMetrics, ksm) } pb.OverflowServices = m.OverflowServices.ToProto() - pb.OverflowServiceInstancesEstimator = hllBytes(m.OverflowServiceInstancesEstimator) pb.EventsTotal = m.eventsTotal pb.YoungestEventTimestamp = timestamppb.TimeToPBTimestamp(m.youngestEventTimestamp) return pb @@ -103,7 +102,6 @@ func (m *CombinedMetrics) FromProto(pb *aggregationpb.CombinedMetrics) { if pb.OverflowServices != nil { m.OverflowServices.FromProto(pb.OverflowServices) } - m.OverflowServiceInstancesEstimator = hllSketch(pb.OverflowServiceInstancesEstimator) m.eventsTotal = pb.EventsTotal m.youngestEventTimestamp = timestamppb.PBTimestampToTime(pb.YoungestEventTimestamp) } @@ -134,6 +132,7 @@ func (k *ServiceAggregationKey) ToProto() *aggregationpb.ServiceAggregationKey { pb.ServiceEnvironment = k.ServiceEnvironment pb.ServiceLanguageName = k.ServiceLanguageName pb.AgentName = k.AgentName + pb.ServiceId = k.ServiceID return pb } @@ -144,52 +143,14 @@ func (k *ServiceAggregationKey) FromProto(pb *aggregationpb.ServiceAggregationKe k.ServiceEnvironment = pb.ServiceEnvironment k.ServiceLanguageName = pb.ServiceLanguageName k.AgentName = pb.AgentName + k.ServiceID = pb.ServiceId } // ToProto converts ServiceMetrics to its protobuf representation. func (m *ServiceMetrics) ToProto() *aggregationpb.ServiceMetrics { pb := aggregationpb.ServiceMetricsFromVTPool() - if len(m.ServiceInstanceGroups) > cap(pb.ServiceInstanceMetrics) { - pb.ServiceInstanceMetrics = make([]*aggregationpb.KeyedServiceInstanceMetrics, 0, len(m.ServiceInstanceGroups)) - } - for k, m := range m.ServiceInstanceGroups { - ksim := aggregationpb.KeyedServiceInstanceMetricsFromVTPool() - ksim.Key = k.ToProto() - ksim.Metrics = m.ToProto() - pb.ServiceInstanceMetrics = append(pb.ServiceInstanceMetrics, ksim) - } + pb.Labels = m.Labels.ToProto() pb.OverflowGroups = m.OverflowGroups.ToProto() - return pb -} - -// FromProto converts protobuf representation to ServiceMetrics. -func (m *ServiceMetrics) FromProto(pb *aggregationpb.ServiceMetrics) { - m.ServiceInstanceGroups = make(map[ServiceInstanceAggregationKey]ServiceInstanceMetrics, len(pb.ServiceInstanceMetrics)) - for _, ksim := range pb.ServiceInstanceMetrics { - var k ServiceInstanceAggregationKey - var v ServiceInstanceMetrics - k.FromProto(ksim.Key) - v.FromProto(ksim.Metrics) - m.ServiceInstanceGroups[k] = v - } - m.OverflowGroups.FromProto(pb.OverflowGroups) -} - -// ToProto converts ServiceInstanceAggregationKey to its protobuf representation. -func (k *ServiceInstanceAggregationKey) ToProto() *aggregationpb.ServiceInstanceAggregationKey { - pb := aggregationpb.ServiceInstanceAggregationKeyFromVTPool() - pb.GlobalLabelsStr = []byte(k.GlobalLabelsStr) - return pb -} - -// FromProto converts protobuf representation to ServiceInstanceAggregationKey. -func (k *ServiceInstanceAggregationKey) FromProto(pb *aggregationpb.ServiceInstanceAggregationKey) { - k.GlobalLabelsStr = string(pb.GlobalLabelsStr) -} - -// ToProto converts ServiceInstanceMetrics to its protobuf representation. -func (m *ServiceInstanceMetrics) ToProto() *aggregationpb.ServiceInstanceMetrics { - pb := aggregationpb.ServiceInstanceMetricsFromVTPool() if len(m.TransactionGroups) > cap(pb.TransactionMetrics) { pb.TransactionMetrics = make([]*aggregationpb.KeyedTransactionMetrics, 0, len(m.TransactionGroups)) } @@ -220,8 +181,10 @@ func (m *ServiceInstanceMetrics) ToProto() *aggregationpb.ServiceInstanceMetrics return pb } -// FromProto converts protobuf representation to ServiceInstanceMetrics. -func (m *ServiceInstanceMetrics) FromProto(pb *aggregationpb.ServiceInstanceMetrics) { +// FromProto converts protobuf representation to ServiceMetrics. +func (m *ServiceMetrics) FromProto(pb *aggregationpb.ServiceMetrics) { + m.Labels.FromProto(pb.Labels) + m.OverflowGroups.FromProto(pb.OverflowGroups) m.TransactionGroups = make(map[TransactionAggregationKey]TransactionMetrics, len(pb.TransactionMetrics)) for _, ktm := range pb.TransactionMetrics { var k TransactionAggregationKey diff --git a/aggregators/converter.go b/aggregators/converter.go index cf02956..db57e9a 100644 --- a/aggregators/converter.go +++ b/aggregators/converter.go @@ -7,6 +7,7 @@ package aggregators import ( "fmt" "math" + "strconv" "time" "github.com/axiomhq/hyperloglog" @@ -44,50 +45,48 @@ func EventToCombinedMetrics( unpartitionedKey CombinedMetricsKey, partitioner Partitioner, ) (map[CombinedMetricsKey]*CombinedMetrics, error) { - var gl GlobalLabels - gl.fromLabelsAndNumericLabels(e.Labels, e.NumericLabels) - gls, err := gl.MarshalString() - if err != nil { - return nil, err - } - kvs := make(map[CombinedMetricsKey]*CombinedMetrics) svcKey := serviceKey(e, unpartitionedKey.Interval) - svcInstanceKey := ServiceInstanceAggregationKey{GlobalLabelsStr: gls} - hasher := Hasher{}.Chain(svcKey).Chain(svcInstanceKey) - setCombinedMetrics := func(k CombinedMetricsKey, sim ServiceInstanceMetrics) { + var gl GlobalLabels + gl.fromLabelsAndNumericLabels(e.Labels, e.NumericLabels) + // Set service.id from a hash of the global labels. + // + // TODO(axw) add service.id to apm-data, and require the caller to do this hashing. + // That way apm-server can conditionally hash global labels, depending on whether + // the data came from RUM. + svcKey.ServiceID = strconv.FormatUint(Hasher{}.Chain(&gl).Sum(), 10) + + hasher := Hasher{}.Chain(svcKey) + setCombinedMetrics := func(k CombinedMetricsKey, partial ServiceMetrics) { + var sm ServiceMetrics cm, ok := kvs[k] - if !ok { - cm = &CombinedMetrics{ - Services: map[ServiceAggregationKey]ServiceMetrics{ - svcKey: ServiceMetrics{ - ServiceInstanceGroups: map[ServiceInstanceAggregationKey]ServiceInstanceMetrics{}, - }, - }, - } + if ok { + sm = cm.Services[svcKey] + } else { + sm = ServiceMetrics{Labels: gl} + cm = &CombinedMetrics{Services: make(map[ServiceAggregationKey]ServiceMetrics, 1)} kvs[k] = cm } - svcInstanceM := cm.Services[svcKey].ServiceInstanceGroups[svcInstanceKey] - for k, v := range sim.TransactionGroups { - if svcInstanceM.TransactionGroups == nil { - svcInstanceM.TransactionGroups = make(map[TransactionAggregationKey]TransactionMetrics) + for k, v := range partial.TransactionGroups { + if sm.TransactionGroups == nil { + sm.TransactionGroups = make(map[TransactionAggregationKey]TransactionMetrics) } - svcInstanceM.TransactionGroups[k] = v + sm.TransactionGroups[k] = v } - for k, v := range sim.ServiceTransactionGroups { - if svcInstanceM.ServiceTransactionGroups == nil { - svcInstanceM.ServiceTransactionGroups = make(map[ServiceTransactionAggregationKey]ServiceTransactionMetrics) + for k, v := range partial.ServiceTransactionGroups { + if sm.ServiceTransactionGroups == nil { + sm.ServiceTransactionGroups = make(map[ServiceTransactionAggregationKey]ServiceTransactionMetrics) } - svcInstanceM.ServiceTransactionGroups[k] = v + sm.ServiceTransactionGroups[k] = v } - for k, v := range sim.SpanGroups { - if svcInstanceM.SpanGroups == nil { - svcInstanceM.SpanGroups = make(map[SpanAggregationKey]SpanMetrics) + for k, v := range sm.SpanGroups { + if sm.SpanGroups == nil { + sm.SpanGroups = make(map[SpanAggregationKey]SpanMetrics) } - svcInstanceM.SpanGroups[k] = v + sm.SpanGroups[k] = v } - cm.Services[svcKey].ServiceInstanceGroups[svcInstanceKey] = svcInstanceM + cm.Services[svcKey] = sm } processor := e.GetProcessor() @@ -102,7 +101,7 @@ func EventToCombinedMetrics( txnKey := transactionKey(e) cmk := unpartitionedKey cmk.PartitionID = partitioner.Partition(hasher.Chain(txnKey).Sum()) - setCombinedMetrics(cmk, ServiceInstanceMetrics{ + setCombinedMetrics(cmk, ServiceMetrics{ TransactionGroups: map[TransactionAggregationKey]TransactionMetrics{txnKey: tm}, }) @@ -111,7 +110,7 @@ func EventToCombinedMetrics( setMetricCountBasedOnOutcome(&stm, e) svcTxnKey := serviceTransactionKey(e) cmk.PartitionID = partitioner.Partition(hasher.Chain(svcTxnKey).Sum()) - setCombinedMetrics(cmk, ServiceInstanceMetrics{ + setCombinedMetrics(cmk, ServiceMetrics{ ServiceTransactionGroups: map[ServiceTransactionAggregationKey]ServiceTransactionMetrics{svcTxnKey: stm}, }) @@ -119,7 +118,7 @@ func EventToCombinedMetrics( for _, dss := range e.GetTransaction().GetDroppedSpansStats() { dssKey := droppedSpanStatsKey(dss) cmk.PartitionID = partitioner.Partition(hasher.Chain(dssKey).Sum()) - setCombinedMetrics(cmk, ServiceInstanceMetrics{ + setCombinedMetrics(cmk, ServiceMetrics{ SpanGroups: map[SpanAggregationKey]SpanMetrics{ dssKey: SpanMetrics{ Count: float64(dss.GetDuration().GetCount()) * repCount, @@ -145,7 +144,7 @@ func EventToCombinedMetrics( spanKey := spanKey(e) cmk := unpartitionedKey cmk.PartitionID = partitioner.Partition(hasher.Chain(spanKey).Sum()) - setCombinedMetrics(cmk, ServiceInstanceMetrics{ + setCombinedMetrics(cmk, ServiceMetrics{ SpanGroups: map[SpanAggregationKey]SpanMetrics{ spanKey: SpanMetrics{ Count: float64(count) * repCount, @@ -176,22 +175,12 @@ func CombinedMetricsToBatch( return nil, nil } - batchSize := 0 - // service_summary overflow metric - if cm.OverflowServiceInstancesEstimator != nil { - batchSize++ - } - + // Each service will create a service summary metric + batchSize := len(cm.Services) for _, sm := range cm.Services { - for _, sim := range sm.ServiceInstanceGroups { - batchSize += len(sim.TransactionGroups) - batchSize += len(sim.ServiceTransactionGroups) - batchSize += len(sim.SpanGroups) - - // Each service instance will create a service summary metric - batchSize++ - } - + batchSize += len(sm.TransactionGroups) + batchSize += len(sm.ServiceTransactionGroups) + batchSize += len(sm.SpanGroups) if !sm.OverflowGroups.OverflowTransaction.Empty() { batchSize++ } @@ -202,50 +191,39 @@ func CombinedMetricsToBatch( batchSize++ } } + if cm.OverflowServicesEstimator != nil { + batchSize++ + } b := make(modelpb.Batch, 0, batchSize) aggIntervalStr := formatDuration(aggInterval) for sk, sm := range cm.Services { - for sik, sim := range sm.ServiceInstanceGroups { - var gl GlobalLabels - err := gl.UnmarshalString(sik.GlobalLabelsStr) - if err != nil { - return nil, err - } - getBaseEventWithLabels := func() *modelpb.APMEvent { - event := getBaseEvent(sk) - event.Labels = gl.Labels - event.NumericLabels = gl.NumericLabels - return event - } - - // transaction metrics - for tk, tv := range sim.TransactionGroups { - event := getBaseEventWithLabels() - txnMetricsToAPMEvent(tk, tv, event, aggIntervalStr) - b = append(b, event) - } - // service transaction metrics - for stk, stv := range sim.ServiceTransactionGroups { - event := getBaseEventWithLabels() - svcTxnMetricsToAPMEvent(stk, stv, event, aggIntervalStr) - b = append(b, event) - } - // service destination metrics - for spk, spv := range sim.SpanGroups { - event := getBaseEventWithLabels() - spanMetricsToAPMEvent(spk, spv, event, aggIntervalStr) - b = append(b, event) - } + // service summary metrics + event := getBaseEvent(sk, sm.Labels) + serviceMetricsToAPMEvent(event, aggIntervalStr) + b = append(b, event) - // service summary metrics - event := getBaseEventWithLabels() - serviceMetricsToAPMEvent(event, aggIntervalStr) + // transaction metrics + for tk, tv := range sm.TransactionGroups { + event := getBaseEvent(sk, sm.Labels) + txnMetricsToAPMEvent(tk, tv, event, aggIntervalStr) + b = append(b, event) + } + // service transaction metrics + for stk, stv := range sm.ServiceTransactionGroups { + event := getBaseEvent(sk, sm.Labels) + svcTxnMetricsToAPMEvent(stk, stv, event, aggIntervalStr) + b = append(b, event) + } + // service destination metrics + for spk, spv := range sm.SpanGroups { + event := getBaseEvent(sk, sm.Labels) + spanMetricsToAPMEvent(spk, spv, event, aggIntervalStr) b = append(b, event) } if !sm.OverflowGroups.OverflowTransaction.Empty() { - event := getBaseEvent(sk) + event := getBaseEvent(sk, sm.Labels) overflowTxnMetricsToAPMEvent( processingTime, sm.OverflowGroups.OverflowTransaction, @@ -255,7 +233,7 @@ func CombinedMetricsToBatch( b = append(b, event) } if !sm.OverflowGroups.OverflowServiceTransaction.Empty() { - event := getBaseEvent(sk) + event := getBaseEvent(sk, sm.Labels) overflowSvcTxnMetricsToAPMEvent( processingTime, sm.OverflowGroups.OverflowServiceTransaction, @@ -265,7 +243,7 @@ func CombinedMetricsToBatch( b = append(b, event) } if !sm.OverflowGroups.OverflowSpan.Empty() { - event := getBaseEvent(sk) + event := getBaseEvent(sk, sm.Labels) overflowSpanMetricsToAPMEvent( processingTime, sm.OverflowGroups.OverflowSpan, @@ -275,79 +253,80 @@ func CombinedMetricsToBatch( b = append(b, event) } } - if cm.OverflowServiceInstancesEstimator != nil { - getOverflowBaseEvent := func() *modelpb.APMEvent { - return &modelpb.APMEvent{ - Processor: modelpb.MetricsetProcessor(), - Service: &modelpb.Service{ - Name: overflowBucketName, - }, - } + + getOverflowBaseEvent := func() *modelpb.APMEvent { + return &modelpb.APMEvent{ + Processor: modelpb.MetricsetProcessor(), + Service: &modelpb.Service{ + Name: overflowBucketName, + }, } + } + if cm.OverflowServicesEstimator != nil { event := getOverflowBaseEvent() overflowServiceMetricsToAPMEvent( processingTime, - cm.OverflowServiceInstancesEstimator, + cm.OverflowServicesEstimator, + event, + aggIntervalStr, + ) + b = append(b, event) + } + if !cm.OverflowServices.OverflowTransaction.Empty() { + event := getOverflowBaseEvent() + overflowTxnMetricsToAPMEvent( + processingTime, + cm.OverflowServices.OverflowTransaction, + event, + aggIntervalStr, + ) + b = append(b, event) + } + if !cm.OverflowServices.OverflowServiceTransaction.Empty() { + event := getOverflowBaseEvent() + overflowSvcTxnMetricsToAPMEvent( + processingTime, + cm.OverflowServices.OverflowServiceTransaction, + event, + aggIntervalStr, + ) + b = append(b, event) + } + if !cm.OverflowServices.OverflowSpan.Empty() { + event := getOverflowBaseEvent() + overflowSpanMetricsToAPMEvent( + processingTime, + cm.OverflowServices.OverflowSpan, event, aggIntervalStr, ) b = append(b, event) - if !cm.OverflowServices.OverflowTransaction.Empty() { - event := getOverflowBaseEvent() - overflowTxnMetricsToAPMEvent( - processingTime, - cm.OverflowServices.OverflowTransaction, - event, - aggIntervalStr, - ) - b = append(b, event) - } - if !cm.OverflowServices.OverflowServiceTransaction.Empty() { - event := getOverflowBaseEvent() - overflowSvcTxnMetricsToAPMEvent( - processingTime, - cm.OverflowServices.OverflowServiceTransaction, - event, - aggIntervalStr, - ) - b = append(b, event) - } - if !cm.OverflowServices.OverflowSpan.Empty() { - event := getOverflowBaseEvent() - overflowSpanMetricsToAPMEvent( - processingTime, - cm.OverflowServices.OverflowSpan, - event, - aggIntervalStr, - ) - b = append(b, event) - } } return &b, nil } -func getBaseEvent(key ServiceAggregationKey) *modelpb.APMEvent { +func getBaseEvent(key ServiceAggregationKey, labels GlobalLabels) *modelpb.APMEvent { event := &modelpb.APMEvent{ Timestamp: timestamppb.New(key.Timestamp), Processor: modelpb.MetricsetProcessor(), Service: &modelpb.Service{ Name: key.ServiceName, Environment: key.ServiceEnvironment, + // TODO(axw) service.id }, + Labels: labels.Labels, + NumericLabels: labels.NumericLabels, } - if key.ServiceLanguageName != "" { event.Service.Language = &modelpb.Language{ Name: key.ServiceLanguageName, } } - if key.AgentName != "" { event.Agent = &modelpb.Agent{ Name: key.AgentName, } } - return event } diff --git a/aggregators/merger.go b/aggregators/merger.go index bf5df4c..a1f65f8 100644 --- a/aggregators/merger.go +++ b/aggregators/merger.go @@ -7,8 +7,6 @@ package aggregators import ( "io" - "github.com/axiomhq/hyperloglog" - "github.com/elastic/apm-aggregation/aggregators/internal/hdrhistogram" ) @@ -81,9 +79,6 @@ func merge(to, from *CombinedMetrics, limits Limits) { // If there is overflow due to max services in either of the buckets being // merged then we can merge the overflow buckets without considering any other scenarios. mergeOverflow(&to.OverflowServices, &from.OverflowServices) - if from.OverflowServiceInstancesEstimator != nil { - mergeEstimator(&to.OverflowServiceInstancesEstimator, from.OverflowServiceInstancesEstimator) - } // Calculate the current capacity of the transaction, service transaction, // and span groups in the _to_ combined metrics. @@ -91,11 +86,9 @@ func merge(to, from *CombinedMetrics, limits Limits) { totalServiceTransactionGroupsConstraint := newConstraint(0, limits.MaxServiceTransactionGroups) totalSpanGroupsConstraint := newConstraint(0, limits.MaxSpanGroups) for _, svc := range to.Services { - for _, si := range svc.ServiceInstanceGroups { - totalTransactionGroupsConstraint.add(len(si.TransactionGroups)) - totalServiceTransactionGroupsConstraint.add(len(si.ServiceTransactionGroups)) - totalSpanGroupsConstraint.add(len(si.SpanGroups)) - } + totalTransactionGroupsConstraint.add(len(svc.TransactionGroups)) + totalServiceTransactionGroupsConstraint.add(len(svc.ServiceTransactionGroups)) + totalSpanGroupsConstraint.add(len(svc.SpanGroups)) } // Iterate over the services in the _from_ combined metrics and merge them @@ -112,75 +105,119 @@ func merge(to, from *CombinedMetrics, limits Limits) { toSvc, svcOverflow := getServiceMetrics(to, svcKey, limits.MaxServices) if svcOverflow { mergeOverflow(&to.OverflowServices, &fromSvc.OverflowGroups) - - for sik, sim := range fromSvc.ServiceInstanceGroups { - sikHash := hash.Chain(sik) - mergeToOverflowFromSIM(&to.OverflowServices, &sim, sikHash) - insertHash(&to.OverflowServiceInstancesEstimator, sikHash.Sum()) + for tk, tm := range fromSvc.TransactionGroups { + to.OverflowServices.OverflowTransaction.Merge(&tm, hash.Chain(tk).Sum()) + } + for stk, stm := range fromSvc.ServiceTransactionGroups { + to.OverflowServices.OverflowServiceTransaction.Merge(&stm, hash.Chain(stk).Sum()) + } + for sk, sm := range fromSvc.SpanGroups { + to.OverflowServices.OverflowSpan.Merge(&sm, hash.Chain(sk).Sum()) } continue } mergeOverflow(&toSvc.OverflowGroups, &fromSvc.OverflowGroups) - mergeServiceInstanceGroups(&toSvc, &fromSvc, + mergeServiceMetrics(&toSvc, &fromSvc, totalTransactionGroupsConstraint, totalServiceTransactionGroupsConstraint, totalSpanGroupsConstraint, - limits, hash, &to.OverflowServiceInstancesEstimator) + limits, hash) to.Services[svcKey] = toSvc } } -func mergeToOverflowFromSIM(to *Overflow, from *ServiceInstanceMetrics, hash Hasher) { - for tk, tm := range from.TransactionGroups { - to.OverflowTransaction.Merge(&tm, hash.Chain(tk).Sum()) - } - for stk, stm := range from.ServiceTransactionGroups { - to.OverflowServiceTransaction.Merge(&stm, hash.Chain(stk).Sum()) - } - for sk, sm := range from.SpanGroups { - to.OverflowSpan.Merge(&sm, hash.Chain(sk).Sum()) - } +func mergeServiceMetrics( + to, from *ServiceMetrics, + totalTransactionGroupsConstraint, totalServiceTransactionGroupsConstraint, totalSpanGroupsConstraint *Constraint, + limits Limits, + hash Hasher, +) { + mergeLabels(&to.Labels, &to.Labels, limits) + mergeTransactionGroups( + to, from, + newConstraint(len(to.TransactionGroups), limits.MaxTransactionGroupsPerService), + totalTransactionGroupsConstraint, + hash, + &to.OverflowGroups.OverflowTransaction, + ) + mergeServiceTransactionGroups( + to, from, + newConstraint(len(to.ServiceTransactionGroups), limits.MaxServiceTransactionGroupsPerService), + totalServiceTransactionGroupsConstraint, + hash, + &to.OverflowGroups.OverflowServiceTransaction, + ) + mergeSpanGroups( + to, from, + newConstraint(len(to.SpanGroups), limits.MaxSpanGroupsPerService), + totalSpanGroupsConstraint, + hash, + &to.OverflowGroups.OverflowSpan, + ) } -func mergeServiceInstanceGroups(to, from *ServiceMetrics, totalTransactionGroupsConstraint, totalServiceTransactionGroupsConstraint, totalSpanGroupsConstraint *Constraint, limits Limits, hash Hasher, overflowServiceInstancesEstimator **hyperloglog.Sketch) { - for siKey, fromSIM := range from.ServiceInstanceGroups { - toSIM, overflowed := getServiceInstanceMetrics(to, siKey, limits.MaxServiceInstanceGroupsPerService) - siKeyHash := hash.Chain(siKey) - if overflowed { - mergeToOverflowFromSIM(&to.OverflowGroups, &fromSIM, siKeyHash) - insertHash(overflowServiceInstancesEstimator, siKeyHash.Sum()) +func mergeLabels(to, from *GlobalLabels, limits Limits) { + toCount := len(to.Labels) + len(to.NumericLabels) + for k, fromv := range from.Labels { + tov, ok := to.Labels[k] + if !ok { + if toCount < limits.MaxLabelKeys { + toCount++ + to.Labels[k] = fromv + } continue } + if len(tov.Values) != 0 { + if len(fromv.Values) != 0 { + tov.Values = mergeLabelValues(tov.Values, limits, fromv.Values...) + } else { + tov.Values = mergeLabelValues(tov.Values, limits, fromv.Value) + } + } + } + for k, fromv := range from.NumericLabels { + tov, ok := to.NumericLabels[k] + if !ok { + if toCount < limits.MaxLabelKeys { + toCount++ + to.NumericLabels[k] = fromv + } + continue + } + if len(tov.Values) != 0 { + if len(fromv.Values) != 0 { + tov.Values = mergeLabelValues(tov.Values, limits, fromv.Values...) + } else { + tov.Values = mergeLabelValues(tov.Values, limits, fromv.Value) + } + } + } +} - mergeTransactionGroups( - &toSIM, - &fromSIM, - newConstraint(len(toSIM.TransactionGroups), limits.MaxTransactionGroupsPerService), - totalTransactionGroupsConstraint, - hash, - &to.OverflowGroups.OverflowTransaction, - ) - mergeServiceTransactionGroups( - &toSIM, - &fromSIM, - newConstraint(len(toSIM.ServiceTransactionGroups), limits.MaxServiceTransactionGroupsPerService), - totalServiceTransactionGroupsConstraint, - hash, - &to.OverflowGroups.OverflowServiceTransaction, - ) - mergeSpanGroups( - &toSIM, - &fromSIM, - newConstraint(len(toSIM.SpanGroups), limits.MaxSpanGroupsPerService), - totalSpanGroupsConstraint, - hash, - &to.OverflowGroups.OverflowSpan, - ) - to.ServiceInstanceGroups[siKey] = toSIM +func mergeLabelValues[T comparable](to []T, limits Limits, from ...T) []T { + if len(to) == limits.MaxLabelKeyValues { + return to + } + // TODO ensure label values are sorted before writing to pebble, + // so we can efficiently merge them by iterating through them. + toMap := make(map[T]struct{}, len(to)) + for _, v := range to { + toMap[v] = struct{}{} + } + for _, v := range from { + toMap[v] = struct{}{} + if len(to) == limits.MaxLabelKeyValues { + break + } + } + to = to[:0] + for v := range toMap { + to = append(to, v) } + return to } // mergeTransactionGroups merges transaction aggregation groups for two combined metrics // considering max transaction groups and max transaction groups per service limits. -func mergeTransactionGroups(to, from *ServiceInstanceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowTransaction) { +func mergeTransactionGroups(to, from *ServiceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowTransaction) { for txnKey, fromTxn := range from.TransactionGroups { toTxn, ok := to.TransactionGroups[txnKey] if !ok { @@ -200,7 +237,7 @@ func mergeTransactionGroups(to, from *ServiceInstanceMetrics, perSvcConstraint, // mergeServiceTransactionGroups merges service transaction aggregation groups for two combined metrics // considering max service transaction groups and max service transaction groups per service limits. -func mergeServiceTransactionGroups(to, from *ServiceInstanceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowServiceTransaction) { +func mergeServiceTransactionGroups(to, from *ServiceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowServiceTransaction) { for svcTxnKey, fromSvcTxn := range from.ServiceTransactionGroups { toSvcTxn, ok := to.ServiceTransactionGroups[svcTxnKey] if !ok { @@ -220,7 +257,7 @@ func mergeServiceTransactionGroups(to, from *ServiceInstanceMetrics, perSvcConst // mergeSpanGroups merges span aggregation groups for two combined metrics considering // max span groups and max span groups per service limits. -func mergeSpanGroups(to, from *ServiceInstanceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowSpan) { +func mergeSpanGroups(to, from *ServiceMetrics, perSvcConstraint, globalConstraint *Constraint, hash Hasher, overflowTo *OverflowSpan) { for spanKey, fromSpan := range from.SpanGroups { toSpan, ok := to.SpanGroups[spanKey] if !ok { @@ -292,21 +329,6 @@ func getServiceMetrics(cm *CombinedMetrics, svcKey ServiceAggregationKey, maxSvc return srcSvc, false } -// getServiceInstanceMetrics returns the service instance metric from a service metrics -// based on the service instance key argument, creating one if needed. A second bool -// return value indicates if a service instance is returned or no service instance can -// be created due to service instance per service limit breach. -func getServiceInstanceMetrics(sm *ServiceMetrics, siKey ServiceInstanceAggregationKey, maxSvcInstancePerSvc int) (ServiceInstanceMetrics, bool) { - sim, ok := sm.ServiceInstanceGroups[siKey] - if !ok { - if len(sm.ServiceInstanceGroups) < maxSvcInstancePerSvc { - return newServiceInstanceMetrics(), false - } - return ServiceInstanceMetrics{}, true - } - return sim, false -} - func newTransactionMetrics() TransactionMetrics { return TransactionMetrics{ Histogram: hdrhistogram.New(), @@ -319,16 +341,10 @@ func newServiceTransactionMetrics() ServiceTransactionMetrics { } } -func newServiceInstanceMetrics() ServiceInstanceMetrics { - return ServiceInstanceMetrics{ +func newServiceMetrics() ServiceMetrics { + return ServiceMetrics{ TransactionGroups: make(map[TransactionAggregationKey]TransactionMetrics), ServiceTransactionGroups: make(map[ServiceTransactionAggregationKey]ServiceTransactionMetrics), SpanGroups: make(map[SpanAggregationKey]SpanMetrics), } } - -func newServiceMetrics() ServiceMetrics { - return ServiceMetrics{ - ServiceInstanceGroups: make(map[ServiceInstanceAggregationKey]ServiceInstanceMetrics), - } -} diff --git a/aggregators/models.go b/aggregators/models.go index 67b6dd1..9f78b4c 100644 --- a/aggregators/models.go +++ b/aggregators/models.go @@ -6,6 +6,7 @@ package aggregators import ( "encoding/binary" + "math" "time" "github.com/axiomhq/hyperloglog" @@ -64,16 +65,20 @@ type Limits struct { // This limit is shared across all aggregation metrics. MaxServices int - // MaxServiceInstanceGroupsPerService is the limit on the total number - // of unique service instance groups within a service. - // A unique service instance group within a service is identified by a - // unique ServiceInstanceAggregationKey. - MaxServiceInstanceGroupsPerService int + // MaxLabelKeys is the limit on the total number of unique label keys + // per service. When this would be exceeded, new label keys will be + // silently ignored. + MaxLabelKeys int + + // MaxLabelKeyValues is the limit on the total number of unique values + // for each label key. When this would be exceeded, new label valeus + // will be silently ignored. + MaxLabelKeyValues int // MaxSpanGroups is the limit on total number of unique span groups // across all services. // A unique span group is identified by a unique - // ServiceAggregationKey + ServiceInstanceAggregationKey + SpanAggregationKey. + // ServiceAggregationKey + SpanAggregationKey. MaxSpanGroups int // MaxSpanGroupsPerService is the limit on the total number of unique @@ -85,7 +90,7 @@ type Limits struct { // MaxTransactionGroups is the limit on total number of unique // transaction groups across all services. // A unique transaction group is identified by a unique - // ServiceAggregationKey + ServiceInstanceAggregationKey + TransactionAggregationKey. + // ServiceAggregationKey + TransactionAggregationKey. MaxTransactionGroups int // MaxTransactionGroupsPerService is the limit on the number of unique @@ -97,7 +102,7 @@ type Limits struct { // MaxServiceTransactionGroups is the limit on total number of unique // service transaction groups across all services. // A unique service transaction group is identified by a unique - // ServiceAggregationKey + ServiceInstanceAggregationKey + ServiceTransactionAggregationKey. + // ServiceAggregationKey + ServiceTransactionAggregationKey. MaxServiceTransactionGroups int // MaxServiceTransactionGroupsPerService is the limit on the number @@ -130,10 +135,10 @@ type CombinedMetrics struct { // that overflowed due to max services limit being reached. OverflowServices Overflow - // OverflowServiceInstancesEstimator estimates the number of unique service - // instance aggregation keys that overflowed due to max services limit or - // max service instances per service limit. - OverflowServiceInstancesEstimator *hyperloglog.Sketch + // OverflowServicesEstimator estimates the number of unique + // service aggregation keys that overflowed due to max services + // limit being reached. + OverflowServicesEstimator *hyperloglog.Sketch // eventsTotal is the total number of individual events, including // all overflows, that were aggregated for this combined metrics. It @@ -154,6 +159,7 @@ type ServiceAggregationKey struct { ServiceEnvironment string ServiceLanguageName string AgentName string + ServiceID string } // Hash returns a xxhash.Digest after hashing the aggregation key on top of h. @@ -166,31 +172,15 @@ func (k ServiceAggregationKey) Hash(h xxhash.Digest) xxhash.Digest { h.WriteString(k.ServiceEnvironment) h.WriteString(k.ServiceLanguageName) h.WriteString(k.AgentName) + h.WriteString(k.ServiceID) return h } // ServiceMetrics models the value to store all the aggregated metrics // for a specific service aggregation key. type ServiceMetrics struct { - ServiceInstanceGroups map[ServiceInstanceAggregationKey]ServiceInstanceMetrics - OverflowGroups Overflow -} - -// ServiceInstanceAggregationKey models the key used to store service instance specific -// aggregation metrics. -type ServiceInstanceAggregationKey struct { - GlobalLabelsStr string -} - -// Hash returns a xxhash.Digest after hashing the aggregation key on top of h. -func (k ServiceInstanceAggregationKey) Hash(h xxhash.Digest) xxhash.Digest { - h.WriteString(k.GlobalLabelsStr) - return h -} - -// ServiceInstanceMetrics models the value to store all the aggregated metrics -// for a specific service instance aggregation key. -type ServiceInstanceMetrics struct { + Labels GlobalLabels + OverflowGroups Overflow TransactionGroups map[TransactionAggregationKey]TransactionMetrics ServiceTransactionGroups map[ServiceTransactionAggregationKey]ServiceTransactionMetrics SpanGroups map[SpanAggregationKey]SpanMetrics @@ -448,6 +438,27 @@ type GlobalLabels struct { NumericLabels modelpb.NumericLabels } +func (gl *GlobalLabels) Hash(h xxhash.Digest) xxhash.Digest { + for k, v := range gl.Labels { + h.WriteString(k) + h.WriteString(v.Value) + for _, v := range v.Values { + h.WriteString(v) + } + } + var buf [8]byte + for k, v := range gl.NumericLabels { + h.WriteString(k) + binary.LittleEndian.PutUint64(buf[:], math.Float64bits(v.Value)) + h.Write(buf[:]) + for _, v := range v.Values { + binary.LittleEndian.PutUint64(buf[:], math.Float64bits(v)) + h.Write(buf[:]) + } + } + return h +} + func (gl *GlobalLabels) fromLabelsAndNumericLabels(labels modelpb.Labels, numericLabels modelpb.NumericLabels) { gl.Labels = make(modelpb.Labels) for k, v := range labels { diff --git a/proto/aggregation.proto b/proto/aggregation.proto index 7e616cd..9d26251 100644 --- a/proto/aggregation.proto +++ b/proto/aggregation.proto @@ -2,13 +2,15 @@ syntax = "proto3"; package elastic.apm; +import "labels.proto"; + option go_package = "./aggregationpb"; option optimize_for = SPEED; message CombinedMetrics { repeated KeyedServiceMetrics service_metrics = 1; Overflow overflow_services = 2; - bytes overflow_service_instances_estimator = 3; + bytes overflow_services_estimator = 3; double events_total = 4; uint64 youngest_event_timestamp = 5; } @@ -24,27 +26,24 @@ message ServiceAggregationKey { string service_environment = 3; string service_language_name = 4; string agent_name = 5; - bytes global_labels_str = 6; -} -message ServiceMetrics { - repeated KeyedServiceInstanceMetrics service_instance_metrics = 1; - Overflow overflow_groups = 2; + // service_id is an identifier shared by all nodes of one service cluster. + // + // This forces the creation of separate time series for each cluster of + // a service. + string service_id = 6; } -message ServiceInstanceAggregationKey { - bytes global_labels_str = 1; -} - -message ServiceInstanceMetrics { - repeated KeyedTransactionMetrics transaction_metrics = 1; - repeated KeyedServiceTransactionMetrics service_transaction_metrics = 2; - repeated KeyedSpanMetrics span_metrics = 3; -} +message ServiceMetrics { + // labels are arbitrary key-value pairs that are accumulated for aggregated + // service metrics, up to a limit. Once the limit is reached, additional + // labels are silently dropped. + GlobalLabels labels = 1; -message KeyedServiceInstanceMetrics { - ServiceInstanceAggregationKey key = 1; - ServiceInstanceMetrics metrics = 2; + Overflow overflow_groups = 2; + repeated KeyedTransactionMetrics transaction_metrics = 3; + repeated KeyedServiceTransactionMetrics service_transaction_metrics = 4; + repeated KeyedSpanMetrics span_metrics = 5; } message KeyedTransactionMetrics {