LINUX.ORG.RU

кто-нибудь знает js немного?

 


0

1

не удаляйте сразу, не знаю, где еще спросить. нужна помощь по js, есть код

if (res.last_ntp_state)
find . -type f -exec egrep -Hn '.*last_ntp_state.*' {} \;

дает только следующие результаты:

...
["288x04", "mserver_state.last_ntp_state", "objprop_mserver_state_last_ntp_state"]
...

в том же файле

...
 ["j286_104_288x04", "mserver_state.last_ntp_state", "objprop_mserver_mserver_state_last_ntp_state"]
...

в том же файле

                4,
                "int32_t",
                "None",
                "last_ntp_state",
                "NTPd \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u043e\u0432\u0430\u043d ",
                "PH_QUANTITY_NONE",
                "default",
                0,
                0,
                0,
                "",
                0,
                0,
                0
            ],
            [

что это может значить? как найти метод las_ntp_state? может это вызов из сишного кода?

Linux тут при том, что все это работает под управлением Linux )))

Перемещено xaizek из talks

★★★

las_ntp_state - это свойство переменной res, а не метод.
метод вызывается с круглыми скобками

xmikex ★★★★
()

Выглядит как чтение json сообщений, а файлик - видимо либо дамп, либо тестовые данные.

pon4ik ★★★★★
()

Увы, со статикой в JS вообще никак. В частности,

res.last_ntp_state
это то же самое, что и
res["last_ntp_state"]
и потому может устанавливаться, например, как
res["last_n" + "tp_state"] = "fucked up"
Так что универсального способа найти где это происходит не существует.

Miguel ★★★★★
()

что это может значить?

Это значит: если поле last_ntp_state в объекте res тождественно true, то выполнить код после if

как найти метод las_ntp_state?

А он должен быть?

может это вызов из сишного кода?

Не надо искать глубокий смысл там, где его нет.

Что за код? Что он делает? Нихрена не понятно.

crutch_master ★★★★★
()
Ответ на: комментарий от nikolnik

Для этого надо сначала разобраться, getter и setter чего.

Miguel ★★★★★
()

А сам код выложить никак? Там может по паре строчек выше всё очевидно станет, откуда этот res берётся.

monk ★★★★★
()
Ответ на: комментарий от monk
    function update() {
        $t.empty(subpane.pane);

        $t.element('div', { class: 'paragraph' }, subpane.pane, 'Параметры');
        var paramdiv = $t.element('div', {}, subpane.pane);
        draw_captioned_param(paramdiv, 'Идентификатор', 'mserver.mserver_id')[0]
            .appendChild($t.gui.make_input('number', mserver.mserver_id, null, true));
        draw_captioned_param(paramdiv, 'Название объекта', 'mserver.extra.obj_name')[0]
            .appendChild($t.gui.make_input('text', mserver.extra.obj_name));
        draw_object_params(mserver, 'mserver', ['tzindex'], paramdiv);

        $t.element('div', { class: 'paragraph' }, subpane.pane, 'Состояние');
        var statediv = $t.element('div', {}, subpane.pane);
        $t.element('div', { class: 'paragraph' }, subpane.pane, 'Версии');
        var verdiv = $t.element('div', {}, subpane.pane);
        $t.element('div', { class: 'paragraph' }, subpane.pane, 'NTP');
        var ntpdiv = $t.element('div', {}, subpane.pane);
        var oi = {}; oi['mserver'] = get_object_keys(mserver, structs_list.mserver);
        rpc('db_select_by', { obj_in: oi, join_id: SEL_mserver_state_by_mserver }).done(function(res) {
            if (!res) return;
            res = res[0];
            draw_object_params(res, 'mserver_state', ['time_of_start', 'lastcfgdbdump_time', 'lastcfgchange_time', 'lastcfgmodechange_time', 'battery_state'], statediv, true);
            draw_object_params(res, 'mserver_state', ['stable_svn_version', 'objectmodel_svnnum', 'bd_major_version', 'bd_minor_version', 'last_serial_num', 'po_major_version'], verdiv, true);
            if (res.last_ntp_state)
                $t.element('div', { class: 'text', style: 'color: darkgreen' }, ntpdiv, 'Время синхронизировано');
            else
                $t.element('div', { class: 'text', style: 'color: red' }, ntpdiv, 'Несинхронизированно или в процессе синхронизации');
            var ntpservers = $t.element('div', { class: 'text' }, ntpdiv, 'IP адреса для синхронизации в конфигурации NTP: ');
            get_ntpconf_servers($t.element('span', {}, ntpservers));
            if (res.last_ntp_state)
                draw_object_params(res, 'mserver_state', ['last_ntp_ip', 'last_ntp_source', 'last_time_delta'], ntpdiv, true);
        });

        $t.bind($t.element('button', { class: 'scheme-element' }, subpane.pane, 'Показывать внутренние названия полей и перечисляемых типов (admin)'), ['click'], function(ev) {
            global_params.a = global_params.a ? false : true;
        });

    }
    update();

посмотрите, может что-то найдете, я не нашел, вот и не выложил

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR

rpc(‘db_select_by’,

Ну вот. Примерно понятно, откуда твой res появился. last_ntp_state - это какое-то поле, полученное из БД.

monk ★★★★★
()
Ответ на: комментарий от monk

на сервере вообще не запущено никаких бд, это одноплатник, там даже веб сервер какой-то свой, самописный, может эта бд в сервер встроена и надо смотреть в исходниках этого сервера, я находил там поле last_ntp_state какой-то структуры, но не смог найти функции, которая заполняет эти поля, точнее нашел, но эта ф-ция ниоткуда не вызывается, странно да? ))) может искал не так

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR

Тогда ищи db_select_by. Это где-то в другом файле должно быть (не на JS).

monk ★★★★★
()
Ответ на: комментарий от IvanR

но эта ф-ция ниоткуда не вызывается, странно да?

Колбеком каким-то она вызывается. Там ntp клиент должен быть, который у тебя не работает.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

работает и ntpdate и ntpd запускаются и в логах видно, что запускаются и в netstat на портах висит ntpd, я думал, что сервер как-то парсит логи, установил на плату rsyslog, не помогло, думал, что какой-нибудь /var/run/ntpd.pid или /var/lib/ntp/drift на оригинале, где все работает, drift нет такого файла, а /var/run/ntpd.pid присутвует на обоих

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR

Если у тебя свой сервак ntp, то плата должна знать ip, куда ходить за временем. Если не свой, то у меня из-за natа никто никуда не доходит, работает только через сервак организации.

crutch_master ★★★★★
()

Хочу посоветовать вместо этого ужаса:

find . -type f -exec egrep -Hn '.*last_ntp_state.*' {} \;

Гораздо более простые команды:

rg -t js last_ntp_state

или

rg last_ntp_state

Кроме того, регулярное выражение .*last_ntp_state.* ужасно неэффективно. К чему писать эту громоздкость? Регулярные выражения ищут вхождения в текст. Если .* не используются и не сохраняются, то это лишняя работа, которую должен выполнить код поиска регулярки. Выражение last_ntp_state в данном контексте полностью эквивалентно и будет искаться в разы быстрее (и тут fgrep нужен, а не egrep, ибо на самом деле, это поиск не регулярки, а просто подстроки).

emorozov
()
Ответ на: комментарий от Miguel

Можно заменить res на proxy. И там поставить breakpoint, который отловит момент присваивания. И разобраться, что к чему. Но это всё уже можно считать продвинутыми техниками отладки, вряд ли ТС справится, советовать не буду.

Legioner ★★★★★
()
Ответ на: комментарий от IvanR

Вкратце - заменяешь res на Proxy в котором в set-е уже отслеживаешь, кто пытается присвоить это значение. Так и поймёшь, откуда оно взялось.

Legioner ★★★★★
()
Ответ на: комментарий от emorozov
$ rg
bash: rg: command not found

про точки со звездочками знал, но почему-то все равно их писал всегда, про разницу fgrep и egrep не знаю, egrep использую вместо grep, так как иногда нужно добавить | в условие, по моему grep этого не позволяет, вот и приучил себя использовать egrep, find использую, так как иногда нужно пропустить какие-то каталоги и имена файлов, а так, можно проще grep -nH 'pattern' -r . про опции grep --exclude-from и --exclude-dir тоже знаю, но привык уже к find, find гибче

IvanR ★★★
() автор топика
Ответ на: комментарий от lovesan

не я писал, я вообще js не знаю даже близко, можно сказать, что я его первый раз видел в этом топике

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR

rg - это ripgrep, устанавливается в любой дистрибутив. Если постоянно работать с кодом, то незаменимая вещь.

Про egrep понятно, я обычно сразу знаю, какой регексп буду использовать, и пишу с ходу fgrep, grep или egrep. Хотя ещё чаще просто rg.

Писать эти лишние .* - моветон, по-моему. Может вкусовщина. Но если писать в скриптах и программах, то это ещё и заметное замедление их работы.

emorozov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.