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.
58 lines
1.7 KiB
58 lines
1.7 KiB
5 years ago
|
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)
|