Еще один глюк скриптов Роутер-ОС ?

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Рассмотрим на примерах работу /tool fetch с получением данных с удаленного ресурса, завернутую в обработчик ошибок.

В первом примере получаем данные "по-старинке" - с выгрузкой в файл и чтением оттуда
Всё работает как надо.

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

:global FuncSunriseNew1 do={
:do {
/tool fetch url="https://api.sunrise-sunset.org/json?lat=$1&lng=$2" mode=https keep-result=yes dst-path="sr.txt"} on-error={:return "ERROR"}
:delay 2s;
:local srise [/file get sr.txt contents]
/file remove sr.txt
:log info [:len $srise]
:return $srise}
:log warning [$FuncSunriseNew1 "56.5312" "38.5209"]
Второй пример - более "новая" модель использования /fetch без выгрузки в файл, а с получением данных сразу в переменную (чтобы не "портить" флеш-память):

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

:global FuncSunriseNew2 do={
:do { :local srise [/tool fetch url=("https://api.sunrise-sunset.org/json\?lat=$1&lng=$2") mode=https as-value output=user]
} on-error={:local srise; :return "ERROR"}
:log info [:len $srise]
:return ($srise->"data")}
:log warning [$FuncSunriseNew2 "56.5312" "38.5209"]
И что-же - фиг Вам называется. Хоть ресурс нормально отдает данные - ничего в переменную srise не попадает, её длина равна нулю.

Если же использовать FuncSunriseNew2 без обертки в обработчик ошибок:

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

:global FuncSunriseNew2 do={
:local srise [/tool fetch url=("https://api.sunrise-sunset.org/json\?lat=$1&lng=$2") mode=https as-value output=user]
:log info [:len $srise]
:return ($srise->"data")}
:log warning [$FuncSunriseNew2 "56.5312" "38.5209"]
то работает нормально.
В чём проблема ? Что не так ? Какого ... as-value вариант /tool fetch так себя ведёт ? Опять ошибка Микротиковских разрабов или я не прав ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Если эта ошибка подтвердиться, то получается с одной стороны - использовать as-value, конечно правильно с точки зрения экономии флеш-памяти (не надо перезаписывать). Но, тогда, использовать as-value вариант придется без обработчика ошибок и при возникновении таковой (например, при недоступности запрашиваемого ресурса) скрипт остановится и вылетит ...
Просьба проверить и отписаться какие будут мнения.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Трудно говорить о поведении fetch, документации на него не много.
Однако в целом напомню, что заворачивать в обработчик ошибок избыточно. Fetch возвращает массив в котором одним из аргументов является status; надо дожидаться ->finished. Если глюканет сам fetch то скрипт остановится; для исключения этого случая на офф форуме рекомендуют сначала создавать запрос с keep-result для проверки связи с сервером.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Да, но если проверять возможен ли /fetch as-value сначала дав /fetch c keep-result то будет запись на флеш, тогда смысл какой ?

Получается пока, что старый метод с keep-result и записью на флеш надежнее ? При нём обработка ошибок нормально работает и если происходит ошибка в /fetch скрипт не вылетает.
Не знаю, у меня ежедневно по многу раз в роутерах флеш перезаписывается около 5 лет уже. Пока все живые.

Хотелось бы, конечно, нормально работать с as-value, но пока Микротиковцы ошибку не исправят даже не знаю ....

Косяков по скриптам за ними уже много набралось:

1. выполнение N+1 раз при повторном вызове функций
2. глюк в gmt-offset
3. ненормальная работа обработчика ошибок при /fetch as-value
4. глюки при объявлении массивов методами :local array [{}]

Думаю, если вспомнить - ещё наберется. Надо собрать всё и накатать им. Всё же не только им новые модели роутеров выпускать ... Как ни крути, дьявол в мелочах ... Хотят держать марку - пусть работают ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Мне кажется, что проблемы с флеш немного раздуты в сети. Равно как и с SSD. Всё же у большинства юзеров SSD живут достаточно долго, чтобы можно было говорить об их надёжности и оправданности применения в повседневной практике. С флеш та же картинка. У каждого из нас живут и работают в окружении десятки устройств Микротик (я имею ввиду активно "админящих" пользователей нашего форума). И дохлые по причине именно флеша - явление редкое.
Не буду утверждать наверняка, но предположу, что есть как процент брака от производителя (как без этого), так и процент поломок от "большого ума" (десяток или более скриптов с периодом сработки в пару секунда и все пишут на флеш).
Давайте будем честны сами с собой. Часто мы хотим чего-то идеального, максимально точного в результатах. Контроль всего, что только в голову придёт. Это одна из причин кучи ненужных записей в многострадальную память. Юношеский максимализм своего рода. А как говорит один наш модератор - "нужен инженерный поход". Пишем то, что действительно необходимо, а от всего остального отказываемся в стандартном режиме работы (дебагинг - отдельная тема, это стандартным режимом не назовёшь). Либо пишем всё, до чего можем дотянутся и с максимальной подробностью, но держим в запасе железку на замену и реально понимаем риск такой эксплуатации.
Сомневаюсь, что при разумном использовании то же fetch быстро убьет флешку. Ну а после 5 лет эксплуатации мы же понимаем, что железка отработала свои деньги и не раз :-)


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Мне кажется, что проблемы с флеш немного раздуты в сети.
Раздуты, но сама идея выкладывать на форум не есть хорошо. Понятно что автор понимает что делает скрипт и запуская его раз в сутки не уложит флеш. Но кто-то заскочит на форум возьмёт кусок, и запустит раз в секунду. Долго проживут флешки со средней продолжительностью в 100к записей? И вопрос тут не к аборигену который скопировал код, а к культуре человека, который его выложил.


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

И вопрос тут не к аборигену который скопировал код, а к культуре человека, который его выложил.
Так так ... Подкоп ? :-) Постараюсь быть культурным, но образованности не хватает :-)

Если чего накопаете совместно или по отдельности про обработку ошибок с /fetch as-value - дайте знать ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

pepelxl писал(а): 02 дек 2020, 11:04 Раздуты, но сама идея выкладывать на форум не есть хорошо. Понятно что автор понимает что делает скрипт и запуская его раз в сутки не уложит флеш. Но кто-то заскочит на форум возьмёт кусок, и запустит раз в секунду. Долго проживут флешки со средней продолжительностью в 100к записей? И вопрос тут не к аборигену который скопировал код, а к культуре человека, который его выложил.
Простите, но не согласен от слова совсем. Ни один скриптописатель не должен рассчитывать на использование его скрипта ненадлежащим образом. Ведь и лопатой можно копать, а можно из неё пытаться сделать экскаватор. Во втором случае лопатка вполне ожидаемо сломается. Если кто-то собирается насиловать флеш подобными экспериментами, он сам себе Злобный Буратино. Ну или ему очень надо и он должен быть готов к укороченному сроку эксплуатации.
А Sertik просто делится своими наработками, как и вы. И уж пытаться обвиноватить кого либо из вас более чем странно. Я вам всем бесконечно благодарен за ваш труд, с удовольствием и гордостью читаю всю ветку и признаюсь, что это любимая моя часть форума.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

От одной только благодарности нашего padarok66 я готов писать скрипты с ещё большим энтузиазмом. :-): Профессионализма и знаний не хватает ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

:global FuncSunriseNew2 do={
:do { :local srise [/tool fetch url=("https://api.sunrise-sunset.org/json\?lat=$1&lng=$2") mode=https as-value output=user]
} on-error={:local srise; :return "ERROR"}
:log info [:len $srise]
:return ($srise->"data")}
:log warning [$FuncSunriseNew2 "56.5312" "38.5209"]

Оказалось это не глюк РОС.
Просто внутри :do {} on-error={} нужно использовать определение и присваивание только глобальным переменным иначе (при локальных) за пределами об этой переменной скрипт уже ничего не знает:

:global FuncSunriseNew2 do={
:do { :global srise [/tool fetch url=("https://api.sunrise-sunset.org/json\?lat=$1&lng=$2") mode=https as-value output=user]
} on-error={:return "ERROR"}
:global srise; :return ($srise->"data")}
:log info [$FuncSunriseNew2 "56.5312" "38.5209"]

Вот так работает нормально.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить