Пример #1
0
    private void Track(HttpRequest request, HttpResponse response)
    {
        // new/returning users daily
        Nullable <DateTime> lastVisit = GetLastVisit(request, sSnCoreLastVisit);

        if ((!lastVisit.HasValue) || (lastVisit.Value.AddDays(1) < DateTime.UtcNow))
        {
            // cookie doesn't exist or exists with an invalid value
            // cookie older than a day
            HttpCookie lastVisitCookie = new HttpCookie(sSnCoreLastVisit, DateTime.UtcNow.ToString());
            lastVisitCookie.Expires = DateTime.UtcNow.AddYears(1);
            response.Cookies.Add(lastVisitCookie);
        }

        // unique users monthly
        Nullable <DateTime> lastMonthVisit = GetLastVisit(request, sSnCoreLastMonthVisit);

        if (!lastMonthVisit.HasValue)
        {
            // cookie doesn't exist, it has expired within the month
            HttpCookie lastMonthVisitCookie = new HttpCookie(sSnCoreLastMonthVisit, DateTime.UtcNow.ToString());
            DateTime   nextmonth            = DateTime.UtcNow.AddMonths(1);
            lastMonthVisitCookie.Expires = new DateTime(nextmonth.Year, nextmonth.Month, 1);
            response.Cookies.Add(lastMonthVisitCookie);
        }

        TransitStatsRequest tsr = new TransitStatsRequest(request, lastVisit, lastMonthVisit);

        lock (s_Requests)
        {
            s_Requests.Add(tsr);
        }

        if (s_RequestsLastCommit.Add(s_RequestCommitInterval) >= tsr.Timestamp)
        {
            return;
        }

        // commit tracked requests
        lock (s_Requests)
        {
            if (s_RequestsLastCommit.Add(s_RequestCommitInterval) < tsr.Timestamp)
            {
                try
                {
                    StatsService.TrackMultipleRequests(s_Requests.ToArray());
                }
                catch (Exception ex)
                {
                    EventLogManager.WriteEntry(string.Format("Error tracking multiple requests.\n{0}", ex.Message),
                                               EventLogEntryType.Warning);
                }
                finally
                {
                    s_Requests.Clear();
                    s_RequestsLastCommit = tsr.Timestamp;
                }
            }
        }
    }
Пример #2
0
        public void TrackMultipleRequests(TransitStatsRequest[] requests)
        {
            using (SnCore.Data.Hibernate.Session.OpenConnection())
            {
                ISession session = SnCore.Data.Hibernate.Session.Current;

                ManagedStats stats = new ManagedStats(session);
                foreach (TransitStatsRequest request in requests)
                {
                    try
                    {
                        stats.Track(request);
                        SnCore.Data.Hibernate.Session.Flush();
                    }
                    catch (Exception ex)
                    {
                        EventLogManager.WriteEntry(string.Format("Error tracking {0} from {1}.\n{2}",
                            (request.RequestUri != null) ? request.RequestUri.ToString() : "an unknown url",
                            (request.RefererUri != null) ? request.RefererUri.ToString() : "an unknown referer",
                            ex.Message),
                            EventLogEntryType.Warning);
                    }
                }
            }
        }
Пример #3
0
 public void TestTrack()
 {
     ManagedStats stats = new ManagedStats(Session);
     TransitStatsSummary summary1 = stats.GetSummary();
     string uri = string.Format("http://localhost/uri/{0}", Guid.NewGuid());
     string query = string.Format("q={0}", Guid.NewGuid());
     HttpRequest request = new HttpRequest(null, uri, query);
     TransitStatsRequest statsrequest = new TransitStatsRequest(request, null, null);
     stats.Track(statsrequest);
     TransitStatsSummary summary2 = stats.GetSummary();
     Assert.AreEqual(summary1.TotalHits + 1, summary2.TotalHits);
     Assert.AreEqual(summary1.Yearly[summary1.Yearly.Count - 1].Total + 1, summary2.Yearly[summary2.Yearly.Count - 1].Total);
     Assert.AreEqual(summary1.Monthly[summary1.Monthly.Count - 1].Total + 1, summary2.Monthly[summary2.Monthly.Count - 1].Total);
     Assert.AreEqual(summary1.Weekly[summary1.Weekly.Count - 1].Total + 1, summary2.Weekly[summary2.Weekly.Count - 1].Total);
     Assert.AreEqual(summary1.Daily[summary1.Daily.Count - 1].Total + 1, summary2.Daily[summary2.Daily.Count - 1].Total);
 }
Пример #4
0
        public void TestTrack()
        {
            ManagedStats        stats        = new ManagedStats(Session);
            TransitStatsSummary summary1     = stats.GetSummary();
            string              uri          = string.Format("http://localhost/uri/{0}", Guid.NewGuid());
            string              query        = string.Format("q={0}", Guid.NewGuid());
            HttpRequest         request      = new HttpRequest(null, uri, query);
            TransitStatsRequest statsrequest = new TransitStatsRequest(request, null, null);

            stats.Track(statsrequest);
            TransitStatsSummary summary2 = stats.GetSummary();

            Assert.AreEqual(summary1.TotalHits + 1, summary2.TotalHits);
            Assert.AreEqual(summary1.Yearly[summary1.Yearly.Count - 1].Total + 1, summary2.Yearly[summary2.Yearly.Count - 1].Total);
            Assert.AreEqual(summary1.Monthly[summary1.Monthly.Count - 1].Total + 1, summary2.Monthly[summary2.Monthly.Count - 1].Total);
            Assert.AreEqual(summary1.Weekly[summary1.Weekly.Count - 1].Total + 1, summary2.Weekly[summary2.Weekly.Count - 1].Total);
            Assert.AreEqual(summary1.Daily[summary1.Daily.Count - 1].Total + 1, summary2.Daily[summary2.Daily.Count - 1].Total);
        }
Пример #5
0
 public void TrackSingleRequest(TransitStatsRequest request)
 {
     using (SnCore.Data.Hibernate.Session.OpenConnection())
     {
         ISession     session = SnCore.Data.Hibernate.Session.Current;
         ManagedStats stats   = new ManagedStats(session);
         try
         {
             stats.Track(request);
             SnCore.Data.Hibernate.Session.Flush();
         }
         catch (Exception ex)
         {
             EventLogManager.WriteEntry(string.Format("Error tracking {0} from {1}.\n{2}",
                                                      (request.RequestUri != null) ? request.RequestUri.ToString() : "an unknown url",
                                                      (request.RefererUri != null) ? request.RefererUri.ToString() : "an unknown referer",
                                                      ex.Message),
                                        EventLogEntryType.Warning);
         }
     }
 }