public async Task <IActionResult> GetOneDay() { var servers = await _repo.GetAllAsync(a => a.EntryTime >= DateTime.Now.AddDays(-1)); var result = new List <ServerEntryDto>(); foreach (var serverEntry in servers) { if (serverEntry.History.Any(a => a.UserCount != -1)) { var model = new ServerEntryResult(serverEntry); var historyResult = new List <ServerHistoryResult>(); var hoursRemaining = 0; while (hoursRemaining <= 24) { var currentTime = DateTime.Now.AddHours(-hoursRemaining); var results = serverEntry.History.Where(a => a.EntryTime.Day == currentTime.Day && a.EntryTime.Month == currentTime.Month && a.EntryTime.Hour == currentTime.Hour && a.EntryTime.Year == currentTime.Year).ToList(); if (results.Count == 0) { hoursRemaining++; continue; } var totalOnline = results.Count(a => a.Online); var totalUsersInHour = results.Sum(a => a.UserCount); var totalAverageUsers = totalUsersInHour / results.Count; historyResult.Add(new ServerHistoryResult { EntryTime = currentTime, UserCount = totalAverageUsers, Online = totalOnline >= results.Count / 2 }); hoursRemaining++; } model.ServerHistory = historyResult.OrderBy(a => a.EntryTime).Select(a => new ServerHistoryResult { EntryTime = a.EntryTime, Online = a.Online, UserCount = a.UserCount }).ToList(); result.Add(new ServerEntryDto(model)); } } return(new JsonResult(result)); }
public ServerEntryDto(ServerEntryResult result, byte timeSelected = 0) { ServerName = result.ServerName; RgbColour = result.RgbColour; ServerHistory = result.ServerHistory.Select(a => new ServerHistoryDto(a, timeSelected)).ToList(); }