Fix URL agent address form with udp in snmp input (#6899)
This commit is contained in:
parent
0693748c35
commit
8d647c4ebf
|
@ -7,6 +7,7 @@ import (
|
|||
"log"
|
||||
"math"
|
||||
"net"
|
||||
"net/url"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -609,20 +610,30 @@ func (s *Snmp) getConnection(idx int) (snmpConnection, error) {
|
|||
gs := gosnmpWrapper{&gosnmp.GoSNMP{}}
|
||||
s.connectionCache[idx] = gs
|
||||
|
||||
if strings.HasPrefix(agent, "tcp://") {
|
||||
agent = strings.TrimPrefix(agent, "tcp://")
|
||||
gs.Transport = "tcp"
|
||||
if !strings.Contains(agent, "://") {
|
||||
agent = "udp://" + agent
|
||||
}
|
||||
host, portStr, err := net.SplitHostPort(agent)
|
||||
|
||||
u, err := url.Parse(agent)
|
||||
if err != nil {
|
||||
if err, ok := err.(*net.AddrError); !ok || err.Err != "missing port in address" {
|
||||
return nil, Errorf(err, "parsing host")
|
||||
}
|
||||
host = agent
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch u.Scheme {
|
||||
case "tcp":
|
||||
gs.Transport = "tcp"
|
||||
case "", "udp":
|
||||
gs.Transport = "udp"
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported scheme: %v", u.Scheme)
|
||||
}
|
||||
|
||||
gs.Target = u.Hostname()
|
||||
|
||||
portStr := u.Port()
|
||||
if portStr == "" {
|
||||
portStr = "161"
|
||||
}
|
||||
gs.Target = host
|
||||
|
||||
port, err := strconv.ParseUint(portStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, Errorf(err, "parsing port")
|
||||
|
|
|
@ -232,7 +232,7 @@ func TestSnmpInit_noTranslate(t *testing.T) {
|
|||
|
||||
func TestGetSNMPConnection_v2(t *testing.T) {
|
||||
s := &Snmp{
|
||||
Agents: []string{"1.2.3.4:567", "1.2.3.4"},
|
||||
Agents: []string{"1.2.3.4:567", "1.2.3.4", "udp://127.0.0.1"},
|
||||
Timeout: internal.Duration{Duration: 3 * time.Second},
|
||||
Retries: 4,
|
||||
Version: 2,
|
||||
|
@ -256,6 +256,13 @@ func TestGetSNMPConnection_v2(t *testing.T) {
|
|||
assert.Equal(t, "1.2.3.4", gs.Target)
|
||||
assert.EqualValues(t, 161, gs.Port)
|
||||
assert.Equal(t, "udp", gs.Transport)
|
||||
|
||||
gsc, err = s.getConnection(2)
|
||||
require.NoError(t, err)
|
||||
gs = gsc.(gosnmpWrapper)
|
||||
assert.Equal(t, "127.0.0.1", gs.Target)
|
||||
assert.EqualValues(t, 161, gs.Port)
|
||||
assert.Equal(t, "udp", gs.Transport)
|
||||
}
|
||||
|
||||
func TestGetSNMPConnectionTCP(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue