Служба телеметрии предоставляет настраиваемый реестр издателей в качестве дополнительного средства сбора данных. Приложения и службы могут зарегистрироваться в реестре в качестве издателей телеметрии, что, в свою очередь, делает их доступными для службы телеметрии. Дополнительную информацию о поддерживаемых типах источников данных см. в разделе «Источники данных» .
Библиотека
Телеметрия взаимодействует с издателями Configurable Publisher Registry через Binder. Вместо ручной реализации интерфейсов AIDL мы настоятельно рекомендуем использовать экспериментальную библиотеку Configurable Publisher Registry, которая является частью нашего SDK для телеметрии . Библиотека абстрагирует интерфейсы AIDL и предоставляет чистый, типобезопасный API для определения издателей, публикации телеметрических данных и управления преобразованием сообщений protobuf в их формат для передачи по сети.
Для получения дополнительной информации об использовании библиотеки см. раздел «Библиотека настраиваемого реестра издателя» .
Ручная реализация и регистрация издателей.
Если вы предпочитаете не использовать предоставленную библиотеку, вы можете реализовать необходимые интерфейсы Binder вручную. В следующих разделах представлен обзор шагов, необходимых для реализации издателя и его регистрации в реестре настраиваемых издателей.
Регистрация
В отличие от сервисов SDV, метаданные которых, такие как структура сообщений, определены в VSIDL и доступны системе, издатели, использующие настраиваемый реестр издателей, должны явно предоставлять свои метаданные. Эти метаданные предоставляются через объект PublisherInfo во время регистрации.
Регистрация этих издателей осуществляется с помощью интерфейса AIDL IConfigurablePublisherRegistry . Таким образом, вы можете писать издателей на любом языке, поддерживаемом AIDL, включая Java, C++ и Rust. Интерфейс предоставляет два метода:
Для регистрации нового издателя в службе телеметрии используйте метод
registerPublisher:void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)Используйте метод
unregisterPublisherдля отмены регистрации ранее зарегистрированного издателя в службе телеметрии:void unregisterPublisher(in @utf8InCpp String serviceName)
Объект PublisherInfo содержит основную информацию об издателе:
| Поле | Описание |
|---|---|
serviceName | Пользовательское имя издателя. Используйте это имя для ссылки на него в настройках метрик. |
fileDescriptorSet | Сериализованный объект google.protobuf.FileDescriptorSet (подробнее см. в разделе «Самоописывающиеся сообщения »), содержащий дескриптор сообщения (названный по полю messageTypeName ) для сообщения, публикуемого этим издателем, и все необходимые зависимости. Служба телеметрии использует дескриптор сообщения для десериализации данных, отправляемых издателем. Дополнительную информацию о создании этого объекта во время сборки см. в разделе «Инструмент генерации дескрипторов Java protobuf» . |
messageTypeName | Полное имя сообщений protobuf, которые публикует ваш издатель. Дескриптор этого сообщения должен быть объявлен в fileDescriptorSet . |
supportsGet | Указывает, может ли издатель предоставлять последнее сообщение без подписки на него. |
Выполнение
Ваш пользовательский издатель должен реализовывать интерфейс IConfigurablePublisher , предоставив следующие методы:
Служба телеметрии вызывает
createSubscriptionдля подписки на издателя, если параметрconnection_typeисточника данных для этого издателя в конфигурации метрик установлен наSUBSCRIPTION. АргументISubscriber, передаваемый вашему издателю, предоставляет методsendData(in byte[] data), который можно использовать для потоковой передачи сообщений protobuf в службу телеметрии.IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)Служба телеметрии вызывает
getLatestMessageдля получения последнего сообщения от издателя, если параметрconnection_typeисточника данных для этого издателя в конфигурации метрик установлен наON_DEMAND. Служба телеметрии использует этот метод только в том случае, еслиPublisherInfoиздателя указаноsupportsGet = true.@nullable byte[] getLatestMessage(in @nullable byte[] configuration)
Служба телеметрии устанавливает аргумент configuration в соответствии с параметром configuration источника данных в конфигурации метрик.