aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/gfs_monitor.py49
-rw-r--r--python/report_ops/utils.py22
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):