{"id":13808175,"url":"https://github.com/IvanJosipovic/BlazorApplicationInsights","last_synced_at":"2025-05-14T02:31:22.785Z","repository":{"id":41885284,"uuid":"279486395","full_name":"IvanJosipovic/BlazorApplicationInsights","owner":"IvanJosipovic","description":"Application Insights for Blazor web applications","archived":false,"fork":false,"pushed_at":"2024-05-22T17:15:54.000Z","size":705,"stargazers_count":171,"open_issues_count":13,"forks_count":25,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-05-22T18:33:18.342Z","etag":null,"topics":["application-insights","blazor"],"latest_commit_sha":null,"homepage":"https://BlazorApplicationInsights.netlify.app","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IvanJosipovic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"IvanJosipovic","custom":"https://www.paypal.com/donate/?business=3HSZ54XS9BLAQ\u0026currency_code=CAD\u0026item_name=BlazorApplicationInsights"}},"created_at":"2020-07-14T04:58:07.000Z","updated_at":"2024-05-22T18:33:28.916Z","dependencies_parsed_at":"2024-04-09T20:27:34.873Z","dependency_job_id":"548c126d-cb74-4db8-a409-415235820109","html_url":"https://github.com/IvanJosipovic/BlazorApplicationInsights","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanJosipovic%2FBlazorApplicationInsights","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanJosipovic%2FBlazorApplicationInsights/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanJosipovic%2FBlazorApplicationInsights/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanJosipovic%2FBlazorApplicationInsights/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IvanJosipovic","download_url":"https://codeload.github.com/IvanJosipovic/BlazorApplicationInsights/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225273224,"owners_count":17448071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application-insights","blazor"],"created_at":"2024-08-04T01:01:36.716Z","updated_at":"2024-11-19T00:30:36.448Z","avatar_url":"https://github.com/IvanJosipovic.png","language":"C#","funding_links":["https://github.com/sponsors/IvanJosipovic","https://www.paypal.com/donate/?business=3HSZ54XS9BLAQ\u0026currency_code=CAD\u0026item_name=BlazorApplicationInsights"],"categories":["others","Libraries \u0026 Extensions"],"sub_categories":["Tools \u0026 Utilities"],"readme":"[![Demo](https://img.shields.io/badge/Live-Demo-Blue?style=flat-square)](https://BlazorApplicationInsights.netlify.app/)\n[![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/BlazorApplicationInsights.svg?style=flat-square)](https://www.nuget.org/packages/BlazorApplicationInsights)\n[![Nuget (with prereleases)](https://img.shields.io/nuget/dt/BlazorApplicationInsights.svg?style=flat-square)](https://www.nuget.org/packages/BlazorApplicationInsights)\n![](https://github.com/IvanJosipovic/BlazorApplicationInsights/workflows/Create%20Release/badge.svg)\n\nApplication Insights for Blazor web applications\n\n[Sample Projects](https://github.com/IvanJosipovic/BlazorApplicationInsights/tree/master/samples)\n\n## Features\n\n- .NET 6/7/8 and Blazor Web App Support\n- Automatically triggers Track Page View on route changes\n- ILoggerProvider which sends all the logs to App Insights (Wasm only)\n- Programmatically update settings, including the Connection String\n- Supported [APIs](https://github.com/microsoft/ApplicationInsights-JS/blob/master/API-reference.md)\n  - AddTelemetryInitializer\n  - ClearAuthenticatedUserContext\n  - Context\n  - Flush\n  - GetCookieMgr\n  - SetAuthenticatedUserContext\n  - StartTrackEvent\n  - StartTrackPage\n  - StopTrackEvent\n  - StopTrackPage\n  - TrackDependencyData\n  - TrackEvent\n  - TrackException\n  - TrackMetric\n  - TrackPageView\n  - TrackPageViewPerformance\n  - TrackTrace\n  - UpdateCfg\n\n## Install on Blazor Web App\n\n- Add [BlazorApplicationInsights NuGet](https://www.nuget.org/packages/BlazorApplicationInsights) to the Client project\n  - ```dotnet add package BlazorApplicationInsights```\n- Add call to Program.cs in the root and Client project if one exists\n\n  ```csharp\n  builder.Services.AddBlazorApplicationInsights(x =\u003e\n  {\n      x.ConnectionString = \"{Insert Connection String}\";\n  });\n  ```\n\n- Add using statement to _Imports.razor\n  - ```@using BlazorApplicationInsights;```\n- Add component below \\\u003cbase href=\"/\" /\u003e in App.razor\n  - **NOTE:** Interactivity is necessary only when the optional onAppInsightsInit callback is configured as part of the AddBlazorApplicationInsights setup.\n  - ```\u003cApplicationInsightsInit @rendermode=\"@InteractiveAuto\" /\u003e```\n\n  ```html\n  \u003c!DOCTYPE html\u003e\n  \u003chtml lang=\"en\"\u003e\n\n  \u003chead\u003e\n      \u003cmeta charset=\"utf-8\" /\u003e\n      \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" /\u003e\n      \u003cbase href=\"/\" /\u003e\n      \u003cApplicationInsightsInit @rendermode=\"@InteractiveAuto\" /\u003e\n      \u003clink rel=\"stylesheet\" href=\"bootstrap/bootstrap.min.css\" /\u003e\n      \u003clink rel=\"stylesheet\" href=\"app.css\" /\u003e\n      \u003clink rel=\"stylesheet\" href=\"BlazorApplicationInsights.WebApp.Sample.styles.css\" /\u003e\n      \u003clink rel=\"icon\" type=\"image/png\" href=\"favicon.png\" /\u003e\n      \u003cHeadOutlet @rendermode=\"@RenderMode.InteractiveAuto\" /\u003e\n  \u003c/head\u003e\n  ```\n\n## Install on Blazor WebAssembly Standalone App\n\n- Add [BlazorApplicationInsights NuGet](https://www.nuget.org/packages/BlazorApplicationInsights) to the Client project\n  - ```dotnet add package BlazorApplicationInsights```\n- Add call to Program.cs and set the ConnectionString\n\n  ```csharp\n  builder.Services.AddBlazorApplicationInsights(config =\u003e\n  {\n      config.ConnectionString = \"{Insert Connection String}\";\n  });\n  ```\n\n- Add using statement to _Imports.razor\n  - ```@using BlazorApplicationInsights;```\n- Add component to the top of App.razor\n  - ```\u003cApplicationInsightsInit IsWasmStandalone=\"true\" /\u003e```\n- Add Application Insights JS to head below \\\u003cbase href=\"/\" /\u003e in index.html\n  - **Note:** Leave InstrumentationKey zero'd out and DisableTelemetry as true, they will be updated by Blazor on startup\n  ```html\n  \u003cscript type=\"text/javascript\"\u003e\n    !(function (cfg){function e(){cfg.onInit\u0026\u0026cfg.onInit(i)}var S,u,D,t,n,i,C=window,x=document,w=C.location,I=\"script\",b=\"ingestionendpoint\",E=\"disableExceptionTracking\",A=\"ai.device.\";\"instrumentationKey\"[S=\"toLowerCase\"](),u=\"crossOrigin\",D=\"POST\",t=\"appInsightsSDK\",n=cfg.name||\"appInsights\",(cfg.name||C[t])\u0026\u0026(C[t]=n),i=C[n]||function(l){var d=!1,g=!1,f={initialize:!0,queue:[],sv:\"7\",version:2,config:l};function m(e,t){var n={},i=\"Browser\";function a(e){e=\"\"+e;return 1===e.length?\"0\"+e:e}return n[A+\"id\"]=i[S](),n[A+\"type\"]=i,n[\"ai.operation.name\"]=w\u0026\u0026w.pathname||\"_unknown_\",n[\"ai.internal.sdkVersion\"]=\"javascript:snippet_\"+(f.sv||f.version),{time:(i=new Date).getUTCFullYear()+\"-\"+a(1+i.getUTCMonth())+\"-\"+a(i.getUTCDate())+\"T\"+a(i.getUTCHours())+\":\"+a(i.getUTCMinutes())+\":\"+a(i.getUTCSeconds())+\".\"+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+\"Z\",iKey:e,name:\"Microsoft.ApplicationInsights.\"+e.replace(/-/g,\"\")+\".\"+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:4,seq:\"1\",aiDataContract:undefined}}var h=-1,v=0,y=[\"js.monitor.azure.com\",\"js.cdn.applicationinsights.io\",\"js.cdn.monitor.azure.com\",\"js0.cdn.applicationinsights.io\",\"js0.cdn.monitor.azure.com\",\"js2.cdn.applicationinsights.io\",\"js2.cdn.monitor.azure.com\",\"az416426.vo.msecnd.net\"],k=l.url||cfg.src;if(k){if((n=navigator)\u0026\u0026(~(n=(n.userAgent||\"\").toLowerCase()).indexOf(\"msie\")||~n.indexOf(\"trident/\"))\u0026\u0026~k.indexOf(\"ai.3\")\u0026\u0026(k=k.replace(/(\\/)(ai\\.3\\.)([^\\d]*)$/,function(e,t,n){return t+\"ai.2\"+n})),!1!==cfg.cr)for(var e=0;e\u003cy.length;e++)if(0\u003ck.indexOf(y[e])){h=e;break}var i=function(e){var a,t,n,i,o,r,s,c,p,u;f.queue=[],g||(0\u003c=h\u0026\u0026v+1\u003cy.length?(a=(h+v+1)%y.length,T(k.replace(/^(.*\\/\\/)([\\w\\.]*)(\\/.*)$/,function(e,t,n,i){return t+y[a]+i})),v+=1):(d=g=!0,o=k,c=(p=function(){var e,t={},n=l.connectionString;if(n)for(var i=n.split(\";\"),a=0;a\u003ci.length;a++){var o=i[a].split(\"=\");2===o.length\u0026\u0026(t[o[0][S]()]=o[1])}return t[b]||(e=(n=t.endpointsuffix)?t.location:null,t[b]=\"https://\"+(e?e+\".\":\"\")+\"dc.\"+(n||\"services.visualstudio.com\")),t}()).instrumentationkey||l.instrumentationKey||\"\",p=(p=p[b])?p+\"/v2/track\":l.endpointUrl,(u=[]).push((t=\"SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)\",n=o,r=p,(s=(i=m(c,\"Exception\")).data).baseType=\"ExceptionData\",s.baseData.exceptions=[{typeName:\"SDKLoadFailed\",message:t.replace(/\\./g,\"-\"),hasFullStack:!1,stack:t+\"\\nSnippet failed to load [\"+n+\"] -- Telemetry is disabled\\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\\nHost: \"+(w\u0026\u0026w.pathname||\"_unknown_\")+\"\\nEndpoint: \"+r,parsedStack:[]}],i)),u.push((s=o,t=p,(r=(n=m(c,\"Message\")).data).baseType=\"MessageData\",(i=r.baseData).message='AI (Internal): 99 message:\"'+(\"SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) (\"+s+\")\").replace(/\\\"/g,\"\")+'\"',i.properties={endpoint:t},n)),o=u,c=p,JSON\u0026\u0026((r=C.fetch)\u0026\u0026!cfg.useXhr?r(c,{method:D,body:JSON.stringify(o),mode:\"cors\"}):XMLHttpRequest\u0026\u0026((s=new XMLHttpRequest).open(D,c),s.setRequestHeader(\"Content-type\",\"application/json\"),s.send(JSON.stringify(o))))))},a=function(e,t){g||setTimeout(function(){!t\u0026\u0026f.core||i()},500),d=!1},T=function(e){var n=x.createElement(I),e=(n.src=e,cfg[u]);return!e\u0026\u0026\"\"!==e||\"undefined\"==n[u]||(n[u]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){\"loaded\"!==n.readyState\u0026\u0026\"complete\"!==n.readyState||a(0,t)},cfg.ld\u0026\u0026cfg.ld\u003c0?x.getElementsByTagName(\"head\")[0].appendChild(n):setTimeout(function(){x.getElementsByTagName(I)[0].parentNode.appendChild(n)},cfg.ld||0),n};T(k)}try{f.cookie=x.cookie}catch(p){}function t(e){for(;e.length;)!function(t){f[t]=function(){var e=arguments;d||f.queue.push(function(){f[t].apply(f,e)})}}(e.pop())}var r,s,n=\"track\",o=\"TrackPage\",c=\"TrackEvent\",n=(t([n+\"Event\",n+\"PageView\",n+\"Exception\",n+\"Trace\",n+\"DependencyData\",n+\"Metric\",n+\"PageViewPerformance\",\"start\"+o,\"stop\"+o,\"start\"+c,\"stop\"+c,\"addTelemetryInitializer\",\"setAuthenticatedUserContext\",\"clearAuthenticatedUserContext\",\"flush\"]),f.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(l.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==l[E]\u0026\u0026!0!==n[E]\u0026\u0026(t([\"_\"+(r=\"onerror\")]),s=C[r],C[r]=function(e,t,n,i,a){var o=s\u0026\u0026s(e,t,n,i,a);return!0!==o\u0026\u0026f[\"_\"+r]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},l.autoExceptionInstrumented=!0),f}(cfg.cfg),(C[n]=i).queue\u0026\u00260===i.queue.length?(i.queue.push(e),i.trackPageView({})):e();})({\n        src: \"https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js\",\n        ld: -1,\n        crossOrigin: \"anonymous\",\n        cfg: {\n            instrumentationKey: \"00000000-0000-0000-0000-000000000000\",\n            disableTelemetry: true\n        }\n    });\n  \u003c/script\u003e\n  ```\n\n## Install on Blazor WebAssembly Standalone App - Manual\n\n- Add [BlazorApplicationInsights NuGet](https://www.nuget.org/packages/BlazorApplicationInsights) to the Client project\n  - ```dotnet add package BlazorApplicationInsights```\n- Add call to Program.cs\n\n  ```csharp\n  builder.Services.AddBlazorApplicationInsights();\n  ```\n\n- Add using statement to _Imports.razor\n  - ```@using BlazorApplicationInsights;```\n- Add component to the top of App.razor\n  - ```\u003cApplicationInsightsInit IsWasmStandalone=\"true\" /\u003e```\n- Add Application Insights JS to head below \\\u003cbase href=\"/\" /\u003e in index.html\n  - **Note:** Set all required configuration in the cfg section\n  ```html\n  \u003cscript type=\"text/javascript\"\u003e\n    !(function (cfg){function e(){cfg.onInit\u0026\u0026cfg.onInit(i)}var S,u,D,t,n,i,C=window,x=document,w=C.location,I=\"script\",b=\"ingestionendpoint\",E=\"disableExceptionTracking\",A=\"ai.device.\";\"instrumentationKey\"[S=\"toLowerCase\"](),u=\"crossOrigin\",D=\"POST\",t=\"appInsightsSDK\",n=cfg.name||\"appInsights\",(cfg.name||C[t])\u0026\u0026(C[t]=n),i=C[n]||function(l){var d=!1,g=!1,f={initialize:!0,queue:[],sv:\"7\",version:2,config:l};function m(e,t){var n={},i=\"Browser\";function a(e){e=\"\"+e;return 1===e.length?\"0\"+e:e}return n[A+\"id\"]=i[S](),n[A+\"type\"]=i,n[\"ai.operation.name\"]=w\u0026\u0026w.pathname||\"_unknown_\",n[\"ai.internal.sdkVersion\"]=\"javascript:snippet_\"+(f.sv||f.version),{time:(i=new Date).getUTCFullYear()+\"-\"+a(1+i.getUTCMonth())+\"-\"+a(i.getUTCDate())+\"T\"+a(i.getUTCHours())+\":\"+a(i.getUTCMinutes())+\":\"+a(i.getUTCSeconds())+\".\"+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+\"Z\",iKey:e,name:\"Microsoft.ApplicationInsights.\"+e.replace(/-/g,\"\")+\".\"+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:4,seq:\"1\",aiDataContract:undefined}}var h=-1,v=0,y=[\"js.monitor.azure.com\",\"js.cdn.applicationinsights.io\",\"js.cdn.monitor.azure.com\",\"js0.cdn.applicationinsights.io\",\"js0.cdn.monitor.azure.com\",\"js2.cdn.applicationinsights.io\",\"js2.cdn.monitor.azure.com\",\"az416426.vo.msecnd.net\"],k=l.url||cfg.src;if(k){if((n=navigator)\u0026\u0026(~(n=(n.userAgent||\"\").toLowerCase()).indexOf(\"msie\")||~n.indexOf(\"trident/\"))\u0026\u0026~k.indexOf(\"ai.3\")\u0026\u0026(k=k.replace(/(\\/)(ai\\.3\\.)([^\\d]*)$/,function(e,t,n){return t+\"ai.2\"+n})),!1!==cfg.cr)for(var e=0;e\u003cy.length;e++)if(0\u003ck.indexOf(y[e])){h=e;break}var i=function(e){var a,t,n,i,o,r,s,c,p,u;f.queue=[],g||(0\u003c=h\u0026\u0026v+1\u003cy.length?(a=(h+v+1)%y.length,T(k.replace(/^(.*\\/\\/)([\\w\\.]*)(\\/.*)$/,function(e,t,n,i){return t+y[a]+i})),v+=1):(d=g=!0,o=k,c=(p=function(){var e,t={},n=l.connectionString;if(n)for(var i=n.split(\";\"),a=0;a\u003ci.length;a++){var o=i[a].split(\"=\");2===o.length\u0026\u0026(t[o[0][S]()]=o[1])}return t[b]||(e=(n=t.endpointsuffix)?t.location:null,t[b]=\"https://\"+(e?e+\".\":\"\")+\"dc.\"+(n||\"services.visualstudio.com\")),t}()).instrumentationkey||l.instrumentationKey||\"\",p=(p=p[b])?p+\"/v2/track\":l.endpointUrl,(u=[]).push((t=\"SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)\",n=o,r=p,(s=(i=m(c,\"Exception\")).data).baseType=\"ExceptionData\",s.baseData.exceptions=[{typeName:\"SDKLoadFailed\",message:t.replace(/\\./g,\"-\"),hasFullStack:!1,stack:t+\"\\nSnippet failed to load [\"+n+\"] -- Telemetry is disabled\\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\\nHost: \"+(w\u0026\u0026w.pathname||\"_unknown_\")+\"\\nEndpoint: \"+r,parsedStack:[]}],i)),u.push((s=o,t=p,(r=(n=m(c,\"Message\")).data).baseType=\"MessageData\",(i=r.baseData).message='AI (Internal): 99 message:\"'+(\"SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) (\"+s+\")\").replace(/\\\"/g,\"\")+'\"',i.properties={endpoint:t},n)),o=u,c=p,JSON\u0026\u0026((r=C.fetch)\u0026\u0026!cfg.useXhr?r(c,{method:D,body:JSON.stringify(o),mode:\"cors\"}):XMLHttpRequest\u0026\u0026((s=new XMLHttpRequest).open(D,c),s.setRequestHeader(\"Content-type\",\"application/json\"),s.send(JSON.stringify(o))))))},a=function(e,t){g||setTimeout(function(){!t\u0026\u0026f.core||i()},500),d=!1},T=function(e){var n=x.createElement(I),e=(n.src=e,cfg[u]);return!e\u0026\u0026\"\"!==e||\"undefined\"==n[u]||(n[u]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){\"loaded\"!==n.readyState\u0026\u0026\"complete\"!==n.readyState||a(0,t)},cfg.ld\u0026\u0026cfg.ld\u003c0?x.getElementsByTagName(\"head\")[0].appendChild(n):setTimeout(function(){x.getElementsByTagName(I)[0].parentNode.appendChild(n)},cfg.ld||0),n};T(k)}try{f.cookie=x.cookie}catch(p){}function t(e){for(;e.length;)!function(t){f[t]=function(){var e=arguments;d||f.queue.push(function(){f[t].apply(f,e)})}}(e.pop())}var r,s,n=\"track\",o=\"TrackPage\",c=\"TrackEvent\",n=(t([n+\"Event\",n+\"PageView\",n+\"Exception\",n+\"Trace\",n+\"DependencyData\",n+\"Metric\",n+\"PageViewPerformance\",\"start\"+o,\"stop\"+o,\"start\"+c,\"stop\"+c,\"addTelemetryInitializer\",\"setAuthenticatedUserContext\",\"clearAuthenticatedUserContext\",\"flush\"]),f.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(l.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==l[E]\u0026\u0026!0!==n[E]\u0026\u0026(t([\"_\"+(r=\"onerror\")]),s=C[r],C[r]=function(e,t,n,i,a){var o=s\u0026\u0026s(e,t,n,i,a);return!0!==o\u0026\u0026f[\"_\"+r]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},l.autoExceptionInstrumented=!0),f}(cfg.cfg),(C[n]=i).queue\u0026\u00260===i.queue.length?(i.queue.push(e),i.trackPageView({})):e();})({\n        src: \"https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js\",\n        ld: -1,\n        crossOrigin: \"anonymous\",\n        cfg: {\n            connectionString: \"{Insert Connection String}\",\n            enableAutoRouteTracking: true\n        }\n    });\n  \u003c/script\u003e\n  ```\n\n## TrackEvent\n\n```razor\n@page \"/\"\n\n\u003cbutton class=\"btn btn-primary\" @onclick=\"TrackEvent\"\u003eTrack Event\u003c/button\u003e\n\n@code {\n    [Inject] private IApplicationInsights AppInsights { get; set; }\n\n    private async Task TrackEvent()\n    {\n        await AppInsights.TrackEvent(new EventTelemetry() { Name = \"My Event\" });\n    }\n}\n```\n\n## Set User Name\n- Edit Authentication.razor\n```razor\n@page \"/authentication/{action}\"\n\n\u003cRemoteAuthenticatorView Action=\"@Action\" OnLogInSucceeded=\"OnLogInSucceeded\" OnLogOutSucceeded=\"OnLogOutSucceeded\" /\u003e\n\n@code{\n    [Parameter] public string Action { get; set; }\n\n    [CascadingParameter] public Task\u003cAuthenticationState\u003e AuthenticationState { get; set; }\n\n    [Inject] private IApplicationInsights AppInsights { get; set; }\n\n    public async Task OnLogInSucceeded()\n    {\n        var user = (await AuthenticationState).User;\n\n        await AppInsights.SetAuthenticatedUserContext(user.FindFirst(\"preferred_username\")?.Value);\n    }\n\n    public async Task OnLogOutSucceeded()\n    {\n        await AppInsights.ClearAuthenticatedUserContext();\n    }\n}\n```\n\n## Set Role and Instance\n- Edit Program.cs\n```csharp\npublic static async Task Main(string[] args)\n{\n    var builder = WebAssemblyHostBuilder.CreateDefault(args);\n    builder.RootComponents.Add\u003cApp\u003e(\"app\");\n\n    builder.Services.AddTransient(sp =\u003e new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });\n\n    builder.Services.AddBlazorApplicationInsights(config =\u003e\n    {\n        config.ConnectionString = \"{Insert Connection String}\";\n    },\n    async applicationInsights =\u003e\n    {\n        var telemetryItem = new TelemetryItem()\n        {\n            Tags = new Dictionary\u003cstring, object?\u003e()\n            {\n                { \"ai.cloud.role\", \"SPA\" },\n                { \"ai.cloud.roleInstance\", \"Blazor Wasm\" },\n            }\n        };\n\n        await applicationInsights.AddTelemetryInitializer(telemetryItem);\n    });\n\n    await builder.Build().RunAsync();\n}\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIvanJosipovic%2FBlazorApplicationInsights","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIvanJosipovic%2FBlazorApplicationInsights","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIvanJosipovic%2FBlazorApplicationInsights/lists"}