-
Notifications
You must be signed in to change notification settings - Fork 667
/
app-insights.ts
105 lines (86 loc) · 2.98 KB
/
app-insights.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import * as appInsights from 'applicationinsights';
import * as configStore from './config-store';
import { debug as d } from './debug';
interface IFlushOptions {
callback: () => void;
}
const debug: debug.IDebugger = d(__filename);
const configStoreKey: string = 'insight';
let insightsEnabled = configStore.get(configStoreKey);
let appInsightsClient: appInsights.TelemetryClient = {
flush(options: IFlushOptions) {
debug('Application Insights is not enabled.');
options.callback();
},
trackEvent() {
debug('Application Insights is not enabled.');
},
trackException() {
debug('Application Insights is not enabled.');
}
} as any;
export const enableInsight = () => {
debug('Enabling Application Insights');
appInsights.setup('8ef2b55b-2ce9-4c33-a09a-2c3ef605c97d')
.setAutoDependencyCorrelation(true)
.setAutoCollectRequests(true)
.setAutoCollectPerformance(true)
.setAutoCollectExceptions(true)
.setAutoCollectDependencies(true)
.setUseDiskRetryCaching(true)
.setInternalLogging(false, false)
.start();
appInsightsClient = appInsights.defaultClient;
};
if (insightsEnabled) {
enableInsight();
} else {
debug('Application Insight disabled');
}
/** Check if Application Insights is enabled or not. */
export const isEnabled = () => {
return insightsEnabled;
};
/** Enable Application Insight. */
export const enable = () => {
debug('User is enabling Application Insights');
configStore.set(configStoreKey, true);
insightsEnabled = true;
enableInsight();
};
/** Disable Application Insights for the future. */
export const disable = () => {
debug('User is disabling Application Insights');
configStore.set(configStoreKey, false);
insightsEnabled = false;
};
/** Send pending data to Application Insights. */
export const sendPendingData = (isAppCrashing = true) => {
debug('Sending pending data to Application Insights');
return new Promise((resolve) => {
appInsightsClient.flush({
callback: () => {
resolve();
},
isAppCrashing
});
});
};
/** Track an exception in Application Insights. */
export const trackException = (error: Error) => {
debug(`Sending exception to Application Insights: ${error.toString()}`);
appInsightsClient.trackException({ exception: error });
};
/** Track an event in Application Insights. */
export const trackEvent = (name: string, properties?: {}) => {
debug(`Sending event "${name}" to Application Insights with value ${JSON.stringify(properties)}`);
appInsightsClient.trackEvent({ name, properties: { config: JSON.stringify(properties, null, 2) }});
};
/** Return the Application Insights client. */
export const getClient = () => {
debug('Getting Application Insights client');
return appInsightsClient;
};
export const isConfigured = (): boolean => {
return typeof configStore.get(configStoreKey) !== 'undefined';
};