RAG6_AgenticAI / app /app_device_routes.py
jeongsoo's picture
init
d93e680
raw
history blame
8.29 kB
"""
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 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žฅ์น˜ ๊ด€๋ฆฌ ๊ด€๋ จ ๋ผ์šฐํŠธ ๋“ฑ๋ก"""
@app.route('/api/device/status', methods=['GET'])
@login_required
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
@app.route('/api/device/list', methods=['GET'])
@login_required
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
@app.route('/api/device/programs', methods=['GET'])
@login_required
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
@app.route('/api/device/programs/<program_id>/execute', methods=['POST'])
@login_required
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