diff options
author | 2018-11-26 13:10:30 +0000 | |
---|---|---|
committer | 2018-11-26 13:17:59 +0000 | |
commit | 2c3a49d866ebd62210f2fbcd3a1681e58f794efa (patch) | |
tree | 0d175fef6abd6441cd89327e5a1f18f6b061cca2 /share/newton_base/util.py | |
parent | 370ed53582ba1da526b7cc7c52fd780eb7a5b70b (diff) |
Cache AAI data1.2.2
Add profiler decorator
Change-Id: I280b5799fa876d881dc2331b44dd34344437eba3
Issue-ID: MULTICLOUD-417
Signed-off-by: Bin Yang <bin.yang@windriver.com>
Diffstat (limited to 'share/newton_base/util.py')
-rw-r--r-- | share/newton_base/util.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/share/newton_base/util.py b/share/newton_base/util.py index e925d99a..aa03b65b 100644 --- a/share/newton_base/util.py +++ b/share/newton_base/util.py @@ -22,6 +22,11 @@ from keystoneauth1 import session from common.msapi import extsys +# profiler decoration +import cProfile +import pstats +import os + logger = logging.getLogger(__name__) @@ -147,3 +152,28 @@ class VimDriverUtils(object): def replace_key_by_mapping(dict_obj, mapping, reverse=False): for k in mapping: VimDriverUtils._replace_a_key(dict_obj, k, reverse) + + # profiler decoration + @staticmethod + def do_cprofile(filename): + """ + Decorator for function profiling. + """ + def wrapper(func): + def profiled_func(*args, **kwargs): + # Flag for do profiling or not. + DO_PROF = True # os.getenv("PROFILING") + if DO_PROF: + profile = cProfile.Profile() + profile.enable() + result = func(*args, **kwargs) + profile.disable() + # Sort stat by internal time. + sortby = "tottime" + ps = pstats.Stats(profile).sort_stats(sortby) + ps.dump_stats(filename) + else: + result = func(*args, **kwargs) + return result + return profiled_func + return wrapper |