/// <summary> /// Record the SecurityUserActivityHistory record if profiling is enabled /// </summary> /// <param name="isException"></param> /// <param name="additionalInfo"></param> private void RecordHttpProfilingEntry(bool isException = false, String additionalInfo = null) { // //Persist profiling data to the database //Also, dont profile glimpse requests, this is counterproductive and causes a big performance hit // var currentHandlerName = HttpContext.Current.Handler.GetType().ToString(); if (!ApplicationService.Instance.HTTPRequestProfilingEnabled || Request.RawUrl.Contains("/Glimpse.axd") //Visual studio debug browser link, dont log these items || Request.RawUrl.Contains("/__browserLink/") || (currentHandlerName.Equals("System.Web.Optimization.BundleHandler")) ) { //Dont profile in this case return; } // //Add in additional profiler info if it was set in other modules. // var additionalProfilerInfo = DomainHTTPContextService.Instance.ProfilerAdditionalInfo; if (!String.IsNullOrWhiteSpace(additionalProfilerInfo)) { //Init the string if necessary if (String.IsNullOrWhiteSpace(additionalInfo)) { additionalInfo = ""; } additionalInfo += additionalProfilerInfo; } //We already put start time in the context so we can use it to determine how long the //page takes to render, so retrieve it here var requestHandlerExecuteStartTime = DomainHTTPContextService.Instance.RequestHandlerExecuteStartTime.Value; var requestHandlerExecuteEndTime = DateTime.Now; TimeSpan span = requestHandlerExecuteEndTime - requestHandlerExecuteStartTime; int loadTimeMS = (int)span.TotalMilliseconds; var transactionId = DomainHTTPContextService.Instance.RequestTransactionId; var httpMethod = Request.HttpMethod; var url = Request.RawUrl; var referrer = Request.UrlReferrer; var statusCode = Response.StatusCode; var user = DomainSessionService.Instance.CurrentUser; int? securityUserId = DomainSessionService.Instance.CurrentUser.UserIdAsNullableInt; // //Since we dont have an HTTP Context at this point, we cannot use the Domain Application Service to get the IOC Container, //So instead we need to initialize a new one // var iocContainer = new ClientBootstrapper().Run(); using (var repository = iocContainer.GetInstance <IRepository>()) { // //Update the login history record with the last request date, and record the activity that just occurred // if (user != null && user.SecurityUserLoginHistoryId != null) { var loginHistory = repository.GetAll <SecurityUserLoginHistory>() .FirstOrDefault( p => p.SecurityUserLoginHistoryId == user.SecurityUserLoginHistoryId); if (loginHistory != null) { loginHistory.LastRequestDate = DateTime.Now; loginHistory.SessionTimeoutDate = DomainSessionService.Instance.SessionTimeoutDate; loginHistory.LastRequestUrl = url; } } // //Record the SecurityUserActivityHistory record // var securityUserActivityHistory = new SecurityUserActivityHistory() { SecurityUserId = securityUserId, SecurityUserLoginHistoryId = DomainSessionService.Instance.CurrentUser.SecurityUserLoginHistoryId, UserName = DomainSessionService.Instance.CurrentUser.UserName, MachineName = ApplicationService.Instance.MachineName, ApplicationCode = ApplicationService.Instance.ApplicationCode, IPAddress = Request.UserHostAddress, SessionId = DomainSessionService.Instance.SessionId, TransactionId = transactionId, RequestUrl = url, Method = httpMethod, StatusCode = statusCode, LoadTimeMS = loadTimeMS, Referrer = (referrer != null ? referrer.ToString() : null), SecuritySecurableActionId = null, AddtlInfo = additionalInfo }; repository.Add(securityUserActivityHistory); repository.Commit(); } }