3 // ========================LICENSE_START=================================
6 // Copyright (C) 2023: Nordix Foundation
8 // Licensed under the Apache License, Version 2.0 (the "License");
9 // you may not use this file except in compliance with the License.
10 // You may obtain a copy of the License at
12 // http://www.apache.org/licenses/LICENSE-2.0
14 // Unless required by applicable law or agreed to in writing, software
15 // distributed under the License is distributed on an "AS IS" BASIS,
16 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 // See the License for the specific language governing permissions and
18 // limitations under the License.
19 // ========================LICENSE_END===================================
29 jsoniter "github.com/json-iterator/go"
30 log "github.com/sirupsen/logrus"
32 "main/common/dataTypes"
38 func xml_to_json_conv(f_byteValue *[]byte, xfeh *dataTypes.XmlFileEventHeader) ([]byte, error) {
39 var f dataTypes.MeasCollecFile
41 err := xml.Unmarshal(*f_byteValue, &f)
43 return nil, errors.New("Cannot unmarshal xml-file")
45 log.Debug("Unmarshal xml file XmlFileEvent: ", time.Since(start).String())
48 var pmfile dataTypes.PMJsonFile
50 //TODO: Fill in more values
51 pmfile.Event.Perf3GppFields.Perf3GppFieldsVersion = "1.0"
52 pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
53 pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityUserName = ""
54 pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityDn = f.FileHeader.FileSender.LocalDn
55 pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntitySoftwareVersion = f.MeasData.ManagedElement.SwVersion
57 for _, it := range f.MeasData.MeasInfo {
58 var mili dataTypes.MeasInfoList
59 mili.MeasInfoID.SMeasInfoID = it.MeasInfoId
60 for _, jt := range it.MeasType {
61 mili.MeasTypes.SMeasTypesList = append(mili.MeasTypes.SMeasTypesList, jt.Text)
63 for _, jt := range it.MeasValue {
64 var mv dataTypes.MeasValues
65 mv.MeasObjInstID = jt.MeasObjLdn
66 mv.SuspectFlag = jt.Suspect
68 mv.SuspectFlag = "false"
70 for _, kt := range jt.R {
71 ni, _ := strconv.Atoi(kt.P)
73 mr := dataTypes.MeasResults{ni, nv}
74 mv.MeasResultsList = append(mv.MeasResultsList, mr)
76 mili.MeasValuesList = append(mili.MeasValuesList, mv)
79 pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList = append(pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList, mili)
82 pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
84 //TODO: Fill more values
85 pmfile.Event.CommonEventHeader.Domain = "" //xfeh.Domain
86 pmfile.Event.CommonEventHeader.EventID = "" //xfeh.EventID
87 pmfile.Event.CommonEventHeader.Sequence = 0 //xfeh.Sequence
88 pmfile.Event.CommonEventHeader.EventName = "" //xfeh.EventName
89 pmfile.Event.CommonEventHeader.SourceName = xfeh.SourceName
90 pmfile.Event.CommonEventHeader.ReportingEntityName = "" //xfeh.ReportingEntityName
91 pmfile.Event.CommonEventHeader.Priority = "" //xfeh.Priority
92 pmfile.Event.CommonEventHeader.StartEpochMicrosec = xfeh.StartEpochMicrosec
93 pmfile.Event.CommonEventHeader.LastEpochMicrosec = xfeh.LastEpochMicrosec
94 pmfile.Event.CommonEventHeader.Version = "" //xfeh.Version
95 pmfile.Event.CommonEventHeader.VesEventListenerVersion = "" //xfeh.VesEventListenerVersion
96 pmfile.Event.CommonEventHeader.TimeZoneOffset = xfeh.TimeZoneOffset
98 log.Debug("Convert xml to json : ", time.Since(start).String())
101 json, err := jsoniter.Marshal(pmfile)
102 log.Debug("Marshal json : ", time.Since(start).String())
105 return nil, errors.New("Cannot marshal converted json")
110 func Convert(inputS3Url, compression, xmlFileEventHeader string) []byte {
111 evt_data := dataTypes.XmlFileEventHeader{}
112 jsoniter.Unmarshal([]byte(xmlFileEventHeader), &evt_data)
114 client := new(http.Client)
116 request, err := http.NewRequest("GET", inputS3Url, nil)
117 request.Header.Add("Accept-Encoding", "gzip")
119 response, err := client.Do(request)
120 defer response.Body.Close()
122 // Check that the server actually sent compressed data
123 var reader io.ReadCloser
126 reader, err = gzip.NewReader(response.Body)
129 reader = response.Body
132 var buf3 bytes.Buffer
133 _, err2 := io.Copy(&buf3, reader)
135 log.Error("Error reading response, discarding message, ", err)
138 file_bytes := buf3.Bytes()
139 fmt.Println("Converting to XML")
140 b, err := xml_to_json_conv(&file_bytes, &evt_data)