nocproject.org
04:41
кто хочет сделать доброе дело?
04:41
нужно реализовать несколько несложных алгоритмов
06:01
уже нет
06:02
ачоващенадата?
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'
06:04
ну эта...
06:04
синтаксис нада уважать.
06:05
оно считает, что a - это список
06:05
а логика тут такая...
06:06
самый внутренний цикл дает тебе список сабинтерфейсов с ipv4 адресами для объекта из аларма в переменную i.
06:06
да, это самое очевидное
06:06
а что выше
06:06
из переменной i выдергивается список адресов ipv4_addresses и складывается в еще один список.
06:07
получается у тебя список в котором каждый элемент - список адресов
06:07
ну вроде не похоже что это список
06:07
*что а это...
06:08
дальше во внешнем цикле у тебя в переменную а дергаются в цикле элементы списка.
06:08
по модели ipv4_addresses - это список.там надо еще один цикл вставить
06:09
а for a in [...] это не тот цикл?
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
если питон поймет о чем я
06:12
как тебя поймет питон если я тебя не понимаю
06:12
короче...
06:14
у тебя получается, что а выбирается из списка: [[127.0.0.1/32,10.20.30.40/24],[12.23.34.45/29],[172.18.23.45/25]]
06:15
вот тебе надо развернуть внутренние списки, чтоб получить не список списков, а список адресов
06:15
я для своего сниппета делал тупо i.ipv4_addresses[0]
06:15
мне нет смысла разворачивать списки
06:15
это будет работать если на Ip-интерфейсах нет алиасов
06:16
я точно знаю что на интерфейсах где включен eigrp у меня нет ctrjylfhb flhtcjd
06:16
тогда да, там в каждом списке будет всего один адрес
06:16
а Володин тебе предложил вариант более универсальный
06:16
и идеологически верный
06:17
ну, наверное, но идеологическим верный вариант это когда ФМ это делает сам а не порно с пирулями
06:23
а новый вариант реально быстрее
07:06
народ а кто профиль может посмотреть, у меня с 7600 не вытаскиваются порты которые в портченел объединены
07:57
хотя странно, get_interfaces его выдернул, а в базе порта нет
07:57
значит что-то неверно отдалось
07:57
не по феншую
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
бред какой-то
08:24
результат не причесан в соответствии с интерфейсом. Вот и бред.
08:24
ну значит это бага нока
08:29
у меня нормально выдернулись портченнелы
08:32
ну дергаются они нормально
08:32
а дискавери игнорит интерфейсы которые в портченеле
08:32
на 7600
08:32
а на каталисте нормаьлно
11:07
надо на кухне на стене повесить баннер
11:07
"не писать парсеры ASN.1 по ночам"
11:07
:)
11:08
dvolodin, что это может быть
11:08
Cannot find aggregated interface 'Po 6'. Skipping Gi 1/4
11:08
и в инвентори нет интерфейса
11:10
и get_interfaces его находит?
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
11:11
а Gi 1/4 что говорит?
11:12
ну вот это он и говорит
11:13
11:13
первое это про gi1/4
11:13
второе про po6
11:14
и это он про все портченелы на этой железке
11:15
а с какого перепляса у него сабы оказались на member'ах port-channel'а?
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
да
11:17
11:17
посмотрите кто-нибудь
11:18
в encode_int не работают нормально тесты на отрицательных числах
11:21
dvolodin: меня там смущает строка 303. После всех пертурбаций чо хоца получить?:
11:22
там int хранится с переменной длиной
11:23
первый старший бит -- знак
11:23
и ты хочешь получить Unsigned int такой, чтоб в хексе он выглядел так же как и signed int (data<0)
11:23
?
11:25
поэтому ты побитово сдвигаешь 1 на столько байт вправо, сколько всего байт в числе.
11:25
а потом прибавляешь к нему исходное число
11:25
и вроде должен получить такой гтышптув ште
11:26
unsigned int
11:27
нет, не так
11:27
в BER ASN.1 кодирование делается в TLV
11:28
для int'а значение может быть пустым, или занимать несколько октетов
11:28
я голодный и поднял сегодня на 5 этаж АТС APC6k + SURT192XLBP. В сумме 160кг.
11:28
5 этаж АТС это как 7 этаж жилого дома.
11:29
не надо на меня ругаться аббревиатурами
11:29
грубо говорвя
11:29
числа от 0 до 127 --- один октет
11:30
от 128 до 0x7fff - два октета
11:30
от 0x8000 до 0x7fffff -- три
11:30
выставлен старший бит
11:30
как и для знакового int'а
11:31
понял в чем прикол?
11:32
для отного октета - надо вычитать значение из 0xFF и добавлять минут
11:32
вот на коммент смотрю и вроде понимаю
11:32
минус
11:32
именно поэтому в 294 строке добавляется нулевой октет, если старший бит выставлен
11:32
ща я попробую своими словами.
11:33
число от 0 до 127 по модулю кодируется в один байт как знаковое число
11:33
краткая вводная, чтобы путаницы не было
11:33
ASN.1 -- это способ записи структур данных
11:34
BER -- способ кодирования структур ASN.1 в компактный бинарный вид
11:34
SNMP всех версий кодирует пакет именно в BER
11:35
там даже сам формат пакетов SNMP описан в виде структуры ASN.1
11:36
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
11:38
а чо оно на отрицательных числах возвращает?
11:38
у тебя
11:38
вот этот конкретный код
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'
11:40
то есть, оно тебе не доложило один байт
11:42
ну может проблема в том, что к 301 строке ты приходишь с d=129, а в питоне 129dec умещается в один байт?
11:44
хотя ответ опять же неожиданный
11:47
lib/python2.7/site-packages/pyasn1/codec/ber/encoder.py
11:47
это в pyasn.1
11:50
можно как reference использовать
11:50
и еще нам нужно сделать кодирование/декодирование типа REAL
11:52
r[0] = chr(ord(r[0]) | 0x80 )
11:52
этим ты что хотел сказать?
11:53
отсюда ты и получаешь свое 0xff вместо 0xff 0x7f
11:56
выставляю старший бит
11:59
не, ну я понял...
12:00
только там наверное, надо помедитировать надо числом, и если мы получили младший бит меньше 0х80, то надо перед ним просто вставить 0xff
12:00
не бит, а байт
12:01
и не младший, а старший %)
12:01
и не выиграл, а проиграл...
12:02
попробуй посмотри, и, можно сравнить с pyasn.1
12:02
проверить просто
12:02
from noc.lib.snmp.ber import *
12:02
BEREncoder().encode_int(-129)
12:03
я сначала лучше поем
12:03
а потом может что и придумаю
12:04
все-равно до 8 вечера торчать в офисе
12:20
лучше быть негром, чем индейцем, как ты :)
12:21
dvolodin: я так понял, это свежий конфиг, ты хочешь выкинуть pyasn
12:22
не совсем правиьно понял
12:22
декодер BER у нас уже был
12:22
его можно включать для парсинга трапов
12:22
но он валится на типе REAL пока
12:23
если доделать кодер - то я спокойно могу собрать GET запросы
12:23
конфиг... коммит, то есть
12:23
угу...
12:23
хорошо
12:30
12:30
вот вам секс с котятами
12:30
побайтный разбор GET-запроса к 2 OID'ам
12:31
сам UDP Payload начинается с <<[SEQENCE LENGTH = 53]
12:39
nocproject
12:39
postupdate
12:39
TypeError: decode() argument 1 must be string, not None
12:40
12:41
сколько красивых значков
12:42
да-да, больше невернокодированых значков!
12:42
да-да, больше невернокодированых значков!
12:42
d
12:42
12:42
dalshe vse po instrukcii
12:43
a post-update vidaet oshibku
12:43
return getpass.getuser().decode(locale.getdefaultlocale()[1])
12:43
hartmy: a zachem ukazival r 7792?
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
12:44
12:44
AttributeError: 'module' object has no attribute 'create_table'
12:44
wot takaya owibka
12:44
upgrade-user: 39: migrate failed
12:48
12:48
вот такая красота
12:49
dvolodin pls translit
12:49
dvolodin: это ты для PerfMan?
12:49
a ok :)
12:51
12:51
python setup.py install ?
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
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
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 ?
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
15:20
ээээ
15:20
я чота не вдуплил...
15:20
а на длинке нет set switchport?
15:21
гы... нету =)
15:22
это круто, я считаю...
15:24
я же оттестить не могу свое творчество :)
15:24
несколькомесячное
15:34
15:35
я там такого треша и угара понаделал
15:35
но по крайней мере у меня и путь позволяет выбрать и понему проверяет доступность влана, и протащит влан.
15:35
путь - прямо по карте?
15:35
ну как...
15:36
выпадающее меню с вариантами самых коротких путей
15:36
выбираешь любой - он подсветится красным
15:37
карту рисует с авторасположением по кругу. На карте только те железки, которые есть хоть на одном пути
15:37
а
15:37
он под трассы vlan'а карты стоит?
15:37
я еще не нинзя-мастер, чтоб по любой карте дать потыкать мышкой и по этому пути протащить влан
15:38
да. Он строит новую карту для отображения найденых путей
15:39
set_switchport стандартный?
15:39
ммм... там все действия с железом через MRT делаются
15:39
так что стандартный
15:39
единственно - я там таки для set_switchport захардкодил некоторые опции. Но их можно вытащить в морду
15:40
имя влана = id, тоже можно вытащить в морду.
15:40
я знаю, я безумен =)
15:41
и я не знаю, как оно поведет себя без кеш-бэкенда
15:41
в VC management не помешает сделать карту vlan'а
15:41
да. это не должно быть сложно
15:41
и, желательно, с топологией STP увязать
15:42
берешь железки из VC Domain, выбирешь из них только те, где на интерфейсах есть влан, строишь карту
15:42
это уже веселее
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]])
15:43
опять вместо своих таблеток бабушкины взял? :)
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 я еще готов поверить
15:44
ну ты же знаешь про число 265?
15:45
я думаю, что False тоже зашифрован в числе Pi. Возможно, именно так, как тебе сейчас сказал SNMP Prober
15:48
я уже BER насобачился декодировать, блин
15:48
прям с экрана
15:48
скоро буду мультики на ковре смотреть
15:49
значит надо тебя добавить в noc/lib/
15:49
from noc.lib.snmp imports dvolodin as dv
15:49
dv.BERDecode(...)
15:50
dv.sdelatPeaceData(….)
15:50
чуть не написал dv.BEERDecode()...
15:50
djdhtvz cgj[dfnbkcz
15:50
вовремя спохватился
15:53
41 0500 84c4 31f5
15:53
вот за каким-то фигом оно считает это - False
15:55
хм
15:55
и правильно считает, кстати :)
15:55
я домой... пятница удалась...
21:40
dvolodin, а ты vyatta не пользовал случаем?
21:41
для тестов в virtualbox и на ESXi как затычку
21:42
а что с ней не так?
21:42
говорят оно в целях ната до 5гб прожевывает легко
21:42
с тюнингом небольшим
21:45
там linux обычный
21:45
и не надо мерять нат по полосе :)
21:46
вылетает, он, обычно, на количестве сессиий и pps
21:46
упор в память и ресурсы cpu
21:47
но я цифру не из лабы а с реального деплоймента на провайдере привел)
21:47
возможно
21:47
мне интереснее, как себя mikrotik ccr на tilera gx поведет на NAT
21:48
хотя, если там DRAM обычный, то никак не поведет :)
21:49
вряд ли они RLDRAM или SRAM поставили, по цене не пролезли бы
21:49
там всего 4 гб разделяемой вроде как
21:50
вятка-автомат, что я цифры приводил выше была с 16гб и 80% ее заполнением
21:51
т е по сессиям микротик скорей всего раньше курить пойдет
21:52
да не в сессиях дело
21:55
на самом деле от сетевых карт еще зависит
21:56
в принципе, я готов поверить в 5G на 12 ядрах с парой интеловских 10G NIC'ов
Share this page
Share this page: