- Регистрация
- 20.04.2015
- Сообщения
- 6 052
- Благодарностей
- 6 481
- Баллы
- 113
ВНИМАНИЕ!!! Техническая статья. Максимум полезности, минимум мимишности!
Вся эта история началась почти год назад.
Будет много текста, запасись водичкой/чайком/кофейком и терпением
Надеюсь будет полезно и интересно, короче судите сами. Писать много не люблю, по этому постараюсь только по сути
Итак. Самое главное что вам надо знать это по сути 2 вещи, а точнее 2 сниппета (если шабы завязаны на время)
1. подсчет количества потоков в исполняемом шабе
Скрипт отвечает за подсчет сколько в данный момент стоит количества исполнений в зенке. Соответственно зенка должна быть запущена и шаб который надо проверять должен работать, тогда будет отдача числа. Если нет, то ответ будет просто - ок
Имя шаблона обязательно писать латиницей (вообще не понимаю людей, которые в названиях или путях указывают кириллицу)
Из примера, сниппет возьмет значение 1002. Теперь мы знаем, что до полной остановки шаблона 1002 исполнения.
НО каждое исполнение - это не всегда одно и тоже время, так как работа идет в нете, а не на локальной машине.
Из этого вам надо знать и этот сниппет.
2. Работа со временем, не маловажный момент вообще в принципе.
итак давайте чуть подробнее.
Ну теперь включается самое сложное - логика )
Итак, например, у нас есть 5 шаблонов, отвечающие за разные действия. Нам нужно продумать последовательность и учесть погрешности, плюс помнить о времени! Потому что в моем случае, я мог делать запуск всего 1 раз в сутки.
Логика шаблона:
У каждого шаблона есть свой файл с акками.
Логика шаблона манагера!
Началось )))
У шаблона конечно же есть свой файл конфига, он состоит из 2х параметров
время;номер
Шаблон манагера запускается каждые 3 минуты средствами самой зенки.
После запуска шаблон делает анализ. Если все ок, начинает старт с номера 1, запуская первый шаблон с помощью .bat файла
Данный батник легко можно сделать под свои нужды по средствам зенки.
7665 - это количество исполнений
10 - количество одновременных потоков
Когда шаб 1 запущен, идет перезапись конфига, теперь цифра 0 заменилась на 1.
При следующем запуске менеджера происходит проверка конфига.
Проверяем время, сутки не прошли, идем дальше, проверяем номер шаблона. Манагер видит что шаблон 1 уже был запущен, и надо запускать шаблон номер 2. НО перед этим надо проверить количество исполнений на данный момент времени. Делаем проверку сниппетов выше. Манагер видит, что исполнения не равны нулю, поэтому манагер уходи в даун на следующие 3 минуты, через 3 минуты, операция происходит заново.
В конце работы шаблона есть разделение на 2 проверки
Дальше.
Мы имеем отработавший шаблон, теперь надо сделать об этом отчет. Просматриваем файл аккаунтов на bad'ы, считаем их, записываем. Отправляем телегу отчет.
из данного отчета, мы берем инфу (для себя) количество ошибок, время старта.
Таким образом организуем последовательность исполнения шаблонов.
Почему это удобно?
То есть запускается шаб которые отслеживает работоспособность ссылок, если найдены битые ссылки, то автоматом их удаляет из базы и делает оповещение.
Если рабочих ссылок - 0
Останавливаются все шаблоны и запускается новая генерация ссылок.
Если пришло время менять ссылки, то система ждет когда все шаблоны будут выработаны и нет нагрузки на сервер, тогда идет запуск шаба по ссылкам.
День когда почти пришлось вмешаться )
Но манагер вывез.
_______ Дополнил ________
Так выглядит аккаунт если какие-то были забанены, а число исполнений не изменилось. То есть было 1000 акков, а стало 997, а в батнике не изменили число акков, то будем видеть такую картину.
То есть контроль каждого акка идет еще и в самих шаблонах при старте, проверка времени.
ps\ когда надо было сделать что-то подобное средствами зенки, на тот момент она не умела этого, и не уверен что сейчас можно организовать так же гибко. Но научившись такое продумывать и зная эти 2 сниппета, можно написать любой манагер по сути, для любых задач.
pss\ судя по последним темам в конкурсах, где я принимал участие с финансовым отчетом, никому не интересно было слушать про деньги, поэтому в этот раз опущу эти цифры ))))
Надеюсь было полезно, если чего вспомню, допишу.
Вся эта история началась почти год назад.
Будет много текста, запасись водичкой/чайком/кофейком и терпением
Надеюсь будет полезно и интересно, короче судите сами. Писать много не люблю, по этому постараюсь только по сути
Итак. Самое главное что вам надо знать это по сути 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;
}
}
}
Имя шаблона обязательно писать латиницей (вообще не понимаю людей, которые в названиях или путях указывают кириллицу)
Из примера, сниппет возьмет значение 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 раз в сутки.
Логика шаблона:
У каждого шаблона есть свой файл с акками.
- После исполнения задания в конце всегда записываем время конца исполнения в таблицу, делаем поментку, когда акк сделал задание, записываем.
- Сделали пометку о самом выполнение, как оно прошло, удачно - ОК, если с ошибкой = Bad, или выполнено, но с задачей не справился = None
- Сохранили куки профиль
- ну понятное дело записываем обратно в все входящие переменные как прокси лог пас и тп
Логика шаблона манагера!
Началось )))
У шаблона конечно же есть свой файл конфига, он состоит из 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 минуты, операция происходит заново.
В конце работы шаблона есть разделение на 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'ы, считаем их, записываем. Отправляем телегу отчет.
из данного отчета, мы берем инфу (для себя) количество ошибок, время старта.
- если количество ошибок по вашему мнению в пределах нормы, значит все ок
- Если время запуска в пределах среднего, значит все ок
Таким образом организуем последовательность исполнения шаблонов.
Почему это удобно?
- так как среднее время исполнения может быть увеличено, поэтому стандартными способами мы не можем предугадать когда первый шаб будет полностью выполнен и нагрузка на сервак будет минимальной для запуска следующего.
- Гибко можно следить за залипанием инстантсов и циклов в них (в последних версиях зенки такое тоже уже можно делать самой зенкой, выключать по истечению времени)
- ссылки не работают, были забанены или медленно открываются
- по истечении времени, то есть если прошла неделя ил две, то создаются новые ссылки и перезаписываются
То есть запускается шаб которые отслеживает работоспособность ссылок, если найдены битые ссылки, то автоматом их удаляет из базы и делает оповещение.
Если рабочих ссылок - 0
Останавливаются все шаблоны и запускается новая генерация ссылок.
Если пришло время менять ссылки, то система ждет когда все шаблоны будут выработаны и нет нагрузки на сервер, тогда идет запуск шаба по ссылкам.
День когда почти пришлось вмешаться )
Но манагер вывез.
_______ Дополнил ________
Так выглядит аккаунт если какие-то были забанены, а число исполнений не изменилось. То есть было 1000 акков, а стало 997, а в батнике не изменили число акков, то будем видеть такую картину.
То есть контроль каждого акка идет еще и в самих шаблонах при старте, проверка времени.
ps\ когда надо было сделать что-то подобное средствами зенки, на тот момент она не умела этого, и не уверен что сейчас можно организовать так же гибко. Но научившись такое продумывать и зная эти 2 сниппета, можно написать любой манагер по сути, для любых задач.
pss\ судя по последним темам в конкурсах, где я принимал участие с финансовым отчетом, никому не интересно было слушать про деньги, поэтому в этот раз опущу эти цифры ))))
Надеюсь было полезно, если чего вспомню, допишу.
- Тема статьи
- Другое
- Номер конкурса статей
- Десятый конкурс статей
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: