parent
5deb22a539
commit
afdebbc3a2
|
@ -26,9 +26,6 @@ type Snmp struct {
|
|||
nameToOid map[string]string
|
||||
initNode Node
|
||||
subTableMap map[string]Subtable
|
||||
|
||||
// TODO change as unexportable
|
||||
//OidInstanceMapping map[string]map[string]string
|
||||
}
|
||||
|
||||
type Host struct {
|
||||
|
@ -53,6 +50,8 @@ type Host struct {
|
|||
// array of processed oids
|
||||
// to skip oid duplication
|
||||
processedOids []string
|
||||
|
||||
OidInstanceMapping map[string]map[string]string
|
||||
}
|
||||
|
||||
type Table struct {
|
||||
|
@ -116,9 +115,6 @@ type Node struct {
|
|||
subnodes map[string]Node
|
||||
}
|
||||
|
||||
// TODO move this var to snmp struct
|
||||
var OidInstanceMapping = make(map[string]map[string]string)
|
||||
|
||||
var sampleConfig = `
|
||||
## Use 'oids.txt' file to translate oids to names
|
||||
## To generate 'oids.txt' you need to run:
|
||||
|
@ -396,7 +392,7 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error {
|
|||
// TODO save mapping and computed oids
|
||||
// to do it only the first time
|
||||
// only if len(s.OidInstanceMapping) == 0
|
||||
if len(OidInstanceMapping) >= 0 {
|
||||
if len(host.OidInstanceMapping) >= 0 {
|
||||
if err := host.SNMPMap(acc, s.nameToOid, s.subTableMap); err != nil {
|
||||
log.Printf("SNMP Mapping error for host '%s': %s", host.Address, err)
|
||||
continue
|
||||
|
@ -413,7 +409,14 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (h *Host) SNMPMap(acc telegraf.Accumulator, nameToOid map[string]string, subTableMap map[string]Subtable) error {
|
||||
func (h *Host) SNMPMap(
|
||||
acc telegraf.Accumulator,
|
||||
nameToOid map[string]string,
|
||||
subTableMap map[string]Subtable,
|
||||
) error {
|
||||
if h.OidInstanceMapping == nil {
|
||||
h.OidInstanceMapping = make(map[string]map[string]string)
|
||||
}
|
||||
// Get snmp client
|
||||
snmpClient, err := h.GetSNMPClient()
|
||||
if err != nil {
|
||||
|
@ -523,11 +526,11 @@ func (h *Host) SNMPMap(acc telegraf.Accumulator, nameToOid map[string]string, su
|
|||
|
||||
// Building mapping table
|
||||
mapping := map[string]string{strings.Trim(key, "."): string(variable.Value.([]byte))}
|
||||
_, exists := OidInstanceMapping[table.oid]
|
||||
_, exists := h.OidInstanceMapping[table.oid]
|
||||
if exists {
|
||||
OidInstanceMapping[table.oid][strings.Trim(key, ".")] = string(variable.Value.([]byte))
|
||||
h.OidInstanceMapping[table.oid][strings.Trim(key, ".")] = string(variable.Value.([]byte))
|
||||
} else {
|
||||
OidInstanceMapping[table.oid] = mapping
|
||||
h.OidInstanceMapping[table.oid] = mapping
|
||||
}
|
||||
|
||||
// Add table oid in bulk oid list
|
||||
|
@ -720,7 +723,12 @@ func (h *Host) GetSNMPClient() (*gosnmp.GoSNMP, error) {
|
|||
return snmpClient, nil
|
||||
}
|
||||
|
||||
func (h *Host) HandleResponse(oids map[string]Data, result *gosnmp.SnmpPacket, acc telegraf.Accumulator, initNode Node) (string, error) {
|
||||
func (h *Host) HandleResponse(
|
||||
oids map[string]Data,
|
||||
result *gosnmp.SnmpPacket,
|
||||
acc telegraf.Accumulator,
|
||||
initNode Node,
|
||||
) (string, error) {
|
||||
var lastOid string
|
||||
for _, variable := range result.Variables {
|
||||
lastOid = variable.Name
|
||||
|
@ -755,7 +763,7 @@ func (h *Host) HandleResponse(oids map[string]Data, result *gosnmp.SnmpPacket, a
|
|||
strings.Split(string(variable.Name[1:]), "."))
|
||||
// Set instance tag
|
||||
// From mapping table
|
||||
mapping, inMappingNoSubTable := OidInstanceMapping[oid_key]
|
||||
mapping, inMappingNoSubTable := h.OidInstanceMapping[oid_key]
|
||||
if inMappingNoSubTable {
|
||||
// filter if the instance in not in
|
||||
// OidInstanceMapping mapping map
|
||||
|
|
Loading…
Reference in New Issue