From 35b9ecad8f4badc51d20383ece8bf8648dd5ab32 Mon Sep 17 00:00:00 2001
From: luiscal4a <l.delacal@alumnos.upm.es>
Date: Wed, 9 Nov 2022 20:28:58 +0100
Subject: [PATCH] - Added endpoint_id field to the monitoring of KPIs in the
 Centralized Attack Detector. - Minor fixes.

---
 manifests/monitoringservice.yaml              | 152 +++++++++---------
 ...alizedattackdetectorServiceServicerImpl.py |  14 +-
 2 files changed, 87 insertions(+), 79 deletions(-)

diff --git a/manifests/monitoringservice.yaml b/manifests/monitoringservice.yaml
index 39acfd523..329082bba 100644
--- a/manifests/monitoringservice.yaml
+++ b/manifests/monitoringservice.yaml
@@ -30,23 +30,23 @@ spec:
       terminationGracePeriodSeconds: 5
       restartPolicy: Always
       containers:
-      - name: metricsdb
-        image: questdb/questdb
-        ports:
-        - name: http
-          containerPort: 9000
-          protocol: TCP
-        - name: influxdb
-          containerPort: 9009
-          protocol: TCP
-        - name: postgre
-          containerPort: 8812
-          protocol: TCP
-        env:
-        - name: QDB_CAIRO_COMMIT_LAG
-          value: "1000"
-        - name: QDB_CAIRO_MAX_UNCOMMITTED_ROWS
-          value: "100000"
+        - name: metricsdb
+          image: questdb/questdb
+          ports:
+            - name: http
+              containerPort: 9000
+              protocol: TCP
+            - name: influxdb
+              containerPort: 9009
+              protocol: TCP
+            - name: postgre
+              containerPort: 8812
+              protocol: TCP
+          env:
+            - name: QDB_CAIRO_COMMIT_LAG
+              value: "1000"
+            - name: QDB_CAIRO_MAX_UNCOMMITTED_ROWS
+              value: "100000"
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -65,37 +65,37 @@ spec:
       terminationGracePeriodSeconds: 5
       restartPolicy: Always
       containers:
-      - name: server
-        image: registry.gitlab.com/teraflow-h2020/controller/monitoring:latest
-        imagePullPolicy: Always
-        ports:
-        - name: grpc
-          containerPort: 7070
-          protocol: TCP
-        env:
-        - name: LOG_LEVEL
-          value: "INFO"
-        - name: METRICSDB_HOSTNAME
-          value: "monitoringservice"
-        - name: METRICSDB_ILP_PORT
-          value: "9009"
-        - name: METRICSDB_REST_PORT
-          value: "9000"
-        - name: METRICSDB_TABLE
-          value: "monitoring"
-        readinessProbe:
-          exec:
-            command: ["/bin/grpc_health_probe", "-addr=:7070"]
-        livenessProbe:
-          exec:
-            command: ["/bin/grpc_health_probe", "-addr=:7070"]
-        resources:
-          requests:
-            cpu: 250m
-            memory: 512Mi
-          limits:
-            cpu: 700m
-            memory: 1024Mi
+        - name: server
+          image: registry.gitlab.com/teraflow-h2020/controller/monitoring:latest
+          imagePullPolicy: Always
+          ports:
+            - name: grpc
+              containerPort: 7070
+              protocol: TCP
+          env:
+            - name: LOG_LEVEL
+              value: "DEBUG"
+            - name: METRICSDB_HOSTNAME
+              value: "monitoringservice"
+            - name: METRICSDB_ILP_PORT
+              value: "9009"
+            - name: METRICSDB_REST_PORT
+              value: "9000"
+            - name: METRICSDB_TABLE
+              value: "monitoring"
+          readinessProbe:
+            exec:
+              command: ["/bin/grpc_health_probe", "-addr=:7070"]
+          livenessProbe:
+            exec:
+              command: ["/bin/grpc_health_probe", "-addr=:7070"]
+          resources:
+            requests:
+              cpu: 250m
+              memory: 512Mi
+            limits:
+              cpu: 700m
+              memory: 1024Mi
 ---
 apiVersion: v1
 kind: Service
@@ -106,22 +106,22 @@ spec:
   selector:
     app: monitoringservice
   ports:
-  - name: grpc
-    protocol: TCP
-    port: 7070
-    targetPort: 7070
-  - name: http
-    protocol: TCP
-    port: 9000
-    targetPort: 9000
-  - name: influxdb
-    protocol: TCP
-    port: 9009
-    targetPort: 9009
-  - name: postgre
-    protocol: TCP
-    port: 8812
-    targetPort: 8812
+    - name: grpc
+      protocol: TCP
+      port: 7070
+      targetPort: 7070
+    - name: http
+      protocol: TCP
+      port: 9000
+      targetPort: 9000
+    - name: influxdb
+      protocol: TCP
+      port: 9009
+      targetPort: 9009
+    - name: postgre
+      protocol: TCP
+      port: 8812
+      targetPort: 8812
 
 ---
 apiVersion: networking.k8s.io/v1
@@ -131,16 +131,16 @@ metadata:
 spec:
   podSelector:
     matchLabels:
-      app: monitoringservice 
+      app: monitoringservice
   ingress:
-  - from: []
-    ports:
-    - port: 7070
-    - port: 8812
-  - from:
-    - podSelector:
-        matchLabels:
-          app: monitoringservice
-    ports:
-    - port: 9009
-    - port: 9000
+    - from: []
+      ports:
+        - port: 7070
+        - port: 8812
+    - from:
+        - podSelector:
+            matchLabels:
+              app: monitoringservice
+      ports:
+        - port: 9009
+        - port: 9000
diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
index 9981dfa9b..305fd979b 100644
--- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
+++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
@@ -123,10 +123,14 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto
         -output: KPI identifier representing the KPI
     """
 
-    def create_kpi(self, client: MonitoringClient, service_id, kpi_name, kpi_description, kpi_sample_type):
+    def create_kpi(
+        self, client: MonitoringClient, service_id, device_id, endpoint_id, kpi_name, kpi_description, kpi_sample_type
+    ):
         kpidescriptor = KpiDescriptor()
         kpidescriptor.kpi_description = kpi_description
         kpidescriptor.service_id.service_uuid.uuid = service_id.service_uuid.uuid
+        kpidescriptor.device_id.device_uuid.uuid = device_id.device_uuid.uuid
+        kpidescriptor.endpoint_id.endpoint_uuid.uuid = endpoint_id.endpoint_uuid.uuid
         kpidescriptor.kpi_sample_type = kpi_sample_type
         new_kpi = client.SetKpi(kpidescriptor)
 
@@ -141,12 +145,14 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto
         -output: None
     """
 
-    def create_kpis(self, service_id):
+    def create_kpis(self, service_id, device_id, endpoint_id):
         # for now, all the KPIs are created for all the services from which requests are received
         for kpi in self.monitored_kpis:
             created_kpi = self.create_kpi(
                 self.monitoring_client,
                 service_id,
+                device_id,
+                endpoint_id,
                 kpi,
                 self.monitored_kpis[kpi]["description"],
                 self.monitored_kpis[kpi]["kpi_sample_type"],
@@ -428,10 +434,12 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto
         self.inference_results.put({"output": cryptomining_detector_output_serialized, "timestamp": datetime.now()})
 
         service_id = request.service_id
+        device_id = request.endpoint_id.device_id
+        endpoint_id = request.endpoint_id
 
         # Check if a request of a new service has been received and, if so, create the monitored KPIs for that service
         if service_id not in self.service_ids:
-            self.create_kpis(service_id)
+            self.create_kpis(service_id, device_id, endpoint_id)
             self.service_ids.append(service_id)
 
         # Only notify Attack Mitigator when a cryptomining connection has been detected
-- 
GitLab