using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Data.Models; using SharedLibraryCore.Dtos; namespace SharedLibraryCore.Interfaces { /// <summary> /// Exposes methods to get analytical data about server(s) /// </summary> public interface IServerDataViewer { /// <summary> /// Retrieves the max concurrent clients over a give time period for all servers or given server id /// </summary> /// <param name="serverId">ServerId to query on</param> /// <param name="gameCode"><see cref="Reference.Game"/></param> /// <param name="overPeriod">how far in the past to search</param> /// <param name="token">CancellationToken</param> /// <returns></returns> Task<(int?, DateTime?)> MaxConcurrentClientsAsync(long? serverId = null, Reference.Game? gameCode = null, TimeSpan? overPeriod = null, CancellationToken token = default); /// <summary> /// Gets the total number of clients connected and total clients connected in the given time frame /// </summary> /// <param name="overPeriod">how far in the past to search</param> /// <param name="gameCode"><see cref="Reference.Game"/></param> /// <param name="token">CancellationToken</param> /// <returns></returns> Task<(int, int)> ClientCountsAsync(TimeSpan? overPeriod = null, Reference.Game? gameCode = null, CancellationToken token = default); /// <summary> /// Retrieves the client count and history over the given period /// </summary> /// <param name="overPeriod">how far in the past to search</param> /// <param name="token">CancellationToken</param> /// <returns></returns> Task<IEnumerable<ClientHistoryInfo>> ClientHistoryAsync(TimeSpan? overPeriod = null, CancellationToken token = default); /// <summary> /// Retrieves the number of ranked clients for given server id /// </summary> /// <param name="serverId">ServerId to query on</param> /// <param name="token">CancellationToken</param> /// <returns></returns> Task<int> RankedClientsCountAsync(long? serverId = null, CancellationToken token = default); } }