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

Lollipop

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

darkdiver

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

Lollipop

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

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

darkdiver

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

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

Lollipop

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

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113

Lollipop

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

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 731
Баллы
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(), так что скорее всего лучше мониторить оба.
 

Lollipop

Client
Регистрация
06.09.2012
Сообщения
271
Благодарностей
27
Баллы
28

Lollipop

Client
Регистрация
06.09.2012
Сообщения
271
Благодарностей
27
Баллы
28
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 285
Благодарностей
2 731
Баллы
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
Сообщения
314
Благодарностей
196
Баллы
43
Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 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, в чем может быть причина?
 

sydoow

Client
Регистрация
22.06.2011
Сообщения
293
Благодарностей
154
Баллы
43
Что нужно? Получить имя шаблон?

project.Name;
project.Name.Replace(".xmlz","");
 

zhekan3

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

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Забыли может добавить .xmlz к названию шаблона?
 

zhekan3

Client
Регистрация
27.12.2015
Сообщения
31
Благодарностей
4
Баллы
8

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