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