@fluidframework/telemetry-utils 2.0.0-dev.4.4.0.162574 → 2.0.0-dev.5.3.2.178189
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/CHANGELOG.md +32 -0
- package/dist/config.d.ts +7 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/debugLogger.d.ts +1 -1
- package/dist/debugLogger.d.ts.map +1 -1
- package/dist/debugLogger.js.map +1 -1
- package/dist/errorLogging.d.ts +3 -3
- package/dist/errorLogging.d.ts.map +1 -1
- package/dist/errorLogging.js +13 -2
- package/dist/errorLogging.js.map +1 -1
- package/dist/events.d.ts +3 -3
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/fluidErrorBase.d.ts +1 -1
- package/dist/fluidErrorBase.d.ts.map +1 -1
- package/dist/fluidErrorBase.js.map +1 -1
- package/dist/logger.d.ts +16 -10
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +19 -9
- package/dist/logger.js.map +1 -1
- package/dist/mockLogger.d.ts +3 -2
- package/dist/mockLogger.d.ts.map +1 -1
- package/dist/mockLogger.js +1 -1
- package/dist/mockLogger.js.map +1 -1
- package/dist/sampledTelemetryHelper.d.ts +3 -2
- package/dist/sampledTelemetryHelper.d.ts.map +1 -1
- package/dist/sampledTelemetryHelper.js.map +1 -1
- package/dist/telemetryTypes.d.ts +5 -2
- package/dist/telemetryTypes.d.ts.map +1 -1
- package/dist/telemetryTypes.js.map +1 -1
- package/dist/thresholdCounter.d.ts +2 -2
- package/dist/thresholdCounter.d.ts.map +1 -1
- package/dist/thresholdCounter.js.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/lib/config.d.ts +7 -6
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +1 -1
- package/lib/config.js.map +1 -1
- package/lib/debugLogger.d.ts +1 -1
- package/lib/debugLogger.d.ts.map +1 -1
- package/lib/debugLogger.js.map +1 -1
- package/lib/errorLogging.d.ts +3 -3
- package/lib/errorLogging.d.ts.map +1 -1
- package/lib/errorLogging.js +13 -2
- package/lib/errorLogging.js.map +1 -1
- package/lib/events.d.ts +3 -3
- package/lib/events.d.ts.map +1 -1
- package/lib/events.js.map +1 -1
- package/lib/fluidErrorBase.d.ts +1 -1
- package/lib/fluidErrorBase.d.ts.map +1 -1
- package/lib/fluidErrorBase.js.map +1 -1
- package/lib/logger.d.ts +16 -10
- package/lib/logger.d.ts.map +1 -1
- package/lib/logger.js +19 -9
- package/lib/logger.js.map +1 -1
- package/lib/mockLogger.d.ts +3 -2
- package/lib/mockLogger.d.ts.map +1 -1
- package/lib/mockLogger.js +1 -1
- package/lib/mockLogger.js.map +1 -1
- package/lib/sampledTelemetryHelper.d.ts +3 -2
- package/lib/sampledTelemetryHelper.d.ts.map +1 -1
- package/lib/sampledTelemetryHelper.js.map +1 -1
- package/lib/telemetryTypes.d.ts +5 -2
- package/lib/telemetryTypes.d.ts.map +1 -1
- package/lib/telemetryTypes.js.map +1 -1
- package/lib/thresholdCounter.d.ts +2 -2
- package/lib/thresholdCounter.d.ts.map +1 -1
- package/lib/thresholdCounter.js.map +1 -1
- package/lib/utils.d.ts +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js.map +1 -1
- package/package.json +12 -12
- package/src/config.ts +7 -6
- package/src/debugLogger.ts +1 -1
- package/src/errorLogging.ts +20 -6
- package/src/events.ts +3 -3
- package/src/fluidErrorBase.ts +1 -1
- package/src/logger.ts +36 -15
- package/src/mockLogger.ts +4 -3
- package/src/sampledTelemetryHelper.ts +4 -4
- package/src/telemetryTypes.ts +6 -2
- package/src/thresholdCounter.ts +2 -2
- package/src/utils.ts +1 -1
package/src/config.ts
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { ITelemetryBaseLogger
|
|
6
|
-
import { Lazy } from "@fluidframework/
|
|
5
|
+
import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
6
|
+
import { Lazy } from "@fluidframework/core-utils";
|
|
7
7
|
import { TelemetryDataTag } from "./logger";
|
|
8
|
+
import { ITelemetryLoggerExt } from "./telemetryTypes";
|
|
8
9
|
|
|
9
10
|
export type ConfigTypes = string | number | boolean | number[] | string[] | boolean[] | undefined;
|
|
10
11
|
|
|
@@ -240,19 +241,19 @@ export class CachedConfigProvider implements IConfigProvider {
|
|
|
240
241
|
/**
|
|
241
242
|
* A type containing both a telemetry logger and a configuration provider
|
|
242
243
|
*/
|
|
243
|
-
export interface MonitoringContext<L extends ITelemetryBaseLogger =
|
|
244
|
+
export interface MonitoringContext<L extends ITelemetryBaseLogger = ITelemetryLoggerExt> {
|
|
244
245
|
config: IConfigProvider;
|
|
245
246
|
logger: L;
|
|
246
247
|
}
|
|
247
248
|
|
|
248
|
-
export function loggerIsMonitoringContext<L extends ITelemetryBaseLogger =
|
|
249
|
+
export function loggerIsMonitoringContext<L extends ITelemetryBaseLogger = ITelemetryLoggerExt>(
|
|
249
250
|
obj: L,
|
|
250
251
|
): obj is L & MonitoringContext<L> {
|
|
251
252
|
const maybeConfig = obj as Partial<MonitoringContext<L>> | undefined;
|
|
252
253
|
return isConfigProviderBase(maybeConfig?.config) && maybeConfig?.logger !== undefined;
|
|
253
254
|
}
|
|
254
255
|
|
|
255
|
-
export function loggerToMonitoringContext<L extends ITelemetryBaseLogger =
|
|
256
|
+
export function loggerToMonitoringContext<L extends ITelemetryBaseLogger = ITelemetryLoggerExt>(
|
|
256
257
|
logger: L,
|
|
257
258
|
): MonitoringContext<L> {
|
|
258
259
|
if (loggerIsMonitoringContext<L>(logger)) {
|
|
@@ -261,7 +262,7 @@ export function loggerToMonitoringContext<L extends ITelemetryBaseLogger = ITele
|
|
|
261
262
|
return mixinMonitoringContext<L>(logger, sessionStorageConfigProvider.value);
|
|
262
263
|
}
|
|
263
264
|
|
|
264
|
-
export function mixinMonitoringContext<L extends ITelemetryBaseLogger =
|
|
265
|
+
export function mixinMonitoringContext<L extends ITelemetryBaseLogger = ITelemetryLoggerExt>(
|
|
265
266
|
logger: L,
|
|
266
267
|
...configs: (IConfigProviderBase | undefined)[]
|
|
267
268
|
) {
|
package/src/debugLogger.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ITelemetryBaseEvent,
|
|
8
8
|
ITelemetryBaseLogger,
|
|
9
9
|
ITelemetryProperties,
|
|
10
|
-
} from "@fluidframework/
|
|
10
|
+
} from "@fluidframework/core-interfaces";
|
|
11
11
|
import { performance } from "@fluidframework/common-utils";
|
|
12
12
|
import { debug as registerDebug, IDebugger } from "debug";
|
|
13
13
|
import {
|
package/src/errorLogging.ts
CHANGED
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
import {
|
|
7
7
|
ILoggingError,
|
|
8
8
|
ITaggedTelemetryPropertyType,
|
|
9
|
-
ITelemetryLogger,
|
|
10
9
|
ITelemetryProperties,
|
|
11
10
|
TelemetryEventPropertyType,
|
|
12
|
-
} from "@fluidframework/
|
|
11
|
+
} from "@fluidframework/core-interfaces";
|
|
13
12
|
import { v4 as uuid } from "uuid";
|
|
14
13
|
import {
|
|
15
14
|
hasErrorInstanceId,
|
|
@@ -17,7 +16,11 @@ import {
|
|
|
17
16
|
isFluidError,
|
|
18
17
|
isValidLegacyError,
|
|
19
18
|
} from "./fluidErrorBase";
|
|
20
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
ITaggedTelemetryPropertyTypeExt,
|
|
21
|
+
ITelemetryLoggerExt,
|
|
22
|
+
TelemetryEventPropertyTypeExt,
|
|
23
|
+
} from "./telemetryTypes";
|
|
21
24
|
|
|
22
25
|
/** @returns true if value is an object but neither null nor an array */
|
|
23
26
|
const isRegularObject = (value: any): boolean => {
|
|
@@ -121,8 +124,19 @@ export function normalizeError(
|
|
|
121
124
|
// Anywhere they are set should be on a valid Fluid Error that would have been returned above,
|
|
122
125
|
// but we can't prove it with the types, so adding this defensive measure.
|
|
123
126
|
if (typeof error === "object" && error !== null) {
|
|
124
|
-
const
|
|
125
|
-
|
|
127
|
+
const maybeHasRetry: Partial<Record<"canRetry" | "retryAfterSeconds", unknown>> = error;
|
|
128
|
+
let retryProps: Partial<Record<"canRetry" | "retryAfterSeconds", unknown>> | undefined;
|
|
129
|
+
if ("canRetry" in error) {
|
|
130
|
+
retryProps ??= {};
|
|
131
|
+
retryProps.canRetry = maybeHasRetry.canRetry;
|
|
132
|
+
}
|
|
133
|
+
if ("retryAfterSeconds" in error) {
|
|
134
|
+
retryProps ??= {};
|
|
135
|
+
retryProps.retryAfterSeconds = maybeHasRetry.retryAfterSeconds;
|
|
136
|
+
}
|
|
137
|
+
if (retryProps !== undefined) {
|
|
138
|
+
Object.assign(fluidError, retryProps);
|
|
139
|
+
}
|
|
126
140
|
}
|
|
127
141
|
|
|
128
142
|
if (typeof error !== "object") {
|
|
@@ -220,7 +234,7 @@ export function wrapError<T extends LoggingError>(
|
|
|
220
234
|
export function wrapErrorAndLog<T extends LoggingError>(
|
|
221
235
|
innerError: unknown,
|
|
222
236
|
newErrorFn: (message: string) => T,
|
|
223
|
-
logger:
|
|
237
|
+
logger: ITelemetryLoggerExt,
|
|
224
238
|
) {
|
|
225
239
|
const newError = wrapError(innerError, newErrorFn);
|
|
226
240
|
|
package/src/events.ts
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { EventEmitter } from "events";
|
|
7
|
-
import {
|
|
7
|
+
import { ITelemetryLoggerExt } from "./telemetryTypes";
|
|
8
8
|
|
|
9
9
|
export const connectedEventName = "connected";
|
|
10
10
|
export const disconnectedEventName = "disconnected";
|
|
11
11
|
|
|
12
12
|
export function safeRaiseEvent(
|
|
13
13
|
emitter: EventEmitter,
|
|
14
|
-
logger:
|
|
14
|
+
logger: ITelemetryLoggerExt,
|
|
15
15
|
event: string,
|
|
16
16
|
...args
|
|
17
17
|
) {
|
|
@@ -31,7 +31,7 @@ export function safeRaiseEvent(
|
|
|
31
31
|
* @param disconnectedReason - The reason for the connection to be disconnected (Used for telemetry purposes only)
|
|
32
32
|
*/
|
|
33
33
|
export function raiseConnectedEvent(
|
|
34
|
-
logger:
|
|
34
|
+
logger: ITelemetryLoggerExt,
|
|
35
35
|
emitter: EventEmitter,
|
|
36
36
|
connected: boolean,
|
|
37
37
|
clientId?: string,
|
package/src/fluidErrorBase.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ITelemetryProperties } from "@fluidframework/
|
|
6
|
+
import { ITelemetryProperties } from "@fluidframework/core-interfaces";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* All normalized errors flowing through the Fluid Framework adhere to this readonly interface.
|
package/src/logger.ts
CHANGED
|
@@ -8,14 +8,13 @@ import {
|
|
|
8
8
|
ITelemetryBaseLogger,
|
|
9
9
|
ITelemetryErrorEvent,
|
|
10
10
|
ITelemetryGenericEvent,
|
|
11
|
-
ITelemetryLogger,
|
|
12
11
|
ITelemetryPerformanceEvent,
|
|
13
12
|
ITelemetryProperties,
|
|
14
13
|
TelemetryEventPropertyType,
|
|
15
14
|
ITaggedTelemetryPropertyType,
|
|
16
15
|
TelemetryEventCategory,
|
|
17
|
-
} from "@fluidframework/
|
|
18
|
-
import { performance } from "@fluidframework/common-utils";
|
|
16
|
+
} from "@fluidframework/core-interfaces";
|
|
17
|
+
import { IsomorphicPerformance, performance } from "@fluidframework/common-utils";
|
|
19
18
|
import { CachedConfigProvider, loggerIsMonitoringContext, mixinMonitoringContext } from "./config";
|
|
20
19
|
import {
|
|
21
20
|
isILoggingError,
|
|
@@ -32,6 +31,13 @@ import {
|
|
|
32
31
|
TelemetryEventPropertyTypeExt,
|
|
33
32
|
} from "./telemetryTypes";
|
|
34
33
|
|
|
34
|
+
export interface Memory {
|
|
35
|
+
usedJSHeapSize: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface PerformanceWithMemory extends IsomorphicPerformance {
|
|
39
|
+
readonly memory: Memory;
|
|
40
|
+
}
|
|
35
41
|
/**
|
|
36
42
|
* Broad classifications to be applied to individual properties as they're prepared to be logged to telemetry.
|
|
37
43
|
* Please do not modify existing entries for backwards compatibility.
|
|
@@ -290,7 +296,6 @@ export class ChildLogger extends TelemetryLogger {
|
|
|
290
296
|
* is created, but it does not send telemetry events anywhere.
|
|
291
297
|
* @param namespace - Telemetry event name prefix to add to all events
|
|
292
298
|
* @param properties - Base properties to add to all events
|
|
293
|
-
* @param propertyGetters - Getters to add additional properties to all events
|
|
294
299
|
*/
|
|
295
300
|
public static create(
|
|
296
301
|
baseLogger?: ITelemetryBaseLogger,
|
|
@@ -361,7 +366,6 @@ export class ChildLogger extends TelemetryLogger {
|
|
|
361
366
|
/**
|
|
362
367
|
* Multi-sink logger
|
|
363
368
|
* Takes multiple ITelemetryBaseLogger objects (sinks) and logs all events into each sink
|
|
364
|
-
* Implements ITelemetryBaseLogger (through static create() method)
|
|
365
369
|
*/
|
|
366
370
|
export class MultiSinkLogger extends TelemetryLogger {
|
|
367
371
|
protected loggers: ITelemetryBaseLogger[] = [];
|
|
@@ -370,7 +374,6 @@ export class MultiSinkLogger extends TelemetryLogger {
|
|
|
370
374
|
* Create multiple sink logger (i.e. logger that sends events to multiple sinks)
|
|
371
375
|
* @param namespace - Telemetry event name prefix to add to all events
|
|
372
376
|
* @param properties - Base properties to add to all events
|
|
373
|
-
* @param propertyGetters - Getters to add additional properties to all events
|
|
374
377
|
*/
|
|
375
378
|
constructor(namespace?: string, properties?: ITelemetryLoggerPropertyBags) {
|
|
376
379
|
super(namespace, properties);
|
|
@@ -416,15 +419,16 @@ export interface IPerformanceEventMarkers {
|
|
|
416
419
|
*/
|
|
417
420
|
export class PerformanceEvent {
|
|
418
421
|
public static start(
|
|
419
|
-
logger:
|
|
422
|
+
logger: ITelemetryLoggerExt,
|
|
420
423
|
event: ITelemetryGenericEvent,
|
|
421
424
|
markers?: IPerformanceEventMarkers,
|
|
425
|
+
recordHeapSize: boolean = false,
|
|
422
426
|
) {
|
|
423
|
-
return new PerformanceEvent(logger, event, markers);
|
|
427
|
+
return new PerformanceEvent(logger, event, markers, recordHeapSize);
|
|
424
428
|
}
|
|
425
429
|
|
|
426
430
|
public static timedExec<T>(
|
|
427
|
-
logger:
|
|
431
|
+
logger: ITelemetryLoggerExt,
|
|
428
432
|
event: ITelemetryGenericEvent,
|
|
429
433
|
callback: (event: PerformanceEvent) => T,
|
|
430
434
|
markers?: IPerformanceEventMarkers,
|
|
@@ -441,12 +445,13 @@ export class PerformanceEvent {
|
|
|
441
445
|
}
|
|
442
446
|
|
|
443
447
|
public static async timedExecAsync<T>(
|
|
444
|
-
logger:
|
|
448
|
+
logger: ITelemetryLoggerExt,
|
|
445
449
|
event: ITelemetryGenericEvent,
|
|
446
450
|
callback: (event: PerformanceEvent) => Promise<T>,
|
|
447
451
|
markers?: IPerformanceEventMarkers,
|
|
452
|
+
recordHeapSize?: boolean,
|
|
448
453
|
) {
|
|
449
|
-
const perfEvent = PerformanceEvent.start(logger, event, markers);
|
|
454
|
+
const perfEvent = PerformanceEvent.start(logger, event, markers, recordHeapSize);
|
|
450
455
|
try {
|
|
451
456
|
const ret = await callback(perfEvent);
|
|
452
457
|
perfEvent.autoEnd();
|
|
@@ -464,11 +469,13 @@ export class PerformanceEvent {
|
|
|
464
469
|
private event?: ITelemetryGenericEvent;
|
|
465
470
|
private readonly startTime = performance.now();
|
|
466
471
|
private startMark?: string;
|
|
472
|
+
private startMemoryCollection: number | undefined = 0;
|
|
467
473
|
|
|
468
474
|
protected constructor(
|
|
469
|
-
private readonly logger:
|
|
475
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
470
476
|
event: ITelemetryGenericEvent,
|
|
471
477
|
private readonly markers: IPerformanceEventMarkers = { end: true, cancel: "generic" },
|
|
478
|
+
private readonly recordHeapSize: boolean = false,
|
|
472
479
|
) {
|
|
473
480
|
this.event = { ...event };
|
|
474
481
|
if (this.markers.start) {
|
|
@@ -531,6 +538,20 @@ export class PerformanceEvent {
|
|
|
531
538
|
event.eventName = `${event.eventName}_${eventNameSuffix}`;
|
|
532
539
|
if (eventNameSuffix !== "start") {
|
|
533
540
|
event.duration = this.duration;
|
|
541
|
+
if (this.startMemoryCollection) {
|
|
542
|
+
const currentMemory = (performance as PerformanceWithMemory)?.memory
|
|
543
|
+
?.usedJSHeapSize;
|
|
544
|
+
const differenceInKBytes = Math.floor(
|
|
545
|
+
(currentMemory - this.startMemoryCollection) / 1024,
|
|
546
|
+
);
|
|
547
|
+
if (differenceInKBytes > 0) {
|
|
548
|
+
event.usedJSHeapSize = differenceInKBytes;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
} else if (this.recordHeapSize) {
|
|
552
|
+
this.startMemoryCollection = (
|
|
553
|
+
performance as PerformanceWithMemory
|
|
554
|
+
)?.memory?.usedJSHeapSize;
|
|
534
555
|
}
|
|
535
556
|
|
|
536
557
|
this.logger.sendPerformanceEvent(event, error);
|
|
@@ -541,7 +562,7 @@ export class PerformanceEvent {
|
|
|
541
562
|
* Logger that is useful for UT
|
|
542
563
|
* It can be used in places where logger instance is required, but events should be not send over.
|
|
543
564
|
*/
|
|
544
|
-
export class TelemetryUTLogger implements
|
|
565
|
+
export class TelemetryUTLogger implements ITelemetryLoggerExt {
|
|
545
566
|
public send(event: ITelemetryBaseEvent): void {}
|
|
546
567
|
public sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any) {}
|
|
547
568
|
public sendErrorEvent(event: ITelemetryErrorEvent, error?: any) {
|
|
@@ -591,7 +612,7 @@ export class BaseTelemetryNullLogger implements ITelemetryBaseLogger {
|
|
|
591
612
|
* Null logger
|
|
592
613
|
* It can be used in places where logger instance is required, but events should be not send over.
|
|
593
614
|
*/
|
|
594
|
-
export class TelemetryNullLogger implements
|
|
615
|
+
export class TelemetryNullLogger implements ITelemetryLoggerExt {
|
|
595
616
|
public send(event: ITelemetryBaseEvent): void {}
|
|
596
617
|
public sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any): void {}
|
|
597
618
|
public sendErrorEvent(event: ITelemetryErrorEvent, error?: any): void {}
|
|
@@ -645,7 +666,7 @@ function convertToBasePropertyTypeUntagged(
|
|
|
645
666
|
case "undefined":
|
|
646
667
|
return x;
|
|
647
668
|
case "object":
|
|
648
|
-
// We assume this is an array based on the input types
|
|
669
|
+
// We assume this is an array or flat object based on the input types
|
|
649
670
|
return JSON.stringify(x);
|
|
650
671
|
default:
|
|
651
672
|
// should never reach this case based on the input types
|
package/src/mockLogger.ts
CHANGED
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ITelemetryBaseEvent } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { assert } from "@fluidframework/common-utils";
|
|
8
8
|
import { TelemetryLogger } from "./logger";
|
|
9
|
+
import { ITelemetryLoggerExt } from "./telemetryTypes";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* The MockLogger records events sent to it, and then can walk back over those events
|
|
12
13
|
* searching for a set of expected events to match against the logged events.
|
|
13
14
|
*/
|
|
14
|
-
export class MockLogger extends TelemetryLogger implements
|
|
15
|
+
export class MockLogger extends TelemetryLogger implements ITelemetryLoggerExt {
|
|
15
16
|
events: ITelemetryBaseEvent[] = [];
|
|
16
17
|
|
|
17
18
|
constructor() {
|
|
@@ -191,7 +192,7 @@ ${JSON.stringify(actualEvents)}`);
|
|
|
191
192
|
if (inlineDetailsProp && details !== undefined) {
|
|
192
193
|
assert(
|
|
193
194
|
typeof details === "string",
|
|
194
|
-
|
|
195
|
+
0x6c9 /* Details should a JSON stringified string if inlineDetailsProp is true */,
|
|
195
196
|
);
|
|
196
197
|
detailsExpanded = JSON.parse(details);
|
|
197
198
|
}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
IDisposable,
|
|
8
7
|
ITelemetryGenericEvent,
|
|
9
|
-
ITelemetryLogger,
|
|
10
8
|
ITelemetryPerformanceEvent,
|
|
11
9
|
ITelemetryProperties,
|
|
12
|
-
|
|
10
|
+
IDisposable,
|
|
11
|
+
} from "@fluidframework/core-interfaces";
|
|
13
12
|
import { performance } from "@fluidframework/common-utils";
|
|
13
|
+
import { ITelemetryLoggerExt } from "./telemetryTypes";
|
|
14
14
|
|
|
15
15
|
interface Measurements {
|
|
16
16
|
// The names of the properties in this interface are the ones that will get stamped in the
|
|
@@ -75,7 +75,7 @@ export class SampledTelemetryHelper implements IDisposable {
|
|
|
75
75
|
*/
|
|
76
76
|
public constructor(
|
|
77
77
|
private readonly eventBase: ITelemetryGenericEvent,
|
|
78
|
-
private readonly logger:
|
|
78
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
79
79
|
private readonly sampleThreshold: number,
|
|
80
80
|
private readonly includeAggregateMetrics: boolean = false,
|
|
81
81
|
private readonly perBucketProperties = new Map<string, ITelemetryProperties>(),
|
package/src/telemetryTypes.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ITelemetryBaseLogger, TelemetryEventCategory } from "@fluidframework/
|
|
6
|
+
import { ITelemetryBaseLogger, TelemetryEventCategory } from "@fluidframework/core-interfaces";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Property types that can be logged.
|
|
@@ -14,7 +14,11 @@ export type TelemetryEventPropertyTypeExt =
|
|
|
14
14
|
| number
|
|
15
15
|
| boolean
|
|
16
16
|
| undefined
|
|
17
|
-
| (string | number | boolean)[]
|
|
17
|
+
| (string | number | boolean)[]
|
|
18
|
+
| {
|
|
19
|
+
[key: string]: // Flat objects can have the same properties as the event itself
|
|
20
|
+
string | number | boolean | undefined | (string | number | boolean)[];
|
|
21
|
+
};
|
|
18
22
|
|
|
19
23
|
/**
|
|
20
24
|
* A property to be logged to telemetry containing both the value and a tag. Tags are generic strings that can be used
|
package/src/thresholdCounter.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ITelemetryLoggerExt } from "./telemetryTypes";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Utility counter which will send event only if the provided value
|
|
@@ -12,7 +12,7 @@ import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
|
12
12
|
export class ThresholdCounter {
|
|
13
13
|
public constructor(
|
|
14
14
|
private readonly threshold: number,
|
|
15
|
-
private readonly logger:
|
|
15
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
16
16
|
private thresholdMultiple = threshold,
|
|
17
17
|
) {}
|
|
18
18
|
|
package/src/utils.ts
CHANGED