Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


О Notes

Главная   Библиотека   О Notes

Агенты и задача Agent Manager. Часть 1


Николай Норкин, CLP R5
Вятские Информационные Технологии
nickanor@mail.ru


Агенты - это исполняемые в среде Lotus Notes программы, которые имеются практически в любом приложении. Выполняются агенты по наступлению определеного события (по расписанию, запросу пользователя, приходу сообщения электронной почты и т.п.). Запуск и функционирование агентов в большинстве случаев осуществляется с помощью серверной задачи Agent Manager(менеджер агентов).


Инструментарий для разработки агента
Программный код, может быть написан на любом инструментарии, имеющемся в распоряжении разработчика Lotus Notes: простые действия (simple actions), @-формулы, LotusScript,Java.

Агенты, разработанные на LotusScript и Java, в зависимости от использованных разработчиком классов и функций, могут быть "ограниченными по возможностям" (restricted) или "неограниченными" (unrestricted). Unrestricted агенты могут использовать функции обработки файлов, изменения системного времени, отправления почтовых сообщений, а также другие потенциально опасные возможности.

Общие и персональные агенты
Агенты могут создаваться для выполнения на сервере или запуска пользователями, работающими с приложением (Shared - общие агенты), либо пользователь может написать агента для собственных нужд. Это так называемые персональные агенты. Для их создания пользователь должен иметь доступ к базе не ниже читателя (Reader) с установленной опцией Create Personal Agents и, чтобы дополнительно иметь возможность создавать агенты на языках LotusScript и Java, включенной опцией Create LotusScript/Java Agents. Создавать общие агенты позволяется пользователям с доступом, по меньшей мере, разработчика (Designer) базы.

Интерфейсные и фоновые агенты
В зависимости от опций настройки агента и условий его вызова (триггера агента), агенты могут обрабатываться при помощи встроенных в интерфейс пользователя возможностей клиента Notes (интерфейсные, UI-агенты) либо в фоновом режиме. В фоновом режиме работают агенты, запускающиеся по расписанию, по событию, возникающему в системе помимо действий пользователя (агент, запускающийся по приходу новой почты) либо параллельно его действиям (на создание или изменение документа).
Интерфейсные агенты перечислены в списке команд меню клиента Notes - подменю Действия(Actions). Кроме того, запуск интерфейсных агентов может осуществляться с помощью Action button, Action hotspot (кнопки, ссылки), помещаемых в элементы дизайна представлений или форм документов. Особый вид агентов обрабатывает событие вставки документа в базу данных из буфера обмена (If Documents Have Been Pasted). На станции пользователя интерфейсные агенты выполняются непосредственно клиентом Notes. Для выполнения фоновых агентов в базах, расположенных локально, необходимо поднять локальную задачу Agent Manager. Для этого в окне Общих параметров настройки нужно взвести флажок Запустить локальные агенты(Enable scheduled local agents).

Агенты, предназначенные для работы на сервере, выполняются в фоновом режиме задачей Agent Manager. Поскольку для выполнения фоновых агентов (в том числе и работающих локально) не привлекаются возможности интерфейса пользователя, их программные коды не должны содержать обращений к интерфейсным элементам (в частности, вызовов @Command), что является весьма распространенной ошибкой непрофессиональных разработчиков. Подробнее эта и ряд других проблем, связанных с выполнением агентов, будет рассмотрена ниже

    Событийные агенты
    Агенты могут быть настроены на выполнение по расписанию либо при возникновении следующих событий: До прихода новой почты (этот тип появился в версии Domino 5.0), По приходу новой почты, При появлении новых и измененных документов.

    Периодичность выполнения агента по расписанию задается разработчиком агента и может варьироваться с пяти минут до запуска раз в месяц. Разработчик может ограничить временные рамки выполнения агента датами либо временем суток, задать сервер, на котором агент будет выполняться (учитывая возможность наличия реплик на множестве серверов). При своем старте задача Agent Manager строит виртуальную таблицу (очередь) расписания запуска агентов и поддерживает ее в актуальном состоянии, запуская агенты согласно расписанию при наличии свободных сессий задачи.

    Агент До прихода новой почты (Before New Mail Arrives) запускается по событию прихода новой почты (маршрутизатор почты кладет письмо в почтовую базу), но до сохранения документа сообщения в почтовой базе. Причем данный тип агента запускается самим маршрутизатором (задача Router), а не менеджером агентов. Поскольку документ в базе не сохранен, на код агента накладываются некоторые ограничения. В частности, известно такое ограничение как невозможность помещения несохраненного документа в более чем одну папку. Поэтому задача сортировки (распределения документов по папкам) не может быть решена с помощью агентов этого типа. Еще одно ограничение на работу агента с этим триггером - в каждой почтовой базе может содержаться лишь один такой агент. Кроме того, агенты данного типа не подпадают под действие свойства базы данных Disable background agents for this database (Отключить для базы фоновые агенты) - см. ниже.

    Агент с триггером После прихода новой почты (After New Mail has Arrived) выполняется по событию прихода новой почты. Но в отличие от агентов с триггером До прихода новой почты, не сразу. Частота срабатывания агента может быть задана в зависимости от параметров файла настроек NOTES.INI AMgr_NewMailEventDelay, задающего время (в минутах) задержки между приходом почтового сообщения и запуском агента, и AMgr_NewMailAgentMinInterval, который описывает минимальный промежуток времени между двумя запусками одного и того же агента и позволяет обрабатывать пришедшие сообщения в пакетном режиме, что оптимизирует работу сервера. Оба параметра могут быть установлены в 0, что позволит минимизировать время задержки, но Agent Manager проверяет факт наступления соответствующего события с частотой, задающейся переменными AMgr_SchedulingInterval и AMgr_UntriggeredMailInterval (также в минутах), которые не могут быть менее 1 (минуты). Таким образом, гарантированное время реакции Notes-сервера на события принципиально не может быть меньше минуты. Кроме того, задержка в запуске агента может произойти ввиду отсутствия свободных сессий задачи Agent Manager

    Существуют еще два ньюанса, связанных с выполнением почтовых агентов. Первое, почтовые агенты, по умолчанию, запускаются на почтовых серверах автора агента (пользователя, сохранившего этот агент). То есть, на сервере, указанном как главный (почтовый) в документе пользователя серверной адресной книги. В репликах почтовой базы, расположенной на других серверах, эти агенты запускаться не будут. Для отключения проверки почтового сервера автора агента, администратор сервера может прописать в файле настроек переменную AMgr_DisableMailLookup со значением 1. В этом случае почтовые агенты смогут запускаться на любом сервере. Второе, почтовые агенты запускаются в почтовых базах пользователей либо в базах Mail-In-Databases, имеющих свой адрес в корпоративной(серверной) адресной книге. Попытка написания агента для баз типа mail.box обречены на неудачу. Менеджер агентов при составлении расписания запуска агентов просто игнорирует подобные базы (Решения для обработки почтовых сообщений на уровне mail.box рассмотрены в материале Управление электронной почтой в Lotus Domino R5 - перейти >>>)

    Агент с триггером По новым и измененным документам (If Documents Have Been Created or Modified) запускается на выполнение при появлении в базе данных новых или отредактированных документов. Здесь также следует отметить возможность задания минимального интервала между запусками одного и того же агента для обработки одного и того же документа параметром настройки AMgr_DocUpdateAgentMinInterval (в минутах) и времени задержки между событием появления нового документа и запуском агента AMgr_DocUpdateEventDelay.

    У администратора имеется возможность запрещать выполнение всех общих и личных агентов, запускаемых по расписанию, приходу почты и модификации документа для конкретной базы. Для этого в окне Свойств базы данных необходимо установить опцию Disable background agents for this database (Отключить для базы данных фоновые агенты).


    Web-агенты
    Особую группу агентов составляют агенты, с помощью которых реализуются функции web-интерфейса IBM Lotus Domino. Поскольку браузеры не имеют встроенных функций, необходимых для запуска агентов, то механизм работы web-агентов отличен от ранее описанного, для агента, работающего на клиенте Notes. Первое и основное отличие - web-агенты выполняются на сервере Domino. Обычно для поддержки клиентов Notes и web-клиентов создаются два различные набора агентов.
      По опыту можно сказать, что разработка кода под Notes и под web отличается по многим аспектам. Например, в коде web-агента не должны использоваться UI-классы LotusScript. Методология отладки и тестирования кода в обоих случаях разная. Поэтому рекомендация вести раздельную реализацию кода под Notes и web не лишена смысла. - С. Карандин.
    Агенты для web-интерфейса чаще всего пишутся на LotusScript или Java, поскольку simple actions (простые действия) недоступны в Web-приложениях, а @-формулы не позволяют возвращать информацию пользователю. Web-агент может быть выполнен при запросе на открытие документа, в этом случае агент отрабатывает и может внести изменения в документ до того, как сервер сгенерирует по этому документу html-код и передаст его пользователю (Событие WebQueryOpen). Событие сохранения открытого документа (WebQuerySave) также может быть обработано агентом, в задачи которого кроме собственно обработки сохранения входит также необходимость вернуть пользователю следующую html-страницу. Еще одна возможность запуска web-агента - передача Domino-серверу URL-запроса с операцией ?OpenAgent. Любой из этих запросов обрабатывается не Agent Manager, а задачей HTTP. Web-агент должен иметь следующие параметры настроек When: Run Manually From Action Menu (Выполнять: Вручную из списка агентов) и Run once (Однократное выполнение).

    В отличие от агента, запускаемого пользователем Notes вручную, агент, запущенный по запросу web-браузера имеет уровень доступа к базе данных и документам соответствующий правам автора агента (разработчика, который последним сохранил агент). Для того, чтобы разграничить доступ к базе данных и документам, разработчику нужно установить опцию Run Agent as Web user (Запускать от имени пользователя из Web) в окне Свойств агента.

    Функция RunOnServer
    Начиная с релиза 4.6.1 продукта, появилась возможность вставлять в программный код пользовательского интерфейса вызов запуска агента на сервере, используя обращение к методу RunOnServer встроенного класса NotesAgent. Этот метод нельзя применять в агентах, запускаемых на сервере (для этого больше подходит метод Run). Агент, запускаемый методом RunOnServer, выполняется не задачей Agent Manager, а непосредственно в сессии пользователя. С одной стороны, такой агент позволяет перенести часть нагрузки с клиента пользователя на более мощный сервер. Но в таком случае игнорируются ограничения на время работы агента и число одновременно запускаемых на сервере агентов (см. ниже). То есть у пользователей появляется возможность запускать сколь угодно много экземпляров агентов и нагружать сервер до бесконечности. Что, конечно, вредно для здоровья администратора.

    Выполнение агентов. Определение прав на работу агентов
    Агент как и любой другой элемент дизайна базы подписывается пользователем, сохранившим его (за сохранение считается также включение/снятие флажка активности для фоновых агентов в списке агентов). В соответствие с этой подписью устанавливается авторство агента. И в зависимости от прав автора агента, он либо будет исполняться, либо не будет

    Разрешение на запуск серверных агентов определяется в серверном документе Корпоративной Адресной книги. Секция Security (Безопасность) предусматривает установку следующих значений
    • Run personal agents (Запускать личные агенты): Содержит список пользователей, которым разрешен запуск личных агентов на сервере. Если поле пустое - разрешено всем. По умолчанию, поле пустое
    • Run restricted LotusScript/Java agents (Выполнять неполные LotusScript/Java агенты): Содержит список пользователей, кому разрешен запуск на сервере общих ограниченных LotusScript/Java агентов. Для этого и следующих параметров пустое поле означает, что запуск не разрешен никому
    • Run unrestricted LotusScript/Java agents (Выполнять полные LotusScript/Java агенты): Содержит список пользователей, кому разрешен запуск на сервере общих неограниченных LotusScript/Java агентов
    • Run restricted Java/JavaScript agents (Выполнять неполные Java/JavaScript агенты):
    • Run unrestricted Java/JavaScript agents (Выполнять неполные Java/JavaScript агенты): то же для агентов, написанных с использованием Java и JavaScript

    Закладка Security серверного документа

    Администратор сервера может разрешить запуск ограниченных и неограниченных агентов, только если они подписаны им самим. Тогда все входящие к нему агенты прочитываются, проверяются, тестируются и только после этого благополучно разрешаются и настраиваются на запуск. Такой подход хорош с точки зрения безопасности, но предъявляет большие требования к профессионализму и работоспособности администратора. В качестве второго варианта предлагается создать группы Developers (в общем случае) либо CanRestrictedAgentsRun и CanUnrestrictedAgentsRun, куда включать пользователей (администраторов или разработчиков), ответственных за работу агентов на сервере.

    Еще одно хорошее решение организации контроля за кодом исполняемых агентов - подписание кода с использованием специально сгенерированной учетной записи (к примеру, Designer/Org). Не стоит раздавать эту запись разработчикам - лучше задействовать процесс обработки запросов к администратору на подписание кода. Этот вариант разумно сочетает централизованное управление и персональную ответственность разработчика.

    Agent Manager. Обработка очереди на выполнение
    Когда наступает условие для запуска агента, задача Agent Manager выполняет следующее:
    • Проверяет, кем подписан агент (и соответствие электронной подписи). Если агент не подписан, задача выполнять его не будет.
    • Если агент написан на LotusScript или Java, проверяет по коду агента, является тот ограниченным или неограниченным
    • Проверяет информацию из серверного документа, разрешил ли администратор запуск агента, подписанного этим автором.
    • Если выполнение разрешено, начинает выполнение агента
    Для агентов, работающих в интерфейсе пользователя, права на выполнение тех или иных функций, заложенных в коде, определяются настройками Списка управления выполнением (Execute Control List, ECL) рабочей станции. Как и в случае с остальными элементами дизайна, если автор агента ограничен в том или ином действии, программа сообщает пользователю об этом, когда в период исполнения доходит до сомнительного места.

    Agent Manager. Настройки и мониторинг задачи
    Кроме ограничений на возможность запуска агентов, на работу задачи Agent Manager оказывают влияние значения из следующих полей в серверном документе Корпоративной Адресной книги
    • Refresh agent cache (Обновить кэш агентов). Кэш задачи Agent Manager содержит список агентов, запланированных для выполнения в течение текущих суток. В данном поле задается время, когда задача должна перестраивать данный список.
    • Daytime & Night time Parameters (Дневное и Ночное время). Эти поля разбивают сутки на два отрезка - дневное и ночное время. Для каждого отрезка времени для Agent Manager выделяется свое количество системных ресурсов, обычно меньшее в дневное время (когда сервер должен больше работать на пользователей) и относительно большее в ночное время. Хотя если сервер работает для web-пользователей (или других часовых поясов), пик нагрузки может приходиться и на другое время. Отсюда и условность этого деления. По умолчанию дневное время определено с 8 утра до 8 вечера, ночное - с 8 вечера до 8 утра. Отрезки не должны пересекаться. Во время суток, не принадлежащее ни дневному, ни ночному отрезкам, задача вообще не будет выполнять никаких агентов.
    • Max concurrent agents (Максимальное количество одновременно исполняемых агентов). В каждый момент времени задачей Agent Manager может выполняться только один агент в каждой базе данных. Но агенты из разных баз на одном сервере могут выполняться одновременно (параллельно). Согласно указанному значению поля, основная задача Agent Manager запускает соответствующее число своих подзадач (сессий, threads). Каждая из этих подзадач одновременно может исполнять только одного агента.
    • Maximum LotusScript/Java execution time (Максимальное время выполнения агентов LotusScript/Java). Эти поля ограничивают время, отводимое на выполнение одного агента. Если такой агент не успевает завершиться за заданное время, то Agent Manager "снимает" его. Данная возможность введена, в частности, в целях предотвращения потери производительности сервера из-за зацикливания недостаточно отлаженных агентов. Однако, следует обратить внимание, что порой некорректно снимаются агенты, использующие обращение к стороннему коду. Особенно часто зависание подобных агентов может происходить, если сторонний код использует интерфейсные функции (например, работу с окнами).
    • Max % busy before delay (Максимальный % занятости). Эти настройки применимы только для серверов версий ниже 4.6. Определяют в процентах количество процессорного времени, отводимого задаче Agent Manager. Позволяет не допустить захвата всех ресурсов сервера на выполнение агентов
    Замечание. Настройка, ограничивающая время выполнения Before New Mail Arrives (агента до прихода новой почты) агента, производится в документе Configuration (Конфигурации) сервера на закладке Router/SMTP -> Restrictions and Controls -> Delivery Controls в поле Pre-delivery agent timeout

    Агенты и задача Agent Manager. Часть 2 >>>
     
      Опубликовано — 06/22/2003 |    



    Добавить комментарий
    Имя * :
    e-mail
    Комментарий * :
    Код подтверждения * :

    Мероприятия
    Пресс-релизы
    Биржа труда
    Последнее на форуме
     
    А так же:
    Как удалить профиль?
    16.04.2016 00:08:51
    Скопировать в буфер поле документа
    24.05.2015 08:55:52
    Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
    16.04.2015 16:49:58
     
    © LOGOSPHERE.RU