diff --git a/challenge_api/extensions/k8s/client.py b/challenge_api/extensions/k8s/client.py index 930437d..c5a6760 100644 --- a/challenge_api/extensions/k8s/client.py +++ b/challenge_api/extensions/k8s/client.py @@ -60,6 +60,8 @@ def create(self, data:ChallengeInfo, namespace="challenge") -> int: if not userchallenge_repo.is_exist(challenge_info): userchallenge = userchallenge_repo.create(challenge_info) + # Create initial status with Pending state + userchallenge_status_repo.create(userchallenge_idx=userchallenge.idx, port=0) else: userchallenge = userchallenge_repo.get_by_user_challenge_name(challenge_info.name) recent = userchallenge_status_repo.get_recent_status(userchallenge.idx) diff --git a/challenge_api/extensions/kafka/handler.py b/challenge_api/extensions/kafka/handler.py index 736b9e3..acf5a4f 100644 --- a/challenge_api/extensions/kafka/handler.py +++ b/challenge_api/extensions/kafka/handler.py @@ -60,15 +60,24 @@ def handle_message(message: Dict[str, Any]): if userchallenge_repo.is_exist(challenge_info): userchallenge = userchallenge_repo.get_by_user_challenge_name(challenge_name) + if not userchallenge: + logger.warning(f"Challenge {challenge_name} exists but could not be retrieved") + return + recent_status = status_repo.get_recent_status(userchallenge.idx) + if not recent_status: + logger.warning(f"No status found for challenge {challenge_name}, creating new status") + recent_status = status_repo.create(userchallenge_idx=userchallenge.idx, port=0) - if recent_status is None or new_status == 'Pending': - # 상태가 없으면 새로 생성 - recent_status = status_repo.create(userchallenge_idx=userchallenge.idx, port=int(endpoint) if endpoint else 0) - - elif new_status == 'Running' and endpoint: + try: + port = int(endpoint) if endpoint else 0 + except (ValueError, TypeError): + logger.warning(f"Invalid endpoint value: {endpoint}, using 0 as default") + port = 0 + + if new_status == 'Running' and endpoint: # Running 상태이고 endpoint가 있으면 포트 업데이트 - status_repo.update_port(recent_status.idx, int(endpoint)) + status_repo.update_port(recent_status.idx, port) status_repo.update_status(recent_status.idx, new_status) logger.info(f"Updated status for challenge {challenge_name} to {new_status} with endpoint {endpoint}")