Commit 0201c74b authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Common - Tests:

- InMemoryObjectDatabase: Corrected default log level and initialization of internal database
- InMemoryTimeSeriesDatabase: Corrected default log level
- MockServicerImpl_Context: Migrated to use InMemoryObjectDatabase and corrected default log level
- MockServicerImpl_Monitoring: Corrected default log level and log messages; fixed method signatures and imports
parent eb22672f
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -16,11 +16,10 @@ import grpc, logging
from typing import Any, Dict, List, Set
from typing import Any, Dict, List, Set


LOGGER = logging.getLogger(__name__)
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.INFO)


class InMemoryObjectDatabase:
class InMemoryObjectDatabase:
    def __init__(self) -> None:
    def __init__(self) -> None:
        self._database : Dict[str, Dict[str, Any]] = {}
        self._database : Dict[str, Dict[str, Any]] = dict()


    def _get_container(self, container_name : str) -> Dict[str, Any]:
    def _get_container(self, container_name : str) -> Dict[str, Any]:
        return self._database.setdefault(container_name, {})
        return self._database.setdefault(container_name, {})
+0 −1
Original line number Original line Diff line number Diff line
@@ -16,7 +16,6 @@ import logging, pandas
from typing import List, Optional
from typing import List, Optional


LOGGER = logging.getLogger(__name__)
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.INFO)


class InMemoryTimeSeriesDatabase:
class InMemoryTimeSeriesDatabase:
    def __init__(self) -> None:
    def __init__(self) -> None:
+151 −198

File changed.

Preview size limit exceeded, changes collapsed.

+19 −19
Original line number Original line Diff line number Diff line
@@ -12,9 +12,9 @@
# See the License for the specific language governing permissions and
# See the License for the specific language governing permissions and
# limitations under the License.
# limitations under the License.


import enum, grpc, logging, pandas
import enum, grpc, logging
from queue import Queue
from queue import Queue
from typing import Optional
from typing import Any, Optional
from common.proto.context_pb2 import Empty
from common.proto.context_pb2 import Empty
from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiDescriptorList, KpiId, KpiQuery, RawKpiTable
from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiDescriptorList, KpiId, KpiQuery, RawKpiTable
from common.proto.monitoring_pb2_grpc import MonitoringServiceServicer
from common.proto.monitoring_pb2_grpc import MonitoringServiceServicer
@@ -31,61 +31,61 @@ class MockServicerImpl_Monitoring(MonitoringServiceServicer):
    def __init__(
    def __init__(
        self, queue_samples : Optional[Queue] = None
        self, queue_samples : Optional[Queue] = None
    ) -> None:
    ) -> None:
        LOGGER.info('[__init__] Creating Servicer...')
        LOGGER.debug('[__init__] Creating Servicer...')
        if queue_samples is None: queue_samples = Queue()
        if queue_samples is None: queue_samples = Queue()
        self.queue_samples = queue_samples
        self.queue_samples = queue_samples
        self.obj_db = InMemoryObjectDatabase()
        self.obj_db = InMemoryObjectDatabase()
        self.ts_db  = InMemoryTimeSeriesDatabase()
        self.ts_db  = InMemoryTimeSeriesDatabase()
        LOGGER.info('[__init__] Servicer Created')
        LOGGER.debug('[__init__] Servicer Created')


    # ----- Common -----------------------------------------------------------------------------------------------------
    # ----- Common -----------------------------------------------------------------------------------------------------


    def _set(self, container_name, entry_uuid, entry_id_field_name, entry):
    def _set(self, container_name, entry_uuid, entry_id_field_name, entry) -> Any:
        entry = self.obj_db.set_entry(container_name, entry_uuid, entry)
        entry = self.obj_db.set_entry(container_name, entry_uuid, entry)
        return getattr(entry, entry_id_field_name)
        return getattr(entry, entry_id_field_name)


    def _del(self, container_name, entry_uuid, grpc_context):
    def _del(self, container_name, entry_uuid, grpc_context) -> Empty:
        self.obj_db.del_entry(container_name, entry_uuid, grpc_context)
        self.obj_db.del_entry(container_name, entry_uuid, grpc_context)
        return Empty()
        return Empty()


    # ----- KPI Descriptor ---------------------------------------------------------------------------------------------
    # ----- KPI Descriptor ---------------------------------------------------------------------------------------------


    def GetKpiDescriptorList(self, request : Empty, context : grpc.ServicerContext) -> KpiDescriptorList:
    def GetKpiDescriptorList(self, request : Empty, context : grpc.ServicerContext) -> KpiDescriptorList:
        LOGGER.info('[GetKpiDescriptorList] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[GetKpiDescriptorList] request={:s}'.format(grpc_message_to_json_string(request)))
        kpi_descriptor_list = self.obj_db.get_entries(IMDB_ContainersEnum.KPI_DESCRIPTORS.value)
        kpi_descriptor_list = self.obj_db.get_entries(IMDB_ContainersEnum.KPI_DESCRIPTORS.value)
        reply = KpiDescriptorList(kpi_descriptor_list=kpi_descriptor_list)
        reply = KpiDescriptorList(kpi_descriptor_list=kpi_descriptor_list)
        LOGGER.info('[GetKpiDescriptorList] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[GetKpiDescriptorList] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply


    def GetKpiDescriptor(self, request : KpiId, context : grpc.ServicerContext) -> KpiDescriptor:
    def GetKpiDescriptor(self, request : KpiId, context : grpc.ServicerContext) -> KpiDescriptor:
        LOGGER.info('[GetKpiDescriptor] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[GetKpiDescriptor] request={:s}'.format(grpc_message_to_json_string(request)))
        reply = self.obj_db.get_entry(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.uuid, context)
        reply = self.obj_db.get_entry(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.uuid, context)
        LOGGER.info('[GetKpiDescriptor] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[GetKpiDescriptor] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply


    def SetKpi(self, request : KpiDescriptor, context : grpc.ServicerContext) -> KpiId:
    def SetKpi(self, request : KpiDescriptor, context : grpc.ServicerContext) -> KpiId:
        LOGGER.info('[SetKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[SetKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        reply = self._set(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.kpi_id.uuid, 'kpi_id', request)
        reply = self._set(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.kpi_id.uuid, 'kpi_id', request)
        LOGGER.info('[SetKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[SetKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply


    def DeleteKpi(self, request : KpiId, context : grpc.ServicerContext) -> Empty:
    def DeleteKpi(self, request : KpiId, context : grpc.ServicerContext) -> Empty:
        LOGGER.info('[DeleteKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[DeleteKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        reply = self._del(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.kpi_id.uuid, context)
        reply = self._del(IMDB_ContainersEnum.KPI_DESCRIPTORS.value, request.kpi_id.kpi_id.uuid, context)
        LOGGER.info('[DeleteKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[DeleteKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply


    # ----- KPI Sample -------------------------------------------------------------------------------------------------
    # ----- KPI Sample -------------------------------------------------------------------------------------------------


    def IncludeKpi(self, request : Kpi, context : grpc.ServicerContext) -> Empty:
    def IncludeKpi(self, request : Kpi, context : grpc.ServicerContext) -> Empty:
        LOGGER.info('[IncludeKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[IncludeKpi] request={:s}'.format(grpc_message_to_json_string(request)))
        self.queue_samples.put(request)
        self.queue_samples.put(request)
        reply = Empty()
        reply = Empty()
        LOGGER.info('[IncludeKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[IncludeKpi] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply


    def QueryKpiData(self, request : KpiQuery, context : grpc.ServicerContext) -> RawKpiTable:
    def QueryKpiData(self, request : KpiQuery, context : grpc.ServicerContext) -> RawKpiTable:
        LOGGER.info('[QueryKpiData] request={:s}'.format(grpc_message_to_json_string(request)))
        LOGGER.debug('[QueryKpiData] request={:s}'.format(grpc_message_to_json_string(request)))
        # TODO: add filters for request.monitoring_window_s
        # TODO: add filters for request.monitoring_window_s
        # TODO: add filters for request.last_n_samples
        # TODO: add filters for request.last_n_samples
        kpi_uuids = [kpi_id.kpi_id.uuid for kpi_id in request.kpi_ids]
        kpi_uuids = [kpi_id.kpi_id.uuid for kpi_id in request.kpi_ids]
@@ -97,7 +97,7 @@ class MockServicerImpl_Monitoring(MonitoringServiceServicer):
        if end_timestamp <= 0: end_timestamp = None
        if end_timestamp <= 0: end_timestamp = None


        df_samples = self.ts_db.filter(kpi_uuids, start_timestamp=start_timestamp, end_timestamp=end_timestamp)
        df_samples = self.ts_db.filter(kpi_uuids, start_timestamp=start_timestamp, end_timestamp=end_timestamp)
        LOGGER.info('[QueryKpiData] df_samples={:s}'.format(df_samples.to_string()))
        #LOGGER.debug('[QueryKpiData] df_samples={:s}'.format(df_samples.to_string()))
        reply = RawKpiTable()
        reply = RawKpiTable()
        kpi_uuid__to__raw_kpi_list = dict()
        kpi_uuid__to__raw_kpi_list = dict()


@@ -114,5 +114,5 @@ class MockServicerImpl_Monitoring(MonitoringServiceServicer):
            raw_kpi.timestamp.timestamp = df_sample.timestamp.timestamp()
            raw_kpi.timestamp.timestamp = df_sample.timestamp.timestamp()
            raw_kpi.kpi_value.floatVal  = df_sample.value
            raw_kpi.kpi_value.floatVal  = df_sample.value


        LOGGER.info('[QueryKpiData] reply={:s}'.format(grpc_message_to_json_string(reply)))
        LOGGER.debug('[QueryKpiData] reply={:s}'.format(grpc_message_to_json_string(reply)))
        return reply
        return reply