Size: a a a

2020 August 25

СК

Сергей Крутский... in ErlangRus
Taras 🦀 Taraskin
кстати, вопрос насчет телнета и той части эрланга, которую я все еще не полностью понял, не догнал - не доучил...

с одной стороны - в телнета по-умолчания 10 секунд на одну команду,
включая и те функции otp, которые можно напрямую с телнет-железякой использовать, без отдельного драйвера - коннектора —
это вроде как стандарт в телнета

с другой стороны - вот я нашел на гитхабе драйвер-коннектор, форкнул, выбросил зависимость
https://github.com/221V/telnet/blob/master/src/plugins/olt_zte_telnet.erl
(это рабочий модуль для zte железяки)

да вот не совсем доганяю два момента —

1 — в каком порядке ездит ответ телнета между актерами —
после ответа от железяки и перед ответом этого драйвера-коннектора —
так я пока в параллельное программирование не-осень — пока я только в фп-декларативное ок

там вроде есть 1 актер, который соединение, и передает команды-ответы туда-отбратно(на-с железяку(и) ) — или это два отдельные - не суть,
+ там на каждую команду создается отдельный актор (если я правильно работу драйвера понял) —
вопрос — а нафига так сделали??
телнет ведь тупо последовательный..

и как это переписать на последовательное вместо параллельного кода (запилить тру-последовательное — вместо псевдо-параллельной имитации последовательного исполнения) ?
Сообщения протокола телнет могут придти вместе с данными железки, могут отдельно
источник

СК

Сергей Крутский... in ErlangRus
Taras 🦀 Taraskin
вот такое...

и еще эти мусорные \b могут быть и посредине вперемешку((
Символы не мусорные, по ssh ты получишь тоже самое, т. к. эмулируется человек (\b удаляют —more— и лишние переносы строк)
источник

СК

Сергей Крутский... in ErlangRus
Taras 🦀 Taraskin
вот такое...

и еще эти мусорные \b могут быть и посредине вперемешку((
Для обработки вывода cisco (правда ssh) я использовал примерно такой (псевдо)код
Получено RawData (уже без сообщений протокола)
f1(RawData) ->
 Clean = binary:replace(f2(RawData, <<>>), [SW_name, <<"--More--">>, <<"\b">>], <<>>, [global]),
 VList = binary:split(Clean, <<"\r\n">>, [trim_all, global]),
 дальнейшая, построчная обработка VList

f2(Raw, Acc) ->
 case binary:match(Raw, <<"--More--">>) of
   {Pos, _Length} ->
     case отправляем_команду(<<" ">>) of
       {ok, NewRaw} -> f2(NewRaw, <<Acc/binary, (binary:part(Raw, 0, Pos))/binary>>);
       _            -> закрываем соединение в случае ошибки (возвращаем аккумулятор, если нужно или падаем)
     end;
   nomatch ->
     <<Acc/binary, Raw/binary>>
   end;
источник

СК

Сергей Крутский... in ErlangRus
Taras 🦀 Taraskin
кстати, вопрос насчет телнета и той части эрланга, которую я все еще не полностью понял, не догнал - не доучил...

с одной стороны - в телнета по-умолчания 10 секунд на одну команду,
включая и те функции otp, которые можно напрямую с телнет-железякой использовать, без отдельного драйвера - коннектора —
это вроде как стандарт в телнета

с другой стороны - вот я нашел на гитхабе драйвер-коннектор, форкнул, выбросил зависимость
https://github.com/221V/telnet/blob/master/src/plugins/olt_zte_telnet.erl
(это рабочий модуль для zte железяки)

да вот не совсем доганяю два момента —

1 — в каком порядке ездит ответ телнета между актерами —
после ответа от железяки и перед ответом этого драйвера-коннектора —
так я пока в параллельное программирование не-осень — пока я только в фп-декларативное ок

там вроде есть 1 актер, который соединение, и передает команды-ответы туда-отбратно(на-с железяку(и) ) — или это два отдельные - не суть,
+ там на каждую команду создается отдельный актор (если я правильно работу драйвера понял) —
вопрос — а нафига так сделали??
телнет ведь тупо последовательный..

и как это переписать на последовательное вместо параллельного кода (запилить тру-последовательное — вместо псевдо-параллельной имитации последовательного исполнения) ?
Не встречал 10 секунд (может это время подготовки ответа + получение + обработка), если надумаешь делать свое, держи (я собирался делать сервер)
источник

TT

Taras 🦀 Taraskin in ErlangRus
Сергей Крутский
Сообщения протокола телнет могут придти вместе с данными железки, могут отдельно
понял!
источник

TT

Taras 🦀 Taraskin in ErlangRus
Сергей Крутский
Символы не мусорные, по ssh ты получишь тоже самое, т. к. эмулируется человек (\b удаляют —more— и лишние переносы строк)
👍 понял, спасибо!
источник

TT

Taras 🦀 Taraskin in ErlangRus
Сергей Крутский
Не встречал 10 секунд (может это время подготовки ответа + получение + обработка), если надумаешь делать свое, держи (я собирался делать сервер)
да даже в офф доке erlang otp пишет о 10 сек (по дефолту), не только в том драйвере, что я на гитхабе нашел
источник

TT

Taras 🦀 Taraskin in ErlangRus
The "keep alive" activity (that is, that Common Test sends NOP to the server every 10 seconds if the connection is idle) can be enabled or disabled for one particular connection as described here. It can be disabled for all connections using telnet_settings (see ct_telnet).

https://erlang.org/doc/man/unix_telnet.html

Common Test specific layer on top of Telnet client ct_telnet_client.erl.

Use this module to set up Telnet connections, send commands, and perform string matching on the result. For information about how to use ct_telnet and configure connections, specifically for UNIX hosts, see the unix_telnet manual page.

Default values defined in ct_telnet:

   Connection timeout (time to wait for connection) = 10 seconds

   Command timeout (time to wait for a command to return) = 10 seconds

https://erlang.org/doc/man/ct_telnet.html
источник

TT

Taras 🦀 Taraskin in ErlangRus
Сергей Крутский
Для обработки вывода cisco (правда ssh) я использовал примерно такой (псевдо)код
Получено RawData (уже без сообщений протокола)
f1(RawData) ->
 Clean = binary:replace(f2(RawData, <<>>), [SW_name, <<"--More--">>, <<"\b">>], <<>>, [global]),
 VList = binary:split(Clean, <<"\r\n">>, [trim_all, global]),
 дальнейшая, построчная обработка VList

f2(Raw, Acc) ->
 case binary:match(Raw, <<"--More--">>) of
   {Pos, _Length} ->
     case отправляем_команду(<<" ">>) of
       {ok, NewRaw} -> f2(NewRaw, <<Acc/binary, (binary:part(Raw, 0, Pos))/binary>>);
       _            -> закрываем соединение в случае ошибки (возвращаем аккумулятор, если нужно или падаем)
     end;
   nomatch ->
     <<Acc/binary, Raw/binary>>
   end;
у меня примерно так же обработка ответа, только я со списковыми строками, а не с бинарными строками (и больше клауз) :)
источник

TT

Taras 🦀 Taraskin in ErlangRus
Сергей Крутский
Не встречал 10 секунд (может это время подготовки ответа + получение + обработка), если надумаешь делать свое, держи (я собирался делать сервер)
🔥🔥🔥👍 благодарямс)
источник
2020 August 26

ИИ

Иванов Иванов... in ErlangRus
а что надо сделать чтобы rebar _checkouts  работал с симлинками?
источник

E

Elmir in ErlangRus
блиц вопросик подскажите — вот если процесс получил сообщение от объекта, который он монитоит, сообщение {DOWN ....} то надо ли вызвать функцию demonitor? или мониторинг тут уже неявно снялся?
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Elmir
блиц вопросик подскажите — вот если процесс получил сообщение от объекта, который он монитоит, сообщение {DOWN ....} то надо ли вызвать функцию demonitor? или мониторинг тут уже неявно снялся?
А какая разница?
источник

EK

Evgeny Khramtsov in ErlangRus
Elmir
блиц вопросик подскажите — вот если процесс получил сообщение от объекта, который он монитоит, сообщение {DOWN ....} то надо ли вызвать функцию demonitor? или мониторинг тут уже неявно снялся?
не надо
источник

PG

Pig Greenest in ErlangRus
Elmir
блиц вопросик подскажите — вот если процесс получил сообщение от объекта, который он монитоит, сообщение {DOWN ....} то надо ли вызвать функцию demonitor? или мониторинг тут уже неявно снялся?
так процесс уже мертвый, от него больше ничего не придет
источник

E

Elmir in ErlangRus
просто когда я снимаю явно мониторинг после получения DOWN - то функция возвращает true — как будто бы что то там все таки удалилось
источник

ИИ

Иванов Иванов... in ErlangRus
Elmir
просто когда я снимаю явно мониторинг после получения DOWN - то функция возвращает true — как будто бы что то там все таки удалилось
он всегда true The returned value is true unless info is part of OptionList.
источник

ИИ

Иванов Иванов... in ErlangRus
(испльзуй demonitor/2 с опицией info если надо знать)
источник

E

Elmir in ErlangRus
Иванов Иванов
(испльзуй demonitor/2 с опицией info если надо знать)
спасибо
источник

E

Elmir in ErlangRus
все ясно, понял
источник