Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 public ServerEntryDto(ServerEntryResult result, byte timeSelected = 0)
 {
     ServerName    = result.ServerName;
     RgbColour     = result.RgbColour;
     ServerHistory = result.ServerHistory.Select(a => new ServerHistoryDto(a, timeSelected)).ToList();
 }