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);
        }
Esempio n. 2
0
        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);
        }