cw-datadog 2.23.0.2 → 2.23.0.4

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/ext/datadog_profiling_native_extension/extconf.rb +4 -2
  3. data/ext/libdatadog_api/library_config.c +12 -11
  4. data/ext/libdatadog_extconf_helpers.rb +1 -1
  5. data/lib/datadog/appsec/api_security/route_extractor.rb +20 -5
  6. data/lib/datadog/appsec/api_security/sampler.rb +3 -1
  7. data/lib/datadog/appsec/assets/blocked.html +8 -0
  8. data/lib/datadog/appsec/assets/blocked.json +1 -1
  9. data/lib/datadog/appsec/assets/blocked.text +3 -1
  10. data/lib/datadog/appsec/assets.rb +1 -1
  11. data/lib/datadog/appsec/remote.rb +4 -0
  12. data/lib/datadog/appsec/response.rb +18 -4
  13. data/lib/datadog/core/cloudwise/client.rb +412 -25
  14. data/lib/datadog/core/cloudwise/component.rb +195 -52
  15. data/lib/datadog/core/cloudwise/docc_heartbeat_worker.rb +105 -0
  16. data/lib/datadog/core/cloudwise/docc_operation_worker.rb +191 -0
  17. data/lib/datadog/core/cloudwise/docc_registration_worker.rb +89 -0
  18. data/lib/datadog/core/cloudwise/license_worker.rb +90 -4
  19. data/lib/datadog/core/cloudwise/probe_state.rb +134 -12
  20. data/lib/datadog/core/configuration/components.rb +10 -9
  21. data/lib/datadog/core/configuration/settings.rb +43 -0
  22. data/lib/datadog/core/configuration/supported_configurations.rb +6 -2
  23. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  24. data/lib/datadog/core/remote/component.rb +2 -2
  25. data/lib/datadog/core/remote/transport/config.rb +2 -10
  26. data/lib/datadog/core/remote/transport/http/config.rb +9 -9
  27. data/lib/datadog/core/remote/transport/http/negotiation.rb +17 -8
  28. data/lib/datadog/core/remote/transport/http.rb +2 -0
  29. data/lib/datadog/core/remote/transport/negotiation.rb +2 -18
  30. data/lib/datadog/core/remote/worker.rb +23 -35
  31. data/lib/datadog/core/telemetry/component.rb +26 -13
  32. data/lib/datadog/core/telemetry/event/app_started.rb +67 -49
  33. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  34. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -6
  35. data/lib/datadog/core/telemetry/transport/telemetry.rb +1 -2
  36. data/lib/datadog/core/telemetry/worker.rb +51 -6
  37. data/lib/datadog/core/transport/http/adapters/net.rb +2 -0
  38. data/lib/datadog/core/transport/http/client.rb +69 -0
  39. data/lib/datadog/core/utils/only_once_successful.rb +6 -2
  40. data/lib/datadog/data_streams/transport/http/client.rb +4 -32
  41. data/lib/datadog/data_streams/transport/stats.rb +1 -1
  42. data/lib/datadog/di/probe_notification_builder.rb +35 -13
  43. data/lib/datadog/di/transport/diagnostics.rb +2 -2
  44. data/lib/datadog/di/transport/http/diagnostics.rb +2 -4
  45. data/lib/datadog/di/transport/http/input.rb +2 -4
  46. data/lib/datadog/di/transport/input.rb +2 -2
  47. data/lib/datadog/open_feature/component.rb +60 -0
  48. data/lib/datadog/open_feature/configuration.rb +27 -0
  49. data/lib/datadog/open_feature/evaluation_engine.rb +59 -0
  50. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  51. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  52. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  53. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  54. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  55. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  56. data/lib/datadog/open_feature/ext.rb +13 -0
  57. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  58. data/lib/datadog/open_feature/provider.rb +134 -0
  59. data/lib/datadog/open_feature/remote.rb +74 -0
  60. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  61. data/lib/datadog/open_feature/transport.rb +72 -0
  62. data/lib/datadog/open_feature.rb +19 -0
  63. data/lib/datadog/profiling/component.rb +6 -0
  64. data/lib/datadog/profiling/profiler.rb +4 -0
  65. data/lib/datadog/profiling.rb +1 -2
  66. data/lib/datadog/single_step_instrument.rb +1 -1
  67. data/lib/datadog/tracing/contrib/cloudwise/propagation.rb +164 -7
  68. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +22 -17
  69. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  70. data/lib/datadog/tracing/contrib/karafka/patcher.rb +14 -0
  71. data/lib/datadog/tracing/contrib/rack/middlewares.rb +6 -2
  72. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  73. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  74. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  75. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  76. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  77. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +46 -0
  78. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  79. data/lib/datadog/tracing/contrib/waterdrop.rb +37 -0
  80. data/lib/datadog/tracing/contrib.rb +1 -0
  81. data/lib/datadog/tracing/transport/http/api.rb +73 -1
  82. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  83. data/lib/datadog/tracing/transport/http/traces.rb +4 -2
  84. data/lib/datadog/tracing/transport/trace_formatter.rb +16 -0
  85. data/lib/datadog/version.rb +2 -2
  86. data/lib/datadog.rb +1 -0
  87. metadata +38 -15
  88. data/lib/datadog/core/cloudwise/IMPLEMENTATION_V2.md +0 -517
  89. data/lib/datadog/core/cloudwise/QUICKSTART.md +0 -398
  90. data/lib/datadog/core/cloudwise/README.md +0 -722
  91. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  92. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  93. data/lib/datadog/di/transport/http/client.rb +0 -47
@@ -1,517 +0,0 @@
1
- # Cloudwise 实现方案 V2
2
-
3
- ## 📋 需求变更总结
4
-
5
- 根据最新需求,重新实现了 Cloudwise 集成的初始化和数据采集控制逻辑。
6
-
7
- ### 核心变更
8
-
9
- 1. **初始化顺序**:Cloudwise 必须**先于** Datadog 其他组件初始化
10
- 2. **数据采集控制**:只有当 **Host ID + Heartbeat + License** 三者都正常时,才可以采集和上报数据
11
- 3. **失败重试间隔**:从 2秒/2分钟 统一调整为 **30秒**
12
- 4. **应用注册周期**:从 10分钟 调整为 **3分钟**
13
-
14
- ---
15
-
16
- ## 🔄 初始化流程
17
-
18
- ```
19
- 应用启动
20
-
21
- ┌──────────────────────────────────────────┐
22
- │ Cloudwise 组件初始化(优先执行) │
23
- └──────────────────────────────────────────┘
24
-
25
- [1] Host ID Worker 启动
26
- ├─ 调用 POST /v2/app/generateHostId
27
- ├─ 成功条件:success=true && code=1000
28
- ├─ 成功:获取 account_id,设置 ENV['CLOUDWISE_ACCOUNT_ID'],标记 host_id_ready=true,停止 Worker
29
- ├─ 失败:30秒后重试
30
- └─ ⚠️ 失败时:数据不采集,不上报,后续步骤不执行
31
-
32
- [2] Heartbeat Worker 启动
33
- ├─ 等待 Host ID 就绪
34
- ├─ 调用 POST /api/v1/agent/heartbeat
35
- ├─ 执行周期:60秒
36
- ├─ 成功条件:success=true && code=1000
37
- ├─ 成功:标记 heartbeat_active=true
38
- ├─ 失败:30秒后重试,失败3次标记 heartbeat_active=false
39
- └─ ⚠️ heartbeat_active=false 时:数据不采集,不上报
40
-
41
- [3] Application Registration Worker 启动
42
- ├─ 等待 Host ID 就绪
43
- ├─ 调用 POST /api/v1/application/register
44
- ├─ 执行周期:3分钟
45
- ├─ 成功条件:success=true && code=1000
46
- ├─ 成功:标记 app_registered=true
47
- ├─ 失败:继续定时重试(3分钟后)
48
- └─ ✅ 注册失败不影响数据采集
49
-
50
- [4] License Worker 启动
51
- ├─ 等待 Host ID 就绪
52
- ├─ 调用 POST /api/v1/license/verify
53
- ├─ 执行周期:5分钟
54
- ├─ 成功条件:success=true && code=1000
55
- ├─ 成功:标记 license_valid=true
56
- ├─ 失败:累计失败3次标记 license_valid=false
57
- └─ ⚠️ license_valid=false 时:数据不采集,不上报
58
-
59
- ┌──────────────────────────────────────────┐
60
- │ Datadog 其他组件初始化 │
61
- └──────────────────────────────────────────┘
62
- ```
63
-
64
- ---
65
-
66
- ## 🎯 核心实现
67
-
68
- ### 1. ProbeState(探针状态管理器)
69
-
70
- **文件**: `lib/datadog/core/cloudwise/probe_state.rb`
71
-
72
- **职责**: 追踪所有影响数据采集的条件
73
-
74
- ```ruby
75
- class ProbeState
76
- # 三个关键状态
77
- @host_id_ready # Host ID 是否就绪
78
- @heartbeat_active # 心跳是否正常
79
- @license_valid # License 是否有效
80
- @app_registered # 应用是否已注册(不影响采集)
81
-
82
- # 数据采集判断
83
- def can_collect_data?
84
- @host_id_ready && @heartbeat_active && @license_valid
85
- end
86
- end
87
- ```
88
-
89
- **关键方法**:
90
- - `mark_host_id_ready!` / `mark_host_id_failed!`
91
- - `mark_heartbeat_active!` / `mark_heartbeat_inactive!`
92
- - `mark_license_valid!` / `mark_license_invalid!`
93
- - `can_collect_data?` - **核心判断**:三者都满足才返回 true
94
-
95
- ---
96
-
97
- ### 2. HostIdWorker(Host ID 生成)
98
-
99
- **文件**: `lib/datadog/core/cloudwise/host_id_worker.rb`
100
-
101
- **配置**:
102
- - 重试间隔:**30秒**
103
- - 成功条件:`code == 1000`
104
-
105
- **逻辑**:
106
- ```ruby
107
- result = client.generate_host_id
108
-
109
- if result[:success] && result[:code] == 1000 && client.account_id
110
- # 成功
111
- probe_state.mark_host_id_ready!
112
- ENV['CLOUDWISE_ACCOUNT_ID'] = client.account_id
113
- stop_loop # 只需成功一次
114
- else
115
- # 失败,30秒后重试
116
- probe_state.mark_host_id_failed!
117
- # 数据不采集
118
- end
119
- ```
120
-
121
- ---
122
-
123
- ### 3. HeartbeatWorker(心跳)
124
-
125
- **文件**: `lib/datadog/core/cloudwise/heartbeat_worker.rb`
126
-
127
- **配置**:
128
- - 执行周期:**60秒**
129
- - 失败重试间隔:**30秒**
130
- - 最大失败次数:**3次**
131
- - 成功条件:`code == 1000`
132
-
133
- **逻辑**:
134
- ```ruby
135
- result = client.heartbeat
136
-
137
- if !result[:success]
138
- # 接口请求失败
139
- @failure_count += 1
140
- if @failure_count >= 3
141
- probe_state.mark_heartbeat_inactive!
142
- # 数据不采集
143
- end
144
- elsif result[:code] != 1000
145
- # 接口成功但 code 不对
146
- probe_state.mark_heartbeat_inactive!
147
- # 数据不采集
148
- else
149
- # 成功
150
- probe_state.mark_heartbeat_active!
151
- @failure_count = 0
152
- end
153
- ```
154
-
155
- **关键点**:
156
- - 接口请求失败:累计失败次数,达到3次后标记为 inactive
157
- - 接口成功但 code ≠ 1000:立即标记为 inactive
158
- - 任何一次成功(code == 1000):恢复 active,重置失败计数
159
-
160
- ---
161
-
162
- ### 4. LicenseWorker(License 校验)
163
-
164
- **文件**: `lib/datadog/core/cloudwise/license_worker.rb`
165
-
166
- **配置**:
167
- - 执行周期:**5分钟**
168
- - 最大失败次数:**3次**
169
- - 成功条件:`code == 1000`
170
-
171
- **逻辑**:
172
- ```ruby
173
- result = client.verify_license
174
-
175
- if !result[:success]
176
- # 接口请求失败
177
- @failure_count += 1
178
- if @failure_count >= 3
179
- probe_state.mark_license_invalid!
180
- # 数据不采集
181
- end
182
- elsif result[:code] == 1000
183
- # License 校验成功
184
- probe_state.mark_license_valid!
185
- @failure_count = 0
186
- else
187
- # License 校验失败
188
- probe_state.mark_license_invalid!
189
- # 数据不采集
190
- end
191
- ```
192
-
193
- **关键点**:
194
- - 接口请求失败:累计失败3次后标记为 invalid
195
- - code ≠ 1000:立即标记为 invalid
196
- - 任何一次成功(code == 1000):恢复 valid
197
-
198
- ---
199
-
200
- ### 5. AppRegistrationWorker(应用注册)
201
-
202
- **文件**: `lib/datadog/core/cloudwise/app_registration_worker.rb`
203
-
204
- **配置**:
205
- - 执行周期:**3分钟**
206
- - 成功条件:`code == 1000`
207
-
208
- **逻辑**:
209
- ```ruby
210
- result = client.register_application
211
-
212
- if result[:success] && result[:code] == 1000
213
- # 注册成功
214
- probe_state.mark_app_registered!
215
- else
216
- # 注册失败,3分钟后重试
217
- probe_state.mark_app_unregistered!
218
- # ⚠️ 注册失败不影响数据采集
219
- end
220
- ```
221
-
222
- **关键点**:
223
- - 注册失败**不影响**数据采集
224
- - 失败后继续定时重试(3分钟周期)
225
-
226
- ---
227
-
228
- ### 6. Component(组件管理器)
229
-
230
- **文件**: `lib/datadog/core/cloudwise/component.rb`
231
-
232
- **初始化顺序**:
233
- ```ruby
234
- def start
235
- # 1. Host ID Worker(30秒重试)
236
- @host_id_worker.start
237
-
238
- # 2. Heartbeat Worker(60秒周期)
239
- @heartbeat_worker.start
240
-
241
- # 3. Application Registration Worker(3分钟周期)
242
- @app_registration_worker.start
243
-
244
- # 4. License Worker(5分钟周期)
245
- @license_worker.start
246
- end
247
- ```
248
-
249
- **状态查询**:
250
- ```ruby
251
- def status
252
- {
253
- host_id_ready: probe_state.host_id_ready?,
254
- heartbeat_active: probe_state.heartbeat_active?,
255
- license_valid: probe_state.license_valid?,
256
- app_registered: probe_state.app_registered?,
257
- can_collect_data: probe_state.can_collect_data? # 核心判断
258
- }
259
- end
260
- ```
261
-
262
- ---
263
-
264
- ## 📊 数据采集控制
265
-
266
- ### 在 traces.rb 中的集成
267
-
268
- **文件**: `lib/datadog/tracing/transport/http/traces.rb`
269
-
270
- ```ruby
271
- def call(env, &block)
272
- # 检查探针状态
273
- if cloudwise_probe_suspended?
274
- Datadog.logger.debug { 'Cloudwise: Probe suspended, skipping trace submission' }
275
- return build_mock_response(env)
276
- end
277
-
278
- # 正常发送 traces
279
- # ...
280
- end
281
-
282
- def cloudwise_probe_suspended?
283
- return false unless defined?(Datadog.components)
284
- return false unless Datadog.components.respond_to?(:cloudwise)
285
-
286
- cloudwise = Datadog.components.cloudwise
287
- return false unless cloudwise&.enabled?
288
-
289
- # 核心判断:can_collect_data?
290
- cloudwise.probe_state.suspended? # 即 !can_collect_data?
291
- end
292
- ```
293
-
294
- ---
295
-
296
- ## 🔑 关键配置
297
-
298
- ### 环境变量
299
-
300
- ```bash
301
- # Cloudwise 配置
302
- export DD_CLOUDWISE_ENABLED=true
303
- export DD_CLOUDWISE_BASE_URL=https://api.cloudwise.com
304
- export DD_CLOUDWISE_SERVER_NAME=my-ruby-app
305
- export DD_CLOUDWISE_LICENSE_KEY=your-license-key
306
-
307
- # 可选:自定义周期
308
- export DD_CLOUDWISE_HEARTBEAT_INTERVAL=60 # 默认 60秒
309
- export DD_CLOUDWISE_LICENSE_CHECK_INTERVAL=300 # 默认 5分钟
310
- export DD_CLOUDWISE_APP_REGISTRATION_INTERVAL=180 # 默认 3分钟
311
-
312
- # 自动设置(由 Host ID Worker 设置)
313
- # CLOUDWISE_ACCOUNT_ID # 成功后自动设置
314
- ```
315
-
316
- ### 配置文件
317
-
318
- ```ruby
319
- Datadog.configure do |c|
320
- c.cloudwise.enabled = true
321
- c.cloudwise.base_url = 'https://api.cloudwise.com'
322
- c.cloudwise.server_name = 'my-ruby-app'
323
- c.cloudwise.license_key = 'your-license-key'
324
-
325
- # 可选
326
- c.cloudwise.heartbeat_interval = 60
327
- c.cloudwise.license_check_interval = 300
328
- c.cloudwise.app_registration_interval = 180
329
- end
330
- ```
331
-
332
- ---
333
-
334
- ## ⚠️ 重要注意事项
335
-
336
- ### 1. 初始化顺序
337
-
338
- ❗ **Cloudwise 组件必须在 Datadog 其他组件之前初始化**
339
-
340
- ```ruby
341
- # 正确的初始化顺序
342
- Datadog.configure do |c|
343
- # 1. 先配置 Cloudwise
344
- c.cloudwise.enabled = true
345
- c.cloudwise.base_url = 'https://api.cloudwise.com'
346
- # ...
347
-
348
- # 2. 再配置其他 Datadog 组件
349
- c.service = 'my-app'
350
- c.tracing.enabled = true
351
- # ...
352
- end
353
- ```
354
-
355
- ### 2. 数据采集条件
356
-
357
- 数据采集**必须同时满足三个条件**:
358
-
359
- 1. ✅ `host_id_ready == true`
360
- 2. ✅ `heartbeat_active == true`
361
- 3. ✅ `license_valid == true`
362
-
363
- 任何一个条件不满足,数据都不会被采集和上报。
364
-
365
- ### 3. 应用注册
366
-
367
- ❗ 应用注册失败**不影响**数据采集,只会在日志中记录警告并继续重试。
368
-
369
- ### 4. 失败重试
370
-
371
- - **Host ID**:30秒重试,直到成功
372
- - **Heartbeat**:接口失败累计3次后标记为 inactive,但Worker继续运行(60秒周期)
373
- - **License**:接口失败累计3次后标记为 invalid,但Worker继续运行(5分钟周期)
374
- - **App Registration**:失败后继续定时重试(3分钟周期)
375
-
376
- ### 5. 恢复机制
377
-
378
- - **Heartbeat**:任何一次成功(code == 1000)即恢复 active
379
- - **License**:任何一次成功(code == 1000)即恢复 valid
380
-
381
- ---
382
-
383
- ## 📝 日志示例
384
-
385
- ### 启动时
386
-
387
- ```
388
- ============================================================
389
- 🚀 Starting Cloudwise Component
390
- Initialization Order: Host ID → Heartbeat → App Registration → License
391
- ============================================================
392
- 📍 Step 1: Starting Host ID generation worker (30s retry)...
393
- 💓 Step 2: Starting Heartbeat worker (60s interval, 30s retry)...
394
- 📝 Step 3: Starting Application registration worker (3 min interval)...
395
- 🔑 Step 4: Starting License verification worker (5 min interval)...
396
- ============================================================
397
- ✅ Cloudwise Component started successfully
398
- Data collection will be enabled when: Host ID + Heartbeat + License are ready
399
- ============================================================
400
- ```
401
-
402
- ### Host ID 成功
403
-
404
- ```
405
- INFO -- : Cloudwise: Host ID generated successfully, account_id: acc-1234567890-123
406
- INFO -- : ✅ Cloudwise: Host ID ready
407
- INFO -- : 🔴 Cloudwise: Probe SUSPENDED - data collection disabled (Heartbeat inactive, License invalid)
408
- ```
409
-
410
- ### Heartbeat 成功
411
-
412
- ```
413
- DEBUG -- : Cloudwise: Heartbeat successful
414
- INFO -- : ✅ Cloudwise: Heartbeat active
415
- INFO -- : 🔴 Cloudwise: Probe SUSPENDED - data collection disabled (License invalid)
416
- ```
417
-
418
- ### License 成功
419
-
420
- ```
421
- INFO -- : Cloudwise: License valid
422
- INFO -- : ✅ Cloudwise: License valid
423
- INFO -- : 🟢 Cloudwise: Probe ACTIVE - data collection enabled
424
- ```
425
-
426
- ### 数据采集被阻止
427
-
428
- ```
429
- DEBUG -- : Cloudwise: Probe suspended, skipping trace submission
430
- ```
431
-
432
- ---
433
-
434
- ## 🧪 测试
435
-
436
- ### Mock API Server
437
-
438
- ```bash
439
- cd lib/datadog/core/cloudwise
440
- ruby mock_api_server.rb
441
- ```
442
-
443
- ### 运行测试
444
-
445
- ```bash
446
- cd lib/datadog/core/cloudwise
447
- ruby test_integration.rb
448
- ```
449
-
450
- ### 状态检查
451
-
452
- ```ruby
453
- status = Datadog.components.cloudwise.status
454
-
455
- puts "Host ID Ready: #{status[:host_id_ready]}"
456
- puts "Heartbeat Active: #{status[:heartbeat_active]}"
457
- puts "License Valid: #{status[:license_valid]}"
458
- puts "Can Collect Data: #{status[:can_collect_data]}"
459
- ```
460
-
461
- ---
462
-
463
- ## 📁 文件清单
464
-
465
- ### 核心文件
466
-
467
- 1. `lib/datadog/core/cloudwise/probe_state.rb` - 探针状态管理 ⭐
468
- 2. `lib/datadog/core/cloudwise/client.rb` - HTTP 客户端
469
- 3. `lib/datadog/core/cloudwise/host_id_worker.rb` - Host ID 生成 ⭐
470
- 4. `lib/datadog/core/cloudwise/heartbeat_worker.rb` - 心跳 ⭐
471
- 5. `lib/datadog/core/cloudwise/license_worker.rb` - License 校验 ⭐
472
- 6. `lib/datadog/core/cloudwise/app_registration_worker.rb` - 应用注册
473
- 7. `lib/datadog/core/cloudwise/component.rb` - 组件管理器 ⭐
474
- 8. `lib/datadog/tracing/transport/http/traces.rb` - Trace 上报拦截 ⭐
475
-
476
- ### 文档文件
477
-
478
- - `README.md` - 基础说明
479
- - `IMPLEMENTATION_V2.md` - 本文档(V2 实现方案)
480
- - `INTEGRATION_GUIDE.md` - 集成指南
481
- - `QUICKSTART.md` - 快速开始
482
-
483
- ### 测试文件
484
-
485
- - `mock_api_server.rb` - Mock API 服务器
486
- - `test_integration.rb` - 集成测试脚本
487
-
488
- ---
489
-
490
- ## ✅ V2 改进总结
491
-
492
- 相比 V1 版本,V2 做了以下改进:
493
-
494
- 1. ✅ **简化状态管理**:三个核心状态(Host ID、Heartbeat、License),清晰明了
495
- 2. ✅ **统一重试间隔**:从 2秒/2分钟 统一为 30秒,更合理
496
- 3. ✅ **优化失败处理**:累计失败次数而非每次都重试多次
497
- 4. ✅ **明确恢复机制**:任何一次成功即可恢复
498
- 5. ✅ **应用注册独立**:注册失败不影响数据采集
499
- 6. ✅ **初始化顺序明确**:Cloudwise 优先于 Datadog 其他组件
500
- 7. ✅ **日志信息丰富**:清晰显示当前状态和失败原因
501
-
502
- ---
503
-
504
- ## 🔗 相关文档
505
-
506
- - [README.md](./README.md) - 基础使用说明
507
- - [INTEGRATION_GUIDE.md](./INTEGRATION_GUIDE.md) - 详细集成指南
508
- - [QUICKSTART.md](./QUICKSTART.md) - 快速开始教程
509
-
510
-
511
-
512
-
513
-
514
-
515
-
516
-
517
-