public static PageVisit RegisterPageVisit(HttpRequest request, AreaType area, int?itemId = null, string searchTerm = null, string linkType = null, PageVisit previous = null) { var repository = DependencyResolver.Current.GetService <IStatsRepository>(); try { var visit = new PageVisit { AreaType = area, ItemId = itemId, SearchTerm = searchTerm, Referer = request.UrlReferrer == null ? "" : request.UrlReferrer.AbsoluteUri, Url = request.Url.AbsoluteUri, LinkType = linkType, PreviousId = previous == null ? null : (int?)previous.Id, UserAgent = request.UserAgent, UserLanguages = request.UserLanguages != null?string.Join("|", request.UserLanguages) : "", BrowserVersion = request.Browser != null ? request.Browser.Version : "", BrowserName = request.Browser != null ? request.Browser.Browser : "", IpAddress = request.ServerVariables["REMOTE_ADDR"], DateTime = DateTime.Now }; return(new PageVisit(repository.InsertPageVisit(visit))); } catch (Exception ex) { Logger.LogException(EventLogType.Error, "TooksCms.ServiceLayer", ex, "RegisterPageVisit", 0); } return(null); }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // do something before the action executes var resultContext = await next(); // do something after the action executes; resultContext.Result will be set var ip = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(); var path = context.HttpContext.Request.Path; var user = await _userManager.GetUser(_signInManager); if (user != null && await _userManager.IsInRoleAsync(user, "Administrator")) { return; } if (!path.HasValue) { return; } var record = new PageVisit { Ip = ip, Path = path.Value, Visited = _calendar.LocalTime(), User = user, BookingId = _cart.GetSessionCartId() }; await _appDbContext.PageVisits.AddAsync(record); await _appDbContext.SaveChangesAsync(); }
public void Upsert_PageVisit_Update_SelectedColumns(TestDbContext.DbDriver driver) { ResetDb(driver); using (var dbContext = new TestDbContext(_dataContexts[driver])) { var newVisit = new PageVisit { UserID = 1, Date = DateTime.Today, Visits = 1, FirstVisit = _now, LastVisit = _now, }; dbContext.Upsert(newVisit) .On(pv => new { pv.UserID, pv.Date }) .UpdateColumns(pv => new PageVisit { Visits = pv.Visits + 1, LastVisit = _now, }) .Run(); var visit = dbContext.PageVisits.Single(pv => pv.UserID == newVisit.UserID && pv.Date == newVisit.Date); Assert.NotNull(visit); Assert.NotEqual(newVisit.Visits, visit.Visits); Assert.Equal(_dbVisit.Visits + 1, visit.Visits); Assert.NotEqual(newVisit.FirstVisit, visit.FirstVisit); Assert.Equal(_dbVisit.FirstVisit, visit.FirstVisit); Assert.Equal(newVisit.LastVisit, visit.LastVisit); } }
public void Upsert_PageVisit_Update_On_WhenMatched_ValueDivide(TestDbContext.DbDriver driver) { ResetDb(driver); using (var dbContext = new TestDbContext(_dataContexts[driver])) { var newVisit = new PageVisit { UserID = 1, Date = DateTime.Today, Visits = 1, FirstVisit = _now, LastVisit = _now, }; dbContext.PageVisits.Upsert(newVisit) .On(pv => new { pv.UserID, pv.Date }) .WhenMatched(pv => new PageVisit { Visits = pv.Visits / 4, LastVisit = _now, }) .Run(); Assert.Collection(dbContext.PageVisits.OrderBy(c => c.ID), visit => AssertEqual(_dbVisitOld, visit), visit => { Assert.Equal(_dbVisit.Visits / 4, visit.Visits); Assert.NotEqual(newVisit.FirstVisit, visit.FirstVisit); Assert.Equal(_dbVisit.FirstVisit, visit.FirstVisit); Assert.Equal(newVisit.LastVisit, visit.LastVisit); }); } }
public override void OnActionExecuted(ActionExecutedContext filterContext) { var url = filterContext.HttpContext.Request.Url.ToString(); var page = _pageVisitRepository.GetPage(url).Result; if (page == null) { var newPage = new PageVisit { Url = url, VisitCount = 1, LastVisitedDate = DateTime.Now }; _pageVisitRepository.Add(newPage); } else { page.VisitCount++; page.LastVisitedDate = DateTime.Now; _pageVisitRepository.Update(page); } base.OnActionExecuted(filterContext); }
private void AssertEqual(PageVisit expected, PageVisit actual) { Assert.Equal(expected.UserID, actual.UserID); Assert.Equal(expected.Date, actual.Date); Assert.Equal(expected.Visits, actual.Visits); Assert.Equal(expected.FirstVisit, actual.FirstVisit); Assert.Equal(expected.LastVisit, actual.LastVisit); }
public void UpsertRange_PageVisit_Update_On_WhenMatched_MultipleUpdate_FromSource(TestDbContext.DbDriver driver) { ResetDb(driver); using (var dbContext = new TestDbContext(_dataContexts[driver])) { var newVisit1 = new PageVisit { UserID = _dbVisitOld.UserID, Date = _dbVisitOld.Date, Visits = 1, FirstVisit = _now, LastVisit = _now, }; var newVisit2 = new PageVisit { UserID = _dbVisit.UserID, Date = _dbVisit.Date, Visits = 1, FirstVisit = _now, LastVisit = _now, }; dbContext.PageVisits.UpsertRange(newVisit1, newVisit2) .On(pv => new { pv.UserID, pv.Date }) .WhenMatched((pv, pvi) => new PageVisit { Visits = pv.Visits + 1, LastVisit = pvi.LastVisit, }) .Run(); Assert.Collection(dbContext.PageVisits.OrderBy(c => c.ID), visit => { Assert.Equal(newVisit1.UserID, visit.UserID); Assert.Equal(newVisit1.Date, visit.Date); Assert.NotEqual(newVisit1.Visits, visit.Visits); Assert.Equal(_dbVisitOld.Visits + 1, visit.Visits); Assert.NotEqual(newVisit1.FirstVisit, visit.FirstVisit); Assert.Equal(_dbVisitOld.FirstVisit, visit.FirstVisit); Assert.Equal(newVisit1.LastVisit, visit.LastVisit); }, visit => { Assert.Equal(newVisit2.UserID, visit.UserID); Assert.Equal(newVisit2.Date, visit.Date); Assert.NotEqual(newVisit2.Visits, visit.Visits); Assert.Equal(_dbVisit.Visits + 1, visit.Visits); Assert.NotEqual(newVisit2.FirstVisit, visit.FirstVisit); Assert.Equal(_dbVisit.FirstVisit, visit.FirstVisit); Assert.Equal(newVisit2.LastVisit, visit.LastVisit); }); } }
public int insert(PageVisitDetail pd) { pd.VDetailID = dv.GetMaxDetailID() + 1; pd.VTime = DateTime.Now; PageVisit pv = dv.GetPageVisitsByPageName(pd.PageName); if (pv != null) { //获取当前页面的VisitID pd.VisitID = pv.VisitID; // 清除pd中的aspxname pd.PageName = null; if (dv.InsertDetail(pd) == 1) { if (pv.Hits == null) { pv.Hits = 0; } pv.Hits++; return(dv.Update(pv)); } } else { PageVisit pvnew = new PageVisit(); pvnew.VisitID = dv.GetMaxID() + 1; pvnew.Hits = 0; pvnew.PageName = pd.PageName; if (dv.Insert(pvnew) == 1) { //获取当前页面的VisitID pd.VisitID = pvnew.VisitID; // 清除pd中的aspxname pd.PageName = null; if (dv.InsertDetail(pd) == 1) { if (pvnew.Hits == null) { pvnew.Hits = 0; } pvnew.Hits++; return(dv.Update(pvnew)); } } } return(0); }
/// <summary> /// Call this function to start recording a visit. /// </summary> public static PageVisit RecordVisit(string pageurl, string useragent, string IP, string referer, long memberid, Guid vid) { //Get location information from visitors IP address IPLocation ipl = null; try { WebRequest request = WebRequest.Create("https://www.rudrasofttech.com/handlers/tools/IpLocator.ashx?ip=" + IP); request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); ipl = new JavaScriptSerializer().Deserialize <IPLocation>(reader.ReadToEnd()); } catch (Exception ex) { ipl = new IPLocation(); HttpContext.Current.Trace.Write(ex.Message); HttpContext.Current.Trace.Write(ex.StackTrace); } //New Create new visit. PageVisit vinfo = new PageVisit() { CreateDate = DateTime.UtcNow, LastHeartBeat = DateTime.UtcNow, VisitID = vid == Guid.Empty ? Guid.NewGuid() : vid, PageURL = pageurl, MemberID = memberid, UserAgent = useragent, URLReferer = referer, Country = ipl.countryCode, IPAddress = IP }; using (RockyingDataClassesDataContext dc = new RockyingDataClassesDataContext()) { dc.PageVisits.InsertOnSubmit(vinfo); dc.SubmitChanges(); } return(vinfo); }
public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); PageVisit page = new PageVisit(); var repository = new PageVisitRepository(); var pageUrl = filterContext.HttpContext.Request.Url; var page = repository.GetPageByUrl(pageUrl); if(page == null) { page = new PageVisit { PageUrl = pageUrl, Visits = 1 }; repository.Save(page); } else { page.Visits++; repository.Update(page); } }
public void UpsertRange_PageVisit_Update_On_WhenMatched_MultipleInsert(TestDbContext.DbDriver driver) { ResetDb(driver); using (var dbContext = new TestDbContext(_dataContexts[driver])) { var newVisit1 = new PageVisit { UserID = _dbVisit.UserID, Date = _dbVisit.Date.AddDays(1), Visits = 5, FirstVisit = _now, LastVisit = _now, }; var newVisit2 = new PageVisit { UserID = _dbVisit.UserID, Date = newVisit1.Date.AddDays(2), Visits = newVisit1.Visits + 1, FirstVisit = newVisit1.FirstVisit.AddDays(1), LastVisit = newVisit1.LastVisit.AddDays(1), }; dbContext.PageVisits.UpsertRange(newVisit1, newVisit2) .On(pv => new { pv.UserID, pv.Date }) .WhenMatched(pv => new PageVisit { Visits = pv.Visits + 1, LastVisit = _now, }) .Run(); Assert.Collection(dbContext.PageVisits.OrderBy(c => c.ID), visit => AssertEqual(_dbVisitOld, visit), visit => AssertEqual(_dbVisit, visit), visit => AssertEqual(newVisit1, visit), visit => AssertEqual(newVisit2, visit)); } }
public int Update(PageVisit m) { return(db.Update <PageVisit>(m)); }
public int Delete(PageVisit m) { return(db.Delete <PageVisit>(m)); }
public int Insert(PageVisit m) { return(db.Insert <PageVisit>(m)); }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; bool isSaveSuccess = true; try { string json = context.Request["jsonData"].ToString(); string s = "\\\""; string t = "#()#"; json = json.Replace(s, t); UserBehaviorDataContext userBehaviorDataContext = new UserBehaviorDataContext(); UserBehaviorEntity userBehavior = new UserBehaviorEntity(); userBehavior = JsonConvert.DeserializeObject<UserBehaviorEntity>(json); UserVisit users = userBehaviorDataContext.UserVisits.SingleOrDefault(u => u.UserIdentity == userBehavior.UserVisit.UserIdentity); if (users == null) { UserVisit userVisitTable = new UserVisit { UserIdentity = userBehavior.UserVisit.UserIdentity, browser = userBehavior.UserVisit.Browser, os = userBehavior.UserVisit.OS, ip = context.Request.ServerVariables["REMOTE_ADDR"] }; userBehaviorDataContext.UserVisits.InsertOnSubmit(userVisitTable); } foreach (PageVisitEntity pageVisitEntity in userBehavior.PageVisit) { PageVisit page = userBehaviorDataContext.PageVisits.SingleOrDefault(p => (p.UserIdentity == userBehavior.UserVisit.UserIdentity && p.PagePath.ToLower() == pageVisitEntity.PagePath.ToLower())); //insert when don't find the same page with the same user //otherwise update page actions if (page == null) { string actionArryStr = JsonConvert.SerializeObject(pageVisitEntity.Actions).ToString(); PageVisit pageVistTable = new PageVisit { PageIdentity = Guid.NewGuid(), UserIdentity = userBehavior.UserVisit.UserIdentity, PagePath = pageVisitEntity.PagePath, StartAccess = pageVisitEntity.StartAccess, LastActiveTime = pageVisitEntity.LastActiveTime, Actions = actionArryStr }; userBehaviorDataContext.PageVisits.InsertOnSubmit(pageVistTable); } else { List<ActionEntity> actionOldArray = null; try { actionOldArray = (!string.IsNullOrEmpty(page.Actions)) ? (List<ActionEntity>)JsonConvert.DeserializeObject<List<ActionEntity>>(page.Actions) : (List<ActionEntity>)JsonConvert.DeserializeObject<List<ActionEntity>>("[]"); } catch { actionOldArray = (List<ActionEntity>)JsonConvert.DeserializeObject<List<ActionEntity>>("[]"); } actionOldArray.AddRange(pageVisitEntity.Actions); page.LastActiveTime = pageVisitEntity.LastActiveTime; page.Actions = JsonConvert.SerializeObject(actionOldArray).ToString(); } } userBehaviorDataContext.SubmitChanges(); } catch { isSaveSuccess = false; } context.Response.Write(isSaveSuccess); }