示例#1
0
        /// <summary>
        /// Начинает опрос нодов, которые можно опросить - вычислители и, например, матриксы
        /// </summary>
        /// <param name="what"></param>
        /// <param name="nodes"></param>
        /// <param name="args"></param>
        /// <param name="priority"></param>
        public void CreateTasks(string what, IEnumerable <PollNode> nodes, dynamic args, int priority)
        {
            List <PollTask> tasks = new List <PollTask>();

            logger.Debug($"назначена задача {what} для {nodes.Count()} нодов");

            foreach (var node in nodes.Where(n => !n.IsDisabled()))
            {
                //аргументы задачи = аргументы нода (networkAddress и т.п) + аргументы опроса (start, end, components)
                dynamic arguments = FillArgs(node.GetArguments(), args);

                //создание задачи для помещения в очередь
                string createText = $"создание задачи {what} для {node.GetId()} с приоритетом {priority}";
                var    task       = new PollTask(what, node, arguments, node.GetPaths(), priority);
                if (!task.HasPaths())
                {
                    logger.Trace("{0}: отсутствует возможность связаться с вычислителем", createText);
                    if (task.Priority != PollTask.PRIORITY_AUTO)
                    {
                        node.Log("задача отклонена, отсутствует возможность связаться с вычислителем");
                    }
                    return;
                }

                logger.Trace("{0}: добавлено в очередь", createText);
                tasks.Add(task);
            }

            //добавление задач в очередь
            AddTasks(tasks);
        }
示例#2
0
        public void CreateTasksIterative(string what, IEnumerable <PollNode> nodes, dynamic args, int priority)
        {
            List <PollTask> tasks = new List <PollTask>();

            var nds = nodes.Where(n => !n.IsDisabled()).ToArray();

            logger.Debug(string.Format("назначена задача {0} для {1} нодов", what, nds.Count()));

            var cntr = 0;

            foreach (var node in nds)
            {
                //сбор аргументов задачи
                dynamic arguments = FillArgs(node.GetArguments(), args);

                var task = new PollTask(what, node, arguments, node.GetPaths(), priority);
                if (!task.HasPaths())
                {
                    if (task.Priority != PollTask.PRIORITY_AUTO)
                    {
                        node.Log("задача отклонена, отсутствует возможность связаться с вычислителем");
                    }
                    logger.Debug("нет путей для {0}, задача отклонена", node.GetId());
                    continue;
                }
                tasks.Add(task);
                logger.Debug("таск пойман");
                cntr++;
                if (cntr >= 100)
                {
                    cntr = 0;
                    AddTasks(tasks);
                    logger.Debug("порция {0} задач ушла", tasks.Count);
                    tasks.Clear();
                }

                //var task = new PollTask(what, node, arguments, node.GetPaths(), priority);
                //if (!task.HasPaths())
                //{
                //    if (task.Priority != PollTask.PRIORITY_AUTO)
                //        node.Log("задача отклонена, отсутствует возможность связаться с вычислителем");
                //    return;
                //}
                //tasks.Add(task);
                //cntr++;
                //if(cntr>=100)
                //{
                //    cntr = 0;
                //    AddTasks(tasks);
                //    tasks.Clear();
                //}
            }


            AddTasks(tasks);
        }