fix: upf5002消息接收延迟兼容处理
This commit is contained in:
@@ -27,9 +27,8 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
|||||||
proto := "tcp"
|
proto := "tcp"
|
||||||
if strings.Contains(c.Addr, ":") {
|
if strings.Contains(c.Addr, ":") {
|
||||||
proto = "tcp6"
|
proto = "tcp6"
|
||||||
c.Addr = fmt.Sprintf("[%s]", c.Addr)
|
|
||||||
}
|
}
|
||||||
addr := fmt.Sprintf("%s:%d", c.Addr, c.Port)
|
addr := net.JoinHostPort(c.Addr, fmt.Sprint(c.Port))
|
||||||
|
|
||||||
// 默认等待5s
|
// 默认等待5s
|
||||||
if c.DialTimeOut == 0 {
|
if c.DialTimeOut == 0 {
|
||||||
@@ -76,6 +75,7 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) {
|
|||||||
if _, err := conn.Write([]byte(cmd)); err != nil {
|
if _, err := conn.Write([]byte(cmd)); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/ssh"
|
||||||
neService "be.ems/src/modules/network_element/service"
|
neService "be.ems/src/modules/network_element/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ func (s *TCPdump) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询网元获取IP
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.FindByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return "", fmt.Errorf("app.common.noNEInfo")
|
return "", fmt.Errorf("app.common.noNEInfo")
|
||||||
}
|
}
|
||||||
@@ -54,9 +54,9 @@ func (s *TCPdump) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
taskCode := time.Now().Format("20060102150405")
|
taskCode := time.Now().Format("20060102150405")
|
||||||
// 存放文件目录 /tmp/omc/tcpdump/udm/001/20240817104241
|
// 存放文件目录 /usr/local/omc/tcpdump/udm/001/20240817104241
|
||||||
neDirTemp := fmt.Sprintf("/tmp/omc/tcpdump/%s/%s/%s", strings.ToLower(neInfo.NeType), neInfo.NeId, taskCode)
|
neDirTemp := fmt.Sprintf("/usr/local/omc/tcpdump/%s/%s/%s", strings.ToLower(neInfo.NeType), neInfo.NeId, taskCode)
|
||||||
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo chmod 777 -R /tmp/omc", neDirTemp))
|
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod 755 -R /usr/local/omc/tcpdump", neDirTemp))
|
||||||
|
|
||||||
// 命令拼装
|
// 命令拼装
|
||||||
logPath := fmt.Sprintf("%s/tcpdump.log", neDirTemp)
|
logPath := fmt.Sprintf("%s/tcpdump.log", neDirTemp)
|
||||||
@@ -65,8 +65,8 @@ func (s *TCPdump) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
filePath = fmt.Sprintf("%s/part_%%Y%%m%%d%%H%%M%%S.pcap ", neDirTemp)
|
filePath = fmt.Sprintf("%s/part_%%Y%%m%%d%%H%%M%%S.pcap ", neDirTemp)
|
||||||
}
|
}
|
||||||
sendCmd := fmt.Sprintf("sudo timeout 60m sudo tcpdump -i any %s -w %s > %s 2>&1 & echo $!", cmdStr, filePath, logPath)
|
sendCmd := fmt.Sprintf("sudo timeout 60m sudo tcpdump -i any %s -w %s > %s 2>&1 & echo $!", cmdStr, filePath, logPath)
|
||||||
// sudo timeout 60m sudo tcpdump -i any -n -s 0 -v -G 60 -W 6 -w /tmp/omc/tcpdump/udm/001/20240817104241/part_%Y-%m-%d_%H:%M:%S.pcap > /tmp/omc/tcpdump/udm/001/20240817104241/tcpdump.log 2>&1 & echo $!
|
// sudo timeout 60m sudo tcpdump -i any -n -s 0 -v -G 60 -W 6 -w /usr/local/omc/tcpdump/udm/001/20240817104241/part_%Y-%m-%d_%H:%M:%S.pcap > /usr/local/omc/tcpdump/udm/001/20240817104241/tcpdump.log 2>&1 & echo $!
|
||||||
// sudo timeout 60m sudo tcpdump -i any -n -s 0 -v -w /tmp/omc/tcpdump/udm/001/20240817105440/part_2024-08-17_10:54:40.pcap > /tmp/omc/tcpdump/udm/001/20240817105440/tcpdump.log 2>&1 & echo $!
|
// sudo timeout 60m sudo tcpdump -i any -n -s 0 -v -w /usr/local/omc/tcpdump/udm/001/20240817105440/part_2024-08-17_10:54:40.pcap > /usr/local/omc/tcpdump/udm/001/20240817105440/tcpdump.log 2>&1 & echo $!
|
||||||
//
|
//
|
||||||
// timeout 超时60分钟后发送kill命令,1分钟后强制终止命令。tcpdump -G 文件轮转间隔时间(秒) -W 文件轮转保留最近数量
|
// timeout 超时60分钟后发送kill命令,1分钟后强制终止命令。tcpdump -G 文件轮转间隔时间(秒) -W 文件轮转保留最近数量
|
||||||
// sudo timeout --kill-after=1m 60m sudo tcpdump -i any -n -s 0 -v -G 10 -W 7 -w /tmp/part_%Y%m%d%H%M%S.pcap > /tmp/part.log 2>&1 & echo $!
|
// sudo timeout --kill-after=1m 60m sudo tcpdump -i any -n -s 0 -v -G 10 -W 7 -w /tmp/part_%Y%m%d%H%M%S.pcap > /tmp/part.log 2>&1 & echo $!
|
||||||
@@ -96,7 +96,7 @@ func (s *TCPdump) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
// DumpStop 停止已存在抓包句柄
|
// DumpStop 停止已存在抓包句柄
|
||||||
func (s *TCPdump) DumpStop(neType, neId, taskCode string) ([]string, error) {
|
func (s *TCPdump) DumpStop(neType, neId, taskCode string) ([]string, error) {
|
||||||
// 查询网元获取IP
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.FindByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return []string{}, fmt.Errorf("app.common.noNEInfo")
|
return []string{}, fmt.Errorf("app.common.noNEInfo")
|
||||||
}
|
}
|
||||||
@@ -119,11 +119,11 @@ func (s *TCPdump) DumpStop(neType, neId, taskCode string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
s.logFileLastLineToFile(PIDMap.(map[string]string), sshClient)
|
s.logFileLastLineToFile(PIDMap.(map[string]string), sshClient)
|
||||||
|
|
||||||
// 存放文件目录 /tmp/omc/tcpdump/udm/001/20240817104241
|
// 存放文件目录 /usr/local/omc/tcpdump/udm/001/20240817104241
|
||||||
neDirTemp := fmt.Sprintf("/tmp/omc/tcpdump/%s/%s/%s", strings.ToLower(neInfo.NeType), neInfo.NeId, taskCode)
|
neDirTemp := fmt.Sprintf("/usr/local/omc/tcpdump/%s/%s/%s", strings.ToLower(neInfo.NeType), neInfo.NeId, taskCode)
|
||||||
// 命令拼装
|
// 命令拼装
|
||||||
sendCmd := fmt.Sprintf("pids=$(pgrep -P %s) && [ -n \"$pids\" ] && sudo kill $pids;sudo timeout 2s ls %s", pid, neDirTemp)
|
sendCmd := fmt.Sprintf("pids=$(pgrep -P %s) && [ -n \"$pids\" ] && sudo kill $pids;sudo timeout 2s ls %s", pid, neDirTemp)
|
||||||
// pids=$(pgrep -P 1914341) && [ -n "$pids" ] && sudo kill $pids;sudo timeout 2s ls /tmp/omc/tcpdump/udm/001/20240817104241
|
// pids=$(pgrep -P 1914341) && [ -n "$pids" ] && sudo kill $pids;sudo timeout 2s ls /usr/local/omc/tcpdump/udm/001/20240817104241
|
||||||
output, err := sshClient.RunCMD(sendCmd)
|
output, err := sshClient.RunCMD(sendCmd)
|
||||||
output = strings.TrimSpace(output)
|
output = strings.TrimSpace(output)
|
||||||
if err != nil || strings.HasPrefix(output, "ls: ") {
|
if err != nil || strings.HasPrefix(output, "ls: ") {
|
||||||
@@ -158,7 +158,7 @@ func (s *TCPdump) logFileLastLine(neType string, sshClient *ssh.ConnSSH) map[str
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range logFileArr {
|
for _, v := range logFileArr {
|
||||||
lastLine, err := sshClient.RunCMD(fmt.Sprintf("sed -n '$=' %s", v))
|
lastLine, err := sshClient.RunCMD(fmt.Sprintf("sudo sed -n '$=' %s", v))
|
||||||
lastLine = strings.TrimSpace(lastLine)
|
lastLine = strings.TrimSpace(lastLine)
|
||||||
if err != nil || strings.HasPrefix(lastLine, "sed: can't") {
|
if err != nil || strings.HasPrefix(lastLine, "sed: can't") {
|
||||||
logger.Errorf("logFileLastLine err: %s => %s", lastLine, err.Error())
|
logger.Errorf("logFileLastLine err: %s => %s", lastLine, err.Error())
|
||||||
@@ -181,9 +181,9 @@ func (s *TCPdump) logFileLastLineToFile(PIDMap map[string]string, sshClient *ssh
|
|||||||
neType := PIDMap["neType"]
|
neType := PIDMap["neType"]
|
||||||
neId := PIDMap["neId"]
|
neId := PIDMap["neId"]
|
||||||
taskCode := PIDMap["taskCode"]
|
taskCode := PIDMap["taskCode"]
|
||||||
// 存放文件目录 /tmp/omc/tcpdump/udm/001/20240817104241
|
// 存放文件目录 /usr/local/omc/tcpdump/udm/001/20240817104241
|
||||||
sshClient.RunCMD("mkdir -p /tmp/omc && sudo chmod 777 -R /tmp/omc")
|
neDirTemp := fmt.Sprintf("/usr/local/omc/tcpdump/%s/%s/%s", strings.ToLower(neType), neId, taskCode)
|
||||||
neDirTemp := fmt.Sprintf("/tmp/omc/tcpdump/%s/%s/%s", strings.ToLower(neType), neId, taskCode)
|
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod 755 -R /usr/local/omc/tcpdump", neDirTemp))
|
||||||
|
|
||||||
lastLineMap := s.logFileLastLine(neType, sshClient)
|
lastLineMap := s.logFileLastLine(neType, sshClient)
|
||||||
for lastLogFile, lastFileLine := range lastLineMap {
|
for lastLogFile, lastFileLine := range lastLineMap {
|
||||||
@@ -193,8 +193,8 @@ func (s *TCPdump) logFileLastLineToFile(PIDMap map[string]string, sshClient *ssh
|
|||||||
startFileLine = "1" // 起始行号从第一行开始
|
startFileLine = "1" // 起始行号从第一行开始
|
||||||
}
|
}
|
||||||
outputFile := fmt.Sprintf("%s/%s", neDirTemp, filepath.Base(lastLogFile))
|
outputFile := fmt.Sprintf("%s/%s", neDirTemp, filepath.Base(lastLogFile))
|
||||||
sendCmd := fmt.Sprintf("sed -n \"%s,%sp\" \"%s\" > \"%s\"", startFileLine, lastFileLine, lastLogFile, outputFile)
|
sendCmd := fmt.Sprintf("sudo sed -n \"%s,%sp\" \"%s\" | sudo tee \"%s\" > /dev/null", startFileLine, lastFileLine, lastLogFile, outputFile)
|
||||||
// sed -n "1,5p" "/var/log/amf.log" > "/tmp/omc/tcpdump/amf/001/20241008141336/amf.log"
|
// sudo sed -n "1,5p" "/var/log/amf.log" | sudo tee "/usr/local/omc/tcpdump/amf/001/20241008141336/amf.log" > /dev/null
|
||||||
output, err := sshClient.RunCMD(sendCmd)
|
output, err := sshClient.RunCMD(sendCmd)
|
||||||
if err != nil || strings.HasPrefix(output, "stderr:") {
|
if err != nil || strings.HasPrefix(output, "stderr:") {
|
||||||
logger.Errorf("logFileLastLineToFile err: %s => %s", strings.TrimSpace(output), err.Error())
|
logger.Errorf("logFileLastLineToFile err: %s => %s", strings.TrimSpace(output), err.Error())
|
||||||
@@ -214,7 +214,7 @@ func (s *TCPdump) UPFTrace(neType, neId, cmdStr string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询网元获取IP
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.FindByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return "", fmt.Errorf("app.common.noNEInfo")
|
return "", fmt.Errorf("app.common.noNEInfo")
|
||||||
}
|
}
|
||||||
@@ -230,6 +230,7 @@ func (s *TCPdump) UPFTrace(neType, neId, cmdStr string) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
defer telnetClient.Close()
|
defer telnetClient.Close()
|
||||||
|
telnetClient.RunCMD("") // 再次排空信息
|
||||||
|
|
||||||
// 命令拼装
|
// 命令拼装
|
||||||
fileName := fmt.Sprintf("%s_%s_part_%s.pcap ", neInfo.NeType, neInfo.NeId, time.Now().Format("20060102150405"))
|
fileName := fmt.Sprintf("%s_%s_part_%s.pcap ", neInfo.NeType, neInfo.NeId, time.Now().Format("20060102150405"))
|
||||||
@@ -250,11 +251,11 @@ func (s *TCPdump) UPFTrace(neType, neId, cmdStr string) (string, error) {
|
|||||||
|
|
||||||
// 结果截取
|
// 结果截取
|
||||||
arr := strings.Split(output, "\r\n")
|
arr := strings.Split(output, "\r\n")
|
||||||
if len(arr) == 2 {
|
if len(arr) < 2 {
|
||||||
return "", fmt.Errorf("trace pacp run failed")
|
return "", fmt.Errorf("trace pacp run failed")
|
||||||
}
|
}
|
||||||
if len(arr) > 3 {
|
if len(arr) == 3 {
|
||||||
resMsg := arr[2]
|
resMsg := arr[1]
|
||||||
// pcap trace: unknown input `f file UPF_001_part_2024-08-19...'
|
// pcap trace: unknown input `f file UPF_001_part_2024-08-19...'
|
||||||
// pcap trace: dispatch trace already enabled...
|
// pcap trace: dispatch trace already enabled...
|
||||||
// pcap trace: dispatch trace already disabled...
|
// pcap trace: dispatch trace already disabled...
|
||||||
|
|||||||
Reference in New Issue
Block a user