Biblioteca de eventos
Nesta página
Visão geral
A Biblioteca de eventos permite que os desenvolvedores acompanhem quais dados o usuário vê e edita ao usar um aplicativo móvel habilitado para Device Sync. A Biblioteca de eventos pode registrar três tipos de eventos:
Eventos de leitura
Gravar eventos
Eventos personalizados
Os desenvolvedores podem especificar as transações de leitura e gravação a serem registradas. Além disso, você pode configurar eventos personalizados para registrar coisas como pressionamentos de botão ou o que o usuário está vendo no aplicativo frontend.
Esse nível de detalhamento permite que os auditores ou outras partes envolvidas avaliem exatamente o que aconteceu e quando.
Importante
Sincronização baseada em partição necessária
A Biblioteca de eventos não suporta a gravação AuditEvents
usando o Flexible Sync. Essa funcionalidade requer um App Services App de sincronização baseada em partição para registrar dados AuditEvent
.
Caso de uso
A Biblioteca de eventos oferece a capacidade de realizar auditorias para atender aos requisitos de conformidade em setores fortemente regulamentados, como saúde ou serviços financeiros.
Exemplo
Uma auxiliar de saúde usa um aplicativo com a Biblioteca de eventos habilitada. O aplicativo apresenta à auxiliar de saúde sinais fatais em tempo real, informações transmitidas do sistema de saúde e o histórico de tratamento do pai. O aplicativo força inerentemente a conformidade, porque seu código bloqueia ações que a ama não deve realizar com base nos dados visualizados. A Biblioteca de eventos captura todas as informações que a enfermeira vê dentro da interface do aplicativo, bem como as ações que a enfermeira executa depois de visualizar essas informações.
Em algum momento, essa auxiliar oferece tratamento a uma cliente que mais tarde expõe a instalação a um processo por malversação. O departamento legal deve revisar as informações que estavam disponíveis para a ama durante o tratamento.
A Biblioteca de eventos captura os dados digitalizados que o(a) enfeiro(a) visualizou durante o tratamento, bem como as ações que ele realizou. Ao analisar esses dados, a equipe legal pode avaliar se o tratamento foi razoável. Sem essas informações, o departamento legal não pode saber e provar se as ações da auxiliares de saúde foram razoáveis.
Como funciona
A Biblioteca de Eventos abre um domínio de "evento" separado no dispositivo do usuário. Esse domínio tem acesso a qualquer domínio do usuário que o desenvolvedor escolha monitorar com a Biblioteca de eventos.
Quando os desenvolvedores implementam a Biblioteca de eventos, eles designam os tipos de eventos que desejam gravar, bem como quaisquer metadados personalizados que desejam anexar às gravações dos eventos. Quando o aplicativo cliente é executado, ele registra as interações do usuário designado no domínio "vento" como eventos de leitura, eventos de gravação ou eventos personalizados.
Enquanto o dispositivo cliente tiver uma conexão de rede, o Atlas Device Sync sincroniza os dados do Realm do evento com uma collection AuditEvent
na fonte de dados do Atlas vinculada.
Dica
Veja também:
Para obter informações sobre como implementar a Biblioteca de eventos em um aplicação cliente , consulte: Biblioteca de eventos - Swift SDK.
Acessar dados da biblioteca de eventos
A Biblioteca de Eventos registra dados de eventos em uma coleção chamada AuditEvent
no seu banco de dados Atlas vinculado. Ao configurar a Biblioteca de eventos, use o Modo de desenvolvimento para criar automaticamente essa coleção e derivar um esquema a partir de eventos sincronizados. Lembre-se de desativar o modo de desenvolvimento antes de levar seu aplicativo para produção.
Esquema da Biblioteca de Eventos
Sua collection AuditEvent
deve ter um esquema contendo os seguintes campos:
Nome do campo | Tipo | Obrigatório |
---|---|---|
_id | ObjectId | Obrigatório |
activity | String | Obrigatório |
_partition | String | Obrigatório |
timestamp | Data | Obrigatório |
event | String | Opcional |
data | String | Opcional |
Além disso, o esquema deve conter um campo de string opcional para cada chave de metadados que você usa. Por exemplo:
{ "<Metadata Key>": { "bsonType": "string" } }
Dica
Veja também:
Para obter informações sobre como adicionar um esquema à sua coleção, consulte: Definir e aplicar um esquema.
Exemplo
Se você não estiver usando nenhum metadado personalizado, seu esquema poderá ser assim:
{ "title": "AuditEvent", "bsonType": "object", "required": [ "_id", "_partition", "timestamp", "activity" ], "properties": { "_id": { "bsonType": "objectId" }, "_partition": { "bsonType": "string" }, "timestamp": { "bsonType": "date" }, "activity": { "bsonType": "string" }, "event": { "bsonType": "string" }, "data": { "bsonType": "string" } } }
Tipos de evento
A Biblioteca de eventos registra três tipos de eventos:
Eventos de leitura
Gravar eventos
Eventos personalizados
Eventos de leitura
A Biblioteca de eventos registra os dados retornados como resultado de uma query como eventos de leitura. Os eventos de leitura também registram qualquer momento em que um objeto do Realm é instanciado, como ao seguir um link ou procurar um objeto por chave primária.
A Biblioteca de eventos registra eventos de leitura como um objeto JSON com dois campos:
type
: armazena o nome da classevalue
: armazena uma array de objetos serializados
Leia os valores do armazenamento de eventos da seguinte forma:
Eventos de leitura de objeto único: o valor é uma array que tem um único elemento
Objetos que correspondem a uma query: o valor é uma array de todos os objetos que correspondem a uma query, mesmo que os objetos nunca sejam usados
Leituras que ocorrem durante uma transação de escrita: o valor são os dados que o objeto tem antes do início da transação de escrita; ele não reflete nenhuma alteração que ocorra durante o evento de gravação.
Objetos que não existem quando uma transação de escrita começa: objetos criados em uma transação de escrita não produzem nenhum evento de leitura.
Importante
A Biblioteca de eventos não consegue saber se apenas um subconjunto da query é exibido no aplicativo cliente. Por exemplo, digamos que o aplicativo cliente tenha uma visualização de lista. O evento de leitura da Biblioteca de eventos não registra informações de rolagem; ele registra o evento de leitura como o resultado completo da query. Os desenvolvedores devem usar eventos personalizados para registrar quando um aplicativo cliente exibe apenas um subconjunto de um resultado de query.
Ler combinação de eventos
Um fluxo de cada evento de leitura pode produzir muitos eventos "duplicados" nos mesmos objetos que não adicionam informações. Para reduzir esses eventos "duplicados", a Biblioteca de Eventos descarta e mescla alguns eventos.
A Biblioteca de eventos descarta:
Queries que não correspondem a nenhum objeto
Queries que correspondem apenas a objetos recém-criados
O objeto lê onde o objeto é correspondido por uma query anterior
A Biblioteca de eventos mescla:
Várias queries na mesma tabela em uma única query mesclada.
Ler formato do evento
Um objeto de evento de leitura tem este formato:
{ "_id": "62b396f4ebe94d2b871889bb", "_partition":"events-62b396f4ebe94d2b871889ba", "activity":"read object", "data": "{ "type":"Person", "value": [{ "_id": "62b396f4ebe94d2b871889b9", "_partition":"", "employeeId":1, "name":"Anthony" }] }", "event":"read", "timestamp": 2022-06-23T14:54:37.756+00:00 }
Eventos de leitura de objetos incorporados
A Biblioteca de eventos representa objetos embarcados criando um link no objeto principal para a chave primária do objeto embarcado. Quando o usuário não segue o link, a chave primária é a única representação do objeto incorporado. Quando o usuário segue o link, o objeto embarcado é resolvido dentro do objeto pai.
Isso também produz uma leitura de objeto de nível superior para o objeto incorporado.
Exemplo
Um objeto Person
tem um objeto incorporado Office
que contém detalhes sobre o local onde a pessoa trabalha. Quando não seguem o link para visualizar nenhum dos detalhes office
, o objeto Person
pai mostra apenas o ID do objeto incorporado.
{ "type": "Person", "value": [{ "_id": "62b47624265ff7b58e9b204e", "_partition": "", "employeeId": 1, "name": "Michael Scott", "office": "62b47624265ff7b58e9b204f" }] }
Quando seguimos o link para visualizar detalhes do objeto Office
incorporado, isso resolve o objeto incorporado dentro do objeto pai. Ele também produz uma segunda leitura de nível superior apenas do objeto filho - neste caso, nosso objeto Office
.
{ "type":"Person", "value": [{ "_id": "62b47975a33224558bdf8b4d", "_partition": "", "employeeId": 1, "name": "Michael Scott", "office": { "_id": "62b47975a33224558bdf8b4e", "_partition": "", "city": "Scranton", "locationNumber": 123, "name": "Dunder Mifflin" } }] } { "type": "Office", "value": [{ "_id": "62b47975a33224558bdf8b4e", "_partition": "", "city": "Scranton", "locationNumber": 123, "name": "Dunder Mifflin" }] }
Observação
Combinando evento de leitura
A Combinação de Eventos de Leitura pode afetar os objetos que você vê ao fazer query de um objeto e, posteriormente, seguir um link de objeto incorporado.
No exemplo acima, se você tiver consultado anteriormente o Person
, isso produzirá um evento de leitura em que o objeto de escritório não está resolvido dentro do objeto de pessoa; você veria apenas o ObjectId no evento de leitura inicial. Em seguida, se posteriormente você seguir um link que resolve o objeto incorporado, verá a leitura de nível superior separada para o objeto incorporado, mas não obterá a leitura do objeto pai que mostra o objeto incorporado resolvido dentro do objeto principal.
Eventos de gravação
A Biblioteca de Eventos registra eventos de gravação quando:
Novos objetos são criados
Objetos existentes são modificados
Objetos são excluídos
O evento de gravação registra o estado antes e depois do objeto. Para novos objetos criados, o estado anterior é null
. Para exclusões, o estado posterior do objeto é null
.
Para cada transação de escrita que o cliente confirma durante um escopo de gravação de eventos, a Biblioteca de Eventos registra um único evento de escrita. Esse evento de gravação registra todas as alterações feitas durante a transação de escrita.
A carga útil é um objeto chaveado nos nomes das classe . Cada tipo de objeto que teve objetos criados, modificados ou excluídos tem uma entrada.
A Biblioteca de eventos registra as alterações em um tipo de objeto como um objeto com três arrays:
inserções: contém os objetos serializados que foram inseridos, usando o mesmo esquema de serialização das leituras
modificações: relatar os valores antigos e novos de cada propriedade
exclusões: contém os objetos serializados que foram excluídos, usando o mesmo esquema de serialização das leituras
Em uma modificação, o objeto newValue
inclui somente propriedades que são diferentes do objeto oldValue
. Se uma transação de gravação atribuir a um objeto , mas na verdade não alterar o valor de nenhuma propriedade,
Formato do evento de gravação
Um objeto de evento de gravação tem este formato:
{ "Person": { "insertions": [{ "_id": "62b47ead6a178a314ae0eb52", "_partition": "", "employeeId": 1, "name": "Anthony" }] } }
{ "Person":{ "modifications": [{ "newValue": { "name": "Tony" }, "oldValue": { "_id": "62b47d83cdac49f904c5737b", "_partition": "", "employeeId": 1, "name": "Anthony" } }] } }
{ "Person":{ "deletions":[{ "_id":"62b47ead6a178a314ae0eb52", "_partition":"", "employeeId":1, "name":"Tony", "userId":"tony.stark@starkindustries.com" }] } }
Eventos personalizados
Os eventos personalizados podem registrar tipos de eventos que não leem ou gravam no banco de dados, como:
Quando uma tela específica é exibida
Quando o usuário clica em um botão
Você pode usar eventos personalizados para dar contexto a eventos de leitura e escrita, como gravar um evento personalizado quando o aplicativo cliente exibe uma determinada tela. Em seguida, é possível inferir que os eventos de leitura e escrita após o evento personalizado de gravação do carregamento da tela do aplicativo ocorreram todos nessa tela de aplicativo.
Os eventos personalizados podem armazenar quaisquer dados que um desenvolvedor deseje ou nenhum dado.
{ "_id": "62b4804c15659310991e5e0a", "_partition": "events-62b4804b15659310991e5e09", "activity": "login", "event": "custom event", "timestamp": 2022-06-23T15:01:31.941+00:00 }