Add timing decorator utility 97/25797/2
authorGeorge Paraskevopoulos <geopar@intracom-telecom.com>
Mon, 12 Dec 2016 14:12:14 +0000 (16:12 +0200)
committerGeorge Paraskevopoulos <geopar@intracom-telecom.com>
Tue, 13 Dec 2016 12:49:59 +0000 (14:49 +0200)
Create "timethis" utility decorator that prints how long it takes for an
arbitrary function to complete

USAGE:

@functest.utils.functest_utils.timethis
def function_to_be_timed(...):
    ...

Change-Id: I41730c01b6889a9fa1ede4c5863841648b5af9c7
Signed-off-by: George Paraskevopoulos <geopar@intracom-telecom.com>
functest/utils/functest_utils.py

index 8f816cd..b1e4d3c 100644 (file)
@@ -21,6 +21,9 @@ import requests
 import yaml
 from git import Repo
 
+import time
+import functools
+
 import functest.utils.functest_logger as ft_logger
 
 logger = ft_logger.Logger("functest_utils").getLogger()
@@ -431,3 +434,17 @@ def get_functest_yaml():
 
 def print_separator():
     logger.info("==============================================")
+
+
+def timethis(func):
+    """Measure the time it takes for a function to complete"""
+    @functools.wraps(func)
+    def timed(*args, **kwargs):
+        ts = time.time()
+        result = func(*args, **kwargs)
+        te = time.time()
+        elapsed = '{0}'.format(te - ts)
+        logger.info('{f}(*{a}, **{kw}) took: {t} sec'.format(
+            f=func.__name__, a=args, kw=kwargs, t=elapsed))
+        return result, elapsed
+    return timed