Exemple #1
0
        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();
            }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
                });
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 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);
 }
Exemple #7
0
        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);
                });
            }
        }
Exemple #8
0
        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);
        }
Exemple #9
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);
         }
     }
Exemple #11
0
        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));
            }
        }
Exemple #12
0
 public int Update(PageVisit m)
 {
     return(db.Update <PageVisit>(m));
 }
Exemple #13
0
 public int Delete(PageVisit m)
 {
     return(db.Delete <PageVisit>(m));
 }
Exemple #14
0
 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);
        }