Das hier beschriebene Modell beschreibt die beim Erfassen von Nutzungsdaten mit dem Logging-Framework verwendeten Objekt-Klassen. Da es beim Logging-Framework um die Erfassung von Nutzungsdaten geht, ist ein Event hier das zentrale Element, welches sich durch verschiedene Attribute in drei unterschiedliche Unterklassen differenzieren lässt:


Typen von Objekten

Event

Ein Event grundsätzlich immer die folgenden Attribute:

AttributBedeutungJSON-IdentifierElasticSearch-Identifier
timestampZeitpunkt des EventsDATE@timestamp
instanceIdID der Instanz der ApplikationINSTANCEIDINSTANCEID
eventSourceQuelle / Verursacher des EventsSOURCESOURCE
eventTypeTyp des Events, z. B. DISPLAY_SHOW für das Einblenden eines Elements, s. Enumerations-TypenTYPETYPE
eventDataZusätzliche Daten im Kontext des Events, bspw. eine ID des Ziel-Objekts einer InteraktionDATA

*entfällt, da Kind-Elemente zur einfacheren Indizierung in des Wurzel-Element verschoben werden

usersessionID zur Identifierung einer Nutzer-SitzungSESSIONSESSION



Enumations-Typen

Für eine Standardisierung und Vereinheitlichung von Quellen und Arten von Events wurden Datenmodell des Logging-Framework Enumerations-Typen eingeführt:

EventSourceBedeutung
USERQuelle des Events war der Benutzer
SYSTEMQuelle des Events war das System
ENVIRONMENTQuelle des Events war etwas im Umfeld des System (äußere Einflüsse)

Die SOURCE eines Events gibt also an, um welche Art von Event es sich handelt. 


EventTypeTypeBedeutung
EventTypeSystemDISPLAY_SHOWElement wird sichtbar / geöffnet
EventTypeSystemDISPLAY_HIDEElement wird unsichtbar / geschlossen
EventTypeSystemDATA_AVAILABLEDaten sind zum Laden verfügbar
EventTypeSystemDATA_LOADEDDaten wurden geladen
EventTypeSystemLOGWichtige Log-Meldung der Instanz (Level: WARN oder ERROR)
EventTypeSystemSTARTUPInstanz wird gestartet
EventTypeSystemSTARTUP_FINISHEDInstanz wurde gestartet / ist einsatzbereit
EventTypeSystemALIVEInstanz ist funktionsfähig
EventTypeSystemSHUTDOWNInstanz wurde heruntergefahren / beendet
EventTypeUserUSER_ACTIVITYEine von einem Nutzer aktiv ausgelöste Interaktion, bspw. Drücken einer Bedienoberfläche
EventTypeUserUSER_PASSIVEEin von einem Nutzer passiv ausgelöstes Event, bspw. erfasst durch andere Sensoren (Blick auf bestimmtes Objekt,...)
EventTypeUserUSER_SESSIONSTARTEin Nutzer wurde erkannt und eine Session wurde gestartet.
EventTypeUserUSER_SESSIONENDDie Session wurde beendet.
EventTypeUserEXITEin Nutzer verlässt die Applikation.
EventTypeUserENTEREin Nutzer beginnt die Interaktion mit der Applikation.

Unter Session wird im Logging-Framework ein Zeitabschnitt  definiert, in welchem ein (oder mehrere) Benutzer mit dem System interagiert.


Auch zusätzliche Eventdaten im Feld eventData unterliegen einer Kategorisierung. Diese sind je Element einzigartig, können, müssen aber nicht bei jedem Event verwendet werden. Bisher sind hier folgende Kategorien definiert:

EventDataBedeutung
DATA_IDDer eindeutige Schlüssel mit dem das dem Event zugrundeliegende Informationsobjekt referenziert werden kann.
DATA_TYPEDer Typ des dem Event zugrundeliegenden Informationsobjekts.
EVENT_POSITIONPosition in Form von X / Y-Koordinaten
TARGET_CLASSJava-Klasse des Event-auslösenden Elements
TARGET_SCALESkalierungswerte (X/Y) ( = Größe) des Event-auslösenden Elements
CUSTOMBenutzerdefinierter Wert. Kann beliebig bei der Integration des Logging-Frameworks befüllt werden. Beinhaltet z. B. die Log-Meldung bei EventTypeSystem=LOG
ACTIVITYDetail-Aktion die durchgeführt wurde, beim einem EventTypeUser=USER_ACTIVITY z. B. CLICKED, PRESSED, DRAG,...

Diese Liste ist aufgrund der Offenheit der Anzahl an Parametern flexibel nach den weiter zu evaluierenden Bedürfnissen zu erweitern / anzupassen.





JSON-Repräsentation

Wie den Spalten "JSON-Identifier" sowie "ElasticSearch-Identifier" zu entnehmen ist, ist generell zu Differenzieren zwischen dem Modell im Java-Kontext und dem Modell im ElasticSearch-Kontext. Im ElasticSearch-Kontext sind zum einen noch zusätzliche, organisatorische Felder von ElasticSearch enthalten (auf die an dieser Stelle nicht weiter eingegangen wird) und zum anderen wurde hier zur weiteren Optimierung der Indizierung das Objekt "DATA" aufgelöst und die Kind-Elemente für ElasticSearch auf die oberste Ebene verschoben. Zusätzlich wurde das DATE-Element in das timestamp-Element überführt:

JSON-Repräsentation, Java:

{
    "DATE": "2021-02-06 16:34:56.035",
    "SOURCE": "SYSTEM",
    "SESSION": "821309ed-ece8-4b35-b658-372738e526e2",
    "INSTANCEID": "TestMirror",
    "TYPE": "LOG",
    "DATA": {
        "DATA_TYPE": "WARN",
        "CUSTOM": "Failed adding visualitem to flow."
    }
}

JSON-Repräsentation, ElasticSearch (ElasticSearch-Felder ausgeblendet):

{
    ...
    "CUSTOM": "Failed adding visualitem to flow.",
    "DATA_TYPE": "WARN",
    ...
    "INSTANCEID": "TestMirror",
    ...
    "SOURCE": "SYSTEM",
    ...
    "SESSION": "821309ed-ece8-4b35-b658-372738e526e2",
    ...
    "@timestamp": "2021-02-06T16:34:56.046Z",
    "TYPE": "LOG",
    ...
}




  • Keine Stichwörter