First version of ODU slice assurance usecase
[nonrtric.git] / test / usecases / odusliceassurance / goversion / messages / stdVesMessage.go
diff --git a/test/usecases/odusliceassurance/goversion/messages/stdVesMessage.go b/test/usecases/odusliceassurance/goversion/messages/stdVesMessage.go
new file mode 100644 (file)
index 0000000..1ee0dcf
--- /dev/null
@@ -0,0 +1,124 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2021: 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 messages
+
+import (
+       "fmt"
+       "regexp"
+       "strconv"
+       "strings"
+
+       "oransc.org/usecase/oduclosedloop/internal/structures"
+)
+
+type StdDefinedMessage struct {
+       Event Event `json:"event"`
+}
+
+type Event struct {
+       CommonEventHeader CommonEventHeader `json:"commonEventHeader"`
+       StndDefinedFields StndDefinedFields `json:"stndDefinedFields"`
+}
+
+type CommonEventHeader struct {
+       Domain               string `json:"domain"`
+       StndDefinedNamespace string `json:"stndDefinedNamespace"`
+}
+
+type StndDefinedFields struct {
+       StndDefinedFieldsVersion string `json:"stndDefinedFieldsVersion"`
+       SchemaReference          string `json:"schemaReference"`
+       Data                     Data   `json:"data"`
+}
+
+type Data struct {
+       DataId       string        `json:"id"`
+       Measurements []Measurement `json:"measurements"`
+}
+
+type Measurement struct {
+       MeasurementTypeInstanceReference string `json:"measurement-type-instance-reference"`
+       Value                            int    `json:"value"`
+       Unit                             string `json:"unit"`
+}
+
+func (message StdDefinedMessage) GetMeasurements() []Measurement {
+       return message.Event.StndDefinedFields.Data.Measurements
+}
+
+func (meas Measurement) CreateSliceMetric() *structures.SliceMetric {
+       var pmName string
+       var duid, cellid string
+       var sd, sst int
+
+       typeParts := strings.Split(meas.MeasurementTypeInstanceReference, "/")
+       for _, part := range typeParts {
+               if strings.Contains(part, "distributed-unit-functions") {
+                       duid = getValueInsideQuotes(part)
+
+               } else if strings.Contains(part, "cell[") {
+                       cellid = getValueInsideQuotes(part)
+
+               } else if strings.Contains(part, "performance-measurement-type") {
+                       pmName = getValueInsideQuotes(part)
+
+               } else if strings.Contains(part, "slice-differentiator") {
+                       sd = getPropertyNumber(part)
+
+               } else if strings.Contains(part, "slice-differentiator") {
+                       res, err := strconv.Atoi(getValueInsideQuotes(part))
+                       if err != nil {
+                               sst = -1
+                       }
+                       sst = res
+               }
+       }
+
+       sm := structures.NewSliceMetric(duid, cellid, sd, sst)
+       sm.PM[pmName] = meas.Value
+       return sm
+}
+
+func getValueInsideQuotes(text string) string {
+       re := regexp.MustCompile(`\'(.*?)\'`)
+
+       match := re.FindAllString(text, -1)
+       var res string
+       if len(match) == 1 {
+               res = strings.Trim(match[0], "'")
+       }
+       return res
+}
+
+func getPropertyNumber(text string) int {
+       re := regexp.MustCompile("[0-9]+")
+       match := re.FindAllString(text, -1)
+       var res int
+       var err error
+       if len(match) == 1 {
+               res, err = strconv.Atoi(match[0])
+               if err != nil {
+                       fmt.Println(err)
+                       return -1
+               }
+       }
+       return res
+}