diff --git a/src/monitoring/context_pb2.py b/src/monitoring/context_pb2.py
index 255f813e75bf6dd3f70cb1bc1cf80d676e339c66..5930d483e211a51816f87595ed4bb12848ee9a44 100644
--- a/src/monitoring/context_pb2.py
+++ b/src/monitoring/context_pb2.py
@@ -1,7 +1,8 @@
-# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: context.proto
-"""Generated protocol buffer code."""
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
@@ -12,7 +13,6 @@ from google.protobuf import symbol_database as _symbol_database
 _sym_db = _symbol_database.Default()
 
 
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
@@ -20,33 +20,28 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   package='context',
   syntax='proto3',
   serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\x1a\x1bgoogle/protobuf/empty.proto\"T\n\x07\x43ontext\x12\x1f\n\x04topo\x18\x01 \x01(\x0b\x32\x11.context.Topology\x12(\n\x03\x63tl\x18\x02 \x01(\x0b\x32\x1b.context.TeraFlowController\"H\n\x08Topology\x12\x1f\n\x06\x64\x65vice\x18\x01 \x03(\x0b\x32\x0f.context.Device\x12\x1b\n\x04link\x18\x02 \x03(\x0b\x32\r.context.Link\"1\n\x04Link\x12)\n\x0c\x65ndpointList\x18\x01 \x03(\x0b\x32\x13.context.EndPointId\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"\xda\x01\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12>\n\x14\x64\x65vOperationalStatus\x18\x04 \x01(\x0e\x32 .context.DeviceOperationalStatus\x12\'\n\x0c\x65ndpointList\x18\x05 \x03(\x0b\x32\x11.context.EndPoint\"%\n\x0c\x44\x65viceConfig\x12\x15\n\rdevice_config\x18\x01 \x01(\t\"C\n\x08\x45ndPoint\x12$\n\x07port_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x11\n\tport_type\x18\x02 \x01(\t\"O\n\nEndPointId\x12\x1e\n\x07port_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12!\n\x06\x64\x65v_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\",\n\x08\x44\x65viceId\x12 \n\tdevice_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x12TeraFlowController\x12\x1d\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12\x11\n\tipaddress\x18\x02 \x01(\t\"L\n\x14\x41uthenticationResult\x12\x1d\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*4\n\x17\x44\x65viceOperationalStatus\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x32L\n\x0e\x43ontextService\x12:\n\x0bGetTopology\x12\x16.google.protobuf.Empty\x1a\x11.context.Topology\"\x00\x62\x06proto3'
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
+  serialized_pb=_b('\n\rcontext.proto\x12\x07\x63ontext\"\x07\n\x05\x45mpty\"T\n\x07\x43ontext\x12\x1f\n\x04topo\x18\x01 \x01(\x0b\x32\x11.context.Topology\x12(\n\x03\x63tl\x18\x02 \x01(\x0b\x32\x1b.context.TeraFlowController\"H\n\x08Topology\x12\x1f\n\x06\x64\x65vice\x18\x01 \x03(\x0b\x32\x0f.context.Device\x12\x1b\n\x04link\x18\x02 \x03(\x0b\x32\r.context.Link\"1\n\x04Link\x12)\n\x0c\x65ndpointList\x18\x01 \x03(\x0b\x32\x13.context.EndPointId\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"\xda\x01\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12>\n\x14\x64\x65vOperationalStatus\x18\x04 \x01(\x0e\x32 .context.DeviceOperationalStatus\x12\'\n\x0c\x65ndpointList\x18\x05 \x03(\x0b\x32\x11.context.EndPoint\"%\n\x0c\x44\x65viceConfig\x12\x15\n\rdevice_config\x18\x01 \x01(\t\"C\n\x08\x45ndPoint\x12$\n\x07port_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x11\n\tport_type\x18\x02 \x01(\t\"O\n\nEndPointId\x12\x1e\n\x07port_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12!\n\x06\x64\x65v_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\",\n\x08\x44\x65viceId\x12 \n\tdevice_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x12TeraFlowController\x12\x1d\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12\x11\n\tipaddress\x18\x02 \x01(\t\"L\n\x14\x41uthenticationResult\x12\x1d\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*4\n\x17\x44\x65viceOperationalStatus\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x32\x44\n\x0e\x43ontextService\x12\x32\n\x0bGetTopology\x12\x0e.context.Empty\x1a\x11.context.Topology\"\x00\x62\x06proto3')
+)
 
 _DEVICEOPERATIONALSTATUS = _descriptor.EnumDescriptor(
   name='DeviceOperationalStatus',
   full_name='context.DeviceOperationalStatus',
   filename=None,
   file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='DISABLED', index=0, number=0,
       serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
+      type=None),
     _descriptor.EnumValueDescriptor(
       name='ENABLED', index=1, number=1,
       serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
+      type=None),
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=959,
-  serialized_end=1011,
+  serialized_start=939,
+  serialized_end=991,
 )
 _sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUS)
 
@@ -56,13 +51,36 @@ ENABLED = 1
 
 
 
+_EMPTY = _descriptor.Descriptor(
+  name='Empty',
+  full_name='context.Empty',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=26,
+  serialized_end=33,
+)
+
+
 _CONTEXT = _descriptor.Descriptor(
   name='Context',
   full_name='context.Context',
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='topo', full_name='context.Context.topo', index=0,
@@ -70,14 +88,14 @@ _CONTEXT = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='ctl', full_name='context.Context.ctl', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -90,8 +108,8 @@ _CONTEXT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=55,
-  serialized_end=139,
+  serialized_start=35,
+  serialized_end=119,
 )
 
 
@@ -101,7 +119,6 @@ _TOPOLOGY = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device', full_name='context.Topology.device', index=0,
@@ -109,14 +126,14 @@ _TOPOLOGY = _descriptor.Descriptor(
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='link', full_name='context.Topology.link', index=1,
       number=2, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -129,8 +146,8 @@ _TOPOLOGY = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=141,
-  serialized_end=213,
+  serialized_start=121,
+  serialized_end=193,
 )
 
 
@@ -140,7 +157,6 @@ _LINK = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='endpointList', full_name='context.Link.endpointList', index=0,
@@ -148,7 +164,7 @@ _LINK = _descriptor.Descriptor(
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -161,8 +177,8 @@ _LINK = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=215,
-  serialized_end=264,
+  serialized_start=195,
+  serialized_end=244,
 )
 
 
@@ -172,22 +188,21 @@ _CONSTRAINT = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='constraint_type', full_name='context.Constraint.constraint_type', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='constraint_value', full_name='context.Constraint.constraint_value', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -200,8 +215,8 @@ _CONSTRAINT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=266,
-  serialized_end=329,
+  serialized_start=246,
+  serialized_end=309,
 )
 
 
@@ -211,7 +226,6 @@ _DEVICE = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_id', full_name='context.Device.device_id', index=0,
@@ -219,35 +233,35 @@ _DEVICE = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='device_type', full_name='context.Device.device_type', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='device_config', full_name='context.Device.device_config', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='devOperationalStatus', full_name='context.Device.devOperationalStatus', index=3,
       number=4, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='endpointList', full_name='context.Device.endpointList', index=4,
       number=5, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -260,8 +274,8 @@ _DEVICE = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=332,
-  serialized_end=550,
+  serialized_start=312,
+  serialized_end=530,
 )
 
 
@@ -271,15 +285,14 @@ _DEVICECONFIG = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_config', full_name='context.DeviceConfig.device_config', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -292,8 +305,8 @@ _DEVICECONFIG = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=552,
-  serialized_end=589,
+  serialized_start=532,
+  serialized_end=569,
 )
 
 
@@ -303,7 +316,6 @@ _ENDPOINT = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='port_id', full_name='context.EndPoint.port_id', index=0,
@@ -311,14 +323,14 @@ _ENDPOINT = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='port_type', full_name='context.EndPoint.port_type', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -331,8 +343,8 @@ _ENDPOINT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=591,
-  serialized_end=658,
+  serialized_start=571,
+  serialized_end=638,
 )
 
 
@@ -342,7 +354,6 @@ _ENDPOINTID = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='port_id', full_name='context.EndPointId.port_id', index=0,
@@ -350,14 +361,14 @@ _ENDPOINTID = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='dev_id', full_name='context.EndPointId.dev_id', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -370,8 +381,8 @@ _ENDPOINTID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=660,
-  serialized_end=739,
+  serialized_start=640,
+  serialized_end=719,
 )
 
 
@@ -381,7 +392,6 @@ _DEVICEID = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_id', full_name='context.DeviceId.device_id', index=0,
@@ -389,7 +399,7 @@ _DEVICEID = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -402,8 +412,8 @@ _DEVICEID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=741,
-  serialized_end=785,
+  serialized_start=721,
+  serialized_end=765,
 )
 
 
@@ -413,15 +423,14 @@ _UUID = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='uuid', full_name='context.Uuid.uuid', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -434,8 +443,8 @@ _UUID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=787,
-  serialized_end=807,
+  serialized_start=767,
+  serialized_end=787,
 )
 
 
@@ -445,7 +454,6 @@ _TERAFLOWCONTROLLER = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='ctl_id', full_name='context.TeraFlowController.ctl_id', index=0,
@@ -453,14 +461,14 @@ _TERAFLOWCONTROLLER = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='ipaddress', full_name='context.TeraFlowController.ipaddress', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -473,8 +481,8 @@ _TERAFLOWCONTROLLER = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=809,
-  serialized_end=879,
+  serialized_start=789,
+  serialized_end=859,
 )
 
 
@@ -484,7 +492,6 @@ _AUTHENTICATIONRESULT = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='ctl_id', full_name='context.AuthenticationResult.ctl_id', index=0,
@@ -492,14 +499,14 @@ _AUTHENTICATIONRESULT = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1,
       number=2, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -512,8 +519,8 @@ _AUTHENTICATIONRESULT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=881,
-  serialized_end=957,
+  serialized_start=861,
+  serialized_end=937,
 )
 
 _CONTEXT.fields_by_name['topo'].message_type = _TOPOLOGY
@@ -531,6 +538,7 @@ _ENDPOINTID.fields_by_name['dev_id'].message_type = _DEVICEID
 _DEVICEID.fields_by_name['device_id'].message_type = _UUID
 _TERAFLOWCONTROLLER.fields_by_name['ctl_id'].message_type = _UUID
 _AUTHENTICATIONRESULT.fields_by_name['ctl_id'].message_type = _UUID
+DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
 DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT
 DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY
 DESCRIPTOR.message_types_by_name['Link'] = _LINK
@@ -546,88 +554,95 @@ DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT
 DESCRIPTOR.enum_types_by_name['DeviceOperationalStatus'] = _DEVICEOPERATIONALSTATUS
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXT,
-  '__module__' : 'context_pb2'
+Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), dict(
+  DESCRIPTOR = _EMPTY,
+  __module__ = 'context_pb2'
+  # @@protoc_insertion_point(class_scope:context.Empty)
+  ))
+_sym_db.RegisterMessage(Empty)
+
+Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), dict(
+  DESCRIPTOR = _CONTEXT,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Context)
-  })
+  ))
 _sym_db.RegisterMessage(Context)
 
-Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGY,
-  '__module__' : 'context_pb2'
+Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), dict(
+  DESCRIPTOR = _TOPOLOGY,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Topology)
-  })
+  ))
 _sym_db.RegisterMessage(Topology)
 
-Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-  'DESCRIPTOR' : _LINK,
-  '__module__' : 'context_pb2'
+Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), dict(
+  DESCRIPTOR = _LINK,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Link)
-  })
+  ))
 _sym_db.RegisterMessage(Link)
 
-Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), {
-  'DESCRIPTOR' : _CONSTRAINT,
-  '__module__' : 'context_pb2'
+Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), dict(
+  DESCRIPTOR = _CONSTRAINT,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Constraint)
-  })
+  ))
 _sym_db.RegisterMessage(Constraint)
 
-Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICE,
-  '__module__' : 'context_pb2'
+Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), dict(
+  DESCRIPTOR = _DEVICE,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Device)
-  })
+  ))
 _sym_db.RegisterMessage(Device)
 
-DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICECONFIG,
-  '__module__' : 'context_pb2'
+DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), dict(
+  DESCRIPTOR = _DEVICECONFIG,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.DeviceConfig)
-  })
+  ))
 _sym_db.RegisterMessage(DeviceConfig)
 
-EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINT,
-  '__module__' : 'context_pb2'
+EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), dict(
+  DESCRIPTOR = _ENDPOINT,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.EndPoint)
-  })
+  ))
 _sym_db.RegisterMessage(EndPoint)
 
-EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINTID,
-  '__module__' : 'context_pb2'
+EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), dict(
+  DESCRIPTOR = _ENDPOINTID,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.EndPointId)
-  })
+  ))
 _sym_db.RegisterMessage(EndPointId)
 
-DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEID,
-  '__module__' : 'context_pb2'
+DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), dict(
+  DESCRIPTOR = _DEVICEID,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.DeviceId)
-  })
+  ))
 _sym_db.RegisterMessage(DeviceId)
 
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
-  'DESCRIPTOR' : _UUID,
-  '__module__' : 'context_pb2'
+Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), dict(
+  DESCRIPTOR = _UUID,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.Uuid)
-  })
+  ))
 _sym_db.RegisterMessage(Uuid)
 
-TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), {
-  'DESCRIPTOR' : _TERAFLOWCONTROLLER,
-  '__module__' : 'context_pb2'
+TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), dict(
+  DESCRIPTOR = _TERAFLOWCONTROLLER,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.TeraFlowController)
-  })
+  ))
 _sym_db.RegisterMessage(TeraFlowController)
 
-AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), {
-  'DESCRIPTOR' : _AUTHENTICATIONRESULT,
-  '__module__' : 'context_pb2'
+AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), dict(
+  DESCRIPTOR = _AUTHENTICATIONRESULT,
+  __module__ = 'context_pb2'
   # @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-  })
+  ))
 _sym_db.RegisterMessage(AuthenticationResult)
 
 
@@ -638,19 +653,17 @@ _CONTEXTSERVICE = _descriptor.ServiceDescriptor(
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=1013,
-  serialized_end=1089,
+  serialized_start=993,
+  serialized_end=1061,
   methods=[
   _descriptor.MethodDescriptor(
     name='GetTopology',
     full_name='context.ContextService.GetTopology',
     index=0,
     containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
+    input_type=_EMPTY,
     output_type=_TOPOLOGY,
     serialized_options=None,
-    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE)
diff --git a/src/monitoring/context_pb2_grpc.py b/src/monitoring/context_pb2_grpc.py
index 046c7246e99e9c89c8a1b41268415cdc0f330d34..d64835e12d21e68616361612e959d3fd6393ab6a 100644
--- a/src/monitoring/context_pb2_grpc.py
+++ b/src/monitoring/context_pb2_grpc.py
@@ -1,67 +1,46 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import context_pb2 as context__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 class ContextServiceStub(object):
-    """Missing associated documentation comment in .proto file."""
+  # missing associated documentation comment in .proto file
+  pass
 
-    def __init__(self, channel):
-        """Constructor.
+  def __init__(self, channel):
+    """Constructor.
 
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.GetTopology = channel.unary_unary(
-                '/context.ContextService/GetTopology',
-                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-                response_deserializer=context__pb2.Topology.FromString,
-                )
+    Args:
+      channel: A grpc.Channel.
+    """
+    self.GetTopology = channel.unary_unary(
+        '/context.ContextService/GetTopology',
+        request_serializer=context__pb2.Empty.SerializeToString,
+        response_deserializer=context__pb2.Topology.FromString,
+        )
 
 
 class ContextServiceServicer(object):
-    """Missing associated documentation comment in .proto file."""
+  # missing associated documentation comment in .proto file
+  pass
 
-    def GetTopology(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
+  def GetTopology(self, request, context):
+    # missing associated documentation comment in .proto file
+    pass
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
 
 
 def add_ContextServiceServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'GetTopology': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetTopology,
-                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-                    response_serializer=context__pb2.Topology.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'context.ContextService', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class ContextService(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def GetTopology(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/context.ContextService/GetTopology',
-            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-            context__pb2.Topology.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+  rpc_method_handlers = {
+      'GetTopology': grpc.unary_unary_rpc_method_handler(
+          servicer.GetTopology,
+          request_deserializer=context__pb2.Empty.FromString,
+          response_serializer=context__pb2.Topology.SerializeToString,
+      ),
+  }
+  generic_handler = grpc.method_handlers_generic_handler(
+      'context.ContextService', rpc_method_handlers)
+  server.add_generic_rpc_handlers((generic_handler,))
diff --git a/src/monitoring/monitoring_pb2.py b/src/monitoring/monitoring_pb2.py
index 0f0a9d07634ce5a383eb00f1246d557c0c0667e4..ec4e1a9560c4b0da040c5645c893eb97d84dd6aa 100644
--- a/src/monitoring/monitoring_pb2.py
+++ b/src/monitoring/monitoring_pb2.py
@@ -1,7 +1,8 @@
-# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: monitoring.proto
-"""Generated protocol buffer code."""
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -11,7 +12,6 @@ from google.protobuf import symbol_database as _symbol_database
 _sym_db = _symbol_database.Default()
 
 
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 import context_pb2 as context__pb2
 
 
@@ -20,10 +20,9 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   package='monitoring',
   syntax='proto3',
   serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x10monitoring.proto\x12\nmonitoring\x1a\x1bgoogle/protobuf/empty.proto\x1a\rcontext.proto\"|\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value2\xfb\x01\n\x11MonitoringService\x12\x37\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x16.google.protobuf.Empty\"\x00\x12=\n\nMonitorKpi\x12\x15.monitoring.KpiDevice\x1a\x16.google.protobuf.Empty\"\x00\x12\x37\n\rGetStream_kpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3'
+  serialized_pb=_b('\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\"|\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value2\xeb\x01\n\x11MonitoringService\x12/\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x0e.context.Empty\"\x00\x12\x35\n\nMonitorKpi\x12\x15.monitoring.KpiDevice\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetStream_kpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3')
   ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,context__pb2.DESCRIPTOR,])
+  dependencies=[context__pb2.DESCRIPTOR,])
 
 
 
@@ -34,7 +33,6 @@ _KPI = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='kpi_id', full_name='monitoring.Kpi.kpi_id', index=0,
@@ -42,28 +40,28 @@ _KPI = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='timestamp', full_name='monitoring.Kpi.timestamp', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='kpiDescription', full_name='monitoring.Kpi.kpiDescription', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='kpi_value', full_name='monitoring.Kpi.kpi_value', index=3,
       number=4, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -76,8 +74,8 @@ _KPI = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=76,
-  serialized_end=200,
+  serialized_start=47,
+  serialized_end=171,
 )
 
 
@@ -87,7 +85,6 @@ _KPIID = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='kpi_id', full_name='monitoring.KpiId.kpi_id', index=0,
@@ -95,7 +92,7 @@ _KPIID = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -108,8 +105,8 @@ _KPIID = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=202,
-  serialized_end=240,
+  serialized_start=173,
+  serialized_end=211,
 )
 
 
@@ -119,7 +116,6 @@ _KPIDEVICE = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='kpi_id', full_name='monitoring.KpiDevice.kpi_id', index=0,
@@ -127,14 +123,14 @@ _KPIDEVICE = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='device_id', full_name='monitoring.KpiDevice.device_id', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -147,8 +143,8 @@ _KPIDEVICE = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=242,
-  serialized_end=326,
+  serialized_start=213,
+  serialized_end=297,
 )
 
 
@@ -158,7 +154,6 @@ _KPILIST = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='kpiList', full_name='monitoring.KpiList.kpiList', index=0,
@@ -166,7 +161,7 @@ _KPILIST = _descriptor.Descriptor(
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -179,8 +174,8 @@ _KPILIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=328,
-  serialized_end=371,
+  serialized_start=299,
+  serialized_end=342,
 )
 
 
@@ -190,7 +185,6 @@ _KPIVALUE = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
-  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='intVal', full_name='monitoring.KpiValue.intVal', index=0,
@@ -198,21 +192,21 @@ _KPIVALUE = _descriptor.Descriptor(
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='stringVal', full_name='monitoring.KpiValue.stringVal', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
+      has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='boolVal', full_name='monitoring.KpiValue.boolVal', index=2,
       number=3, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -226,12 +220,10 @@ _KPIVALUE = _descriptor.Descriptor(
   oneofs=[
     _descriptor.OneofDescriptor(
       name='value', full_name='monitoring.KpiValue.value',
-      index=0, containing_type=None,
-      create_key=_descriptor._internal_create_key,
-    fields=[]),
+      index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=373,
-  serialized_end=450,
+  serialized_start=344,
+  serialized_end=421,
 )
 
 _KPI.fields_by_name['kpi_id'].message_type = _KPIID
@@ -256,39 +248,39 @@ DESCRIPTOR.message_types_by_name['KpiList'] = _KPILIST
 DESCRIPTOR.message_types_by_name['KpiValue'] = _KPIVALUE
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), {
-  'DESCRIPTOR' : _KPI,
-  '__module__' : 'monitoring_pb2'
+Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), dict(
+  DESCRIPTOR = _KPI,
+  __module__ = 'monitoring_pb2'
   # @@protoc_insertion_point(class_scope:monitoring.Kpi)
-  })
+  ))
 _sym_db.RegisterMessage(Kpi)
 
-KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), {
-  'DESCRIPTOR' : _KPIID,
-  '__module__' : 'monitoring_pb2'
+KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), dict(
+  DESCRIPTOR = _KPIID,
+  __module__ = 'monitoring_pb2'
   # @@protoc_insertion_point(class_scope:monitoring.KpiId)
-  })
+  ))
 _sym_db.RegisterMessage(KpiId)
 
-KpiDevice = _reflection.GeneratedProtocolMessageType('KpiDevice', (_message.Message,), {
-  'DESCRIPTOR' : _KPIDEVICE,
-  '__module__' : 'monitoring_pb2'
+KpiDevice = _reflection.GeneratedProtocolMessageType('KpiDevice', (_message.Message,), dict(
+  DESCRIPTOR = _KPIDEVICE,
+  __module__ = 'monitoring_pb2'
   # @@protoc_insertion_point(class_scope:monitoring.KpiDevice)
-  })
+  ))
 _sym_db.RegisterMessage(KpiDevice)
 
-KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,), {
-  'DESCRIPTOR' : _KPILIST,
-  '__module__' : 'monitoring_pb2'
+KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,), dict(
+  DESCRIPTOR = _KPILIST,
+  __module__ = 'monitoring_pb2'
   # @@protoc_insertion_point(class_scope:monitoring.KpiList)
-  })
+  ))
 _sym_db.RegisterMessage(KpiList)
 
-KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), {
-  'DESCRIPTOR' : _KPIVALUE,
-  '__module__' : 'monitoring_pb2'
+KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), dict(
+  DESCRIPTOR = _KPIVALUE,
+  __module__ = 'monitoring_pb2'
   # @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-  })
+  ))
 _sym_db.RegisterMessage(KpiValue)
 
 
@@ -299,9 +291,8 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=453,
-  serialized_end=704,
+  serialized_start=424,
+  serialized_end=659,
   methods=[
   _descriptor.MethodDescriptor(
     name='IncludeKpi',
@@ -309,9 +300,8 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     index=0,
     containing_service=None,
     input_type=_KPI,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
+    output_type=context__pb2._EMPTY,
     serialized_options=None,
-    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='MonitorKpi',
@@ -319,9 +309,8 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     index=1,
     containing_service=None,
     input_type=_KPIDEVICE,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
+    output_type=context__pb2._EMPTY,
     serialized_options=None,
-    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='GetStream_kpi',
@@ -331,7 +320,6 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     input_type=_KPIID,
     output_type=_KPI,
     serialized_options=None,
-    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='GetInstantKpi',
@@ -341,7 +329,6 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
     input_type=_KPIID,
     output_type=_KPI,
     serialized_options=None,
-    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_MONITORINGSERVICE)
diff --git a/src/monitoring/monitoring_pb2_grpc.py b/src/monitoring/monitoring_pb2_grpc.py
index 14de0299f788c7196f516e343b12e2bc6c934c24..10904ec3785342e05b730de0456cf25b443af7d1 100644
--- a/src/monitoring/monitoring_pb2_grpc.py
+++ b/src/monitoring/monitoring_pb2_grpc.py
@@ -1,166 +1,98 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+import context_pb2 as context__pb2
 import monitoring_pb2 as monitoring__pb2
 
 
 class MonitoringServiceStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.IncludeKpi = channel.unary_unary(
-                '/monitoring.MonitoringService/IncludeKpi',
-                request_serializer=monitoring__pb2.Kpi.SerializeToString,
-                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-                )
-        self.MonitorKpi = channel.unary_unary(
-                '/monitoring.MonitoringService/MonitorKpi',
-                request_serializer=monitoring__pb2.KpiDevice.SerializeToString,
-                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-                )
-        self.GetStream_kpi = channel.unary_stream(
-                '/monitoring.MonitoringService/GetStream_kpi',
-                request_serializer=monitoring__pb2.KpiId.SerializeToString,
-                response_deserializer=monitoring__pb2.Kpi.FromString,
-                )
-        self.GetInstantKpi = channel.unary_unary(
-                '/monitoring.MonitoringService/GetInstantKpi',
-                request_serializer=monitoring__pb2.KpiId.SerializeToString,
-                response_deserializer=monitoring__pb2.Kpi.FromString,
-                )
+  # missing associated documentation comment in .proto file
+  pass
+
+  def __init__(self, channel):
+    """Constructor.
+
+    Args:
+      channel: A grpc.Channel.
+    """
+    self.IncludeKpi = channel.unary_unary(
+        '/monitoring.MonitoringService/IncludeKpi',
+        request_serializer=monitoring__pb2.Kpi.SerializeToString,
+        response_deserializer=context__pb2.Empty.FromString,
+        )
+    self.MonitorKpi = channel.unary_unary(
+        '/monitoring.MonitoringService/MonitorKpi',
+        request_serializer=monitoring__pb2.KpiDevice.SerializeToString,
+        response_deserializer=context__pb2.Empty.FromString,
+        )
+    self.GetStream_kpi = channel.unary_stream(
+        '/monitoring.MonitoringService/GetStream_kpi',
+        request_serializer=monitoring__pb2.KpiId.SerializeToString,
+        response_deserializer=monitoring__pb2.Kpi.FromString,
+        )
+    self.GetInstantKpi = channel.unary_unary(
+        '/monitoring.MonitoringService/GetInstantKpi',
+        request_serializer=monitoring__pb2.KpiId.SerializeToString,
+        response_deserializer=monitoring__pb2.Kpi.FromString,
+        )
 
 
 class MonitoringServiceServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def IncludeKpi(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def MonitorKpi(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetStream_kpi(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetInstantKpi(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
+  # missing associated documentation comment in .proto file
+  pass
+
+  def IncludeKpi(self, request, context):
+    # missing associated documentation comment in .proto file
+    pass
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def MonitorKpi(self, request, context):
+    # missing associated documentation comment in .proto file
+    pass
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetStream_kpi(self, request, context):
+    # missing associated documentation comment in .proto file
+    pass
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetInstantKpi(self, request, context):
+    # missing associated documentation comment in .proto file
+    pass
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
 
 
 def add_MonitoringServiceServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'IncludeKpi': grpc.unary_unary_rpc_method_handler(
-                    servicer.IncludeKpi,
-                    request_deserializer=monitoring__pb2.Kpi.FromString,
-                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-            ),
-            'MonitorKpi': grpc.unary_unary_rpc_method_handler(
-                    servicer.MonitorKpi,
-                    request_deserializer=monitoring__pb2.KpiDevice.FromString,
-                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-            ),
-            'GetStream_kpi': grpc.unary_stream_rpc_method_handler(
-                    servicer.GetStream_kpi,
-                    request_deserializer=monitoring__pb2.KpiId.FromString,
-                    response_serializer=monitoring__pb2.Kpi.SerializeToString,
-            ),
-            'GetInstantKpi': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetInstantKpi,
-                    request_deserializer=monitoring__pb2.KpiId.FromString,
-                    response_serializer=monitoring__pb2.Kpi.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'monitoring.MonitoringService', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class MonitoringService(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def IncludeKpi(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/IncludeKpi',
-            monitoring__pb2.Kpi.SerializeToString,
-            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def MonitorKpi(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/MonitorKpi',
-            monitoring__pb2.KpiDevice.SerializeToString,
-            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetStream_kpi(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_stream(request, target, '/monitoring.MonitoringService/GetStream_kpi',
-            monitoring__pb2.KpiId.SerializeToString,
-            monitoring__pb2.Kpi.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetInstantKpi(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/monitoring.MonitoringService/GetInstantKpi',
-            monitoring__pb2.KpiId.SerializeToString,
-            monitoring__pb2.Kpi.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+  rpc_method_handlers = {
+      'IncludeKpi': grpc.unary_unary_rpc_method_handler(
+          servicer.IncludeKpi,
+          request_deserializer=monitoring__pb2.Kpi.FromString,
+          response_serializer=context__pb2.Empty.SerializeToString,
+      ),
+      'MonitorKpi': grpc.unary_unary_rpc_method_handler(
+          servicer.MonitorKpi,
+          request_deserializer=monitoring__pb2.KpiDevice.FromString,
+          response_serializer=context__pb2.Empty.SerializeToString,
+      ),
+      'GetStream_kpi': grpc.unary_stream_rpc_method_handler(
+          servicer.GetStream_kpi,
+          request_deserializer=monitoring__pb2.KpiId.FromString,
+          response_serializer=monitoring__pb2.Kpi.SerializeToString,
+      ),
+      'GetInstantKpi': grpc.unary_unary_rpc_method_handler(
+          servicer.GetInstantKpi,
+          request_deserializer=monitoring__pb2.KpiId.FromString,
+          response_serializer=monitoring__pb2.Kpi.SerializeToString,
+      ),
+  }
+  generic_handler = grpc.method_handlers_generic_handler(
+      'monitoring.MonitoringService', rpc_method_handlers)
+  server.add_generic_rpc_handlers((generic_handler,))
diff --git a/src/monitoring/monitoring_server.py b/src/monitoring/monitoring_server.py
index 0559356aa7c64a78e61a07aa870a5c35679228bf..e7713e44d3d59db572f2c13676a289883d20f7bb 100644
--- a/src/monitoring/monitoring_server.py
+++ b/src/monitoring/monitoring_server.py
@@ -19,9 +19,16 @@ from logger import getJSONLogger
 logger = getJSONLogger('monitoringservice-server')
 logger.setLevel('DEBUG')
 
+from prometheus_client import start_http_server, Summary
 
 import threading
 
+from prometheus_client import start_http_server, Summary
+from prometheus_client import Counter, Gauge
+
+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')
+
 
 class monitoringService(monitoring_pb2_grpc.MonitoringServiceServicer):
     def __init__(self):
@@ -31,6 +38,7 @@ class monitoringService(monitoring_pb2_grpc.MonitoringServiceServicer):
     def IncludeKpi(self, request, context):
         #KPI, returns empty
         logger.info("IncludeKpi")
+        MONITORING_INCLUDEKPI_COUNTER.inc()
         return 
 
 
@@ -44,6 +52,7 @@ class monitoringService(monitoring_pb2_grpc.MonitoringServiceServicer):
         logger.info("IncludeKpi")
         return 
 
+    @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
     def GetInstantKpi ( self, request, context):
         #KpiId ) returns ( Kpi) {}
         logger.info("IncludeKpi")
diff --git a/src/monitoring/requirements.in b/src/monitoring/requirements.in
index 418c083b58a4eb259c5a79947c9f6bd0ba656006..b7eda3d6bcc625e18887caec6dc18a4f17b0c31c 100644
--- a/src/monitoring/requirements.in
+++ b/src/monitoring/requirements.in
@@ -6,4 +6,5 @@ opencensus[stackdriver]
 python-json-logger
 google-cloud-profiler
 numpy
+prometheus-client