From 41ce2caa0a8c98ad8d83a13c34bd2c7d610efc65 Mon Sep 17 00:00:00 2001 From: Joshua Salako Date: Tue, 8 Jul 2025 17:41:30 +0100 Subject: [PATCH] implement RAC check and salary detect every 2 minutes --- salary_analytics/config.py | 23 +++++++++++++++- salary_analytics/rac_check.py | 46 +++++++++++++++++++++++++++++++ salary_analytics/salary_detect.py | 11 ++++++-- 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 salary_analytics/rac_check.py diff --git a/salary_analytics/config.py b/salary_analytics/config.py index 1022fbd..fccdb37 100644 --- a/salary_analytics/config.py +++ b/salary_analytics/config.py @@ -4,6 +4,7 @@ Configuration settings for the salary analytics package. import os from dotenv import load_dotenv +import random # Load environment variables load_dotenv() @@ -76,4 +77,24 @@ OUTPUT_PATHS = { "inconsistent_model": os.path.join(MODEL_DIR, "inconsistent_model.joblib"), "consistent_scaler": os.path.join(MODEL_DIR, "consistent_scaler.joblib"), "inconsistent_scaler": os.path.join(MODEL_DIR, "inconsistent_scaler.joblib") -} \ No newline at end of file +} + +SIMBRELLA_BASE_URL = os.getenv("SIMBRELLA_BASE_URL", "http://127.0.0.1:6337") +SIMBRELLA_ENDPOINT_RAC_CHECKS = os.getenv("SIMBRELLA_ENDPOINT_RAC_CHECKS","api/rac-check") + +# Salary Detect Endpoint Config +SALARY_DETECT_URL = "http://www.simbrellang.net:5000/autocall/analytic-salary-detect" +SALARY_DETECT_HEADERS = { + "accept": "/", + "Content-Type": "application/json" +} +SALARY_DETECT_PAYLOADS = [ + {"salaryDate": "2022-01-01", "customerId": "CN621868", "accountId": "2017821799", "salaryAmount": 200000}, + {"customerId": "CUC2268333011", "accountId": "ACC8116931898", "salaryDate": "2025-07-08", "salaryAmount": 200000}, + {"customerId": "CUC2163677018", "accountId": "ACC8118539484", "salaryDate": "2025-07-08", "salaryAmount": 200000}, + {"customerId": "CUC1968062010", "accountId": "ACC8115473093", "salaryDate": "2025-07-08", "salaryAmount": 200000}, + {"customerId": "CUC1302360013", "accountId": "ACC8117628489", "salaryDate": "2025-07-08", "salaryAmount": 200000} +] + +def get_random_salary_payload(): + return [random.choice(SALARY_DETECT_PAYLOADS)] \ No newline at end of file diff --git a/salary_analytics/rac_check.py b/salary_analytics/rac_check.py new file mode 100644 index 0000000..d8f16d3 --- /dev/null +++ b/salary_analytics/rac_check.py @@ -0,0 +1,46 @@ +from django.conf import settings +import httpx +import json +from salary_analytics.config import SIMBRELLA_BASE_URL, SIMBRELLA_ENDPOINT_RAC_CHECKS +import logging + +logger = logging.getLogger(__name__) + +class SimbrellaIntegration: + BASE_URL = SIMBRELLA_BASE_URL + ENDPOINT_RAC_CHECKS = SIMBRELLA_ENDPOINT_RAC_CHECKS + + @staticmethod + def rac_check(customer_id, account_id, transaction_id): + """ + Calls the RACCheck endpoit + """ + url = f"{SimbrellaIntegration.BASE_URL}/{SimbrellaIntegration.ENDPOINT_RAC_CHECKS}" + logger.info(f"Contacting Rack Checks EndPoint: {str(url)}", exc_info=True) + + payload = { + "customerId": customer_id, + "accountId": account_id, + "transactionId": str(transaction_id), + "fbnTransactionId": str(transaction_id), + "countryCode": "NG", + "channel": "USSD" + } + + headers = { + "Content-Type": "application/json", + "x-api-key": f"{settings.VALID_API_KEY}", + "App-Id": f"{settings.VALID_APP_ID}", + } + + try: + response = httpx.post(url, json=payload, headers=headers, timeout=10.0) + + logger.info(f"This is Response: {str(response)}", exc_info=True) + + return response + + except Exception as e: + logger.error(f"RACCheck API call failed: {str(e)}", exc_info=True) + raise Exception(f"RACCheck API call failed: {str(e)}") + diff --git a/salary_analytics/salary_detect.py b/salary_analytics/salary_detect.py index 1bd76fe..0824ae2 100644 --- a/salary_analytics/salary_detect.py +++ b/salary_analytics/salary_detect.py @@ -1,6 +1,8 @@ import time import logging import threading +import requests +from .config import SALARY_DETECT_URL, SALARY_DETECT_HEADERS, get_random_salary_payload logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @@ -13,9 +15,14 @@ class SalaryDetect: def _run(self): while self._running: logger.info(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] Detecting salary...") - time.sleep(1) + try: + payload = get_random_salary_payload() + response = requests.post(SALARY_DETECT_URL, headers=SALARY_DETECT_HEADERS, json=payload) + logger.info(f"POST {SALARY_DETECT_URL} status: {response.status_code}, response: {response.text}") + except Exception as e: + logger.error(f"Error during POST: {e}") logger.info(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] Salary detection complete") - time.sleep(1) + time.sleep(120) def start(self): if not self._running: