Commit fc11eda5 authored by Javi Moreno's avatar Javi Moreno
Browse files

Try and exceptions added to monitoring service methods

parent 020b747f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ WORKDIR /var/teraflow
RUN mkdir -p /var/teraflow/monitoring
RUN mkdir -p /var/teraflow/common
RUN mkdir -p /var/teraflow/common/tools
RUN mkdir -p /var/teraflow/common/rpc_method_wrapper
RUN mkdir -p /var/teraflow/device
RUN mkdir -p /var/teraflow/device/proto
RUN mkdir -p /var/teraflow/device/client
@@ -39,5 +40,6 @@ COPY device/client/. device/client
COPY device/Config.py device
COPY common/logger.py common
COPY common/tools/. common/tools
COPY common/rpc_method_wrapper/ServiceExceptions.py common/rpc_method_wrapper

ENTRYPOINT ["python", "-m", "monitoring.service"]
+105 −53
Original line number Diff line number Diff line
import os
import grpc
from common.rpc_method_wrapper.ServiceExceptions import ServiceException

import device
from device.Config import GRPC_SERVICE_PORT
from device.client.DeviceClient import DeviceClient
from device.proto import device_pb2
@@ -14,12 +15,39 @@ from common.logger import getJSONLogger
LOGGER = getJSONLogger('monitoringservice-server')
LOGGER.setLevel('DEBUG')

from prometheus_client import Summary
from prometheus_client import Summary, Histogram
from prometheus_client import Counter

MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary('monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request')
MONITORING_INCLUDEKPI_COUNTER = Counter('monitoring_includekpi_counter', 'Monitoring include kpi request counter')

# CREATEKPI_COUNTER_STARTED    = Counter  ('monitoring_createkpi_counter_started',
#                                           'Monitoring:CreateKpi counter of requests started'  )
# CREATEKPI_COUNTER_COMPLETED  = Counter  ('monitoring_createkpi counter_completed',
#                                           'Monitoring:CreateKpi counter of requests completed')
# CREATEKPI_COUNTER_FAILED     = Counter  ('monitoring_createkpi_counter_failed',
#                                           'Monitoring:CreateKpi counter of requests failed'   )
# CREATEKPI_HISTOGRAM_DURATION = Histogram('monitoring_createkpi_histogram_duration',
#                                           'Monitoring:CreateKpi histogram of request duration')
#
# MONITORKPI_COUNTER_STARTED    = Counter  ('monitoring_monitorkpi_counter_started',
#                                           'Monitoring:MonitorKpi counter of requests started'  )
# MONITORKPI_COUNTER_COMPLETED  = Counter  ('monitoring_monitorkpi counter_completed',
#                                           'Monitoring:MonitorKpi counter of requests completed')
# MONITORKPI_COUNTER_FAILED     = Counter  ('monitoring_monitorkpi_counter_failed',
#                                           'Monitoring:MonitorKpi counter of requests failed'   )
# MONITORKPI_HISTOGRAM_DURATION = Histogram('monitoring_monitorkpi_histogram_duration',
#                                           'Monitoring:MonitorKpi histogram of request duration')
#
# INCLUDEKPI_COUNTER_STARTED    = Counter  ('monitoring_includekpi_counter_started',
#                                           'Monitoring:IncludeKpi counter of requests started'  )
# INCLUDEKPI_COUNTER_COMPLETED  = Counter  ('monitoring_includekpi counter_completed',
#                                           'Monitoring:IncludeKpi counter of requests completed')
# INCLUDEKPI_COUNTER_FAILED     = Counter  ('monitoring_includekpi_counter_failed',
#                                           'Monitoring:IncludeKpi counter of requests failed'   )
# INCLUDEKPI_HISTOGRAM_DURATION = Histogram('monitoring_includekpi_histogram_duration',
#                                           'Monitoring:IncludeKpi histogram of request duration')

INFLUXDB_HOSTNAME = os.environ.get("INFLUXDB_HOSTNAME")
INFLUXDB_USER = os.environ.get("INFLUXDB_USER")
INFLUXDB_PASSWORD = os.environ.get("INFLUXDB_PASSWORD")
@@ -37,9 +65,10 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
        self.influx_db = influx_tools.Influx(INFLUXDB_HOSTNAME,"8086",INFLUXDB_USER,INFLUXDB_PASSWORD,INFLUXDB_DATABASE)

    # CreateKpi (CreateKpiRequest) returns (KpiId) {}
    def CreateKpi(self, request : monitoring_pb2.KpiDescriptor, context) -> monitoring_pb2.KpiId :
    def CreateKpi(self, request : monitoring_pb2.KpiDescriptor, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiId :
        # CREATEKPI_COUNTER_STARTED.inc()
        LOGGER.info('CreateKpi')

        try:
            # Here the code to create a sqlite query to crete a KPI and return a KpiID
            kpi_id = monitoring_pb2.KpiId()

@@ -52,13 +81,22 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
            data = self.sql_db.insert_KPI(kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id)
            kpi_id.kpi_id.uuid = str(data)

            # CREATEKPI_COUNTER_COMPLETED.inc()
            return kpi_id
        except ServiceException as e:
            LOGGER.exception('CreateKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()
            grpc_context.abort(e.code, e.details)
        except Exception as e:  # pragma: no cover
            LOGGER.exception('CreateKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()
            grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))

    # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
    def MonitorKpi ( self, request : monitoring_pb2.MonitorKpiRequest, context) -> context_pb2.Empty:
    def MonitorKpi ( self, request : monitoring_pb2.MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:

        LOGGER.info('MonitorKpi')

        try:
            # Creates the request to send to the device service
            monitor_device_request = device_pb2.MonitoringSettings()

@@ -77,13 +115,21 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
            # deviceClient.MonitorDeviceKpi(monitor_device_request)

            return context_pb2.Empty()
        except ServiceException as e:
            LOGGER.exception('MonitorKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()
            grpc_context.abort(e.code, e.details)
        except Exception as e:  # pragma: no cover
            LOGGER.exception('MonitorKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()


    # rpc IncludeKpi(IncludeKpiRequest)  returns(context.Empty)    {}
    def IncludeKpi(self, request : monitoring_pb2.Kpi, context) -> context_pb2.Empty:
    def IncludeKpi(self, request : monitoring_pb2.Kpi, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:

        LOGGER.info('IncludeKpi')

        try:
            kpiDescriptor = self.get_KpiDescriptor(request.kpi_id)

            kpiSampleType   = kpiDescriptor.kpi_sample_type
@@ -100,15 +146,21 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
            self.influx_db.read_KPI_points()

            return context_pb2.Empty()


    def GetStreamKpi ( self, request, context):
        except ServiceException as e:
            LOGGER.exception('IncludeKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()
            grpc_context.abort(e.code, e.details)
        except Exception as e:  # pragma: no cover
            LOGGER.exception('IncludeKpi exception')
            # CREATEKPI_COUNTER_FAILED.inc()

    def GetStreamKpi ( self, request, grpc_context : grpc.ServicerContext):
        # receives monitoring.KpiId returns stream monitoring.Kpi
        LOGGER.info('GetStreamKpi')
        yield monitoring_pb2.Kpi()

    @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
    def GetInstantKpi ( self, request, context):
    def GetInstantKpi ( self, request, grpc_context : grpc.ServicerContext):
        # receives monitoring.KpiId returns monitoring.Kpi
        LOGGER.info('GetInstantKpi')
        return monitoring_pb2.Kpi()