修复图表时间和查询区间不匹配问题
This commit is contained in:
89
backend/internal/collector/snmp.go
Normal file
89
backend/internal/collector/snmp.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package collector
|
||||
|
||||
import (
|
||||
"github.com/gosnmp/gosnmp"
|
||||
)
|
||||
|
||||
// SNMPCollector SNMP采集器
|
||||
type SNMPCollector struct {
|
||||
client *gosnmp.GoSNMP
|
||||
}
|
||||
|
||||
// NewSNMPCollector 创建新的SNMP采集器
|
||||
func NewSNMPCollector(target, community string, version gosnmp.SnmpVersion) (*SNMPCollector, error) {
|
||||
client := &gosnmp.GoSNMP{
|
||||
Target: target,
|
||||
Community: community,
|
||||
Version: version,
|
||||
Port: 161,
|
||||
}
|
||||
|
||||
// 连接SNMP设备
|
||||
if err := client.Connect(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &SNMPCollector{
|
||||
client: client,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Close 关闭SNMP连接
|
||||
func (c *SNMPCollector) Close() error {
|
||||
return c.client.Conn.Close()
|
||||
}
|
||||
|
||||
// GetCPUUsage 获取CPU使用率
|
||||
func (c *SNMPCollector) GetCPUUsage() (float64, error) {
|
||||
// 这里使用UCD-SNMP-MIB::ssCpuIdle.0 OID来获取CPU空闲率
|
||||
// 实际使用时需要根据设备类型和SNMP MIB进行调整
|
||||
oids := []string{"1.3.6.1.4.1.2021.11.11.0"}
|
||||
|
||||
result, err := c.client.Get(oids)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// CPU使用率 = 100 - 空闲率
|
||||
idle := float64(result.Variables[0].Value.(uint))
|
||||
return 100 - idle, nil
|
||||
}
|
||||
|
||||
// GetMemoryUsage 获取内存使用率
|
||||
func (c *SNMPCollector) GetMemoryUsage() (float64, error) {
|
||||
// 这里使用UCD-SNMP-MIB::memTotalReal.0和memAvailReal.0 OID来获取内存使用情况
|
||||
oids := []string{
|
||||
"1.3.6.1.4.1.2021.4.5.0", // 总内存
|
||||
"1.3.6.1.4.1.2021.4.6.0", // 可用内存
|
||||
}
|
||||
|
||||
result, err := c.client.Get(oids)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
total := float64(result.Variables[0].Value.(uint))
|
||||
available := float64(result.Variables[1].Value.(uint))
|
||||
|
||||
return ((total - available) / total) * 100, nil
|
||||
}
|
||||
|
||||
// GetDiskUsage 获取磁盘使用率
|
||||
func (c *SNMPCollector) GetDiskUsage(partition string) (float64, error) {
|
||||
// 这里使用UCD-SNMP-MIB::dskTotal和dskAvail OID来获取磁盘使用情况
|
||||
// 实际使用时需要根据分区索引进行调整
|
||||
oids := []string{
|
||||
"1.3.6.1.4.1.2021.9.1.6.1", // 总磁盘空间
|
||||
"1.3.6.1.4.1.2021.9.1.7.1", // 可用磁盘空间
|
||||
}
|
||||
|
||||
result, err := c.client.Get(oids)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
total := float64(result.Variables[0].Value.(uint))
|
||||
available := float64(result.Variables[1].Value.(uint))
|
||||
|
||||
return ((total - available) / total) * 100, nil
|
||||
}
|
||||
Reference in New Issue
Block a user