first commit
This commit is contained in:
commit
6310ef2d32
121
README.md
Normal file
121
README.md
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# API Scheduler Platform
|
||||||
|
|
||||||
|
Flask + MySQL 示例项目,实现登录、API 配置管理、定时调用与日志查看。APScheduler 被选用作为定时调度器,因其 API 简洁、支持 cron/interval/daily 场景,并与 Flask-APScheduler 集成方便。
|
||||||
|
|
||||||
|
## 主要特性
|
||||||
|
- 用户登录后才能访问(Flask-Login)。
|
||||||
|
- API 配置 CRUD,启用/停用自动同步调度。
|
||||||
|
- APScheduler 后台定时调用外部 API,支持重试、超时。
|
||||||
|
- 调用日志记录与过滤分页查看。
|
||||||
|
- Jinja2 + Bootstrap 简易界面。
|
||||||
|
|
||||||
|
## 环境准备
|
||||||
|
1. 安装依赖
|
||||||
|
```bash
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate # Windows: venv\Scripts\activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
2. 配置环境变量(示例)
|
||||||
|
```bash
|
||||||
|
set DATABASE_URL=mysql+pymysql://user:password@localhost:3306/api_scheduler
|
||||||
|
set SECRET_KEY=replace-me
|
||||||
|
set FLASK_ENV=development # 或 production
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据库初始化
|
||||||
|
- 使用 Flask-Migrate:
|
||||||
|
```bash
|
||||||
|
flask db init
|
||||||
|
flask db migrate -m "init"
|
||||||
|
flask db upgrade
|
||||||
|
```
|
||||||
|
- 或手动建表(简化示例):
|
||||||
|
```sql
|
||||||
|
CREATE TABLE users (
|
||||||
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
username VARCHAR(64) UNIQUE NOT NULL,
|
||||||
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
|
email VARCHAR(128),
|
||||||
|
role VARCHAR(32),
|
||||||
|
is_active BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME
|
||||||
|
);
|
||||||
|
CREATE TABLE api_configs (
|
||||||
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
name VARCHAR(128) NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
url VARCHAR(512) NOT NULL,
|
||||||
|
http_method VARCHAR(10) NOT NULL,
|
||||||
|
headers TEXT,
|
||||||
|
query_params TEXT,
|
||||||
|
body TEXT,
|
||||||
|
enabled BOOLEAN DEFAULT TRUE,
|
||||||
|
schedule_type VARCHAR(32) NOT NULL,
|
||||||
|
schedule_expression VARCHAR(128) NOT NULL,
|
||||||
|
timeout_seconds INT,
|
||||||
|
retry_times INT,
|
||||||
|
retry_interval_seconds INT,
|
||||||
|
created_by INT,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME
|
||||||
|
);
|
||||||
|
CREATE TABLE api_call_logs (
|
||||||
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
api_id INT NOT NULL,
|
||||||
|
request_time DATETIME NOT NULL,
|
||||||
|
response_time DATETIME,
|
||||||
|
success BOOLEAN,
|
||||||
|
http_status_code INT,
|
||||||
|
error_message TEXT,
|
||||||
|
response_body TEXT,
|
||||||
|
duration_ms INT,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 创建初始管理员
|
||||||
|
在 Python shell 中:
|
||||||
|
```python
|
||||||
|
from app import create_app
|
||||||
|
from app.extensions import db
|
||||||
|
from app.models import User
|
||||||
|
|
||||||
|
app = create_app()
|
||||||
|
with app.app_context():
|
||||||
|
admin = User(username="admin", is_active=True)
|
||||||
|
admin.set_password("admin123")
|
||||||
|
db.session.add(admin)
|
||||||
|
db.session.commit()
|
||||||
|
```
|
||||||
|
|
||||||
|
## 运行
|
||||||
|
- 开发模式:
|
||||||
|
```bash
|
||||||
|
flask --app run.py --debug run
|
||||||
|
```
|
||||||
|
- 简易生产(示例):
|
||||||
|
```bash
|
||||||
|
gunicorn "run:app" -w 4 -b 0.0.0.0:8000
|
||||||
|
```
|
||||||
|
- 若在执行 `flask db ...` 迁移命令时数据库还未建表,可先禁用调度器避免表不存在报错:
|
||||||
|
```bash
|
||||||
|
set FLASK_SKIP_SCHEDULER=1
|
||||||
|
flask db upgrade
|
||||||
|
```
|
||||||
|
迁移完成后删除该变量或设为 0。
|
||||||
|
|
||||||
|
## 调度说明
|
||||||
|
- 任务 ID: `api_job_<api_id>`.
|
||||||
|
- schedule_type:
|
||||||
|
- `cron`: 使用 `schedule_expression` 的 crontab 表达式。
|
||||||
|
- `interval`: `schedule_expression` 为秒数。
|
||||||
|
- `daily`: `schedule_expression` 形如 `HH:MM`.
|
||||||
|
- 新增/编辑/启用 会创建或替换任务;停用/删除 会移除任务。
|
||||||
|
- 默认时区为中国标准时间(Asia/Shanghai),可通过环境变量 `APP_TIMEZONE` 修改。
|
||||||
|
|
||||||
|
## 其他
|
||||||
|
- 日志表目前只记录最终一次尝试结果,减少噪音。需要每次尝试都记录时,可在 `execute_api` 中调整。
|
||||||
|
- 响应体截断到前 2000 字符。
|
||||||
Loading…
x
Reference in New Issue
Block a user