package types

type Ping struct {
	CRC string `json:"crc"`
}

type Node struct {
	Host      string           `json:"Host"`
	IPAddress []string         `json:"IpAddress"`
	Timestamp int64            `json:"Timestamp"`
	Runtime   *HardwareCollect `json:"Runtime"`
}

// Hardware Collect .
type HardwareCollect struct {
	CPUUsedPercent    float64 `json:"CPUUsedPercent"`
	DiskFree          uint64  `json:"DiskFree"`
	DiskTotal         uint64  `json:"DiskTotal"`
	DiskUsedPercent   float64 `json:"DiskUsedPercent"`
	MemoryFree        uint64  `json:"MemoryFree"`
	MemoryTotal       uint64  `json:"MemoryTotal"`
	MemoryUsedPercent float64 `json:"MemoryUsedPercent"`
	NetIOBytesRecv    uint64  `json:"NetIOBytesRecv"`
	NetIOBytesSent    uint64  `json:"NetIOBytesSent"`
}

// Service Runtime .
type ServiceCollect struct {
	ServiceKey       string
	MemAlloc         uint64 `json:"MemAlloc"`
	MemTotalAlloc    uint64 `json:"MemTotalAlloc"`
	MemSys           uint64 `json:"MemSys"`
	MemHeapAlloc     uint64 `json:"MemHeapAlloc"`
	CpuNumber        int    `json:"CpuNumber"`
	CpuMaxProcs      int    `json:"CpuMaxProcs"`
	GoroutinesNumber int    `json:"GoroutinesNumber"`
	CgoCallNumber    int64  `json:"CgoCallNumber"`
	Timestamp        int64  `json:"Timestamp"`
}

type LoggerMsg struct {
	Identity   string `json:"identity,omitempty"`
	Host       string `json:"host,omitempty"`
	ServiceKey string `json:"service_key,omitempty"`
	Type       string `json:"type,omitempty"`
	Level      string `json:"level,omitempty"`
	Method     string `json:"method,omitempty"`
	Data       string `json:"data,omitempty"`
	Trace      string `json:"trace,omitempty"`
	Timestamp  int64  `json:"Timestamp"`
}

type RequestMsg struct {
	RequestId   string `json:"request_id,omitempty"`
	Protocol    string `json:"protocol,omitempty"`
	Uri         string `json:"uri,omitempty"`
	Method      string `json:"method,omitempty"`
	Target      string `json:"target,omitempty"`
	StartTime   int64  `json:"start_time,omitempty"`
	Duration    int64  `json:"duration,omitempty"`
	EndTime     int64  `json:"end_time,omitempty"`
	Status      int32  `json:"status,omitempty"`
	Reply       string `json:"reply,omitempty"`
	UserAgent   string `json:"user_agent,omitempty"`
	RemoteAddr  string `json:"remote_addr,omitempty"`
	RequestBody string `json:"request_body,omitempty"`
	Timestamp   int64  `json:"Timestamp"`
}

type ServiceMethods struct {
	FileName   string
	ServiceKey string
	Methods    []string
}

type SidecarReply struct {
	Status  int32  `json:"status,omitempty"`
	Message string `json:"message,omitempty"`
}