Registro de publisher configurável

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 registerPublisher para registrar um novo publisher no serviço de telemetria:

    void registerPublisher(in PublisherInfo publisherInfo, in IConfigurablePublisher publisher)
    
  • Use o método unregisterPublisher para 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 createSubscription para se inscrever em um publisher se o connection_type da fonte de dados desse publisher na configuração de métricas estiver definido como SUBSCRIPTION. O argumento ISubscriber transmitido ao publisher fornece um método sendData(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 getLatestMessage para buscar a mensagem mais recente de um publisher se o connection_type da fonte de dados desse publisher na configuração de métricas estiver definido como ON_DEMAND. O serviço de telemetria usa esse método apenas se o PublisherInfo do publisher indicar supportsGet = 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.