diff --git a/features/trace/trace.go b/features/trace/trace.go index d1feeb17..58a4e8ed 100644 --- a/features/trace/trace.go +++ b/features/trace/trace.go @@ -5,13 +5,16 @@ import ( "fmt" "io" "net/http" + "strconv" "strings" "github.com/go-resty/resty/v2" + "github.com/gorilla/mux" "ems.agt/lib/dborm" "ems.agt/lib/global" "ems.agt/lib/log" + "ems.agt/lib/run" "ems.agt/lib/services" "ems.agt/restagent/config" ) @@ -19,6 +22,8 @@ import ( var ( UriTraceTaskV1 = config.DefaultUriPrefix + "/traceManagement/v1/subscriptions" UriTraceTask = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/subscriptions" + UriTraceRawMsg = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/rawMessage/{id}" + UriTraceDecMsg = config.DefaultUriPrefix + "/traceManagement/{apiVersion}/decMessage/{id}" CustomUriTraceTaskV1 = config.UriPrefix + "/traceManagement/v1/subscriptions" CustomUriTraceTask = config.UriPrefix + "/traceManagement/{apiVersion}/subscriptions" @@ -373,5 +378,36 @@ func DeleteTraceTaskToNF(w http.ResponseWriter, r *http.Request) { } } services.ResponseStatusOK204NoContent(w) - return +} + +func GetRawMessage(w http.ResponseWriter, r *http.Request) { + log.Debug("GetRawMessage processing... ") + +} + +func ParseRawMsg2Html(w http.ResponseWriter, r *http.Request) { + log.Debug("ParseRawMsg2Html processing... ") + + vars := mux.Vars(r) + idStr := vars["id"] + id, _ := strconv.Atoi(idStr) + + traceData, err := dborm.XormGetTraceData(id) + if err != nil { + log.Error("Failed to dborm.XormGetTraceRawMsg:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + log.Trace("traceData:", traceData) + htmlFile := fmt.Sprintf("traceDecMessage-%d-%d.html", traceData.TaskID, traceData.ID) + pathFile := config.GetYamlConfig().OMC.FrontTraceDir + "/" + htmlFile + command := fmt.Sprintf("ipdata2html -f %s -t %d -i N%d -d %x", pathFile, traceData.Timestamp, traceData.IfType, traceData.RawMsg) + out, err := run.ExecCmd(command, "/") + log.Tracef("Exec output: %v", string(out)) + if err != nil { + log.Errorf("Faile to ipdate2html:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + services.ResponseStatusOK204NoContent(w) } diff --git a/lib/dborm/dborm.go b/lib/dborm/dborm.go index fbdacec6..ee0987d6 100644 --- a/lib/dborm/dborm.go +++ b/lib/dborm/dborm.go @@ -1746,7 +1746,7 @@ type TraceData struct { func XormGetTraceData(id int) (*TraceData, error) { result := new(TraceData) _, err := xEngine.Table("trace_data"). - ID(id). + Where("id=?", id). Get(result) if err != nil { log.Error("Failed to get table trace_data:", err) @@ -1756,16 +1756,17 @@ func XormGetTraceData(id int) (*TraceData, error) { return result, nil } -func XormGetTraceRawMsg(id int) ([]byte, error) { +func XormGetTraceRawMsg(id int) (int64, []byte, error) { var rawMsg []byte + var timestamp int64 _, err := xEngine.Table("trace_data"). - ID(id). - Cols("HEX(raw_msg)"). - Get(&rawMsg) + Where("id=?", id). + Cols("timestamp", "raw_msg"). + Get(×tamp, &rawMsg) if err != nil { log.Error("Failed to get table trace_data:", err) - return nil, err + return timestamp, rawMsg, err } - return rawMsg, nil + return timestamp, rawMsg, nil } diff --git a/lib/routes/routes.go b/lib/routes/routes.go index a543d0bc..2047bca3 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -209,6 +209,7 @@ func init() { Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, nil) Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, nil) Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, nil) + Register("GET", trace.UriTraceDecMsg, trace.ParseRawMsg2Html, nil) Register("POST", trace.CustomUriTraceTask, trace.PostTraceTaskToNF, nil) Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil) diff --git a/restagent/config/config.go b/restagent/config/config.go index ce4a92f3..1649d89d 100644 --- a/restagent/config/config.go +++ b/restagent/config/config.go @@ -71,6 +71,7 @@ type YamlConfig struct { Backup string `yaml:"backup"` Upload string `yaml:"upload"` FrontUpload string `yaml:"frontUpload"` + FrontTraceDir string `yaml:"frontTraceDir"` Software string `yaml:"software"` License string `yaml:"license"` GtpUri string `yaml:"gtpUri"` diff --git a/restagent/etc/restconf.yaml b/restagent/etc/restconf.yaml index 0f5e4831..ef3da907 100644 --- a/restagent/etc/restconf.yaml +++ b/restagent/etc/restconf.yaml @@ -72,7 +72,8 @@ omc: checksign: false backup: ./backup upload: ./upload - frontUpload: d:/omc.git/goprojects/build/omc/htdocs/front/upload + frontUpload: d:/local.git/fe.ems/upload + frontTraceDir: d:/local.git/fe.ems/trace software: ./software license: ./license gtpUri: gtp:192.168.2.119:2152