示例#1
0
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')
示例#2
0
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')
示例#3
0
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')