front-cpu 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +475 -0
  2. package/README.zh-CN.md +474 -0
  3. package/dist/Pipeline.d.ts +119 -0
  4. package/dist/Pipeline.d.ts.map +1 -0
  5. package/dist/Pipeline.js +373 -0
  6. package/dist/Pipeline.js.map +1 -0
  7. package/dist/debug.d.ts +3 -0
  8. package/dist/debug.d.ts.map +1 -0
  9. package/dist/debug.js +12 -0
  10. package/dist/debug.js.map +1 -0
  11. package/dist/index.d.ts +20 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +19 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/interfaces.d.ts +49 -0
  16. package/dist/interfaces.d.ts.map +1 -0
  17. package/dist/interfaces.js +8 -0
  18. package/dist/interfaces.js.map +1 -0
  19. package/dist/isa/index.d.ts +20 -0
  20. package/dist/isa/index.d.ts.map +1 -0
  21. package/dist/isa/index.js +26 -0
  22. package/dist/isa/index.js.map +1 -0
  23. package/dist/isa/types.d.ts +144 -0
  24. package/dist/isa/types.d.ts.map +1 -0
  25. package/dist/isa/types.js +10 -0
  26. package/dist/isa/types.js.map +1 -0
  27. package/dist/logging/CPUConsole.d.ts +105 -0
  28. package/dist/logging/CPUConsole.d.ts.map +1 -0
  29. package/dist/logging/CPUConsole.js +471 -0
  30. package/dist/logging/CPUConsole.js.map +1 -0
  31. package/dist/logging/CPUDebugger.d.ts +91 -0
  32. package/dist/logging/CPUDebugger.d.ts.map +1 -0
  33. package/dist/logging/CPUDebugger.js +166 -0
  34. package/dist/logging/CPUDebugger.js.map +1 -0
  35. package/dist/logging/CPUEventCollector.d.ts +90 -0
  36. package/dist/logging/CPUEventCollector.d.ts.map +1 -0
  37. package/dist/logging/CPUEventCollector.js +353 -0
  38. package/dist/logging/CPUEventCollector.js.map +1 -0
  39. package/dist/logging/CPULogger.d.ts +150 -0
  40. package/dist/logging/CPULogger.d.ts.map +1 -0
  41. package/dist/logging/CPULogger.js +336 -0
  42. package/dist/logging/CPULogger.js.map +1 -0
  43. package/dist/logging/index.d.ts +10 -0
  44. package/dist/logging/index.d.ts.map +1 -0
  45. package/dist/logging/index.js +16 -0
  46. package/dist/logging/index.js.map +1 -0
  47. package/dist/logging/runtime.d.ts +37 -0
  48. package/dist/logging/runtime.d.ts.map +1 -0
  49. package/dist/logging/runtime.js +42 -0
  50. package/dist/logging/runtime.js.map +1 -0
  51. package/dist/logging/stack-parser.d.ts +22 -0
  52. package/dist/logging/stack-parser.d.ts.map +1 -0
  53. package/dist/logging/stack-parser.js +144 -0
  54. package/dist/logging/stack-parser.js.map +1 -0
  55. package/dist/logging/types.d.ts +73 -0
  56. package/dist/logging/types.d.ts.map +1 -0
  57. package/dist/logging/types.js +47 -0
  58. package/dist/logging/types.js.map +1 -0
  59. package/dist/scheduling/ResourceStrategyRegistry.d.ts +61 -0
  60. package/dist/scheduling/ResourceStrategyRegistry.d.ts.map +1 -0
  61. package/dist/scheduling/ResourceStrategyRegistry.js +109 -0
  62. package/dist/scheduling/ResourceStrategyRegistry.js.map +1 -0
  63. package/dist/scheduling/index.d.ts +6 -0
  64. package/dist/scheduling/index.d.ts.map +1 -0
  65. package/dist/scheduling/index.js +5 -0
  66. package/dist/scheduling/index.js.map +1 -0
  67. package/dist/scheduling/types.d.ts +44 -0
  68. package/dist/scheduling/types.d.ts.map +1 -0
  69. package/dist/scheduling/types.js +5 -0
  70. package/dist/scheduling/types.js.map +1 -0
  71. package/dist/stages/EX.d.ts +17 -0
  72. package/dist/stages/EX.d.ts.map +1 -0
  73. package/dist/stages/EX.js +95 -0
  74. package/dist/stages/EX.js.map +1 -0
  75. package/dist/stages/IF.d.ts +41 -0
  76. package/dist/stages/IF.d.ts.map +1 -0
  77. package/dist/stages/IF.js +83 -0
  78. package/dist/stages/IF.js.map +1 -0
  79. package/dist/stages/RES.d.ts +17 -0
  80. package/dist/stages/RES.d.ts.map +1 -0
  81. package/dist/stages/RES.js +37 -0
  82. package/dist/stages/RES.js.map +1 -0
  83. package/dist/stages/SCH.d.ts +77 -0
  84. package/dist/stages/SCH.d.ts.map +1 -0
  85. package/dist/stages/SCH.js +270 -0
  86. package/dist/stages/SCH.js.map +1 -0
  87. package/dist/stages/WB.d.ts +19 -0
  88. package/dist/stages/WB.d.ts.map +1 -0
  89. package/dist/stages/WB.js +102 -0
  90. package/dist/stages/WB.js.map +1 -0
  91. package/dist/types.d.ts +111 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +26 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/InstructionCancellation.d.ts +31 -0
  96. package/dist/utils/InstructionCancellation.d.ts.map +1 -0
  97. package/dist/utils/InstructionCancellation.js +53 -0
  98. package/dist/utils/InstructionCancellation.js.map +1 -0
  99. package/dist/utils/abortable.d.ts +30 -0
  100. package/dist/utils/abortable.d.ts.map +1 -0
  101. package/dist/utils/abortable.js +76 -0
  102. package/dist/utils/abortable.js.map +1 -0
  103. package/dist/utils/request.d.ts +27 -0
  104. package/dist/utils/request.d.ts.map +1 -0
  105. package/dist/utils/request.js +96 -0
  106. package/dist/utils/request.js.map +1 -0
  107. package/package.json +74 -0
  108. package/src/Pipeline.ts +475 -0
  109. package/src/debug.ts +15 -0
  110. package/src/index.ts +67 -0
  111. package/src/interfaces.ts +53 -0
  112. package/src/isa/index.ts +34 -0
  113. package/src/isa/types.ts +178 -0
  114. package/src/logging/CPUConsole.md +843 -0
  115. package/src/logging/CPUConsole.ts +631 -0
  116. package/src/logging/CPUDebugger.ts +235 -0
  117. package/src/logging/CPUEventCollector.ts +418 -0
  118. package/src/logging/CPULogger.ts +435 -0
  119. package/src/logging/CPU_LOGGING_DESIGN.md +1319 -0
  120. package/src/logging/USAGE_GUIDE.md +505 -0
  121. package/src/logging/index.ts +21 -0
  122. package/src/logging/runtime.ts +96 -0
  123. package/src/logging/stack-parser.ts +168 -0
  124. package/src/logging/types.ts +101 -0
  125. package/src/scheduling/ResourceStrategyRegistry.ts +124 -0
  126. package/src/scheduling/index.ts +13 -0
  127. package/src/scheduling/types.ts +47 -0
  128. package/src/stages/EX.ts +121 -0
  129. package/src/stages/IF.ts +103 -0
  130. package/src/stages/RES.ts +46 -0
  131. package/src/stages/SCH.ts +331 -0
  132. package/src/stages/WB.ts +127 -0
  133. package/src/types.ts +118 -0
  134. package/src/utils/InstructionCancellation.ts +73 -0
  135. package/src/utils/abortable.ts +89 -0
  136. package/src/utils/request.ts +125 -0
@@ -0,0 +1,166 @@
1
+ /**
2
+ * CPU 调试器
3
+ *
4
+ * 职责:
5
+ * 1. 提供调试器 API
6
+ * 2. 支持时间旅行调试
7
+ * 3. 支持指令重放
8
+ */
9
+ import { cpuLogger } from './CPULogger';
10
+ import { CPUEventType } from './types';
11
+ export class CPUDebugger {
12
+ /**
13
+ * 查询:执行最慢的指令
14
+ */
15
+ getSlowestInstructions(limit = 10) {
16
+ const instructionTraces = Array.from(cpuLogger['eventsByInstruction'].entries());
17
+ const withDuration = instructionTraces
18
+ .map(([instructionId, events]) => {
19
+ const firstEvent = events[0];
20
+ const lastEvent = events[events.length - 1];
21
+ if (!firstEvent || !lastEvent)
22
+ return null;
23
+ const duration = lastEvent.timestamp - firstEvent.timestamp;
24
+ return {
25
+ instructionId,
26
+ instructionType: firstEvent.instructionType,
27
+ duration,
28
+ events,
29
+ };
30
+ })
31
+ .filter((item) => item !== null && item.duration > 0);
32
+ return withDuration.sort((a, b) => b.duration - a.duration).slice(0, limit);
33
+ }
34
+ /**
35
+ * 查询:失败的指令
36
+ */
37
+ getFailedInstructions() {
38
+ const failEvents = cpuLogger.getEventsByType(CPUEventType.INSTRUCTION_FAILED);
39
+ return failEvents.map((failEvent) => ({
40
+ instructionId: failEvent.instructionId,
41
+ instructionType: failEvent.instructionType,
42
+ error: failEvent.payload?.error || 'Unknown error',
43
+ events: cpuLogger.getInstructionTrace(failEvent.instructionId),
44
+ }));
45
+ }
46
+ /**
47
+ * 查询:触发回滚的指令
48
+ */
49
+ getRolledBackInstructions() {
50
+ const rollbackEvents = cpuLogger.getEventsByType(CPUEventType.OPTIMISTIC_ROLLED_BACK);
51
+ return rollbackEvents.map((event) => ({
52
+ instructionId: event.instructionId,
53
+ instructionType: event.instructionType,
54
+ reason: event.payload.reason,
55
+ events: cpuLogger.getInstructionTrace(event.instructionId),
56
+ }));
57
+ }
58
+ /**
59
+ * 查询:资源冲突链
60
+ */
61
+ getResourceConflictChain(instructionId) {
62
+ const events = cpuLogger.getInstructionTrace(instructionId);
63
+ const conflictEvents = events.filter((e) => e.eventType === CPUEventType.SCHEDULER_CONFLICT_DETECTED);
64
+ return conflictEvents.map((event) => ({
65
+ instructionId: event.instructionId,
66
+ instructionType: event.instructionType,
67
+ blockedBy: event.payload.conflictingInstructions,
68
+ waitTime: event.payload.waitTime,
69
+ }));
70
+ }
71
+ /**
72
+ * 时间旅行:重放指令
73
+ */
74
+ replayInstruction(instructionId) {
75
+ const events = cpuLogger.getInstructionTrace(instructionId);
76
+ const timeline = events.map((event) => ({
77
+ time: event.timestamp,
78
+ stage: event.pipelineStage,
79
+ event: event.eventType,
80
+ }));
81
+ return {
82
+ success: events.some((e) => e.eventType === CPUEventType.INSTRUCTION_COMMITTED),
83
+ events,
84
+ timeline,
85
+ };
86
+ }
87
+ /**
88
+ * 诊断:分析指令为什么慢
89
+ */
90
+ diagnoseSlowInstruction(instructionId) {
91
+ const events = cpuLogger.getInstructionTrace(instructionId);
92
+ if (events.length === 0) {
93
+ throw new Error(`Instruction ${instructionId} not found`);
94
+ }
95
+ const firstEvent = events[0];
96
+ const lastEvent = events[events.length - 1];
97
+ const totalDuration = lastEvent.timestamp - firstEvent.timestamp;
98
+ // 计算每个阶段的耗时
99
+ const stageBreakdown = new Map();
100
+ for (let i = 1; i < events.length; i++) {
101
+ const prevEvent = events[i - 1];
102
+ const currEvent = events[i];
103
+ const duration = currEvent.timestamp - prevEvent.timestamp;
104
+ const stage = `${prevEvent.pipelineStage}→${currEvent.pipelineStage}`;
105
+ stageBreakdown.set(stage, (stageBreakdown.get(stage) || 0) + duration);
106
+ }
107
+ const breakdown = Array.from(stageBreakdown.entries())
108
+ .map(([stage, duration]) => ({
109
+ stage,
110
+ duration,
111
+ percentage: (duration / totalDuration) * 100,
112
+ }))
113
+ .sort((a, b) => b.duration - a.duration);
114
+ const bottleneck = breakdown[0];
115
+ // 生成建议
116
+ const suggestions = [];
117
+ if (bottleneck.stage.includes('EX')) {
118
+ suggestions.push('网络请求耗时较长,考虑优化后端性能或使用缓存');
119
+ }
120
+ if (bottleneck.stage.includes('SCH')) {
121
+ suggestions.push('调度器等待时间较长,存在资源冲突');
122
+ }
123
+ if (bottleneck.percentage > 80) {
124
+ suggestions.push(`${bottleneck.stage} 占总耗时 ${bottleneck.percentage.toFixed(1)}%,是主要瓶颈`);
125
+ }
126
+ return {
127
+ instructionId,
128
+ totalDuration,
129
+ bottleneck,
130
+ breakdown,
131
+ suggestions,
132
+ };
133
+ }
134
+ /**
135
+ * 实时监控:获取最近 N 秒的统计
136
+ */
137
+ getRealtimeStats(windowSeconds = 5) {
138
+ const now = Date.now();
139
+ const startTime = now - windowSeconds * 1000;
140
+ const recentEvents = cpuLogger.getEventsByTimeRange(startTime, now);
141
+ const instructionIds = new Set(recentEvents.map((e) => e.instructionId));
142
+ const failedIds = new Set(recentEvents
143
+ .filter((e) => e.eventType === CPUEventType.INSTRUCTION_FAILED)
144
+ .map((e) => e.instructionId));
145
+ const latencies = recentEvents.filter((e) => e.latency !== undefined).map((e) => e.latency);
146
+ const avgLatency = latencies.reduce((a, b) => a + b, 0) / latencies.length || 0;
147
+ const typeCount = new Map();
148
+ for (const event of recentEvents) {
149
+ if (event.eventType === CPUEventType.INSTRUCTION_CREATED) {
150
+ typeCount.set(event.instructionType, (typeCount.get(event.instructionType) || 0) + 1);
151
+ }
152
+ }
153
+ const topInstructionTypes = Array.from(typeCount.entries())
154
+ .map(([type, count]) => ({ type, count }))
155
+ .sort((a, b) => b.count - a.count)
156
+ .slice(0, 5);
157
+ return {
158
+ instructionsPerSecond: instructionIds.size / windowSeconds,
159
+ avgLatency,
160
+ errorRate: failedIds.size / instructionIds.size || 0,
161
+ topInstructionTypes,
162
+ };
163
+ }
164
+ }
165
+ export const cpuDebugger = new CPUDebugger();
166
+ //# sourceMappingURL=CPUDebugger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CPUDebugger.js","sourceRoot":"","sources":["../../src/logging/CPUDebugger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * CPU 事件采集器
3
+ *
4
+ * 职责:
5
+ * 1. 在流水线各阶段捕获事件
6
+ * 2. 批量异步发送给 CPULogger
7
+ * 3. 零侵入、零延迟
8
+ */
9
+ import type { QueuedInstruction } from '../types';
10
+ import { type CPUEvent } from './types';
11
+ export declare class CPUEventCollector {
12
+ private eventQueue;
13
+ private flushInterval;
14
+ private maxBatchSize;
15
+ private enabled;
16
+ private flushTimer;
17
+ constructor();
18
+ /**
19
+ * 启动自动刷新
20
+ */
21
+ private startAutoFlush;
22
+ /**
23
+ * 停止自动刷新
24
+ */
25
+ destroy(): void;
26
+ /**
27
+ * 发送事件(异步,不阻塞流水线)
28
+ */
29
+ emit(event: Partial<CPUEvent>): void;
30
+ /**
31
+ * 批量刷新事件
32
+ */
33
+ private flush;
34
+ /**
35
+ * 便捷方法:指令创建
36
+ */
37
+ onInstructionCreated(instruction: QueuedInstruction): void;
38
+ /**
39
+ * 便捷方法:指令发射
40
+ */
41
+ onInstructionIssued(instruction: QueuedInstruction): void;
42
+ /**
43
+ * 便捷方法:指令执行
44
+ */
45
+ onInstructionExecuting(instruction: QueuedInstruction): void;
46
+ /**
47
+ * 便捷方法:指令完成
48
+ */
49
+ onInstructionCommitted(instruction: QueuedInstruction): void;
50
+ /**
51
+ * 便捷方法:指令被取消
52
+ */
53
+ onInstructionCancelled(instruction: QueuedInstruction): void;
54
+ /**
55
+ * 便捷方法:指令失败
56
+ */
57
+ onInstructionFailed(instruction: QueuedInstruction, error: Error): void;
58
+ /**
59
+ * 便捷方法:乐观更新应用
60
+ */
61
+ onOptimisticApplied(instructionId: string, instructionType: string, correlationId: string, snapshot: any, changes: any): void;
62
+ /**
63
+ * 便捷方法:乐观更新回滚
64
+ */
65
+ onOptimisticRolledBack(instructionId: string, instructionType: string, correlationId: string, snapshot: any, reason: string, error?: Error): void;
66
+ /**
67
+ * 便捷方法:资源冲突检测
68
+ */
69
+ onSchedulerConflict(instructionId: string, instructionType: string, correlationId: string, conflictingInstructions: string[], conflictingResources: string[], waitTime: number): void;
70
+ /**
71
+ * 便捷方法:网络请求
72
+ */
73
+ onNetworkRequest(instructionId: string, instructionType: string, correlationId: string, method: string, url: string): void;
74
+ /**
75
+ * 便捷方法:网络响应
76
+ */
77
+ onNetworkResponse(instructionId: string, instructionType: string, correlationId: string, status: number, latency: number, size: number): void;
78
+ /**
79
+ * 生成事件 ID
80
+ */
81
+ private generateEventId;
82
+ /**
83
+ * 启用/禁用采集
84
+ */
85
+ enable(): void;
86
+ disable(): void;
87
+ isEnabled(): boolean;
88
+ }
89
+ export declare const cpuEventCollector: CPUEventCollector;
90
+ //# sourceMappingURL=CPUEventCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CPUEventCollector.d.ts","sourceRoot":"","sources":["../../src/logging/CPUEventCollector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAErD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAA8C;;IAMhE;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAiBpC;;OAEG;IACH,OAAO,CAAC,KAAK;IAcb;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAiB1D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAYzD;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAY5D;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IA4C5D;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAuB5D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA8CvE;;OAEG;IACH,mBAAmB,CACjB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,GACX,IAAI;IAaP;;OAEG;IACH,sBAAsB,CACpB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAaP;;OAEG;IACH,mBAAmB,CACjB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,uBAAuB,EAAE,MAAM,EAAE,EACjC,oBAAoB,EAAE,MAAM,EAAE,EAC9B,QAAQ,EAAE,MAAM,GACf,IAAI;IAoBP;;OAEG;IACH,gBAAgB,CACd,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,IAAI;IAaP;;OAEG;IACH,iBAAiB,CACf,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,IAAI;IAiCP;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,SAAS,IAAI,OAAO;CAGrB;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAA"}
@@ -0,0 +1,353 @@
1
+ /**
2
+ * CPU 事件采集器
3
+ *
4
+ * 职责:
5
+ * 1. 在流水线各阶段捕获事件
6
+ * 2. 批量异步发送给 CPULogger
7
+ * 3. 零侵入、零延迟
8
+ */
9
+ import { PipelineStage, InstructionStatus } from '../types';
10
+ import { CPUEventType } from './types';
11
+ export class CPUEventCollector {
12
+ constructor() {
13
+ this.eventQueue = [];
14
+ this.flushInterval = 50; // 50ms 批量刷新
15
+ this.maxBatchSize = 100;
16
+ this.enabled = true;
17
+ this.flushTimer = null;
18
+ this.startAutoFlush();
19
+ }
20
+ /**
21
+ * 启动自动刷新
22
+ */
23
+ startAutoFlush() {
24
+ this.flushTimer = globalThis.setInterval(() => {
25
+ this.flush();
26
+ }, this.flushInterval);
27
+ }
28
+ /**
29
+ * 停止自动刷新
30
+ */
31
+ destroy() {
32
+ if (this.flushTimer !== null) {
33
+ globalThis.clearInterval(this.flushTimer);
34
+ this.flushTimer = null;
35
+ }
36
+ this.flush(); // 最后刷新一次
37
+ }
38
+ /**
39
+ * 发送事件(异步,不阻塞流水线)
40
+ */
41
+ emit(event) {
42
+ if (!this.enabled)
43
+ return;
44
+ const fullEvent = {
45
+ eventId: this.generateEventId(),
46
+ timestamp: Date.now(),
47
+ ...event,
48
+ };
49
+ this.eventQueue.push(fullEvent);
50
+ // 触发批量刷新
51
+ if (this.eventQueue.length >= this.maxBatchSize) {
52
+ this.flush();
53
+ }
54
+ }
55
+ /**
56
+ * 批量刷新事件
57
+ */
58
+ flush() {
59
+ if (this.eventQueue.length === 0)
60
+ return;
61
+ const batch = this.eventQueue.splice(0, this.maxBatchSize);
62
+ // 异步发送给 Logger(使用 queueMicrotask 确保不阻塞)
63
+ queueMicrotask(() => {
64
+ // 动态导入避免循环依赖
65
+ import('./CPULogger').then(({ cpuLogger }) => {
66
+ cpuLogger.ingestBatch(batch);
67
+ });
68
+ });
69
+ }
70
+ /**
71
+ * 便捷方法:指令创建
72
+ */
73
+ onInstructionCreated(instruction) {
74
+ this.emit({
75
+ eventType: CPUEventType.INSTRUCTION_CREATED,
76
+ instructionId: instruction.id,
77
+ instructionType: instruction.type,
78
+ correlationId: instruction.context.correlationId,
79
+ pipelineStage: PipelineStage.IF,
80
+ instructionStatus: InstructionStatus.PENDING,
81
+ callSource: instruction.context.callSource, // 🔍 记录调用源
82
+ payload: {
83
+ instructionType: instruction.type,
84
+ payload: instruction.payload,
85
+ origin: 'user',
86
+ },
87
+ });
88
+ }
89
+ /**
90
+ * 便捷方法:指令发射
91
+ */
92
+ onInstructionIssued(instruction) {
93
+ this.emit({
94
+ eventType: CPUEventType.INSTRUCTION_ISSUED,
95
+ instructionId: instruction.id,
96
+ instructionType: instruction.type,
97
+ correlationId: instruction.context.correlationId,
98
+ pipelineStage: PipelineStage.SCH,
99
+ instructionStatus: InstructionStatus.ISSUED,
100
+ payload: {},
101
+ });
102
+ }
103
+ /**
104
+ * 便捷方法:指令执行
105
+ */
106
+ onInstructionExecuting(instruction) {
107
+ this.emit({
108
+ eventType: CPUEventType.INSTRUCTION_EXECUTING,
109
+ instructionId: instruction.id,
110
+ instructionType: instruction.type,
111
+ correlationId: instruction.context.correlationId,
112
+ pipelineStage: PipelineStage.EX,
113
+ instructionStatus: InstructionStatus.EXECUTING,
114
+ payload: {},
115
+ });
116
+ }
117
+ /**
118
+ * 便捷方法:指令完成
119
+ */
120
+ onInstructionCommitted(instruction) {
121
+ // 计算总执行时间
122
+ const totalDuration = instruction.timestamps.WB && instruction.timestamps.IF
123
+ ? instruction.timestamps.WB - instruction.timestamps.IF
124
+ : undefined;
125
+ // 计算各阶段耗时
126
+ const stageDurations = {
127
+ ifToSch: instruction.timestamps.SCH && instruction.timestamps.IF
128
+ ? instruction.timestamps.SCH - instruction.timestamps.IF : undefined,
129
+ schToEx: instruction.timestamps.EX && instruction.timestamps.SCH
130
+ ? instruction.timestamps.EX - instruction.timestamps.SCH : undefined,
131
+ exToWb: instruction.timestamps.WB && instruction.timestamps.EX
132
+ ? instruction.timestamps.WB - instruction.timestamps.EX : undefined,
133
+ };
134
+ this.emit({
135
+ eventType: CPUEventType.INSTRUCTION_COMMITTED,
136
+ instructionId: instruction.id,
137
+ instructionType: instruction.type,
138
+ correlationId: instruction.context.correlationId,
139
+ pipelineStage: PipelineStage.WB,
140
+ instructionStatus: InstructionStatus.COMMITTED,
141
+ callSource: instruction.context.callSource,
142
+ payload: {
143
+ // 🔥 包含完整的指令执行信息
144
+ originalPayload: instruction.payload,
145
+ result: instruction.result,
146
+ totalDuration,
147
+ stageDurations,
148
+ writeBackExecution: instruction.writeBackExecution,
149
+ hasOptimisticUpdate: !!instruction.optimisticSnapshot,
150
+ retryCount: instruction.context.retryCount,
151
+ timestamps: instruction.timestamps,
152
+ },
153
+ latency: totalDuration,
154
+ metadata: {
155
+ tags: ['committed', 'success'],
156
+ ...(instruction.writeBackExecution?.hasCommit && { hasCommit: true }),
157
+ ...(instruction.optimisticSnapshot && { optimisticUpdate: true }),
158
+ },
159
+ });
160
+ }
161
+ /**
162
+ * 便捷方法:指令被取消
163
+ */
164
+ onInstructionCancelled(instruction) {
165
+ // 计算取消时的执行时间
166
+ const totalDuration = instruction.timestamps.WB && instruction.timestamps.IF
167
+ ? instruction.timestamps.WB - instruction.timestamps.IF
168
+ : undefined;
169
+ this.emit({
170
+ eventType: CPUEventType.INSTRUCTION_CANCELLED,
171
+ instructionId: instruction.id,
172
+ instructionType: instruction.type,
173
+ correlationId: instruction.context.correlationId,
174
+ pipelineStage: PipelineStage.WB,
175
+ instructionStatus: InstructionStatus.CANCELLED,
176
+ callSource: instruction.context.callSource,
177
+ payload: {
178
+ originalPayload: instruction.payload,
179
+ cancelReason: instruction.cancelReason,
180
+ cancelledAt: instruction.cancelledAt,
181
+ totalDuration,
182
+ },
183
+ });
184
+ }
185
+ /**
186
+ * 便捷方法:指令失败
187
+ */
188
+ onInstructionFailed(instruction, error) {
189
+ // 计算总执行时间(失败时也需要记录)
190
+ const totalDuration = instruction.timestamps.WB && instruction.timestamps.IF
191
+ ? instruction.timestamps.WB - instruction.timestamps.IF
192
+ : undefined;
193
+ // 计算各阶段耗时
194
+ const stageDurations = {
195
+ ifToSch: instruction.timestamps.SCH && instruction.timestamps.IF
196
+ ? instruction.timestamps.SCH - instruction.timestamps.IF : undefined,
197
+ schToEx: instruction.timestamps.EX && instruction.timestamps.SCH
198
+ ? instruction.timestamps.EX - instruction.timestamps.SCH : undefined,
199
+ exToWb: instruction.timestamps.WB && instruction.timestamps.EX
200
+ ? instruction.timestamps.WB - instruction.timestamps.EX : undefined,
201
+ };
202
+ this.emit({
203
+ eventType: CPUEventType.INSTRUCTION_FAILED,
204
+ instructionId: instruction.id,
205
+ instructionType: instruction.type,
206
+ correlationId: instruction.context.correlationId,
207
+ pipelineStage: PipelineStage.WB,
208
+ instructionStatus: InstructionStatus.FAILED,
209
+ callSource: instruction.context.callSource,
210
+ payload: {
211
+ // 🔥 包含完整的指令执行信息
212
+ originalPayload: instruction.payload,
213
+ error: error.message,
214
+ stack: error.stack,
215
+ totalDuration,
216
+ stageDurations,
217
+ writeBackExecution: instruction.writeBackExecution,
218
+ hasOptimisticUpdate: !!instruction.optimisticSnapshot,
219
+ rollbackExecuted: instruction.writeBackExecution?.rollbackExecuted,
220
+ retryCount: instruction.context.retryCount,
221
+ timestamps: instruction.timestamps,
222
+ },
223
+ latency: totalDuration,
224
+ metadata: {
225
+ tags: ['error', 'failure'],
226
+ ...(instruction.writeBackExecution?.rollbackExecuted && { rollbackExecuted: true }),
227
+ ...(instruction.optimisticSnapshot && { optimisticUpdate: true }),
228
+ },
229
+ });
230
+ }
231
+ /**
232
+ * 便捷方法:乐观更新应用
233
+ */
234
+ onOptimisticApplied(instructionId, instructionType, correlationId, snapshot, changes) {
235
+ this.emit({
236
+ eventType: CPUEventType.OPTIMISTIC_APPLIED,
237
+ instructionId,
238
+ instructionType,
239
+ correlationId,
240
+ pipelineStage: PipelineStage.EX,
241
+ instructionStatus: InstructionStatus.EXECUTING,
242
+ payload: { snapshot, changes },
243
+ metadata: { tags: ['optimistic'] },
244
+ });
245
+ }
246
+ /**
247
+ * 便捷方法:乐观更新回滚
248
+ */
249
+ onOptimisticRolledBack(instructionId, instructionType, correlationId, snapshot, reason, error) {
250
+ this.emit({
251
+ eventType: CPUEventType.OPTIMISTIC_ROLLED_BACK,
252
+ instructionId,
253
+ instructionType,
254
+ correlationId,
255
+ pipelineStage: PipelineStage.WB,
256
+ instructionStatus: InstructionStatus.FAILED,
257
+ payload: { snapshot, reason, error: error?.message },
258
+ metadata: { tags: ['rollback', 'failure'] },
259
+ });
260
+ }
261
+ /**
262
+ * 便捷方法:资源冲突检测
263
+ */
264
+ onSchedulerConflict(instructionId, instructionType, correlationId, conflictingInstructions, conflictingResources, waitTime) {
265
+ this.emit({
266
+ eventType: CPUEventType.SCHEDULER_CONFLICT_DETECTED,
267
+ instructionId,
268
+ instructionType,
269
+ correlationId,
270
+ pipelineStage: PipelineStage.SCH,
271
+ instructionStatus: InstructionStatus.ISSUED,
272
+ payload: {
273
+ conflictingInstructions,
274
+ conflictingResources,
275
+ waitTime,
276
+ },
277
+ metadata: {
278
+ resourceIds: conflictingResources,
279
+ tags: ['conflict', 'scheduler'],
280
+ },
281
+ });
282
+ }
283
+ /**
284
+ * 便捷方法:网络请求
285
+ */
286
+ onNetworkRequest(instructionId, instructionType, correlationId, method, url) {
287
+ this.emit({
288
+ eventType: CPUEventType.NETWORK_REQUEST_SENT,
289
+ instructionId,
290
+ instructionType,
291
+ correlationId,
292
+ pipelineStage: PipelineStage.EX,
293
+ instructionStatus: InstructionStatus.EXECUTING,
294
+ payload: { method, url },
295
+ metadata: { tags: ['network'] },
296
+ });
297
+ }
298
+ /**
299
+ * 便捷方法:网络响应
300
+ */
301
+ onNetworkResponse(instructionId, instructionType, correlationId, status, latency, size) {
302
+ this.emit({
303
+ eventType: CPUEventType.NETWORK_RESPONSE_RECEIVED,
304
+ instructionId,
305
+ instructionType,
306
+ correlationId,
307
+ pipelineStage: PipelineStage.EX,
308
+ instructionStatus: InstructionStatus.EXECUTING,
309
+ payload: { status, latency, size },
310
+ latency,
311
+ metadata: { tags: ['network'] },
312
+ });
313
+ // 🔥 自动检测性能警告
314
+ if (latency > 1000) {
315
+ this.emit({
316
+ eventType: CPUEventType.PERFORMANCE_WARNING,
317
+ instructionId,
318
+ instructionType,
319
+ correlationId,
320
+ pipelineStage: PipelineStage.EX,
321
+ instructionStatus: InstructionStatus.EXECUTING,
322
+ payload: {
323
+ metric: 'latency',
324
+ threshold: 1000,
325
+ actual: latency,
326
+ suggestion: `网络请求耗时 ${latency}ms,超过阈值 1000ms`,
327
+ },
328
+ metadata: { tags: ['performance', 'warning'] },
329
+ });
330
+ }
331
+ }
332
+ /**
333
+ * 生成事件 ID
334
+ */
335
+ generateEventId() {
336
+ return `evt_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
337
+ }
338
+ /**
339
+ * 启用/禁用采集
340
+ */
341
+ enable() {
342
+ this.enabled = true;
343
+ }
344
+ disable() {
345
+ this.enabled = false;
346
+ }
347
+ isEnabled() {
348
+ return this.enabled;
349
+ }
350
+ }
351
+ // 导出全局单例
352
+ export const cpuEventCollector = new CPUEventCollector();
353
+ //# sourceMappingURL=CPUEventCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CPUEventCollector.js","sourceRoot":"","sources":["../../src/logging/CPUEventCollector.ts"],"names":[],"mappings":"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"}