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: 14.11.2012
ufir #
04:50
"Working directory: /opt/noc\u000a<type 'exceptions.NameError'>\u000aglobal name 'ReduceTask' is not defined\u000aSTART OF TRACEBACK" - это ж вроде фиксили ?
zi_rus #
07:22
народ, кто с ноком в опере работает?
dvolodin #
07:25
зачем он в опере?
07:25
он петь мешает
zi_rus #
07:27
не мешает, если только не материться в процессе установки
07:28
у меня в опере открывается нок и 3 панели (сверху снизу и сбоку), все пустое. очевидно должно быть окно запроса пароля, но его нет
dvolodin #
07:29
а в js-консоли что?
07:30
вряд ли мы в ближайшее время будем поддерживать оперу
zi_rus #
08:06
так вообще ничего не поддерживаете
08:06
оперу в сад
08:06
ие в сад
08:07
где в опере js консоль?
dvolodin #
08:10
опера в сад, ие в сад, да
zi_rus #
08:12
(function(){var e=this,a=Object.prototype,g=a.toString,b=true,d={toString:1},c;if(typeof Ext==="undefined"){e.Ext={}}Ext.global=e;for(c in d){b=null}if(b){b=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"]}Ext.enumerables=b;Ext.apply=function(n,m,q){if(q){Ext.apply(n,q)}if(n&&m&&typeof m==="object"){var p,l,h;for(p in m){n[p]=m[p]}if(b){for(l=b.length;l--;){h=b[l];if(m.hasOw
08:12
nProperty(h)){n[h]=m[h]}}}}return n};Ext.buildSettings=Ext.apply({baseCSSPrefix:"x-",scopeResetCSS:false},Ext.buildSettings||{});Ext.apply(Ext,{emptyFn:function(){},baseCSSPrefix:Ext.buildSettings.baseCSSPrefix,applyIf:function(i,h){var j;if(i){for(j in h){if(i[j]===undefined){i[j]=h[j]}}}return i},iterate:function(h,j,i){if(Ext.isEmpty(h)){return}if(i===undefined){i=h}if(Ext.isIterable(h)){Ext.Array.each.call(Ext.Array,h,j,i)}else{Ex
08:12
t.Object.each.call(Ext.Object,h,j,i)}}});Ext.apply(Ext,{extend:function(){var h=a.constructor,i=function(k){for(var j in k){if(!k.hasOwnProperty(j)){continue}this[j]=k[j]}};return function(j,p,m){if(Ext.isObject(p)){m=p;p=j;j=m.constructor!==h?m.constructor:function(){p.apply(this,arguments)}}var l=function(){},k,n=p.prototype;l.prototype=n;k=j.prototype=new l();k.constructor=j;j.superclass=n;if(n.constructor===h){n.constructor=p}j.ov
08:13
erride=function(q){Ext.override(j,q)};k.override=i;k.proto=k;j.override(m);j.extend=function(q){return Ext.extend(j,q)};return j}}(),override:function(h,i){if(h.prototype.$className){return h.override(i)}else{Ext.apply(h.prototype,i)}}});Ext.apply(Ext,{valueFrom:function(j,h,i){return Ext.isEmpty(j,i)?h:j},typeOf:function(i){if(i===null){return"null"}var h=typeof i;if(h==="undefined"||h==="string"||h==="number"||h==="boolean"){return
08:13
h}var j=g.call(i);switch(j){case"[object Array]":return"array";case"[object Date]":return"date";case"[object Boolean]":return"boolean";case"[object Number]":return"number";case"[object RegExp]":return"regexp"}if(h==="function"){return"function"}if(h==="object"){if(i.nodeType!==undefined){if(i.no
08:13
ой
08:13
вот на что рпугается
08:13
Unhandled Error: Cannot convert 'b.namespaces' to object
08:14
фф в сад, хром в сад. только православный сафари
dvolodin #
08:18
только православный мобильный сафари
08:18
:)
08:22
это в extjs, кстати
zi_rus #
08:23
я вижу
08:24
а как на питоне можно написать скрипт чтобы он подконнектился по ssh на один хост и выполнил одну команду?
dvolodin #
08:24
ReduceTask.create_task
08:25
скормить ему железку, скрипт commands и список команд
zi_rus #
08:25
а если без нока
08:25
свой скрипт
08:26
нашел какой-то python-paramiko
dvolodin #
08:32
paramiko
08:32
да
_4ePTeHok #
08:35
добродня да
08:36
dvolodin, Дим, объясни логику макдб и лога с учетом домена вланов? храним в бд уникальные сочетания mac-vc_domain?
08:37
у меня вот сейчас по две записи на мак - с доменом и без
dvolodin #
08:37
я смотрел paramiko и библиотечку к twisted
_4ePTeHok #
08:37
как показывать историю? по маку, или по маку и домену?
dvolodin #
08:37
сначала хотел их прикрутить, но они не натягиваются на nbsocket
08:37
_4ePTeHok: mac/домен
08:37
по связке
_4ePTeHok #
08:38
угу и лог так же показывать - по домену и маку
dvolodin #
08:38
пришлось свою реализацию делать, хоть и с оглядкой
_4ePTeHok #
08:38
ладно, переделаем..
dvolodin #
08:38
могу сказать, что они не со всеми железками работать будут, у нас есть фиксы для кривых реализаций ssh-сервера
freee #
08:39
ага и утф 8 :(
dvolodin #
08:39
да, utf там тоже может косить сильно
zi_rus #
08:43
dvolodin, почему не мак/влан/домен
dvolodin #
08:44
потому как mac может скакать между vlan'ами
zi_rus #
08:44
не может
08:45
мой мак сейчас на одном порту в трех вланах
08:49
и никуда не скачет
dvolodin #
08:51
я ему заглушку на этот счет сделал
08:51
чтобы не гадило в историю
09:24
нужно будет хорошее тестирование новой схемы синхронизации DNS
zi_rus #
09:26
к ней бы инструкцию
dvolodin #
09:26
у меня лежит пачка изменений, в которых репо зон уходит в GridVCS, появляется возможность просмотра состояния зоны и истории прямо из dns.zones
09:27
но работает оно только с новой схемой provisioning'а, так как наиболее типовая старая строилась либо на rsync, либо на hg push
freee #
09:31
для новой схемы нужен клиент :)
dvolodin #
09:31
он есть
freee #
09:31
реализовывать стопмп клиента уже не надо ?
09:31
я чето пропустил :) ?
dvolodin #
09:32
noc-sync его цепляет
09:32
надо только каналы настроить
freee #
09:32
надо типа ка кактиватор клонить
09:32
а еще лучше на активтаор это возложить :)
09:33
ибо он уже хорошо клониться
dvolodin #
09:33
там есть скрипт для клонирования
09:33
./scripts/clone-sync
_4ePTeHok #
09:34
dvolodin, подскажи по модели peer.maintainers? там есть поле admins - ManyToManyField, оно не отдается по get запросу. Как его выдергивать?
dvolodin #
09:36
_4ePTeHok: пока не знаю, думаю
09:36
m2m я еще не освоил
09:36
теоретически, отдаваться оно будет списком
_4ePTeHok #
09:37
в js я нашел как сделать http://dev.sencha.com/deploy/ext-4.1.0-gpl/examples/multiselect/multiselect-demo.html нижняя форма
09:37
а вот с моделью как быть
09:37
давай потестю, как списком его получить?)
dvolodin #
09:38
вот с нижним, да, это то что надо примерно
_4ePTeHok #
09:38
модель тогда надо курочить)
dvolodin #
09:39
только туда бы еще поиск сверху
09:39
с моделью такая петрушка
09:39
вариант №1
09:39
отдавать m2m в виде списка
09:39
maintainers_set: [1, 2, 5]
_4ePTeHok #
09:40
ну dockeditems с преферансом не большая проблема сделать.)
dvolodin #
09:40
тогда js должен как-то резолвить этот список
09:40
и при сохранении выдавать новый
09:41
второй вариант -- использовать разновидность modelinline
_4ePTeHok #
09:41
maintainers_set: [1, 2, 5] и maintainers_set__label: [bla1, bla2, bla5]
dvolodin #
09:41
нет
09:42
что-то вроде GET /peer/maintainers/1/persons/
09:42
который возвращает [{id: 1, label: "bla1"}, {id: 2, label: "bla2"}]
_4ePTeHok #
09:43
аа, ага
dvolodin #
09:43
только сейчас modelinine резолвит все объекты по foreign key
09:43
а m2minline будет резолвить через промежуточную таблицу
09:44
POST и DELETE будут добавлять и удалять связь
_4ePTeHok #
09:44
ну саму модель написать мне сложновато пока. Собственно почти все приложения осталось с этой формой m2m
dvolodin #
09:44
POST /peer/maintainers/1/persons/, с json {id: 20}
09:45
добавит к maintainer с id=1 person с id=20
_4ePTeHok #
09:45
угу, механизм я понял
dvolodin #
09:45
DELETE /peer/maintainers/1/persons/20/ -- удалит связь
_4ePTeHok #
09:45
реализовывать надо)
dvolodin #
09:46
GET /peer/maintainers/1/persons/ -- выдаст всех persons
09:48
'Ext.ux.form.MultiSelect',
09:48
'Ext.ux.form.ItemSelector',
09:48
вот это они подключают
09:48
надо смотреть, в каком виде оно схавает данные
09:49
и в каком отдаст
_4ePTeHok #
09:50
там в коде пример датастора есть
09:50
data: [[123,'One Hundred Twenty Three'],
09:50
['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', 'Five'],
09:50
['6', 'Six'], ['7', 'Seven'], ['8', 'Eight'], ['9', 'Nine']],
09:50
stype: 'json'
09:50
fields: ['value','text'],
dvolodin #
09:52
valueField, displayField там есть, да
09:53
вопрос только, что же он в store отдавать будет
09:54
getValue отдаст список?
_4ePTeHok #
09:55
надо смотреть, в примере не отлавливается фаербагом
dvolodin #
09:55
value: ['3', '4', '6'],
09:55
вот такое там
09:56
store у него, похоже, это то, что бы используем как lookup для combo
_4ePTeHok #
09:58
%2С эт запятая?)
09:58
а отдает выбранное массивом, да
dvolodin #
09:58
и выбирается массивом?
_4ePTeHok #
09:59
всмысле изначально?
dvolodin #
09:59
да
_4ePTeHok #
09:59
ну дык value: ['3', '4', '6'],
10:00
это изначальные значения
dvolodin #
10:00
ну чудно
10:00
то есть мы можем в модели сделать поле типа auto
10:00
отдавать его с сервера как список int'ов
10:00
и принимать с сервера как список int'ов
10:00
?
10:01
принимать на сервер
_4ePTeHok #
10:01
ага, только ресолв надо будет сделать
dvolodin #
10:01
фигня война
10:02
попробуй сделать пока по аналогии с static/js/noc/core/LookupField.js
10:02
я насчет сервера подумаю пока
_4ePTeHok #
10:18
Ext.ux.form.ItemSelector, его подкладывать надо же, он в ux ломится
dvolodin #
10:19
у нас есть каталог для ux
_4ePTeHok #
10:19
а у нас какая точно версия?
dvolodin #
10:22
4.0.7
10:23
они там в examples лежат
10:25
отдавать список в json я его научил
_4ePTeHok #
10:26
как field обозвать?
dvolodin #
10:28
M2MField
10:28
по идее его надо подкладывать рядом с соответсвующим LookupField.js
_4ePTeHok #
10:29
ну в static/js/noc/core/
dvolodin #
10:30
туда базовый класс
_4ePTeHok #
10:30
ага
dvolodin #
10:30
а для полей - рядом с lookup'ом
10:30
то есть не в том приложении, которое отображает m2m, а в том, которое данные отдает
_4ePTeHok #
10:32
блин, оно еще и в Ext.ux.layout.component.form. тянет)
dvolodin #
10:33
ну нормально
10:34
отдачу списка я закоммитил
_4ePTeHok #
10:40
ага, счас обновлю..
10:50
такс, а в NOC.peer.person.M2MField у нас так и останется requires: ["NOC.peer.person.Lookup"] ?
dvolodin #
10:52
нет
10:52
а
10:52
тьфу
10:52
да
10:53
так и останется
_4ePTeHok #
10:54
блин, еще картинки надо)
zi_rus #
10:55
dvolodin, DOM exceeded the Rx power low treshold - тебе не кажется что в этой фразе exceeded звучит нелепо?
_4ePTeHok #
10:55
а то кнопки пустые)
dvolodin #
11:05
по логике вещей, оно должно добавляться точно так же, как lookup field в форме
11:05
а в Model.js это поле должно иметь тип auto
_4ePTeHok #
11:06
добавляется. С данными пока не але
dvolodin #
11:07
в форме увидел его?
_4ePTeHok #
11:08
сейчас, с картинками разберусь
dvolodin #
11:08
me.form.loadRecord(record);
11:08
вот в этом месте в ModelApplication.js можно подебажить
_4ePTeHok #
11:13
а на какой url должен отдавать список NOC.peer.person.M2MField ? там же по аналогии с лукапфилдом нету url вообще
dvolodin #
11:14
правильно
11:14
оно его из своей модели должно выдавать
11:14
будет /peer/person/
_4ePTeHok #
11:24
а куда правильней стиль положить для fild'a? там картинки на кнопках прописываются
11:24
css всмысле
11:31
в примерах лежит в ux/css/ но у меня не подгружает почемуто
11:37
ага, похоже сюда ./static/css/noc/ux.css
11:45
во, отлично. подгрузились картинки
11:47
с данными теперь вопрос) оно не генерирует GET для лукапа
ufir #
11:56
а что это за клюква duplicate key value violates unique constraint "ip_prefix_vrf_id_29fca006408ac21"
11:56
в краше вылезло
_4ePTeHok #
11:56
а ты весь краш в пасту давай. Так долго гадать можно
ufir #
12:04
http://pastebin.com/QwNs7dwc
12:04
хмм... надо было лишнее повыкусывать
12:04
ну да ладно
zi_rus #
12:09
по пирингу нашел косяк
12:09
если в назнании AS SET есть два дефиса, то нок его не воспринимает
_4ePTeHok #
12:10
сеты еще не переписывали
12:10
добавлю валидатор как доберусь
dvolodin #
12:14
zi_rus: возможно, да
12:14
надо смотреть на проверки
_4ePTeHok #
12:16
dvolodin, глянь http://dpaste.org/C8xyj/
12:16
в общем запроса GET невижу от него к peer.person.M2MField
12:17
когда Edit form активизирую
12:18
zi_rus, заведи issue, чтобы не потерять
zi_rus #
12:18
ок
_4ePTeHok #
12:18
можешь на меня прям
dvolodin #
12:25
setValue у тебя откуда такой укуренный?
12:26
там достаточно только initComponents
_4ePTeHok #
12:27
из родителя) LookupField)
12:29
убрал лишнее - все равно нету GET
12:31
что то не учли..
dvolodin #
12:33
autoLoad на store не надо?
_4ePTeHok #
12:37
а вот вопрос - Ext.applyIf(me, {
12:37
store: Ext.create(sclass)
12:37
это создали store
12:38
а грузим в NOC.core.Lookup?
dvolodin #
12:38
либо autoLoad ему
_4ePTeHok #
12:39
в NOC.core.Lookup есть autoload же
dvolodin #
12:39
а
_4ePTeHok #
12:40
я просто смотрю в NOC.core.LookupField , а там есть такое
12:40
// number or string
12:40
// Start store lookup
12:40
// @todo: do not refresh current value
12:40
var v = me.getValue();
12:40
12:40
if(!v || v != value) {
12:40
me.store.load({
12:40
в той наркоманской части
12:40
вот последняя строка меня смущает - оно , что только тут стор применяет к Ext.form.ComboBox родителю?
12:41
наврал кстати //autoLoad: true, у NOC.core.Lookup
12:41
закомменчен
dvolodin #
12:42
именно
_4ePTeHok #
12:42
ага, если раскомментить - запрос появляется
12:42
другие ничего не поломаем этим?
12:43
другого*
dvolodin #
12:43
нет, нельзя раскомментировать
12:43
он грузиться должен именно на setValue
_4ePTeHok #
12:44
подскажи тогда как там верно загрузить его
dvolodin #
12:44
он грузился именно на setValue
12:44
тут суть такая
12:44
если мы инициализируем приложение, пока мы не показали форму, грузить store нельзя
12:45
когда мы переключаемся на форму редактирования, вызывается setValue для store
12:46
который проверяет, не грузим ли мы уже этот store
12:46
если нет -- начинаем его грузить и ставим callback, что после завершения нам надо бы все-таки показать значение поля
12:49
http://dpaste.org/Yesk2/
12:49
вот такое попробуй
12:52
надо отловить, что приходит ему в setValue в разных случаях
_4ePTeHok #
12:54
сначала undefined, а потом http://dpaste.org/sG0xo/
12:54
это еще на этапе грида
dvolodin #
12:55
regex: /^AS(\d+|-\w+)(:\S+)?(\s+AS(\d+|-\w+)(:\S+)?)*$/,
12:56
запрос какой ушел?
12:56
id=
12:56
?
12:56
да
12:56
params: {id: value},
12:56
вот такое мы прописали
_4ePTeHok #
12:56
peer/person/lookup/?_dc=1352897667835&id=&__format=ext&__page=1&__start=0&__limit=25
dvolodin #
12:56
убери это
12:57
закоммить, что получилось, я попробую выправить
12:59
zi_rus: там действительно только один минус пропустит
_4ePTeHok #
12:59
ага, счас без ошибок
dvolodin #
12:59
коммить тогда и начинай курочить dns.dnszoneprofile
_4ePTeHok #
12:59
он про as-set же вроде
dvolodin #
13:00
да, там регулярка в js пропускает строго один минус
_4ePTeHok #
13:00
as-set не переписывали еще)
13:00
откуда там js
dvolodin #
13:01
prefixlistbuilder
_4ePTeHok #
13:01
a)
dvolodin #
13:01
там regex на поле есть
zi_rus #
13:01
кстати, если там будете копаться, скажите чтобы игнорировал лишние пробелы
_4ePTeHok #
13:02
так, ну данные я получил, в селектор надо загнать их теперь
dvolodin #
13:02
их надо аккуратно в setValue протолкнуть
13:04
я пока не очень понимаю, что ему надо
_4ePTeHok #
13:04
ну там вот Object { в records
dvolodin #
13:05
ну да
13:05
с id и label
_4ePTeHok #
13:05
eue
13:06
if(success && records.length > 0) {
13:06
this.setValue(records[0]);
13:06
} вот это я как понимаю
13:06
а потом return me;
13:06
верно?
dvolodin #
13:07
нет
13:08
смотри setRawValue в родительском классе
13:09
ой как там забавно
13:10
toStore = me.toField.boundList.getStore();
13:10
fromStore = me.fromField.boundList.getStore();
_4ePTeHok #
13:10
хех
dvolodin #
13:10
у него там два store на самом деле
13:10
для каждого списка, свой
_4ePTeHok #
13:11
т.е. надо set делать fromStore
13:11
а при сохранении - из toStore)
13:11
тьфу
13:12
весь лукап персон - в fromStore, лукап персон для этого мейнтейнера - toStore
13:12
и сохраняется соотв. только последний
dvolodin #
13:14
они store пересоздают
13:15
он, похоже, с remote store вообще не работает
_4ePTeHok #
13:15
мде
dvolodin #
13:16
ему надо при инициализации прогрузить fromStore
13:16
руками
13:17
коммить как есть, починю
_4ePTeHok #
13:18
ок
13:18
без приложения пока, да?
dvolodin #
13:18
с приложением
13:18
на чем мне игратся-то
_4ePTeHok #
13:18
=) сломаем мейнтейнеров)
dvolodin #
13:22
не страшно
13:23
или давай мегапатчем
13:23
на beef@
_4ePTeHok #
13:24
лучше коммиттом, а то файлики потом не соберешь еще
dvolodin #
13:24
ну дава
13:24
й
13:24
есть у меня подозрение, что в setValue надо просто прогрузить fromStore
_4ePTeHok #
13:29
в static/js/noc/ux/ и static/img/ и static/js/noc/core/ дай права?
13:29
static/css/ еще
dvolodin #
13:30
сделал
_4ePTeHok #
13:36
dvolodin, улетело. Вроде ничего не потерял по пути
13:40
в самом приложении поле extra еще надо будет добить и RPSL admin action
freee #
13:41
_4ePTeHok, hg sta обычно показывает чего надо не потерять :)
_4ePTeHok #
13:41
да, знаю
13:41
просто я не с рабочего коммитю
13:41
отдельный чистый репо для этого
13:42
пока перетащишь файлики, можешь упустить что то) особенно когда по разным местам раскинуто
13:43
и, да, подождите обновляться, если нужны maintainers)
dvolodin #
13:57
сделал нормальную прогрузку
13:59
2012-11-14 18:02:34,887 API PUT /peer/maintainer/1 {'maintainer': 'Default maintainer', 'description': 'Please change to your maintainer', 'extra': '', 'rir__label': 'ARIN', 'rir': 1, 'admins': [1, 2], 'password': '', 'id': 1}
13:59
и на сервер ушло
_4ePTeHok #
14:04
а в репо не залил))
Tweet
Share this page
Share this page: Tweet