private void NormalizeTaskCounters([NotNull] RtqTaskCounters taskCounters) { foreach (var taskName in taskDataRegistry.GetAllTaskNames()) { if (!taskCounters.PendingTaskCountsByName.ContainsKey(taskName)) { taskCounters.PendingTaskCountsByName.Add(taskName, new Dictionary <TaskState, int>()); } } foreach (var taskState in Enum.GetValues(typeof(TaskState)).Cast <TaskState>().Where(x => !IsTaskStateTerminal(x))) { NormalizeTaskCounters(taskCounters.PendingTaskCountsTotal, taskState); foreach (var kvp in taskCounters.PendingTaskCountsByName) { NormalizeTaskCounters(kvp.Value, taskState); } } void NormalizeTaskCounters(Dictionary <TaskState, int> taskCountsByState, TaskState taskState) { if (!taskCountsByState.ContainsKey(taskState)) { taskCountsByState.Add(taskState, 0); } } }
private void NormalizeTaskCounters([NotNull] RtqTaskCounters taskCounters) { foreach (var taskNameWithTopic in taskDataRegistry.GetAllTaskNamesWithTopics()) { if (!taskCounters.PendingTaskCountsByNameAndTopic.ContainsKey(taskNameWithTopic)) { taskCounters.PendingTaskCountsByNameAndTopic.Add(taskNameWithTopic, new Dictionary <TaskState, int>()); } } foreach (var taskState in allTaskStates.Where(x => !IsTaskStateTerminal(x))) { NormalizeTaskStateCounters(taskCounters.PendingTaskCountsTotal, taskState); foreach (var kvp in taskCounters.PendingTaskCountsByNameAndTopic) { NormalizeTaskStateCounters(kvp.Value, taskState); } } void NormalizeTaskStateCounters(Dictionary <TaskState, int> taskCountsByState, TaskState taskState) { if (!taskCountsByState.ContainsKey(taskState)) { taskCountsByState.Add(taskState, 0); } } }
public RtqTaskCounters GetTaskCounters([NotNull] Timestamp now) { var pendingTaskMetas = GetPendingTaskMetas(); var lostTasks = pendingTaskMetas.Where(x => x.MinimalStartTimestamp < now - settings.PendingTaskExecutionUpperBound).ToArray(); if (lostTasks.Length > 0) { logger.Warn("Probably {RtqTaskMetasCount} lost tasks detected: {LostTasks}", new { RtqTaskMetasCount = lostTasks.Length, LostTasks = lostTasks.ToPrettyJson() }); } var taskCounters = new RtqTaskCounters { LostTasksCount = lostTasks.Length, PendingTaskCountsTotal = pendingTaskMetas.GroupBy(x => x.State) .ToDictionary(g => g.Key, g => g.Count()), PendingTaskCountsByName = pendingTaskMetas.GroupBy(x => x.Name) .ToDictionary(g => g.Key, g => g.GroupBy(x => x.State) .ToDictionary(gg => gg.Key, gg => gg.Count())) }; NormalizeTaskCounters(taskCounters); return(taskCounters); }