From b3fbed56e5f691a73024c83490abe7aea101e0a1 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Wed, 28 Sep 2022 13:08:29 +0200
Subject: [PATCH] Including the kpi insertion into the attack detection.

---
 src/dbscanserving/client/DbscanServingClient.py       |  2 +-
 .../OpticalAttackDetectorServiceServicerImpl.py       | 11 ++++++++++-
 src/opticalattackmanager/service/__main__.py          |  8 ++++----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/dbscanserving/client/DbscanServingClient.py b/src/dbscanserving/client/DbscanServingClient.py
index 6f2556a82..3116e9fe3 100644
--- a/src/dbscanserving/client/DbscanServingClient.py
+++ b/src/dbscanserving/client/DbscanServingClient.py
@@ -53,5 +53,5 @@ class DbscanServingClient:
             request.num_features
         ))
         response = self.stub.Detect(request)
-        LOGGER.debug('Detect result with {:s} cluster indices'.format(len(response.cluster_indices)))
+        LOGGER.debug('Detect result with {} cluster indices'.format(len(response.cluster_indices)))
         return response
diff --git a/src/opticalattackdetector/service/OpticalAttackDetectorServiceServicerImpl.py b/src/opticalattackdetector/service/OpticalAttackDetectorServiceServicerImpl.py
index 516051513..d44785981 100644
--- a/src/opticalattackdetector/service/OpticalAttackDetectorServiceServicerImpl.py
+++ b/src/opticalattackdetector/service/OpticalAttackDetectorServiceServicerImpl.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import os, grpc, logging, random
+from common.tools.timestamp.Converters import timestamp_utcnow_to_float
 from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
 from context.client.ContextClient import ContextClient
 from monitoring.client.MonitoringClient import MonitoringClient
@@ -25,7 +26,7 @@ from common.proto.context_pb2 import (Empty,
     Context,  ContextId,  ContextIdList,  ContextList,
     Service,  ServiceId,  ServiceIdList,  ServiceList
 )
-from common.proto.monitoring_pb2 import KpiList
+from common.proto.monitoring_pb2 import Kpi
 from common.proto.optical_attack_detector_pb2_grpc import (
     OpticalAttackDetectorServiceServicer)
 
@@ -77,6 +78,14 @@ class OpticalAttackDetectorServiceServicerImpl(OpticalAttackDetectorServiceServi
                 grpc_sample.features.append(random.uniform(5000., 6000.))
             request.samples.append(grpc_sample)
         response: DetectionResponse = dbscanserving_client.Detect(request)
+
+        # including KPI
+        kpi = Kpi()
+        kpi.kpi_id.kpi_id.uuid = "1"
+        kpi.timestamp.timestamp = timestamp_utcnow_to_float()
+        kpi.kpi_value.int32Val = response.cluster_indices[-1]
+        monitoring_client.IncludeKpi(kpi)
+
         if -1 in response.cluster_indices:  # attack detected
             attack = AttackDescription()
             attack.cs_id.uuid = service_id.service_uuid.uuid
diff --git a/src/opticalattackmanager/service/__main__.py b/src/opticalattackmanager/service/__main__.py
index c9e9b0c73..cf6539f80 100644
--- a/src/opticalattackmanager/service/__main__.py
+++ b/src/opticalattackmanager/service/__main__.py
@@ -32,12 +32,12 @@ async def detect_attack(endpoint, context_id, service_id):
                                          options=CHANNEL_OPTIONS) as channel:
         stub = OpticalAttackDetectorServiceStub(channel)
 
-        service_id = ServiceId()
-        service_id.context_id.context_uuid.uuid = context_id
-        service_id.service_uuid.uuid = str(service_id)
+        service = ServiceId()
+        service.context_id.context_uuid.uuid = context_id
+        service.service_uuid.uuid = str(service_id)
         # Timeout in seconds.
         # Please refer gRPC Python documents for more detail. https://grpc.io/grpc/python/grpc.html
-        await stub.DetectAttack(service_id,
+        await stub.DetectAttack(service,
                                        timeout=10)
     print("Greeter client received:", service_id)
 
-- 
GitLab