@fluidframework/telemetry-utils 2.0.0-dev.3.1.0.125672 → 2.0.0-dev.4.2.0.153917
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 +5 -0
- package/README.md +68 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -5
- package/dist/config.js.map +1 -1
- package/dist/debugLogger.d.ts.map +1 -1
- package/dist/debugLogger.js +12 -1
- package/dist/debugLogger.js.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/lib/config.d.ts +2 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +30 -5
- package/lib/config.js.map +1 -1
- package/lib/debugLogger.d.ts.map +1 -1
- package/lib/debugLogger.js +12 -1
- package/lib/debugLogger.js.map +1 -1
- package/lib/logger.js +1 -1
- package/lib/logger.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/package.json +47 -48
- package/src/config.ts +29 -5
- package/src/debugLogger.ts +11 -1
- package/src/logger.ts +1 -1
- package/src/packageVersion.ts +1 -1
package/src/config.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { ITelemetryBaseLogger, ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
6
|
import { Lazy } from "@fluidframework/common-utils";
|
|
7
|
+
import { TelemetryDataTag } from "./logger";
|
|
7
8
|
|
|
8
9
|
export type ConfigTypes = string | number | boolean | number[] | string[] | boolean[] | undefined;
|
|
9
10
|
|
|
@@ -47,7 +48,7 @@ const NullConfigProvider: IConfigProviderBase = {
|
|
|
47
48
|
*/
|
|
48
49
|
export const inMemoryConfigProvider = (storage: Storage | undefined): IConfigProviderBase => {
|
|
49
50
|
if (storage !== undefined && storage !== null) {
|
|
50
|
-
return new CachedConfigProvider({
|
|
51
|
+
return new CachedConfigProvider(undefined, {
|
|
51
52
|
getRawConfig: (name: string) => {
|
|
52
53
|
try {
|
|
53
54
|
return stronglyTypedParse(storage.getItem(name) ?? undefined)?.raw;
|
|
@@ -142,9 +143,20 @@ function stronglyTypedParse(input: ConfigTypes): StronglyTypedValue | undefined
|
|
|
142
143
|
return defaultReturn;
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
/** `sessionStorage` is undefined in some environments such as Node */
|
|
146
|
+
/** `sessionStorage` is undefined in some environments such as Node and web pages with session storage disabled */
|
|
146
147
|
const safeSessionStorage = (): Storage | undefined => {
|
|
147
|
-
|
|
148
|
+
// For some configurations accessing "globalThis.sessionStorage" throws
|
|
149
|
+
// "'sessionStorage' property from 'Window': Access is denied for this document" rather than returning undefined.
|
|
150
|
+
// Therefor check for it before accessing.
|
|
151
|
+
try {
|
|
152
|
+
// Using globalThis and checking for undefined is preferred over just accessing global sessionStorage
|
|
153
|
+
// since it avoids an exception when running in node.
|
|
154
|
+
// In some cases this has returned null when disabled in the browser, so ensure its undefined in that case:
|
|
155
|
+
return globalThis.sessionStorage ?? undefined;
|
|
156
|
+
} catch {
|
|
157
|
+
// For browsers which error on the above when session storage is disabled:
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
148
160
|
};
|
|
149
161
|
|
|
150
162
|
/**
|
|
@@ -154,7 +166,10 @@ export class CachedConfigProvider implements IConfigProvider {
|
|
|
154
166
|
private readonly configCache = new Map<string, StronglyTypedValue>();
|
|
155
167
|
private readonly orderedBaseProviders: (IConfigProviderBase | undefined)[];
|
|
156
168
|
|
|
157
|
-
constructor(
|
|
169
|
+
constructor(
|
|
170
|
+
private readonly logger?: ITelemetryBaseLogger,
|
|
171
|
+
...orderedBaseProviders: (IConfigProviderBase | undefined)[]
|
|
172
|
+
) {
|
|
158
173
|
this.orderedBaseProviders = [];
|
|
159
174
|
const knownProviders = new Set<IConfigProviderBase>();
|
|
160
175
|
const candidateProviders = [...orderedBaseProviders];
|
|
@@ -203,6 +218,15 @@ export class CachedConfigProvider implements IConfigProvider {
|
|
|
203
218
|
const parsed = stronglyTypedParse(provider?.getRawConfig(name));
|
|
204
219
|
if (parsed !== undefined) {
|
|
205
220
|
this.configCache.set(name, parsed);
|
|
221
|
+
this.logger?.send({
|
|
222
|
+
category: "generic",
|
|
223
|
+
eventName: "ConfigRead",
|
|
224
|
+
configName: { tag: TelemetryDataTag.CodeArtifact, value: name },
|
|
225
|
+
configValue: {
|
|
226
|
+
tag: TelemetryDataTag.CodeArtifact,
|
|
227
|
+
value: JSON.stringify(parsed),
|
|
228
|
+
},
|
|
229
|
+
});
|
|
206
230
|
return parsed;
|
|
207
231
|
}
|
|
208
232
|
}
|
|
@@ -253,7 +277,7 @@ export function mixinMonitoringContext<L extends ITelemetryBaseLogger = ITelemet
|
|
|
253
277
|
* of the MonitoringContext and get the config provider.
|
|
254
278
|
*/
|
|
255
279
|
const mc: L & Partial<MonitoringContext<L>> = logger;
|
|
256
|
-
mc.config = new CachedConfigProvider(...configs);
|
|
280
|
+
mc.config = new CachedConfigProvider(logger, ...configs);
|
|
257
281
|
mc.logger = logger;
|
|
258
282
|
return mc as MonitoringContext<L>;
|
|
259
283
|
}
|
package/src/debugLogger.ts
CHANGED
|
@@ -34,8 +34,18 @@ export class DebugLogger extends TelemetryLogger {
|
|
|
34
34
|
// Setup base logger upfront, such that host can disable it (if needed)
|
|
35
35
|
const debug = registerDebug(namespace);
|
|
36
36
|
|
|
37
|
+
// Create one for errors that is always enabled
|
|
38
|
+
// It can be silenced by replacing console.error if the debug namespace is not enabled.
|
|
37
39
|
const debugErr = registerDebug(namespace);
|
|
38
|
-
debugErr.log =
|
|
40
|
+
debugErr.log = function () {
|
|
41
|
+
if (debug.enabled) {
|
|
42
|
+
// if the namespace is enabled, just use the default logger
|
|
43
|
+
registerDebug.log(...arguments);
|
|
44
|
+
} else {
|
|
45
|
+
// other wise, use the console logger (which could be replaced and silenced)
|
|
46
|
+
console.error(...arguments);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
39
49
|
debugErr.enabled = true;
|
|
40
50
|
|
|
41
51
|
return new DebugLogger(debug, debugErr, properties);
|
package/src/logger.ts
CHANGED
|
@@ -344,7 +344,7 @@ export class ChildLogger extends TelemetryLogger {
|
|
|
344
344
|
|
|
345
345
|
// propagate the monitoring context
|
|
346
346
|
if (loggerIsMonitoringContext(baseLogger)) {
|
|
347
|
-
mixinMonitoringContext(this, new CachedConfigProvider(baseLogger.config));
|
|
347
|
+
mixinMonitoringContext(this, new CachedConfigProvider(this, baseLogger.config));
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
350
|
|
package/src/packageVersion.ts
CHANGED