feat: KIMS API 호출 SQLite 로깅 (AI 학습용 데이터 수집)

This commit is contained in:
thug0bin
2026-02-28 13:32:53 +09:00
parent 8c20c8b8db
commit fbe7dde4ce
3 changed files with 359 additions and 0 deletions

View File

@@ -4140,11 +4140,16 @@ def api_kims_interaction_check():
}
"""
import requests as http_requests
from db.kims_logger import log_kims_call
import time as time_module
start_time = time_module.time()
try:
data = request.get_json()
drug_codes = data.get('drug_codes', [])
pre_serial = data.get('pre_serial', '')
user_id = data.get('user_id') # 회원 ID (있으면)
if len(drug_codes) < 2:
return jsonify({
@@ -4202,6 +4207,10 @@ def api_kims_interaction_check():
)
if kims_response.status_code != 200:
log_kims_call(pre_serial=pre_serial, drug_codes=kd_codes, drug_names=[d['name'] for d in drugs_info],
api_status='ERROR', http_status=kims_response.status_code,
response_time_ms=int((time_module.time() - start_time) * 1000),
error_message=f'HTTP {kims_response.status_code}')
return jsonify({
'success': False,
'error': f'KIMS API 응답 오류: HTTP {kims_response.status_code}',
@@ -4211,6 +4220,10 @@ def api_kims_interaction_check():
kims_data = kims_response.json()
if kims_data.get('Message') != 'SUCCESS':
log_kims_call(pre_serial=pre_serial, drug_codes=kd_codes, drug_names=[d['name'] for d in drugs_info],
api_status='ERROR', http_status=200,
response_time_ms=int((time_module.time() - start_time) * 1000),
error_message=f'KIMS: {kims_data.get("Message")}', response_raw=kims_data)
return jsonify({
'success': False,
'error': f'KIMS API 처리 실패: {kims_data.get("Message", "알 수 없는 오류")}',
@@ -4218,12 +4231,17 @@ def api_kims_interaction_check():
}), 502
except http_requests.Timeout:
log_kims_call(pre_serial=pre_serial, drug_codes=kd_codes, drug_names=[d['name'] for d in drugs_info],
api_status='TIMEOUT', response_time_ms=10000, error_message='10초 초과')
return jsonify({
'success': False,
'error': 'KIMS API 타임아웃 (10초 초과)',
'drugs_checked': drugs_info
}), 504
except Exception as kims_err:
log_kims_call(pre_serial=pre_serial, drug_codes=kd_codes, drug_names=[d['name'] for d in drugs_info],
api_status='ERROR', response_time_ms=int((time_module.time() - start_time) * 1000),
error_message=str(kims_err))
logging.error(f"KIMS API 호출 실패: {kims_err}")
return jsonify({
'success': False,
@@ -4276,6 +4294,27 @@ def api_kims_interaction_check():
for drug in drugs_info:
drug['has_interaction'] = drug['kd_code'] in interaction_drug_codes
# 응답 시간 계산
response_time_ms = int((time_module.time() - start_time) * 1000)
# SQLite 로깅
try:
log_id = log_kims_call(
pre_serial=pre_serial,
user_id=user_id,
source='admin',
drug_codes=kd_codes,
drug_names=[d['name'] for d in drugs_info],
api_status='SUCCESS',
http_status=200,
response_time_ms=response_time_ms,
interactions=interactions,
response_raw=kims_data
)
logging.info(f"KIMS 로그 저장: ID={log_id}, {len(kd_codes)}개 약품, {len(interactions)}건 상호작용")
except Exception as log_err:
logging.warning(f"KIMS 로깅 실패 (무시): {log_err}")
logging.info(f"KIMS 상호작용 체크 완료: {len(kd_codes)}개 약품, {len(interactions)}건 발견 (처방: {pre_serial})")
return jsonify({
@@ -4289,6 +4328,20 @@ def api_kims_interaction_check():
})
except Exception as e:
# 에러 로깅
response_time_ms = int((time_module.time() - start_time) * 1000)
try:
log_kims_call(
pre_serial=pre_serial if 'pre_serial' in dir() else None,
source='admin',
drug_codes=drug_codes if 'drug_codes' in dir() else [],
api_status='ERROR',
response_time_ms=response_time_ms,
error_message=str(e)
)
except:
pass
logging.error(f"KIMS 상호작용 체크 오류: {e}")
return jsonify({
'success': False,