Нужен совет опытных программистов

Тема в разделе "Lotus - Программирование", создана пользователем fedotxxl, 7 фев 2008.

  1. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Задача: Написать систему логирования LS кода, подсчета производительности (как долго исполняется LS код) и учета ошибок.
    Цель: получить удобную среду контроля исполнения кода. Среда будет использоваться только разработчиком, так что нужно решить, какие функции нужны, какие нет и как делать
    Что нужно получить на выходе: отчет вида (это мой вариант, может вы придумаете более информативный отчет) :
    Саб1 "Зашел в агент"
    Саб1 "Получение документов" 12мс
    Саб1\Саб2 "Зашел в Саб2"
    и т.д.

    Вот тут-то и возникает несколько вопросов:
    1. Как делать?
    1.1 Можно в начале и в конце каждого саба написать wf.SubStart(Title), wf.SubEnd(Title). Преимущества - строится в памяти дерево сабов, запоминается в каком сабе мы находимся. Недостатки - в начале и конце каждого саба нужно что-то писать
    1.2 Можно при исполнении каждого события считывать в каком сабе мы находимся и вызываемые ранее сабы (Lsi_info(14)). Преимущество - не требуется дополнительный код в начале и в конце саба. Недостатки - сложно построить и контролировать дерево сабов (имеет ли смысл его строить?)
    2. Как хранить данные?
    Я набросал быстро класс, в который можно положить любой объект по айдишнику и получить обратно соотв.
    2.1. В случае, когда у нас построено дерево сабов (каждому сабу соотв объект "Саб") логично в каждом объекте "Саб" хранить объект "Коллекция"
    2.2.1 Когда у нас нет дерева сабов, можно это дерево составить из "Коллекция", вложенных друг в друга. Т.е. в коллекция "Саб1" буду вложены события "Зашел в агент", "Получение документов", а также коллекция "Саб1\Саб2". Таким образом для каждого саба создается своя коллекция
    2.2.2 Но насколько просто построить дерево из коллекций? Проще хранить все в одной коллекции и айдишниками "Саб1\Саб2\Название_События". Это гораздо проще, но может быть медленее и в памяти не строится дерево сабов
    3. Делать ли "дочерние действия"
    В событии "Получение документов", которое занимает, предположим, 10 строк, может быть собите "Подключение к представлению". Делать ли так, что событие "Подключение к представлению" было ответным к событию "Получение документов" или же сделать плоско?

    Никто базу от меня не требует, хочется написать для себя... Так что помогите определиться с функционалом и с реализвацией
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Посмотри вот это.
     
  3. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Для: Omh
    И? Я же не могу приказать всем включить дебаг режим... Потом время исполнения посчитать не сложно, вот сохранить правильно это не легко. + писать отдельно время исполнения, логирование и детектор ошибок нелогично.
    Вобщем, я говорил не об этом... Прочто внимательно полностью мой пост
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: fedotxxl
    Imho, e тебя много свободного времени.
    Тебе уже правильно ответили на intertrust'e: лучше почитай "Performance Considerations for Domino Applications" и не будет проблем :)
     
  5. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Для: Omh
    =) Я уже ответил там. Время есть и я его хочу потратить в полезном направлении
    Разве не удобно иметь парочку команд, которые будут писать логи не в Log.nsf, а в отдельный документ, наблюдать, какие функции долго работают и т.д.? Впринципе, все это я мог сделать и сам, но получилось бы не наилучшим способом... Поэтому я и спрашиваю, как лучше сделать? Так или же вот так

    По поводу книги - нет ничего лучше практики. Доказано, что из книги усваивается только 20% информации (у меня и того меньше =))... Точнее не усваивается, а запоминается. Поэтому парочку раз разобраться, почему код долго работает, лучше, чем прочитать книгу. ИМХО
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ты в какой-то теме подобный вопрос писал... я еще тогда спросил "не логирование ли задумано?" :)
    но это лишь лирическое вступление ;)

    я тогда попробовал поработать с Ls_info() и обнаружил, что иногда при вызове функции клиент валиться с нсд. у меня вызов был организован таким образом: рекурсивная функция просто читала и принтила значение Ls_info(14), так вот на вызове так 16-17 всегда, стабильно валился клиент :)

    я тогда так и не обнаружил причины - лениво было ;) но запомнил, что с ней надо быть осторожным.
    не просто так она недокументированна...

    кроме того Ls_info(14) (на том же intertruste есть) выводит вместо имени библиотеки каки-то коды, если на клиенте, а на сервере нормально - имя...

    в общем, я бы лучше использовал то, что в пп.1.1 у тебя сказано. но не забывай, что лишь в начале и конце вызывать - не верно, по причине возможного окончания исполнения из-за ошибки, выхода по обработчику и т.п. причинам...
     
  7. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Для: Akupaka
    Ничего умнее не могу придумать, чем писать wf.ExitSub и перед выходом по обработчику (Exit Sub)...

    Ls_info(14) не очень конечно удобно возвращает, но какая-то закономерность есть. А на сервере или же на клиенте код исполняется можно... так что распарсить ответь реально
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ты не понял, распарсить-то без проблем, и достаточно удобно, просто в зависимости от того где выполняется, возвращается строчка подобная этой:
    "124322, SomeSub" - на коиенте, "lib1, SomeSub" - на сервере
     
  9. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Для: fedotxxl
    Так ведь можно определить, где код исполняется... По-моему, если на сервере, то NotesSession.Server <> "", если равно пустоте - клиент

    Все-таки писать какой-то код в начале и конце каждого саба не очень-то удобно =(.
    Есть ли соображения по поводу второго и третьего пункта
     
  10. dmytro.pastovenskyi

    dmytro.pastovenskyi Гость

Загрузка...
Похожие Темы - Нужен совет опытных
  1. JohnLemon
    Ответов:
    3
    Просмотров:
    732
  2. VirtyOz
    Ответов:
    2
    Просмотров:
    1.281
  3. hellsq
    Ответов:
    6
    Просмотров:
    1.474
  4. savl
    Ответов:
    9
    Просмотров:
    1.809
  5. macujin56
    Ответов:
    0
    Просмотров:
    1.477

Поделиться этой страницей