perf: 优化socket消息接收,跟踪任务推送ws
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
@@ -14,6 +16,7 @@ import (
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
"be.ems/src/modules/trace/model"
|
||||
"be.ems/src/modules/trace/repository"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
)
|
||||
|
||||
// 实例化数据层 TraceTask 结构体
|
||||
@@ -57,16 +60,27 @@ func (r *TraceTask) CreateUDP() error {
|
||||
}
|
||||
|
||||
// 接收处理UDP数据
|
||||
go r.udpService.Resolve(2048, func(data []byte, n int) {
|
||||
logger.Infof("socket UDP: %s", string(data))
|
||||
mData, err := UDPDataHandler(data, n)
|
||||
go r.udpService.Resolve(func(conn *net.UDPConn) {
|
||||
// 读取数据
|
||||
buf := make([]byte, 2048)
|
||||
n, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
logger.Errorf("error reading from UDP connection: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
logger.Infof("socket UDP: %s", string(buf[:n]))
|
||||
// logger.Infof("socket UDP Base64: %s", base64.StdEncoding.EncodeToString(buf[:n]))
|
||||
mData, err := UDPDataHandler(buf, n)
|
||||
if err != nil {
|
||||
logger.Errorf("udp resolve data fail: %s", err.Error())
|
||||
return
|
||||
}
|
||||
taskId := parse.Number(mData["taskId"])
|
||||
|
||||
// 插入数据库做记录
|
||||
r.traceDataRepository.Insert(model.TraceData{
|
||||
TaskId: parse.Number(mData["taskId"]),
|
||||
TaskId: taskId,
|
||||
IMSI: mData["imsi"].(string),
|
||||
SrcAddr: mData["srcAddr"].(string),
|
||||
DstAddr: mData["dstAddr"].(string),
|
||||
@@ -82,6 +96,7 @@ func (r *TraceTask) CreateUDP() error {
|
||||
// 推送文件
|
||||
if v, ok := mData["pcapFile"]; ok && v != "" {
|
||||
logger.Infof("pcapFile: %s", v)
|
||||
wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -92,16 +107,29 @@ func (r *TraceTask) CreateUDP() error {
|
||||
return err
|
||||
}
|
||||
// 接收处理TCP数据
|
||||
go tcpService.Resolve(1024, func(data []byte, n int) {
|
||||
logger.Infof("socket TCP: %s", string(data))
|
||||
mData, err := UDPDataHandler(data, n)
|
||||
go tcpService.Resolve(func(conn *net.Conn) {
|
||||
c := (*conn)
|
||||
// 读取数据
|
||||
buf := make([]byte, 2048)
|
||||
n, err := c.Read(buf)
|
||||
if err != nil {
|
||||
logger.Errorf("error reading from TCP connection: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
logger.Infof("socket TCP: %s", string(buf[:n]))
|
||||
deData, _ := base64.StdEncoding.DecodeString(string(buf[:n]))
|
||||
logger.Infof("socket TCP Base64: %s", deData)
|
||||
mData, err := UDPDataHandler(deData, len(deData))
|
||||
if err != nil {
|
||||
logger.Errorf("tcp resolve data fail: %s", err.Error())
|
||||
return
|
||||
}
|
||||
taskId := parse.Number(mData["taskId"])
|
||||
|
||||
// 插入数据库做记录
|
||||
r.traceDataRepository.Insert(model.TraceData{
|
||||
TaskId: parse.Number(mData["taskId"]),
|
||||
TaskId: taskId,
|
||||
IMSI: mData["imsi"].(string),
|
||||
SrcAddr: mData["srcAddr"].(string),
|
||||
DstAddr: mData["dstAddr"].(string),
|
||||
@@ -117,6 +145,7 @@ func (r *TraceTask) CreateUDP() error {
|
||||
// 推送文件
|
||||
if v, ok := mData["pcapFile"]; ok && v != "" {
|
||||
logger.Infof("pcapFile: %s", v)
|
||||
wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%d", wsService.GROUP_TRACE, taskId), taskId)
|
||||
}
|
||||
})
|
||||
return nil
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -264,6 +265,9 @@ const versionMinor = 4
|
||||
func writeEmptyPcap(filename string, timeStamp int64, length int, data []byte) error {
|
||||
var err error
|
||||
var file *os.File
|
||||
if err := os.MkdirAll(filepath.Dir(filename), 0775); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err = os.Stat(filename); os.IsNotExist(err) {
|
||||
file, err = os.Create(filename)
|
||||
// File Header
|
||||
@@ -318,7 +322,7 @@ func writeEmptyPcap(filename string, timeStamp int64, length int, data []byte) e
|
||||
|
||||
// writePcap 写Pcap文件并返回文件路径
|
||||
func writePcap(extHdr ExtHeader) string {
|
||||
filePath := fmt.Sprintf("/tmp/trace_%d .pcap", extHdr.TaskId)
|
||||
filePath := fmt.Sprintf("/tmp/omc/trace/task_%d.pcap", extHdr.TaskId)
|
||||
if runtime.GOOS == "windows" {
|
||||
filePath = fmt.Sprintf("C:%s", filePath)
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ import (
|
||||
const (
|
||||
// 组号-其他
|
||||
GROUP_OTHER = "0"
|
||||
// 组号-跟踪任务数据变更 2_traceId
|
||||
GROUP_TRACE = "2_"
|
||||
// 组号-指标通用 10_neType_neId
|
||||
GROUP_KPI = "10_"
|
||||
// 组号-指标UPF 12_neId
|
||||
|
||||
Reference in New Issue
Block a user