From 1c36ece2322869aee57bea87099c3f983161a489 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 3 Sep 2025 20:22:39 +0900 Subject: [PATCH] debug checkin --- rog/views_apis/api_play.py | 63 +++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/rog/views_apis/api_play.py b/rog/views_apis/api_play.py index f278889..229c471 100755 --- a/rog/views_apis/api_play.py +++ b/rog/views_apis/api_play.py @@ -15,10 +15,18 @@ from datetime import datetime import uuid import time from django.http import JsonResponse -from rog.utils.s3_image_uploader import s3_uploader logger = logging.getLogger(__name__) +# S3アップローダーを安全にインポート +try: + from rog.utils.s3_image_uploader import s3_uploader + S3_AVAILABLE = True +except ImportError as e: + logger.warning(f"S3 uploader not available: {e}") + s3_uploader = None + S3_AVAILABLE = False + """ 解説 この実装では以下の処理を行っています: @@ -457,16 +465,18 @@ def checkin_from_rogapp(request): - gps_coordinates: GPS座標情報 (新規) - camera_metadata: カメラメタデータ (新規) """ - # リクエスト詳細情報を取得 - client_ip = request.META.get('REMOTE_ADDR', 'Unknown') - user_agent = request.META.get('HTTP_USER_AGENT', 'Unknown') - user_info = request.user.email if request.user.is_authenticated else 'Anonymous' - request_time = timezone.now() - request_id = str(uuid.uuid4())[:8] - - logger.info(f"[CHECKIN] 📍 API Request Started - ID: {request_id}, Time: {request_time}, Client IP: {client_ip}, User: {user_info}") - - # リクエストからパラメータを取得 + try: + # リクエスト詳細情報を取得 + client_ip = request.META.get('REMOTE_ADDR', 'Unknown') + user_agent = request.META.get('HTTP_USER_AGENT', 'Unknown') + user_info = request.user.email if request.user.is_authenticated else 'Anonymous' + request_time = timezone.now() + request_id = str(uuid.uuid4())[:8] + + # APIの最初にログを記録(問題の特定のため) + logger.info(f"[CHECKIN] 🚀 API Request Received - ID: {request_id}, Time: {request_time}, Client IP: {client_ip}, User: {user_info}, S3_Available: {S3_AVAILABLE}") + + logger.info(f"[CHECKIN] 📍 API Request Started - ID: {request_id}, Time: {request_time}, Client IP: {client_ip}, User: {user_info}") # リクエストからパラメータを取得 event_code = request.data.get('event_code') team_name = request.data.get('team_name') cp_number = request.data.get('cp_number') @@ -573,7 +583,7 @@ def checkin_from_rogapp(request): with transaction.atomic(): # S3に画像をアップロードし、S3 URLを取得 s3_image_url = image_url - if image_url: + if image_url and S3_AVAILABLE and s3_uploader: try: s3_image_url = s3_uploader.upload_checkin_image( image_data=image_url, @@ -585,6 +595,8 @@ def checkin_from_rogapp(request): except Exception as e: logger.error(f"[CHECKIN] S3 upload failed, using original URL: {e}") s3_image_url = image_url + elif image_url: + logger.info(f"[CHECKIN] S3 not available, using original URL") # serial_numberを自動生成(既存の最大値+1) max_serial = GpsLog.objects.filter( @@ -659,10 +671,33 @@ def checkin_from_rogapp(request): }) except Exception as e: - logger.error(f"[CHECKIN] ❌ ERROR - team_name: {team_name}, event_code: {event_code}, cp_number: {cp_number}, Client IP: {client_ip}, Error: {str(e)}") + # より詳細なエラー情報をログに記録 + import traceback + error_details = { + "error_type": type(e).__name__, + "error_message": str(e), + "traceback": traceback.format_exc(), + "request_data": request.data if hasattr(request, 'data') else "No data", + "user_agent": user_agent if 'user_agent' in locals() else "Unknown", + "client_ip": client_ip if 'client_ip' in locals() else "Unknown" + } + + logger.error(f"[CHECKIN] ❌ DETAILED ERROR: {error_details}") + + # より具体的なエラーメッセージを返す + if "データベース" in str(e).lower() or "database" in str(e).lower(): + error_message = "データベースの構造に問題があります。アプリを再起動してください。" + elif "s3" in str(e).lower() or "boto" in str(e).lower(): + error_message = "画像アップロードに問題があります。しばらく後に再試行してください。" + elif "import" in str(e).lower() or "module" in str(e).lower(): + error_message = "サーバーモジュールの読み込みエラーです。管理者にお問い合わせください。" + else: + error_message = "サーバーエラーが発生しました。しばらく後に再試行してください。" + return Response({ "status": "ERROR", - "message": "サーバーエラーが発生しました" + "message": error_message, + "error_code": "CHECKIN_API_ERROR" }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) """