Skip to content

Commit 03b4e9e

Browse files
authored
fix freecall config issue (#50)
fix freecall config issue
2 parents a8f5e14 + 90077df commit 03b4e9e

File tree

7 files changed

+47
-89
lines changed

7 files changed

+47
-89
lines changed

metering/constants.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ class StatusCode:
1010
"Access-Control-Allow-Origin": "*",
1111
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
1212
}
13-
PAYMENT_MODE_FREE_CALL = 'freecall'
1413

1514

1615
class StatusMessage:
1716
BAD_PARAMETER = "Request validation failed"
1817
SERVER_ERROR_MSG = "failed"
1918
SUCCESS_POST_CODE = "successful"
19+
20+
21+
PAYMENT_MODE_FREECALL_VALUE = "freecall"
22+
PAYMENT_MODE_ESCROW_VALUE = "escrow"

metering/handlers/usage_handler.py

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
from constants import StatusCode, StatusMessage
55
from logger import setup_logger
66
from services import UsageService
7-
from settings import PAYMENT_MODE_FREECALL_VALUE
8-
from utils import validate_request, make_response
7+
from utils import validate_request, make_response, usage_record_add_verify_fields
98

109
usage_service = UsageService()
1110

@@ -16,45 +15,27 @@
1615
'service_method', 'group_id', 'status', 'start_time', 'end_time']
1716

1817

19-
def add_verify_fields(usage_detail_dict):
20-
new_required_keys = {
21-
'usage_type', 'status', 'usage_value', 'start_time', 'end_time',
22-
'created_at', 'payment_mode', 'group_id', 'registry_address_key',
23-
'ethereum_json_rpc_endpoint', 'response_time', 'response_code', 'error_message',
24-
'version', 'client_type', 'user_details', 'channel_id', 'operation', 'user_address',
25-
'username', 'org_id', 'service_id', 'resource', 'request_id'
26-
}
27-
for key in new_required_keys:
28-
if (key not in usage_detail_dict) or (usage_detail_dict[key] == ""):
29-
usage_detail_dict[key] = None
30-
31-
if usage_detail_dict['username'] is not None and usage_detail_dict['user_address'] is None:
32-
usage_detail_dict['payment_mode'] = PAYMENT_MODE_FREECALL_VALUE
33-
else:
34-
usage_detail_dict['payment_mode'] = 'paid'
35-
return usage_detail_dict
36-
37-
3818
def main(event, context):
39-
usage_detail_dict = json.loads(event['body'])
19+
request_dict = json.loads(event['body'])
4020

4121
try:
42-
if validate_request(required_keys, usage_detail_dict):
43-
usage_detail_dict = add_verify_fields(usage_detail_dict)
22+
if validate_request(required_keys, request_dict):
23+
usage_detail_dict = usage_record_add_verify_fields(request_dict)
24+
print(f"usage record after modification: {usage_detail_dict}")
4425
usage_service.save_usage_details(usage_detail_dict)
4526
response = make_response(
4627
StatusCode.SUCCESS_GET_CODE,
4728
json.dumps({"status": StatusMessage.SUCCESS_POST_CODE})
4829
)
4930
else:
50-
logger.error(f'Request validation failed {usage_detail_dict}')
31+
logger.error(f'Request validation failed {request_dict}')
5132
response = make_response(
5233
StatusCode.BAD_PARAMETERS_CODE,
5334
json.dumps({"status": StatusMessage.BAD_PARAMETER})
5435
)
5536
except Exception as e:
5637
logger.error(e)
57-
logger.error(f'failed for request {usage_detail_dict}')
38+
logger.error(f'failed for request {request_dict}')
5839
response = make_response(
5940
StatusCode.SERVER_ERROR_CODE,
6041
json.dumps({"status": StatusMessage.SERVER_ERROR_MSG})

metering/logger.py

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,11 @@
22

33

44
def setup_logger():
5-
logging.config.dictConfig({
6-
"version": 1,
7-
"disable_existing_loggers": False,
8-
"formatters": {
9-
"simple": {
10-
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
11-
}
12-
},
5+
logging.basicConfig(
6+
level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
137

14-
"handlers": {
15-
"console": {
16-
"class": "logging.StreamHandler",
17-
"level": "DEBUG",
18-
"formatter": "simple",
19-
"stream": "ext://sys.stdout"
20-
}
218

22-
# "info_file_handler": {
23-
# "class": "logging.handlers.RotatingFileHandler",
24-
# "level": "INFO",
25-
# "formatter": "simple",
26-
# "filename": "info.log",
27-
# },
28-
#
29-
# "error_file_handler": {
30-
# "class": "logging.handlers.RotatingFileHandler",
31-
# "level": "ERROR",
32-
# "formatter": "simple",
33-
# "filename": "error.log",
34-
# "encoding": "utf8"
35-
# }
36-
},
37-
38-
"loggers": {
39-
"sqlalchemy": {
40-
"level": "ERROR",
41-
"handlers": ["console"],
42-
"propagate": "no"
43-
},
44-
"freecall_handler": {
45-
"level": "ERROR",
46-
"handlers": ["console"],
47-
"propagate": "no"
48-
},
49-
"": {
50-
"level": "ERROR",
51-
"handlers": ["console"],
52-
"propagate": "no"
53-
}
54-
},
55-
56-
"root": {
57-
"level": "ERROR",
58-
"handlers": ["console"]
59-
}
60-
})
9+
if __name__ == '__main__':
10+
setup_logger()
11+
logger = logging.getLogger()
12+
logger.info("hi, it is test")

metering/services.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def save_usage_details(self, usage_details_dict):
4040

4141

4242
class APIUtilityService:
43-
lambda_client = boto3.client('lambda')
43+
44+
def __init__(self):
45+
self.lambda_client = boto3.client('lambda')
4446

4547
def get_user_address(self, group_id, channel_id):
4648
lambda_payload = {

metering/storage.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import logging
22

3-
from constants import PAYMENT_MODE_FREE_CALL
43
from models import UserOrgGroupModel, UsageModel
54
from repository.org_service_config_repository import OrgServiceRepo
65
from repository.usage_repository import UsageRepository
76
from repository.user_org_group_repository import UserOrgGroupRepository
7+
from constants import PAYMENT_MODE_FREECALL_VALUE, PAYMENT_MODE_ESCROW_VALUE
88

99
logger = logging.getLogger(__name__)
1010

@@ -29,14 +29,14 @@ def __init__(self):
2929

3030
def get_user_org_group_id(self, usage_details):
3131

32-
if usage_details['payment_mode'] == PAYMENT_MODE_FREE_CALL:
32+
if usage_details['payment_mode'] == PAYMENT_MODE_FREECALL_VALUE:
3333
user_org_group_id = self.user_org_group_repo.get_user_org_group_id_by_username(
3434
usage_details['username'],
3535
usage_details['organization_id'],
3636
usage_details['service_id'],
3737
usage_details['service_method']
3838
)
39-
elif usage_details['user_address'] is None:
39+
elif usage_details['payment_mode'] == PAYMENT_MODE_ESCROW_VALUE:
4040
user_org_group_id = self.user_org_group_repo.get_user_org_group_id_by_user_address(
4141
usage_details['user_address'],
4242
usage_details['organization_id'],
@@ -45,7 +45,7 @@ def get_user_org_group_id(self, usage_details):
4545
usage_details['group_id']
4646
)
4747
else:
48-
raise Exception('Unknown user request error')
48+
raise Exception("Invalid payment mode")
4949

5050
if user_org_group_id is not None:
5151
return user_org_group_id.id
@@ -101,7 +101,8 @@ def add_usage_data(self, usage_details):
101101
user_name=usage_details["username"],
102102
service_id=usage_details["service_id"],
103103
resource=usage_details["service_method"],
104-
request_id=usage_details["request_id"]
104+
request_id=usage_details["request_id"],
105+
payment_mode=usage_details["payment_mode"]
105106
)
106107
self.usage_repo.create_item(usage_record)
107108
logger.info(f"added usage data for {usage_details}")

metering/tests/test_total_calls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def test_success_usage_record(self):
5151
"error_message": "",
5252
"version": "v1.0.0",
5353
'username': 'user@snet',
54-
'payment_mode': "",
54+
'payment_mode': "freecall",
5555
"operation": "read",
5656
"usage_type": "apicall",
5757
"status": "success",

metering/utils.py

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

3-
from settings import PAYMENT_MODE_FREECALL_VALUE
3+
from constants import PAYMENT_MODE_FREECALL_VALUE
44

55

66
def make_response(status_code, body, header=None):
@@ -40,3 +40,22 @@ def is_free_call(usage_details_dict):
4040
if usage_details_dict['payment_mode'] == PAYMENT_MODE_FREECALL_VALUE:
4141
return True
4242
return False
43+
44+
45+
def usage_record_add_verify_fields(usage_detail_dict):
46+
new_required_keys = {
47+
'usage_type', 'status', 'usage_value', 'start_time', 'end_time',
48+
'created_at', 'payment_mode', 'group_id', 'registry_address_key',
49+
'ethereum_json_rpc_endpoint', 'response_time', 'response_code', 'error_message',
50+
'version', 'client_type', 'user_details', 'channel_id', 'operation', 'user_address',
51+
'username', 'org_id', 'service_id', 'resource', 'request_id'
52+
}
53+
for key in new_required_keys:
54+
if (key not in usage_detail_dict) or (usage_detail_dict[key] == ""):
55+
usage_detail_dict[key] = None
56+
57+
if usage_detail_dict['username'] is not None and usage_detail_dict['user_address'] is None:
58+
usage_detail_dict['payment_mode'] = PAYMENT_MODE_FREECALL_VALUE
59+
else:
60+
usage_detail_dict['payment_mode'] = 'paid'
61+
return usage_detail_dict

0 commit comments

Comments
 (0)