Overview
La librería de evento permite a los desarrolladores rastrear qué datos ve y edita el usuario mientras utiliza una aplicación móvil habilitada con Device Sync. La Biblioteca de eventos puede registrar tres tipos de eventos:
Leer eventos
Write events
Eventos personalizados
Los desarrolladores pueden especificar las transacciones de lectura y escritura que se registrarán. Además, pueden configurar eventos personalizados para registrar información como las pulsaciones de botones o lo que el usuario ve en la aplicación frontend.
Este nivel de detalle permite a los auditores u otras partes interesadas evaluar exactamente qué sucedió y cuándo.
Importante
Se requiere sincronización basada en particiones
La biblioteca de eventos no admite la grabación AuditEvents Usando Sincronización Flexible. Esta función requiere una aplicación de servicios de sincronización basada en particiones para registrar datos AuditEvent.
Caso de uso
La Biblioteca de eventos proporciona la capacidad de realizar auditorías para cumplir con los requisitos de cumplimiento en industrias altamente reguladas, como servicios de salud o financieros.
Ejemplo
Una enfermera en un centro médico usa una aplicación con la librería de eventos activada. La aplicación muestra a la enfermera signos vitales en tiempo real, información transmitida desde el equipo médico e información sobre el historial de tratamientos del paciente. La aplicación aplica el cumplimiento de manera inherente porque su código bloquea acciones que la enfermera no debe realizar según los datos que están siendo visualizados. La librería de eventos captura toda la información que la enfermera ve dentro de la interfaz de la aplicación, así como las acciones que la enfermera realiza después de ver esa información.
En algún momento, este enfermero trata a un paciente que posteriormente expone a la facultad a una demanda por mala praxis. El departamento legal debe revisar la información que estaba disponible para la enfermera durante el tratamiento.
La librería de Eventos captura los datos digitales que la enfermera vio durante el tratamiento, así como las acciones que realizó. Al revisar estos datos, el equipo legal puede determinar si el tratamiento fue razonable. Sin esta información, el departamento legal no puede saber ni demostrar si las acciones de la enfermera fueron razonables.
Cómo funciona
The Event Library opens a separate "event" realm on the user's device. This realm has access to any user realm that the developer chooses to monitor with the Event Library.
Cuando los desarrolladores implementan la Biblioteca de Eventos, especifican los tipos de eventos que desean registrar, así como los metadatos personalizados que desean añadir a las grabaciones de eventos. Al ejecutarse la aplicación cliente, registra las interacciones del usuario designadas en el dominio "evento" como eventos de lectura, escritura o personalizados.
While the client device has a network connection, Atlas Device Sync synchronizes this event realm data to an AuditEvent collection in the linked Atlas data source.
Tip
Para obtener información sobre cómo implementar la biblioteca de eventos en una aplicación cliente, consulte: Biblioteca de eventos - Swift SDK.
Access Event Library Data
La librería de Eventos registra los datos de eventos en una colección llamada AuditEvent en tu base de datos Atlas vinculada. Cuando configures la Biblioteca de Eventos, utiliza el Modo de desarrollo para crear automáticamente esta colección y derivar un esquema a partir de los eventos sincronizados. Recuerda desactivar el Modo de desarrollo antes de llevar tu aplicación a producción.
Esquema de biblioteca de eventos
Su colección AuditEvent debe tener un esquema que contenga los siguientes campos:
Nombre del campo | Tipo | Requerido |
|---|---|---|
| ObjectId | Requerido |
| String | Requerido |
| String | Requerido |
| fecha | Requerido |
| String | Opcional |
| String | Opcional |
Además, el esquema debe contener un campo de string opcional para cada clave de metadatos que utilices. Por ejemplo:
{ "<Metadata Key>": { "bsonType": "string" } }
Tip
Para obtener información sobre cómo añadir un esquema a tu colección, consulta: Definir y aplicar un esquema.
Ejemplo
Si no estás usando metadatos personalizados, tu esquema podría ser similar a este:
{ "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 eventos
La biblioteca de eventos registra tres tipos de eventos:
Leer eventos
Write events
Eventos personalizados
Leer eventos
La Biblioteca de Eventos guarda los datos devueltos como resultado de una query como eventos de lectura. Los eventos de lectura también registran cualquier vez que se instancia un objeto Realm, como al seguir un enlace o buscar un objeto por llave primaria.
The Event Library records read events as a JSON object with two fields:
type: almacena el nombre de la clasevalue: stores an array of serialized objects
Los eventos de lectura almacenan valores de la siguiente manera:
Eventos de lectura de un solo objeto: el valor es una matriz que tiene un solo elemento
Objetos que coinciden con una query: el valor es un arreglo de todos los objetos que coinciden con la query, incluso si nunca se utilizan los objetos
Lecturas que ocurren durante una transacción de escritura: el valor son los datos que tenía el objeto antes de que comenzara la transacción de escritura; no refleja ningún cambio que ocurra durante el evento de escritura.
Objetos que no existen cuando comienza una transacción de escritura: los objetos que se crean en una transacción de escritura no producen ningún evento de lectura.
Importante
La biblioteca de eventos no puede determinar si solo se muestra un subconjunto de la consulta en la aplicación cliente. Por ejemplo, supongamos que la aplicación cliente tiene una vista de lista. El evento de lectura de la biblioteca de eventos no registra la información de desplazamiento, sino el resultado completo de la consulta. Los desarrolladores deben usar eventos personalizados para registrar cuándo una aplicación cliente muestra solo un subconjunto del resultado de una consulta.
Read Event Combining
Un flujo de cada evento de lectura podría producir muchos eventos "duplicados" sobre los mismos objetos que no añaden información. Para reducir estos eventos 'duplicados', la Evento Librería descarta y fusiona algunos eventos.
La biblioteca de eventos descarta:
Queries which match no objects
Queries which match only newly-created objects
Object reads where the object is matched by a previous query
La biblioteca de eventos fusiona:
Varias consultas en la misma tabla en una única consulta fusionada.
Formato de evento de lectura
Un objeto de evento de lectura tiene 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 lectura de objetos incrustados
The Event Library represents embedded objects by creating a link in the parent object to the primary key of the embedded object. When the user does not follow the link, the primary key is the only representation of the embedded object. When the user does follow the link, the embedded object resolves within the parent object.
This also produces a top-level object read for the embedded object.
Ejemplo
Un objeto Person tiene un objeto incrustado Office que contiene detalles sobre la ubicación donde trabaja la persona. Si no se sigue el enlace para ver ninguno de los detalles office, el objeto principal Person solo muestra el ID del objeto incrustado.
{ "type": "Person", "value": [{ "_id": "62b47624265ff7b58e9b204e", "_partition": "", "employeeId": 1, "name": "Michael Scott", "office": "62b47624265ff7b58e9b204f" }] }
Al seguir el enlace para ver los detalles del Office objeto incrustado, este se resuelve dentro del objeto principal.Además, se produce una segunda lectura de nivel superior solo del objeto secundario; en este caso, nuestro Office objeto.
{ "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" }] }
Nota
Leer combinación de eventos
La combinación de eventos de lectura puede afectar los objetos que ve cuando consulta un objeto y luego sigue un vínculo de objeto incrustado.
En el ejemplo anterior, si previamente consultaste el Person, eso produciría un evento de lectura donde el objeto office no está resuelto dentro del objeto persona; solo verías el ObjectID en el evento de lectura inicial. Luego, si más adelante sigues un enlace que resuelve el objeto incrustado, verías la lectura separada de nivel superior para el objeto incrustado, pero no obtendrías la lectura del objeto padre que muestre el objeto incrustado resuelto dentro del objeto padre.
Escribir eventos
The Event Library records write events when:
Se crean nuevos objetos
Los objetos existentes se modifican
Los objetos se eliminan
The write event records both the before and after state of the object. For new objects created, the before state is null. For deletes, the after state of the object is null.
Por cada transacción de escritura que el cliente confirma durante un alcance de registro de eventos, la Biblioteca de eventos registra un solo evento de escritura. Este evento de escritura registra todos los cambios realizados durante la transacción de escritura.
La carga útil es un objeto codificado por nombres de clase. Cada tipo de objeto que tuvo objetos creados, modificados o eliminados tiene una entrada.
La Librería de eventos registra cambios en un tipo de objeto Realm como un objeto con tres arreglos:
inserciones: contienen los objetos serializados que se insertaron, utilizando el mismo esquema de serialización que las lecturas
modificaciones: informar tanto los valores antiguos como los nuevos de cada propiedad
eliminaciones: contienen los objetos serializados que se borraron, utilizando el mismo esquema de serialización que la lectura
En una modificación, el objeto newValue solo incluye propiedades diferentes a las del objeto oldValue. Si una transacción de escritura asigna valores a un objeto, pero no modifica el valor de ninguna propiedad,
Formato de evento de escritura
Un objeto de evento de escritura tiene 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
Los eventos personalizados pueden registrar tipos de eventos que no leen ni escriben en la base de datos, como:
Cuando se muestra una pantalla específica
When the user clicks a button
Puedes usar eventos personalizados para contextualizar eventos de lectura y escritura, como registrar un evento personalizado cuando la aplicación cliente muestra una pantalla determinada. De esta forma, puedes inferir que los eventos de lectura y escritura posteriores al evento personalizado que registra la carga de la pantalla de la aplicación ocurrieron en esa pantalla.
Los eventos personalizados pueden almacenar cualquier dato que desee el desarrollador, o no almacenar datos en absoluto.
{ "_id": "62b4804c15659310991e5e0a", "_partition": "events-62b4804b15659310991e5e09", "activity": "login", "event": "custom event", "timestamp": 2022-06-23T15:01:31.941+00:00 }