@lark-apaas/observable-web 1.0.1-alpha.5 → 1.0.1-alpha.7
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.
- package/dist/index.d.ts +5 -0
- package/dist/index.js +78 -9
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ interface WebSdkConfig {
|
|
|
12
12
|
log: string;
|
|
13
13
|
metric: string;
|
|
14
14
|
trace: string;
|
|
15
|
+
time?: string;
|
|
15
16
|
};
|
|
16
17
|
headers?: Record<string, string>;
|
|
17
18
|
}
|
|
@@ -27,6 +28,7 @@ declare class WebObservableSdk {
|
|
|
27
28
|
private config;
|
|
28
29
|
private isStarted;
|
|
29
30
|
static EmptySpan: Span;
|
|
31
|
+
static timeOffset: number;
|
|
30
32
|
constructor();
|
|
31
33
|
static get instance(): WebObservableSdk;
|
|
32
34
|
start(config: WebSdkConfig): void;
|
|
@@ -34,8 +36,11 @@ declare class WebObservableSdk {
|
|
|
34
36
|
private initMetrics;
|
|
35
37
|
private initTraces;
|
|
36
38
|
private initAutoPv;
|
|
39
|
+
static adjustHrTime(hrTime: [number, number]): [number, number];
|
|
40
|
+
private initTimeOffset;
|
|
37
41
|
private flushData;
|
|
38
42
|
private registerLifecycleListeners;
|
|
43
|
+
static getCalibratedDate(): Date;
|
|
39
44
|
log(level: 'INFO' | 'ERROR' | 'WARN', message: string, attributes?: Record<string, any>, span?: Span): void;
|
|
40
45
|
addCount(name: string, value?: number, attributes?: Record<string, any>): void;
|
|
41
46
|
startSpan(name: string, options?: SpanOptions, spanContext?: Context): Span | undefined;
|
package/dist/index.js
CHANGED
|
@@ -794,7 +794,7 @@ var trace = TraceAPI.getInstance();
|
|
|
794
794
|
|
|
795
795
|
// package.json
|
|
796
796
|
var package_default = {
|
|
797
|
-
version: "1.0.1-alpha.
|
|
797
|
+
version: "1.0.1-alpha.7"};
|
|
798
798
|
|
|
799
799
|
// src/const.ts
|
|
800
800
|
var defaultResourceAttr = {
|
|
@@ -973,8 +973,8 @@ var CustomWebMetricExporter = class {
|
|
|
973
973
|
transformNumberDataPoints(dataPoints) {
|
|
974
974
|
return dataPoints.map((dp) => ({
|
|
975
975
|
attributes: __spreadValues(__spreadValues({}, convertAttributesToString(dp.attributes)), getDefaultAttr()),
|
|
976
|
-
startTimeUnixNano: hrTimeToNanosNumber(dp.startTime),
|
|
977
|
-
timeUnixNano: hrTimeToNanosNumber(dp.endTime),
|
|
976
|
+
startTimeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(dp.startTime)),
|
|
977
|
+
timeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(dp.endTime)),
|
|
978
978
|
// JS 中所有数字都是双精度浮点数,默认映射到 asDouble
|
|
979
979
|
// 如果需要 asInt,需要自行判断 Number.isInteger(dp.value)
|
|
980
980
|
asDouble: dp.value
|
|
@@ -1113,8 +1113,8 @@ var CustomWebLogExporter = class {
|
|
|
1113
1113
|
logRecords: logs.map((log) => {
|
|
1114
1114
|
var _a, _b, _c;
|
|
1115
1115
|
return {
|
|
1116
|
-
timeUnixNano: hrTimeToNanosNumber(log.hrTime),
|
|
1117
|
-
observedTimeUnixNano: hrTimeToNanosNumber(log.hrTimeObserved),
|
|
1116
|
+
timeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(log.hrTime)),
|
|
1117
|
+
observedTimeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(log.hrTimeObserved)),
|
|
1118
1118
|
severityNumber: log.severityNumber,
|
|
1119
1119
|
severityText: log.severityText,
|
|
1120
1120
|
body: log.body,
|
|
@@ -1200,8 +1200,8 @@ var CustomWebTraceExporter = class {
|
|
|
1200
1200
|
parentSpanID: (_a = span.parentSpanContext) == null ? void 0 : _a.spanId,
|
|
1201
1201
|
name: span.name,
|
|
1202
1202
|
kind: span.kind,
|
|
1203
|
-
startTimeUnixNano: hrTimeToNanosNumber(span.startTime),
|
|
1204
|
-
endTimeUnixNano: hrTimeToNanosNumber(span.endTime),
|
|
1203
|
+
startTimeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(span.startTime)),
|
|
1204
|
+
endTimeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(span.endTime)),
|
|
1205
1205
|
attributes: __spreadValues(__spreadValues({}, convertAttributesToString(span.attributes)), getDefaultAttr()),
|
|
1206
1206
|
status: {
|
|
1207
1207
|
code: span.status.code,
|
|
@@ -1212,7 +1212,7 @@ var CustomWebTraceExporter = class {
|
|
|
1212
1212
|
events: span.events.map((event) => {
|
|
1213
1213
|
var _a2;
|
|
1214
1214
|
return {
|
|
1215
|
-
timeUnixNano: hrTimeToNanosNumber(event.time),
|
|
1215
|
+
timeUnixNano: hrTimeToNanosNumber(WebObservableSdk.adjustHrTime(event.time)),
|
|
1216
1216
|
name: event.name,
|
|
1217
1217
|
attributes: convertAttributesToString((_a2 = event.attributes) != null ? _a2 : {}),
|
|
1218
1218
|
droppedAttributesCount: event.droppedAttributesCount
|
|
@@ -1291,6 +1291,7 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1291
1291
|
start(config) {
|
|
1292
1292
|
if (this.isStarted || config.env === "preview" /* Dev */) return;
|
|
1293
1293
|
this.config = config;
|
|
1294
|
+
this.initTimeOffset();
|
|
1294
1295
|
try {
|
|
1295
1296
|
this.resource = resources.detectResources({
|
|
1296
1297
|
detectors: [new CustomWebDetector()]
|
|
@@ -1314,6 +1315,13 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1314
1315
|
url: this.config.collectorUrl.log,
|
|
1315
1316
|
headers: ((_b = this.config) == null ? void 0 : _b.headers) || {}
|
|
1316
1317
|
});
|
|
1318
|
+
const originalExport = exporter.export.bind(exporter);
|
|
1319
|
+
exporter.export = (logs, resultCallback) => {
|
|
1320
|
+
for (const log of logs) {
|
|
1321
|
+
log.hrTime = _WebObservableSdk._adjustHrTime(log.hrTime);
|
|
1322
|
+
}
|
|
1323
|
+
return originalExport(logs, resultCallback);
|
|
1324
|
+
};
|
|
1317
1325
|
this.loggerProvider = new sdkLogs.LoggerProvider({
|
|
1318
1326
|
resource: this.resource,
|
|
1319
1327
|
processors: [
|
|
@@ -1333,6 +1341,17 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1333
1341
|
url: (_b = this.config) == null ? void 0 : _b.collectorUrl.metric,
|
|
1334
1342
|
headers: ((_c = this.config) == null ? void 0 : _c.headers) || {}
|
|
1335
1343
|
});
|
|
1344
|
+
const originalExport = exporter.export.bind(exporter);
|
|
1345
|
+
exporter.export = (metrics, resultCallback) => {
|
|
1346
|
+
for (const record of metrics.scopeMetrics) {
|
|
1347
|
+
for (const metric of record.metrics) {
|
|
1348
|
+
for (const dataPoint of metric.dataPoints) {
|
|
1349
|
+
dataPoint.hrTime = _WebObservableSdk._adjustHrTime(dataPoint.hrTime);
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
return originalExport(metrics, resultCallback);
|
|
1354
|
+
};
|
|
1336
1355
|
this.meterProvider = new sdkMetrics.MeterProvider({
|
|
1337
1356
|
resource: this.resource,
|
|
1338
1357
|
readers: [
|
|
@@ -1354,6 +1373,14 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1354
1373
|
url: (_b = this.config) == null ? void 0 : _b.collectorUrl.trace,
|
|
1355
1374
|
headers: ((_c = this.config) == null ? void 0 : _c.headers) || {}
|
|
1356
1375
|
});
|
|
1376
|
+
const originalExport = exporter.export.bind(exporter);
|
|
1377
|
+
exporter.export = (spans, resultCallback) => {
|
|
1378
|
+
for (const span of spans) {
|
|
1379
|
+
span.startTime = _WebObservableSdk._adjustHrTime(span.startTime);
|
|
1380
|
+
span.endTime = _WebObservableSdk._adjustHrTime(span.endTime);
|
|
1381
|
+
}
|
|
1382
|
+
return originalExport(spans, resultCallback);
|
|
1383
|
+
};
|
|
1357
1384
|
this.tracerProvider = new sdkTraceWeb.WebTracerProvider({
|
|
1358
1385
|
resource: this.resource,
|
|
1359
1386
|
spanProcessors: [
|
|
@@ -1373,6 +1400,43 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1373
1400
|
const pvTracker = new PvInstrumentation(meter);
|
|
1374
1401
|
pvTracker.enable();
|
|
1375
1402
|
}
|
|
1403
|
+
static adjustHrTime(hrTime) {
|
|
1404
|
+
if (_WebObservableSdk.timeOffset === 0) {
|
|
1405
|
+
return hrTime;
|
|
1406
|
+
}
|
|
1407
|
+
try {
|
|
1408
|
+
const offsetNs = BigInt(_WebObservableSdk.timeOffset);
|
|
1409
|
+
const originalTimeNs = BigInt(hrTime[0]) * BigInt(1e9) + BigInt(hrTime[1]);
|
|
1410
|
+
const calibratedTimeNs = originalTimeNs + offsetNs;
|
|
1411
|
+
const calibratedSec = calibratedTimeNs / BigInt(1e9);
|
|
1412
|
+
const calibratedNs = calibratedTimeNs % BigInt(1e9);
|
|
1413
|
+
return [Number(calibratedSec), Number(calibratedNs)];
|
|
1414
|
+
} catch (e) {
|
|
1415
|
+
console.error("Failed to adjust HrTime", e);
|
|
1416
|
+
return hrTime;
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
initTimeOffset() {
|
|
1420
|
+
return __async(this, null, function* () {
|
|
1421
|
+
var _a;
|
|
1422
|
+
try {
|
|
1423
|
+
if (!((_a = this.config) == null ? void 0 : _a.collectorUrl.time)) return;
|
|
1424
|
+
const start = Date.now();
|
|
1425
|
+
const response = yield fetch(this.config.collectorUrl.time);
|
|
1426
|
+
const end = Date.now();
|
|
1427
|
+
const rtt = end - start;
|
|
1428
|
+
const serverTimeRes = yield response.json();
|
|
1429
|
+
const serverTimeNs = BigInt(serverTimeRes.data.timestampNsStr);
|
|
1430
|
+
if (serverTimeNs) {
|
|
1431
|
+
const clientTimeMs = start + rtt / 2;
|
|
1432
|
+
const clientTimeNs = BigInt(Math.round(clientTimeMs)) * BigInt(1e6);
|
|
1433
|
+
_WebObservableSdk.timeOffset = Number(serverTimeNs - clientTimeNs);
|
|
1434
|
+
}
|
|
1435
|
+
} catch (error) {
|
|
1436
|
+
console.error("Failed to init time offset:", error);
|
|
1437
|
+
}
|
|
1438
|
+
});
|
|
1439
|
+
}
|
|
1376
1440
|
flushData() {
|
|
1377
1441
|
try {
|
|
1378
1442
|
const promises = [];
|
|
@@ -1417,6 +1481,10 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1417
1481
|
this.flushData();
|
|
1418
1482
|
});
|
|
1419
1483
|
}
|
|
1484
|
+
static getCalibratedDate() {
|
|
1485
|
+
const offsetInMs = _WebObservableSdk.timeOffset / 1e6;
|
|
1486
|
+
return new Date(Date.now() + offsetInMs);
|
|
1487
|
+
}
|
|
1420
1488
|
// --- 公开 API: 日志(Log) ---
|
|
1421
1489
|
log(level, message, attributes = {}, span) {
|
|
1422
1490
|
try {
|
|
@@ -1425,7 +1493,7 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1425
1493
|
severityText: level,
|
|
1426
1494
|
body: message,
|
|
1427
1495
|
attributes,
|
|
1428
|
-
timestamp:
|
|
1496
|
+
timestamp: _WebObservableSdk.getCalibratedDate(),
|
|
1429
1497
|
context: ctx
|
|
1430
1498
|
});
|
|
1431
1499
|
} catch (error) {
|
|
@@ -1479,6 +1547,7 @@ var _WebObservableSdk = class _WebObservableSdk {
|
|
|
1479
1547
|
}
|
|
1480
1548
|
};
|
|
1481
1549
|
_WebObservableSdk.EmptySpan = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);
|
|
1550
|
+
_WebObservableSdk.timeOffset = 0;
|
|
1482
1551
|
var WebObservableSdk = _WebObservableSdk;
|
|
1483
1552
|
var observable = WebObservableSdk.instance;
|
|
1484
1553
|
|