@@ -171,49 +171,87 @@ func (ns *NotificationServerBundle) replaceParamsInString(str string, message st
171171 if ns .Server != nil {
172172 str = strings .ReplaceAll (str , "#SERVER.NAME#" , mod (ns .Server .Name ))
173173 str = strings .ReplaceAll (str , "#SERVER.ID#" , mod (fmt .Sprintf ("%d" , ns .Server .ID )))
174- str = strings .ReplaceAll (str , "#SERVER.CPU#" , mod (fmt .Sprintf ("%f" , ns .Server .State .CPU )))
175- str = strings .ReplaceAll (str , "#SERVER.MEM#" , mod (fmt .Sprintf ("%d" , ns .Server .State .MemUsed )))
176- str = strings .ReplaceAll (str , "#SERVER.SWAP#" , mod (fmt .Sprintf ("%d" , ns .Server .State .SwapUsed )))
177- str = strings .ReplaceAll (str , "#SERVER.DISK#" , mod (fmt .Sprintf ("%d" , ns .Server .State .DiskUsed )))
178- str = strings .ReplaceAll (str , "#SERVER.MEMUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .MemUsed )))
179- str = strings .ReplaceAll (str , "#SERVER.SWAPUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .SwapUsed )))
180- str = strings .ReplaceAll (str , "#SERVER.DISKUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .DiskUsed )))
181- str = strings .ReplaceAll (str , "#SERVER.MEMTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .MemTotal )))
182- str = strings .ReplaceAll (str , "#SERVER.SWAPTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .SwapTotal )))
183- str = strings .ReplaceAll (str , "#SERVER.DISKTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .DiskTotal )))
184- str = strings .ReplaceAll (str , "#SERVER.NETINSPEED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInSpeed )))
185- str = strings .ReplaceAll (str , "#SERVER.NETOUTSPEED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutSpeed )))
186- str = strings .ReplaceAll (str , "#SERVER.TRANSFERIN#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInTransfer )))
187- str = strings .ReplaceAll (str , "#SERVER.TRANSFEROUT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutTransfer )))
188- str = strings .ReplaceAll (str , "#SERVER.NETINTRANSFER#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInTransfer )))
189- str = strings .ReplaceAll (str , "#SERVER.NETOUTTRANSFER#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutTransfer )))
190- str = strings .ReplaceAll (str , "#SERVER.LOAD1#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load1 )))
191- str = strings .ReplaceAll (str , "#SERVER.LOAD5#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load5 )))
192- str = strings .ReplaceAll (str , "#SERVER.LOAD15#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load15 )))
193- str = strings .ReplaceAll (str , "#SERVER.TCPCONNCOUNT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .TcpConnCount )))
194- str = strings .ReplaceAll (str , "#SERVER.UDPCONNCOUNT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .UdpConnCount )))
195-
196- var ipv4 , ipv6 , validIP string
197- ipList := strings .Split (ns .Server .Host .IP , "/" )
198- if len (ipList ) > 1 {
199- // 双栈
200- ipv4 = ipList [0 ]
201- ipv6 = ipList [1 ]
202- validIP = ipv4
203- } else if len (ipList ) == 1 {
204- // 仅ipv4|ipv6
205- if strings .Contains (ipList [0 ], ":" ) {
206- ipv6 = ipList [0 ]
207- validIP = ipv6
208- } else {
209- ipv4 = ipList [0 ]
210- validIP = ipv4
211- }
174+
175+ // 安全地访问 State 字段
176+ if ns .Server .State != nil {
177+ str = strings .ReplaceAll (str , "#SERVER.CPU#" , mod (fmt .Sprintf ("%f" , ns .Server .State .CPU )))
178+ str = strings .ReplaceAll (str , "#SERVER.MEM#" , mod (fmt .Sprintf ("%d" , ns .Server .State .MemUsed )))
179+ str = strings .ReplaceAll (str , "#SERVER.SWAP#" , mod (fmt .Sprintf ("%d" , ns .Server .State .SwapUsed )))
180+ str = strings .ReplaceAll (str , "#SERVER.DISK#" , mod (fmt .Sprintf ("%d" , ns .Server .State .DiskUsed )))
181+ str = strings .ReplaceAll (str , "#SERVER.MEMUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .MemUsed )))
182+ str = strings .ReplaceAll (str , "#SERVER.SWAPUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .SwapUsed )))
183+ str = strings .ReplaceAll (str , "#SERVER.DISKUSED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .DiskUsed )))
184+ str = strings .ReplaceAll (str , "#SERVER.NETINSPEED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInSpeed )))
185+ str = strings .ReplaceAll (str , "#SERVER.NETOUTSPEED#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutSpeed )))
186+ str = strings .ReplaceAll (str , "#SERVER.TRANSFERIN#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInTransfer )))
187+ str = strings .ReplaceAll (str , "#SERVER.TRANSFEROUT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutTransfer )))
188+ str = strings .ReplaceAll (str , "#SERVER.NETINTRANSFER#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetInTransfer )))
189+ str = strings .ReplaceAll (str , "#SERVER.NETOUTTRANSFER#" , mod (fmt .Sprintf ("%d" , ns .Server .State .NetOutTransfer )))
190+ str = strings .ReplaceAll (str , "#SERVER.LOAD1#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load1 )))
191+ str = strings .ReplaceAll (str , "#SERVER.LOAD5#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load5 )))
192+ str = strings .ReplaceAll (str , "#SERVER.LOAD15#" , mod (fmt .Sprintf ("%f" , ns .Server .State .Load15 )))
193+ str = strings .ReplaceAll (str , "#SERVER.TCPCONNCOUNT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .TcpConnCount )))
194+ str = strings .ReplaceAll (str , "#SERVER.UDPCONNCOUNT#" , mod (fmt .Sprintf ("%d" , ns .Server .State .UdpConnCount )))
195+ } else {
196+ // 为 nil 状态提供默认值
197+ str = strings .ReplaceAll (str , "#SERVER.CPU#" , mod ("0" ))
198+ str = strings .ReplaceAll (str , "#SERVER.MEM#" , mod ("0" ))
199+ str = strings .ReplaceAll (str , "#SERVER.SWAP#" , mod ("0" ))
200+ str = strings .ReplaceAll (str , "#SERVER.DISK#" , mod ("0" ))
201+ str = strings .ReplaceAll (str , "#SERVER.MEMUSED#" , mod ("0" ))
202+ str = strings .ReplaceAll (str , "#SERVER.SWAPUSED#" , mod ("0" ))
203+ str = strings .ReplaceAll (str , "#SERVER.DISKUSED#" , mod ("0" ))
204+ str = strings .ReplaceAll (str , "#SERVER.NETINSPEED#" , mod ("0" ))
205+ str = strings .ReplaceAll (str , "#SERVER.NETOUTSPEED#" , mod ("0" ))
206+ str = strings .ReplaceAll (str , "#SERVER.TRANSFERIN#" , mod ("0" ))
207+ str = strings .ReplaceAll (str , "#SERVER.TRANSFEROUT#" , mod ("0" ))
208+ str = strings .ReplaceAll (str , "#SERVER.NETINTRANSFER#" , mod ("0" ))
209+ str = strings .ReplaceAll (str , "#SERVER.NETOUTTRANSFER#" , mod ("0" ))
210+ str = strings .ReplaceAll (str , "#SERVER.LOAD1#" , mod ("0" ))
211+ str = strings .ReplaceAll (str , "#SERVER.LOAD5#" , mod ("0" ))
212+ str = strings .ReplaceAll (str , "#SERVER.LOAD15#" , mod ("0" ))
213+ str = strings .ReplaceAll (str , "#SERVER.TCPCONNCOUNT#" , mod ("0" ))
214+ str = strings .ReplaceAll (str , "#SERVER.UDPCONNCOUNT#" , mod ("0" ))
212215 }
213216
214- str = strings .ReplaceAll (str , "#SERVER.IP#" , mod (validIP ))
215- str = strings .ReplaceAll (str , "#SERVER.IPV4#" , mod (ipv4 ))
216- str = strings .ReplaceAll (str , "#SERVER.IPV6#" , mod (ipv6 ))
217+ // 安全地访问 Host 字段
218+ if ns .Server .Host != nil {
219+ str = strings .ReplaceAll (str , "#SERVER.MEMTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .MemTotal )))
220+ str = strings .ReplaceAll (str , "#SERVER.SWAPTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .SwapTotal )))
221+ str = strings .ReplaceAll (str , "#SERVER.DISKTOTAL#" , mod (fmt .Sprintf ("%d" , ns .Server .Host .DiskTotal )))
222+
223+ var ipv4 , ipv6 , validIP string
224+ if ns .Server .Host .IP != "" {
225+ ipList := strings .Split (ns .Server .Host .IP , "/" )
226+ if len (ipList ) > 1 {
227+ // 双栈
228+ ipv4 = ipList [0 ]
229+ ipv6 = ipList [1 ]
230+ validIP = ipv4
231+ } else if len (ipList ) == 1 {
232+ // 仅ipv4|ipv6
233+ if strings .Contains (ipList [0 ], ":" ) {
234+ ipv6 = ipList [0 ]
235+ validIP = ipv6
236+ } else {
237+ ipv4 = ipList [0 ]
238+ validIP = ipv4
239+ }
240+ }
241+ }
242+
243+ str = strings .ReplaceAll (str , "#SERVER.IP#" , mod (validIP ))
244+ str = strings .ReplaceAll (str , "#SERVER.IPV4#" , mod (ipv4 ))
245+ str = strings .ReplaceAll (str , "#SERVER.IPV6#" , mod (ipv6 ))
246+ } else {
247+ // 为 nil Host 提供默认值
248+ str = strings .ReplaceAll (str , "#SERVER.MEMTOTAL#" , mod ("0" ))
249+ str = strings .ReplaceAll (str , "#SERVER.SWAPTOTAL#" , mod ("0" ))
250+ str = strings .ReplaceAll (str , "#SERVER.DISKTOTAL#" , mod ("0" ))
251+ str = strings .ReplaceAll (str , "#SERVER.IP#" , mod ("" ))
252+ str = strings .ReplaceAll (str , "#SERVER.IPV4#" , mod ("" ))
253+ str = strings .ReplaceAll (str , "#SERVER.IPV6#" , mod ("" ))
254+ }
217255 }
218256
219257 return str
0 commit comments