in extensions/applicationinsights-properties-js/src/TelemetryContext.ts [43:173]
constructor(core: IAppInsightsCore, defaultConfig: ITelemetryConfig) {
let logger = core.logger
this.appId = () => null;
this.getSessionId = () => null;
dynamicProto(TelemetryContext, this, (_self) => {
_self.application = new Application();
_self.internal = new Internal(defaultConfig);
if (hasWindow()) {
_self.sessionManager = new _SessionManager(defaultConfig, core);
_self.device = new Device();
_self.location = new Location();
_self.user = new User(defaultConfig, core);
_self.telemetryTrace = new TelemetryTrace(undefined, undefined, undefined, logger);
_self.session = new Session();
}
_self.getSessionId = () => {
let session = _self.session;
let sesId = null;
// If customer set session info, apply their context; otherwise apply context automatically generated
if (session && isString(session.id)) {
sesId = session.id;
} else {
// Gets the automatic session if it exists or an empty object
let autoSession = (_self.sessionManager || {} as _SessionManager).automaticSession;
sesId = autoSession && isString(autoSession.id) ? autoSession.id : null;
}
return sesId;
}
_self.applySessionContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
setValue(getSetValue(evt.ext, Extensions.AppExt), "sesId", _self.getSessionId(), isString);
}
_self.applyOperatingSystemContxt = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
setValue(evt.ext, Extensions.OSExt, _self.os);
};
_self.applyApplicationContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let application = _self.application;
if (application) {
// evt.ext.app
let tags = getSetValue(evt, strTags);
setValue(tags, CtxTagKeys.applicationVersion, application.ver, isString);
setValue(tags, CtxTagKeys.applicationBuild, application.build, isString)
}
};
_self.applyDeviceContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let device = _self.device;
if (device) {
// evt.ext.device
let extDevice = getSetValue(getSetValue(evt, strExt), Extensions.DeviceExt);
setValue(extDevice, "localId", device.id, isString);
setValue(extDevice, "ip", device.ip, isString);
setValue(extDevice, "model", device.model, isString);
setValue(extDevice, "deviceClass", device.deviceClass, isString);
}
};
_self.applyInternalContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let internal = _self.internal;
if (internal) {
let tags = getSetValue(evt, strTags);
setValue(tags, CtxTagKeys.internalAgentVersion, internal.agentVersion, isString); // not mapped in CS 4.0
setValue(tags, CtxTagKeys.internalSdkVersion, internal.sdkVersion, isString);
if (evt.baseType === _InternalLogMessage.dataType || evt.baseType === PageView.dataType) {
setValue(tags, CtxTagKeys.internalSnippet, internal.snippetVer, isString);
setValue(tags, CtxTagKeys.internalSdkSrc, internal.sdkSrc, isString);
}
}
};
_self.applyLocationContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let location = this.location;
if (location) {
setValue(getSetValue(evt, strTags, []), CtxTagKeys.locationIp, location.ip, isString);
}
};
_self.applyOperationContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let telemetryTrace = _self.telemetryTrace;
if (telemetryTrace) {
const extTrace = getSetValue(getSetValue(evt, strExt), Extensions.TraceExt, { traceID: undefined, parentID: undefined } as ITelemetryTrace);
setValue(extTrace, "traceID", telemetryTrace.traceID, isString);
setValue(extTrace, "name", telemetryTrace.name, isString);
setValue(extTrace, "parentID", telemetryTrace.parentID, isString);
}
};
_self.applyWebContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let web = this.web;
if (web) {
setValue(getSetValue(evt, strExt), Extensions.WebExt, web);
}
}
_self.applyUserContext = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let user = _self.user;
if (user) {
let tags = getSetValue(evt, strTags, []);
// stays in tags
setValue(tags, CtxTagKeys.userAccountId, user.accountId, isString);
// CS 4.0
let extUser = getSetValue(getSetValue(evt, strExt), Extensions.UserExt);
setValue(extUser, "id", user.id, isString);
setValue(extUser, "authId", user.authenticatedId, isString);
}
}
_self.cleanUp = (evt:ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
let ext = evt.ext;
if (ext) {
_removeEmpty(ext, Extensions.DeviceExt);
_removeEmpty(ext, Extensions.UserExt);
_removeEmpty(ext, Extensions.WebExt);
_removeEmpty(ext, Extensions.OSExt);
_removeEmpty(ext, Extensions.AppExt);
_removeEmpty(ext, Extensions.TraceExt);
}
}
});
}