code: def profile_func(filename=None):
      '''
      Decorator for adding profiling to a nested function in Salt
      '''
      def proffunc(fun):
          def profiled_func(*args, **kwargs):
              logging.info('Profiling function %s', fun.__name__)
              try:
                  profiler = cProfile.Profile()
                  retval = profiler.runcall(fun, *args, **kwargs)
                  profiler.dump_stats((filename or '{0}_func.profile'
                                       .format(fun.__name__)))
              except IOError:
                  logging.exception('Could not open profile file %s', filename)
  
              return retval
          return profiled_func
      return proffunf profile_func(filename=None):
      '''
      Decorator for adding profiling to a nested function in Salt
      '''
      def proffunc(fun):
          def profiled_func(*args, **kwargs):
              logging.info('Profiling function %s', fun.__name__)
              try:
                  profiler = cProfile.Profile()
                  retval = profiler.runcall(fun, *args, **kwargs)
                  profiler.dump_stats((filename or '{0}_func.profile'
                                       .format(fun.__name__)))
              except IOError:
                  logging.exception('Could not open profile file %s', filename)
  
              return retval
          return profiled_func
      return proffunc
docs: Decorator for adding profiling to a nested function in Salt