chore: add system metrics

This commit is contained in:
d3m0k1d
2026-04-05 05:37:19 +03:00
parent 54e8102a51
commit c2e8037560
13 changed files with 812 additions and 47 deletions
+10
View File
@@ -7,9 +7,19 @@ option go_package="gitea.d3m0k1d.ru/d3m0k1d/HellreigN/proto/proto";
service Collector {
rpc Stream(stream CollectorRequest) returns (CollectorResponse);
rpc ReportServices(ServicesUpdate) returns (ServicesUpdateResp);
rpc ReportSystemMetrics(SystemMetrics) returns (SystemMetricsResp);
}
message ServicesUpdateResp {
}
message SystemMetricsResp {
}
message SystemMetrics {
double cpu_percent = 1; // CPU usage percentage (0-100)
double memory_percent = 2; // RAM usage percentage (0-100)
double disk_percent = 3; // Disk usage percentage (0-100)
double network_rx_bytes = 4; // Network received bytes per second
double network_tx_bytes = 5; // Network transmitted bytes per second
}
message ServicesUpdate {
message ServiceUpdate {
string name = 1;
+165 -40
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
// protoc v3.21.9
// protoc v7.34.1
// source: hellreign.proto
package proto
@@ -57,6 +57,118 @@ func (*ServicesUpdateResp) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{0}
}
type SystemMetricsResp struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SystemMetricsResp) Reset() {
*x = SystemMetricsResp{}
mi := &file_hellreign_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SystemMetricsResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SystemMetricsResp) ProtoMessage() {}
func (x *SystemMetricsResp) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SystemMetricsResp.ProtoReflect.Descriptor instead.
func (*SystemMetricsResp) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{1}
}
type SystemMetrics struct {
state protoimpl.MessageState `protogen:"open.v1"`
CpuPercent float64 `protobuf:"fixed64,1,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"` // CPU usage percentage (0-100)
MemoryPercent float64 `protobuf:"fixed64,2,opt,name=memory_percent,json=memoryPercent,proto3" json:"memory_percent,omitempty"` // RAM usage percentage (0-100)
DiskPercent float64 `protobuf:"fixed64,3,opt,name=disk_percent,json=diskPercent,proto3" json:"disk_percent,omitempty"` // Disk usage percentage (0-100)
NetworkRxBytes float64 `protobuf:"fixed64,4,opt,name=network_rx_bytes,json=networkRxBytes,proto3" json:"network_rx_bytes,omitempty"` // Network received bytes per second
NetworkTxBytes float64 `protobuf:"fixed64,5,opt,name=network_tx_bytes,json=networkTxBytes,proto3" json:"network_tx_bytes,omitempty"` // Network transmitted bytes per second
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SystemMetrics) Reset() {
*x = SystemMetrics{}
mi := &file_hellreign_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SystemMetrics) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SystemMetrics) ProtoMessage() {}
func (x *SystemMetrics) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SystemMetrics.ProtoReflect.Descriptor instead.
func (*SystemMetrics) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{2}
}
func (x *SystemMetrics) GetCpuPercent() float64 {
if x != nil {
return x.CpuPercent
}
return 0
}
func (x *SystemMetrics) GetMemoryPercent() float64 {
if x != nil {
return x.MemoryPercent
}
return 0
}
func (x *SystemMetrics) GetDiskPercent() float64 {
if x != nil {
return x.DiskPercent
}
return 0
}
func (x *SystemMetrics) GetNetworkRxBytes() float64 {
if x != nil {
return x.NetworkRxBytes
}
return 0
}
func (x *SystemMetrics) GetNetworkTxBytes() float64 {
if x != nil {
return x.NetworkTxBytes
}
return 0
}
type ServicesUpdate struct {
state protoimpl.MessageState `protogen:"open.v1"`
Services []*ServicesUpdate_ServiceUpdate `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"`
@@ -66,7 +178,7 @@ type ServicesUpdate struct {
func (x *ServicesUpdate) Reset() {
*x = ServicesUpdate{}
mi := &file_hellreign_proto_msgTypes[1]
mi := &file_hellreign_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -78,7 +190,7 @@ func (x *ServicesUpdate) String() string {
func (*ServicesUpdate) ProtoMessage() {}
func (x *ServicesUpdate) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[1]
mi := &file_hellreign_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -91,7 +203,7 @@ func (x *ServicesUpdate) ProtoReflect() protoreflect.Message {
// Deprecated: Use ServicesUpdate.ProtoReflect.Descriptor instead.
func (*ServicesUpdate) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{1}
return file_hellreign_proto_rawDescGZIP(), []int{3}
}
func (x *ServicesUpdate) GetServices() []*ServicesUpdate_ServiceUpdate {
@@ -110,7 +222,7 @@ type CollectorRequest struct {
func (x *CollectorRequest) Reset() {
*x = CollectorRequest{}
mi := &file_hellreign_proto_msgTypes[2]
mi := &file_hellreign_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -122,7 +234,7 @@ func (x *CollectorRequest) String() string {
func (*CollectorRequest) ProtoMessage() {}
func (x *CollectorRequest) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[2]
mi := &file_hellreign_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -135,7 +247,7 @@ func (x *CollectorRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CollectorRequest.ProtoReflect.Descriptor instead.
func (*CollectorRequest) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{2}
return file_hellreign_proto_rawDescGZIP(), []int{4}
}
func (x *CollectorRequest) GetMessage() string {
@@ -153,7 +265,7 @@ type CollectorResponse struct {
func (x *CollectorResponse) Reset() {
*x = CollectorResponse{}
mi := &file_hellreign_proto_msgTypes[3]
mi := &file_hellreign_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -165,7 +277,7 @@ func (x *CollectorResponse) String() string {
func (*CollectorResponse) ProtoMessage() {}
func (x *CollectorResponse) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[3]
mi := &file_hellreign_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -178,7 +290,7 @@ func (x *CollectorResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CollectorResponse.ProtoReflect.Descriptor instead.
func (*CollectorResponse) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{3}
return file_hellreign_proto_rawDescGZIP(), []int{5}
}
type Command struct {
@@ -192,7 +304,7 @@ type Command struct {
func (x *Command) Reset() {
*x = Command{}
mi := &file_hellreign_proto_msgTypes[4]
mi := &file_hellreign_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -204,7 +316,7 @@ func (x *Command) String() string {
func (*Command) ProtoMessage() {}
func (x *Command) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[4]
mi := &file_hellreign_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -217,7 +329,7 @@ func (x *Command) ProtoReflect() protoreflect.Message {
// Deprecated: Use Command.ProtoReflect.Descriptor instead.
func (*Command) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{4}
return file_hellreign_proto_rawDescGZIP(), []int{6}
}
func (x *Command) GetId() int64 {
@@ -253,7 +365,7 @@ type FinishedCommand struct {
func (x *FinishedCommand) Reset() {
*x = FinishedCommand{}
mi := &file_hellreign_proto_msgTypes[5]
mi := &file_hellreign_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -265,7 +377,7 @@ func (x *FinishedCommand) String() string {
func (*FinishedCommand) ProtoMessage() {}
func (x *FinishedCommand) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[5]
mi := &file_hellreign_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -278,7 +390,7 @@ func (x *FinishedCommand) ProtoReflect() protoreflect.Message {
// Deprecated: Use FinishedCommand.ProtoReflect.Descriptor instead.
func (*FinishedCommand) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{5}
return file_hellreign_proto_rawDescGZIP(), []int{7}
}
func (x *FinishedCommand) GetId() int64 {
@@ -319,7 +431,7 @@ type ServicesUpdate_ServiceUpdate struct {
func (x *ServicesUpdate_ServiceUpdate) Reset() {
*x = ServicesUpdate_ServiceUpdate{}
mi := &file_hellreign_proto_msgTypes[6]
mi := &file_hellreign_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -331,7 +443,7 @@ func (x *ServicesUpdate_ServiceUpdate) String() string {
func (*ServicesUpdate_ServiceUpdate) ProtoMessage() {}
func (x *ServicesUpdate_ServiceUpdate) ProtoReflect() protoreflect.Message {
mi := &file_hellreign_proto_msgTypes[6]
mi := &file_hellreign_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -344,7 +456,7 @@ func (x *ServicesUpdate_ServiceUpdate) ProtoReflect() protoreflect.Message {
// Deprecated: Use ServicesUpdate_ServiceUpdate.ProtoReflect.Descriptor instead.
func (*ServicesUpdate_ServiceUpdate) Descriptor() ([]byte, []int) {
return file_hellreign_proto_rawDescGZIP(), []int{1, 0}
return file_hellreign_proto_rawDescGZIP(), []int{3, 0}
}
func (x *ServicesUpdate_ServiceUpdate) GetName() string {
@@ -366,7 +478,15 @@ var File_hellreign_proto protoreflect.FileDescriptor
const file_hellreign_proto_rawDesc = "" +
"\n" +
"\x0fhellreign.proto\x12\x04chat\"\x14\n" +
"\x12ServicesUpdateResp\"\x8d\x01\n" +
"\x12ServicesUpdateResp\"\x13\n" +
"\x11SystemMetricsResp\"\xce\x01\n" +
"\rSystemMetrics\x12\x1f\n" +
"\vcpu_percent\x18\x01 \x01(\x01R\n" +
"cpuPercent\x12%\n" +
"\x0ememory_percent\x18\x02 \x01(\x01R\rmemoryPercent\x12!\n" +
"\fdisk_percent\x18\x03 \x01(\x01R\vdiskPercent\x12(\n" +
"\x10network_rx_bytes\x18\x04 \x01(\x01R\x0enetworkRxBytes\x12(\n" +
"\x10network_tx_bytes\x18\x05 \x01(\x01R\x0enetworkTxBytes\"\x8d\x01\n" +
"\x0eServicesUpdate\x12>\n" +
"\bservices\x18\x01 \x03(\v2\".chat.ServicesUpdate.ServiceUpdateR\bservices\x1a;\n" +
"\rServiceUpdate\x12\x12\n" +
@@ -384,10 +504,11 @@ const file_hellreign_proto_rawDesc = "" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x16\n" +
"\x06status\x18\x02 \x01(\x05R\x06status\x12\x16\n" +
"\x06stdout\x18\x03 \x01(\tR\x06stdout\x12\x16\n" +
"\x06stderr\x18\x04 \x01(\tR\x06stderr2\x8a\x01\n" +
"\x06stderr\x18\x04 \x01(\tR\x06stderr2\xcf\x01\n" +
"\tCollector\x12;\n" +
"\x06Stream\x12\x16.chat.CollectorRequest\x1a\x17.chat.CollectorResponse(\x01\x12@\n" +
"\x0eReportServices\x12\x14.chat.ServicesUpdate\x1a\x18.chat.ServicesUpdateResp2?\n" +
"\x0eReportServices\x12\x14.chat.ServicesUpdate\x1a\x18.chat.ServicesUpdateResp\x12C\n" +
"\x13ReportSystemMetrics\x12\x13.chat.SystemMetrics\x1a\x17.chat.SystemMetricsResp2?\n" +
"\tCommander\x122\n" +
"\x06Stream\x12\x15.chat.FinishedCommand\x1a\r.chat.Command(\x010\x01B0Z.gitea.d3m0k1d.ru/d3m0k1d/HellreigN/proto/protob\x06proto3"
@@ -403,26 +524,30 @@ func file_hellreign_proto_rawDescGZIP() []byte {
return file_hellreign_proto_rawDescData
}
var file_hellreign_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_hellreign_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_hellreign_proto_goTypes = []any{
(*ServicesUpdateResp)(nil), // 0: chat.ServicesUpdateResp
(*ServicesUpdate)(nil), // 1: chat.ServicesUpdate
(*CollectorRequest)(nil), // 2: chat.CollectorRequest
(*CollectorResponse)(nil), // 3: chat.CollectorResponse
(*Command)(nil), // 4: chat.Command
(*FinishedCommand)(nil), // 5: chat.FinishedCommand
(*ServicesUpdate_ServiceUpdate)(nil), // 6: chat.ServicesUpdate.ServiceUpdate
(*SystemMetricsResp)(nil), // 1: chat.SystemMetricsResp
(*SystemMetrics)(nil), // 2: chat.SystemMetrics
(*ServicesUpdate)(nil), // 3: chat.ServicesUpdate
(*CollectorRequest)(nil), // 4: chat.CollectorRequest
(*CollectorResponse)(nil), // 5: chat.CollectorResponse
(*Command)(nil), // 6: chat.Command
(*FinishedCommand)(nil), // 7: chat.FinishedCommand
(*ServicesUpdate_ServiceUpdate)(nil), // 8: chat.ServicesUpdate.ServiceUpdate
}
var file_hellreign_proto_depIdxs = []int32{
6, // 0: chat.ServicesUpdate.services:type_name -> chat.ServicesUpdate.ServiceUpdate
2, // 1: chat.Collector.Stream:input_type -> chat.CollectorRequest
1, // 2: chat.Collector.ReportServices:input_type -> chat.ServicesUpdate
5, // 3: chat.Commander.Stream:input_type -> chat.FinishedCommand
3, // 4: chat.Collector.Stream:output_type -> chat.CollectorResponse
0, // 5: chat.Collector.ReportServices:output_type -> chat.ServicesUpdateResp
4, // 6: chat.Commander.Stream:output_type -> chat.Command
4, // [4:7] is the sub-list for method output_type
1, // [1:4] is the sub-list for method input_type
8, // 0: chat.ServicesUpdate.services:type_name -> chat.ServicesUpdate.ServiceUpdate
4, // 1: chat.Collector.Stream:input_type -> chat.CollectorRequest
3, // 2: chat.Collector.ReportServices:input_type -> chat.ServicesUpdate
2, // 3: chat.Collector.ReportSystemMetrics:input_type -> chat.SystemMetrics
7, // 4: chat.Commander.Stream:input_type -> chat.FinishedCommand
5, // 5: chat.Collector.Stream:output_type -> chat.CollectorResponse
0, // 6: chat.Collector.ReportServices:output_type -> chat.ServicesUpdateResp
1, // 7: chat.Collector.ReportSystemMetrics:output_type -> chat.SystemMetricsResp
6, // 8: chat.Commander.Stream:output_type -> chat.Command
5, // [5:9] is the sub-list for method output_type
1, // [1:5] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
@@ -433,14 +558,14 @@ func file_hellreign_proto_init() {
if File_hellreign_proto != nil {
return
}
file_hellreign_proto_msgTypes[4].OneofWrappers = []any{}
file_hellreign_proto_msgTypes[6].OneofWrappers = []any{}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_hellreign_proto_rawDesc), len(file_hellreign_proto_rawDesc)),
NumEnums: 0,
NumMessages: 7,
NumMessages: 9,
NumExtensions: 0,
NumServices: 2,
},
+41 -3
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.6.1
// - protoc v3.21.9
// - protoc v7.34.1
// source: hellreign.proto
package proto
@@ -19,8 +19,9 @@ import (
const _ = grpc.SupportPackageIsVersion9
const (
Collector_Stream_FullMethodName = "/chat.Collector/Stream"
Collector_ReportServices_FullMethodName = "/chat.Collector/ReportServices"
Collector_Stream_FullMethodName = "/chat.Collector/Stream"
Collector_ReportServices_FullMethodName = "/chat.Collector/ReportServices"
Collector_ReportSystemMetrics_FullMethodName = "/chat.Collector/ReportSystemMetrics"
)
// CollectorClient is the client API for Collector service.
@@ -29,6 +30,7 @@ const (
type CollectorClient interface {
Stream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[CollectorRequest, CollectorResponse], error)
ReportServices(ctx context.Context, in *ServicesUpdate, opts ...grpc.CallOption) (*ServicesUpdateResp, error)
ReportSystemMetrics(ctx context.Context, in *SystemMetrics, opts ...grpc.CallOption) (*SystemMetricsResp, error)
}
type collectorClient struct {
@@ -62,12 +64,23 @@ func (c *collectorClient) ReportServices(ctx context.Context, in *ServicesUpdate
return out, nil
}
func (c *collectorClient) ReportSystemMetrics(ctx context.Context, in *SystemMetrics, opts ...grpc.CallOption) (*SystemMetricsResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(SystemMetricsResp)
err := c.cc.Invoke(ctx, Collector_ReportSystemMetrics_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// CollectorServer is the server API for Collector service.
// All implementations must embed UnimplementedCollectorServer
// for forward compatibility.
type CollectorServer interface {
Stream(grpc.ClientStreamingServer[CollectorRequest, CollectorResponse]) error
ReportServices(context.Context, *ServicesUpdate) (*ServicesUpdateResp, error)
ReportSystemMetrics(context.Context, *SystemMetrics) (*SystemMetricsResp, error)
mustEmbedUnimplementedCollectorServer()
}
@@ -84,6 +97,9 @@ func (UnimplementedCollectorServer) Stream(grpc.ClientStreamingServer[CollectorR
func (UnimplementedCollectorServer) ReportServices(context.Context, *ServicesUpdate) (*ServicesUpdateResp, error) {
return nil, status.Error(codes.Unimplemented, "method ReportServices not implemented")
}
func (UnimplementedCollectorServer) ReportSystemMetrics(context.Context, *SystemMetrics) (*SystemMetricsResp, error) {
return nil, status.Error(codes.Unimplemented, "method ReportSystemMetrics not implemented")
}
func (UnimplementedCollectorServer) mustEmbedUnimplementedCollectorServer() {}
func (UnimplementedCollectorServer) testEmbeddedByValue() {}
@@ -130,6 +146,24 @@ func _Collector_ReportServices_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _Collector_ReportSystemMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SystemMetrics)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(CollectorServer).ReportSystemMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Collector_ReportSystemMetrics_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(CollectorServer).ReportSystemMetrics(ctx, req.(*SystemMetrics))
}
return interceptor(ctx, in, info, handler)
}
// Collector_ServiceDesc is the grpc.ServiceDesc for Collector service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -141,6 +175,10 @@ var Collector_ServiceDesc = grpc.ServiceDesc{
MethodName: "ReportServices",
Handler: _Collector_ReportServices_Handler,
},
{
MethodName: "ReportSystemMetrics",
Handler: _Collector_ReportSystemMetrics_Handler,
},
},
Streams: []grpc.StreamDesc{
{