/// <summary> /// Execute method to write transaction to the database. /// </summary> public void Execute() { using (var rockContext = new RockContext()) { PageViewService pageViewService = new PageViewService(rockContext); PageViewUserAgentService pageViewUserAgentService = new PageViewUserAgentService(rockContext); PageViewSessionService pageViewSessionService = new PageViewSessionService(rockContext); var userAgent = (this.UserAgent ?? string.Empty).Trim(); if (userAgent.Length > 450) { userAgent = userAgent.Substring(0, 450); // trim super long useragents to fit in pageViewUserAgent.UserAgent } // get user agent info var clientType = PageViewUserAgent.GetClientType(userAgent); Parser uaParser = Parser.GetDefault(); ClientInfo client = uaParser.Parse(userAgent); var clientOs = client.OS.ToString(); var clientBrowser = client.UserAgent.ToString(); // lookup the pageViewUserAgent, and create it if it doesn't exist var pageViewUserAgent = pageViewUserAgentService.Queryable().Where(a => a.UserAgent == userAgent).FirstOrDefault(); if (pageViewUserAgent == null) { pageViewUserAgent = new PageViewUserAgent(); pageViewUserAgent.UserAgent = userAgent; pageViewUserAgent.ClientType = clientType; pageViewUserAgent.OperatingSystem = clientOs; pageViewUserAgent.Browser = clientBrowser; pageViewUserAgentService.Add(pageViewUserAgent); rockContext.SaveChanges(); } else { // check if the user agent properties need to be updated if (clientType != pageViewUserAgent.ClientType || clientOs != pageViewUserAgent.OperatingSystem || clientBrowser != pageViewUserAgent.Browser) { pageViewUserAgent.ClientType = clientType; pageViewUserAgent.OperatingSystem = clientOs; pageViewUserAgent.Browser = clientBrowser; rockContext.SaveChanges(); } } // lookup PageViewSession, and create it if it doesn't exist Guid sessionId = this.SessionId.AsGuid(); int? pageViewSessionId = pageViewSessionService.Queryable().Where(a => a.PageViewUserAgentId == pageViewUserAgent.Id && a.SessionId == sessionId && a.IpAddress == this.IPAddress).Select(a => (int?)a.Id).FirstOrDefault(); if (!pageViewSessionId.HasValue) { var pageViewSession = new PageViewSession(); pageViewSession.PageViewUserAgentId = pageViewUserAgent.Id; pageViewSession.SessionId = sessionId; pageViewSession.IpAddress = this.IPAddress; pageViewSessionService.Add(pageViewSession); rockContext.SaveChanges(); pageViewSessionId = pageViewSession.Id; } PageView pageView = new PageView(); pageViewService.Add(pageView); // obfuscate rock magic token Regex rgx = new Regex(@"rckipid=([^&]*)"); string cleanUrl = rgx.Replace(this.Url, "rckipid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX"); pageView.PageId = this.PageId; pageView.SiteId = this.SiteId; pageView.Url = cleanUrl.Left(500); pageView.DateTimeViewed = this.DateViewed; pageView.PersonAliasId = this.PersonAliasId; pageView.PageTitle = this.PageTitle.Left(500); pageView.PageViewSessionId = pageViewSessionId.Value; rockContext.SaveChanges(); } }
/// <summary> /// Execute method to write transaction to the database. /// </summary> public void Execute() { using ( var rockContext = new RockContext() ) { PageViewService pageViewService = new PageViewService( rockContext ); PageViewUserAgentService pageViewUserAgentService = new PageViewUserAgentService( rockContext ); PageViewSessionService pageViewSessionService = new PageViewSessionService( rockContext ); var userAgent = ( this.UserAgent ?? string.Empty ).Trim(); if ( userAgent.Length > 450 ) { userAgent = userAgent.Substring( 0, 450 ); // trim super long useragents to fit in pageViewUserAgent.UserAgent } // get user agent info var clientType = PageViewUserAgent.GetClientType( userAgent ); Parser uaParser = Parser.GetDefault(); ClientInfo client = uaParser.Parse( userAgent ); var clientOs = client.OS.ToString(); var clientBrowser = client.UserAgent.ToString(); // lookup the pageViewUserAgent, and create it if it doesn't exist var pageViewUserAgent = pageViewUserAgentService.Queryable().Where( a => a.UserAgent == userAgent ).FirstOrDefault(); if ( pageViewUserAgent == null ) { pageViewUserAgent = new PageViewUserAgent(); pageViewUserAgent.UserAgent = userAgent; pageViewUserAgent.ClientType = clientType; pageViewUserAgent.OperatingSystem = clientOs; pageViewUserAgent.Browser = clientBrowser; pageViewUserAgentService.Add( pageViewUserAgent ); rockContext.SaveChanges(); } else { // check if the user agent properties need to be updated if ( clientType != pageViewUserAgent.ClientType || clientOs != pageViewUserAgent.OperatingSystem || clientBrowser != pageViewUserAgent.Browser ) { pageViewUserAgent.ClientType = clientType; pageViewUserAgent.OperatingSystem = clientOs; pageViewUserAgent.Browser = clientBrowser; rockContext.SaveChanges(); } } // lookup PageViewSession, and create it if it doesn't exist Guid sessionId = this.SessionId.AsGuid(); int? pageViewSessionId = pageViewSessionService.Queryable().Where( a => a.PageViewUserAgentId == pageViewUserAgent.Id && a.SessionId == sessionId && a.IpAddress == this.IPAddress ).Select( a => (int?)a.Id ).FirstOrDefault(); if ( !pageViewSessionId.HasValue ) { var pageViewSession = new PageViewSession(); pageViewSession.PageViewUserAgentId = pageViewUserAgent.Id; pageViewSession.SessionId = sessionId; pageViewSession.IpAddress = this.IPAddress; pageViewSessionService.Add( pageViewSession ); rockContext.SaveChanges(); pageViewSessionId = pageViewSession.Id; } PageView pageView = new PageView(); pageViewService.Add( pageView ); // obfuscate rock magic token Regex rgx = new Regex( @"rckipid=([^&]*)" ); string cleanUrl = rgx.Replace( this.Url, "rckipid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX" ); pageView.PageId = this.PageId; pageView.SiteId = this.SiteId; pageView.Url = cleanUrl.Left( 500 ); pageView.DateTimeViewed = this.DateViewed; pageView.PersonAliasId = this.PersonAliasId; pageView.PageTitle = this.PageTitle.Left( 500 ); pageView.PageViewSessionId = pageViewSessionId.Value; rockContext.SaveChanges(); } }