@@ -15,6 +15,11 @@ import (
1515var once sync.Once
1616var ac = conf .GetInstance ()
1717
18+ var udpObjHash int32
19+ var serverAddr string
20+ var udpServerPort int
21+ var udpMaxBytes int
22+
1823type UDPSender struct {
1924 udpChannel chan []byte
2025 running bool
@@ -25,17 +30,42 @@ var udpSender *UDPSender
2530
2631func GetInstance () * UDPSender {
2732 once .Do (func () {
33+ serverAddr = ac .NetCollectorIP
34+ udpServerPort = ac .NetCollectorUDPPort
35+ udpMaxBytes = ac .UDPMaxBytes
36+
2837 udpSender = new (UDPSender )
2938 udpSender .udpChannel = channelfactory .GetUDPChannel ()
3039 udpSender .running = true
31- udpSender .udpClient = udpclient .New (ac .NetCollectorIP , ac .NetCollectorUDPPort )
32- udpSender .udpClient .SetUDPMaxBytes (ac .UDPMaxBytes )
33- udpSender .running = true
40+ udpSender .udpClient = udpclient .New (serverAddr , udpServerPort )
41+ udpSender .udpClient .SetUDPMaxBytes (udpMaxBytes )
3442 go udpSender .run ()
43+ go reloadUdpSender ()
3544 })
3645 return udpSender
3746}
3847
48+ func reloadUdpSender () {
49+ for {
50+ time .Sleep (1000 )
51+ if serverAddr != ac .NetCollectorIP || udpServerPort != ac .NetCollectorUDPPort || udpMaxBytes != ac .UDPMaxBytes {
52+ serverAddr = ac .NetCollectorIP
53+ udpServerPort = ac .NetCollectorUDPPort
54+ udpMaxBytes = ac .UDPMaxBytes
55+
56+ udpSender .running = true
57+ prevClient := udpSender .udpClient
58+ udpClient := udpclient .New (serverAddr , udpServerPort )
59+ udpClient .SetUDPMaxBytes (udpMaxBytes )
60+ udpSender .udpClient = udpClient
61+
62+ if prevClient .Conn != nil {
63+ prevClient .Conn .Close ()
64+ }
65+ }
66+ }
67+ }
68+
3969func (udpSender * UDPSender ) AddPack (pack netdata.Pack ) {
4070 writePack , _ := netdata .NewDataOutputX (nil ).WritePack (pack )
4171 bytes := writePack .Bytes ()
@@ -55,6 +85,11 @@ func (udpSender *UDPSender) AddBuffer(buffer []byte) {
5585}
5686
5787func (udpSender * UDPSender ) SendPackDirect (pack netdata.Pack ) {
88+ if ac .TraceObjSend {
89+ if p , ok := pack .(* netdata.ObjectPack ); ok {
90+ logger .Info .Printf ("[scouter] SendPackDirect[ObjPack], to:%s, pack:%s" , udpSender .udpClient .Conn .RemoteAddr (), p .ToString ())
91+ }
92+ }
5893 writePack , _ := netdata .NewDataOutputX (nil ).WritePack (pack )
5994 bytes := writePack .Bytes ()
6095 go udpSender .udpClient .WriteBuffer (bytes )
0 commit comments