using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Data.Models; using Microsoft.AspNetCore.Mvc; using SharedLibraryCore; using SharedLibraryCore.Configuration; using SharedLibraryCore.Interfaces; using Stats.Dtos; namespace WebfrontCore.Controllers { [Route("clientstatistics")] public class ClientStatisticsController : BaseController { private IResourceQueryHelper _queryHelper; private readonly DefaultSettings _defaultConfig; private readonly IServerDataViewer _serverDataViewer; public ClientStatisticsController(IManager manager, IResourceQueryHelper queryHelper, DefaultSettings defaultConfig, IServerDataViewer serverDataViewer) : base(manager) { _queryHelper = queryHelper; _defaultConfig = defaultConfig; _serverDataViewer = serverDataViewer; } [HttpGet("{id:int}/advanced")] public async Task Advanced(int id, [FromQuery] string serverId, [FromQuery] string performanceBucket = null, CancellationToken token = default) { ViewBag.Config = _defaultConfig.GameStrings; var hitInfo = (await _queryHelper.QueryResource(new StatsInfoRequest { ClientId = id, ServerEndpoint = serverId, PerformanceBucket = performanceBucket }))?.Results?.First(); if (hitInfo is null) { return NotFound(); } var server = Manager.GetServers().FirstOrDefault(server => server.Id == serverId) as IGameServer; long? matchedServerId = null; if (server != null) { matchedServerId = server.LegacyDatabaseId; } foreach (var statMetricFunc in Manager.CustomStatsMetrics) { await statMetricFunc(new Dictionary> { { id, hitInfo.CustomMetrics } }, matchedServerId, performanceBucket, false); } return View("~/Views/Client/Statistics/Advanced.cshtml", hitInfo); } } }