refactor: Update update_container_workload to use standard api_response

This commit is contained in:
2025-08-03 12:20:55 +09:30
parent bd0cb4836a
commit 04be1fc190
+69 -16
View File
@@ -277,30 +277,47 @@ def request_container_workload():
def update_container_workload(system_container_id):
data = request.json
logger.debug(data)
# TODO - need to add error to autid table if there is one
# Validate new_status
valid_statuses = ["running", "deleted", "stopped","dead", "launch_failed"]
new_status=data.get("new_status")
valid_statuses = ["running", "deleted", "stopped", "dead", "launch_failed"]
new_status = data.get("new_status")
if new_status not in valid_statuses:
error_message = f"Invalid status {new_status} Must be one of: {', '.join(valid_statuses)}"
error_message = f"Invalid status {new_status}. Must be one of: {', '.join(valid_statuses)}"
logger.error(error_message)
return jsonify({"success": False, "message": error_message}), 400
return api_response(
success=False,
message=error_message,
status=400,
error_type="INVALID_STATUS",
error_details={"valid_statuses": valid_statuses, "provided_status": new_status}
)
# Validate worker_id as UUIDs
try:
worker_id = (data.get("worker_id"))
worker_id = data.get("worker_id")
except (ValueError, TypeError) as e:
error_message = "Invalid UUID format for worker_id."
logger.error(f"{error_message} Error: {str(e)}")
return jsonify({"success": False, "message": error_message}), 400
return api_response(
success=False,
message=error_message,
status=400,
error_type="INVALID_UUID",
error_details={"field": "worker_id"}
)
# Validate system_container_id as UUID
try:
system_container_id = (system_container_id)
system_container_id = system_container_id
except (ValueError, TypeError) as e:
error_message = "Invalid UUID format for system_container_id."
logger.error(f"{error_message} Error: {str(e)}")
return jsonify({"success": False, "message": error_message}), 400
return api_response(
success=False,
message=error_message,
status=400,
error_type="INVALID_UUID",
error_details={"field": "system_container_id"}
)
# Validate timestamp as ISO format
try:
@@ -308,28 +325,50 @@ def update_container_workload(system_container_id):
except (ValueError, TypeError) as e:
error_message = "Invalid ISO timestamp format."
logger.error(f"{error_message} Error: {str(e)}")
return jsonify({"success": False, "message": error_message}), 400
return api_response(
success=False,
message=error_message,
status=400,
error_type="INVALID_TIMESTAMP",
error_details={"provided_timestamp": data.get("timestamp")}
)
# Fetch the container from the database
try:
container = Workload.query.filter(
Workload.id == system_container_id,
or_(Workload.workload_type == "Container", Workload.workload_type == "NSController"),
# Commenting out the deleted filter becuase when we need handle containers being
# rebuilt we must accept that deleted containers can become not deleted again
# Commenting out the deleted filter because when we need handle containers being
# rebuilt we must accept that deleted containers can become not deleted again
# Workload.deleted == False
).first_or_404()
except Exception as e:
error_message = f"Failed to fetch container with ID {system_container_id}."
logger.error(f"{error_message} Error: {str(e)}")
return jsonify({"success": False, "message": error_message}), 404
return api_response(
success=False,
message=error_message,
status=404,
error_type="CONTAINER_NOT_FOUND",
error_details={"container_id": system_container_id}
)
# Check if the container is actually on the reported worker
if container.workload_host_id != worker_id:
error_message = f"Workload host in DB for container ID {system_container_id} is {container.workload_host_id}, but was reported from {worker_id}. Ignoring."
logger.error(error_message)
return jsonify({"success": False, "message": error_message}), 400
return api_response(
success=False,
message=error_message,
status=400,
error_type="WORKER_MISMATCH",
error_details={
"container_id": system_container_id,
"expected_worker": container.workload_host_id,
"reported_worker": worker_id
}
)
# Update the status of the container
try:
@@ -346,12 +385,26 @@ def update_container_workload(system_container_id):
db.session.commit()
return jsonify({"success": True, "message": "Status updated successfully."}), 200
return api_response(
success=True,
message="Status updated successfully.",
data={
"container_id": system_container_id,
"new_status": new_status,
"timestamp": data.get("timestamp")
}
)
except Exception as e:
error_message = f"Failed to update status for Container ID: {system_container_id}."
logger.error(f"{error_message} Error: {str(e)}")
db.session.rollback()
return jsonify({"success": False, "message": error_message}), 500
return api_response(
success=False,
message=error_message,
status=500,
error_type="DATABASE_ERROR",
error_details={"error": str(e)}
)
@api_bp.route('/workloads/containers/<workload_id>', methods=['GET'])
def get_container_workload(workload_id):