Взять имя выполняемого шаблона.

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18
Как выполняемый шаблон может получить своё имя?
т.е. шаблон называется Prog_001.xmlz - шаблон должен получить свое имя.
С#?
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 265
Благодарностей
2 637
Баллы
113
Записать в переменную {-Project.Name-}, потом прочитать из кода
JavaScript:
project.Variables["varname"].Value
 
  • Спасибо
Реакции: Lollipop

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18
Записать в переменную {-Project.Name-}, потом прочитать из кода
JavaScript:
project.Variables["varname"].Value
Спасибо.
В общем то я собираюсь логгировать зависшие потоки (потоков > 50-70) по имени, и хоть в ручную понять - сколько виснет...
Может быть есть ещё варианты, как это делать?
И какой выход? - регулярно перезапускать Зеннопостер.
Смотрю в сторону AutoHotkey... как еще?

П.С. а чего не сделать {-Project.Name-} в раскрывающемся списке, я то первым делом там посмотрел, ... не нашел
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 265
Благодарностей
2 637
Баллы
113
В общем то я собираюсь логгировать зависшие потоки (потоков > 50-70) по имени, и хоть в ручную понять - сколько виснет...
Может быть есть ещё варианты, как это делать?
И какой выход? - регулярно перезапускать Зеннопостер.
Смотрю в сторону AutoHotkey... как еще?
а уменьшение время выполнения команды не помогает (в настройках постера)?
будет более подробная информация, где и как виснет отпишитесь, можно в личку.

П.С. а чего не сделать {-Project.Name-} в раскрывающемся списке, я то первым делом там посмотрел, ... не нашел
забыли, думали, что не нужен, надо добавить.
 
  • Спасибо
Реакции: Lollipop

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18
Пока наблюдаю...
а до переменной WorkingThreads как получить доступ? (количество работающих потоков в Постере)
 

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18
нашлось: var tasks = ZennoPoster.AllInstances.Count();
Спасибо
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 265
Благодарностей
2 637
Баллы
113
то число, которое вы видите, как число работающих потоков в постере можно получить вот так (страшно конечно, за то достоверно)
JavaScript:
var stats = Global.Statistics.StatsCollector.Instance.DataSource;
return stats.Where(kv=>kv.Key==Global.Statistics.StatType.WorkingThreads).Select(kv=>kv.Value).FirstOrDefault();
данное число может отличаться от числа ZennoPoster.AllInstances.Count(), так что скорее всего лучше мониторить оба.
 
  • Спасибо
Реакции: Zymlex и Lollipop

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18

Lollipop

Client
Регистрация
06.09.2012
Сообщения
270
Благодарностей
23
Баллы
18
darkdiver
Если не затруднит, можете изобразить код для такой ситуации:
Опишу ситуацию: в ZP есть список шаблонов
первые в списке имена начинаются с "_" и они висят вверху (управляющие-Sheduler) - их останавливать нельзя
дальше идет список однотипных, размноженных шаблонов с именами Task_001, Task_002, Task_003... до сотни
нормально работают обычно штук 50
нужен управляющий шаблон, который по внешнему сигналу, напр. появление файла на диске (ну это я сам сделаю)
, по сигналу
1. Остановит или прервет выполнение штук 5 ну или 1-го работающих шаблонов из группы Task_00...
желательно последних, для порядка, или любых работающих
2. При поступлении другого сигнала, нужно запускать по 5 штук из неработающих, опять, желательно по-порядку, ну или как нибудь

или намекните, как в С# взять id работающего/не работающего шаблона (важно еще фильтровать по имени, чтобы не попались Sheduler-ы)
и как его запустить и прервать/остановить

Спасибо.
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 265
Благодарностей
2 637
Баллы
113
Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 100 попыток у задания в постере с именем из переменной
Аналогичный подход можно использовать и в вашей ситуации
JavaScript:
// reading task name from the variable
var searchName = project.Variables["taskName"].Value;
var searchResult = false;


// get the task list from the ZennoPoster
var tasks = ZennoPoster.TasksList;
foreach (var tsk in tasks)
{
    // loading Xml documnt with task content
    var doc = new System.Xml.XmlDocument();
    doc.LoadXml("<Task>" + tsk + "</Task>");


    // Search task by name
    var nameElement = doc.SelectSingleNode("Task/Name");
    if(nameElement == null) continue;
    var name = nameElement.InnerText;
    // if we found our task
    if (name == searchName)
    {
        // take task id
        var idElement = doc.SelectSingleNode("Task/Id");
        if (idElement == null) continue;
        var id = Guid.Parse(idElement.InnerText);


		// take execution settings element
        var esElement = doc.SelectSingleNode("Task/ExecutionSettings");
        if (esElement == null) continue;


		// take limit of threads of the task
        var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
        if (threadsElement == null) continue;
		
		// change the value
        threadsElement.InnerText = "100";


		// set new settings
        ZennoPoster.SetExecutionSettings(id, esElement.InnerXml);
		
        searchResult = true;
        break;
    }
}
if (!searchResult)
	throw new Exception("Task " + searchName + " not found!");
P.S. НЕ забудьте добавить System.Xml в ссылки проекта.
 

Вложения

Redsmokky

Client
Регистрация
06.10.2015
Сообщения
219
Благодарностей
90
Баллы
28
Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 100 попыток у задания в постере с именем из переменной
Аналогичный подход можно использовать и в вашей ситуации
JavaScript:
// reading task name from the variable
var searchName = project.Variables["taskName"].Value;
var searchResult = false;


// get the task list from the ZennoPoster
var tasks = ZennoPoster.TasksList;
foreach (var tsk in tasks)
{
    // loading Xml documnt with task content
    var doc = new System.Xml.XmlDocument();
    doc.LoadXml("<Task>" + tsk + "</Task>");


    // Search task by name
    var nameElement = doc.SelectSingleNode("Task/Name");
    if(nameElement == null) continue;
    var name = nameElement.InnerText;
    // if we found our task
    if (name == searchName)
    {
        // take task id
        var idElement = doc.SelectSingleNode("Task/Id");
        if (idElement == null) continue;
        var id = Guid.Parse(idElement.InnerText);


        // take execution settings element
        var esElement = doc.SelectSingleNode("Task/ExecutionSettings");
        if (esElement == null) continue;


        // take limit of threads of the task
        var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
        if (threadsElement == null) continue;
       
        // change the value
        threadsElement.InnerText = "100";


        // set new settings
        ZennoPoster.SetExecutionSettings(id, esElement.InnerXml);
       
        searchResult = true;
        break;
    }
}
if (!searchResult)
    throw new Exception("Task " + searchName + " not found!");
P.S. НЕ забудьте добавить System.Xml в ссылки проекта.
Возвращает просто OK, в чем может быть причина?
 

zhekan3

Client
Регистрация
27.12.2015
Сообщения
18
Благодарностей
0
Баллы
1
Возвращает просто OK, в чем может быть причина?
Всегда получаю ошибку "Выполнение действия CSharp OwnCode. Task Name_Temp not found!", сам шаблон Name_Temp.xmlz лежит рядом и так же есть в зенно, System.Xml в ссылки проекта добавлен, что ему не нравится?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)