in cdk-iot-analytics/cdk_sap_blog/sap/lambda_assets/function_code/lambda_function.py [0:0]
def lambda_handler(event, context):
print(f"event: {event}")
sapcred=json.loads(_get_secret())
sapUser=sapcred["username"]
sapPassword=sapcred["password"]
# Retrieve the CSRF token first
url = _get_base_url()
session = requests.Session()
try:
response = session.head(url, auth=HTTPBasicAuth(sapUser,sapPassword), headers={'x-csrf-token': 'fetch'})
token = response.headers.get('x-csrf-token', '')
print(f"SAP session response text: {response.text}")
except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError) as err:
print("Connection to SAP System timed out: " + str(err.__class__.__name__))
print("Is this the correct hostname and port number?")
sys.exit(1)
print(f"SAP session response code: {response.status_code}")
# Execute Post request
try:
url = _get_base_url() + "/" + odpEntitySetName
headers = {
"Content-Type" : "application/json; charset=utf-8",
"X-CSRF-Token" : token
}
print(f"SAP POST url: {url}")
print(f"SAP POST headers: {headers}")
print(f"SAP POST body: {event}")
response = session.post(
url,
auth=HTTPBasicAuth(sapUser,sapPassword),
headers=headers,
json=event,
verify=False
)
print(f"SAP POST response: {response}")
print(f"SAP POST response code: {response.status_code}")
print(f"SAP POST response text: {response.text}")
print(f"SAP POST response headers: {response.headers}")
if response.status_code == 201:
message = (response.headers["sap-message"])
print("Data successfully created in SAP")
print(response.headers["sap-message"])
try:
tmp = v = xml.parse(message)
message = (f"SAP Service {tmp['notification']['message']} for temperature alarm!")
except Exception as exc:
print(f'xml parser failed: {exc}')
sns_client.publish(
TopicArn=snsAlertEmailTopic,
Message=message
)
except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError) as err:
print("Connection to SAP System timed out: " + str(err.__class__.__name__))
print("Is this the correct hostname and port number?")
sys.exit(1)
print(response.status_code)