in save-request/app.py [0:0]
def update_termination_request_status(request_id):
logger.info('Received termination request for stack id: {}'.format(request_id))
existing_req = budgets_table.get_item(
Key={'partitionKey':partition_key, 'rangeKey':request_id},
ProjectionExpression='requestStatus, businessEntity, businessEntityId, pricingInfoAtRequest'
)
if 'Item' not in existing_req:
return False
logger.info('Fetched Request Item from Database: {}'.format(existing_req['Item']))
requested_amt = existing_req['Item']['pricingInfoAtRequest']['EstCurrMonthPrice']
requested_amt_monthly = existing_req['Item']['pricingInfoAtRequest']['31DayPrice']
business_entity_id = existing_req['Item']['businessEntityId']
request_status = existing_req['Item']['requestStatus']
# if status is pending/rejected/blocked, then deduct from accrued blocked amt
if len(business_entity_id) > 0 and (request_status == 'PENDING' or request_status == 'BLOCKED'):
logger.info('Adjusting Accruals since request is in {} state'.format(request_status))
budget_info = budgets_table.get_item(
Key={'partitionKey':budget_parititon_key, 'rangeKey':business_entity_id},
ProjectionExpression='accruedBlockedSpend'
)
accrued_blocked_spend = budget_info['Item']['accruedBlockedSpend']
accrued_blocked_spend = accrued_blocked_spend - requested_amt_monthly
logger.info("Clear the blocked amt if exists")
response = budgets_table.update_item(
Key={'partitionKey': budget_parititon_key, 'rangeKey': business_entity_id},
UpdateExpression = "set accruedBlockedSpend=:b",
ExpressionAttributeValues={
':b': accrued_blocked_spend
},
ReturnValues="UPDATED_NEW")
logger.info("Blocked amount cleared successfully: {}".format(response))
update_expression = "set resourceTerminationTime=:a, resourceStatus=:r"
expression_attributes = {
':a': str(datetime.utcnow()),
':r': 'TERMINATED'
}
if request_status == 'PENDING' or request_status == 'BLOCKED' or request_status == 'SAVED' :
update_expression = update_expression+", requestStatus=:c"
expression_attributes[':c'] = 'REJECTED_SYSTEM'
elif request_status != 'REJECTED_ADMIN':
update_expression = update_expression+", requestStatus=:c"
expression_attributes[':c'] = request_status+'_TERMINATED'
response = budgets_table.update_item(
Key={'partitionKey': partition_key, 'rangeKey':request_id},
UpdateExpression=update_expression,
ExpressionAttributeValues=expression_attributes,
ReturnValues="UPDATED_NEW")
logger.debug("UpdateItem succeeded:")
logger.debug(json.dumps(response))
return True