diff options
| -rw-r--r-- | python/gfs_monitor.py | 49 | ||||
| -rw-r--r-- | python/report_ops/utils.py | 22 |
2 files changed, 54 insertions, 17 deletions
diff --git a/python/gfs_monitor.py b/python/gfs_monitor.py index 5386f358..17413d89 100644 --- a/python/gfs_monitor.py +++ b/python/gfs_monitor.py @@ -3,7 +3,42 @@ import logging from serenitas.analytics.dates import prev_business_day from serenitas.utils.db import dbconn from serenitas.utils.exchange import ExchangeMessage -from report_ops.utils import GFSMonitor +from report_ops.utils import GFSMonitor, CDXQuoteMonitor + + +def check_gfs(date, fund, conn): + with conn.cursor() as c: + c.execute( + "SELECT endqty as amount, invccy as currency, periodenddate as date, port as portfolio FROM valuation_reports vr WHERE fund=%s AND port ='GFS_HELPER_BUSINESS_UNIT' AND periodenddate =%s;", + ( + fund, + date, + ), + ) + for row in c: + GFSMonitor.stage(row._asdict()) + GFSMonitor.email(fund) + GFSMonitor._insert_queue.clear() + + +def check_cleared_cds(date, fund, conn): + with conn.cursor() as c: + c.execute( + "SELECT *, abs(serenitas_quote-globeop_quote) AS difference FROM compare_globeop_quotes(%s, %s)", + (date, fund), + ) + for row in c: + d = row._asdict() + match d["index"]: + case "IG": + if d["difference"] > 0.10: + CDXQuoteMonitor.stage(d) + case "HY": + if d["difference"] > 0.20: + CDXQuoteMonitor.stage(d) + CDXQuoteMonitor.email(fund) + CDXQuoteMonitor._insert_queue.clear() + if __name__ == "__main__": import argparse @@ -19,12 +54,6 @@ if __name__ == "__main__": args = parser.parse_args() logger = logging.getLogger(__name__) conn = dbconn("dawndb") - sql_str = "SELECT endqty as amount, invccy as currency, periodenddate as date, port as portfolio FROM valuation_reports vr WHERE fund=%s AND port ='GFS_HELPER_BUSINESS_UNIT' AND periodenddate =%s;" - em = ExchangeMessage() - with conn.cursor() as c: - for fund in ("SERCGMAST", "BOWDST"): - c.execute(sql_str, (fund, args.cob)) - for row in c: - GFSMonitor.stage(row._asdict()) - GFSMonitor.email(fund) - GFSMonitor._insert_queue.clear() + for fund in ("SERCGMAST",): + check_gfs(args.cob, fund, conn) + # check_cleared_cds(args.cob, fund, conn) diff --git a/python/report_ops/utils.py b/python/report_ops/utils.py index b8cdbc28..1e610510 100644 --- a/python/report_ops/utils.py +++ b/python/report_ops/utils.py @@ -201,11 +201,10 @@ class Monitor: date: datetime.date headers: ClassVar = () num_format: ClassVar = [] - sql_query: ClassVar = None _insert_queue: ClassVar[list] = [] _em: ClassVar = ExchangeMessage() - def __init_subclass__(cls, headers, sql_query=None, num_format=[]): + def __init_subclass__(cls, headers, num_format=[]): cls.headers = headers cls.num_format = num_format @@ -232,8 +231,12 @@ class Monitor: class GFSMonitor( Monitor, - headers=("date", "portfolio", "amount", "currency"), - sql_query="SELECT endqty as amount, invccy as currency, periodenddate as date, port as portfolio FROM valuation_reports vr WHERE fund=%s AND port ='GFS_HELPER_BUSINESS_UNIT' AND periodenddate =%s;", + headers=( + "date", + "portfolio", + "amount", + "currency", + ), num_format=[("{0:,.2f}", 2)], ): @classmethod @@ -263,9 +266,14 @@ class GFSMonitor( class CDXQuoteMonitor( Monitor, - headers=("identifier", "maturity", "globeop_quote", "serenitas_quote"), - sql_query="SELECT * FROM compare_globeop_quotes(%s, %s)", - num_format=[("{0:,.2f}", 3), ("{0:,.2f}", 4)], + headers=( + "identifier", + "maturity", + "globeop_quote", + "serenitas_quote", + "difference", + ), + num_format=[("{0:,.2f}", 2), ("{0:,.2f}", 3), ("{0:,.2f}", 4)], ): @classmethod def email(cls, fund): |
