Spec-Zone.ru › OpenTSDB

Плагины

OpenTSDB реализует очень простую модель плагинов для расширения приложения. Плагины используют средства службы и поставщика услуг, встроенные в Java 1.6, которые позволяют динамически загружать JAR-файлы и инициализировать реализации плагинов после запуска OpenTSDB. Хотя это не так гибко, как многие реализации фреймворков, нам нужно только загрузить плагин при запуске, инициализировать реализацию и начать передавать данные ему или через него.

Для создания плагина вам нужно только расширить один из абстрактных классов плагинов, написать описание/манифест службы, скомпилировать, поместить ваш JAR-файл (вместе со всеми необходимыми зависимостями) в папку плагинов OpenTSDB, изменить конфигурацию TSD и перезапустить. Вот и всё. Никаких сложных фреймворков, никаких проблем с загрузкой и выгрузкой в неудобные моменты и т.д.

Манифест

JAR-файлу плагина требуется манифест со специальной папкой services и файлом, чтобы ServiceLoader мог загрузить его должным образом. Вот шаги по созданию соответствующих файлов:

  • Создайте директорию META-INF в директории src. Некоторые IDE могут автоматически сгенерировать её

  • Внутри директории META-INF создайте файл с именем MANIFEST.MF. Опять же, некоторые IDE могут автоматически сгенерировать его.

  • Отредактируйте файл MANIFEST.MF и добавьте:

    Manifest-Version: 1.0
    

    убедившись, что заканчивается пустой строкой. Вы можете добавить больше информации в манифест, если хотите. Это минимальный набор для удовлетворения требований к плагину.

  • Создайте директорию services в META-INF

  • Внутри services создайте файл с каноническим именем класса абстрактного класса плагина, который вы реализуете. Например, если вы реализуете net.opentsdb.search.SearchPlugin, используйте это имя для файла.

  • Отредактируйте новый файл и поместите каноническое имя каждого класса, реализующего абстрактный интерфейс, в новой строке файла. Например, если ваша реализация называется net.opentsdb.search.ElasticSearch, вставьте её в строку. Некоторые краткие заметки об этом файле:

    • Вы можете вставлять комментарии в файл реализации службы. Символ комментария — #, как и в файле свойств Java. Например:

      # ElasticSearch plugin written by John Doe
      # that sends data over HTTP to a number of ElasticSearch servers
      net.opentsdb.search.ElasticSearch
      
    • Вы можете иметь более одной реализации одного и того же абстрактного класса в одном JAR-файле и в этом файле. ПРИМЕЧАНИЕ: Если у вас существенно разные реализации, начните новый проект и JAR-файл. Например, если вы реализуете плагин поиска для ElasticSearch и другой для Solr, поместите Solr в отдельный проект. Однако если у вас две реализации, которые очень похожи, но немного отличаются, вы можете создать один проект. Например, вы можете написать плагин ElasticSearch, использующий протокол HTTP, и другой — использующий Thrift. В этом случае у вас может быть файл, подобный этому:

      # ElasticSearch HTTP
      net.opentsdb.search.ElasticSearchHTTP
      # ElasticSearch Thrift
      net.opentsdb.search.ElasticSearchThrift
      
  • Теперь скомпилируйте свой JAR-файл и убедитесь, что включили файл манифеста. Каждая IDE обрабатывает это по-разному. Если вы используете командную строку, попробуйте это:

    jar cvmf <path to MANIFEST.MF> <plugin jar name> <list of class files>
    

    где <list of class files> включает созданный вами файл службы. Например:

    jar cvmf META-INF/MANIFEST.MF searchplugin.jar ../bin/net/opentsdb/search/myplugin.class META-INF/services/net.opentsdb.search.SearchPlugin
    

Плагины запуска

Плагины запуска могут использоваться для выполнения дополнительных шагов инициализации во время процесса запуска OpenTSDB.

Доступны четыре крючка, и они вызываются в таком порядке:
  • Конструктор
  • Инициализация
  • Готово
  • Выключение

Конструктор

В конструкторе вашего плагина вы должны инициализировать свой плагин и установить все необходимые внешние соединения. Например, подключиться к инструменту обнаружения служб, такому как Etcd или Curator.

Инициализация

Крючок Инициализации вызывается после того, как OpenTSDB полностью прочитает параметры конфигурации, как из файла, так и из командной строки. Это происходит до создания объекта TSDB, поэтому вы можете изменить конфигурацию на этом этапе.

Этот крючок может использоваться для регистрации OpenTSDB в механизме обнаружения служб или для динамического поиска местоположения кластера HBase и заполнения конфигурации. Вы потенциально можете создать таблицы HBase, если они не существуют на этом этапе.

Примечание

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

Готово

Этот крючок вызывается после того, как OpenTSDB был полностью инициализирован и готов обслуживать трафик. Этот крючок может использоваться для установки статуса в READY в системе обнаружения служб, изменения состояния в балансировщике нагрузки или выполнения других задач, которые требуют полностью функционирующего экземпляра OpenTSDB.

Выключение

Этот крючок вызывается, когда OpenTSDB выполняет задачи завершения. Здесь не должно выполняться никакой работы, которая требует функционирующего и подключенного экземпляра OpenTSDB. Вы можете использовать это для обновления статуса этого узла в вашем механизме обнаружения служб.

© 2010–2016 The OpenTSDB Authors
Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
http://opentsdb.net/docs/build/html/development/plugins.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API