Skip to content

Commit

Permalink
WIP add log/timing decorator
Browse files Browse the repository at this point in the history
  • Loading branch information
rudolphpienaar committed Mar 22, 2023
1 parent 2cbc8cd commit a21eb99
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 5 deletions.
44 changes: 41 additions & 3 deletions pflog/pflog.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env python
__version__ = '1.2.4'
__version__ = '1.2.5'

from pathlib import Path

Expand All @@ -14,7 +14,7 @@
from datetime import datetime, timezone
from argparse import Namespace

from typing import Any
from typing import Any, Callable

from pftel_client import Client
from pftel_client.models import log_structured, log_response
Expand All @@ -26,6 +26,8 @@
from pftag import pftag
from . import data

import functools

def parser_setup(str_desc) -> ArgumentParser:
parser:ArgumentParser = ArgumentParser(
description = str_desc,
Expand Down Expand Up @@ -329,6 +331,42 @@ def __call__(self, message:str, *args: Any, **kwds: Any) -> Any:
self.options.log = message
return self.run()

def tel_logTime(_func: Callable = None, *,
someother:str = '',
pftelDB:str = '',
name:str = '',
log:str = '',
isthis:str = ''):
def decorator_time(func: Callable) -> Callable:
@functools.wraps(func)
def wrapped(*args, **kwargs) -> Any:
d_log:dict = {}
tagger:pftag.Pftag = pftag.Pftag({})
str_event:str = 'analysisEvent'
dt_start:datetime = pftag.timestamp_dt(tagger(r'%timestamp')['result'])
f_ret:Any = func(*args, **kwargs)
dt_end:datetime = pftag.timestamp_dt(tagger(r'%timestamp')['result'])
ft:float = (dt_end - dt_start).total_seconds()
print(f"{func} executed in {ft} second(s).")
try:
if pftelDB:
if name:
str_event = name
pftelDB = '/'.join(pftelDB.split('/')[:-1] + [str_event])
d_log:dict = pfprint(
options.pftelDB,
log,
appName = str_event,
execTime = ft
)
except:
pass
return wrapped
if _func is None:
return decorator_time
else:
return decorator_time(_func)

def pfprint(pftelspec:str, message:str, **kwargs) -> str:
"""
A simple "standalone" function for "printing" to
Expand All @@ -340,7 +378,7 @@ def pfprint(pftelspec:str, message:str, **kwargs) -> str:
elements.
Args:
pftelspec (str): A pftelFQS string denoting
pftelspec (str): A pftelDB string denoting the pftel URL
message (str): a message to POST
kwargs:
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def get_version(rel_path: str) -> str:
author = 'FNNDSC',
author_email = 'rudolph.pienaar@childrens.harvard.edu',
url = 'https://github.com/FNNDSC/pflog',
install_requires = ['pudb', 'loguru', 'pftag'],
install_requires = ['pudb', 'loguru', 'pftag', 'pftel-client'],
packages = ['pflog'],
license = 'MIT',
entry_points = {
Expand Down
23 changes: 22 additions & 1 deletion tests/test_pflog.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import socket
import os
os.environ['XDG_CONFIG_HOME'] = '/tmp'
import time
import pudb

def test_pfprint() -> None:
Expand All @@ -25,4 +26,24 @@ def test_pfprint_validSpecInvalidURL() -> None:
# Here we have a valid spec, but the URL is invalid !
pftelURL:str = r'http://1.2.3.4:22/api/v1/logObject/logCollection/logEvent'
d_log:dict = pflog.pfprint(pftelURL, "hello, world!" , appName = "testApp", execTime = 2.0)
assert d_log['status'] is False
assert d_log['status'] is False

def test_mocpftelTimed() -> None:
"""
Send message to the moc listener with a log time
"""
pudb.set_trace()
pftelURL:str = r' https://pftel-chris-public.apps.ocp-prod.massopen.cloud/api/v1/timetest/%timestamp/analysis'
@pflog.tel_logTime(
someother = 'something',
pftelDB = pftelURL,
name = 'pytest',
log = 'A two second delay logger',
isthis = pftelURL
)
# @pflog.tel_logTime
def wait(seconds:float):
time.sleep(seconds)
wait(2)
assert True == True

0 comments on commit a21eb99

Please sign in to comment.