Overview
La Biblioteca de Eventos permite a los desarrolladores rastrear los datos que el usuario ve y edita mientras usa una aplicación móvil con Device Sync habilitado. La Biblioteca de Eventos puede registrar tres tipos de eventos:
Leer eventos
Escribir eventos
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 fuertemente reguladas, como la atención médica o los servicios 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, esta enfermera atendió a un paciente, lo que posteriormente expuso al centro a una demanda por negligencia médica. El departamento legal debe revisar la información que tuvo a su disposición 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
La Biblioteca de Eventos abre un dominio de eventos independiente en el dispositivo del usuario. Este dominio tiene acceso a cualquier dominio de usuario que el desarrollador desee supervisar con la Biblioteca de Eventos.
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.
Mientras el dispositivo cliente tenga una conexión de red, Atlas Device Sync sincroniza estos datos del ámbito de eventos con una colección AuditEvent en la fuente de datos de Atlas vinculada.
Tip
Para obtener información sobre cómo implementar la biblioteca de eventos en una aplicación cliente, consulte: Biblioteca de eventos - Swift SDK.
Acceder a los datos de la biblioteca de eventos
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 cadena opcional para cada clave de metadatos que utilice. Por ejemplo:
{ "<Metadata Key>": { "bsonType": "string" } }
Tip
Para obtener información sobre cómo agregar un esquema a su colección, consulte: Definir y aplicar un esquema.
Ejemplo
Si no utiliza ningún metadato personalizado, su esquema podría verse así:
{ "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
Escribir eventos
Eventos personalizados
Leer eventos
La biblioteca de eventos registra los datos devueltos como resultado de una consulta como eventos de lectura. Los eventos de lectura también registran cualquier momento en que se instancia un objeto Realm, como al seguir un enlace o buscar un objeto por clave principal.
La biblioteca de eventos registra los eventos de lectura como un objeto JSON con dos campos:
type: almacena el nombre de la clasevalue: almacena una matriz de objetos serializados
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 consulta: el valor es una matriz de todos los objetos que coinciden con una consulta, incluso si los objetos nunca se utilizan
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.
Combinación de eventos de lectura
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:
Consultas que no coinciden con ningún objeto
Consultas que coinciden únicamente con objetos recién creados
El objeto lee dónde el objeto coincide con una consulta anterior
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
La biblioteca de eventos representa objetos incrustados creando un enlace en el objeto principal a la clave principal del objeto incrustado. Cuando el usuario no sigue el enlace, la clave principal es la única representación del objeto incrustado. Cuando el usuario sigue el enlace, el objeto incrustado se resuelve dentro del objeto principal.
Esto también produce una lectura de objeto de nivel superior para el objeto incrustado.
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,Person si previamente se consultó, se generaría un evento de lectura donde el objeto "oficina"no se resuelve dentro del objeto "persona"; solo se vería el ObjectID en el evento de lectura inicial. Si posteriormente se sigue un enlace que resuelve el objeto incrustado, se vería la lectura de nivel superior independiente para el objeto incrustado, pero no se obtendría la lectura del objeto principal que muestra el objeto incrustado resuelto dentro del objeto principal.
Escribir eventos
La biblioteca de eventos registra eventos de escritura cuando:
Se crean nuevos objetos
Los objetos existentes se modifican
Los objetos se eliminan
El evento de escritura registra el estado anterior y posterior del objeto. Para los objetos nuevos creados, el estado anterior es null. Para las eliminaciones, el estado posterior es null.
Por cada transacción de escritura que el cliente realiza durante un registro de eventos, la Biblioteca de Eventos registra un único evento de escritura. Este evento registra todos los cambios realizados durante la transacción.
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 biblioteca de eventos registra los cambios en un tipo de objeto como un objeto con tres matrices:
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
Cuando el usuario hace clic en un botón
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 un desarrollador o ningún dato en absoluto.
{ "_id": "62b4804c15659310991e5e0a", "_partition": "events-62b4804b15659310991e5e09", "activity": "login", "event": "custom event", "timestamp": 2022-06-23T15:01:31.941+00:00 }