コード例 #1
0
        /// <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();
            }
        }