def get_car(version, car_id): global DB_HEALTH try: results = db.get_car(CONN, car_id) except Exception as e: logging.error( f'failed to get registration details {car_id} error:{str(e)}') results = {} DB_HEALTH += 1 status = 500 if CW_LOGGING: metric = "SLI-DB-Failed-Requests" uri = "GET /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') else: logging.info(f"got entry for {car_id}") status = 200 if CW_LOGGING: metric = "SLI-DB-Success-Requests" uri = "GET /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') return Response(json.dumps(results, sort_keys=True), status=status, mimetype='application/json')
def add_new_car(version): global DB_HEALTH body = request.json if body is not None: try: reg = body['registration'] make = body['make'] model = body['make'] colour = body['colour'] capacity = body['capacity'] except KeyError as e: logging.error(f'new car error: {str(e)}: {type(e)}') results = {"error": f"Incorrect Payload missing key {str(e)}"} status = 400 else: car_details = [reg, make, model, colour, capacity] try: db.add_new_car(CONN, car_details) except Exception as e: if 'already exists.' in str(e): logging.error( f'duplicate registration details {car_details[0]}') status = 400 results = { "error": f'duplicate registration details {car_details[0]}' } else: logging.error(f'error with car insert {str(e)}') DB_HEALTH += 1 status = 500 results = {"error": 'something went wrong'} if CW_LOGGING: metric = "SLI-DB-Failed-Requests" uri = "POST /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') else: logging.info(f"added new entry {car_details[0]}") status = 200 results = {"success": status} if CW_LOGGING: metric = "SLI-DB-Success-Requests" uri = "POST /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') else: status = 400 logging.error('missing payload') results = {"error": "empty payload"} return Response(json.dumps(results, sort_keys=True), status=status, mimetype='application/json')
def update_car(version, car_id): global DB_HEALTH reg = car_id body = request.json if body is not None: try: make = body['make'] model = body['make'] colour = body['colour'] capacity = body['capacity'] except KeyError as e: logging.error(f'new car error: {str(e)}: {type(e)}') results = {"error": f"Incorrect Payload missing key {str(e)}"} status = 400 else: car_details = [reg, make, model, colour, capacity] try: rows = db.update_car(CONN, car_details) except Exception as e: logging.error(f'update error {str(e)}') DB_HEALTH += 1 status = 500 results = {"error": 'something went wrong'} if CW_LOGGING: metric = "SLI-DB-Failed-Requests" uri = "PUT /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') else: if rows == 0: logging.error(f"error: updated {rows} for entry {reg}") status = 400 results = {"error": f"car {reg} not found"} else: logging.info(f"updated {rows} for entry {reg}") status = 200 results = {"success": status} if CW_LOGGING: metric = "SLI-DB-Success-Requests" uri = "PUT /car" aws.put_cloudwatch_metric(CWM, metric, 'pysimple', RDS_ARN, 1, uri, 'pysimple') else: status = 400 logging.error('missing payload') results = {"error": "empty payload"} return Response(json.dumps(results, sort_keys=True), status=status, mimetype='application/json')