Как я организовал полную автономность сервера. Сказ о том как автоматизировать несколько шаблонов.

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
ВНИМАНИЕ!!! Техническая статья. Максимум полезности, минимум мимишности!

Вся эта история началась почти год назад.
Будет много текста, запасись водичкой/чайком/кофейком и терпением :-)
Надеюсь будет полезно и интересно, короче судите сами. Писать много не люблю, по этому постараюсь только по сути :-)

Итак. Самое главное что вам надо знать это по сути 2 вещи, а точнее 2 сниппета (если шабы завязаны на время)

1. подсчет количества потоков в исполняемом шабе
Код:
string status = string.Empty;
for(int a = 0; a < 10; a++)
   {
   var yourname = "ИМЯ_ШАБЛОНА";//имя шаблона
   var tasks = ZennoPoster.TasksList;
   foreach(var task in tasks)
   {
     var doc = new System.Xml.XmlDocument();
     doc.LoadXml("<Task>" + task + "</Task>");
     string name;
     var nameNode = doc.SelectSingleNode("Task/Name");
     if(nameNode != null && nameNode.InnerText.Equals(yourname))
     {
    name = nameNode.InnerXml;
       //ZennoPoster.AddTries(name, 1);
         if (Global.Variables.IsProjectMaker) if (!Global.Variables.IsDebugMode) break;
         status = doc.SelectSingleNode("Task/ExecutionSettings/NumberOfTries").InnerText;
         //Complete
         return status;
     }
   }
}
Скрипт отвечает за подсчет сколько в данный момент стоит количества исполнений в зенке. Соответственно зенка должна быть запущена и шаб который надо проверять должен работать, тогда будет отдача числа. Если нет, то ответ будет просто - ок
Имя шаблона обязательно писать латиницей (вообще не понимаю людей, которые в названиях или путях указывают кириллицу)

potok.jpg


Из примера, сниппет возьмет значение 1002. Теперь мы знаем, что до полной остановки шаблона 1002 исполнения.
НО каждое исполнение - это не всегда одно и тоже время, так как работа идет в нете, а не на локальной машине.
Из этого вам надо знать и этот сниппет.

2. Работа со временем, не маловажный момент вообще в принципе.
Код:
return (long)(DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalSeconds; //берем время в unixtime в этот момент
Код:
// считаем сколько времени прошло в секундах
int time_end = int.Parse(project.Variables["time_end"].Value);
int time_start = int.Parse(project.Variables["time_start"].Value);
return time_end - time_start;
итак давайте чуть подробнее.

  • верхним сниппетом берем время в начале шаблона и кладем в переменную time_start
  • верхним сниппетом берем время в начале шаблона и кладем в переменную time_end
  • нижним сниппетом делаем вычитание и получаем время в секундах за которое шаблон был исполнен
Это вообще очень удобно, для наглядности иметь понимание среднего времени исполнения шаблона. В будущем такое простое действие может сильно помочь в задачах.

Ну теперь включается самое сложное - логика )

Итак, например, у нас есть 5 шаблонов, отвечающие за разные действия. Нам нужно продумать последовательность и учесть погрешности, плюс помнить о времени! Потому что в моем случае, я мог делать запуск всего 1 раз в сутки.

Логика шаблона:
У каждого шаблона есть свой файл с акками.
  1. После исполнения задания в конце всегда записываем время конца исполнения в таблицу, делаем поментку, когда акк сделал задание, записываем.
  2. Сделали пометку о самом выполнение, как оно прошло, удачно - ОК, если с ошибкой = Bad, или выполнено, но с задачей не справился = None
  3. Сохранили куки профиль
  4. ну понятное дело записываем обратно в все входящие переменные как прокси лог пас и тп

Логика шаблона манагера!
Началось )))

У шаблона конечно же есть свой файл конфига, он состоит из 2х параметров
  1. это конец времени работы последнего шаблона
  2. и порядковый номер шаблона
выглядит просто
время;номер

Шаблон манагера запускается каждые 3 минуты средствами самой зенки.
После запуска шаблон делает анализ. Если все ок, начинает старт с номера 1, запуская первый шаблон с помощью .bat файла

Код:
@echo off
echo Starting task... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o StartTask -names "ИмяШаблонаБезПробелов"
timeout /t 1
echo Set tries count to 5870... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o SetTries 7665 -names "ИмяШаблонаБезПробелов"
timeout /t 1
echo Clear success... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o ClearSuccess -names "ИмяШаблонаБезПробелов"
timeout /t 1
echo Set threads count to 10... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o SetThreads 10 -names "ИмяШаблонаБезПробелов"
Данный батник легко можно сделать под свои нужды по средствам зенки.
7665 - это количество исполнений
10 - количество одновременных потоков

Когда шаб 1 запущен, идет перезапись конфига, теперь цифра 0 заменилась на 1.

При следующем запуске менеджера происходит проверка конфига.
Проверяем время, сутки не прошли, идем дальше, проверяем номер шаблона. Манагер видит что шаблон 1 уже был запущен, и надо запускать шаблон номер 2. НО перед этим надо проверить количество исполнений на данный момент времени. Делаем проверку сниппетов выше. Манагер видит, что исполнения не равны нулю, поэтому манагер уходи в даун на следующие 3 минуты, через 3 минуты, операция происходит заново.

ispolneniya.jpg


В конце работы шаблона есть разделение на 2 проверки
  1. если все ок, то количество исполнений и потоков равно нулю.
  2. проверка на то что какой-то из потоков поймал "цикл", то есть делает в шабе что-то где ты не предугадал. Например страница не прогрузилась полностью, и шаб вставляет текст, в коде вроде как есть, но не работает. Мы делаем проверку

  • зная количество потоков мы делаем проверку количества потоков, ЕСЛИ количество исполнений равно нулю.
  • Если потоки висят в работе больше среднего времени исполнения шаблона, то убиваем их (я увеличил время среднее с 30 секунд до 5 минут, чтоб наверняка, иногда бывает просто прокси тупят, редко очень, но бывает)
Убиваем их этим батником (точно так же можно сделать средствами зенки)
Код:
@echo off
echo Interrupting task... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o InterruptTask -names "ИмяШаблонаБезПробелов"
timeout /t 1
echo Set tries count to 0... (-names "ИмяШаблонаБезПробелов")
"C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.16.2.0\Progs\TasksRunner.exe" -o SetTries 0 -names "ИмяШаблонаБезПробелов"
Дальше.
Мы имеем отработавший шаблон, теперь надо сделать об этом отчет. Просматриваем файл аккаунтов на bad'ы, считаем их, записываем. Отправляем телегу отчет.
telega1.jpg


из данного отчета, мы берем инфу (для себя) количество ошибок, время старта.
  1. если количество ошибок по вашему мнению в пределах нормы, значит все ок
  2. Если время запуска в пределах среднего, значит все ок
Вывод, все ок, на сервак не лезем для детального просмотра и регулировки.

Таким образом организуем последовательность исполнения шаблонов.
Почему это удобно?
  1. так как среднее время исполнения может быть увеличено, поэтому стандартными способами мы не можем предугадать когда первый шаб будет полностью выполнен и нагрузка на сервак будет минимальной для запуска следующего.
  2. Гибко можно следить за залипанием инстантсов и циклов в них (в последних версиях зенки такое тоже уже можно делать самой зенкой, выключать по истечению времени)
Так же отдельно манагер следит за рабочими и битыми ссылками, и если что запускает их новое создание. Создание ссылок происходит по 2м причинам:
  1. ссылки не работают, были забанены или медленно открываются
  2. по истечении времени, то есть если прошла неделя ил две, то создаются новые ссылки и перезаписываются
Вот пример алерта о ссылках

telega-ssilki.jpg


То есть запускается шаб которые отслеживает работоспособность ссылок, если найдены битые ссылки, то автоматом их удаляет из базы и делает оповещение.
Если рабочих ссылок - 0
Останавливаются все шаблоны и запускается новая генерация ссылок.
Если пришло время менять ссылки, то система ждет когда все шаблоны будут выработаны и нет нагрузки на сервер, тогда идет запуск шаба по ссылкам.

telega-ssilki2.jpg


День когда почти пришлось вмешаться )
Но манагер вывез.

_______ Дополнил ________
Так выглядит аккаунт если какие-то были забанены, а число исполнений не изменилось. То есть было 1000 акков, а стало 997, а в батнике не изменили число акков, то будем видеть такую картину.
То есть контроль каждого акка идет еще и в самих шаблонах при старте, проверка времени.

spot2.jpg



ps\ когда надо было сделать что-то подобное средствами зенки, на тот момент она не умела этого, и не уверен что сейчас можно организовать так же гибко. Но научившись такое продумывать и зная эти 2 сниппета, можно написать любой манагер по сути, для любых задач.

pss\ судя по последним темам в конкурсах, где я принимал участие с финансовым отчетом, никому не интересно было слушать про деньги, поэтому в этот раз опущу эти цифры ))))

Надеюсь было полезно, если чего вспомню, допишу.

 
Тема статьи
Другое
Номер конкурса статей
Десятый конкурс статей

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
196
Баллы
43
Классная техническая статья , удобоваримо и применимо спасибо!
 

vrska

Client
Регистрация
07.02.2010
Сообщения
589
Благодарностей
406
Баллы
63
вообще не понимаю людей, которые в названиях или путях указывают кириллицу
Верно, а еще я вообще не понимаю людей, которые не отключают уведомления о выполнении проекта, по итогу в логе мусор и замазаный скрин, то же про скрины с тг, почему бы не заскринить без списка контактов?
Ты свой манагер называешь манагером, снипетом, шаблоном который проверяет другие шаблоны и если этот шаблон.... чтоооо, какой этот? Чем больше я перечитывал статью, тем больше путался
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
я вообще не понимаю людей, которые не отключают уведомления о выполнении проекта, по итогу в логе мусор и замазаный скрин
я не часто обращаю внимания на мелкие доработки, как это, поэтому даже и не знал об этом)))
то же про скрины с тг, почему бы не заскринить без списка контактов?
так создается более полное впечатление, мозгом это пространство расширяется, а вообще я не люблю мелкие скрины, по сути я мог бы все скрины урезать до одной строчки, но разве это будет смотреться? Нет конечно, смотрится большой скрин, хоть и замазанный...
Да и тема не о скринах, просто с ними тема живее смотрится.

ps \ но кстати когда писал статью, она у меня спонтанно родилась, если честно, когда делал скрины, тоже подумал о том как бы было здорово убрать лишнее из логов)
 
Последнее редактирование:

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113
никому не интересно было слушать про деньги, поэтому в этот раз опущу эти цифры
А зря! Люди любят считать чужие деньги. Так что давай, выкладывай инфу и поподробнее! )))

Материал понравился. Буду голосовать!
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Круто)) давно думал о том, чтобы внедрить что-то подобное. Теперь стало понятнее как это реализовать под мои нужны
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
А зря! Люди любят считать чужие деньги. Так что давай, выкладывай инфу и поподробнее! )))
да в лом :-)
могу лишь сказать что на новый немецкий бизнес класс хватит :-)

Круто)) давно думал о том, чтобы внедрить что-то подобное. Теперь стало понятнее как это реализовать под мои нужны
:ay:
рад что познавательно, и помогло
 

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28
Ооо, спасибо добрый человек! Я как раз сейчас нечто похожее делаю
 
  • Спасибо
Реакции: Tsuk15

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Вот блин почему бы не взять авторам ЗП и не сделать нормальный планировщик?
++++
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
Вот блин почему бы не взять авторам ЗП и не сделать нормальный планировщик?
я предлагал давно такое сделать :-)
с другой стороны зная такие сниппеты, без проблем можно свой планировщик сделать, пусть лучше хром развивают и дебажат ))
 
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
я предлагал давно такое сделать :-)
с другой стороны зная такие сниппеты, без проблем можно свой планировщик сделать, пусть лучше хром развивают и дебажат ))
Это не программа автоматизации тогда получается, а "НИИ травматологии и ортопедии"
 
  • Спасибо
Реакции: backoff

systema

Client
Регистрация
25.07.2013
Сообщения
174
Благодарностей
64
Баллы
28
Вот такие ошибки из-за чего могут быть
Компиляция кода Ошибка в действии "CS0234" "Имя типа или пространства имен "XmlDocument" отсутствует в пространстве имен "System.Xml" (пропущена ссылка на сборку?)". [Строка: 7; Cтолбец: 31]
 

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