# -*- coding: utf-8 -*- from flask import Blueprint, current_app, jsonify, render_template, request from .auth import login_required plugin_schedules_bp = Blueprint("plugin_schedules", __name__, url_prefix="/plugin_schedules") @plugin_schedules_bp.route("/") @login_required def page_plugin_schedules(): return render_template("plugin_schedules.html") @plugin_schedules_bp.route("/api/schedules", methods=["GET"]) @login_required def api_list_schedules(): server = current_app.dashboard_server data = server.plugin_schedule_manager.list_schedules_with_runtime() return jsonify({"success": True, "data": data}) @plugin_schedules_bp.route("/api/actions", methods=["GET"]) @login_required def api_list_actions(): server = current_app.dashboard_server data = server.plugin_schedule_manager.get_available_plugin_actions() return jsonify({"success": True, "data": data}) @plugin_schedules_bp.route("/api/schedules/", methods=["PUT"]) @login_required def api_update_schedule(schedule_id: int): server = current_app.dashboard_server payload = request.get_json(silent=True) or {} updates = {} for key in ( "action_name", "description", "trigger_type", "trigger_config", "target_scope", "target_config", "payload", "enabled", ): if key in payload: updates[key] = payload[key] if not updates: return jsonify({"success": False, "message": "没有可更新字段"}), 400 ok = server.plugin_schedule_manager.update_schedule(schedule_id, updates) if not ok: return jsonify({"success": False, "message": "更新失败"}), 500 return jsonify({"success": True, "message": "更新成功"}) @plugin_schedules_bp.route("/api/schedules//trigger", methods=["POST"]) @login_required def api_trigger_schedule(schedule_id: int): server = current_app.dashboard_server ok, msg = server.plugin_schedule_manager.trigger_now(schedule_id) code = 200 if ok else 400 return jsonify({"success": ok, "message": msg}), code @plugin_schedules_bp.route("/api/schedules//logs", methods=["GET"]) @login_required def api_schedule_logs(schedule_id: int): server = current_app.dashboard_server limit = int(request.args.get("limit", 100)) logs = server.plugin_schedule_manager.get_logs(schedule_id, limit=limit) return jsonify({"success": True, "data": logs}) @plugin_schedules_bp.route("/api/reload", methods=["POST"]) @login_required def api_reload_schedules(): server = current_app.dashboard_server server.plugin_schedule_manager.reload_from_db() return jsonify({"success": True, "message": "已按数据库配置重载插件调度"})