|
|
@ -3,6 +3,9 @@ package icsstat
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io"
|
|
|
|
|
|
|
|
"math/rand"
|
|
|
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icsconf"
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icsconf"
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icserror"
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icserror"
|
|
|
@ -10,6 +13,11 @@ import (
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icsnet"
|
|
|
|
"gitlab.com/ics_cinnamon/voiceStatistics/icsnet"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type SidVal struct {
|
|
|
|
|
|
|
|
Sid string
|
|
|
|
|
|
|
|
M *sync.Mutex
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type StatInfos struct {
|
|
|
|
type StatInfos struct {
|
|
|
|
//necessary value
|
|
|
|
//necessary value
|
|
|
|
SeqId string // 25
|
|
|
|
SeqId string // 25
|
|
|
@ -45,6 +53,8 @@ type StatInfos struct {
|
|
|
|
TtsText string // 1024
|
|
|
|
TtsText string // 1024
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var gSidVal *SidVal
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
const (
|
|
|
|
//necessary value
|
|
|
|
//necessary value
|
|
|
|
STAT_INFO = 0
|
|
|
|
STAT_INFO = 0
|
|
|
@ -92,7 +102,7 @@ func ListenStatMNG() (icserr *icserror.IcsError) {
|
|
|
|
statLocalAddr := icsnet.NewNetAddrWithIPAddr(statLocalAddrStr)
|
|
|
|
statLocalAddr := icsnet.NewNetAddrWithIPAddr(statLocalAddrStr)
|
|
|
|
|
|
|
|
|
|
|
|
var cmdErr *icserror.IcsError
|
|
|
|
var cmdErr *icserror.IcsError
|
|
|
|
statTCP, cmdErr := icsnet.ListenAndServeTCP(&statLocalAddr, nil, "\r\n\r\n", StatsCommand)
|
|
|
|
statTCP, cmdErr := icsnet.ListenAndServeTCP(&statLocalAddr, nil, "\r\n\r\n", StatsCommandVG)
|
|
|
|
if cmdErr != nil {
|
|
|
|
if cmdErr != nil {
|
|
|
|
l.Printf(icslog.LOG_LEVEL_FATAL, -1, "%s", cmdErr.GetError())
|
|
|
|
l.Printf(icslog.LOG_LEVEL_FATAL, -1, "%s", cmdErr.GetError())
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
@ -114,7 +124,7 @@ func ListenStatMNG1() (icserr *icserror.IcsError) {
|
|
|
|
statLocalAddr := icsnet.NewNetAddrWithIPAddr(statLocalAddrStr)
|
|
|
|
statLocalAddr := icsnet.NewNetAddrWithIPAddr(statLocalAddrStr)
|
|
|
|
|
|
|
|
|
|
|
|
var cmdErr *icserror.IcsError
|
|
|
|
var cmdErr *icserror.IcsError
|
|
|
|
statTCP, cmdErr := icsnet.ListenAndServeTCP(&statLocalAddr, nil, "\r\n\r\n", StatsCommand)
|
|
|
|
statTCP, cmdErr := icsnet.ListenAndServeTCP(&statLocalAddr, nil, "\r\n\r\n", StatsCommandVA)
|
|
|
|
if cmdErr != nil {
|
|
|
|
if cmdErr != nil {
|
|
|
|
l.Printf(icslog.LOG_LEVEL_FATAL, -1, "%s", cmdErr.GetError())
|
|
|
|
l.Printf(icslog.LOG_LEVEL_FATAL, -1, "%s", cmdErr.GetError())
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
@ -125,13 +135,38 @@ func ListenStatMNG1() (icserr *icserror.IcsError) {
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func StatsCommand(t *icsnet.IcsTCPNet, bufend string) {
|
|
|
|
func NewSidVal() {
|
|
|
|
|
|
|
|
timeN := time.Now()
|
|
|
|
|
|
|
|
nano := fmt.Sprintf("%d", timeN.UTC().Nanosecond())
|
|
|
|
|
|
|
|
sid := fmt.Sprintf("%02d%02d%02d%03s", timeN.Hour(), timeN.Minute(), timeN.Second(), nano[:3])
|
|
|
|
|
|
|
|
gSidVal = &SidVal{
|
|
|
|
|
|
|
|
Sid: sid,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
gSidVal.M = &sync.Mutex{}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func GetIcsSid() *SidVal {
|
|
|
|
|
|
|
|
return gSidVal
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func StatsCommandVG(t *icsnet.IcsTCPNet, bufend string) {
|
|
|
|
l := icslog.GetIcsLog()
|
|
|
|
l := icslog.GetIcsLog()
|
|
|
|
statInfos := new(StatInfos)
|
|
|
|
statInfos := new(StatInfos)
|
|
|
|
|
|
|
|
|
|
|
|
count := 0
|
|
|
|
s := GetIcsSid()
|
|
|
|
|
|
|
|
randNum := fmt.Sprintf("%d4", rand.Intn(9999))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
|
|
if err := recover(); err != nil {
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_WARN, -1, "%s\n",
|
|
|
|
|
|
|
|
icserror.ICSERRNETNotConnectError.GetMessage())
|
|
|
|
|
|
|
|
if t != nil {
|
|
|
|
|
|
|
|
t.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
defer t.Close()
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_INFO, -1, "Connected from - %s", t.RemoteAddr())
|
|
|
|
l.Printf(icslog.LOG_LEVEL_INFO, -1, "Connected from - %s", t.RemoteAddr())
|
|
|
|
|
|
|
|
|
|
|
|
for {
|
|
|
|
for {
|
|
|
@ -140,20 +175,17 @@ func StatsCommand(t *icsnet.IcsTCPNet, bufend string) {
|
|
|
|
if rerr.GetError() != io.EOF {
|
|
|
|
if rerr.GetError() != io.EOF {
|
|
|
|
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "[Stat Command] ReadS Error! - %s[%d:%d]",
|
|
|
|
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "[Stat Command] ReadS Error! - %s[%d:%d]",
|
|
|
|
rerr.GetError(), rlen, len(statReads))
|
|
|
|
rerr.GetError(), rlen, len(statReads))
|
|
|
|
// 여기서 listen인데
|
|
|
|
break
|
|
|
|
t.Close()
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
// t.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
seqId := fmt.Sprintf("%05d", count)
|
|
|
|
svc := statInfos.SvcType[0:1]
|
|
|
|
|
|
|
|
seqId := s.Sid + svc + randNum
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Printf("Recved Stat Command(%s) %d \n", statReads, rlen)
|
|
|
|
fmt.Printf("Recved Stat Command(%s) %d \n", statReads, rlen)
|
|
|
|
statInfos.ChangeByteToString(statReads)
|
|
|
|
statInfos.ChangeByteToString(statReads)
|
|
|
|
|
|
|
|
|
|
|
|
insLog := ""
|
|
|
|
insLog := ""
|
|
|
|
// insLog += fmt.Sprintf("%s\n", statInfos.CallId)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("seqId:%s\n", seqId)
|
|
|
|
insLog += fmt.Sprintf("seqId:%s\n", seqId)
|
|
|
|
// insLog += fmt.Sprintf("%s\n", statInfos.SeqId)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("LogTime:%s, ", statInfos.LogTime)
|
|
|
|
insLog += fmt.Sprintf("LogTime:%s, ", statInfos.LogTime)
|
|
|
|
insLog += fmt.Sprintf("LogType:%s, ", statInfos.LogType)
|
|
|
|
insLog += fmt.Sprintf("LogType:%s, ", statInfos.LogType)
|
|
|
|
insLog += fmt.Sprintf("Sid:%s, ", statInfos.Sid)
|
|
|
|
insLog += fmt.Sprintf("Sid:%s, ", statInfos.Sid)
|
|
|
@ -213,9 +245,105 @@ func StatsCommand(t *icsnet.IcsTCPNet, bufend string) {
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ResultMsg)
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ResultMsg)
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SttText)
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SttText)
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.TtsText)
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.TtsText)
|
|
|
|
// l.Printf(icslog.LOG_LEVEL_INFO, -1, "Recved Stat Command(%s) %d", ttsHeader, rlen)
|
|
|
|
}
|
|
|
|
count++
|
|
|
|
}
|
|
|
|
// t.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func StatsCommandVA(t *icsnet.IcsTCPNet, bufend string) {
|
|
|
|
|
|
|
|
l := icslog.GetIcsLog()
|
|
|
|
|
|
|
|
statInfos := new(StatInfos)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s := GetIcsSid()
|
|
|
|
|
|
|
|
randNum := fmt.Sprintf("%d4", rand.Intn(9999))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
|
|
if err := recover(); err != nil {
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_WARN, -1, "%s\n",
|
|
|
|
|
|
|
|
icserror.ICSERRNETNotConnectError.GetMessage())
|
|
|
|
|
|
|
|
if t != nil {
|
|
|
|
|
|
|
|
t.Close()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_INFO, -1, "Connected from - %s", t.RemoteAddr())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for {
|
|
|
|
|
|
|
|
statReads, rlen, rerr := t.ReadS(10137, bufend) // 여기서 전체 몇 byte씩 읽어서 로그를 찍을건지 알아야함
|
|
|
|
|
|
|
|
if rerr != nil {
|
|
|
|
|
|
|
|
if rerr.GetError() != io.EOF {
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "[Stat Command] ReadS Error! - %s[%d:%d]",
|
|
|
|
|
|
|
|
rerr.GetError(), rlen, len(statReads))
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
svc := statInfos.SvcType[0:1]
|
|
|
|
|
|
|
|
seqId := s.Sid + svc + randNum
|
|
|
|
|
|
|
|
fmt.Printf("Recved Stat Command(%s) %d \n", statReads, rlen)
|
|
|
|
|
|
|
|
statInfos.ChangeByteToString(statReads)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
insLog := ""
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("seqId:%s", seqId)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("LogTime:%s, ", statInfos.LogTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("LogType:%s, ", statInfos.LogType)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("Sid:%s, ", statInfos.Sid)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ResultCode:%s, ", statInfos.ResultCode)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ReqTime:%s, ", statInfos.ReqTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("RspTime:%s, ", statInfos.RspTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ClientIp:%s, ", statInfos.ClientIp)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("DevInfo:%s, ", statInfos.DevInfo)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("OsInfo:%s, ", statInfos.OsInfo)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("NwInfo:%s, ", statInfos.NwInfo)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("SvcName:%s, ", statInfos.SvcName)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("DevModel:%s, ", statInfos.DevModel)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("CarrierType:%s, ", statInfos.CarrierType)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("HostName:%s, ", statInfos.HostName)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ScnName:%s, ", statInfos.ScnName)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("CallId:%s, ", statInfos.CallId)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("TrId:%s, ", statInfos.TrId)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ConcCall:%s, ", statInfos.ConcCall)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("SvcType:%s, ", statInfos.SvcType)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("SvcReqTime:%s, ", statInfos.SvcReqTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("SvcRspTime:%s, ", statInfos.SvcRspTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("TransferNo:%s, ", statInfos.TransferNo)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("CallTime:%s, ", statInfos.CallTime)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("CallType:%s, ", statInfos.CallType)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("FunName:%s, ", statInfos.FunName)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("ResultMsg:%s, ", statInfos.ResultMsg)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("SttText:%s, ", statInfos.SttText)
|
|
|
|
|
|
|
|
insLog += fmt.Sprintf("TtsText:%s\n", statInfos.TtsText)
|
|
|
|
|
|
|
|
l.Printf(icslog.LOG_LEVEL_INFO, -1, "%s", insLog)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SeqId)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.LogTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.LogType)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.Sid)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ResultCode)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ReqTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.RspTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ClientIp)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.DevInfo)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.OsInfo)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.NwInfo)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SvcName)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.DevModel)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.CarrierType)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.HostName)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ScnName)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.CallId)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.TrId)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ConcCall)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SvcType)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SvcReqTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SvcRspTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.TransferNo)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.CallTime)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.CallType)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.FunName)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.ResultMsg)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.SttText)
|
|
|
|
|
|
|
|
fmt.Printf("stats- %s \n", statInfos.TtsText)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|