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; } } } }
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); } } } }
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); }
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); }
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); } } }