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

  • Автор темы Автор темы Lollipop
  • Дата начала Дата начала

Lollipop

Client
Регистрация
06.09.2012
Сообщения
271
Реакции
29
Баллы
28
Как выполняемый шаблон может получить своё имя?
т.е. шаблон называется Prog_001.xmlz - шаблон должен получить свое имя.
С#?
 
Записать в переменную {-Project.Name-}, потом прочитать из кода
JavaScript:
Развернуть Свернуть Копировать
project.Variables["varname"].Value
 
  • Оценить
Реакции: volody00 и Lollipop
Записать в переменную {-Project.Name-}, потом прочитать из кода
JavaScript:
Развернуть Свернуть Копировать
project.Variables["varname"].Value

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

П.С. а чего не сделать {-Project.Name-} в раскрывающемся списке, я то первым делом там посмотрел, ... не нашел
 
В общем то я собираюсь логгировать зависшие потоки (потоков > 50-70) по имени, и хоть в ручную понять - сколько виснет...
Может быть есть ещё варианты, как это делать?
И какой выход? - регулярно перезапускать Зеннопостер.
Смотрю в сторону AutoHotkey... как еще?
а уменьшение время выполнения команды не помогает (в настройках постера)?
будет более подробная информация, где и как виснет отпишитесь, можно в личку.

П.С. а чего не сделать {-Project.Name-} в раскрывающемся списке, я то первым делом там посмотрел, ... не нашел
забыли, думали, что не нужен, надо добавить.
 
  • Оценить
Реакции: Lollipop
Пока наблюдаю...
а до переменной WorkingThreads как получить доступ? (количество работающих потоков в Постере)
 
нашлось: var tasks = ZennoPoster.AllInstances.Count();
Спасибо
 
то число, которое вы видите, как число работающих потоков в постере можно получить вот так (страшно конечно, за то достоверно)
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(), так что скорее всего лучше мониторить оба.
 
  • Оценить
Реакции: Meteorburn, ZX и Lollipop
darkdiver
Если не затруднит, можете изобразить код для такой ситуации:
Опишу ситуацию: в ZP есть список шаблонов
первые в списке имена начинаются с "_" и они висят вверху (управляющие-Sheduler) - их останавливать нельзя
дальше идет список однотипных, размноженных шаблонов с именами Task_001, Task_002, Task_003... до сотни
нормально работают обычно штук 50
нужен управляющий шаблон, который по внешнему сигналу, напр. появление файла на диске (ну это я сам сделаю)
, по сигналу
1. Остановит или прервет выполнение штук 5 ну или 1-го работающих шаблонов из группы Task_00...
желательно последних, для порядка, или любых работающих
2. При поступлении другого сигнала, нужно запускать по 5 штук из неработающих, опять, желательно по-порядку, ну или как нибудь

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

Спасибо.
 
Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 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 в ссылки проекта.
 

Вложения

  • example.xmlz
    example.xmlz
    11,5 KB · Просмотры: 391
  • GAC.png
    GAC.png
    12 KB · Просмотры: 776
Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 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, в чем может быть причина?
 
Возвращает просто OK, в чем может быть причина?
Всегда получаю ошибку "Выполнение действия CSharp OwnCode. Task Name_Temp not found!", сам шаблон Name_Temp.xmlz лежит рядом и так же есть в зенно, System.Xml в ссылки проекта добавлен, что ему не нравится?
 

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