Skip to content

Commit 8db1c4a

Browse files
committed
feat: frankenphp
1 parent 1aea0df commit 8db1c4a

File tree

9 files changed

+749
-1
lines changed

9 files changed

+749
-1
lines changed

.cursor-rules

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# Laravel OpenTelemetry Project - Cursor Rules
2+
3+
这套 Cursor rule 适用于 Laravel OpenTelemetry 项目的所有编程任务,要求工程师以高级工程师的视角,严格按照流程执行任务,确保代码改动精准、高效,且不会引入问题或不必要的复杂性。
4+
5+
## 核心目标
6+
7+
确保代码改动精准、高效,且不会引入问题或不必要的复杂性,特别关注 OpenTelemetry 性能监控和 FrankenPHP Worker 模式的特殊需求。
8+
9+
## 规则的五个关键步骤
10+
11+
### 1. 明确任务范围
12+
- 在写代码前,先分析任务,明确目标
13+
- 制定清晰的计划,列出需要修改的函数、模块或组件,并说明原因
14+
- 特别关注是否涉及 OpenTelemetry 追踪、FrankenPHP Worker 模式或内存管理
15+
- 只有在计划清晰且经过深思熟虑后,才开始写代码
16+
17+
### 2. 精准定位代码修改点
18+
- 确定需要修改的具体文件和代码行
19+
- 避免无关文件的改动,若涉及多个文件,需明确说明每个文件的改动理由
20+
- 除非任务明确要求,否则不创建新抽象或重构代码
21+
- 特别注意 Watcher、Hook 和 Support 类的职责边界
22+
23+
### 3. 最小化、隔离化的代码改动
24+
- 只编写任务直接所需的代码
25+
- 避免添加不必要的日志、注释、测试、待办事项或错误处理
26+
- 不要进行"顺手"的额外修改,确保新代码不干扰现有功能
27+
- 特别注意不要破坏 OpenTelemetry 的 span 生命周期管理
28+
29+
### 4. 严格检查代码
30+
- 检查代码的正确性、是否符合任务范围,以及是否会引发副作用
31+
- 确保代码与现有代码风格一致,防止破坏已有功能
32+
- 评估改动是否会影响下游系统
33+
- 特别关注内存泄漏和性能影响
34+
35+
### 5. 清晰交付成果
36+
- 总结改动的具体内容和原因
37+
- 列出所有修改的文件及其具体变更
38+
- 说明任何假设或潜在风险,供他人审查
39+
- 特别说明对 OpenTelemetry 追踪和 FrankenPHP Worker 模式的影响
40+
41+
## 核心原则
42+
43+
- **不即兴发挥**:严格按照任务要求执行,不随意创新
44+
- **不过度设计**:避免复杂化,只做必要的工作
45+
- **不偏离规则**:始终遵循这套流程,确保代码安全、可靠
46+
47+
## 项目特定编码规范
48+
49+
### PHP 代码规范
50+
- 必须使用 `<?php` 标签开头
51+
- 必须在每个文件开头添加 `declare(strict_types=1);`
52+
- 使用 PSR-4 自动加载标准
53+
- 遵循 Laravel Pint 代码风格规范
54+
55+
### 命名约定
56+
- 类名使用 PascalCase:`FrankenPhpWorkerWatcher`
57+
- 方法名使用 camelCase:`onRequestStart()`
58+
- 常量使用 SCREAMING_SNAKE_CASE:`OTEL_RESPONSE_TRACE_HEADER_NAME`
59+
- 配置键使用 snake_case:`response_trace_header_name`
60+
61+
### OpenTelemetry 特定规范
62+
- Span 名称使用 dot.notation:`frankenphp.worker.request_start`
63+
- 属性名使用标准前缀:`frankenphp.worker.`, `http.`, `db.`
64+
- 敏感信息必须过滤:使用 `***` 替代敏感值
65+
- 始终正确管理 span 生命周期:确保 `startSpan()` 后有对应的 `end()`
66+
67+
### FrankenPHP Worker 模式规范
68+
- Worker 模式检测:使用标准的 `isFrankenPhpWorkerMode()` 方法
69+
- 内存管理:关注内存增长,超过阈值时记录警告
70+
- 状态清理:在请求间正确清理 OpenTelemetry 上下文
71+
- 错误处理:使用 `error_log()` 记录清理错误,避免影响正常请求
72+
73+
### 配置管理
74+
- 环境变量使用 `OTEL_` 前缀
75+
- 配置文件使用 `config/otel.php`
76+
- 支持通过环境变量覆盖默认配置
77+
- 提供合理的默认值
78+
79+
### 错误处理
80+
- 使用 try-catch 包装可能失败的 OpenTelemetry 操作
81+
- 静默处理追踪相关错误,不影响业务逻辑
82+
- 使用 `error_log()` 记录重要错误信息
83+
- 避免在追踪代码中抛出异常
84+
85+
### 性能考虑
86+
- 最小化追踪代码的性能开销
87+
- 使用条件检查避免不必要的操作
88+
- 在 worker 模式下特别注意内存使用
89+
- 合理使用垃圾回收机制
90+
91+
### 测试要求
92+
- 为新功能编写单元测试
93+
- 使用 Orchestra Testbench 进行 Laravel 集成测试
94+
- 测试文件放在对应的 `tests/` 目录结构中
95+
- 确保测试覆盖错误处理路径
96+
97+
## 代码注释规范
98+
99+
- **代码注释必须使用英文**
100+
- 类和方法使用 PHPDoc 格式注释
101+
- 复杂逻辑添加行内注释说明
102+
- 公共 API 必须有完整的文档注释
103+
104+
## 文件结构约定
105+
106+
```
107+
src/
108+
├── Console/Commands/ # Artisan 命令
109+
├── Facades/ # Laravel Facades
110+
├── Hooks/ # OpenTelemetry Hooks (框架级拦截)
111+
├── Support/ # 支持类和工具
112+
├── Traits/ # 可复用的 Traits
113+
├── Watchers/ # 应用级监听器
114+
└── *.php # 核心服务类
115+
```
116+
117+
## 依赖管理
118+
- 核心依赖:OpenTelemetry PHP SDK
119+
- Laravel 框架:支持 10.0+, 11.0+, 12.0+
120+
- PHP 版本:最低 8.4
121+
- 必须扩展:ext-opentelemetry
122+
123+
## 安全考虑
124+
- 过滤敏感信息:Cookie, Authorization, API Key
125+
- 使用白名单机制控制记录的 HTTP 头
126+
- 避免在追踪数据中暴露用户隐私信息
127+
- 正确处理跨请求的状态清理
128+
129+
## 向后兼容性
130+
- 保持配置文件结构的稳定性
131+
- 避免破坏现有的 Watcher 和 Hook 接口
132+
- 新功能使用 Feature Flag 控制
133+
- 遵循语义化版本管理
134+
135+
记住:严格遵循这些规则,确保每次代码改动都是必要的、安全的和高效的。

config/otel.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
* - \Overtrue\LaravelOpenTelemetry\Watchers\EventWatcher::class
2121
* - \Overtrue\LaravelOpenTelemetry\Watchers\QueueWatcher::class
2222
* - \Overtrue\LaravelOpenTelemetry\Watchers\RedisWatcher::class
23+
* - \Overtrue\LaravelOpenTelemetry\Watchers\FrankenPhpWorkerWatcher::class
2324
*/
2425
'watchers' => [
2526
\Overtrue\LaravelOpenTelemetry\Watchers\ExceptionWatcher::class,
2627
\Overtrue\LaravelOpenTelemetry\Watchers\AuthenticateWatcher::class,
2728
\Overtrue\LaravelOpenTelemetry\Watchers\EventWatcher::class,
2829
\Overtrue\LaravelOpenTelemetry\Watchers\QueueWatcher::class,
2930
\Overtrue\LaravelOpenTelemetry\Watchers\RedisWatcher::class,
31+
\Overtrue\LaravelOpenTelemetry\Watchers\FrankenPhpWorkerWatcher::class,
3032
],
3133

3234
/**

0 commit comments

Comments
 (0)