develop: 开发 host-metrics-collector 采集模块

This commit is contained in:
Pipeline Agent 2026-08-15 01:20:11 +08:00
parent 1eb206a57e
commit 3c071afa50
6 changed files with 1128 additions and 0 deletions

66
api/collector.proto Normal file
View File

@ -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<string, string> 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<string, string> 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<string, string> config = 3;
}
// CheckpointResponse 返回服务端已确认的序号。
message CheckpointResponse {
int64 last_acked_seq = 1;
}

9
go.mod Normal file
View File

@ -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
)

View File

@ -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)
}
}

117
internal/config/config.go Normal file
View File

@ -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
}

70
internal/model/model.go Normal file
View File

@ -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
)
// 指标命名规范:<domain>.<metric>。
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
}

View File

@ -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
}