diff --git a/src/service/service/service_handlers/p4/p4_service_handler.py b/src/service/service/service_handlers/p4/p4_service_handler.py
index 6f2cfb5a9bc4dac991eecd14ba7b6eb1218bdaa2..8d609c11c9c1c4f25c0d387290c11de36af69a9a 100644
--- a/src/service/service/service_handlers/p4/p4_service_handler.py
+++ b/src/service/service/service_handlers/p4/p4_service_handler.py
@@ -16,18 +16,35 @@
 P4 service handler for the TeraFlowSDN controller.
 """
 
-import anytree, json, logging
-from typing import Any, Dict, List, Optional, Tuple, Union
-from common.proto.context_pb2 import ConfigActionEnum, ConfigRule, DeviceId, Service
-from common.tools.object_factory.ConfigRule import json_config_rule, json_config_rule_delete, json_config_rule_set
+import logging
+from typing import Any, List, Optional, Tuple, Union
+from common.method_wrappers.Decorator import MetricTypeEnum, MetricsPool, metered_subclass_method, INF
+from common.proto.context_pb2 import ConfigRule, DeviceId, Service
+from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
 from common.tools.object_factory.Device import json_device_id
-from common.type_checkers.Checkers import chk_type, chk_length
+from common.type_checkers.Checkers import chk_type
 from service.service.service_handler_api._ServiceHandler import _ServiceHandler
-from service.service.service_handler_api.AnyTreeTools import TreeNode, delete_subnode, get_subnode, set_subnode_value
 from service.service.task_scheduler.TaskExecutor import TaskExecutor
 
 LOGGER = logging.getLogger(__name__)
 
+HISTOGRAM_BUCKETS = (
+    # .005, .01, .025, .05, .075, .1, .25, .5, .75, 1.0, INF
+    0.0010, 0.0025, 0.0050, 0.0075,
+    0.0100, 0.0250, 0.0500, 0.0750,
+    0.1000, 0.2500, 0.5000, 0.7500,
+    1.0000, 2.5000, 5.0000, 7.5000,
+    10.0000, 25.000, 50.0000, 75.000,
+    100.0, INF
+)
+METRICS_POOL = MetricsPool('Service', 'Handler', labels={'handler': 'p4'})
+METRICS_POOL.get_or_create('SetEndpoint',      MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+METRICS_POOL.get_or_create('DeleteEndpoint',   MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+METRICS_POOL.get_or_create('SetConstraint',    MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+METRICS_POOL.get_or_create('DeleteConstraint', MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+METRICS_POOL.get_or_create('SetConfig',        MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+METRICS_POOL.get_or_create('DeleteConfig',     MetricTypeEnum.HISTOGRAM_DURATION, buckets=HISTOGRAM_BUCKETS)
+
 def create_rule_set(endpoint_a, endpoint_b):
     return json_config_rule_set(
         'table',
@@ -99,6 +116,7 @@ class P4ServiceHandler(_ServiceHandler):
         self.__service = service
         self.__task_executor = task_executor # pylint: disable=unused-private-member
 
+    @metered_subclass_method(METRICS_POOL)
     def SetEndpoint(
         self, endpoints : List[Tuple[str, str, Optional[str]]],
         connection_uuid : Optional[str] = None
@@ -169,6 +187,7 @@ class P4ServiceHandler(_ServiceHandler):
 
         return results
 
+    @metered_subclass_method(METRICS_POOL)
     def DeleteEndpoint(
         self, endpoints : List[Tuple[str, str, Optional[str]]],
         connection_uuid : Optional[str] = None
@@ -239,6 +258,7 @@ class P4ServiceHandler(_ServiceHandler):
 
         return results
 
+    @metered_subclass_method(METRICS_POOL)
     def SetConstraint(self, constraints: List[Tuple[str, Any]]) \
             -> List[Union[bool, Exception]]:
         """ Create/Update service constraints.
@@ -261,6 +281,7 @@ class P4ServiceHandler(_ServiceHandler):
         LOGGER.warning(msg.format(str(constraints)))
         return [True for _ in range(len(constraints))]
 
+    @metered_subclass_method(METRICS_POOL)
     def DeleteConstraint(self, constraints: List[Tuple[str, Any]]) \
             -> List[Union[bool, Exception]]:
         """ Delete service constraints.
@@ -285,6 +306,7 @@ class P4ServiceHandler(_ServiceHandler):
         LOGGER.warning(msg.format(str(constraints)))
         return [True for _ in range(len(constraints))]
 
+    @metered_subclass_method(METRICS_POOL)
     def SetConfig(self, resources: List[Tuple[str, Any]]) \
             -> List[Union[bool, Exception]]:
         """ Create/Update configuration for a list of service resources.
@@ -308,6 +330,7 @@ class P4ServiceHandler(_ServiceHandler):
         LOGGER.warning(msg.format(str(resources)))
         return [True for _ in range(len(resources))]
 
+    @metered_subclass_method(METRICS_POOL)
     def DeleteConfig(self, resources: List[Tuple[str, Any]]) \
             -> List[Union[bool, Exception]]:
         """ Delete configuration for a list of service resources.