O serviço de telemetria fornece o registro de publisher configurável como um meio secundário de coleta de dados. Os aplicativos e serviços podem se registrar como publishers de telemetria no registro, o que os disponibiliza para o serviço de telemetria. Consulte Fontes de dados para mais informações sobre os tipos de fontes de dados que oferecemos suporte.
Biblioteca
A telemetria se comunica com os publishers do registro de publisher configurável pelo Binder. Em vez de implementar manualmente as interfaces AIDL, recomendamos fortemente o uso da biblioteca experimental do registro de publisher configurável, que faz parte do nosso SDK de telemetria. A biblioteca abstrai as interfaces AIDL e fornece uma API limpa e com segurança de tipo para definir publishers, publicar dados de telemetria e gerenciar a conversão de mensagens protobuf para o formato de fio.
Para mais informações sobre como usar a biblioteca, consulte Registro de publisher configurável biblioteca.
Implementação e registro manual do publisher
Se você não quiser usar a biblioteca fornecida, implemente as interfaces necessárias do Binder manualmente. As seções a seguir oferecem uma visão geral das etapas necessárias para implementar um publisher e registrá-lo no registro de publisher configurável.
Registro
Ao contrário dos serviços SDV, que têm metadados, como a estrutura de mensagens, definidos em VSIDL e disponíveis para o sistema, os publishers que usam o registro de publisher configurável precisam fornecer explicitamente os metadados. Você fornece esses metadados pelo objeto PublisherInfo durante o registro.
Você registra esses publishers usando a IConfigurablePublisherRegistry
interface AIDL. Assim, é possível escrever os publishers em qualquer linguagem com suporte a AIDL, incluindo Java, C++ e Rust. A interface fornece dois métodos:
Use o método
registerPublisherpara registrar um novo publisher no serviço de telemetria:void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)Use o método
unregisterPublisherpara cancelar o registro de um publisher registrado anteriormente no serviço de telemetria:void unregisterPublisher(in @utf8InCpp String serviceName)
O objeto PublisherInfo especifica as informações básicas do publisher:
| Campo | Descrição |
|---|---|
serviceName |
Um nome definido pelo usuário do publisher. Use esse nome para se referir a ele nas configurações de métricas. |
fileDescriptorSet |
Um google.protobuf.FileDescriptorSet serializado (consulte Mensagens auto-descritivas para mais informações) que contém o descritor de mensagem (nomeado pelo campo messageTypeName) da mensagem que esse publisher publica e todas as dependências necessárias. O serviço de telemetria usa o descritor de mensagem para desserializar os dados enviados pelo publisher. Para mais informações sobre como gerar isso no tempo de build, consulte Ferramenta geradora de descritores protobuf Java. |
messageTypeName |
Nome completo das mensagens protobuf que o publisher publica. O descritor de mensagem precisa ser declarado em fileDescriptorSet. |
supportsGet |
Indica se o publisher pode fornecer a mensagem mais recente sem se inscrever nela. |
Implementação
O publisher personalizado precisa implementar a interface IConfigurablePublisher fornecendo os seguintes métodos:
O serviço de telemetria chama
createSubscriptionpara se inscrever em um publisher se oconnection_typeda fonte de dados desse publisher na configuração de métricas estiver definido comoSUBSCRIPTION. O argumentoISubscribertransmitido ao publisher fornece um métodosendData(in byte[] data), que pode ser usado para transmitir mensagens protobuf para o serviço de telemetria.IConfigurablePublisherSubscription createSubscription(in ISubscriber subscriber, in @nullable byte[] configuration)O serviço de telemetria chama
getLatestMessagepara buscar a mensagem mais recente de um publisher se oconnection_typeda fonte de dados desse publisher na configuração de métricas estiver definido comoON_DEMAND. O serviço de telemetria usa esse método apenas se oPublisherInfodo publisher indicarsupportsGet = true.@nullable byte[] getLatestMessage(in @nullable byte[] configuration)
O serviço de telemetria define o argumento configuration como a opção configuration da fonte de dados na configuração de métricas.