Skip to content
Snippets Groups Projects
ContextServiceServicerImpl.py 1.77 KiB
Newer Older
  • Learn to ignore specific revisions
  • import grpc, logging
    from prometheus_client import Counter, Histogram
    
    from context.proto.context_pb2 import Topology
    
    from context.proto.context_pb2_grpc import ContextServiceServicer
    
    LOGGER = logging.getLogger(__name__)
    
    GETTOPOLOGY_COUNTER_STARTED    = Counter  ('context_gettopology_counter_started',
                                              'Context:GetTopology counter of requests started'  )
    GETTOPOLOGY_COUNTER_COMPLETED  = Counter  ('context_gettopology_counter_completed',
                                              'Context:GetTopology counter of requests completed')
    GETTOPOLOGY_COUNTER_FAILED     = Counter  ('context_gettopology_counter_failed',
                                              'Context:GetTopology counter of requests failed'   )
    GETTOPOLOGY_HISTOGRAM_DURATION = Histogram('context_gettopology_histogram_duration',
                                              'Context:GetTopology histogram of request duration')
    
    class ContextServiceServicerImpl(ContextServiceServicer):
        def __init__(self, database):
            LOGGER.debug('Creating Servicer...')
            self.database = database
            LOGGER.debug('Servicer Created')
    
        @GETTOPOLOGY_HISTOGRAM_DURATION.time()
        def GetTopology(self, request, context):
            # request=Empty(), returns=Topology()
            GETTOPOLOGY_COUNTER_STARTED.inc()
            try:
                LOGGER.debug('GetTopology request: {}'.format(str(request)))
                reply = Topology(**self.database.get_topology())
                LOGGER.debug('GetTopology reply: {}'.format(str(reply)))
                GETTOPOLOGY_COUNTER_COMPLETED.inc()
                return reply
            except:
                LOGGER.exception('GetTopology exception')
                GETTOPOLOGY_COUNTER_FAILED.inc()
                context.set_code(grpc.StatusCode.INTERNAL)
                return Topology()