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