Spaces:
No application file
No application file
""" | |
RAG ๊ฒ์ ์ฑ๋ด ์น ์ ํ๋ฆฌ์ผ์ด์ - ์ฅ์น ๊ด๋ฆฌ API ๋ผ์ฐํธ ์ ์ | |
""" | |
import os | |
import logging | |
import requests | |
import json | |
from flask import request, jsonify | |
# ๋ก๊ฑฐ ๊ฐ์ ธ์ค๊ธฐ | |
logger = logging.getLogger(__name__) | |
def register_device_routes(app, login_required, DEVICE_SERVER_URL): | |
"""Flask ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฅ์น ๊ด๋ฆฌ ๊ด๋ จ ๋ผ์ฐํธ ๋ฑ๋ก""" | |
def device_status(): | |
"""์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ ํ์ธ API""" | |
logger.info("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ ํ์ธ ์์ฒญ") | |
try: | |
# ์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ ํ์ธ | |
response = requests.get(f"{DEVICE_SERVER_URL}/api/status", timeout=5) | |
if response.status_code == 200: | |
data = response.json() | |
logger.info(f"์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ: {data.get('status', 'unknown')}") | |
return jsonify({ | |
"success": True, | |
"server_status": data.get("status", "unknown") | |
}) | |
else: | |
logger.warning(f"์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์๋ต ์ฝ๋: {response.status_code}") | |
return jsonify({ | |
"success": False, | |
"error": f"์ฅ์น ๊ด๋ฆฌ ์๋ฒ๊ฐ ๋น์ ์ ์๋ต ์ฝ๋๋ฅผ ๋ฐํํ์ต๋๋ค: {response.status_code}" | |
}), 502 | |
except requests.exceptions.Timeout: | |
logger.error("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์๊ฐ ์ด๊ณผ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค." | |
}), 504 | |
except requests.exceptions.ConnectionError: | |
logger.error("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์คํจ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๊ด๋ฆฌ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํด์ฃผ์ธ์." | |
}), 503 | |
except Exception as e: | |
logger.error(f"์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ ํ์ธ ์ค ์ค๋ฅ ๋ฐ์: {e}") | |
return jsonify({ | |
"success": False, | |
"error": f"์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ํ ํ์ธ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}" | |
}), 500 | |
def device_list(): | |
"""์ฅ์น ๋ชฉ๋ก ์กฐํ API""" | |
logger.info("์ฅ์น ๋ชฉ๋ก ์กฐํ ์์ฒญ") | |
try: | |
# ์ฅ์น ๋ชฉ๋ก ์กฐํ | |
response = requests.get(f"{DEVICE_SERVER_URL}/api/devices", timeout=5) | |
if response.status_code == 200: | |
data = response.json() | |
devices = data.get("devices", []) | |
logger.info(f"์ฅ์น ๋ชฉ๋ก ์กฐํ ์ฑ๊ณต: {len(devices)}๊ฐ ์ฅ์น") | |
return jsonify({ | |
"success": True, | |
"devices": devices | |
}) | |
else: | |
logger.warning(f"์ฅ์น ๋ชฉ๋ก ์กฐํ ์คํจ: {response.status_code}") | |
return jsonify({ | |
"success": False, | |
"error": f"์ฅ์น ๋ชฉ๋ก ์กฐํ ์คํจ: {response.status_code}" | |
}), 502 | |
except requests.exceptions.Timeout: | |
logger.error("์ฅ์น ๋ชฉ๋ก ์กฐํ ์๊ฐ ์ด๊ณผ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๋ชฉ๋ก ์กฐํ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค." | |
}), 504 | |
except requests.exceptions.ConnectionError: | |
logger.error("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์คํจ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๊ด๋ฆฌ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํด์ฃผ์ธ์." | |
}), 503 | |
except Exception as e: | |
logger.error(f"์ฅ์น ๋ชฉ๋ก ์กฐํ ์ค ์ค๋ฅ ๋ฐ์: {e}") | |
return jsonify({ | |
"success": False, | |
"error": f"์ฅ์น ๋ชฉ๋ก ์กฐํ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}" | |
}), 500 | |
def device_programs(): | |
"""์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ API""" | |
logger.info("ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์์ฒญ") | |
try: | |
# ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ | |
response = requests.get(f"{DEVICE_SERVER_URL}/api/programs", timeout=5) | |
if response.status_code == 200: | |
data = response.json() | |
programs = data.get("programs", []) | |
logger.info(f"ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์ฑ๊ณต: {len(programs)}๊ฐ ํ๋ก๊ทธ๋จ") | |
return jsonify({ | |
"success": True, | |
"programs": programs | |
}) | |
else: | |
logger.warning(f"ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์คํจ: {response.status_code}") | |
return jsonify({ | |
"success": False, | |
"error": f"ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์คํจ: {response.status_code}" | |
}), 502 | |
except requests.exceptions.Timeout: | |
logger.error("ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์๊ฐ ์ด๊ณผ") | |
return jsonify({ | |
"success": False, | |
"error": "ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค." | |
}), 504 | |
except requests.exceptions.ConnectionError: | |
logger.error("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์คํจ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๊ด๋ฆฌ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํด์ฃผ์ธ์." | |
}), 503 | |
except Exception as e: | |
logger.error(f"ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์ค ์ค๋ฅ ๋ฐ์: {e}") | |
return jsonify({ | |
"success": False, | |
"error": f"ํ๋ก๊ทธ๋จ ๋ชฉ๋ก ์กฐํ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}" | |
}), 500 | |
def execute_program(program_id): | |
"""ํ๋ก๊ทธ๋จ ์คํ API""" | |
logger.info(f"ํ๋ก๊ทธ๋จ ์คํ ์์ฒญ: {program_id}") | |
try: | |
# ํ๋ก๊ทธ๋จ ์คํ | |
response = requests.post( | |
f"{DEVICE_SERVER_URL}/api/programs/{program_id}/execute", | |
json={}, | |
timeout=10 # ํ๋ก๊ทธ๋จ ์คํ์๋ ๋ ๊ธด ์๊ฐ ๋ถ์ฌ | |
) | |
if response.status_code == 200: | |
data = response.json() | |
success = data.get("success", False) | |
message = data.get("message", "") | |
logger.info(f"ํ๋ก๊ทธ๋จ ์คํ ์๋ต: {success}, {message}") | |
return jsonify(data) | |
else: | |
logger.warning(f"ํ๋ก๊ทธ๋จ ์คํ ์คํจ: {response.status_code}") | |
return jsonify({ | |
"success": False, | |
"error": f"ํ๋ก๊ทธ๋จ ์คํ ์์ฒญ ์คํจ: {response.status_code}" | |
}), 502 | |
except requests.exceptions.Timeout: | |
logger.error("ํ๋ก๊ทธ๋จ ์คํ ์์ฒญ ์๊ฐ ์ด๊ณผ") | |
return jsonify({ | |
"success": False, | |
"error": "ํ๋ก๊ทธ๋จ ์คํ ์์ฒญ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค." | |
}), 504 | |
except requests.exceptions.ConnectionError: | |
logger.error("์ฅ์น ๊ด๋ฆฌ ์๋ฒ ์ฐ๊ฒฐ ์คํจ") | |
return jsonify({ | |
"success": False, | |
"error": "์ฅ์น ๊ด๋ฆฌ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํด์ฃผ์ธ์." | |
}), 503 | |
except Exception as e: | |
logger.error(f"ํ๋ก๊ทธ๋จ ์คํ ์ค ์ค๋ฅ ๋ฐ์: {e}") | |
return jsonify({ | |
"success": False, | |
"error": f"ํ๋ก๊ทธ๋จ ์คํ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}" | |
}), 500 | |