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: 01.10.2014
TSergey_ #
02:21
может кто-то про snmp-трапы рассказать?
03:17
dvolodin: привет
03:18
ip в трапе прилетает так "=C0=A8=00=0B"
03:19
в правиле тип "type": "ip_address"
03:20
соответственно при классификации "Cannot decode variable 'ip'. Invalid ip_address: '\xc0\xa8\x00\x0b'"
03:21
посоветуй, на каком этапе это дело можно конвертнуть
03:22
это 192.168.0.11
03:36
а еше про мак, json ивента:
03:36
"1.3.6.1.4.1.171.12.23.5.2.2": "=8C=89=A5=8Cb=8B",
03:36
но в логах коммутатора 8C-89-A5-8C-62-8B, и правило разобрало "mac: 8c:89:a5:8c:62:8b"
03:36
как из "A5=8Cb=8B" конвертнулось "a5:8c:62:8b"?
03:36
правильно ли отображается json?
03:37
во вкладе Data ивента тоже "1.3.6.1.4.1.171.12.23.5.2.2": "=8C=89=A5=8Cb=8B"
03:43
или вот: в логах 50-67-F0-17-01-15, в data и json ивента: Pg=F0=17=01=15, в переменную берется мак 50:67:f0:17:01:15
03:46
эххх
04:04
в монге "=00=E0L\t=11=B4", в data и json не учитывается \t
04:16
"=8C=89=A5=8Cb=8B" из монги преобразуется в "8c:89:a5:8c:62:8b" гед лежит метод, который приводит разбирает в мак?
04:16
*где
04:18
MACAddressParameter()
04:41
(noc / sa / interfaces / base.py)
dvolodin #
05:08
да, он
TSergey_ #
05:10
почему MACAddressParameter().clean("=8C=89=A5=8Cb=8B") дает ошибку, в классификатор нормально прожевывает это в мак?
zi_rus #
05:14
TSergey_, там преобразователь используется bin_to_mac
05:14
в правиле скорее всего написано mac__bin_to_mac
TSergey_ #
05:15
в правиле "type": "mac"
05:15
точнее в классе
zi_rus #
05:15
не, я про правило
05:15
конкретное
05:15
в классе конечно просто мак
05:15
в правиле прописано преобразование
TSergey_ #
05:15
в правиле я просто указа тип переменной
05:15
*указал
zi_rus #
05:15
ну вот поэтому не работает
TSergey_ #
05:16
"value_re": "^(?P<mac>.+)$"
05:16
не, как раз мак прожевывается
zi_rus #
05:16
"key_re": "^CISCO-PORT-SECURITY-MIB::cpsIfSecureLastMacAddress\\.\\d+$",
05:16
"value_re": "^(?P<mac__bin_to_mac>\\S+)$"
05:17
а в классе
05:17
"name": "mac",
05:17
"description": "MAC Address",
05:17
"type": "mac",
05:17
"required": false
TSergey_ #
05:18
да в том-то и дело, что в классе "type": "mac", в правиле "value_re": "^(?P<mac>.+)$", в трапе "=8C=89=A5=8Cb=8B"
05:18
классификатор выдергивает мак: 8c:89:a5:8c:62:8b
05:18
как?
zi_rus #
05:18
нет
05:19
если в трапе =8С...
05:19
надо писать не mac
05:19
а применять преобразователь
05:19
__bin_to_mac
TSergey_ #
05:19
прочитай внимательно, пожалуйста
05:19
классификатор корректно берет мак
05:19
а я не понимаю как это
zi_rus #
05:20
прочитал, у тебя regexp не соответствует трапу
05:20
и я не понимаю в таком случае чего ты не понимаешь
TSergey_ #
05:20
на каком этапе преобразовывается "=8C=89=A5=8Cb=8B" в "8c:89:a5:8c:62:8b"
05:20
MACAddressParameter не смог это прожевать
zi_rus #
05:21
может там костыль или еще что
05:21
в любом случае regexp надо менять
TSergey_ #
05:21
zi_rus: вопрос где еще делается преобразование
zi_rus #
05:22
для фм все преобразования должны быть в правиле. в класс должны приезжать уже готовые переменные
TSergey_ #
05:22
вот это в каком правиле?
05:22
"value_re": "^(?P<mac__bin_to_mac>\\S+)$"
zi_rus #
05:23
port security (snmp) для циски
TSergey_ #
05:25
"zi_rus: для фм все преобразования должны быть в правиле" да я согласен же, но как это делается тогда?
05:25
в классе "type": "mac", в правиле "value_re": "^(?P<mac>.+)$", в трапе "=8C=89=A5=8Cb=8B"
05:25
классификатор выдергивает мак: 8c:89:a5:8c:62:8b
zi_rus #
05:25
где ты увидел что классификатор выдергивает?
05:26
у тебя сообщение классифицировалось?
05:26
CISCO-PORT-SECURITY-MIB::cpsIfSecureLastMacAddress.10101 =00=15XD=D8=10
05:26
mac 00:15:58:44:D8:10 MAC Address
05:27
вот так трап классифицировался и преобразовал мак
TSergey_ #
05:27
я увидел кога в правиле нажал тестировать и указал id ивента
05:28
у меня оно не классифицируется потому что ip в трапе вот такой "=00=00=00=00"
05:29
вот и разбираюсь, где преобразовывается тип
05:29
добрался до MACAddressParameter и IPv4Parameter
05:30
но вот это что такое? <mac__bin_to_mac> где есть перечень таких параметров, доступных из правила?
zi_rus #
05:34
TSergey_, /opt/noc/fm/classifier/rule.py
TSergey_ #
05:35
не поверишь, я как раз в нем
05:35
и нет там "mac__bin_to_mac"
zi_rus #
05:36
def fixup_bin_to_mac(self, v):
05:36
mac это имя переменной
05:36
bin_to_mac - функция
TSergey_ #
05:37
ага, и функции "bin_to_mac" тоже нет
zi_rus #
05:37
def fixup_bin_to_mac(self, v):
TSergey_ #
05:38
там только ":" подставляются
05:45
как-то неочевидно с преобразованием типов, вот вопросы
05:45
1. где вычищается тип mac, кроме MACAddressParameter
05:45
2. где можно добавить приведение к типу IPv4Parameter
05:49
ну и по мелочи: http://pastebin.com/yfbs4DhY, могут ли быть такие oid? это длинк такое засылает или в ноке есть какая-то еще превичная обработка трапа
05:49
*первичная
05:50
http://oid-info.com/get/ не знает вовсе таких оидов
05:50
обычно все начинается с 1.3.6, а тут совсем не так
ss_ #
05:51
Хай
TSergey_ #
05:51
и тебе хай
ss_ #
05:51
Есть вопрос по регэекспу зosix
05:52
posix
05:53
ae26.0 ae40 ae3 ae0.0 вот такие есть интерфейсе на Juniper как выдернуть только ae40 ae3
05:53
^ae[0-9][0-9]$ но вот как сделать так чтобы одна из цифр была необязательной
dvolodin #
05:54
Я переделал синхронизацию DNS, выпилил нафиг STOMP, noc-sync теперь забирает все по HTTP полностью по аналогии с noc-probe
05:54
даже по тому же протоколу
ss_ #
05:55
STOMP нафиг это гуд)
dvolodin #
05:55
ss_: ^ae(40|3)
ss_ #
05:55
dvolodin, спасибо но номера интефейсоф могут быть от 0 до 99 например
05:55
сабы не нужны
dvolodin #
05:55
дотестирую BIND сейчас, закоммичу ветку feature/graphite/common-sync
05:56
^ae\d{1,2}$
HaLVeR #
05:56
а не пора ли в девелоп слить
dvolodin #
05:56
HaLVeR: не пора
ss_ #
05:57
dvolodin, спасибо!
HaLVeR #
05:57
а то у нас комитты не относящиеся к графиту почему то в нем
dvolodin #
05:57
новая синхронизация, в принципе, позволит и DHCP и RADIUS заливать
TSergey_ #
05:57
да, и видимо поэтому у меня не открывается FM\MIB
dvolodin #
05:58
и там нет DNS'ных job'ов, которые постоянно перетряхивают зоны
TSergey_ #
05:58
dvolodin: как правильней добавить приведение к типу IPv4Parameter в fm-правиле?
e_zombie #
05:59
,,
dvolodin #
05:59
TSergey_: (?P<ip__ipv4_address>\S+).....
TSergey_ #
06:00
неожиданно
dvolodin #
06:00
в fm/classifier/__init__.py смотри decode_*
TSergey_ #
06:02
скажи, а вообще такое "=C0=A8=00=0C" в айпи можно завернуть? или писать конвертер?
dvolodin #
06:04
должно развернуть
06:04
quoted-printable вообще по-хорошему убрать нужно
TSergey_ #
06:04
не, не съело
dvolodin #
06:04
и сделать нормальный Binary
TSergey_ #
06:04
вот и вопрос, как классифер такое разгребает для мака?
06:05
"=8C=89=A5=8Cb=8B" --- 8c:89:a5:8c:62:8b
06:05
тут в трапе даже не шесть кусков
06:06
а мак правильно разобран, так же отображается в логе коммутатора
dvolodin #
06:08
может быть, смотреть надо, не выкусывает ли классификатор лишнего
TSergey_ #
06:09
Дим, откуда нок берет "8c:62:8b" из "=8Cb=8B"? в том-то и дело что мак правильно выдергивается, но механизм мне не понятен
06:10
MACAddressParameter().claean() так не смог
ss_ #
06:10
^ae\d{1,2}$ и ^xe-[0-9]/[0-9]/[0-9]$ объединить в один либо то либо это ^(ae\d{1,2}|xe-[0-9]/[0-9]/[0-9])$ вот так?
06:11
^(ae\d{1,2}|xe-[0-9]/[0-9]/[0-9])$ вот так?
aermike #
06:12
hi all
06:12
http://www.ireasoning.com/
06:13
for displaiyng mib
06:13
it wolud really help for me
dvolodin #
06:13
у тебя точно [0-9], а не [0-9]+
TSergey_ #
06:14
aermike: you use offline snmp browser?
ss_ #
06:15
IF-MIB::ifDescr.751 = STRING: xe-0/1/1.0 IF-MIB::ifDescr.752 = STRING: xe-1/0/3.0 IF-MIB::ifDescr.753 = STRING: xe-1/1/1.0
06:15
IF-MIB::ifDescr.646 = STRING: xe-0/2/0 IF-MIB::ifDescr.647 = STRING: xe-0/2/1 IF-MIB::ifDescr.648 = STRING: xe-0/2/2 IF-MIB::ifDescr.649 = STRING: xe-0/2/3
06:15
dvolodin, да, там 3 группы цифр + сабы, но мониторим только физику и агрегированые, сабы не нужны
TSergey_ #
06:17
а если так? xe[\d\/]+
06:17
xe-[\d\/]+
aermike #
06:17
yes
TSergey_ #
06:18
http://ireasoning.com/mibbrowser.shtml <--?
06:18
xe-[\d\/]{5}
aermike #
06:18
i use it for an datacenter sensor with no standard mibs
ss_ #
06:18
TSergey_, это не принципиально \d или [0-9]
06:19
^(ae\d{1,2}|xe-[0-9]/[0-9]/[0-9])$ вот это интересно
TSergey_ #
06:19
|xe-[0-9]/[0-9]/[0-9]) --- xe-[\d\/]{5}
ss_ #
06:19
TSergey_, равнозначные записи но моя более понятная ))))))
TSergey_ #
06:21
ну ладно
06:22
^(ae[0-9]|ae[0-9][0-9]|xe-[0-9]/[0-9]/[0-9])
06:23
aermike: thanks
aermike #
06:24
welcome
ss_ #
06:26
TSergey_, спасибо
06:26
(ae\d{1,2}|xe-[0-9]/[0-9]/[0-9]) вот на таком остановился
06:27
агрегированые вроде больше двузначных цифр не встречались
TSergey_ #
06:29
я бы сделал ^(ae\d{1,2}|xe-[\d\/]{5} --- красивше
ss_ #
06:32
TSergey_, это да, но вот не все эту запись поймут.
TSergey_ #
07:29
dvolodin: еще коротенько спрошу, в db.noc.events.* значение oid лежат те, что прилетели в трапе, или они как-то уже обработаны? если в монге вижу "=8C=89=A5=8Cb=8B", значит это и прилетело? классификатор из этой базы все берет?
HaLVeR #
07:33
скорее так и прилетело
TSergey_ #
07:33
хорошо
HaLVeR #
07:33
обработанный мак так не выглядит
TSergey_ #
07:35
о, а тебя не спрашивал :)
07:35
в трапе "=8C=89=A5=8Cb=8B", после классификации 8c:89:a5:8c:62:8b,
07:35
MACAddressParameter().clean("=8C=89=A5=8Cb=8B") не может переобразовать,
07:35
кто распарсил мак?
HaLVeR #
07:37
cat ./fm/collections/eventclassificationrules/EdgeCore/ES/Network/MAC/MAC_Learned_1_SNMP_.json | grep mac
07:37
"description": "ES3528MO-MIB::macNotificationTrap",
07:37
"value_re": "^(?P<mac__bin_to_mac>.+)$"
07:37
"value_re": "^ES3528MO-MIB::macNotificationTrap$"
TSergey_ #
07:37
не, смотрели это
07:37
это fixup_bin_to_mac
07:38
>>> fixup_bin_to_mac("=8C=89=A5=8Cb=8B")
07:38
'=8C=89=A5=8Cb=8B'
HaLVeR #
07:38
и чего оно поменяло
TSergey_ #
07:39
ничего этот bin_to_mac это только добавление ":"
HaLVeR #
07:39
а fixup_bin_to_mac
07:39
тогда что делает
TSergey_ #
07:40
это оно и есть, <mac__bin_to_mac> это вызов fixup_bin_to_mac для переменной mac
07:41
(noc / fm / classifier / rule.py)
HaLVeR #
07:44
ну начнем с того что функция не обрабатывает, так как у тебя в одном октете 3 символа
07:44
она просто отдает как есть
TSergey_ #
07:46
HaLVeR: ну если совсем с начала --- то она вовсе у меня не вызвается, т.к. в правиле указан просто ^(?P<mac>.+)$
HaLVeR #
07:47
постой
TSergey_ #
07:47
но классификатор вылавливает "=8C=89=A5=8Cb=8B" --- 8c:89:a5:8c:62:8b
HaLVeR #
07:47
если у тебя в ивенте все круто, к чему ты ищешь кусок кода)
TSergey_ #
07:48
к тому, что где-то есть преобразование, а где не ясно
dvolodin #
07:48
def eval_rule_variables(self, event, event_class, vars):
07:48
где-то тут смотреть надо
TSergey_ #
07:48
а мне нужно завернуть айпишник из шестнадцатиричного вида "=00=00=00=00"
07:48
dvolodin: спасиб
HaLVeR #
07:51
=)
TSergey_ #
07:52
HaLVeR: тебе тож спасибо
HaLVeR #
07:52
def fixup_bin_to_ip(self, v):
07:52
попробуй
TSergey_ #
07:52
да там тоже только добавление точек
HaLVeR #
07:52
несовсем
TSergey_ #
07:52
ага, попробовал
HaLVeR #
07:53
ord(v[0]
07:54
это не добавление точек
07:54
это преобразование
07:54
ну и бывает что железки криво отдают
TSergey_ #
07:54
>>> fixup_bin_to_ip("=00=00=00=00")
07:54
'=00=00=00=00'
HaLVeR #
07:55
потому что не юникод
07:55
ты же строковое представление уже преобразуешь
TSergey_ #
07:57
>>> fixup_bin_to_ip('\x00\x00\x00\x00')
07:57
'0.0.0.0'
HaLVeR #
07:57
угу, потому что спецсимвол
TSergey_ #
07:59
так не сработало ^(?P<ip__bin_to_ip>.+)$
08:02
сейчас поище не нулевой, может это просто не ловится значение
08:02
*поищу
08:03
если сделать в правиле переменную ip и паттернах ее искать, так будет работать?
08:07
HaLVeR: похоже в fixup_bin_to_ip передается именно в таком виде "=C0=A8=01=01"
08:07
а потом лог правила говорит
08:07
"Cannot decode variable 'ip'. Invalid ip_address: '\xc0\xa8\x01\x01'"
08:13
вроде заработало :)
08:14
тестирую правило --- MISSED, а в ивентах уже ловит
HaLVeR #
08:14
в тестах бывает
TSergey #
08:16
ща реклассифицировать попробую
08:19
а Failed можно реклассифицировать?
08:38
красота
08:38
теперь как-то решить чего делать с OID не начинающихся с 1.3.6.
08:41
причем похоже что в "1.3.13.1.4.1.171.12.23.4.1.1.1" 13 --- это порт
HaLVeR #
08:56
что за вендор?
techwriter #
09:01
Всем привет! Просьба рассказать о модуле Main.
TSergey #
09:09
HaLVeR: так длинк же :)
HaLVeR #
09:10
мда
09:10
ищи мибы
09:10
если там такая же параша - пиши разрабам
09:10
=)
TSergey #
09:11
я забрал мибы но не умею в них искать
09:11
вчера залил миб-браузер, что-то там все криво
09:12
сегодня airmike посоветовал, я поставил другой
09:13
стал заливать миб des3028-L2mgmt.mib, браузре говорит что нужно еще парочку
09:13
а один из этой парочки в .mib не сужествует, только cds + cmi
09:14
написал в длинк, отвечают, что только такие есть :)
09:14
запросил какой-нибудь от другой модели
09:14
это DES-3028 так себя ведет
techwriter #
09:16
dvolodin, просьба расказать о модуле Main.
HaLVeR #
09:16
ну там еще от прошивок зваисит
TSergey #
09:16
HaLVeR: самую свежую залил
09:17
HaLVeR: http://pastebin.com/yfbs4DhY
09:18
очень похоже что третьей цифрой засылается порт
HaLVeR #
09:23
весело чо
TSergey #
09:25
в моем понимании, мы не можем ошибиться и увидуть посылаемый oid неправильно
HaLVeR #
09:26
ты сомневаешься в криворукости погроммеров длинка?)
TSergey #
09:28
уже совсем нет
09:28
но засылать третью цифру в OID неправильно --- это что-то
09:28
там же дерево
HaLVeR #
09:29
ты еще в еджкор не смотрел
09:30
там кусок ветки вообще в другое место прилепили в коде
09:30
а в мибе все красиво
09:31
на этот случай есть в ноке механизм
09:31
подмены оид
09:31
вопрос только в том, что работает он для всего миба
09:32
т е скажем на 3028 с прошивкой 1.1.1.1 - перепутали, на прошивке 3.3.3.3 исправили
09:33
если прилетит трап с оидом подпадающим под перезапись - оно в обоих случаях перепишет
TSergey #
09:34
о, вот у 3028 проблема на 6 порту, так все красиво, выстроилось 1.3.6 и все параметры есть
09:34
вот ведь
buggy-funhouse #
09:35
длинк не может в mib
TSergey #
09:48
buggy-funhouse: что имеешь ввиду?
09:48
*в виду?
buggy-funhouse #
09:48
длинк и snmp mib два непересекающихся множества
TSergey #
09:57
замутил правило, работает на трех моделях
10:00
http://pastebin.com/Q8UGtww1
e_zombie #
10:42
мужик
dvolodin #
10:48
"key_re": "(IpMacBindingViolationIP|IpMacBindingIpIndex|.1.4.1.171.12.23.4.1.1.1)",
10:48
ошибка тут
10:48
первая точка не нужна
10:48
и почему там вообще oid
10:49
и не забывай, что регекспах точка -- произвольный символ
10:49
и еще лучше указывать полностью отрезолвленный oid с ^....$
zi_rus #
10:55
dvolodin, http://pastebin.com/1X7tQ5eq - проба трейсит
dvolodin #
10:56
это я видел
10:56
часто?
zi_rus #
10:58
dvolodin, http://pastebin.com/sAPK611c - было часто, сама прекратила
10:58
в два ночи как видишь
dvolodin #
10:59
а писатель при этом не падал?
zi_rus #
10:59
2014-10-01 15:03:09,474 [noc-pmwriter] Loading storage rules
10:59
2014-10-01 15:03:11,484 [noc-pmwriter] Loading storage rules
10:59
2014-10-01 15:03:13,529 [noc-pmwriter] Loading storage rules
11:00
dvolodin, каждые 2 секунды
11:00
014-10-01 15:03:57,119 [root] Daemon noc-pmwriter[#0] started as PID 74709
11:00
2014-10-01 15:03:58,128 [root] noc-pmwriter[#0] daemon is terminated with status 1
11:00
2014-10-01 15:03:59,136 [root] Launching noc-pmwriter[#0]
11:00
хм
11:01
dvolodin, http://pastebin.com/nfJukF9W
dvolodin #
11:04
вот-вот
zi_rus #
11:06
а что вот?
11:06
я только обновился
11:06
я ничего не трогал
dvolodin #
11:08
вижу
freeseacher #
11:18
ага у меня тоже самое было
11:18
пока я демона не выключил :)
dvolodin #
11:21
https://bitbucket.org/nocproject/noc/commits/branch/feature/graphite/common-sync
11:22
сейчас будем лечить птичку
11:22
посмотрите пока синхронизатор DNS
zi_rus #
11:28
а как нок синк обновить?
dvolodin #
11:28
?
zi_rus #
11:29
ну он же не на ноке, а на днс
dvolodin #
11:30
а
11:30
над этим думаю сейчас
11:30
самое разумное - научить ланчер делать hg pull с основной ноды NOC
e_zombie #
11:33
dvolodin: ping
dvolodin #
11:33
докоммитил забытый файл для писателя
11:33
сейчас должен работать
e_zombie #
11:34
dvolodin: http://pastebin.com/xSehNQVv
dvolodin #
11:35
эээ
11:35
ты его восстанавливай с дропом
11:35
mongorestore --drop ...
11:35
тебе же его снести надо ;)
e_zombie #
11:36
да. ступил. вроде пошло.
dvolodin #
11:36
ты монгу с опцией smallfiles пускал?
e_zombie #
11:36
да
11:37
дамп отработал только с --repair
dvolodin #
11:40
а сейчас с ней же пускаешь?
e_zombie #
11:40
да.
11:42
http://pastebin.com/zcxByFuF
11:47
ещё битые коллекции оказались.
11:47
счас полечим
11:53
такс. вроде прокатило.
11:54
твои советы помогли
zi_rus #
12:12
dvolodin, проба не трейсится, но
12:12
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
12:12
86684 noc 103 22 0 360M 159M usem 1 32:46 280.71% /opt/noc/bin/python ./scripts/noc-probe.py launch -c etc/
12:12
280% несколько многовато
dvolodin #
12:15
угу
12:16
и в логах постоянный срач на broken pipe?
zi_rus #
12:18
ytn
12:18
нет
12:19
root@noc:/var/noc/log # grep broken *
12:19
root@noc:/var/noc/log #
12:22
даже при дебаге ничего лишнего
12:22
хотя пробает она как-то медленно
12:23
раньше сообщения лились потоком
dvolodin #
12:24
grep Broken *
e_zombie #
12:24
grep -i
HaLVeR #
12:24
а ты герой
12:25
бэкапить по живому
zi_rus #
12:25
dvolodin, такое только старые сообщения, новых нет
e_zombie #
12:25
оно само бакапится.
12:26
но версия неверная оказалась .
HaLVeR #
12:27
бывает
zi_rus #
12:37
а нет, сообщения льются
12:37
но загрузка цпу от пробы дикая
dvolodin #
12:39
какой поток метрик
12:39
и вообще - сделай в пробе люк
12:39
[debug]
12:39
enable_manhole = true
12:39
в конфиге
zi_rus #
12:46
dvolodin, включил. куда смотреть?
e_zombie #
12:57
2014-10-01 17:00:22,761 script(Huawei.VRP.get_version,fsw-3-karlamarksa-32-560-sar,**{}) failed: Connection with activator lost
12:57
wtf ?
dvolodin #
13:00
zi_rus: поставь socat
13:00
socat readline <путь к люку>
zi_rus #
13:00
ебать
13:01
а какой путь к люку?
13:01
а куда ставить? на нок или на комп?
13:02
видимо на нок
e_zombie #
13:06
2014-10-01 17:09:32,795 1 script threads left (30 max)
13:06
2014-10-01 17:09:32,855 Script Qtech.QSW.get_config(Qtech.QSW.get_config(fsw-5-zagorodneva-15a-35-sar, 10.64.40.235)) is completed
13:06
2014-10-01 17:09:32,894 0 script threads left (30 max)
13:06
2014-10-01 17:09:33,070 [CLITelnetSocket(0x24f9350)]<PROMPT> Connection lost (104)
zi_rus #
13:09
dvolodin, поставил, но не понимаю чего с ним дальше делать
Tweet
Share this page
Share this page: Tweet