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

Discussion in 'Вопросы новичков' started by Lollipop, Apr 21, 2013.

  1. Lollipop

    Lollipop Client

    Joined:
    Sep 6, 2012
    Messages:
    270
    Likes Received:
    23
    Как выполняемый шаблон может получить своё имя?
    т.е. шаблон называется Prog_001.xmlz - шаблон должен получить свое имя.
    С#?
     
  2. darkdiver

    darkdiver Administrator Staff Member

    Joined:
    Jan 13, 2009
    Messages:
    2,258
    Likes Received:
    2,619
    Записать в переменную {-Project.Name-}, потом прочитать из кода
    Code (javascript):
    1.  
    2. project.Variables["varname"].Value
    3.  
     
    Lollipop likes this.
  3. Lollipop

    Lollipop Client

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

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

    darkdiver Administrator Staff Member

    Joined:
    Jan 13, 2009
    Messages:
    2,258
    Likes Received:
    2,619
    а уменьшение время выполнения команды не помогает (в настройках постера)?
    будет более подробная информация, где и как виснет отпишитесь, можно в личку.

    забыли, думали, что не нужен, надо добавить.
     
    Lollipop likes this.
  5. Lollipop

    Lollipop Client

    Joined:
    Sep 6, 2012
    Messages:
    270
    Likes Received:
    23
    Пока наблюдаю...
    а до переменной WorkingThreads как получить доступ? (количество работающих потоков в Постере)
     
  6. rostonix

    rostonix Administrator Staff Member

    Joined:
    Dec 23, 2011
    Messages:
    29,050
    Likes Received:
    5,581
    Lollipop likes this.
  7. Lollipop

    Lollipop Client

    Joined:
    Sep 6, 2012
    Messages:
    270
    Likes Received:
    23
    нашлось: var tasks = ZennoPoster.AllInstances.Count();
    Спасибо
     
  8. darkdiver

    darkdiver Administrator Staff Member

    Joined:
    Jan 13, 2009
    Messages:
    2,258
    Likes Received:
    2,619
    то число, которое вы видите, как число работающих потоков в постере можно получить вот так (страшно конечно, за то достоверно)
    Code (javascript):
    1.  
    2. var stats = Global.Statistics.StatsCollector.Instance.DataSource;
    3. return stats.Where(kv=>kv.Key==Global.Statistics.StatType.WorkingThreads).Select(kv=>kv.Value).FirstOrDefault();
    4.  
    данное число может отличаться от числа ZennoPoster.AllInstances.Count(), так что скорее всего лучше мониторить оба.
     
    Zymlex and Lollipop like this.
  9. Lollipop

    Lollipop Client

    Joined:
    Sep 6, 2012
    Messages:
    270
    Likes Received:
    23
    угу
     
  10. Lollipop

    Lollipop Client

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

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

    Спасибо.
     
  11. darkdiver

    darkdiver Administrator Staff Member

    Joined:
    Jan 13, 2009
    Messages:
    2,258
    Likes Received:
    2,619
    Есть у меня пример как настраивать работающие проекты, данный пример устанавливает 100 попыток у задания в постере с именем из переменной
    Аналогичный подход можно использовать и в вашей ситуации
    Code (javascript):
    1.  
    2. // reading task name from the variable
    3. var searchName = project.Variables["taskName"].Value;
    4. var searchResult = false;
    5.  
    6.  
    7. // get the task list from the ZennoPoster
    8. var tasks = ZennoPoster.TasksList;
    9. foreach (var tsk in tasks)
    10. {
    11.     // loading Xml documnt with task content
    12.     var doc = new System.Xml.XmlDocument();
    13.     doc.LoadXml("<Task>" + tsk + "</Task>");
    14.  
    15.  
    16.     // Search task by name
    17.     var nameElement = doc.SelectSingleNode("Task/Name");
    18.     if(nameElement == null) continue;
    19.     var name = nameElement.InnerText;
    20.     // if we found our task
    21.     if (name == searchName)
    22.     {
    23.         // take task id
    24.         var idElement = doc.SelectSingleNode("Task/Id");
    25.         if (idElement == null) continue;
    26.         var id = Guid.Parse(idElement.InnerText);
    27.  
    28.  
    29.         // take execution settings element
    30.         var esElement = doc.SelectSingleNode("Task/ExecutionSettings");
    31.         if (esElement == null) continue;
    32.  
    33.  
    34.         // take limit of threads of the task
    35.         var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
    36.         if (threadsElement == null) continue;
    37.        
    38.         // change the value
    39.         threadsElement.InnerText = "100";
    40.  
    41.  
    42.         // set new settings
    43.         ZennoPoster.SetExecutionSettings(id, esElement.InnerXml);
    44.        
    45.         searchResult = true;
    46.         break;
    47.     }
    48. }
    49. if (!searchResult)
    50.     throw new Exception("Task " + searchName + " not found!");
    51.  
    P.S. НЕ забудьте добавить System.Xml в ссылки проекта.
     

    Attached Files:

  12. Redsmokky

    Redsmokky Client

    Joined:
    Oct 6, 2015
    Messages:
    218
    Likes Received:
    89
    Возвращает просто OK, в чем может быть причина?
     
  13. sydoow

    sydoow Client

    Joined:
    Jun 22, 2011
    Messages:
    197
    Likes Received:
    96
    Что нужно? Получить имя шаблон?

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

    zhekan3 Client

    Joined:
    Dec 27, 2015
    Messages:
    15
    Likes Received:
    0
    Всегда получаю ошибку "Выполнение действия CSharp OwnCode. Task Name_Temp not found!", сам шаблон Name_Temp.xmlz лежит рядом и так же есть в зенно, System.Xml в ссылки проекта добавлен, что ему не нравится?
     
  15. Denomm

    Denomm Client

    Joined:
    Mar 25, 2019
    Messages:
    357
    Likes Received:
    179
    Забыли может добавить .xmlz к названию шаблона?
     
  16. zhekan3

    zhekan3 Client

    Joined:
    Dec 27, 2015
    Messages:
    15
    Likes Received:
    0
    добавлял, так же (
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)