You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							57 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							57 lines
						
					
					
						
							1.7 KiB
						
					
					
				| from logentries import LogentriesHandler
 | |
| from threading import Lock
 | |
| from functools import wraps
 | |
| import logging
 | |
| import time
 | |
| import sys
 | |
| import psutil
 | |
| 
 | |
| glob_time = 0
 | |
| glob_name = 0
 | |
| 
 | |
| log = logging.getLogger('logentries')
 | |
| log.setLevel(logging.INFO)
 | |
| 
 | |
| class Metric(object):
 | |
| 
 | |
|     def __init__(self, token):
 | |
|         self._count = 0.0
 | |
|         self._sum = 0.0
 | |
|         self._lock = Lock()
 | |
|         self.token = token
 | |
|         handler = LogentriesHandler(token)
 | |
|         log.addHandler(handler)
 | |
| 
 | |
|     def observe(self, amount):
 | |
|         with self._lock:
 | |
|             self._count += 1
 | |
|             self._sum += amount
 | |
| 
 | |
|     def metric(self):
 | |
|         '''Mesaure function execution time in seconds
 | |
|            and forward it to Logentries'''
 | |
| 
 | |
|         class Timer(object):
 | |
| 
 | |
|             def __init__(self, summary):
 | |
|                 self._summary = summary
 | |
| 
 | |
|             def __enter__(self):
 | |
|                 self._start = time.time()
 | |
| 
 | |
|             def __exit__(self, typ, value, traceback):
 | |
|                 global glob_time
 | |
|                 self._summary.observe(max(time.time() - self._start, 0))
 | |
|                 glob_time = time.time()- self._start
 | |
|                 log.info("function_name=" + glob_name + " " + "execution_time=" + str(glob_time) + " " + "cpu=" + str(psutil.cpu_percent(interval=None)) + " " + "cpu_count=" + str(psutil.cpu_count())+ " " + "memory=" + str(psutil.virtual_memory()) )
 | |
| 
 | |
|             def __call__(self, f):
 | |
|                 @wraps(f)
 | |
|                 def wrapped(*args, **kwargs):
 | |
|                     with self:
 | |
|                         global glob_name
 | |
|                         glob_name = f.__name__
 | |
| 
 | |
|                         return f(*args, **kwargs)
 | |
|                 return wrapped
 | |
|         return Timer(self)
 | |
| 
 |