forked from ScoDoc/ScoDoc
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
|
from time import time
|
||
|
from datetime import datetime
|
||
|
|
||
|
|
||
|
class Profiler:
|
||
|
OUTPUT: str = "/tmp/scodoc.profiler.csv"
|
||
|
|
||
|
def __init__(self, tag: str) -> None:
|
||
|
self.tag: str = tag
|
||
|
self.start_time: time = None
|
||
|
self.stop_time: time = None
|
||
|
|
||
|
def start(self):
|
||
|
self.start_time = time()
|
||
|
return self
|
||
|
|
||
|
def stop(self):
|
||
|
self.stop_time = time()
|
||
|
return self
|
||
|
|
||
|
def elapsed(self) -> float:
|
||
|
return self.stop_time - self.start_time
|
||
|
|
||
|
def dates(self) -> tuple[datetime, datetime]:
|
||
|
return datetime.fromtimestamp(self.start_time), datetime.fromtimestamp(
|
||
|
self.stop_time
|
||
|
)
|
||
|
|
||
|
def write(self):
|
||
|
with open(Profiler.OUTPUT, "a") as file:
|
||
|
dates: tuple = self.dates()
|
||
|
date_str = (dates[0].isoformat(), dates[1].isoformat())
|
||
|
file.write(f"\n{self.tag},{self.elapsed() : .2}")
|
||
|
|
||
|
@classmethod
|
||
|
def write_in(cls, msg: str):
|
||
|
with open(cls.OUTPUT, "a") as file:
|
||
|
file.write(f"\n# {msg}")
|
||
|
|
||
|
@classmethod
|
||
|
def clear(cls):
|
||
|
with open(cls.OUTPUT, "w") as file:
|
||
|
file.write("")
|