From 2efbda3a4f8bb9ac0afb3831fe0dba1af36b6a13 Mon Sep 17 00:00:00 2001
From: Fotis Soldatos <fsoldatos@ubitech.eu>
Date: Thu, 21 Jul 2022 14:58:19 +0300
Subject: [PATCH] feat(policy): add monitoring related domain models

---
 .../monitoring/model/AlarmDescriptor.java     | 65 +++++++++++++++++
 .../monitoring/model/AlarmResponse.java       | 49 +++++++++++++
 .../teraflow/policy/monitoring/model/Kpi.java |  8 +--
 .../monitoring/model/KpiDescriptor.java       | 15 +++-
 .../monitoring/model/KpiValueRange.java       | 41 +++++++++++
 .../monitoring/model/SubsDescriptor.java      | 70 +++++++++++++++++++
 src/policy/target/kubernetes/kubernetes.yml   | 16 ++---
 7 files changed, 249 insertions(+), 15 deletions(-)
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java

diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
new file mode 100644
index 000000000..ac216ee7c
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
@@ -0,0 +1,65 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* 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.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class AlarmDescriptor {
+    private final String alarmDescription;
+    private final String name;
+    private final String kpiId;
+    private final KpiValueRange kpiValueRange;
+    private final String timestamp;
+
+    public AlarmDescriptor(
+            String alarmDescription,
+            String name,
+            String kpiId,
+            KpiValueRange kpiValueRange,
+            String timestamp) {
+        this.alarmDescription = alarmDescription;
+        this.name = name;
+        this.kpiId = kpiId;
+        this.kpiValueRange = kpiValueRange;
+        this.timestamp = timestamp;
+    }
+
+    public String getAlarmDescription() {
+        return alarmDescription;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public KpiValueRange getKpiValueRange() {
+        return kpiValueRange;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmDescription:\"%s\", name:\"%s\", kpiId:\"%s\", %s, timestamp:\"%s\"}",
+                getClass().getSimpleName(), alarmDescription, name, kpiId, kpiValueRange, timestamp);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
new file mode 100644
index 000000000..4730c18d0
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* 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.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class AlarmResponse {
+
+    private final String alarmId;
+    private final String text;
+    private final KpiValue<?> kpiValue;
+
+    public AlarmResponse(String alarmId, String text, KpiValue<?> kpiValue) {
+        this.alarmId = alarmId;
+        this.text = text;
+        this.kpiValue = kpiValue;
+    }
+
+    public String getAlarmId() {
+        return alarmId;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public KpiValue getKpiValue() {
+        return kpiValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmId:\"%s\", text:\"%s\", %s}",
+                getClass().getSimpleName(), alarmId, text, kpiValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
index 4d84c29d4..c04224029 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
@@ -20,9 +20,9 @@ public class Kpi {
 
     private final String kpiId;
     private final String timestamp;
-    private final String kpiValue;
+    private final KpiValue<?> kpiValue;
 
-    public Kpi(String kpiId, String timestamp, String kpiValue) {
+    public Kpi(String kpiId, String timestamp, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.timestamp = timestamp;
         this.kpiValue = kpiValue;
@@ -36,14 +36,14 @@ public class Kpi {
         return timestamp;
     }
 
-    public String getKpiValue() {
+    public KpiValue getKpiValue() {
         return kpiValue;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiId:\"%s\", timeStamp:\"%s\", kpiValue:\"%s\"}",
+                "%s:{kpiId:\"%s\", timeStamp:\"%s\", %s}",
                 getClass().getSimpleName(), kpiId, timestamp, kpiValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
index 85e09ce2e..107c10335 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
@@ -18,6 +18,7 @@ package eu.teraflow.policy.monitoring.model;
 
 import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.SliceId;
 import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
 
 public class KpiDescriptor {
@@ -27,18 +28,21 @@ public class KpiDescriptor {
     private final String deviceId;
     private final EndPointId endPointId;
     private final ServiceId serviceId;
+    private final SliceId sliceId;
 
     public KpiDescriptor(
             String kpiDescription,
             KpiSampleType kpiSampleType,
             String deviceId,
             EndPointId endPointId,
-            ServiceId serviceId) {
+            ServiceId serviceId,
+            SliceId sliceId) {
         this.kpiDescription = kpiDescription;
         this.kpiSampleType = kpiSampleType;
         this.deviceId = deviceId;
         this.endPointId = endPointId;
         this.serviceId = serviceId;
+        this.sliceId = sliceId;
     }
 
     public String getKpiDescription() {
@@ -61,15 +65,20 @@ public class KpiDescriptor {
         return serviceId;
     }
 
+    public SliceId getSliceId() {
+        return sliceId;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s}",
+                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s, %s}",
                 getClass().getSimpleName(),
                 kpiDescription,
                 kpiSampleType.toString(),
                 deviceId,
                 endPointId,
-                serviceId);
+                serviceId,
+                sliceId);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
new file mode 100644
index 000000000..baa7c32c4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
@@ -0,0 +1,41 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* 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.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class KpiValueRange {
+
+    private final KpiValue<?> kpiMinValue;
+    private final KpiValue<?> kpiMaxValue;
+
+    public KpiValueRange(KpiValue<?> kpiMinValue, KpiValue<?> kpiMaxValue) {
+        this.kpiMinValue = kpiMinValue;
+        this.kpiMaxValue = kpiMaxValue;
+    }
+
+    public KpiValue getKpiMinValue() {
+        return kpiMinValue;
+    }
+
+    public KpiValue getKpiMaxValue() {
+        return kpiMaxValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), kpiMinValue, kpiMaxValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
new file mode 100644
index 000000000..ced38b3f9
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
@@ -0,0 +1,70 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* 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.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class SubsDescriptor {
+    private final String kpiId;
+    private final float samplingDurationS;
+    private final float samplingIntervalS;
+    private final String startDate;
+    private final String endDate;
+
+    public SubsDescriptor(
+            String kpiId,
+            float samplingDurationS,
+            float samplingIntervalS,
+            String startDate,
+            String endDate) {
+        this.kpiId = kpiId;
+        this.samplingDurationS = samplingDurationS;
+        this.samplingIntervalS = samplingIntervalS;
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public float getSamplingDurationS() {
+        return samplingDurationS;
+    }
+
+    public float getSamplingIntervalS() {
+        return samplingIntervalS;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startDate:\"%s\", endDate:\"%s\"}",
+                getClass().getSimpleName(),
+                kpiId,
+                samplingDurationS,
+                samplingIntervalS,
+                startDate,
+                endDate);
+    }
+}
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index 97929a863..248fb6143 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 4244298f2625d05dce3c62d8431b03f799506e78
+    app.quarkus.io/build-timestamp: 2022-07-21 - 11:54:42 +0000
   labels:
     app.kubernetes.io/name: policyservice
     app: policyservice
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 4244298f2625d05dce3c62d8431b03f799506e78
+    app.quarkus.io/build-timestamp: 2022-07-21 - 11:54:42 +0000
   labels:
     app: policyservice
     app.kubernetes.io/name: policyservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-        app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+        app.quarkus.io/commit-id: 4244298f2625d05dce3c62d8431b03f799506e78
+        app.quarkus.io/build-timestamp: 2022-07-21 - 11:54:42 +0000
       labels:
         app: policyservice
         app.kubernetes.io/name: policyservice
@@ -53,10 +53,10 @@ spec:
                   fieldPath: metadata.namespace
             - name: MONITORING_SERVICE_HOST
               value: monitoringservice
-            - name: SERVICE_SERVICE_HOST
-              value: serviceservice
             - name: CONTEXT_SERVICE_HOST
               value: contextservice
+            - name: SERVICE_SERVICE_HOST
+              value: serviceservice
           image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0
           imagePullPolicy: Always
           livenessProbe:
-- 
GitLab