private LogDownloadListModel ListWeeklyDownloads(int start, int count)
        {
            // get the min dates per query
            var queryStatistics = _queryLogRepository.GetQueryStatisticsForDownloads();

            // get the min date from all queries
            var minTimestamp = queryStatistics.Where(q => q.First > DateTime.MinValue).Min(q => q.First).Date;

            //calculate total weeks from first log item
            var today = DateTime.UtcNow;
            var dayOfWeek = (int)today.DayOfWeek;
            var timespan = (today.AddDays(-dayOfWeek) - minTimestamp);
            int weeks = (int)Math.Ceiling(timespan.TotalDays / 7);

            var weeklyDownloads = new LogDownloadListModel
            {
                TotalCount = weeks,
                Start = start,
                End = Math.Min(start + count, weeks),
                Items = new List<LogDownLoadModel>()
            };
            for (var i = weeklyDownloads.Start; i < weeklyDownloads.End; i++)
            {
                var endOfWeek = today.AddDays(-dayOfWeek - i * 7);
                weeklyDownloads.Items.Add(new LogDownLoadModel
                {
                    Label = string.Format("{0:yyyy-MM-dd} / {1:yyyy-MM-dd}", endOfWeek.AddDays(-6), endOfWeek),
                    Start = string.Format("{0:yyyy-MM-dd}", endOfWeek.AddDays(-6)),
                    End = string.Format("{0:yyyy-MM-dd}", endOfWeek),
                }
                    );
            }
            return weeklyDownloads;
        }
        private LogDownloadListModel ListMonthlyDownloads(int start, int count)
        {
            // get the min dates per query
            var queryStatistics = _queryLogRepository.GetQueryStatisticsForDownloads();

            if (queryStatistics.Count == 0)
                return null;

            // get the min date from all queries
            var minTimestamp = queryStatistics.Where(q => q.First > DateTime.MinValue).Min(q => q.First).Date;

            //calculate total weeks from first log item
            var today = DateTime.UtcNow;
            int offsetDays = DateTime.DaysInMonth(today.Year, today.Month) - (int)today.Day;
            int months = ((today.Year - minTimestamp.Year) * 12) + today.Month - minTimestamp.Month + 1;

            var montlyDownloads = new LogDownloadListModel
            {
                TotalCount = months,
                Start = start,
                End = Math.Min(start + count, months),
                Items = new List<LogDownLoadModel>()
            };

            for (var i = montlyDownloads.Start; i < montlyDownloads.End; i++)
            {
                var endOfMonth = today.AddDays(offsetDays).AddMonths(-i).Date;
                // AddMonths is not exact (seems to add 31 days?)
                var startOfMonth = endOfMonth.AddDays(1 - DateTime.DaysInMonth(endOfMonth.AddDays(-1).Year, endOfMonth.AddDays(-1).Month));
                montlyDownloads.Items.Add(new LogDownLoadModel
                {
                    Label = string.Format("{0:yyyy-MM-dd} / {1:yyyy-MM-dd}", (startOfMonth < minTimestamp) ? minTimestamp : startOfMonth, (endOfMonth > today) ? today : endOfMonth),
                    Start = string.Format("{0:yyyy-MM-dd}", (startOfMonth < minTimestamp) ? minTimestamp : startOfMonth),
                    End = string.Format("{0:yyyy-MM-dd}", (endOfMonth > today) ? today : endOfMonth),
                }
                    );
            }
            return montlyDownloads;
        }