Skip to content

Commit 235c0e1

Browse files
committed
added logging
1 parent 6871a29 commit 235c0e1

File tree

8 files changed

+92
-89
lines changed

8 files changed

+92
-89
lines changed
Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,41 @@
1-
import json
2-
import logging
3-
41
from constants import StatusCode, StatusMessage, HEADER_POST_RESPONSE
52
from services import UsageService
6-
from logger import setup_logger
7-
from utils import validate_request, make_response
3+
from logger import get_logger
4+
from utils import validate_request, generate_lambda_response
85

96
usage_service = UsageService()
107

11-
setup_logger()
12-
logger = logging.getLogger(__name__)
8+
logger = get_logger(__name__)
139

1410
required_keys = ['organization_id', 'service_id']
1511

1612

1713
def main(event, context):
18-
if validate_request(required_keys, event['queryStringParameters']):
19-
try:
14+
logger.info("Free call request received")
15+
try:
16+
if validate_request(required_keys, event['queryStringParameters']):
2017
org_id = event['queryStringParameters']['organization_id']
2118
service_id = event['queryStringParameters']['service_id']
2219
username = event['queryStringParameters']['username']
20+
21+
logger.info(f"Fetched values from request \n"
22+
f"username: {username} \n"
23+
f"org_id: {org_id} \n"
24+
f"service_id: {service_id} \n")
25+
2326
free_call_details = usage_service.get_free_call_details(
2427
username, org_id, service_id)
25-
return_value = make_response(
26-
status_code=StatusCode.SUCCESS_GET_CODE,
27-
header=HEADER_POST_RESPONSE,
28-
body=json.dumps(free_call_details)
29-
)
30-
31-
except Exception as e:
32-
logger.error(e)
33-
return_value = make_response(
34-
status_code=StatusCode.SERVER_ERROR_CODE,
35-
header=HEADER_POST_RESPONSE,
36-
body=json.dumps({"error": StatusMessage.SERVER_ERROR_MSG})
37-
)
38-
39-
else:
40-
logger.error(f"Request validation failed for {event['queryStringParameters']}")
41-
return_value = make_response(
42-
status_code=StatusCode.BAD_PARAMETERS_CODE,
43-
header=HEADER_POST_RESPONSE,
44-
body=json.dumps({"error": StatusMessage.BAD_PARAMETER})
45-
)
46-
47-
return return_value
28+
response = free_call_details
29+
status_code = StatusCode.SUCCESS_GET_CODE
30+
else:
31+
logger.error(f"Request validation failed")
32+
logger.info(event)
33+
response = StatusMessage.BAD_PARAMETER
34+
status_code = StatusCode.BAD_PARAMETERS_CODE
35+
except Exception as e:
36+
logger.error("Failed to get free call details")
37+
logger.info(event)
38+
status_code = StatusCode.SERVER_ERROR_CODE,
39+
response = StatusMessage.SERVER_ERROR_MSG
40+
41+
return generate_lambda_response(status_code, response)

metering/handlers/usage_handler.py

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,37 @@
22
import logging
33

44
from constants import StatusCode, StatusMessage
5-
from logger import setup_logger
5+
from logger import get_logger
66
from services import UsageService
7-
from utils import validate_request, make_response, usage_record_add_verify_fields
7+
from utils import validate_request, usage_record_add_verify_fields, generate_lambda_response
88

99
usage_service = UsageService()
1010

11-
setup_logger()
12-
logger = logging.getLogger(__name__)
11+
logger = get_logger(__name__)
1312

1413
required_keys = ["organization_id", "service_id", "username", 'usage_value', 'usage_type',
1514
'service_method', 'group_id', 'status', 'start_time', 'end_time']
1615

1716

1817
def main(event, context):
19-
request_dict = json.loads(event['body'])
20-
18+
logger.info("Usage record request received")
2119
try:
20+
request_dict = json.loads(event['body'])
2221
if validate_request(required_keys, request_dict):
2322
usage_detail_dict = usage_record_add_verify_fields(request_dict)
24-
print(f"usage record after modification: {usage_detail_dict}")
23+
logging.info(f"usage record after modification: {usage_detail_dict}")
2524
usage_service.save_usage_details(usage_detail_dict)
26-
response = make_response(
27-
StatusCode.SUCCESS_GET_CODE,
28-
json.dumps({"status": StatusMessage.SUCCESS_POST_CODE})
29-
)
25+
response = "success"
26+
status_code = StatusCode.SUCCESS_GET_CODE
3027
else:
31-
logger.error(f'Request validation failed {request_dict}')
32-
response = make_response(
33-
StatusCode.BAD_PARAMETERS_CODE,
34-
json.dumps({"status": StatusMessage.BAD_PARAMETER})
35-
)
28+
logger.error(f"Request validation failed")
29+
logger.info(event)
30+
response = StatusMessage.BAD_PARAMETER
31+
status_code = StatusCode.BAD_PARAMETERS_CODE
3632
except Exception as e:
37-
logger.error(e)
38-
logger.error(f'failed for request {request_dict}')
39-
response = make_response(
40-
StatusCode.SERVER_ERROR_CODE,
41-
json.dumps({"status": StatusMessage.SERVER_ERROR_MSG})
42-
)
33+
logger.error("Failed to get free call details")
34+
logger.info(event)
35+
status_code = StatusCode.SERVER_ERROR_CODE,
36+
response = StatusMessage.SERVER_ERROR_MSG
4337

44-
return response
38+
return generate_lambda_response(status_code, response)

metering/logger.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import logging.config
1+
import logging
2+
import sys
3+
FORMATTER = logging.Formatter("%(asctime)s %(levelname)s %(name)s %(message)s")
24

35

4-
def setup_logger():
5-
logging.basicConfig(
6-
level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
6+
def get_console_handler():
7+
console_handler = logging.StreamHandler(sys.stdout)
8+
console_handler.setFormatter(FORMATTER)
9+
return console_handler
710

811

9-
if __name__ == '__main__':
10-
setup_logger()
11-
logger = logging.getLogger()
12-
logger.info("hi, it is test")
12+
def get_logger(logger_name):
13+
logger = logging.getLogger(logger_name)
14+
logger.setLevel(logging.INFO)
15+
logger.addHandler(get_console_handler())
16+
logger.propagate = False
17+
return logger

metering/repository/base_repository.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from sqlalchemy.orm import sessionmaker
55
from settings import DB_URL
66

7-
engine = create_engine(DB_URL, echo=True)
7+
engine = create_engine(DB_URL, echo=False)
88

99
Session = sessionmaker(bind=engine)
1010
default_session = Session()

metering/serverless.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ functions:
5454
type: request
5555
arn: ${file(./config.${self:provider.stage}.json):SIGN_AUTHORIZER}
5656
identitySource: ${file(./config.${self:provider.stage}.json):SIGN_HEADERS}
57-
name: verify_authorizer
57+
name: sign_authorizer
5858
# resultTtlInSeconds: 100
5959
cors:
6060
origin: ${self:custom.origin.${self:provider.stage}}
@@ -88,7 +88,7 @@ functions:
8888
type: request
8989
arn: ${file(./config.${self:provider.stage}.json):SIGN_AUTHORIZER}
9090
identitySource: ${file(./config.${self:provider.stage}.json):SIGN_HEADERS}
91-
name: freecall_authorizer
91+
name: sign_authorizer
9292
# resultTtlInSeconds: 100
9393
cors:
9494
origin: ${self:custom.origin.${self:provider.stage}}
@@ -121,7 +121,7 @@ functions:
121121
type: request
122122
arn: ${file(./config.${self:provider.stage}.json):SIGN_AUTHORIZER}
123123
identitySource: ${file(./config.${self:provider.stage}.json):SIGN_HEADERS}
124-
name: usage_authorizer
124+
name: sign_authorizer
125125
# resultTtlInSeconds: 100
126126
cors:
127127
origin: ${self:custom.origin.${self:provider.stage}}

metering/services.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import json
2-
import logging
32

43
import boto3 as boto3
54

5+
from logger import get_logger
66
from settings import CONTRACT_API_ARN, CONTRACT_API_STAGE
77
from storage import DatabaseStorage
88
from utils import is_free_call
99

10-
logger = logging.getLogger(__name__)
10+
logger = get_logger(__name__)
1111

1212

1313
class UsageService(object):
@@ -17,6 +17,7 @@ def get_free_call_details(self, username, org_id, service_id, group_id=None):
1717
total_calls, free_calls = self.storage_service.get_usage_details(
1818
username, org_id, service_id, group_id)
1919

20+
logger.info(f"Free calls allowed: {free_calls}, Total calls made: {total_calls}")
2021
if not free_calls:
2122
free_calls = 0
2223
if not total_calls:
@@ -31,10 +32,14 @@ def get_free_call_details(self, username, org_id, service_id, group_id=None):
3132
def save_usage_details(self, usage_details_dict):
3233
# nedd to introduce entities when we enhance feature to this service right now directly using dicts
3334
if not is_free_call(usage_details_dict):
35+
logger.info("Received usage record request for paid call")
3436
channel_id = usage_details_dict['channel_id']
3537
group_id = usage_details_dict['group_id']
38+
3639
user_address = APIUtilityService().get_user_address(group_id, channel_id)
3740
usage_details_dict['user_address'] = user_address
41+
logger.info(f"fetched user address from contract api: {user_address}")
42+
3843
self.storage_service.add_usage_data(usage_details_dict)
3944
return
4045

@@ -52,6 +57,7 @@ def get_user_address(self, group_id, channel_id):
5257
}
5358

5459
try:
60+
logger.info(f"Calling contract api for user_address")
5561
response = self.lambda_client.invoke(
5662
FunctionName=CONTRACT_API_ARN,
5763
Payload=json.dumps(lambda_payload)

metering/storage.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import logging
22

3+
from logger import get_logger
34
from models import UserOrgGroupModel, UsageModel
45
from repository.org_service_config_repository import OrgServiceRepo
56
from repository.usage_repository import UsageRepository
67
from repository.user_org_group_repository import UserOrgGroupRepository
78
from constants import PAYMENT_MODE_FREECALL_VALUE, PAYMENT_MODE_ESCROW_VALUE
89

9-
logger = logging.getLogger(__name__)
10+
logger = get_logger(__name__)
1011

1112

1213
class Storage(object):
@@ -110,8 +111,14 @@ def add_usage_data(self, usage_details):
110111
def get_usage_details(self, user_name, org_id, service_id, group_id=None):
111112
optin_time = self.usage_repo.get_optin_time(
112113
user_name, org_id, service_id)
114+
logger.info(f"opt in for the user{user_name}, \n"
115+
f"org_id: {org_id}, service_id: {service_id} \n"
116+
f"{optin_time.strftime('%Y-%m-%d %H:%M:%S')}")
117+
113118
free_calls = self.org_service_config_repo.get_service_config(
114119
org_id, service_id, optin_time)
120+
115121
total_calls = self.usage_repo.get_total_calls(
116122
user_name, org_id, service_id)
123+
117124
return total_calls, free_calls

metering/utils.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1+
import json
12
import logging
23

34
from constants import PAYMENT_MODE_FREECALL_VALUE
45

56

6-
def make_response(status_code, body, header=None):
7-
return {
8-
"statusCode": status_code,
9-
"headers": header,
10-
"body": body
7+
def generate_lambda_response(status_code, message, headers=None):
8+
response = {
9+
'statusCode': status_code,
10+
'body': json.dumps(message),
11+
'headers': {
12+
'Content-Type': 'application/json',
13+
"X-Requested-With": '*',
14+
"Access-Control-Allow-Headers": 'Access-Control-Allow-Origin, Content-Type,X-Amz-Date,Authorization,'
15+
'X-Api-Key,x-requested-with',
16+
"Access-Control-Allow-Origin": '*',
17+
"Access-Control-Allow-Methods": 'GET,OPTIONS,POST'
18+
}
1119
}
12-
13-
14-
def configure_log(logger):
15-
logger.setLevel(logging.INFO)
16-
17-
# create a file handler
18-
handler = logging.StreamHandler()
19-
handler.setLevel(logging.INFO)
20-
# create a logging format
21-
formatter = logging.Formatter(
22-
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
23-
handler.setFormatter(formatter)
24-
# add the handlers to the logger
25-
logger.addHandler(handler)
20+
if headers is not None:
21+
response["headers"].update(headers)
22+
return response
2623

2724

2825
def validate_request(required_keys, request_body):

0 commit comments

Comments
 (0)