# Gitea Webhook Ambassador (Python Enhanced Version)

这是一个用 Python 重写的 Gitea Webhook Ambassador 服务，提供与 Go 版本相同的功能，但增加了 Web 界面和更多管理功能。

## 🚀 快速开始

### 方式一：使用 devbox 脚本（推荐，与 Go 版本一致）

```bash
# 安装依赖
./devbox install

# 初始化数据库
./devbox init

# 启动服务
./devbox start

# 查看状态
./devbox status

# 查看日志
./devbox logs

# 停止服务
./devbox stop
```

### 方式二：使用 Makefile

```bash
# 安装依赖
make install

# 初始化数据库
make init

# 启动服务（前台运行）
make run

# 启动服务（后台运行）
make start

# 查看状态
make status

# 查看日志
make logs

# 停止服务
make stop
```

### 方式三：直接使用 Python

```bash
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

# 初始化数据库
python -c "from app.models.database import create_tables; create_tables()"

# 启动服务
python -m uvicorn app.main_enhanced:app --host 0.0.0.0 --port 8000
```

## 📁 目录结构（与 Go 版本一致）

```
gitea-webhook-ambassador-python/
├── app/                    # 应用代码
│   ├── auth/              # 认证模块
│   ├── handlers/          # API 处理器
│   ├── models/            # 数据模型
│   ├── templates/         # HTML 模板
│   ├── static/            # 静态文件
│   └── main_enhanced.py   # 主应用入口
├── cmd/                   # 命令行工具（与 Go 版本一致）
│   └── server/           # 服务器启动
├── configs/              # 配置文件（与 Go 版本一致）
│   └── config.yaml       # 主配置文件
├── data/                 # 数据目录（与 Go 版本一致）
│   └── *.db             # SQLite 数据库文件
├── logs/                 # 日志目录（与 Go 版本一致）
│   └── service.log      # 服务日志
├── devbox               # 启动脚本（与 Go 版本一致）
├── Makefile             # 构建脚本（与 Go 版本一致）
├── requirements.txt     # Python 依赖
└── README_ENHANCED.md   # 本文档
```

## 🔧 配置

编辑 `configs/config.yaml` 文件：

```yaml
server:
  port: 8000
  webhookPath: "/webhook"
  secretHeader: "X-Gitea-Signature"
  secretKey: "admin-secret-key-change-in-production"

jenkins:
  url: "http://jenkins.example.com"
  username: "jenkins-user"
  token: "jenkins-api-token"
  timeout: 30

admin:
  token: "admin-api-token"

database:
  path: "data/gitea-webhook-ambassador.db"

logging:
  level: "info"
  format: "text"
  file: "logs/service.log"

worker:
  poolSize: 10
  queueSize: 100
  maxRetries: 3
  retryBackoff: 1

eventCleanup:
  interval: 3600
  expireAfter: 7200
```

## 🌐 Web 界面

启动服务后，访问以下地址：

- **登录页面**: http://localhost:8000
- **仪表板**: http://localhost:8000/dashboard
- **API 文档**: http://localhost:8000/docs

### 默认登录凭据
- **用户名**: admin
- **密码**: admin-secret-key-change-in-production

## 📊 功能特性

### ✅ 与 Go 版本相同的功能
- Gitea Webhook 接收和处理
- Jenkins 任务触发
- 项目映射配置
- 分支模式匹配
- 重试机制
- 日志记录

### 🆕 Python 版本增强功能
- **Web 登录界面**: 基于 Bootstrap 5 的现代化界面
- **数据库存储**: SQLite 数据库存储 API 密钥和配置
- **JWT 认证**: 7 天有效期的 JWT 令牌
- **前端仪表板**: 多标签页管理界面
- **自动重定向**: 未认证用户自动跳转到登录页
- **健康检查**: 服务状态监控
- **统计信息**: 请求统计和性能指标

## 🔌 API 端点

### 认证相关
- `POST /api/auth/login` - 用户登录
- `GET /api/auth/verify` - 验证 JWT 令牌

### 项目管理
- `GET /api/projects` - 获取项目列表
- `POST /api/projects` - 创建新项目
- `PUT /api/projects/{id}` - 更新项目
- `DELETE /api/projects/{id}` - 删除项目

### API 密钥管理
- `GET /api/keys` - 获取 API 密钥列表
- `POST /api/keys` - 创建新 API 密钥
- `DELETE /api/keys/{id}` - 删除 API 密钥

### 系统监控
- `GET /api/health` - 健康检查
- `GET /api/stats` - 统计信息
- `GET /api/logs` - 日志查看

### Webhook 处理
- `POST /webhook` - Gitea Webhook 接收端点

## 🛠️ 开发

### 运行测试
```bash
# 使用 devbox
./devbox test

# 使用 Makefile
make test

# 直接运行
python test_enhanced_features.py
```

### 代码检查
```bash
# 使用 Makefile
make lint

# 直接运行
flake8 app/ --max-line-length=120 --ignore=E501,W503
```

### 清理
```bash
# 使用 devbox
./devbox clean

# 使用 Makefile
make clean
```

## 🐳 Docker 部署

### 构建镜像
```bash
# 使用 Makefile
make docker-build

# 直接构建
docker build -t gitea-webhook-ambassador:latest .
```

### 运行容器
```bash
docker run -d \
  --name gitea-webhook-ambassador \
  -p 8000:8000 \
  -v $(pwd)/configs:/app/configs \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/logs:/app/logs \
  gitea-webhook-ambassador:latest
```

## 📈 与 Go 版本对比

| 特性 | Go 版本 | Python 版本 |
|------|---------|-------------|
| **启动方式** | `./devbox start` | `./devbox start` |
| **目录结构** | 标准 Go 项目结构 | 与 Go 版本一致 |
| **配置文件** | `configs/config.yaml` | `configs/config.yaml` |
| **日志目录** | `logs/` | `logs/` |
| **数据目录** | `data/` | `data/` |
| **Web 界面** | ❌ 无 | ✅ 完整仪表板 |
| **数据库** | ❌ 无 | ✅ SQLite |
| **JWT 认证** | ❌ 无 | ✅ 7天有效期 |
| **API 密钥管理** | ❌ 无 | ✅ 数据库存储 |
| **健康检查** | ✅ 基础 | ✅ 增强版 |
| **性能** | 🚀 极高 | 🚀 高 |

## 🔄 迁移指南

### 从 Go 版本迁移到 Python 版本

1. **停止 Go 服务**
   ```bash
   cd /path/to/go-version
   ./devbox stop
   ```

2. **启动 Python 服务**
   ```bash
   cd /path/to/python-version
   ./devbox install
   ./devbox init
   ./devbox start
   ```

3. **验证服务**
   ```bash
   ./devbox status
   curl http://localhost:8000/api/health
   ```

4. **配置 Webhook**
   - 更新 Gitea Webhook URL 为新的 Python 服务地址
   - 确保 Jenkins 配置正确

## 🆘 故障排除

### 常见问题

**1. 端口被占用**
```bash
# 检查端口占用
lsof -i :8000

# 停止占用进程
sudo kill -9 <PID>
```

**2. 虚拟环境问题**
```bash
# 重新创建虚拟环境
rm -rf venv
./devbox install
```

**3. 数据库问题**
```bash
# 重新初始化数据库
./devbox init
```

**4. 权限问题**
```bash
# 设置脚本权限
chmod +x devbox
```

### 日志查看
```bash
# 查看实时日志
./devbox follow

# 查看最新日志
./devbox logs

# 查看完整日志
tail -f logs/service.log
```

## 📞 支持

如有问题，请检查：
1. 服务状态：`./devbox status`
2. 日志信息：`./devbox logs`
3. 配置文件：`configs/config.yaml`
4. 网络连接：`curl http://localhost:8000/api/health` 