From 3c071afa5085e54d9092e07143c6633d6ec75401 Mon Sep 17 00:00:00 2001 From: Pipeline Agent Date: Sat, 15 Aug 2026 01:20:11 +0800 Subject: [PATCH] =?UTF-8?q?develop:=20=E5=BC=80=E5=8F=91=20host-metrics-co?= =?UTF-8?q?llector=20=E9=87=87=E9=9B=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/collector.proto | 66 +++ go.mod | 9 + internal/checkpoint/store.go | 40 ++ internal/config/config.go | 117 +++++ internal/model/model.go | 70 +++ pkg/collectorpb/collector.pb.go | 826 ++++++++++++++++++++++++++++++++ 6 files changed, 1128 insertions(+) create mode 100644 api/collector.proto create mode 100644 go.mod create mode 100644 internal/checkpoint/store.go create mode 100644 internal/config/config.go create mode 100644 internal/model/model.go create mode 100644 pkg/collectorpb/collector.pb.go diff --git a/api/collector.proto b/api/collector.proto new file mode 100644 index 0000000..48d7c33 --- /dev/null +++ b/api/collector.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; + +package hms.collector.v1; + +option go_package = "git.opencomputing.cn/yumoqing/host-metrics-collector/pkg/collectorpb;collectorpb"; + +// MetricSample 表示单条指标样本,labels 统一携带 host_id / service / metric_group。 +message MetricSample { + string name = 1; + double value = 2; + int64 timestamp = 3; // Unix 秒 + map labels = 4; +} + +// MetricBatch 是 Agent 一次批量上报的指标消息。 +message MetricBatch { + string host_id = 1; + string agent_version = 2; + int64 seq = 3; + int64 sent_at = 4; // Unix 秒 + repeated MetricSample samples = 5; +} + +// LogEntry 表示单条主机日志,offset 用于日志文件断点续传。 +message LogEntry { + int64 timestamp = 1; // Unix 秒 + string level = 2; + string source = 3; + string message = 4; + map fields = 5; + string file = 6; + int64 offset = 7; +} + +// LogBatch 是 Agent 一次批量上报的日志消息。 +message LogBatch { + string host_id = 1; + int64 seq = 2; + repeated LogEntry entries = 3; +} + +// Ack 是上报接口的统一确认响应。 +message Ack { + bool ok = 1; + int64 seq = 2; + string error = 3; +} + +// HeartbeatRequest 是 Agent 心跳/注册/配置下发请求。 +message HeartbeatRequest { + string host_id = 1; + string agent_version = 2; + int64 config_version = 3; +} + +// HeartbeatResponse 是心跳响应。 +message HeartbeatResponse { + bool ok = 1; + int64 server_time = 2; // Unix 秒 + map config = 3; +} + +// CheckpointResponse 返回服务端已确认的序号。 +message CheckpointResponse { + int64 last_acked_seq = 1; +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..72b1fb7 --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module git.opencomputing.cn/yumoqing/host-metrics-collector + +go 1.22 + +require ( + github.com/redis/go-redis/v9 v9.5.1 + github.com/shirou/gopsutil/v4 v4.24.6 + google.golang.org/protobuf v1.34.2 +) diff --git a/internal/checkpoint/store.go b/internal/checkpoint/store.go new file mode 100644 index 0000000..4d20492 --- /dev/null +++ b/internal/checkpoint/store.go @@ -0,0 +1,40 @@ +// Package checkpoint 实现 Agent 断点续传所需的检查点存储。 +// +// 日志文件检查点记录「文件路径 → 已消费 offset」,指标上报检查点记录 +// 「host_id → 已确认 seq」。默认提供 memory / file / redis 三种驱动, +// 生产环境使用 Redis 记录 offset,实现进程重启后从已确认点继续。 +package checkpoint + +import "fmt" + +// Store 是检查点存储的抽象接口。 +type Store interface { + // GetLogOffset 返回指定日志文件已消费到的 offset,不存在时返回 0。 + GetLogOffset(file string) (int64, error) + // SetLogOffset 推进日志文件 offset。 + SetLogOffset(file string, offset int64) error + + // GetAckedSeq 返回指定主机已确认的上报序号,不存在时返回 0。 + GetAckedSeq(hostID string) (int64, error) + // SetAckedSeq 推进主机已确认的上报序号。 + SetAckedSeq(hostID string, seq int64) error + + Close() error +} + +// New 根据驱动名创建检查点存储。 +// +// 支持:memory(进程内,测试/零依赖)、file(本地 JSON 持久化)、 +// redis(Redis 记录 offset,生产推荐)。 +func New(driver, file, redisURL string) (Store, error) { + switch driver { + case "", "memory": + return NewMemoryStore(), nil + case "file": + return NewFileStore(file) + case "redis": + return NewRedisStore(redisURL) + default: + return nil, fmt.Errorf("checkpoint: unknown driver %q", driver) + } +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..7e9bd49 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,117 @@ +// Package config 提供 Agent 与 Gateway 的配置加载(环境变量优先,内置默认值)。 +package config + +import ( + "os" + "strconv" + "strings" + "time" +) + +// AgentConfig 是 Agent 端运行配置。 +type AgentConfig struct { + HostID string + AgentVersion string + + GatewayURL string + AgentToken string + + LogFiles []string + + CoreInterval time.Duration + DiskInterval time.Duration + NetworkInterval time.Duration + ProcessInterval time.Duration + + BatchSize int + FlushInterval time.Duration + + CheckpointDriver string // memory | file | redis + CheckpointFile string + RedisURL string + + CollectTimeout time.Duration +} + +// DefaultAgentConfig 返回 Agent 默认配置。 +func DefaultAgentConfig() AgentConfig { + return AgentConfig{ + HostID: env("HMS_HOST_ID", "host-001"), + AgentVersion: env("HMS_AGENT_VERSION", "0.1.0"), + GatewayURL: env("HMS_GATEWAY_URL", "http://127.0.0.1:4318"), + AgentToken: env("HMS_AGENT_TOKEN", "dev-token"), + LogFiles: splitCSV(env("HMS_LOG_FILES", "")), + CoreInterval: durEnv("HMS_CORE_INTERVAL", 15*time.Second), + DiskInterval: durEnv("HMS_DISK_INTERVAL", 30*time.Second), + NetworkInterval: durEnv("HMS_NETWORK_INTERVAL", 30*time.Second), + ProcessInterval: durEnv("HMS_PROCESS_INTERVAL", 60*time.Second), + BatchSize: intEnv("HMS_BATCH_SIZE", 128), + FlushInterval: durEnv("HMS_FLUSH_INTERVAL", 10*time.Second), + CheckpointDriver: env("HMS_CHECKPOINT_DRIVER", "file"), + CheckpointFile: env("HMS_CHECKPOINT_FILE", "checkpoint.json"), + RedisURL: env("HMS_REDIS_URL", "redis://127.0.0.1:6379/0"), + CollectTimeout: durEnv("HMS_COLLECT_TIMEOUT", 5*time.Second), + } +} + +// GatewayConfig 是服务端 Collector Gateway 配置。 +type GatewayConfig struct { + Addr string + AgentToken string + + // 查询内存存储的保留上限。 + MaxMetricsPerHost int + MaxLogsPerHost int + + RedisURL string +} + +// DefaultGatewayConfig 返回 Gateway 默认配置。 +func DefaultGatewayConfig() GatewayConfig { + return GatewayConfig{ + Addr: env("HMS_GATEWAY_ADDR", "0.0.0.0:4318"), + AgentToken: env("HMS_AGENT_TOKEN", "dev-token"), + MaxMetricsPerHost: intEnv("HMS_MAX_METRICS_PER_HOST", 20000), + MaxLogsPerHost: intEnv("HMS_MAX_LOGS_PER_HOST", 20000), + RedisURL: env("HMS_REDIS_URL", "redis://127.0.0.1:6379/0"), + } +} + +func env(key, def string) string { + if v, ok := os.LookupEnv(key); ok && v != "" { + return v + } + return def +} + +func durEnv(key string, def time.Duration) time.Duration { + if v, ok := os.LookupEnv(key); ok && v != "" { + if d, err := time.ParseDuration(v); err == nil { + return d + } + } + return def +} + +func intEnv(key string, def int) int { + if v, ok := os.LookupEnv(key); ok && v != "" { + if n, err := strconv.Atoi(v); err == nil { + return n + } + } + return def +} + +func splitCSV(v string) []string { + if v == "" { + return nil + } + parts := strings.Split(v, ",") + out := make([]string, 0, len(parts)) + for _, p := range parts { + if p = strings.TrimSpace(p); p != "" { + out = append(out, p) + } + } + return out +} diff --git a/internal/model/model.go b/internal/model/model.go new file mode 100644 index 0000000..94a709d --- /dev/null +++ b/internal/model/model.go @@ -0,0 +1,70 @@ +// Package model 定义采集模块的领域模型与指标命名规范。 +package model + +import "time" + +// 指标组名称,用于标签 metric_group 与采集调度分组。 +const ( + GroupCore = "core" // 15s + GroupDisk = "disk" // 30s + GroupNetwork = "network" // 30s + GroupProcess = "process" // 60s +) + +// 指标命名规范:.。 +const ( + MetricCPUUsage = "cpu.usage" + MetricMemUsedPercent = "mem.used_percent" + MetricLoad1m = "load.1m" + + MetricDiskUsedPercent = "disk.used_percent" + MetricDiskIOReadBytes = "disk.io.read_bytes" + MetricDiskIOWriteBytes = "disk.io.write_bytes" + + MetricNetBytesSent = "net.bytes_sent" + MetricNetBytesRecv = "net.bytes_recv" + MetricNetPktDrop = "net.pkt_drop" + + MetricProcessCPU = "process.cpu" + MetricProcessMem = "process.mem" + MetricProcessCount = "process.count" +) + +// 标签键。 +const ( + LabelHostID = "host_id" + LabelService = "service" + LabelMetricGroup = "metric_group" +) + +// Sample 是采集模块内部的指标样本表示,与 protobuf MetricSample 保持一一对应。 +type Sample struct { + Name string + Value float64 + Timestamp int64 + Labels map[string]string +} + +// NewSample 构造一个携带基础标签的样本。 +func NewSample(name string, value float64, at time.Time, labels map[string]string) Sample { + if labels == nil { + labels = map[string]string{} + } + return Sample{ + Name: name, + Value: value, + Timestamp: at.Unix(), + Labels: labels, + } +} + +// LogRecord 是采集模块内部的日志记录表示。 +type LogRecord struct { + Timestamp int64 + Level string + Source string + Message string + Fields map[string]string + File string + Offset int64 +} diff --git a/pkg/collectorpb/collector.pb.go b/pkg/collectorpb/collector.pb.go new file mode 100644 index 0000000..3cd9887 --- /dev/null +++ b/pkg/collectorpb/collector.pb.go @@ -0,0 +1,826 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc v4.25.3 +// source: api/collector.proto + +package collectorpb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MetricSample 表示单条指标样本,labels 统一携带 host_id / service / metric_group。 +type MetricSample struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"` + Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Unix 秒 + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MetricSample) Reset() { + *x = MetricSample{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricSample) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricSample) ProtoMessage() {} + +func (x *MetricSample) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_proto_msgTypes[0] + 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 MetricSample.ProtoReflect.Descriptor instead. +func (*MetricSample) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{0} +} + +func (x *MetricSample) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MetricSample) GetValue() float64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *MetricSample) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *MetricSample) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// MetricBatch 是 Agent 一次批量上报的指标消息。 +type MetricBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + AgentVersion string `protobuf:"bytes,2,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` + Seq int64 `protobuf:"varint,3,opt,name=seq,proto3" json:"seq,omitempty"` + SentAt int64 `protobuf:"varint,4,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"` // Unix 秒 + Samples []*MetricSample `protobuf:"bytes,5,rep,name=samples,proto3" json:"samples,omitempty"` +} + +func (x *MetricBatch) Reset() { + *x = MetricBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricBatch) ProtoMessage() {} + +func (x *MetricBatch) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_proto_msgTypes[1] + 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 MetricBatch.ProtoReflect.Descriptor instead. +func (*MetricBatch) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{1} +} + +func (x *MetricBatch) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *MetricBatch) GetAgentVersion() string { + if x != nil { + return x.AgentVersion + } + return "" +} + +func (x *MetricBatch) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *MetricBatch) GetSentAt() int64 { + if x != nil { + return x.SentAt + } + return 0 +} + +func (x *MetricBatch) GetSamples() []*MetricSample { + if x != nil { + return x.Samples + } + return nil +} + +// LogEntry 表示单条主机日志,offset 用于日志文件断点续传。 +type LogEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Unix 秒 + Level string `protobuf:"bytes,2,opt,name=level,proto3" json:"level,omitempty"` + Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` + Fields map[string]string `protobuf:"bytes,5,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + File string `protobuf:"bytes,6,opt,name=file,proto3" json:"file,omitempty"` + Offset int64 `protobuf:"varint,7,opt,name=offset,proto3" json:"offset,omitempty"` +} + +func (x *LogEntry) Reset() { + *x = LogEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogEntry) ProtoMessage() {} + +func (x *LogEntry) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_proto_msgTypes[2] + 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 LogEntry.ProtoReflect.Descriptor instead. +func (*LogEntry) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{2} +} + +func (x *LogEntry) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *LogEntry) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + +func (x *LogEntry) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *LogEntry) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *LogEntry) GetFields() map[string]string { + if x != nil { + return x.Fields + } + return nil +} + +func (x *LogEntry) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *LogEntry) GetOffset() int64 { + if x != nil { + return x.Offset + } + return 0 +} + +// LogBatch 是 Agent 一次批量上报的日志消息。 +type LogBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + Seq int64 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq,omitempty"` + Entries []*LogEntry `protobuf:"bytes,3,rep,name=entries,proto3" json:"entries,omitempty"` +} + +func (x *LogBatch) Reset() { + *x = LogBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogBatch) ProtoMessage() {} + +func (x *LogBatch) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_proto_msgTypes[3] + 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 LogBatch.ProtoReflect.Descriptor instead. +func (*LogBatch) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{3} +} + +func (x *LogBatch) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *LogBatch) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *LogBatch) GetEntries() []*LogEntry { + if x != nil { + return x.Entries + } + return nil +} + +// Ack 是上报接口的统一确认响应。 +type Ack struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + Seq int64 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq,omitempty"` + Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *Ack) Reset() { + *x = Ack{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Ack) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Ack) ProtoMessage() {} + +func (x *Ack) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_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 Ack.ProtoReflect.Descriptor instead. +func (*Ack) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{4} +} + +func (x *Ack) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +func (x *Ack) GetSeq() int64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *Ack) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +// HeartbeatRequest 是 Agent 心跳/注册/配置下发请求。 +type HeartbeatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + AgentVersion string `protobuf:"bytes,2,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` + ConfigVersion int64 `protobuf:"varint,3,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` +} + +func (x *HeartbeatRequest) Reset() { + *x = HeartbeatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeartbeatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeartbeatRequest) ProtoMessage() {} + +func (x *HeartbeatRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_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 HeartbeatRequest.ProtoReflect.Descriptor instead. +func (*HeartbeatRequest) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{5} +} + +func (x *HeartbeatRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *HeartbeatRequest) GetAgentVersion() string { + if x != nil { + return x.AgentVersion + } + return "" +} + +func (x *HeartbeatRequest) GetConfigVersion() int64 { + if x != nil { + return x.ConfigVersion + } + return 0 +} + +// HeartbeatResponse 是心跳响应。 +type HeartbeatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + ServerTime int64 `protobuf:"varint,2,opt,name=server_time,json=serverTime,proto3" json:"server_time,omitempty"` // Unix 秒 + Config map[string]string `protobuf:"bytes,3,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *HeartbeatResponse) Reset() { + *x = HeartbeatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeartbeatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeartbeatResponse) ProtoMessage() {} + +func (x *HeartbeatResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_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 HeartbeatResponse.ProtoReflect.Descriptor instead. +func (*HeartbeatResponse) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{6} +} + +func (x *HeartbeatResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +func (x *HeartbeatResponse) GetServerTime() int64 { + if x != nil { + return x.ServerTime + } + return 0 +} + +func (x *HeartbeatResponse) GetConfig() map[string]string { + if x != nil { + return x.Config + } + return nil +} + +// CheckpointResponse 返回服务端已确认的序号。 +type CheckpointResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LastAckedSeq int64 `protobuf:"varint,1,opt,name=last_acked_seq,json=lastAckedSeq,proto3" json:"last_acked_seq,omitempty"` +} + +func (x *CheckpointResponse) Reset() { + *x = CheckpointResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_collector_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckpointResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckpointResponse) ProtoMessage() {} + +func (x *CheckpointResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_collector_proto_msgTypes[7] + 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 CheckpointResponse.ProtoReflect.Descriptor instead. +func (*CheckpointResponse) Descriptor() ([]byte, []int) { + return file_api_collector_proto_rawDescGZIP(), []int{7} +} + +func (x *CheckpointResponse) GetLastAckedSeq() int64 { + if x != nil { + return x.LastAckedSeq + } + return 0 +} + +var File_api_collector_proto protoreflect.FileDescriptor + +var file_api_collector_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x68, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x22, 0xd5, 0x01, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x68, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 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, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xb0, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x6d, 0x73, 0x2e, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x07, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x22, 0x97, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 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, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x08, + 0x4c, 0x6f, 0x67, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x73, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x6d, 0x73, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x3d, 0x0a, 0x03, 0x41, 0x63, 0x6b, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, + 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, + 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x77, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, + 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, + 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0xc8, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x6d, 0x73, 0x2e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, + 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, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x12, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x65, 0x64, + 0x5f, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, + 0x41, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x65, 0x71, 0x42, 0x52, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6e, + 0x2f, 0x79, 0x75, 0x6d, 0x6f, 0x71, 0x69, 0x6e, 0x67, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x2d, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x70, 0x62, + 0x3b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_collector_proto_rawDescOnce sync.Once + file_api_collector_proto_rawDescData = file_api_collector_proto_rawDesc +) + +func file_api_collector_proto_rawDescGZIP() []byte { + file_api_collector_proto_rawDescOnce.Do(func() { + file_api_collector_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_collector_proto_rawDescData) + }) + return file_api_collector_proto_rawDescData +} + +var file_api_collector_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_api_collector_proto_goTypes = []any{ + (*MetricSample)(nil), // 0: hms.collector.v1.MetricSample + (*MetricBatch)(nil), // 1: hms.collector.v1.MetricBatch + (*LogEntry)(nil), // 2: hms.collector.v1.LogEntry + (*LogBatch)(nil), // 3: hms.collector.v1.LogBatch + (*Ack)(nil), // 4: hms.collector.v1.Ack + (*HeartbeatRequest)(nil), // 5: hms.collector.v1.HeartbeatRequest + (*HeartbeatResponse)(nil), // 6: hms.collector.v1.HeartbeatResponse + (*CheckpointResponse)(nil), // 7: hms.collector.v1.CheckpointResponse + nil, // 8: hms.collector.v1.MetricSample.LabelsEntry + nil, // 9: hms.collector.v1.LogEntry.FieldsEntry + nil, // 10: hms.collector.v1.HeartbeatResponse.ConfigEntry +} +var file_api_collector_proto_depIdxs = []int32{ + 8, // 0: hms.collector.v1.MetricSample.labels:type_name -> hms.collector.v1.MetricSample.LabelsEntry + 0, // 1: hms.collector.v1.MetricBatch.samples:type_name -> hms.collector.v1.MetricSample + 9, // 2: hms.collector.v1.LogEntry.fields:type_name -> hms.collector.v1.LogEntry.FieldsEntry + 2, // 3: hms.collector.v1.LogBatch.entries:type_name -> hms.collector.v1.LogEntry + 10, // 4: hms.collector.v1.HeartbeatResponse.config:type_name -> hms.collector.v1.HeartbeatResponse.ConfigEntry + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_api_collector_proto_init() } +func file_api_collector_proto_init() { + if File_api_collector_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_collector_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*MetricSample); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*MetricBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*LogEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*LogBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*Ack); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*HeartbeatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*HeartbeatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_collector_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*CheckpointResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_collector_proto_rawDesc, + NumEnums: 0, + NumMessages: 11, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_collector_proto_goTypes, + DependencyIndexes: file_api_collector_proto_depIdxs, + MessageInfos: file_api_collector_proto_msgTypes, + }.Build() + File_api_collector_proto = out.File + file_api_collector_proto_rawDesc = nil + file_api_collector_proto_goTypes = nil + file_api_collector_proto_depIdxs = nil +}