Страница 1 из 1

Помощь в написании скриптов для RouterOS

Добавлено: 06 янв 2017, 05:37
Dragon_Knight
Все мы знаем, что разработчики очень странные и явно употребляют какие-то вещества, ибо такой ... скриптовый язык сделать в трезвом уме невозможно, особенно на фоне того, что существует куча готовых языков, идеально подходящие под эти задачи: sh, Lua, Perl, ... PHP в конце концов, но....

Собственно в честь открытия этой темы, позвольте мне задать первые вопросы:
Как утилитой fetch положить принятый ответ сразу в переменную, не прибегая к насилованию NAND памяти (сохранить в файл, прочитать в переменную, удалить файл). Если никак, тогда как отловить результат работы утилиты fetch (true || false). У меня получается или получить результат, при этом файл с ответом сервера не создаётся, или создать файл с результатом ответом сервера, но успешность запроса - пустая строка.

Re: Помощь в написании скриптов для RouterOS

Добавлено: 06 янв 2017, 07:41
vqd
Простой язык, для тонкой настройки роутера функционала почти хватает

Код: Выделить всё

:do {
/tool fetch keep-result=no url=http://download2.mikrotik.com/swos/1.17/swos-rb260-1.17.lzb
:put true
} on-error={:put false}

Re: Помощь в написании скриптов для RouterOS

Добавлено: 06 янв 2017, 10:42
podarok66
По языку у меня совсем другое мнение. Разработчики молодцы. Перед ними стояла задача создать интуитивно понятный язык, пригодный к освоению в кратчайшие сроки пользователями, далекими от написания кода. С задачей они справились неплохо. Всё логично, вытекает одно из другого, перекликается с визуальной реализацией (Winbox, Webfig)...
Понятно, что с точки зрения продвинутого кодописателя язык беден и негибок. Но ориентировались не на них. Ниша у продукции совсем другая. Хотя, vqd в своё время высказывал очень здравую мысль о том, что можно было бы давать расширенный функционал за отдельную плату. Я согласен без GUI-вариантов. Оплатил бы и не задумался. Вполне возможно, что со временем такое и будет реализовано. Например в 8 версии программного обеспечения :-)

Re: Помощь в написании скриптов для RouterOS

Добавлено: 06 янв 2017, 17:33
Dragon_Knight
vqd, про do {} on-error={} я как-то забыл... уже какой раз. Спасибо.

Язык-то простой, не спорю, но из-за его попытки угодить новичкам, появляются такие моменты, которые вызывают когнитивный диссонанс...
А 8 версия ROS выйдет сразу после выхода Half-Life 3, да и не факт что скриптовый язык будет меняться, ибо если они её поменяют, то представьте, - все скрипты что есть сейчас можно будет удалять...

Re: Помощь в написании скриптов для RouterOS

Добавлено: 06 янв 2017, 22:05
Dragon_Knight
И вот я поправил свою функцию и всё равно меня очень напрягает момент использования flash памяти как буфер...
Простая математика: Я экспериментирую на устройстве RB951-2n, т.к. там уже флешка посыпалась и нужно её перепаивать.. Так вот там стоит память K9F1208U0C-P, на 3 станице написано: "Endurance: 100K Program/Erase Cycles (with 1bit/512Byte ECC)". Допустим скрипт будем выполнять каждую минуту. Считаем: 100000 / (1 * 24 * 60) = ~69.5 дня. Т.е. каждые два месяца мы получаем кирпич, у которого нужно менять флешку. Даже если учесть хитрые алгоритмы распределения данных по памяти, которые максимум продлят жизнь флешки в два - три раза... Всё равно перспектива менять роутера каждые 3 - 4 квартала не радует....

Код: Выделить всё

:local GetUpdate do={
   :local result;
   
   :do {
      /tool fetch url=($CFGURL . "\?id=" . $CFGID . "&mode=update") mode=http keep-result=yes dst-path=update.fetch;
      :delay 1s;
      :set result [/file get [/file find name=update.fetch] contents];
      /file remove [/file find name=update.fetch];
   } on-error={
      :log error "[*]: Error receiving data.";
      :set result false;
   };
   
   :return $result;
};

Re: Помощь в написании скриптов для RouterOS

Добавлено: 09 янв 2017, 16:54
Dragon_Knight
А есть способ получить код ошибки HTTP из утилиты fetch? Например что-бы если код 200, то пишу результат в файл, а если другой, то просто возвращаем этот код?
Всё думаю над оптимизацией насилования флешки...

Re: Помощь в написании скриптов для RouterOS

Добавлено: 10 янв 2017, 04:12
vqd
нет к сожалению.

Насчет насилования флешки, у меня есть проект большой где с десяток 1016 пашут круглые сутки и обмениваются данными с другими микротикам. Флешка там нагружена очень сильно (с десяток скриптов на нее постоянно что то пишут и читают), так вот за 2 года еще ни один микротик не упал.

Был еще один клиент который боялся за флешку, воткнул обычную УСБ на нее все пишет. Работает так уже с год

Re: Помощь в написании скриптов для RouterOS

Добавлено: 10 янв 2017, 16:26
Dragon_Knight
vqd, спасибо за ответ.
Ну вероятнее всего алгоритмы кеширования делают своё дело.

А вот пришла идея, что если ответ от сервера будет пустой ( Content-Length: 0 )?
Дома попробую и отпишусь.
ADD: Нет, даже если результат пустой, файл обновляется :(