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: