public HttpResponseMessage UniqueVisitorsStatistics(String StartDate = "", String EndDate = "", int daysStep = 1) { var ads = service.GetUserAds(User.Identity.GetUserId()); List<UniqueVisitorsTable> table = new List<UniqueVisitorsTable>(); if (ads.Count() > 0) { DateTime StartDateTime = ads.SelectMany(a => a.AdSessions).Select(a => a.DateTimeStart).Min().Date; DateTime EndDateTime = DateTime.Now.Date; if (!String.IsNullOrEmpty(StartDate)) { DateTime incomeTime = DateTime.MaxValue; DateTime.TryParse(StartDate, new CultureInfo("ru-RU"), DateTimeStyles.None, out incomeTime); if (incomeTime.CompareTo(StartDateTime) > 0) { StartDateTime = incomeTime; } } if (!String.IsNullOrEmpty(EndDate)) { DateTime incomeTime = DateTime.MaxValue; DateTime.TryParse(EndDate, new CultureInfo("ru-RU"), DateTimeStyles.None, out incomeTime); if (incomeTime.CompareTo(EndDateTime) < 0 && incomeTime.CompareTo(DateTime.MinValue) > 0) { EndDateTime = incomeTime; } } for (var date = StartDateTime; date.CompareTo(EndDateTime) < 0; date = date.AddDays(daysStep)) { UniqueVisitorsTable row = new UniqueVisitorsTable(); var sessions = ads.SelectMany(a => a.AdSessions).Where(a => a.DateTimeStart.Date.CompareTo(date.Date) == 0); if (daysStep > 1) { sessions = ads.SelectMany(a => a.AdSessions).Where(a => a.DateTimeStart.Date.CompareTo(date.Date) > 0 && a.DateTimeEnd.Date.CompareTo(date.AddDays(daysStep)) < 0); } var sessionsByIP = sessions.Select(a => a.UserIp).Distinct(); if (sessions.Count() > 0) { row.Date = date.ToShortDateString(); if (daysStep > 1) { row.Date = "От " + date.ToShortDateString() + " До " + date.AddDays(daysStep).ToShortDateString(); } row.UniqueVisitors = sessionsByIP.Count(); row.AverageTime = Math.Floor(TimeSpan.FromTicks( Convert.ToInt64(sessions.Average(a => a.DateTimeEnd.Ticks - a.DateTimeStart.Ticks))).TotalSeconds).ToString(); row.MaxTime = Math.Floor(TimeSpan.FromTicks( Convert.ToInt64(sessions.Max(a => a.DateTimeEnd.Ticks - a.DateTimeStart.Ticks))).TotalSeconds).ToString(); table.Add(row); } } } return Request.CreateResponse(HttpStatusCode.OK, table); }
public ActionResult UniqueVisitorsStatistics(String StartDate = "", String EndDate = "", int daysStep = 1) { var ads = service.GetUserAds(User.Identity.GetUserId()); List<UniqueVisitorsTable> table = new List<UniqueVisitorsTable>(); DateTime StartDateTime = ads.Select(a=>a.DateTime).Min(); DateTime EndDateTime = ads.Select(a=>a.DateTime).Max(); if (StartDate != "") { var incomeTime = DateTime.Parse(StartDate); if(incomeTime.CompareTo(StartDateTime)>0) { StartDateTime = incomeTime; } } if (EndDate != "") { var incomeTime = DateTime.Parse(EndDate); if(incomeTime.CompareTo(EndDateTime)<0) { EndDateTime = incomeTime; } } for (var date = StartDateTime; date < EndDateTime; date = date.AddDays(daysStep)) { UniqueVisitorsTable row = new UniqueVisitorsTable(); var sessions = ads.SelectMany(a => a.AdSessions).Where(a=>a.DateTimeStart.Date.CompareTo(date.Date)==0); var sessionsByIP = sessions.Select(a=>a.UserIp).Distinct(); row.Date = date.ToShortDateString(); row.UniqueVisitors = sessionsByIP.Count(); row.AverageTime = sessions.Average(a => a.DateTimeEnd.Ticks - a.DateTimeStart.Ticks).ToString(); row.MaxTime = sessions.Max(a => a.DateTimeEnd.Ticks - a.DateTimeStart.Ticks).ToString(); table.Add(row); } return PartialView(table); }