debug checkin

This commit is contained in:
2025-09-03 20:22:39 +09:00
parent a0e024b77d
commit 1c36ece232

View File

@ -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]
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]
logger.info(f"[CHECKIN] 📍 API Request Started - ID: {request_id}, Time: {request_time}, Client IP: {client_ip}, User: {user_info}")
# 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)
"""