About Forum Blogs NOC Docs Downloads KB Issues Code CI Registration

nocproject.org

#nocproject.org at irc.freenode.net log.
Back to nocproject.org Back to IRC log index
Date: 18.06.2013
dvolodin #
04:41
кто хочет сделать доброе дело?
04:41
нужно реализовать несколько несложных алгоритмов
zi_rus #
05:51
mikevlz|2, ты тут?
mikevlz|2 #
06:01
уже нет
06:02
ачоващенадата?
zi_rus #
06:03
mikevlz|2, да вот володин предложил оптимизацию для моего пируля, а оно не работает, если честно я понятия не имею как это вообще должно работать, а автор убёг
06:03
>>> ips = set(
06:03
... a.split("/", 1)[0] for a in [
06:03
... i.ipv4_addresses
06:03
... for i in SubInterface.objects.filter(
06:03
... managed_object=alarm.managed_object.id, enabled_afi="IPv4")
06:03
... ])
06:03
Traceback (most recent call last):
06:03
File "<console>", line 5, in <module>
06:03
File "<console>", line 2, in <genexpr>
06:03
AttributeError: 'BaseList' object has no attribute 'split'
mikevlz|2 #
06:04
ну эта...
06:04
синтаксис нада уважать.
06:05
оно считает, что a - это список
06:05
а логика тут такая...
zi_rus #
06:05
какая
mikevlz|2 #
06:06
самый внутренний цикл дает тебе список сабинтерфейсов с ipv4 адресами для объекта из аларма в переменную i.
zi_rus #
06:06
да, это самое очевидное
06:06
а что выше
mikevlz|2 #
06:06
из переменной i выдергивается список адресов ipv4_addresses и складывается в еще один список.
06:07
получается у тебя список в котором каждый элемент - список адресов
zi_rus #
06:07
ну вроде не похоже что это список
06:07
*что а это...
mikevlz|2 #
06:08
дальше во внешнем цикле у тебя в переменную а дергаются в цикле элементы списка.
06:08
по модели ipv4_addresses - это список.там надо еще один цикл вставить
zi_rus #
06:09
а for a in [...] это не тот цикл?
mikevlz|2 #
06:10
нет
06:10
сделай k= [ i.ipv4_addresses for ..]
06:11
как там у тебя написано, посмотри что получается
06:11
там надо что-то типа [addr for addr in i.ipv4_addresses for i in SubInterface.objects.filter ...]
06:12
если питон поймет о чем я
zi_rus #
06:12
как тебя поймет питон если я тебя не понимаю
mikevlz|2 #
06:12
короче...
06:14
у тебя получается, что а выбирается из списка: [[127.0.0.1/32,10.20.30.40/24],[12.23.34.45/29],[172.18.23.45/25]]
zi_rus #
06:14
да, наверное
mikevlz|2 #
06:15
вот тебе надо развернуть внутренние списки, чтоб получить не список списков, а список адресов
zi_rus #
06:15
я для своего сниппета делал тупо i.ipv4_addresses[0]
06:15
мне нет смысла разворачивать списки
mikevlz|2 #
06:15
это будет работать если на Ip-интерфейсах нет алиасов
zi_rus #
06:16
я точно знаю что на интерфейсах где включен eigrp у меня нет ctrjylfhb flhtcjd
mikevlz|2 #
06:16
тогда да, там в каждом списке будет всего один адрес
zi_rus #
06:16
ок я понял
mikevlz|2 #
06:16
а Володин тебе предложил вариант более универсальный
06:16
и идеологически верный
zi_rus #
06:17
ну, наверное, но идеологическим верный вариант это когда ФМ это делает сам а не порно с пирулями
06:23
а новый вариант реально быстрее
07:06
народ а кто профиль может посмотреть, у меня с 7600 не вытаскиваются порты которые в портченел объединены
07:57
хотя странно, get_interfaces его выдернул, а в базе порта нет
mikevlz|2 #
07:57
значит что-то неверно отдалось
07:57
не по феншую
zi_rus #
07:57
даже двух портов
07:57
ну как неверно когда он же смог их распарсить
07:58
и показать
07:58
а в инвентори их нет
07:58
для каталиста он нормально сработал
07:58
проблема с 7600
07:59
вот что зараза пишет
07:59
2013-06-18 11:58:57,342 [inv.discovery: interface_discovery(bb-dzer)] Cannot find aggregated interface 'Po 6'. Skipping Gi 1/4
08:01
хотя на вкладке lagg они есть
08:05
get_portchannel их нормально выдергивает
08:06
бред какой-то
mikevlz|2 #
08:24
результат не причесан в соответствии с интерфейсом. Вот и бред.
zi_rus #
08:24
ну значит это бага нока
ufir #
08:29
у меня нормально выдернулись портченнелы
zi_rus #
08:32
ну дергаются они нормально
08:32
а дискавери игнорит интерфейсы которые в портченеле
08:32
на 7600
08:32
а на каталисте нормаьлно
dvolodin #
11:07
надо на кухне на стене повесить баннер
11:07
"не писать парсеры ASN.1 по ночам"
11:07
:)
zi_rus #
11:08
dvolodin, что это может быть
11:08
Cannot find aggregated interface 'Po 6'. Skipping Gi 1/4
11:08
и в инвентори нет интерфейса
dvolodin #
11:08
где?
zi_rus #
11:09
в логах дискавери
dvolodin #
11:09
а Po 6 есть?
zi_rus #
11:09
есть
dvolodin #
11:10
и get_interfaces его находит?
zi_rus #
11:10
да
11:11
{'admin_status': True,
11:11
'aggregated_interface': 'Po 6',
11:11
'description': 'aggr-118-link-2',
11:11
'enabled_protocols': ['LACP'],
11:11
dvolodin #
11:11
а Gi 1/4 что говорит?
zi_rus #
11:12
ну вот это он и говорит
11:13
dvolodin, вот http://pastebin.com/9XG5Zfew
11:13
первое это про gi1/4
11:13
второе про po6
11:14
и это он про все портченелы на этой железке
dvolodin #
11:15
а с какого перепляса у него сабы оказались на member'ах port-channel'а?
zi_rus #
11:15
тебе виднее
dvolodin #
11:16
cisco?
zi_rus #
11:16
interface GigabitEthernet1/4
11:16
description aggr-118-link-2
11:16
no ip address
11:16
no snmp trap link-status
11:16
mls qos trust dscp
11:16
channel-group 6 mode active
11:16
да
dvolodin #
11:17
https://bitbucket.org/nocproject/noc/commits/b8486e515ae2c2f33d03e57b2492718be39c320b
11:17
посмотрите кто-нибудь
11:18
в encode_int не работают нормально тесты на отрицательных числах
mikevlz|2 #
11:21
dvolodin: меня там смущает строка 303. После всех пертурбаций чо хоца получить?:
dvolodin #
11:22
там int хранится с переменной длиной
11:23
первый старший бит -- знак
mikevlz|2 #
11:23
и ты хочешь получить Unsigned int такой, чтоб в хексе он выглядел так же как и signed int (data<0)
11:23
?
dvolodin #
11:24
да
mikevlz|2 #
11:25
поэтому ты побитово сдвигаешь 1 на столько байт вправо, сколько всего байт в числе.
11:25
а потом прибавляешь к нему исходное число
11:25
и вроде должен получить такой гтышптув ште
11:26
unsigned int
dvolodin #
11:27
нет, не так
11:27
в BER ASN.1 кодирование делается в TLV
11:28
для int'а значение может быть пустым, или занимать несколько октетов
mikevlz|2 #
11:28
я голодный и поднял сегодня на 5 этаж АТС APC6k + SURT192XLBP. В сумме 160кг.
11:28
5 этаж АТС это как 7 этаж жилого дома.
11:29
не надо на меня ругаться аббревиатурами
dvolodin #
11:29
грубо говорвя
11:29
числа от 0 до 127 --- один октет
11:30
от 128 до 0x7fff - два октета
11:30
от 0x8000 до 0x7fffff -- три
mikevlz|2 #
11:30
а отрицательные?
dvolodin #
11:30
выставлен старший бит
11:30
как и для знакового int'а
11:31
понял в чем прикол?
11:32
для отного октета - надо вычитать значение из 0xFF и добавлять минут
mikevlz|2 #
11:32
вот на коммент смотрю и вроде понимаю
dvolodin #
11:32
минус
11:32
именно поэтому в 294 строке добавляется нулевой октет, если старший бит выставлен
mikevlz|2 #
11:32
ща я попробую своими словами.
dvolodin #
11:33
http://luca.ntop.org/Teaching/Appunti/asn1.html
mikevlz|2 #
11:33
число от 0 до 127 по модулю кодируется в один байт как знаковое число
dvolodin #
11:33
краткая вводная, чтобы путаницы не было
11:33
ASN.1 -- это способ записи структур данных
11:34
BER -- способ кодирования структур ASN.1 в компактный бинарный вид
11:34
SNMP всех версий кодирует пакет именно в BER
11:35
там даже сам формат пакетов SNMP описан в виде структуры ASN.1
11:36
http://luca.ntop.org/Teaching/Appunti/asn1.html -- пункт 5.7
11:36
как кодировать ште
11:36
int
11:37
02 01 00 в BER так рашифровывается
11:37
тип -- int, длина - 1, значение - 0
11:38
02 02 00 80 -- тип - int, длина 2, значение 128
mikevlz|2 #
11:38
а чо оно на отрицательных числах возвращает?
11:38
у тебя
11:38
вот этот конкретный код
dvolodin #
11:39
./noc test --reuse-db noc.lib.snmp.ber --beef-filter=no
11:39
Failed example:
11:39
BEREncoder().encode_int(-129)
11:39
Expected:
11:40
'\02\x01\xff\7f'
11:40
Got:
11:40
'\x02\x01\xff'
mikevlz|2 #
11:40
то есть, оно тебе не доложило один байт
11:42
ну может проблема в том, что к 301 строке ты приходишь с d=129, а в питоне 129dec умещается в один байт?
11:44
хотя ответ опять же неожиданный
dvolodin #
11:47
lib/python2.7/site-packages/pyasn1/codec/ber/encoder.py
11:47
это в pyasn.1
11:50
можно как reference использовать
11:50
и еще нам нужно сделать кодирование/декодирование типа REAL
mikevlz|2 #
11:52
r[0] = chr(ord(r[0]) | 0x80 )
11:52
этим ты что хотел сказать?
11:53
отсюда ты и получаешь свое 0xff вместо 0xff 0x7f
dvolodin #
11:56
выставляю старший бит
mikevlz|2 #
11:59
не, ну я понял...
12:00
только там наверное, надо помедитировать надо числом, и если мы получили младший бит меньше 0х80, то надо перед ним просто вставить 0xff
12:00
не бит, а байт
12:01
и не младший, а старший %)
12:01
и не выиграл, а проиграл...
dvolodin #
12:02
попробуй посмотри, и, можно сравнить с pyasn.1
12:02
проверить просто
12:02
from noc.lib.snmp.ber import *
12:02
BEREncoder().encode_int(-129)
mikevlz|2 #
12:03
я сначала лучше поем
12:03
а потом может что и придумаю
12:04
все-равно до 8 вечера торчать в офисе
zi_rus #
12:04
негр
mikevlz|2 #
12:20
лучше быть негром, чем индейцем, как ты :)
12:21
dvolodin: я так понял, это свежий конфиг, ты хочешь выкинуть pyasn
dvolodin #
12:22
не совсем правиьно понял
12:22
декодер BER у нас уже был
12:22
его можно включать для парсинга трапов
12:22
но он валится на типе REAL пока
12:23
если доделать кодер - то я спокойно могу собрать GET запросы
mikevlz|2 #
12:23
конфиг... коммит, то есть
dvolodin #
12:23
да, коммит свежий
mikevlz|2 #
12:23
угу...
12:23
хорошо
dvolodin #
12:30
http://pastie.org/8055250
12:30
вот вам секс с котятами
12:30
побайтный разбор GET-запроса к 2 OID'ам
12:31
сам UDP Payload начинается с <<[SEQENCE LENGTH = 53]
hartmy #
12:39
nocproject
12:39
postupdate
12:39
TypeError: decode() argument 1 must be string, not None
12:40
mikevlz|2 #
12:41
сколько красивых значков
hartmy #
12:42
,
12:42
mikevlz|2 #
12:42
да-да, больше невернокодированых значков!
hartmy #
12:42
да-да, больше невернокодированых значков!
12:42
d
mikevlz|2 #
12:42
=)
hartmy #
12:42
ja sdelal hg clone -r 7792 http://hg.nocproject.org/noc
12:42
dalshe vse po instrukcii
12:43
a post-update vidaet oshibku
12:43
return getpass.getuser().decode(locale.getdefaultlocale()[1])
mikevlz|2 #
12:43
hartmy: a zachem ukazival r 7792?
hartmy #
12:43
TypeError: decode() argument 1 must be string, not None
12:43
a poslednaja toge ne vstaet
12:43
na forume est' pohogaja oshibka
12:44
w8
mikevlz|2 #
12:44
stavish novij?
hartmy #
12:44
http://forum.nocproject.org/index.php?topic=206.0
12:44
AttributeError: 'module' object has no attribute 'create_table'
12:44
wot takaya owibka
12:44
upgrade-user: 39: migrate failed
mikevlz|2 #
12:45
hz...
hartmy #
12:45
i ja :(
dvolodin #
12:48
https://bitbucket.org/nocproject/noc/src/20b32183164ea8ac28334d56ad0d146997e6ccdd/lib/snmp/get.py?at=default
12:48
вот такая красота
hartmy #
12:49
dvolodin pls translit
mikevlz|2 #
12:49
dvolodin: это ты для PerfMan?
dvolodin #
12:49
да
12:49
:)
mikevlz|2 #
12:49
hartmy: on o svoem
hartmy #
12:49
a ok :)
12:51
posle togo kak ja sdell hg clone http://hg.nocproject.org/noc noc 4to dalshe ?
12:51
python setup.py install ?
mikevlz|2 #
12:52
hartmy: cp etc/upgrade.default etc/upgrade.conf && vi etc/upgrade.conf
12:52
otredaktiruesh, potom zapuskaesh scripts/upgrade
12:53
pri etom nado ustanovit pip i virtualenv
12:53
vse ostalnoe dolzhen ustanovit upgrade
hartmy #
12:53
pip i virtual ustanovlen , upgrade zapustil
12:54
gdem
12:58
toge samoe
12:58
File "manage.py", line 44, in <module>
12:58
execute_from_command_line(sys.argv)
13:00
http://pastebin.com/XgiDWEW8
13:11
moget eto kakto pomoget, ja poustanavlival vse trebuemie programmi is packagey
13:11
freebsd 9.1
13:11
moget nado iz portov vse stavit ?
dvolodin #
13:37
красота
13:37
и парсер ответа сошелся
13:40
GetResponse(community='test', request_id=114743880, error_status=0, error_index=0, varbinds=[['1.3.6.1.2.1.1.5.0', 'mt111']])
13:48
итого, SNMP пробы у нас тоже есть
13:49
по логике вещей, помимо питоновских классов можно сделать еще и птичий язык для описания проб в JSON
13:50
и класть по аналогии с коллекциями FM
13:50
хотя бы в формате -- название пробы - oid
mikevlz|2 #
15:20
ээээ
15:20
я чота не вдуплил...
15:20
а на длинке нет set switchport?
15:21
гы... нету =)
15:22
это круто, я считаю...
15:24
я же оттестить не могу свое творчество :)
15:24
несколькомесячное
15:34
dvolodin: NOC-1001
15:35
я там такого треша и угара понаделал
dvolodin #
15:35
:)
mikevlz|2 #
15:35
но по крайней мере у меня и путь позволяет выбрать и понему проверяет доступность влана, и протащит влан.
dvolodin #
15:35
путь - прямо по карте?
mikevlz|2 #
15:35
ну как...
15:36
выпадающее меню с вариантами самых коротких путей
15:36
выбираешь любой - он подсветится красным
15:37
карту рисует с авторасположением по кругу. На карте только те железки, которые есть хоть на одном пути
dvolodin #
15:37
а
15:37
он под трассы vlan'а карты стоит?
mikevlz|2 #
15:37
я еще не нинзя-мастер, чтоб по любой карте дать потыкать мышкой и по этому пути протащить влан
15:38
да. Он строит новую карту для отображения найденых путей
dvolodin #
15:39
set_switchport стандартный?
mikevlz|2 #
15:39
ммм... там все действия с железом через MRT делаются
15:39
так что стандартный
15:39
единственно - я там таки для set_switchport захардкодил некоторые опции. Но их можно вытащить в морду
dvolodin #
15:40
ага
mikevlz|2 #
15:40
имя влана = id, тоже можно вытащить в морду.
15:40
я знаю, я безумен =)
15:41
и я не знаю, как оно поведет себя без кеш-бэкенда
dvolodin #
15:41
в VC management не помешает сделать карту vlan'а
mikevlz|2 #
15:41
да. это не должно быть сложно
dvolodin #
15:41
и, желательно, с топологией STP увязать
mikevlz|2 #
15:42
берешь железки из VC Domain, выбирешь из них только те, где на интерфейсах есть влан, строишь карту
15:42
это уже веселее
dvolodin #
15:42
что-то я не то слопал с утра
15:42
SNMP проба выдала
15:42
GetResponse(community='test', request_id=766170013, error_status=0, error_index=0, varbinds=[['1.3.6.1.2.1.2.2.1.10.1', False]])
mikevlz|2 #
15:43
опять вместо своих таблеток бабушкины взял? :)
dvolodin #
15:43
ага
15:43
1.3.6.1.2.1.2.2.1.10.1 = Counter32: 2225364584
15:43
а на самом деле, оно такое
15:43
либо NOC что-то знает, но от меня скрывает, либо я сам себя где-то наколол
15:44
False == 2225364584
15:44
в 42 == True я еще готов поверить
mikevlz|2 #
15:44
ну ты же знаешь про число 265?
15:45
я думаю, что False тоже зашифрован в числе Pi. Возможно, именно так, как тебе сейчас сказал SNMP Prober
dvolodin #
15:48
я уже BER насобачился декодировать, блин
15:48
прям с экрана
15:48
скоро буду мультики на ковре смотреть
mikevlz|2 #
15:49
значит надо тебя добавить в noc/lib/
15:49
from noc.lib.snmp imports dvolodin as dv
15:49
dv.BERDecode(...)
dvolodin #
15:50
dv.sdelatPeaceData(….)
mikevlz|2 #
15:50
чуть не написал dv.BEERDecode()...
15:50
djdhtvz cgj[dfnbkcz
15:50
вовремя спохватился
dvolodin #
15:53
41 0500 84c4 31f5
15:53
вот за каким-то фигом оно считает это - False
15:55
хм
15:55
и правильно считает, кстати :)
mikevlz|2 #
15:55
я домой... пятница удалась...
dvolodin #
21:38
https://eos.aristanetworks.com/2012/12/building-a-virtual-lab-with-arista-veos-and-virtualbox-2/
_4ePTeHok #
21:40
dvolodin, а ты vyatta не пользовал случаем?
dvolodin #
21:41
для тестов в virtualbox и на ESXi как затычку
21:42
а что с ней не так?
_4ePTeHok #
21:42
говорят оно в целях ната до 5гб прожевывает легко
21:42
с тюнингом небольшим
dvolodin #
21:45
там linux обычный
21:45
и не надо мерять нат по полосе :)
21:46
вылетает, он, обычно, на количестве сессиий и pps
_4ePTeHok #
21:46
упор в память и ресурсы cpu
21:47
но я цифру не из лабы а с реального деплоймента на провайдере привел)
dvolodin #
21:47
возможно
21:47
мне интереснее, как себя mikrotik ccr на tilera gx поведет на NAT
_4ePTeHok #
21:48
=)
dvolodin #
21:48
хотя, если там DRAM обычный, то никак не поведет :)
21:49
вряд ли они RLDRAM или SRAM поставили, по цене не пролезли бы
_4ePTeHok #
21:49
там всего 4 гб разделяемой вроде как
21:50
вятка-автомат, что я цифры приводил выше была с 16гб и 80% ее заполнением
21:51
т е по сессиям микротик скорей всего раньше курить пойдет
dvolodin #
21:52
да не в сессиях дело
21:55
на самом деле от сетевых карт еще зависит
21:56
в принципе, я готов поверить в 5G на 12 ядрах с парой интеловских 10G NIC'ов
Tweet
Share this page
Share this page: Tweet