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)
 | 
						|
 |