Skip to content

Instantly share code, notes, and snippets.

@un4ckn0wl3z
Created August 28, 2023 08:41
Show Gist options
  • Save un4ckn0wl3z/16faf341d7dd70c8a9cd8959ec328653 to your computer and use it in GitHub Desktop.
Save un4ckn0wl3z/16faf341d7dd70c8a9cd8959ec328653 to your computer and use it in GitHub Desktop.
import { Injectable } from "@nestjs/common";
import { TelemetryClient } from "applicationinsights";
import { AvailabilityTelemetry, DependencyTelemetry, EventTelemetry, ExceptionTelemetry, Identified, MetricTelemetry, NodeHttpDependencyTelemetry, NodeHttpRequestTelemetry, PageViewTelemetry, RequestTelemetry, Telemetry, TelemetryType, TraceTelemetry } from "applicationinsights/out/Declarations/Contracts";
const AZURE_APP_INSIGHTS_CONN_STRING = process.env.AZURE_APP_INSIGHTS_CONN_STRING
@Injectable()
export class ApplicationInsightsService {
private _instance: TelemetryClient
constructor(options: any){
const handler: ProxyHandler<any> = {
get: function (obj, prop) {
return typeof obj[prop] !== "function"
? obj[prop]
: function (...args: any[]) {
if(!AZURE_APP_INSIGHTS_CONN_STRING) return
return obj[prop].apply(obj, args);
};
},
};
if(AZURE_APP_INSIGHTS_CONN_STRING){
this._instance = new TelemetryClient(AZURE_APP_INSIGHTS_CONN_STRING)
this._instance.context.tags[this._instance.context.keys.cloudRole] = options.appname
}
return new Proxy(this, handler);
}
track(telemetry: Telemetry, telemetryType: TelemetryType){
this._instance.track(telemetry, telemetryType)
}
trackEvent(telemetry: EventTelemetry){
this._instance.trackEvent(telemetry)
}
trackDependency(telemetry: DependencyTelemetry & Identified){
this._instance.trackDependency(telemetry)
}
trackException(telemetry: ExceptionTelemetry){
this._instance.trackException(telemetry)
}
trackTrace(telemetry: TraceTelemetry){
this._instance.trackTrace(telemetry)
}
trackMetric(telemetry: MetricTelemetry){
this._instance.trackMetric(telemetry)
}
trackRequest(telemetry: RequestTelemetry & Identified){
this._instance.trackRequest(telemetry)
}
trackAvailability(telemetry: AvailabilityTelemetry){
this._instance.trackAvailability(telemetry)
}
trackPageView(telemetry: PageViewTelemetry){
this._instance.trackPageView(telemetry)
}
trackNodeHttpDependency(telemetry: NodeHttpDependencyTelemetry){
this._instance.trackNodeHttpDependency(telemetry)
}
trackNodeHttpRequest(telemetry: NodeHttpRequestTelemetry){
this._instance.trackNodeHttpRequest(telemetry)
}
trackNodeHttpRequestSync(telemetry: NodeHttpRequestTelemetry){
this._instance.trackNodeHttpRequestSync(telemetry)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment