/// <summary> /// /// </summary> /// <returns></returns> public StatisticsDto GetStatistics() { return(UseConnection(ctx => { var stats = new StatisticsDto(); var countByStates = ctx.Job.Find(_ => _.StateName != null) .GroupBy(x => x.StateName) .Select(k => new { StateName = k.Key, Count = k.Count() }) .AsEnumerable().ToDictionary(kv => kv.StateName, kv => kv.Count); int GetCountIfExists(string name) => countByStates.ContainsKey(name) ? countByStates[name] : 0; stats.Enqueued = GetCountIfExists(EnqueuedState.StateName); stats.Failed = GetCountIfExists(FailedState.StateName); stats.Processing = GetCountIfExists(ProcessingState.StateName); stats.Scheduled = GetCountIfExists(ScheduledState.StateName); stats.Servers = ctx.Server.Count(); stats.Succeeded = GetCountIfExists(SucceededState.StateName); stats.Deleted = GetCountIfExists(DeletedState.StateName); stats.Recurring = ctx.StateDataSet.Count(_ => _.Key == "recurring-jobs"); stats.Queues = _queueProviders .SelectMany(x => x.GetJobQueueMonitoringApi(ctx).GetQueues()) .Count(); return stats; })); }
/// <summary> /// /// </summary> /// <returns></returns> public StatisticsDto GetStatistics() { return(UseConnection(ctx => { var stats = new StatisticsDto(); var countByStates = ctx.Job.Find(_ => _.StateName != null) .GroupBy(x => x.StateName) .Select(k => new { StateName = k.Key, Count = k.Count() }) .ToList().ToDictionary(kv => kv.StateName, kv => kv.Count); int GetCountIfExists(string name) => countByStates.ContainsKey(name) ? countByStates[name] : 0; stats.Enqueued = GetCountIfExists(EnqueuedState.StateName); stats.Failed = GetCountIfExists(FailedState.StateName); stats.Processing = GetCountIfExists(ProcessingState.StateName); stats.Scheduled = GetCountIfExists(ScheduledState.StateName); stats.Servers = ctx.Server.Count(Query.All()); long[] succeededItems = ctx.StateDataCounter.Find(_ => _.Key == "stats:succeeded").ToList().Select(_ => (long)_.Value) .Concat(ctx.StateDataAggregatedCounter.Find(_ => _.Key == "stats:succeeded").ToList().Select(_ => (long)_.Value)) .ToArray(); stats.Succeeded = succeededItems.Any() ? succeededItems.Sum() : 0; long[] deletedItems = ctx.StateDataCounter.Find(_ => _.Key == "stats:deleted").ToList().Select(_ => (long)_.Value) .Concat(ctx.StateDataAggregatedCounter.Find(_ => _.Key == "stats:deleted").ToList().Select(_ => (long)_.Value)) .ToArray(); stats.Deleted = deletedItems.Any() ? deletedItems.Sum() : 0; stats.Recurring = ctx.StateDataSet.Count(Query.EQ("Key", "recurring-jobs")); stats.Queues = _queueProviders .SelectMany(x => x.GetJobQueueMonitoringApi(ctx).GetQueues()) .Count(); return stats; })); }