Remove unused code
[nonrtric/plt/ranpm.git] / pm-file-converter / components / xmltransform / xmltransform.go
diff --git a/pm-file-converter/components/xmltransform/xmltransform.go b/pm-file-converter/components/xmltransform/xmltransform.go
new file mode 100644 (file)
index 0000000..8e88d19
--- /dev/null
@@ -0,0 +1,142 @@
+// -
+//
+//      ========================LICENSE_START=================================
+//      O-RAN-SC
+//      %%
+//      Copyright (C) 2023: Nordix Foundation
+//      %%
+//      Licensed under the Apache License, Version 2.0 (the "License");
+//      you may not use this file except in compliance with the License.
+//      You may obtain a copy of the License at
+//
+//           http://www.apache.org/licenses/LICENSE-2.0
+//
+//      Unless required by applicable law or agreed to in writing, software
+//      distributed under the License is distributed on an "AS IS" BASIS,
+//      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//      See the License for the specific language governing permissions and
+//      limitations under the License.
+//      ========================LICENSE_END===================================
+
+package xmltransform
+
+import (
+       "bytes"
+       "compress/gzip"
+       "encoding/xml"
+       "errors"
+       "fmt"
+       jsoniter "github.com/json-iterator/go"
+       log "github.com/sirupsen/logrus"
+       "io"
+       "main/common/dataTypes"
+       "net/http"
+       "strconv"
+       "time"
+)
+
+func xml_to_json_conv(f_byteValue *[]byte, xfeh *dataTypes.XmlFileEventHeader) ([]byte, error) {
+       var f dataTypes.MeasCollecFile
+       start := time.Now()
+       err := xml.Unmarshal(*f_byteValue, &f)
+       if err != nil {
+               return nil, errors.New("Cannot unmarshal xml-file")
+       }
+       log.Debug("Unmarshal xml file XmlFileEvent: ", time.Since(start).String())
+
+       start = time.Now()
+       var pmfile dataTypes.PMJsonFile
+
+       //TODO: Fill in more values
+       pmfile.Event.Perf3GppFields.Perf3GppFieldsVersion = "1.0"
+       pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
+       pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityUserName = ""
+       pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityDn = f.FileHeader.FileSender.LocalDn
+       pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntitySoftwareVersion = f.MeasData.ManagedElement.SwVersion
+
+       for _, it := range f.MeasData.MeasInfo {
+               var mili dataTypes.MeasInfoList
+               mili.MeasInfoID.SMeasInfoID = it.MeasInfoId
+               for _, jt := range it.MeasType {
+                       mili.MeasTypes.SMeasTypesList = append(mili.MeasTypes.SMeasTypesList, jt.Text)
+               }
+               for _, jt := range it.MeasValue {
+                       var mv dataTypes.MeasValues
+                       mv.MeasObjInstID = jt.MeasObjLdn
+                       mv.SuspectFlag = jt.Suspect
+                       if jt.Suspect == "" {
+                               mv.SuspectFlag = "false"
+                       }
+                       for _, kt := range jt.R {
+                               ni, _ := strconv.Atoi(kt.P)
+                               nv := kt.Text
+                               mr := dataTypes.MeasResults{ni, nv}
+                               mv.MeasResultsList = append(mv.MeasResultsList, mr)
+                       }
+                       mili.MeasValuesList = append(mili.MeasValuesList, mv)
+               }
+
+               pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList = append(pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList, mili)
+       }
+
+       pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
+
+       //TODO: Fill more values
+       pmfile.Event.CommonEventHeader.Domain = ""    //xfeh.Domain
+       pmfile.Event.CommonEventHeader.EventID = ""   //xfeh.EventID
+       pmfile.Event.CommonEventHeader.Sequence = 0   //xfeh.Sequence
+       pmfile.Event.CommonEventHeader.EventName = "" //xfeh.EventName
+       pmfile.Event.CommonEventHeader.SourceName = xfeh.SourceName
+       pmfile.Event.CommonEventHeader.ReportingEntityName = "" //xfeh.ReportingEntityName
+       pmfile.Event.CommonEventHeader.Priority = ""            //xfeh.Priority
+       pmfile.Event.CommonEventHeader.StartEpochMicrosec = xfeh.StartEpochMicrosec
+       pmfile.Event.CommonEventHeader.LastEpochMicrosec = xfeh.LastEpochMicrosec
+       pmfile.Event.CommonEventHeader.Version = ""                 //xfeh.Version
+       pmfile.Event.CommonEventHeader.VesEventListenerVersion = "" //xfeh.VesEventListenerVersion
+       pmfile.Event.CommonEventHeader.TimeZoneOffset = xfeh.TimeZoneOffset
+
+       log.Debug("Convert xml to json : ", time.Since(start).String())
+
+       start = time.Now()
+       json, err := jsoniter.Marshal(pmfile)
+       log.Debug("Marshal json : ", time.Since(start).String())
+
+       if err != nil {
+               return nil, errors.New("Cannot marshal converted json")
+       }
+       return json, nil
+}
+
+func Convert(inputS3Url, compression, xmlFileEventHeader string) []byte {
+       evt_data := dataTypes.XmlFileEventHeader{}
+       jsoniter.Unmarshal([]byte(xmlFileEventHeader), &evt_data)
+
+       client := new(http.Client)
+
+       request, err := http.NewRequest("GET", inputS3Url, nil)
+       request.Header.Add("Accept-Encoding", "gzip")
+
+       response, err := client.Do(request)
+       defer response.Body.Close()
+
+       // Check that the server actually sent compressed data
+       var reader io.ReadCloser
+       switch compression {
+       case "gzip", "gz":
+               reader, err = gzip.NewReader(response.Body)
+               defer reader.Close()
+       default:
+               reader = response.Body
+       }
+
+       var buf3 bytes.Buffer
+       _, err2 := io.Copy(&buf3, reader)
+       if err2 != nil {
+               log.Error("Error reading response, discarding message, ", err)
+               return nil
+       }
+       file_bytes := buf3.Bytes()
+       fmt.Println("Converting to XML")
+       b, err := xml_to_json_conv(&file_bytes, &evt_data)
+       return b
+}