nocproject.org
02:37
присоединяюсь к тестированию sa-managedobject
02:58
долго же он импортировал репо...
03:42
dvolodin: обновился на ветку sa-managedobject - есть пара замечаний:
03:42
не нашёл возможности линковать / разлинковать интерфейсы вручную
03:42
и поиск в интерфейсах
03:43
когда много сабов очень выручал
03:43
ok
03:44
по линкам пока не доделал
03:44
и вопрос - нормально, что после миграции посыпались пустые письма с темой config has been changed?
03:45
хм... думал, это особенность миграции репо
03:46
Линки, наверное, лучше в панели Links крутить
03:46
сделать кнопочки link и unlink
03:48
ну да, логично... хотя если создаёшь новый линк - то как?
03:49
ну да тогда, просто добавится ещё один комбо с выбором локального интерфейса
03:49
хай
03:50
потестил щас репу
03:50
очень хочется кнопку сравнить а не по выбору из списка
03:50
на аликовском конфиге вкладка солидно так подвисает
03:51
при нажатии на кнопку day/week/month с нехилой вероятностью генерятся фантомные правки. точного алгоритма пок ане понял
03:52
freeseacher: как именно должна работать кнопка "сравнить" ?
03:53
выбираешь две ревизии
03:53
нажимаешь сравнить
03:53
выбор из списка в данном случае не может быть действием
03:53
ибо отклик не быстрый
03:56
сложно сказать
03:56
на juniper'овском конфиге на 12k строк все летает
03:56
лишнее действие
03:56
эм
03:57
я просто сегодня оказался в ситуации с этими формачками когда я все уже выбрал
03:57
а никакого изменения на экране не произошло
03:57
в этот момент я не знал как действовать
03:57
быть может система чего то ждет или грузит
03:57
это никак не ясно
04:15
кстати, по поводу config has been changed
04:15
как можно сделать так, чтобы по одному из MO мне эти письма не летели?
04:15
а то бляха-муха при каждом перестроении ацл прилетают :)
04:16
config diff filter
04:16
rfr hfp lkz 'njuj bpj,htkb
04:16
как раз для этого изобрели
04:30
круто
04:30
надо найти
04:31
пируль это
04:31
примерв правда дать не могу
04:31
а, я думал штатные средства
04:32
ну штатные средства как бы
04:32
но пируль то тебе писать :)
04:34
ох. всё же придётся мне познать, что это за чудо
04:34
дык все ка кобычно просто :)
04:35
кусок кода на питоне
04:35
на входе дифф на выходе дифф без строк которые надо отправлять тебе.
04:35
если выход пустой слаться ничего не будет
04:36
так, а настраивается хотя бы это где?
04:36
полазил, не нашёл
04:36
main -> setup -> pyrule
04:36
там оно пишется
04:36
а, оно централизованно в одном месте
04:36
потом в свойстввах MO привяязывается к железяке
04:37
интерфейс IConfigDiffFilter
04:37
dvolodin, у тя есть право менять топик ?
04:37
их же можно тестить как-то отдельно?
04:37
да
04:38
прям качай pycharm и делай функцию
04:38
04:38
ой
04:38
куда качать, откуда качать?
04:39
pycharm это ide для разработки на питоне
04:39
очень клевая и новичкам сильно помогает
04:40
а есть какая-то дока по написанию пирулей?
04:40
откуда берётся инпут там, и т.д.
04:40
что доступно
04:40
какой-то шаблон что ли
04:40
ой. там же встроенные есть
04:40
был.
04:40
шас не могу найти
04:44
Unbeerab1e, а ссылка чуть выше для тебя как раз :)
04:53
freeseacher, ну я уже открыл, да
04:53
но для пирулей же всё равно специфика ноковская нужна
04:54
ну как неа. вот у меня чистое поле редактора. из него я не узнаю, что нужно написать @pyrule
04:54
из специфики надо что бы перед функцией была строка @pyrule
04:54
и все
04:54
ну вот
04:54
дальше во что мне поступает инпут
04:54
откуда его читать
04:55
или это уже нужно интерфейс читать
04:55
соответствующий
04:55
он поступает тебе как кусок текста
04:56
ну мне же нужно к нему как-то обратиться
04:56
он мне поступает в виде какого-то параметра функции?
04:56
я про эти мелочи
04:57
буду сейчас сравнивать готовые пирули встроенные с их интерфейсами, чтобы уловить взаимосвязь
05:00
ipam поломалсо немного... трейсит, когда тыкаешь на любой адрес
05:01
05:17
да, вижу
05:18
это в sa-managedobject поломалось
05:18
делай issue
05:28
заменил его пока на обычный комбобокс
05:32
freeseacher: проблема с аликами в том, что долго строится diff?
05:33
нужно на это время отображать что-то вроде loading?
05:33
чем бы мне тебе записать скринкаст
05:33
индикацию активного действия надо
05:33
у меня совсе мне быстрый сервер и по этому все может происходить долго.
05:34
впрочем сервер под нормальной нагрузкой будет вести себя так же
05:36
он быстрее выдирается, чем из mercurial'а, или медленнее?
05:42
у меня нет ответа на такой вопрос
05:49
"складывается впечатление" что медленно
05:49
ибо когда страница с дифом грузилась было понятно что грузится страница с дифом
05:49
а щас ничего не понятно :)
05:51
предлагаешь засечь ?
05:51
неплохо было бы
05:51
бенчмарки меня сильно интересуют
05:53
в новой интерфейсе на новой вкладке 7,65 секунды
05:54
на старом страницу увидел через 3,62 секунды
05:54
тот же самый конфиг
05:54
ok
05:54
железо разное?
05:54
только тут еще и список дифов
05:54
да
05:54
сильно разное
05:59
а полная загрузка страницы с боевого сервера сколько идет?
06:00
3,77
06:00
думаю это погрешность моей реакции
06:00
конфиг и там и там одинаковый
06:01
32793 строк на новом, 32817 на старом.
06:02
ok
06:02
будем тюнить
07:06
в принципе, результат объясним
07:06
hg cat тупо читает файл с файловой системы
07:07
GridVCS -- извлекает полный снимок из GridFS
07:17
как показывают бенчмарки того же nginx, раздача статики с GridFS примерно в 2 раза медленнее раздачи из файлов
07:19
teroni: попробуй посмотреть реализацию кнопок day/week/month
07:20
гребаный дслам, присылает сислог для падения линка как link down, и для поднятия динка тоже link down
07:21
dvolodin: ты в смысле диапазон дат пытаешься прописать ?
07:27
там суть в том, что проходится store с ревизиями и находится крайняя по интервалу времени
07:27
не сколько диапазон
07:28
а нахожу первое изменение в диапазоне
07:28
хотя, наверное, нужно первое изменение перед диапазоном
07:29
за день ... от кекущего момента?
07:29
то есть от вчера до сегодня?
07:31
кто знает SA-Run commands сохраняет текущий контекст команды ? можно например создать аксесс лист ?
07:32
vovan888, я не понял вопроса
07:33
а как можно запретить ip_discovery привозить 192.168.0.0/16 ?
07:33
никак, сам хотел бы
07:34
пробую через Run commands создать аксесс лист на хуавее
07:34
но скрипт висит минуту и ничего не выполняет
07:34
нет
07:34
смотри как
07:34
данные в store отсортированы по убыванию
07:34
если мы хотим изменения за день
07:35
то берем 0-ю запись в первом комбо
07:35
и бежим по store, пока дата ревизии не станет меньше текущего значения времени - 24h
07:35
и следующую
07:35
ну да
07:36
вот тут я явно на одну ревизию промахнулся
07:36
можешь алгоритм проверить и потестить
07:36
количество дней я задаю в свойствах кнопки, обработчик у них один
07:37
и там еще нужно при любых изменениях в комбо и при использовании стрелок отжимать кнопку выбора дня/месяца/года
07:37
vovan888, а он висит для любого набора команд, может попробовать по одной их добавлять, сначала одна команда, потом две, на какой заткнется, смотреть что при этой команде в живой консоли происходит
07:39
zi_home: висит на команде "acl 2009", видимо не опознает приглашение ком строки, хотя регексспы вроде правильные в профиле
07:40
vovan888: нужно полный debug-script смотреть
07:40
по фотографии тяжело
07:40
vovan888, ну да, я на это и намекал, чего-то с regexp-ами
07:42
а как запустить дебаг для run commands ?
07:42
скрипт Generic.commands ?
07:44
добавить "{'commands': ['my command']}"
07:44
ну и сам профиль покажи
07:50
чето ошибка - ValueError: need more than 2 values to unpack
07:51
dvolodin, а за notification center можно сейчас поругаться, или подождать пока ты SA доделаешь
07:52
vovan888: просто commands
07:53
без указания профиля Generic, но с указанием имени устройства из НОКа.
07:53
vovan888: или так commands="['my command']"
07:53
он сам всосет правильный профиль, регэкспы из него и выполнит скрипт
07:56
dvolodin, кстати vovan888 очень хотел помочь с инвентори
08:05
12:02:49 - vovan888: висит точно на acl 2009
08:05
08:05
12:04:57 - vovan888: профиль Huawei.VRP
08:11
ну нормально вполне
08:12
dvolodin: это откель взял? t1 = t0 - button.diffRange * 86400 - число
08:12
народ, а кто-нибудь здесь с АДСЛ плотно работает, я плаваю в теории и не могу понять кое-что, вот дслам, в логах он записывает link down, а в сислог приходит loss of frame, а на другом дсламе приходит loss of frame, loss of signal и line is down
08:12
diffRange -- количество дней
08:13
перевожу в секунды
08:13
а, блин
08:13
store.getAt(0).get("ts")
08:13
Wed Sep 18 2013 18:58:31 GMT+0600 (Уральское время (зима))
08:13
store.getAt(1).get("ts")
08:13
Tue Sep 17 2013 14:02:11 GMT+0600 (Уральское время (зима))
08:13
store.getAt(0).get("ts")-store.getAt(1).get("ts")
08:13
104180740
08:13
там же в милисекундах вроде в js
08:13
один день... 100 лямов
08:13
плюсик поставь перед store
08:15
я доки не читаю наверно да...
08:17
Интересно, почему сайт fias.nalog.ru до сих пор не заблокирован за пропаганду наркотиков?
08:17
и гомосексуализма
08:23
dvolodin: будем с ними адресную базу синхронизировать?
08:24
мы сейчас причесываем штук 5 разных адресных баз
08:24
разной степени запущенности
08:27
наших биллингистов бы туда потыкать, чтобы тоже причесали....
08:28
dvolodin: да elapsed = end - start; // time in milliseconds
08:28
ok
08:29
то есть минимум 86400 нужно переделать в 86400000
08:29
и поиск правильной ревизии проверить нужно
08:30
lexus-omsk: у нас масштабнее -- запускаем централизованный адресный реестр
08:30
пока - на макрорегион
08:34
dvolodin: к стати... день - неделя считается всетаки от текущего момента или от последней записи конфига?
08:35
должна считаться...
08:35
у тебя от последней записи..
08:36
86400000 - помогло..
08:38
или всетаки смотреть это как дельту от даты указанной в поле Version
08:43
ufir, ты тут? кажется у вас есть дсламы
08:44
ты все ищешь как инвентори и ГИС в базе хранить?
08:44
я про это говорил
08:44
что надо считать от текущего открытого конфига
08:51
zi_home: неверное так
08:52
неверно
08:52
кнопка -- изменения за день
08:52
как она выглядит я считаю ее кнопка сравнение с те что было вчера/неделю/месяц назад
08:53
ну вот такое у меня видение
08:53
dvolodin, правильней будет у людей спросить, что они думают, как ты или как я
08:53
это опять вопрос юзабилити
08:54
простонапример в 90% случаев у меня будет открыт сегодняшний конфиг, и нажатие этой кнопки даст одинаковый эффект по моей и по твоей схеме
08:55
а оставшиеся 10% по моей схеме получат результат, а по твоей только мат
08:55
но это ты как бы сам смотри
09:00
я бы еще хитрее завернул...
09:00
день неделя месяц - это переключатель для стрелок... :-)
09:09
zi_home: наверное, можно и от базовой ревизии крутить, да
09:37
знаешь в чем засада
09:38
по твоей логике выходит, что будет браться день от последней ревизии
09:38
а не от текущего момента
09:39
или получится странное
09:39
если выбрана последняя ревизия, то день от текущего момента
09:39
если любая другая -- то день от нее
09:40
[v
09:40
хм
09:41
господа, я когда хочу узнать дифы за поеледнюю неделю хочу увидеть не конкретику по ревизиям
09:41
у меня есть железяки которые по полгода не менялись
09:41
я хочу ответить на вопрос "я ничего не пропустил?"
09:41
тоесть имею ввиду физическое время
09:41
а не в ревизиях
09:42
и ответ из разряда ничего не менялось полностью устроит
09:46
freeseacher: не получится...
09:47
эм почему ?
09:47
два диапазона
09:47
dvolodin, я про это и говорю, я открываю или у меня уже открыт какой-то конфиг, я нажимаю на эту кнопку и расчитываю на что? на то что он отсчитает 7 дней назад и сравнит с конфигом на 7 дней старше относительно того что у меня открыт
09:48
сначала ищем все которые были за неделю находим начало выборки находим конец. отображаем в виде дифа
09:48
стрелочки которые вы там еще прикрутили, лично для себя я не встречал для них use case
09:48
но это я, вам может быть и надо
09:49
стрелочки как раз логичны
09:49
просто пройтись по изменениям
09:49
zi_home, все просто надо найти когда "это" появилось
09:50
а по том по аккаунтингу найти "какая су.."
09:50
dvolodin, я не говорю что они не логичны, я говорю что они бесполезны, по крайней мере для меня
09:51
freeseacher, если выполнялся скрипт из нока, то в аккаунтинге ты только увидишь логин нока
09:51
[15:03] teroni: день неделя месяц - это переключатель для стрелок...
09:52
teroni: нет уж
09:52
это немецкий диафильм будет
09:53
зато можно будет ходить по дням - и т.д.
09:54
как раз логично
09:54
когда много правок за день..... лучше листать день... чем все 10 правок
09:54
freeseacher, а ведь для твоей ситуации, нок должен не каждодневную копию записывать, а только когда были изменения тогда все нормально, так ведь раньше и было
09:54
он и хочет увидеть ответ - нету версий..
09:54
zi_home, у меня опрос раз в день
09:55
более частые себя не оправдали
09:55
у меня тоже
09:55
я про то что если за неделю не было изменений
09:55
то в ноке должна быть одна ревизия а не семь
09:56
она и есть одна - ей уже 3 месяца...
09:57
а нет, все правильно, нок и сейчас так ревизии записывает
09:57
16 число, 12 число, 10 число, но собирает и сверяет каждый день
09:59
dvolodin, тебе lexus-omsk уже говорил, но я повторю, зачем нок присылает письмо config changed, если изменений в конфиге не было и тело письма пустое, это плохо
09:59
он вообще всегда так присылает?
10:00
да, каждый день
10:01
по каждому конфигу
10:01
собрал
10:01
прислал
10:01
я только сегодня перешёл на эту ветку, поэтому думал, что это баг переезда в GridFS
10:02
а каждый день по нескольку сотен пустых писем - это совсем не айс
10:03
dvolodin: для чего в noc/sa/script/cli.py сделано # Refine adaprive pattern prompt ?
10:03
у меня в тесте с десяток железок, не сильно напрягает, но это баг, а с сотен тысяч, это нагибалово
10:03
щл
10:03
ok
10:03
нашел, да, косяк
10:07
пофиксил
10:08
vovan888: как для чего?
10:08
запускай commands как ./noc debug-script Huawei.VRP.commands …….
10:08
и все будет
10:09
ну или просто ./noc debug-script commands <железка>
10:09
я нашел где проблемя
10:10
в pattern_prompt в профиле
10:10
только вот для чего этот регексп меняется в процессе выполнения скрипта ?
10:12
проблема в том, что после выполнения команды acl 2009 приглашение меняется на приглашение вида [pe0-acl-basic-2009], тоесть добавляется через дефис текущий acl
10:13
и после преобразования ( # Refine adaprive pattern prompt) этот регексп перестает матчить приглашение и висит ждет
10:15
ну.. у меня на каких-то железяках вообще не работали скрипты, из-за того, что в имени железки мои гавайцы поставили пробел
10:15
а у меня есть дефис в хостнейме, вот теперь думаю как регексп извратить
10:16
ufir, за такое стерелизовать надо
10:17
у меня почти везде дефисы. я все железяки именую так - префикс определяющий оборудование, город/населенный пункт - площадка
10:17
так что без дефисов мне никак ;)
10:18
дефис не проблема, у меня у всех железок 1-3 дефиса, и все ок
10:21
да, простого решения проблемы походу нет...
10:24
vovan888: да, понял про что ты
10:25
пока сделал issue в трекере, попробую придумать решение
10:30
-acl-basic-2009 это кто добавил?
10:31
huawei блок приписал сам?
10:33
hostname у него какой вообще
10:36
ага сам
10:36
hostname pe0
10:52
проверьте кто-нибудь хуавеи с патчем
10:52
10:54
я немного уже поправил регэксп
10:54
в issue
11:55
dvolodin, так вот по поводу get_interfaces. какая там структура, я смотрю на вывод цисковского, и мне это взрывает мозг
11:56
допустим список физических портов, дескрипшен и админ статус я вытащу легко
11:56
а как сабы к ним привязываются?
11:57
xnj nfrjt ащкцфквштп штыефетсу
11:57
что такое forwarding instatce
11:57
для dslam он один
11:57
default
11:57
один из частных случаев fi -- VRF
11:59
такая дикая структура взрывает мне мозг, даже не представляю как это все формировать
14:30
mikevlz, ты тут?
14:32
тут есть кто-нибудь кто в питоне разбирается?
14:35
freeseacher, может быть ты?
14:50
сам разобрался
14:56
хотя вопросы остались
18:47
zi_home: структура как раз вполне прямолинейная
18:47
покажи, что получилось?
18:48
18:49
порнушка такая
18:49
думаю чего еще не хватает
18:49
концовка вполне достаточная
18:49
что на выходе получается?
18:50
ну на выходе чего-то получается, дискавери сработал, базу щаполнил
18:50
description = parse_table(phy_ports[1])[int(phy[0])-1][1] + " " + parse_table(phy_ports[1])[int(phy[0])-1][2]
18:50
это ты сгоряча
18:50
покажи выход, проверим
18:51
и почитай PEP8
18:51
вокруг бинарных операций - пробелы
18:51
вывод скрипта
18:51
что он тебе в итоге отдал
18:52
parse_table(phy_ports[1])
18:52
несколько раз у тебя вызывается
18:52
запомни результат что-ли
18:52
t = parse_table(phy_ports[1])
18:52
и дальше используй t
18:53
да, надо бы, я просто не про это думал, поэтому сделал как проще, я знаю что надо подчищать
18:53
это у тебя последняя запись должна быть?
18:54
[{'forwarding instance': 'default',
18:54
'forwarding_instance': 'default',
18:54
подчеркивание забыл
18:54
а, нет
18:55
и еще -- для профиля функция convert_interface_name определена?
18:55
нет наверное
18:55
чего там конвртировать, одни номера
18:56
да, у тебя DSLAM по ip управляется?
18:56
я не вижу ни одного адреса
18:56
ip в смысле?
18:56
там как бы нет интерфейса управления
18:56
есть ip и влан по которому он доступен
18:57
нет его у тебя
18:57
не вижу SVI с IP в выводе
18:57
ATM и бриджовые порты - все пучком
18:57
надо?
18:57
я помню про него, просто подумал, что он нафиг не нужен
18:58
надо, конечно
18:58
у тебя вкладка L3 пустая будет
18:58
и хрен с ней, у меня на них собственно только л2
18:59
потом в ipam в management сетях будет хоть видно, что адрес занят этой железкой
18:59
ты атм информацию покажешь где-нибудь
18:59
оптимизируй вызовы parse table
18:59
да, покажу
18:59
давай только решим где
18:59
либо вкладкой ATM
18:59
мне подумалось столбец просто подошел бы
19:00
в switchports и в л3
19:00
скрывать его автоматом если железка не атм
19:00
тот самый случай, когда у тебя несколько vpi/vci на порту
19:01
а так -- годный скрипт для начала
19:01
таблицы маков с него еще выдирать научись
19:02
как раз занимался, ты меня выдернул
19:03
dvolodin, вот вопросик, как лучше сделать
19:03
> statistics mac
19:03
Port: 2
19:03
1 : 00:22:15:21:4b:e2
19:03
2 : 02:19:5b:c6:ac:6b
19:03
Port: Enet1
19:03
1 : 00:11:93:d5:33:c0
19:03
2 : 00:16:76:c7:f2:49
19:04
Enet с большой буквы
19:04
как ее уменьшить?
19:04
или это пофигу
19:05
dvolodin, и еще по регекспу
19:05
(?P<mac>[0-9a-z:]*)
19:05
то что в [] как-то можно заменить проще?
19:06
да, для DSL еще полезно будет по порту annex.a, annex.b и прочую ересь
19:06
s = "Enet"
19:06
s.lower()
19:06
на самом деле проще сделай
19:06
нужен convert_interface_name
19:06
и просто выдавай из скрипта то, что прочитал
19:06
оно само сконвертит
19:07
маки лови либо \S+
19:07
либо совсем уж
19:07
(?:[0-9a-f]{2}:){5}:[0-9a-f]{2}
19:09
неа
19:09
я по \S+ делаю
19:10
попробую, сейчас подчищу остальное
19:11
\S+ сработал, да так красивее
19:13
dvolodin, имя для svi имеет какое-то значение?
19:24
теоретически да, но у нас не используется
19:25
это ему бы с топологией хорошо помогло
19:26
у нас они с сетью динамически никак не взаимодействуют, только ручная линковка
19:27
я не парюсь по этому поводу
19:28
dvolodin?
19:28
dvolodin, вопрос, это баг что под селектор не попадает МО при фильтрации по vc domain
19:29
если в домене не вся железка, а только 1 интерфейс
19:29
хм
19:30
пиши issue
19:30
решение, правда, будет совсем чудовищное
19:31
issue сделаю
19:32
dvolodin, есть функция для конвертации маски? 255.255.255.0 в /24
19:32
угу
19:32
lib/ip.py
19:33
IPv4.netmask_to_len()
19:37
как бы еще строку в ip преобразовать
19:40
a = "255.255.0.0"
19:40
из вывода команды у меня на руках только строка
19:41
а какой там может быть ip?
19:41
в смысле?
19:41
> ip show
19:41
interface ip netmask
19:41
--------- --------------- ---------------
19:41
Ethernet 10.0.0.82 255.255.255.0
19:41
default gateway: 10.0.0.1
19:42
вот и все что есть
19:42
а
19:42
тебе нужно 10.0.0.82/24 ?
19:43
ну не мне, а ноку
19:43
я бы и так влил, если он схавает
19:43
IPv4("10.0.0.82", netmask="255.255.255.0").prefix
19:44
ммм, сейчас еще одна дикость родится
19:51
19:54
r = [{"forwarding instance" : "default",
19:55
forwarding_instance
19:55
или можно вообще его убрать и оставить только interfaces
Share this page
Share this page: