Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit f0b6491

Browse files
committed
refact: cs
1 parent fb89e0f commit f0b6491

File tree

9 files changed

+169
-85
lines changed

9 files changed

+169
-85
lines changed

.cursor-rules

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,158 @@ src/
133133
- 遵循语义化版本管理
134134

135135
记住:严格遵循这些规则,确保每次代码改动都是必要的、安全的和高效的。
136+
137+
---
138+
139+
# 开发指南
140+
141+
## 开发理念
142+
143+
### 核心信念
144+
145+
- **渐进式进步优于大爆炸式改变** - 小而可编译、通过测试的改动
146+
- **从现有代码学习** - 实施前先学习和规划
147+
- **实用主义优于教条主义** - 适应项目现实
148+
- **清晰意图优于巧妙代码** - 选择无聊但明显的方案
149+
150+
### 简单性意味着
151+
152+
- 每个函数/类单一职责
153+
- 避免过早抽象
154+
- 没有巧妙技巧 - 选择无聊的解决方案
155+
- 如果需要解释,说明太复杂了
156+
157+
## 开发流程
158+
159+
### 1. 规划与分阶段
160+
161+
将复杂工作分解为3-5个阶段。在 `IMPLEMENTATION_PLAN.md` 中记录:
162+
163+
```markdown
164+
## 阶段 N: [名称]
165+
**目标**: [具体交付物]
166+
**成功标准**: [可测试的结果]
167+
**测试**: [具体测试用例]
168+
**状态**: [未开始|进行中|完成]
169+
```
170+
- 随着进度更新状态
171+
- 所有阶段完成后删除文件
172+
173+
### 2. 实施流程
174+
175+
1. **理解** - 研究代码库中的现有模式
176+
2. **测试** - 先写测试(红色)
177+
3. **实现** - 通过测试的最小代码(绿色)
178+
4. **重构** - 清理代码,保持测试通过
179+
5. **提交** - 清晰的消息,链接到计划
180+
181+
### 3. 遇到困难时(3次尝试后)
182+
183+
**关键**: 每个问题最多尝试3次,然后停止。
184+
185+
1. **记录失败原因**:
186+
- 尝试了什么
187+
- 具体错误信息
188+
- 认为失败的原因
189+
190+
2. **研究替代方案**:
191+
- 找到2-3个类似实现
192+
- 注意使用的不同方法
193+
194+
3. **质疑基础假设**:
195+
- 这是正确的抽象级别吗?
196+
- 可以分解为更小的问题吗?
197+
- 有更简单的方法吗?
198+
199+
4. **尝试不同角度**:
200+
- 不同的库/框架功能?
201+
- 不同的架构模式?
202+
- 移除抽象而不是添加?
203+
204+
## 技术标准
205+
206+
### 架构原则
207+
208+
- **组合优于继承** - 使用依赖注入
209+
- **接口优于单例** - 支持测试和灵活性
210+
- **显式优于隐式** - 清晰的数据流和依赖关系
211+
- **尽可能测试驱动** - 永远不要禁用测试,修复它们
212+
213+
### 代码质量
214+
215+
- **每次提交必须**:
216+
- 成功编译
217+
- 通过所有现有测试
218+
- 包含新功能的测试
219+
- 遵循项目格式/规范
220+
221+
- **提交前**:
222+
- 运行格式化工具/检查器
223+
- 自我审查变更
224+
- 确保提交消息解释"为什么"
225+
226+
### 错误处理
227+
228+
- 快速失败,包含描述性消息
229+
- 包含调试上下文
230+
- 在适当级别处理错误
231+
- 永远不要静默吞掉异常
232+
233+
## 决策框架
234+
235+
当存在多个有效方法时,基于以下因素选择:
236+
237+
1. **可测试性** - 我能轻松测试这个吗?
238+
2. **可读性** - 6个月后有人能理解这个吗?
239+
3. **一致性** - 这符合项目模式吗?
240+
4. **简单性** - 这是最简单的可行解决方案吗?
241+
5. **可逆性** - 以后改变有多难?
242+
243+
## 项目集成
244+
245+
### 学习代码库
246+
247+
- 找到3个类似功能/组件
248+
- 识别常见模式和约定
249+
- 尽可能使用相同的库/工具
250+
- 遵循现有测试模式
251+
252+
### 工具使用
253+
254+
- 使用项目现有的构建系统
255+
- 使用项目的测试框架
256+
- 使用项目的格式化/检查设置
257+
- 没有强烈理由不要引入新工具
258+
259+
## 质量门禁
260+
261+
### 完成定义
262+
263+
- [ ] 测试编写并通过
264+
- [ ] 代码遵循项目约定
265+
- [ ] 没有格式化/检查警告
266+
- [ ] 提交消息清晰
267+
- [ ] 实现符合计划
268+
- [ ] 没有无问题编号的TODO
269+
270+
### 测试指导原则
271+
272+
- 测试行为,不是实现
273+
- 尽可能每个测试一个断言
274+
- 清晰的测试名称描述场景
275+
- 使用现有测试工具/助手
276+
- 测试应该是确定性的
277+
278+
## 重要提醒
279+
280+
**永远不要**:
281+
- 使用 `--no-verify` 绕过提交钩子
282+
- 禁用测试而不是修复它们
283+
- 提交无法编译的代码
284+
- 做假设 - 用现有代码验证
285+
286+
**始终要**:
287+
- 增量提交工作代码
288+
- 随着进度更新计划文档
289+
- 从现有实现学习
290+
- 3次失败尝试后停止并重新评估

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ You can completely enable or disable tracing for the entire application. This is
9090
```
9191
Set `OTEL_ENABLED=false` in your `.env` file to disable all tracing.
9292

93+
**Log Format**: All OpenTelemetry logs are prefixed with `[laravel-open-telemetry]` for easy identification and filtering.
94+
9395
#### Filtering Requests and Headers
9496

9597
You can control which requests are traced and which headers are recorded to enhance performance and protect sensitive data. All patterns support wildcards (`*`) and are case-insensitive.

src/Handlers/WorkerStartingHandler.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public function handle(WorkerStarting $event): void
2828
// Worker initialization logic can be added here
2929
// For example, setting up worker-specific spans or contexts
3030

31-
Log::debug('OpenTelemetry Octane: Worker starting handler called');
32-
3331
// 验证OTEL环境变量
3432
$otelVars = [
3533
'OTEL_SERVICE_NAME',
@@ -39,14 +37,8 @@ public function handle(WorkerStarting $event): void
3937

4038
foreach ($otelVars as $var) {
4139
if (! isset($_ENV[$var]) && ! isset($_SERVER[$var])) {
42-
Log::warning('OpenTelemetry Octane: Missing required environment variable', [
43-
'variable' => $var,
44-
]);
45-
} else {
46-
$value = $_ENV[$var] ?? $_SERVER[$var] ?? 'unknown';
47-
Log::debug('OpenTelemetry Octane: Environment variable configured', [
40+
Log::warning('[laravel-open-telemetry] Octane: Missing required environment variable', [
4841
'variable' => $var,
49-
'value' => $value,
5042
]);
5143
}
5244
}

src/Http/Middleware/TraceRequest.php

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,9 @@ class TraceRequest
1919
*/
2020
public function handle(Request $request, Closure $next)
2121
{
22-
Log::debug('OpenTelemetry TraceRequest: Processing request initiated', [
23-
'method' => $request->method(),
24-
'path' => $request->path(),
25-
'url' => $request->fullUrl(),
26-
]);
27-
2822
// Check if request path should be ignored
2923
if (HttpAttributesHelper::shouldIgnoreRequest($request)) {
30-
Log::debug('OpenTelemetry TraceRequest: Request path ignored - skipping tracing', [
31-
'path' => $request->path(),
32-
]);
3324
Measure::disable();
34-
3525
return $next($request);
3626
}
3727

@@ -40,24 +30,13 @@ public function handle(Request $request, Closure $next)
4030

4131
$span = Measure::startRootSpan(SpanNameHelper::http($request), [], $parentContext);
4232

43-
Log::debug('OpenTelemetry TraceRequest: Root span created successfully', [
44-
'span_id' => $span->getContext()->getSpanId(),
45-
'trace_id' => $span->getContext()->getTraceId(),
46-
]);
47-
4833
try {
4934
// Set request attributes
5035
HttpAttributesHelper::setRequestAttributes($span, $request);
5136

52-
Log::debug('OpenTelemetry TraceRequest: Root span configured in Measure service');
53-
5437
// Process request
5538
$response = $next($request);
5639

57-
Log::debug('OpenTelemetry TraceRequest: Request processing completed - setting response attributes', [
58-
'status_code' => $response->getStatusCode(),
59-
]);
60-
6140
// Set response attributes and status
6241
HttpAttributesHelper::setResponseAttributes($span, $response);
6342
HttpAttributesHelper::setSpanStatusFromResponse($span, $response);
@@ -68,7 +47,8 @@ public function handle(Request $request, Closure $next)
6847
return $response;
6948

7049
} catch (Throwable $exception) {
71-
Log::error('OpenTelemetry TraceRequest: Exception occurred during request processing', [
50+
// Log exception for debugging purposes
51+
Log::error('[laravel-open-telemetry] TraceRequest: Exception occurred during request processing', [
7252
'exception' => $exception->getMessage(),
7353
'file' => $exception->getFile(),
7454
'line' => $exception->getLine(),
@@ -81,12 +61,8 @@ public function handle(Request $request, Closure $next)
8161

8262
throw $exception;
8363
} finally {
84-
Log::debug('OpenTelemetry TraceRequest: Finalizing span and cleaning up resources');
85-
8664
// End span and detach scope
8765
Measure::endRootSpan();
88-
89-
Log::debug('OpenTelemetry TraceRequest: Processing completed successfully');
9066
}
9167
}
9268
}

src/OpenTelemetryServiceProvider.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,9 @@ public function boot(): void
2626

2727
// Check if OpenTelemetry is enabled
2828
if (! config('otel.enabled', true)) {
29-
Log::debug('OpenTelemetry: Service provider registration skipped - OpenTelemetry is disabled');
30-
3129
return;
3230
}
3331

34-
Log::debug('OpenTelemetry: Service provider initialization started', [
35-
'config' => config('otel'),
36-
]);
37-
3832
$this->registerCommands();
3933
$this->registerWatchers();
4034
$this->registerLifecycleHandlers();
@@ -60,7 +54,7 @@ public function register(): void
6054

6155
$this->app->alias(TracerInterface::class, 'opentelemetry.tracer');
6256

63-
Log::debug('OpenTelemetry: Service provider registered successfully');
57+
Log::debug('[laravel-open-telemetry] Service provider registered successfully');
6458
}
6559

6660
/**
@@ -126,7 +120,7 @@ protected function registerMiddlewares(): void
126120
// Enable TraceId middleware globally by default
127121
if (config('otel.middleware.trace_id.global', true)) {
128122
$kernel->pushMiddleware(AddTraceId::class);
129-
Log::debug('OpenTelemetry: Middleware registered globally for automatic tracing');
123+
Log::debug('[laravel-open-telemetry] Middleware registered globally for automatic tracing');
130124
}
131125
}
132126
}

src/Support/Measure.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,6 @@ public function startRootSpan(string $name, array $attributes = [], ?ContextInte
8383
$scope = $span->storeInContext($parentContext)->activate();
8484
self::$rootScope = $scope;
8585

86-
Log::debug('OpenTelemetry: Starting root span', [
87-
'name' => $name,
88-
'attributes' => $attributes,
89-
'trace_id' => $span->getContext()->getTraceId(),
90-
]);
91-
9286
self::$rootSpan = $span;
9387

9488
return $span;
@@ -242,7 +236,7 @@ public function tracer(): TracerInterface
242236
try {
243237
return $this->app->get(TracerInterface::class);
244238
} catch (Throwable $e) {
245-
Log::error('OpenTelemetry: Tracer not found', [
239+
Log::error('[laravel-open-telemetry] Tracer not found', [
246240
'error' => $e->getMessage(),
247241
'line' => $e->getLine(),
248242
'file' => $e->getFile(),

src/Watchers/QueryWatcher.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,6 @@ public function recordQuery(QueryExecuted $event): void
4141
'db.query.time_ms' => $event->time,
4242
]);
4343

44-
Log::debug('OpenTelemetry: QueryWatcher: Span created', [
45-
'span_id' => $span->getContext()->getSpanId(),
46-
'trace_id' => $span->getContext()->getTraceId(),
47-
'operation' => $this->getOperationName($event->sql),
48-
'table' => $this->extractTableName($event->sql),
49-
]);
50-
5144
$span->end($now);
5245
}
5346

tests/Handlers/WorkerStartingHandlerTest.php

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,7 @@ public function test_handle_resets_state_and_logs_debug_info(): void
6969
$_ENV['OTEL_EXPORTER_OTLP_ENDPOINT'] = 'http://localhost:4318';
7070
$_ENV['OTEL_EXPORTER_OTLP_PROTOCOL'] = 'http/protobuf';
7171

72-
// Mock Log facade
73-
Log::shouldReceive('debug')
74-
->once()
75-
->with('OpenTelemetry Octane: Worker starting handler called');
76-
77-
Log::shouldReceive('debug')
78-
->times(3)
79-
->with('OpenTelemetry Octane: Environment variable configured', \Mockery::type('array'));
72+
// Mock Log facade - no debug logs expected since we removed them
8073

8174
$event = new WorkerStarting('app', 1);
8275

@@ -108,14 +101,10 @@ public function test_handle_logs_warning_for_missing_environment_variables(): vo
108101
unset($_SERVER['OTEL_EXPORTER_OTLP_ENDPOINT']);
109102
unset($_SERVER['OTEL_EXPORTER_OTLP_PROTOCOL']);
110103

111-
// Mock Log facade
112-
Log::shouldReceive('debug')
113-
->once()
114-
->with('OpenTelemetry Octane: Worker starting handler called');
115-
104+
// Mock Log facade - only warning logs expected
116105
Log::shouldReceive('warning')
117106
->times(3)
118-
->with('OpenTelemetry Octane: Missing required environment variable', \Mockery::type('array'));
107+
->with('[laravel-open-telemetry] Octane: Missing required environment variable', \Mockery::type('array'));
119108

120109
$event = new WorkerStarting('app', 1);
121110

@@ -143,14 +132,7 @@ public function test_handle_reads_from_server_variables_when_env_not_available()
143132
$_SERVER['OTEL_EXPORTER_OTLP_ENDPOINT'] = 'http://server:4318';
144133
$_SERVER['OTEL_EXPORTER_OTLP_PROTOCOL'] = 'grpc';
145134

146-
// Mock Log facade
147-
Log::shouldReceive('debug')
148-
->once()
149-
->with('OpenTelemetry Octane: Worker starting handler called');
150-
151-
Log::shouldReceive('debug')
152-
->times(3)
153-
->with('OpenTelemetry Octane: Environment variable configured', \Mockery::type('array'));
135+
// Mock Log facade - no debug logs expected since we removed them
154136

155137
$event = new WorkerStarting('app', 1);
156138

tests/OpenTelemetryServiceProviderTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,11 @@ public function test_provider_logs_startup_and_registration()
115115
{
116116
// Mock Log facade
117117
Log::shouldReceive('debug')
118-
->with('OpenTelemetry: Service provider initialization started', Mockery::type('array'))
118+
->with('[laravel-open-telemetry] Service provider registered successfully')
119119
->once();
120120

121121
Log::shouldReceive('debug')
122-
->with('OpenTelemetry: Service provider registered successfully')
123-
->once();
124-
125-
Log::shouldReceive('debug')
126-
->with('OpenTelemetry: Middleware registered globally for automatic tracing')
122+
->with('[laravel-open-telemetry] Middleware registered globally for automatic tracing')
127123
->once();
128124

129125
// Create service provider

0 commit comments

Comments
 (0)