main.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from flask import Blueprint, render_template, send_from_directory, current_app, redirect, url_for, request, jsonify
  2. from api.utils import login_required, load_led_config
  3. from application.scheduler_service import scheduler_service
  4. from application.self_check_service import run_all_checks
  5. from application.uap_message_service import send_self_check_notification
  6. from utils.logger_config import logger
  7. main_bp = Blueprint('main', __name__)
  8. @main_bp.route('/')
  9. @login_required
  10. def index():
  11. """重定向到 Kodi 控制页面"""
  12. return redirect(url_for('main.kodi_page'))
  13. @main_bp.route('/kodi')
  14. @login_required
  15. def kodi_page():
  16. """Kodi 控制页面"""
  17. return render_template('kodi/index.html', active_page='kodi')
  18. @main_bp.route('/door')
  19. @login_required
  20. def door_page():
  21. """门禁控制页面"""
  22. return render_template('door/index.html', active_page='door')
  23. @main_bp.route('/led')
  24. @login_required
  25. def led_page():
  26. """LED 控制页面"""
  27. led_segments = load_led_config()
  28. return render_template('led/index.html', active_page='led', led_segments=led_segments)
  29. @main_bp.route('/ha')
  30. @login_required
  31. def ha_page():
  32. """HA 灯光控制页面"""
  33. return render_template('ha/index.html', active_page='ha')
  34. @main_bp.route('/self_check')
  35. @login_required
  36. def self_check_page():
  37. """设备自检页面"""
  38. return render_template('self_check.html', active_page='self_check')
  39. @main_bp.route('/api/send_report', methods=['POST'])
  40. @login_required
  41. def send_report_api():
  42. """手动发送自检报告"""
  43. try:
  44. data = request.get_json()
  45. target_email = data.get('email')
  46. # 执行全量自检
  47. results = run_all_checks()
  48. # 生成 HTML 报告
  49. html_report = scheduler_service.format_report_html(results)
  50. # 发送邮件
  51. subject = "手动触发设备自检报告"
  52. scheduler_service.send_email(subject, html_report, receivers=target_email)
  53. # 向统一登录平台运维人员推送通知
  54. summary = scheduler_service._format_summary_text(results)
  55. send_self_check_notification(summary)
  56. return jsonify({
  57. "success": True,
  58. "message": f"自检报告已发送至 {target_email if target_email else '默认邮箱'},并已通知运维人员"
  59. })
  60. except Exception as e:
  61. logger.error(f"发送报告失败: {e}")
  62. return jsonify({
  63. "success": False,
  64. "message": f"发送报告失败: {str(e)}"
  65. }), 500
  66. # 提供上传文件的访问接口
  67. @main_bp.route('/uploads/<filename>')
  68. def uploaded_file(filename):
  69. """提供上传文件的访问接口"""
  70. return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename)