Skip to content

Commit f0c5641

Browse files
author
prashantramangupta
committed
code restructured | code for platform authorizer and platform processes is separated
1 parent 206345b commit f0c5641

File tree

12 files changed

+204
-104
lines changed

12 files changed

+204
-104
lines changed

build.sh

Lines changed: 0 additions & 2 deletions
This file was deleted.

constant.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
NETWORKS = {
2+
999: {
3+
'db': {'DB_HOST': '',
4+
'DB_USER': '',
5+
'DB_PASSWORD': '',
6+
'DB_NAME': '',
7+
'DB_PORT': 3306
8+
}
9+
}
10+
}
11+
METRICS_NETWORK_ID = 999

lambda_handler.py

Lines changed: 0 additions & 92 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from repository import Repository
2+
3+
4+
class Token:
5+
def __init__(self, net_id):
6+
self.net_id = net_id
7+
self.repo = Repository(net_id)
8+
9+
def validate_token(self, daemon_id, token):
10+
print("validate_token::daemon_id: ", daemon_id);
11+
qry = "SELECT * FROM daemon_token WHERE daemon_id = %s and token = %s "
12+
res = self.repo.execute(qry, [daemon_id, token])
13+
if len(res) > 0:
14+
return {'validated': True}
15+
return {'validated': False}

platform-usage-authorizer/build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rm daemon_authorizer.zip
2+
zip -r daemon_authorizer.zip * -x \*venv\*
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import json
2+
import os
3+
4+
from authorizer import Token
5+
from constant import METRICS_NETWORK_ID
6+
7+
8+
def request_handler(event, context):
9+
if 'path' not in event:
10+
return get_response("400", {"status": "failed", "error": "Bad Request"})
11+
try:
12+
path = event['path'].lower()
13+
data = None
14+
if "/event" == path:
15+
payload_dict = event['headers']
16+
print("Processing [" + str(path) + "] with body [" + str(payload_dict) + "]")
17+
net_id = METRICS_NETWORK_ID
18+
token_instance = Token(net_id)
19+
data = token_instance.validate_token(daemon_id=payload_dict['x-daemonid'],
20+
token=payload_dict['x-token'])
21+
print(data)
22+
response = get_lambda_authorizer_response_format(event=event, allow=data.get('validated', False))
23+
return response
24+
except Exception as e:
25+
print(repr(e))
26+
return get_lambda_authorizer_response_format(event=event, allow=False)
27+
28+
29+
# Generate response JSON that API gateway expects from the lambda function
30+
def get_response(status_code, message):
31+
return {
32+
'statusCode': status_code,
33+
'body': json.dumps(message),
34+
'headers': {
35+
'Content-Type': 'application/json',
36+
"X-Requested-With": '*',
37+
"Access-Control-Allow-Headers": 'Access-Control-Allow-Origin, Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with',
38+
"Access-Control-Allow-Origin": '*',
39+
"Access-Control-Allow-Methods": 'GET,OPTIONS,POST'
40+
}
41+
}
42+
43+
44+
def get_lambda_authorizer_response_format(event, allow):
45+
response = {
46+
"principalId": os.environ['principalId'],
47+
"policyDocument": {
48+
"Version": '2012-10-17',
49+
"Statement": [
50+
{
51+
"Action": 'execute-api:Invoke',
52+
"Resource": event['methodArn']
53+
}
54+
]
55+
}
56+
}
57+
if allow:
58+
response["policyDocument"]["Statement"][0]["Effect"] = 'Allow'
59+
else:
60+
response["policyDocument"]["Statement"][0]["Effect"] = 'Deny'
61+
return response
File renamed without changes.

platform-usage-process/build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rm platform_usage_process.zip
2+
zip -r platform_usage_process.zip * -x \*venv\*
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import json
2+
3+
from register import Token
4+
from constant import METRICS_NETWORK_ID
5+
from metrics import Metrics
6+
7+
8+
def request_handler(event, context):
9+
if 'path' not in event:
10+
return get_response("400", {"status": "failed",
11+
"error": "Bad Request"})
12+
try:
13+
path = event['path'].lower()
14+
data = None
15+
payload_dict = payload_check(payload=event['body'], path=path)
16+
net_id = METRICS_NETWORK_ID
17+
if "/register" == path:
18+
token_instance = Token(net_id)
19+
data = token_instance.process_token(daemon_id=payload_dict['daemonId'])
20+
elif "/event" == path:
21+
obj_metrics = Metrics(net_id=net_id)
22+
if payload_dict['type'] == 'request':
23+
obj_metrics.handle_request_type(payload_dict)
24+
elif payload_dict['type'] == 'response':
25+
obj_metrics.handle_response_type(payload_dict)
26+
data = {}
27+
28+
if data is None:
29+
response = get_response("400", {"status": "failed",
30+
"error": "Bad Request",
31+
"api": event['path'],
32+
"payload": payload_dict})
33+
else:
34+
if data.get('error', '') == '':
35+
response = get_response("200", {"status": "success", "data": data})
36+
else:
37+
error = data['error']
38+
data.pop('error')
39+
response = get_response("200", {"status": "failed", "data": data, "error": error})
40+
41+
return response
42+
except Exception as e:
43+
response = get_response(500, {"status": "failed",
44+
"error": repr(e),
45+
"api": event['path'],
46+
"payload": payload_dict})
47+
return response
48+
49+
50+
def payload_check(payload, path):
51+
payload_dict = None
52+
if payload is not None and len(payload) > 0:
53+
payload_dict = json.loads(payload)
54+
print("Processing [" + str(path) + "] with body [" + str(payload) + "]")
55+
return payload_dict
56+
57+
58+
# Generate response JSON that API gateway expects from the lambda function
59+
def get_response(status_code, message):
60+
return {
61+
'statusCode': status_code,
62+
'body': json.dumps(message),
63+
'headers': {
64+
'Content-Type': 'application/json',
65+
"X-Requested-With": '*',
66+
"Access-Control-Allow-Headers": 'Access-Control-Allow-Origin, Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with',
67+
"Access-Control-Allow-Origin": '*',
68+
"Access-Control-Allow-Methods": 'GET,OPTIONS,POST'
69+
}
70+
}

platform-usage-process/metrics.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from datetime import datetime as dt
2+
3+
from repository import Repository
4+
5+
6+
class Metrics:
7+
def __init__(self, net_id):
8+
self.net_id = net_id
9+
self.repo = Repository(net_id)
10+
11+
def handle_request_type(self, params):
12+
try:
13+
insrt_dm_rq_sts = "INSERT INTO daemon_request_stats (ethereum_json_rpc_endpoint, group_id, input_data_size, " \
14+
"organization_id, registry_address_key, request_id, request_received_time, service_id, " \
15+
"service_method, row_created, row_updated) " \
16+
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
17+
dm_req_params = (params['ethereum_json_rpc_endpoint'], params['group_id'], params['input_data_size'],
18+
params['organization_id'], params['registry_address_key'], params['request_id'],
19+
params['request_received_time'][:19], params['service_id'], params['service_method'],
20+
dt.utcnow(),
21+
dt.utcnow())
22+
self.repo.execute(insrt_dm_rq_sts, dm_req_params)
23+
except Exception as e:
24+
print(repr(e))
25+
raise e
26+
27+
def handle_response_type(self, params):
28+
try:
29+
insrt_dm_rs_sts = "INSERT INTO daemon_response_stats (error_message, ethereum_json_rpc_endpoint, group_id, " \
30+
"organization_id, registry_address_key, request_id, request_received_time, response_code, " \
31+
"response_sent_time, response_time, service_id, service_method, row_created, row_updated) " \
32+
"VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
33+
dm_rs_params = (params['error_message'], params['ethereum_json_rpc_endpoint'], params['group_id'],
34+
params['organization_id'], params['registry_address_key'], params['request_id'],
35+
params['request_received_time'][:19], params['response_code'], params['response_sent_time'][:19],
36+
params['response_time'], params['service_id'], params['service_method'], dt.utcnow(),
37+
dt.utcnow())
38+
self.repo.execute(insrt_dm_rs_sts, dm_rs_params)
39+
except Exception as e:
40+
print(repr(e))
41+
raise e

0 commit comments

Comments
 (0)