From 3e6fb96f37bc414be306b0c176d250ff977e1a51 Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Wed, 1 Dec 2021 17:25:15 +0530 Subject: [PATCH 1/9] added logic for retrying the failed webhooks --- api/services/handle_event_service.py | 33 +++++++++---------- api/services/transaction_log_service.py | 9 +++++ main.py | 44 ++++++++++++++++++++++--- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/api/services/handle_event_service.py b/api/services/handle_event_service.py index 93ba7d9..9a93a01 100644 --- a/api/services/handle_event_service.py +++ b/api/services/handle_event_service.py @@ -6,16 +6,15 @@ class HandleEventService: - def handle_event_service(self, request): - + def handle_event_service(self, form_data): call_sid_exist = db.session.query( - db.exists().where(models.CallLogEvent.call_sid == request.form["CallSid"]) + db.exists().where(models.CallLogEvent.call_sid == form_data["CallSid"]) ).scalar() if call_sid_exist: return - url_decoded_system_phone = requests.utils.unquote(request.form["To"]) + url_decoded_system_phone = requests.utils.unquote(form_data["To"]) system_phone_exists = db.session.query( db.exists().where(models.SystemPhone.phone == url_decoded_system_phone) @@ -26,13 +25,13 @@ def handle_event_service(self, request): try: data = {} - data["call_sid"] = request.form["CallSid"] - data["account_sid"] = request.form["AccountSid"] - data["from_number"] = request.form["From"] + data["call_sid"] = form_data["CallSid"] + data["account_sid"] = form_data["AccountSid"] + data["from_number"] = form_data["From"] data["to_number"] = url_decoded_system_phone - data["call_status"] = request.form["CallStatus"] - data["direction"] = request.form["Direction"] - data["parent_call_sid"] = request.form["ParentCallSid"] + data["call_status"] = form_data["CallStatus"] + data["direction"] = form_data["Direction"] + data["parent_call_sid"] = form_data["ParentCallSid"] data["telco_code"] = None data["telco_status"] = None @@ -42,17 +41,17 @@ def handle_event_service(self, request): data["duration"] = None if data["call_status"] != "Missed": - data["telco_code"] = request.form["TelcoCode"] - data["telco_status"] = request.form["TelcoStatus"] - data["dial_time"] = request.form["DialTime"] - data["end_time"] = request.form["EndTime"] - data["duration"] = request.form["Duration"] + data["telco_code"] = form_data["TelcoCode"] + data["telco_status"] = form_data["TelcoStatus"] + data["dial_time"] = form_data["DialTime"] + data["end_time"] = form_data["EndTime"] + data["duration"] = form_data["Duration"] """PickTime is available only when the call is answered. The telco code for answered calls is 16. """ - if request.form["TelcoCode"] == "16": - data["pick_time"] = request.form["PickTime"] + if form_data["TelcoCode"] == "16": + data["pick_time"] = form_data["PickTime"] call_log_event.CallLogEventService.create_call_log_event(self, data) if data["call_status"] == "Missed": diff --git a/api/services/transaction_log_service.py b/api/services/transaction_log_service.py index d742568..87ed6d6 100644 --- a/api/services/transaction_log_service.py +++ b/api/services/transaction_log_service.py @@ -16,3 +16,12 @@ def mark_ivr_transaction_log_as_processed(self, ivr_transaction_log): ivr_transaction_log.processed = True db.session.add(ivr_transaction_log) db.session.commit() + + def get_failed_ivr_transaction_log(self): + failed_ivr_transaction_logs = ( + models.IvrCallbackTransactionLog.query.filter_by(processed=False) + .limit(1000) + .all() + ) + + return failed_ivr_transaction_logs diff --git a/main.py b/main.py index 0776622..1eb93be 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,28 @@ # from pprint import pprint from api import models, db, services from flask import jsonify, request +import json def callback(request): try: if request.method == "POST": - formData = request.form + json_data = request.get_json() + form_data = request.form transaction_log_service = services.TransactionLogService() + + if json_data and json_data.get("type", None) == "retry_failed_log": + retry_failed_webhook(transaction_log_service) + return "Success" + ivr_transaction_log = ( - transaction_log_service.create_new_ivr_transaction_log(formData) + transaction_log_service.create_new_ivr_transaction_log(form_data) ) - service = services.HandleEventService() - service.handle_event_service(request) + processed = process_form_data(form_data) + + if not processed: + return jsonify(message="Something went wrong!"), 400 + transaction_log_service.mark_ivr_transaction_log_as_processed( ivr_transaction_log ) @@ -21,6 +31,30 @@ def callback(request): jsonify(message="Currently, the system do not accept a GET request"), 405, ) - except IndexError: + except: return jsonify(message="Something went wrong!"), 400 + return "Success" + + +def retry_failed_webhook(transaction_log_service): + failed_ivr_logs = transaction_log_service.get_failed_ivr_transaction_log() + + for log in failed_ivr_logs: + processed = process_form_data(json.loads(log.payload)) + + if processed is not True: + continue + + log.processed = True + db.session.add(log) + db.session.commit() + + +def process_form_data(form_data): + try: + service = services.HandleEventService() + service.handle_event_service(form_data) + return True + except: + return False From 1826e1c6f142128bbd2557db2443ef95681e17b7 Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Thu, 2 Dec 2021 11:09:14 +0530 Subject: [PATCH 2/9] added created_on fields while retrying the log --- api/services/call_log_event_service.py | 48 ++++++++++++++++++-------- api/services/handle_event_service.py | 5 ++- api/services/registration_service.py | 28 ++++++++++----- main.py | 6 ++-- 4 files changed, 59 insertions(+), 28 deletions(-) diff --git a/api/services/call_log_event_service.py b/api/services/call_log_event_service.py index 044bd2d..d0e584e 100644 --- a/api/services/call_log_event_service.py +++ b/api/services/call_log_event_service.py @@ -6,20 +6,38 @@ class CallLogEventService: # Create a call log event def create_call_log_event(self, data): - call_log_event = models.CallLogEvent( - call_sid=data["call_sid"], - account_sid=data["account_sid"], - from_number=data["from_number"], - to_number=data["to_number"], - call_status=data["call_status"], - direction=data["direction"], - parent_call_sid=data["parent_call_sid"], - telco_code=data["telco_code"], - telco_status=data["telco_status"], - dial_time=data["dial_time"], - pick_time=data["pick_time"], - end_time=data["end_time"], - duration=data["duration"], - ) + if data.get("created_on", None): + call_log_event = models.CallLogEvent( + call_sid=data["call_sid"], + account_sid=data["account_sid"], + from_number=data["from_number"], + to_number=data["to_number"], + call_status=data["call_status"], + direction=data["direction"], + parent_call_sid=data["parent_call_sid"], + telco_code=data["telco_code"], + telco_status=data["telco_status"], + dial_time=data["dial_time"], + pick_time=data["pick_time"], + end_time=data["end_time"], + duration=data["duration"], + created_on=data["created_on"], + ) + else: + call_log_event = models.CallLogEvent( + call_sid=data["call_sid"], + account_sid=data["account_sid"], + from_number=data["from_number"], + to_number=data["to_number"], + call_status=data["call_status"], + direction=data["direction"], + parent_call_sid=data["parent_call_sid"], + telco_code=data["telco_code"], + telco_status=data["telco_status"], + dial_time=data["dial_time"], + pick_time=data["pick_time"], + end_time=data["end_time"], + duration=data["duration"], + ) db.session.add(call_log_event) db.session.commit() diff --git a/api/services/handle_event_service.py b/api/services/handle_event_service.py index 9a93a01..159e180 100644 --- a/api/services/handle_event_service.py +++ b/api/services/handle_event_service.py @@ -6,7 +6,7 @@ class HandleEventService: - def handle_event_service(self, form_data): + def handle_event_service(self, form_data, log_created_on=None): call_sid_exist = db.session.query( db.exists().where(models.CallLogEvent.call_sid == form_data["CallSid"]) ).scalar() @@ -40,6 +40,9 @@ def handle_event_service(self, form_data): data["end_time"] = None data["duration"] = None + if log_created_on: + data["created_on"] = log_created_on + if data["call_status"] != "Missed": data["telco_code"] = form_data["TelcoCode"] data["telco_status"] = form_data["TelcoStatus"] diff --git a/api/services/registration_service.py b/api/services/registration_service.py index eb00bde..aef3366 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -6,7 +6,6 @@ class RegistrationService: # Create a registartion def create_registration(self, data): - system_phone_data = models.SystemPhone.query.filter_by( phone=data["to_number"] ).first() @@ -24,13 +23,24 @@ def create_registration(self, data): if registration_exists: return - registration = models.Registration( - user_phone=data["from_number"], - system_phone=data["to_number"], - status="pending", - partner_id=partner.partner_id, - state=system_phone_data.state, - has_dropped_missedcall=True, - ) + if data.get("created_on", None): + registration = models.Registration( + user_phone=data["from_number"], + system_phone=data["to_number"], + status="pending", + partner_id=partner.partner_id, + state=system_phone_data.state, + has_dropped_missedcall=True, + created_on=data["created_on"], + ) + else: + registration = models.Registration( + user_phone=data["from_number"], + system_phone=data["to_number"], + status="pending", + partner_id=partner.partner_id, + state=system_phone_data.state, + has_dropped_missedcall=True, + ) db.session.add(registration) db.session.commit() diff --git a/main.py b/main.py index 1eb93be..4bf30e1 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,7 @@ def retry_failed_webhook(transaction_log_service): failed_ivr_logs = transaction_log_service.get_failed_ivr_transaction_log() for log in failed_ivr_logs: - processed = process_form_data(json.loads(log.payload)) + processed = process_form_data(json.loads(log.payload), log.created_on) if processed is not True: continue @@ -51,10 +51,10 @@ def retry_failed_webhook(transaction_log_service): db.session.commit() -def process_form_data(form_data): +def process_form_data(form_data, log_created_on=None): try: service = services.HandleEventService() - service.handle_event_service(form_data) + service.handle_event_service(form_data, log_created_on) return True except: return False From 87ac70f73760ba6ba1505e3bd36f77ad42e7e6e4 Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Thu, 2 Dec 2021 12:01:48 +0530 Subject: [PATCH 3/9] code cleanups --- api/services/call_log_event_service.py | 52 ++++++++++---------------- api/services/handle_event_service.py | 2 +- api/services/registration_service.py | 32 ++++++---------- 3 files changed, 32 insertions(+), 54 deletions(-) diff --git a/api/services/call_log_event_service.py b/api/services/call_log_event_service.py index d0e584e..f9f3a3a 100644 --- a/api/services/call_log_event_service.py +++ b/api/services/call_log_event_service.py @@ -1,43 +1,29 @@ # This file is treated as service layer from flask import request from api import models, db +from datetime import datetime class CallLogEventService: # Create a call log event def create_call_log_event(self, data): - if data.get("created_on", None): - call_log_event = models.CallLogEvent( - call_sid=data["call_sid"], - account_sid=data["account_sid"], - from_number=data["from_number"], - to_number=data["to_number"], - call_status=data["call_status"], - direction=data["direction"], - parent_call_sid=data["parent_call_sid"], - telco_code=data["telco_code"], - telco_status=data["telco_status"], - dial_time=data["dial_time"], - pick_time=data["pick_time"], - end_time=data["end_time"], - duration=data["duration"], - created_on=data["created_on"], - ) - else: - call_log_event = models.CallLogEvent( - call_sid=data["call_sid"], - account_sid=data["account_sid"], - from_number=data["from_number"], - to_number=data["to_number"], - call_status=data["call_status"], - direction=data["direction"], - parent_call_sid=data["parent_call_sid"], - telco_code=data["telco_code"], - telco_status=data["telco_status"], - dial_time=data["dial_time"], - pick_time=data["pick_time"], - end_time=data["end_time"], - duration=data["duration"], - ) + call_log_event = models.CallLogEvent( + call_sid=data["call_sid"], + account_sid=data["account_sid"], + from_number=data["from_number"], + to_number=data["to_number"], + call_status=data["call_status"], + direction=data["direction"], + parent_call_sid=data["parent_call_sid"], + telco_code=data["telco_code"], + telco_status=data["telco_status"], + dial_time=data["dial_time"], + pick_time=data["pick_time"], + end_time=data["end_time"], + duration=data["duration"], + created_on=data["log_created_on"] + if data.get("log_created_on", None) + else datetime.now(), + ) db.session.add(call_log_event) db.session.commit() diff --git a/api/services/handle_event_service.py b/api/services/handle_event_service.py index 159e180..45e717a 100644 --- a/api/services/handle_event_service.py +++ b/api/services/handle_event_service.py @@ -41,7 +41,7 @@ def handle_event_service(self, form_data, log_created_on=None): data["duration"] = None if log_created_on: - data["created_on"] = log_created_on + data["log_created_on"] = log_created_on if data["call_status"] != "Missed": data["telco_code"] = form_data["TelcoCode"] diff --git a/api/services/registration_service.py b/api/services/registration_service.py index aef3366..bbca83e 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -1,6 +1,6 @@ # This file is treated as service layer -from flask import request from api import models, db +from datetime import datetime class RegistrationService: @@ -23,24 +23,16 @@ def create_registration(self, data): if registration_exists: return - if data.get("created_on", None): - registration = models.Registration( - user_phone=data["from_number"], - system_phone=data["to_number"], - status="pending", - partner_id=partner.partner_id, - state=system_phone_data.state, - has_dropped_missedcall=True, - created_on=data["created_on"], - ) - else: - registration = models.Registration( - user_phone=data["from_number"], - system_phone=data["to_number"], - status="pending", - partner_id=partner.partner_id, - state=system_phone_data.state, - has_dropped_missedcall=True, - ) + registration = models.Registration( + user_phone=data["from_number"], + system_phone=data["to_number"], + status="pending", + partner_id=partner.partner_id, + state=system_phone_data.state, + has_dropped_missedcall=True, + created_on=data["log_created_on"] + if data.get("log_created_on", None) + else datetime.now(), + ) db.session.add(registration) db.session.commit() From c12e0b0190b0167fb6ec4c96704f03f16da16935 Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Thu, 2 Dec 2021 12:06:05 +0530 Subject: [PATCH 4/9] added retry log limit in env file --- .env.example | 1 + api/services/transaction_log_service.py | 4 ++-- config.py | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 1047377..e9d4210 100644 --- a/.env.example +++ b/.env.example @@ -8,3 +8,4 @@ DB_HOST= DB_PORT= SECRET_KEY= CONNECTION_NAME= +RETRY_LOGS_LIMIT= diff --git a/api/services/transaction_log_service.py b/api/services/transaction_log_service.py index 87ed6d6..02aa8a8 100644 --- a/api/services/transaction_log_service.py +++ b/api/services/transaction_log_service.py @@ -1,5 +1,5 @@ # This file is treated as service layer -from api import models, db +from api import models, db, app import json @@ -20,7 +20,7 @@ def mark_ivr_transaction_log_as_processed(self, ivr_transaction_log): def get_failed_ivr_transaction_log(self): failed_ivr_transaction_logs = ( models.IvrCallbackTransactionLog.query.filter_by(processed=False) - .limit(1000) + .limit(app.config["RETRY_LOGS_LIMIT"]) .all() ) diff --git a/config.py b/config.py index a849820..29d2988 100644 --- a/config.py +++ b/config.py @@ -36,3 +36,5 @@ SQLALCHEMY_TRACK_MODIFICATIONS = True WTF_CSRF_ENABLED = True SECRET_KEY = os.environ.get("SECRET_KEY") + +RETRY_LOGS_LIMIT = os.environ.get("RETRY_LOGS_LIMIT") From f2461a2f92d1544f7e9dd8d31e6f986c9ffdf7cf Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Fri, 3 Dec 2021 12:21:54 +0530 Subject: [PATCH 5/9] code cleanups --- .env.example | 2 +- api/services/handle_event_service.py | 10 +++++----- api/services/transaction_log_service.py | 2 +- config.py | 3 ++- main.py | 8 +++++--- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index e9d4210..7a0eece 100644 --- a/.env.example +++ b/.env.example @@ -8,4 +8,4 @@ DB_HOST= DB_PORT= SECRET_KEY= CONNECTION_NAME= -RETRY_LOGS_LIMIT= +RETRY_LOGS_BATCH_LIMIT= diff --git a/api/services/handle_event_service.py b/api/services/handle_event_service.py index 45e717a..3b6c7f9 100644 --- a/api/services/handle_event_service.py +++ b/api/services/handle_event_service.py @@ -1,12 +1,12 @@ import requests from flask import request -from api import models, db +from api import models, db, app from . import registration_service as registration from . import call_log_event_service as call_log_event class HandleEventService: - def handle_event_service(self, form_data, log_created_on=None): + def handle_event_service(self, form_data): call_sid_exist = db.session.query( db.exists().where(models.CallLogEvent.call_sid == form_data["CallSid"]) ).scalar() @@ -40,8 +40,8 @@ def handle_event_service(self, form_data, log_created_on=None): data["end_time"] = None data["duration"] = None - if log_created_on: - data["log_created_on"] = log_created_on + if form_data.get("log_created_on", None): + data["log_created_on"] = form_data["log_created_on"] if data["call_status"] != "Missed": data["telco_code"] = form_data["TelcoCode"] @@ -53,7 +53,7 @@ def handle_event_service(self, form_data, log_created_on=None): """PickTime is available only when the call is answered. The telco code for answered calls is 16. """ - if form_data["TelcoCode"] == "16": + if form_data["TelcoCode"] == app.config["TELCO_CODE_ANSWERED"]: data["pick_time"] = form_data["PickTime"] call_log_event.CallLogEventService.create_call_log_event(self, data) diff --git a/api/services/transaction_log_service.py b/api/services/transaction_log_service.py index 02aa8a8..712cbeb 100644 --- a/api/services/transaction_log_service.py +++ b/api/services/transaction_log_service.py @@ -20,7 +20,7 @@ def mark_ivr_transaction_log_as_processed(self, ivr_transaction_log): def get_failed_ivr_transaction_log(self): failed_ivr_transaction_logs = ( models.IvrCallbackTransactionLog.query.filter_by(processed=False) - .limit(app.config["RETRY_LOGS_LIMIT"]) + .limit(app.config["RETRY_LOGS_BATCH_LIMIT"]) .all() ) diff --git a/config.py b/config.py index 29d2988..cb6b351 100644 --- a/config.py +++ b/config.py @@ -37,4 +37,5 @@ WTF_CSRF_ENABLED = True SECRET_KEY = os.environ.get("SECRET_KEY") -RETRY_LOGS_LIMIT = os.environ.get("RETRY_LOGS_LIMIT") +RETRY_LOGS_BATCH_LIMIT = os.environ.get("RETRY_LOGS_BATCH_LIMIT") +TELCO_CODE_ANSWERED = 16 diff --git a/main.py b/main.py index 4bf30e1..ae34ee1 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,9 @@ def retry_failed_webhook(transaction_log_service): failed_ivr_logs = transaction_log_service.get_failed_ivr_transaction_log() for log in failed_ivr_logs: - processed = process_form_data(json.loads(log.payload), log.created_on) + payload = json.loads(log.payload) + payload["log_created_on"] = log.created_on + processed = process_form_data(payload) if processed is not True: continue @@ -51,10 +53,10 @@ def retry_failed_webhook(transaction_log_service): db.session.commit() -def process_form_data(form_data, log_created_on=None): +def process_form_data(form_data): try: service = services.HandleEventService() - service.handle_event_service(form_data, log_created_on) + service.handle_event_service(form_data) return True except: return False From 71ae357e3a2e955cd1259caa4432f067773ea9fe Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Fri, 3 Dec 2021 14:12:45 +0530 Subject: [PATCH 6/9] added check for reattempts of logs --- .env.example | 1 + api/models/ivr_callback_transaction_log.py | 1 + api/services/transaction_log_service.py | 9 ++++++++- config.py | 1 + main.py | 4 ++++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 7a0eece..9ac4f3a 100644 --- a/.env.example +++ b/.env.example @@ -9,3 +9,4 @@ DB_PORT= SECRET_KEY= CONNECTION_NAME= RETRY_LOGS_BATCH_LIMIT= +MAX_RETRY_ATTEMPTS_FOR_LOGS= diff --git a/api/models/ivr_callback_transaction_log.py b/api/models/ivr_callback_transaction_log.py index 4dc966e..e5e56f9 100644 --- a/api/models/ivr_callback_transaction_log.py +++ b/api/models/ivr_callback_transaction_log.py @@ -7,3 +7,4 @@ class IvrCallbackTransactionLog(TimestampMixin, db.Model): id = db.Column(db.Integer, primary_key=True) payload = db.Column(db.Text) processed = db.Column(db.Boolean, nullable=False) + attempts = db.Column(db.Integer, nullable=False, default="0") diff --git a/api/services/transaction_log_service.py b/api/services/transaction_log_service.py index 712cbeb..4af6f34 100644 --- a/api/services/transaction_log_service.py +++ b/api/services/transaction_log_service.py @@ -19,7 +19,14 @@ def mark_ivr_transaction_log_as_processed(self, ivr_transaction_log): def get_failed_ivr_transaction_log(self): failed_ivr_transaction_logs = ( - models.IvrCallbackTransactionLog.query.filter_by(processed=False) + models.IvrCallbackTransactionLog.query.filter( + models.IvrCallbackTransactionLog.processed == False + ) + .filter( + models.IvrCallbackTransactionLog.attempts + <= app.config["MAX_RETRY_ATTEMPTS_FOR_LOGS"] + ) + .order_by(models.IvrCallbackTransactionLog.id) .limit(app.config["RETRY_LOGS_BATCH_LIMIT"]) .all() ) diff --git a/config.py b/config.py index cb6b351..34d128a 100644 --- a/config.py +++ b/config.py @@ -39,3 +39,4 @@ RETRY_LOGS_BATCH_LIMIT = os.environ.get("RETRY_LOGS_BATCH_LIMIT") TELCO_CODE_ANSWERED = 16 +MAX_RETRY_ATTEMPTS_FOR_LOGS = os.environ.get("MAX_RETRY_ATTEMPTS_FOR_LOGS") diff --git a/main.py b/main.py index ae34ee1..86ab12c 100644 --- a/main.py +++ b/main.py @@ -41,6 +41,10 @@ def retry_failed_webhook(transaction_log_service): failed_ivr_logs = transaction_log_service.get_failed_ivr_transaction_log() for log in failed_ivr_logs: + log.attempts += 1 + db.session.add(log) + db.session.commit() + payload = json.loads(log.payload) payload["log_created_on"] = log.created_on processed = process_form_data(payload) From f83a2fc3157ca55356eff95538a302d5319a215d Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Fri, 3 Dec 2021 16:26:54 +0530 Subject: [PATCH 7/9] added fallback value in config variables --- config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index 34d128a..9712eff 100644 --- a/config.py +++ b/config.py @@ -37,6 +37,6 @@ WTF_CSRF_ENABLED = True SECRET_KEY = os.environ.get("SECRET_KEY") -RETRY_LOGS_BATCH_LIMIT = os.environ.get("RETRY_LOGS_BATCH_LIMIT") +RETRY_LOGS_BATCH_LIMIT = os.environ.get("RETRY_LOGS_BATCH_LIMIT", 1000) TELCO_CODE_ANSWERED = 16 -MAX_RETRY_ATTEMPTS_FOR_LOGS = os.environ.get("MAX_RETRY_ATTEMPTS_FOR_LOGS") +MAX_RETRY_ATTEMPTS_FOR_LOGS = os.environ.get("MAX_RETRY_ATTEMPTS_FOR_LOGS", 3) From 7217958ff6b445de2cb3a8274b45290039af5e8e Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Fri, 3 Dec 2021 17:12:47 +0530 Subject: [PATCH 8/9] code optimization --- main.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/main.py b/main.py index 86ab12c..47b2ab3 100644 --- a/main.py +++ b/main.py @@ -41,18 +41,10 @@ def retry_failed_webhook(transaction_log_service): failed_ivr_logs = transaction_log_service.get_failed_ivr_transaction_log() for log in failed_ivr_logs: - log.attempts += 1 - db.session.add(log) - db.session.commit() - payload = json.loads(log.payload) payload["log_created_on"] = log.created_on - processed = process_form_data(payload) - - if processed is not True: - continue - - log.processed = True + log.processed = process_form_data(payload) + log.attempts += 1 db.session.add(log) db.session.commit() From 4ca51c2230d6e1fce8cc9fc99333648180e64be4 Mon Sep 17 00:00:00 2001 From: Gaurav Gusain Date: Fri, 3 Dec 2021 17:19:04 +0530 Subject: [PATCH 9/9] minor fix --- api/services/transaction_log_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/services/transaction_log_service.py b/api/services/transaction_log_service.py index 4af6f34..947f897 100644 --- a/api/services/transaction_log_service.py +++ b/api/services/transaction_log_service.py @@ -24,7 +24,7 @@ def get_failed_ivr_transaction_log(self): ) .filter( models.IvrCallbackTransactionLog.attempts - <= app.config["MAX_RETRY_ATTEMPTS_FOR_LOGS"] + < app.config["MAX_RETRY_ATTEMPTS_FOR_LOGS"] ) .order_by(models.IvrCallbackTransactionLog.id) .limit(app.config["RETRY_LOGS_BATCH_LIMIT"])