feat(plugin-schedule): add DB-driven plugin scheduler and xiuren scheduled push
This commit is contained in:
85
admin/dashboard/blueprints/plugin_schedules.py
Normal file
85
admin/dashboard/blueprints/plugin_schedules.py
Normal file
@@ -0,0 +1,85 @@
|
||||
# -*- 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/<int:schedule_id>", 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/<int:schedule_id>/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/<int:schedule_id>/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": "已按数据库配置重载插件调度"})
|
||||
Reference in New Issue
Block a user