Sertik писал(а): ↑14 сен 2023, 10:04
Всё очень круто и симпатично ! Мне кажется Вы подсмотрели логику модульности у Brook ну и свою лепту внесли.
Не могли бы Вы описать на примере логику построения Ваших модулей ? Думаю всем будет интересно и полезно.
Наверное лучше в отдельном топике.
Как я понял, каждый модуль у Вас представлен отдельным скриптом репозитория, который парсится в функцию, когда он нужен.
Нет, у Brook, на мой взгляд (для меня) сложные коды, а на модульность заставил в свое время перейти знакомый программист.
Про модульность все просто, появляется какая либо необходимость, пишется скрипт только под эту необходимость, дальше читаем там где нам это нужно.
ниже пример
сбор данных об LTE c RBSXT Код: Выделить всё
# Name: fnStatusLTE
# Description: Get LTE-modem status
:set $infoCellular [/interface lte monitor lte1 once as-value]
:set $infoStatus [/interface get lte1]
:set $RSRQ ($infoCellular->"rsrq")
:set $RSRQ (($RSRQ/10) . "." . [:pick $RSRQ ([:len $RSRQ]-1) [:len $RSRQ]])
:set $StatusLTE ("Cellular info%0A\
Operator: $($infoCellular->"current-operator")%0A\
Access Technology: $($infoCellular->"access-technology")%0A\
EARFCN: $($infoCellular->"earfcn")%0A\
Session Uptime: $($infoCellular->"session-uptime")%0A\
RSRP: $($infoCellular->"rsrp") dBm%0A\
SINR: $($infoCellular->"sinr") dB%0A\
RSRQ: $RSRQ dB%0A\
CQI: $($infoCellular->"cqi")%0A\
%0A\
Status/Traffic info%0A\
Last Link Down: $($infoStatus->"last-link-down-time")%0A\
Last Link Up: $($infoStatus->"last-link-up-time")%0A\
Link Downs: $($infoStatus->"link-downs")%0A\
Tx/Rx: $(($infoStatus->"tx-byte")/1048576)MiB/$(($infoStatus->"rx-byte")/1048576)MiB%0A")
:return $StatusLTE
# End
его уже забираем куда нам надо,
а вот такой командой я получаю в одном из скриптов состояние провайдеров
Код: Выделить всё
:foreach ISP in=[[$fnParse script="fnListISP"]] do={
:set $listISP ($listISP . ($ISP->"name") . ": " . ($ISP->"status") . "%0A")
}
ну и все это делалось естественно под телегу
перевод на русский я утащил отсюда и тоже вынес его в отдельный модуль.
Код: Выделить всё
# Name: fnEngToRu
# Description: Function Converter of Russian characters for sending in Telegram
:set $string $1;
# table of the codes of Russian letters UTF8
:local rsimv [:toarray {"À"="D090"; "Á"="D091"; "Â"="D092"; "Ã"="D093"; "Ä"="D094"; "Å"="D095"; "Æ"="D096"; "Ç"="D097"; "È"="D098"; "É"="D099"; "Ê"="D09A"; "Ë"="D09B"; "Ì"="D09C"; "Í"="D09D"; "Î"="D09E"; "Ï"="D09F"; "Ð"="D0A0"; "Ñ"="D0A1"; "Ò"="D0A2"; "Ó"="D0A3"; "Ô"="D0A4"; "Õ"="D0A5"; "Ö"="D0A6"; "×"="D0A7"; "Ø"="D0A8"; "Ù"="D0A9"; "Ú"="D0AA"; "Û"="D0AB"; "Ü"="D0AC"; "Ý"="D0AD"; "Þ"="D0AE"; "ß"="D0AF"; "à"="D0B0"; "á"="D0B1"; "â"="D0B2"; "ã"="D0B3"; "ä"="D0B4"; "å"="D0B5"; "æ"="D0B6"; "ç"="D0B7"; "è"="D0B8"; "é"="D0B9"; "ê"="D0BA"; "ë"="D0BB"; "ì"="D0BC"; "í"="D0BD"; "î"="D0BE"; "ï"="D0BF"; "ð"="D180"; "ñ"="D181"; "ò"="D182"; "ó"="D183"; "ô"="D184"; "õ"="D185"; "ö"="D186"; "÷"="D187"; "ø"="D188"; "ù"="D189"; "ú"="D18A"; "û"="D18B"; "ü"="D18C"; "ý"="D18D"; "þ"="D18E"; "ÿ"="D18F"; "¨"="D001"; "¸"="D191"; "¹"="0023"; " "="0020"; "&"="0026"; "^"="005E"}]
# encoding of the symbols and àssembly line
:for i from=0 to=([:len $string]-1) do={
:local keys [:pick $string $i (1+$i)]
:local key ($rsimv->$keys)
:if ([:len $key]!=0) do={
:set $code ("%" . "$[:pick ($rsimv->$keys) 0 2]" . "%" . "$[:pick ($rsimv->$keys) 2 4]")
:if ([pick $code 0 3] = "%00") do={
:set $code [:pick $code 3 6]
}
} else={
:set $code $keys
}
:set $StrTele ($StrTele . $code)
}
:return $StrTele;
# End
Концепция такая, что сокращаем любой скрипт до минимально возможных размеров, и обращаемся по необходимости, проще писать, и искать ошибки