From 2f89f95ba6fd14c84b21f5cdd4015d10568a9ce6 Mon Sep 17 00:00:00 2001
From: Waleed Akbar <wakbar@cttc.es>
Date: Wed, 10 Jul 2024 13:13:18 +0000
Subject: [PATCH] After re-structring of KPI Manager

---
 scripts/run_tests_locally-kpi-DB.sh           |  2 +-
 scripts/run_tests_locally-kpi-manager.sh      |  2 +-
 .../kpi_manager/service/__init__.py           | 14 ----
 src/kpi_manager/Dockerfile                    | 70 +++++++++++++++++++
 .../kpi_manager/README.md                     |  1 +
 .../kpi_manager/__init__.py                   |  0
 .../kpi_manager/client/KpiManagerClient.py    |  0
 .../kpi_manager/client/__init__.py            |  0
 .../database}/KpiEngine.py                    |  2 +-
 .../database}/KpiModel.py                     |  0
 .../database}/Kpi_DB.py                       |  4 +-
 .../kpi_manager/database/__init__.py          |  0
 .../kpi_manager/database/tests/KpiDBtests.py  |  2 +-
 src/kpi_manager/requirements.in               | 63 +++++++++++++++++
 .../kpi_manager/service/KpiManagerService.py  |  2 +-
 .../service/KpiManagerServiceServicerImpl.py  |  4 +-
 .../service/__init__.py                       |  0
 .../kpi_manager/tests/test_kpi_manager.py     | 30 ++------
 .../kpi_manager/tests/test_messages.py        |  0
 19 files changed, 150 insertions(+), 46 deletions(-)
 delete mode 100644 src/kpi_management/kpi_manager/service/__init__.py
 create mode 100644 src/kpi_manager/Dockerfile
 rename src/{kpi_management => }/kpi_manager/README.md (98%)
 rename src/{kpi_management => }/kpi_manager/__init__.py (100%)
 rename src/{kpi_management => }/kpi_manager/client/KpiManagerClient.py (100%)
 rename src/{kpi_management => }/kpi_manager/client/__init__.py (100%)
 rename src/{kpi_management/kpi_manager/database/service => kpi_manager/database}/KpiEngine.py (97%)
 rename src/{kpi_management/kpi_manager/database/service => kpi_manager/database}/KpiModel.py (100%)
 rename src/{kpi_management/kpi_manager/database/service => kpi_manager/database}/Kpi_DB.py (97%)
 rename src/{kpi_management => }/kpi_manager/database/__init__.py (100%)
 rename src/{kpi_management => }/kpi_manager/database/tests/KpiDBtests.py (92%)
 create mode 100644 src/kpi_manager/requirements.in
 rename src/{kpi_management => }/kpi_manager/service/KpiManagerService.py (92%)
 rename src/{kpi_management => }/kpi_manager/service/KpiManagerServiceServicerImpl.py (97%)
 rename src/{kpi_management/kpi_manager/database => kpi_manager}/service/__init__.py (100%)
 rename src/{kpi_management => }/kpi_manager/tests/test_kpi_manager.py (88%)
 rename src/{kpi_management => }/kpi_manager/tests/test_messages.py (100%)

diff --git a/scripts/run_tests_locally-kpi-DB.sh b/scripts/run_tests_locally-kpi-DB.sh
index 75d922061..895f986cc 100755
--- a/scripts/run_tests_locally-kpi-DB.sh
+++ b/scripts/run_tests_locally-kpi-DB.sh
@@ -25,4 +25,4 @@ cd $PROJECTDIR/src
 
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \
-    kpi_management/kpi_manager/database/tests/KpiDBtests.py
\ No newline at end of file
+    kpi_manager/database/tests/KpiDBtests.py
\ No newline at end of file
diff --git a/scripts/run_tests_locally-kpi-manager.sh b/scripts/run_tests_locally-kpi-manager.sh
index 17c0c02ac..be69980e0 100755
--- a/scripts/run_tests_locally-kpi-manager.sh
+++ b/scripts/run_tests_locally-kpi-manager.sh
@@ -25,4 +25,4 @@ cd $PROJECTDIR/src
 
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \
-    kpi_management/kpi_manager/tests/test_kpi_manager.py
\ No newline at end of file
+    kpi_manager/tests/test_kpi_manager.py
\ No newline at end of file
diff --git a/src/kpi_management/kpi_manager/service/__init__.py b/src/kpi_management/kpi_manager/service/__init__.py
deleted file mode 100644
index 1549d9811..000000000
--- a/src/kpi_management/kpi_manager/service/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# 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.
-
diff --git a/src/kpi_manager/Dockerfile b/src/kpi_manager/Dockerfile
new file mode 100644
index 000000000..9454f5932
--- /dev/null
+++ b/src/kpi_manager/Dockerfile
@@ -0,0 +1,70 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+FROM python:3.9-slim
+
+# Install dependencies
+RUN apt-get --yes --quiet --quiet update && \
+    apt-get --yes --quiet --quiet install wget g++ git && \
+    rm -rf /var/lib/apt/lists/*
+
+# Set Python to show logs as they occur
+ENV PYTHONUNBUFFERED=0
+
+# Download the gRPC health probe
+RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
+    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
+    chmod +x /bin/grpc_health_probe
+
+# Get generic Python packages
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
+
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
+WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
+
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
+
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/kpi_manager
+WORKDIR /var/teraflow/kpi_manager
+COPY src/kpi_manager/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
+
+# Add component files into working directory
+WORKDIR /var/teraflow
+COPY src/context/. context/
+COPY src/device/. device/
+COPY src/kpi_manager/. kpi_manager/
+
+# Start the service
+ENTRYPOINT ["python", "-m", "kpi_manager.service"]
diff --git a/src/kpi_management/kpi_manager/README.md b/src/kpi_manager/README.md
similarity index 98%
rename from src/kpi_management/kpi_manager/README.md
rename to src/kpi_manager/README.md
index 68885dd13..72ba6e559 100644
--- a/src/kpi_management/kpi_manager/README.md
+++ b/src/kpi_manager/README.md
@@ -1,5 +1,6 @@
 # How to locally run and test KPI manager micro-service
 
+## --- File links need to be updated. ---
 ### Pre-requisets 
 The following requirements should be fulfilled before the execuation of KPI management service.
 
diff --git a/src/kpi_management/kpi_manager/__init__.py b/src/kpi_manager/__init__.py
similarity index 100%
rename from src/kpi_management/kpi_manager/__init__.py
rename to src/kpi_manager/__init__.py
diff --git a/src/kpi_management/kpi_manager/client/KpiManagerClient.py b/src/kpi_manager/client/KpiManagerClient.py
similarity index 100%
rename from src/kpi_management/kpi_manager/client/KpiManagerClient.py
rename to src/kpi_manager/client/KpiManagerClient.py
diff --git a/src/kpi_management/kpi_manager/client/__init__.py b/src/kpi_manager/client/__init__.py
similarity index 100%
rename from src/kpi_management/kpi_manager/client/__init__.py
rename to src/kpi_manager/client/__init__.py
diff --git a/src/kpi_management/kpi_manager/database/service/KpiEngine.py b/src/kpi_manager/database/KpiEngine.py
similarity index 97%
rename from src/kpi_management/kpi_manager/database/service/KpiEngine.py
rename to src/kpi_manager/database/KpiEngine.py
index 041784ff4..7fe31946b 100644
--- a/src/kpi_management/kpi_manager/database/service/KpiEngine.py
+++ b/src/kpi_manager/database/KpiEngine.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging, sqlalchemy, sqlalchemy_utils
+import logging, sqlalchemy
 # from common.Settings import get_setting
 
 LOGGER = logging.getLogger(__name__)
diff --git a/src/kpi_management/kpi_manager/database/service/KpiModel.py b/src/kpi_manager/database/KpiModel.py
similarity index 100%
rename from src/kpi_management/kpi_manager/database/service/KpiModel.py
rename to src/kpi_manager/database/KpiModel.py
diff --git a/src/kpi_management/kpi_manager/database/service/Kpi_DB.py b/src/kpi_manager/database/Kpi_DB.py
similarity index 97%
rename from src/kpi_management/kpi_manager/database/service/Kpi_DB.py
rename to src/kpi_manager/database/Kpi_DB.py
index 21027fa7b..a414609bb 100644
--- a/src/kpi_management/kpi_manager/database/service/Kpi_DB.py
+++ b/src/kpi_manager/database/Kpi_DB.py
@@ -17,8 +17,8 @@ import sqlalchemy
 import sqlalchemy_utils
 from sqlalchemy.orm import sessionmaker
 from sqlalchemy.ext.declarative import declarative_base
-from kpi_management.kpi_manager.database.service.KpiEngine import KpiEngine
-from kpi_management.kpi_manager.database.service.KpiModel import Kpi
+from kpi_manager.database.KpiEngine import KpiEngine
+from kpi_manager.database.KpiModel import Kpi
 
 LOGGER = logging.getLogger(__name__)
 DB_NAME = "kpi"
diff --git a/src/kpi_management/kpi_manager/database/__init__.py b/src/kpi_manager/database/__init__.py
similarity index 100%
rename from src/kpi_management/kpi_manager/database/__init__.py
rename to src/kpi_manager/database/__init__.py
diff --git a/src/kpi_management/kpi_manager/database/tests/KpiDBtests.py b/src/kpi_manager/database/tests/KpiDBtests.py
similarity index 92%
rename from src/kpi_management/kpi_manager/database/tests/KpiDBtests.py
rename to src/kpi_manager/database/tests/KpiDBtests.py
index 402dac8e0..f75f05c14 100644
--- a/src/kpi_management/kpi_manager/database/tests/KpiDBtests.py
+++ b/src/kpi_manager/database/tests/KpiDBtests.py
@@ -14,7 +14,7 @@
 
 
 import logging
-from kpi_management.kpi_manager.database.service.Kpi_DB import Kpi_DB
+from kpi_manager.database.Kpi_DB import Kpi_DB
 
 LOGGER = logging.getLogger(__name__)
 
diff --git a/src/kpi_manager/requirements.in b/src/kpi_manager/requirements.in
new file mode 100644
index 000000000..d96e4b1b8
--- /dev/null
+++ b/src/kpi_manager/requirements.in
@@ -0,0 +1,63 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+anytree==2.8.0
+APScheduler==3.10.1
+attrs==23.2.0
+certifi==2024.2.2
+charset-normalizer==2.0.12
+colorama==0.4.6
+confluent-kafka==2.3.0
+coverage==6.3
+future-fstrings==1.2.0
+greenlet==3.0.3
+grpcio==1.47.5
+grpcio-health-checking==1.47.5
+grpcio-tools==1.47.5
+grpclib==0.4.4
+h2==4.1.0
+hpack==4.0.0
+hyperframe==6.0.1
+idna==3.7
+influx-line-protocol==0.1.4
+iniconfig==2.0.0
+kafka-python==2.0.2
+multidict==6.0.5
+networkx==3.3
+packaging==24.0
+pluggy==1.5.0
+prettytable==3.5.0
+prometheus-client==0.13.0
+protobuf==3.20.3
+psycopg2-binary==2.9.3
+py==1.11.0
+py-cpuinfo==9.0.0
+pytest==6.2.5
+pytest-benchmark==3.4.1
+pytest-depends==1.0.1
+python-dateutil==2.8.2
+python-json-logger==2.0.2
+pytz==2024.1
+questdb==1.0.1
+requests==2.27.1
+six==1.16.0
+SQLAlchemy==1.4.52
+sqlalchemy-cockroachdb==1.4.4
+SQLAlchemy-Utils==0.38.3
+toml==0.10.2
+typing_extensions==4.12.0
+tzlocal==5.2
+urllib3==1.26.18
+wcwidth==0.2.13
+xmltodict==0.12.0
diff --git a/src/kpi_management/kpi_manager/service/KpiManagerService.py b/src/kpi_manager/service/KpiManagerService.py
similarity index 92%
rename from src/kpi_management/kpi_manager/service/KpiManagerService.py
rename to src/kpi_manager/service/KpiManagerService.py
index d4a8a8104..ecc7105a7 100755
--- a/src/kpi_management/kpi_manager/service/KpiManagerService.py
+++ b/src/kpi_manager/service/KpiManagerService.py
@@ -16,7 +16,7 @@ from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
 from common.proto.kpi_management_pb2_grpc import add_KpiManagerServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
-from kpi_management.kpi_manager.service.KpiManagerServiceServicerImpl import KpiManagerServiceServicerImpl
+from kpi_manager.service.KpiManagerServiceServicerImpl import KpiManagerServiceServicerImpl
 from monitoring.service.NameMapping import NameMapping
 
 class KpiManagerService(GenericGrpcService):
diff --git a/src/kpi_management/kpi_manager/service/KpiManagerServiceServicerImpl.py b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
similarity index 97%
rename from src/kpi_management/kpi_manager/service/KpiManagerServiceServicerImpl.py
rename to src/kpi_manager/service/KpiManagerServiceServicerImpl.py
index 3a3052182..cf13c0526 100644
--- a/src/kpi_management/kpi_manager/service/KpiManagerServiceServicerImpl.py
+++ b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
@@ -22,8 +22,8 @@ from common.proto.kpi_management_pb2 import KpiId, KpiDescriptor, KpiDescriptorF
 from monitoring.service.NameMapping import NameMapping
 # from monitoring.service import ManagementDBTools
 
-from kpi_management.kpi_manager.database.service.Kpi_DB import Kpi_DB
-from kpi_management.kpi_manager.database.service.KpiModel import Kpi as KpiModel
+from kpi_manager.database.Kpi_DB import Kpi_DB
+from kpi_manager.database.KpiModel import Kpi as KpiModel
 # from telemetry.database.TelemetryModel import Kpi as KpiModel
 from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
                              ConnectionId, EndPointId
diff --git a/src/kpi_management/kpi_manager/database/service/__init__.py b/src/kpi_manager/service/__init__.py
similarity index 100%
rename from src/kpi_management/kpi_manager/database/service/__init__.py
rename to src/kpi_manager/service/__init__.py
diff --git a/src/kpi_management/kpi_manager/tests/test_kpi_manager.py b/src/kpi_manager/tests/test_kpi_manager.py
similarity index 88%
rename from src/kpi_management/kpi_manager/tests/test_kpi_manager.py
rename to src/kpi_manager/tests/test_kpi_manager.py
index 531efc20c..ccb7f16c2 100755
--- a/src/kpi_management/kpi_manager/tests/test_kpi_manager.py
+++ b/src/kpi_manager/tests/test_kpi_manager.py
@@ -13,46 +13,30 @@
 # limitations under the License.
 
 
-# import sys
-# sys.path.append('.')
 import os, pytest
-import logging, json
+import logging
 from typing import Union
 
-# from apscheduler.schedulers.background import BackgroundScheduler
-
-from common.proto.context_pb2 import ConfigActionEnum, Context, ContextId, DeviceOperationalStatusEnum, EventTypeEnum, DeviceEvent, Device, Empty, Topology, TopologyId
+from common.proto.context_pb2 import  Empty
 from common.Constants import ServiceNameEnum
-# from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME, ServiceNameEnum
-from common.Settings import (
+from common.Settings import ( 
     ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc)
 from common.tests.MockServicerImpl_Context import MockServicerImpl_Context
 from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server
-# from common.proto.kpi_sample_types_pb2 import KpiSampleType
-# from common.tools.object_factory.Context import json_context, json_context_id
-# from common.tools.object_factory.Topology import json_topology, json_topology_id
-# from common.proto.monitoring_pb2 import KpiId, KpiDescriptor, SubsDescriptor, SubsList, AlarmID, \
-#     AlarmDescriptor, AlarmList, KpiDescriptorList, SubsResponse, AlarmResponse, RawKpiTable #, Kpi, KpiList
+
 from common.proto.kpi_management_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from context.client.ContextClient import ContextClient
 
-
 from device.service.driver_api.DriverFactory import DriverFactory
 from device.service.driver_api.DriverInstanceCache import DriverInstanceCache
 from device.service.DeviceService import DeviceService
 from device.client.DeviceClient import DeviceClient
 
-from kpi_management.kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_filter_request
-# from monitoring.service.MonitoringService import MonitoringService
-from kpi_management.kpi_manager.service.KpiManagerService import KpiManagerService
-# from monitoring.client.MonitoringClient import MonitoringClient
-from kpi_management.kpi_manager.client.KpiManagerClient import KpiManagerClient
-
-from kpi_management.kpi_manager.service.KpiManagerServiceServicerImpl import KpiManagerServiceServicerImpl
+from kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_filter_request
+from kpi_manager.service.KpiManagerService import KpiManagerService
+from kpi_manager.client.KpiManagerClient import KpiManagerClient
 
-# from monitoring.service.ManagementDBTools import ManagementDB
-# from monitoring.service.MetricsDBTools import MetricsDB
 from monitoring.service.NameMapping import NameMapping
 
 os.environ['DEVICE_EMULATED_ONLY'] = 'TRUE'
diff --git a/src/kpi_management/kpi_manager/tests/test_messages.py b/src/kpi_manager/tests/test_messages.py
similarity index 100%
rename from src/kpi_management/kpi_manager/tests/test_messages.py
rename to src/kpi_manager/tests/test_messages.py
-- 
GitLab