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);
                }
            }
        }
コード例 #2
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);
        }