//SEIBERT/MEDIA bedeutet unter anderem Softwareentwicklung. Und als Softwareentwickler sind wir sehr an Nutzungsdaten interessiert. Nutzungsdaten helfen uns nämlich dabei, unsere Apps kundenorientiert weiterzuentwickeln und zu verbessern. Wir sammeln ausschließlich anonyme Nutzungsdaten der Linchpin Intranet Suite und all ihrer Apps.

Alle Apps von //SEIBERT/MEDIA, die auf dem Atlassian Marketplace zu finden sind, sind von dieser Entscheidung betroffen. Nur diese Apps können überhaupt Daten an uns übertragen. Es ist uns sehr wichtig, solche Entscheidungen transparent nach außen zu kommunizieren. Wir möchten außerdem, dass Sie verstehen können, welche Daten überhaupt gesammelt werden, wozu das getan wird und was Ihre Optionen sind.



Mit der Installation von //SEIBERT/MEDIA-Linchpin-Apps wird auch eine "Unter-App" namens Linchpin App Usage installiert. Diese App kann anonyme Nutzungsdaten an uns übertragen. Welche Daten überhaupt übertragen werden können, definiert ein JSON-Schema (Sie finden den Code und Erklärungen weiter unten). Die App kann keine sonstigen Informationen übermitteln.

Die übermittelten Daten können in keinster Weise Informationen enthalten, die auf einzelne User, Firmen oder spezifische Confluence-Instanzen zurückzuführen wären. Es gibt keine Möglichkeit, personenbezogene Daten zu übermitteln. Die Linchpin App Usage-App hat einzig und alleine den Zweck, uns mit statistischen Informationen zu versorgen, die bei der App-Entwicklung helfen. Solche Daten werden nicht durch die DSGVO geregelt.


1. Kann ich das Linchpin App Usage in meinem System deaktivieren?



Ja, das können Sie. Im Administrationsbereich Ihres Confluence-Systems findet sich die Konfiguration von Linchpin App Usage. Um dort zu gelangen, navigieren Sie zu Confluence-Administration > Linchpin Usage > Konfiguration.

Falls Sie das Tracking der Nutzungsdaten deaktivieren möchten, verschieben Sie den Schalter nach links (rote Farbe bedeutet, dass das Plugin deaktiviert ist).

Die Konfigurationsseite bietet eine kurze Beschreibung des Plugins. Außerdem können Sie hier einsehen, welche Apps aktuell das Plugin verwenden, um Nutzungsdaten an //SEIBERT/MEDIA zu übermitteln.


2. Wozu dient das Linchpin App Usage?

Mithilfe von anonymen Nutzungsdaten erfahren wir als Entwickler, wie unsere Software tatsächlich genutzt wird. Die gesammelten Daten dienen ergänzend zu User-Tests, Erfahrungen aus Projekten sowie Kundenfeedbacks als Hilfestellung um datenbasierte, fundierte Produktentscheidungen treffen zu können.

Auch wenn es sich etwas blöd anhören mag, interessieren wir uns nicht wirklich dafür, wer unsere Software benutzt. Wir haben kein Interesse an personenbezogenen Daten, weil sie uns nicht voranbringen. Wir interessieren uns für die Frage nach dem wie. Deshalb sind alle erhobenen Daten anonym - es ist irrelevant, wer einen Link anklickt. Wichtig ist, ob der Link überhaupt angeklickt wurde, und falls ja, wie oft.

Wie nutzen Menschen unsere Software? Werden alle Funktionen, Links, Knöpfe genutzt? Oder gibt es etwa Funktionen, die sehr selten bis gar nicht genutzt werden, und die wir durch (für den Kunden) sinnvollere Features ersetzen können? Solch ein anonymes Tracking ermöglicht es uns, sehr viel über unsere eigene Software zu lernen, damit wir sie stets weiterentwickeln können.


3. Wie arbeitet das Linchpin Usage Tracking? 

3.1 Datentypen

In der Erhebung der Nutzerdaten unterscheiden wir zwischen zwei Datentypen: "View" und "Interaction".

View data

Wird genutzt, um Events zu analysieren, die über einen längeren Zeitraum hinweg betrachtet werden. Ein Beispiel hierfür wären zum Beispiel Ladezeiten oder die Verweildauer in der App. 

Interaction data

Eine Interaktion beschreibt eine einzelne Aktion, die beispielsweise durch das Drücken eines Buttons, Links etc. "getriggert" wird.


3.2 Welche Daten können erfasst werden? 

Es können nur Daten in die Datenbank geschrieben werden, die einem festen JSON-Schema entsprechen (siehe beigefügten Codeblock, der das aktuelle JSON-Schema abbildet). Alle möglichen Daten, die über einen Browser geschickt werden, die nicht Bestandteil dieses Schemas sind, werden weder an die Datenbank versendet noch in irgendeiner Form gespeichert


Das JSON-Schema, das in Linchpin App Usage verwendet wird:

JSON Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://usage.seibert-media.io/event.json",
  "type": "object",
  "title": "The JSON Schema for validating events sent to usage.seibert-media.io",
  "required": ["metadata", "events", "apps"],
  "properties": {
    "metadata": {
      "type": "object",
      "required": ["sessionID", "environment"],
      "properties": {
        "sessionID": {
          "type": "string",
          "description": "A unique sessionID to link events"
        },
        "environment": {
          "type": "object",
          "required": ["browser", "resolution", "hostVersion", "maxUsers"],
          "properties": {
            "browser": {
              "type": "string"
            },
            "resolution": {
              "type": "string"
            },
            "hostVersion": {
              "type": "string"
            },
            "maxUsers": {
              "type": "integer"
            }
          }
        }
      }
    },
    "apps": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "required": ["version"],
        "properties": {
          "sen": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        }
      }
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["kind", "name", "timestamp", "app"],
        "if": {
          "properties": { "kind": { "const": "view" } }
        },
        "then": {
          "required": ["kind", "name", "timestamp", "app", "loadDuration"]
        },
        "properties": {
          "kind": {
            "enum": ["view", "interaction"]
          },
          "name": {
            "type": "string"
          },
          "timestamp": {
            "type": "string"
          },
          "app": {
            "type": "string"
          },
          "loadDuration": {
            "type": "number"
          },
          "data": {
            "type": "object",
            "required": [],
            "properties": {},
            "additionalProperties": true
          }
        }
      }
    }
  }
}

Aktuell getrackte Events:

App

Event

technischer Event-Name

Linchpin Suite PluginKlick auf Abbrechen oder "Leave Setup" oder "Assistant überspringen" inkl. Timestamp zur Berechnung der Zeit innerhalb des Assistants.
admin-assistant-skipped

Timestamp, wenn die Seite "/linchpin-suite/setup.action" geladen wird.
admin-assistant-started

Timestamp, wenn der Setup Assistant abgeschlossen wird.
admin-assistant-ended

Hex-Wert (bspw. #ffffff) für die gesetzte Primärfarbe.
admin-assistant-color

Ausprägung des gewählten Dashboard: News, Collaboration oder Default
admin-assistant-dashboard

Auswahl ob Demo Content erstellt werden soll oder nicht. (True/False)
admin-assistant-demodata

Microblogging for Confluence

Klick auf den Bearbeiten-Knopf
edit-micropost
Linchpin Enterprise NewsBei der Veröffentlichung einer News: welcher Newsteaser-Typ wurde ausgewählt?
newsteaser
Linchpin Events





Anzeige des Event-Portals
le-event-hub
Anklicken des Buttons zum Erstellen eines neuen Events im Event-Portal
le-portal-create-event
Anzeige des Dialogs zum Erstellen eines neuen Events
le-create-event
Anklicken des "Mehr Events anzeigen"-Buttons, um weitere Events nachzuladen
le-event-hub-load-more
Anklicken eines Kategorie-Filters in der linken Seitenleiste
le-event-hub-click-on-category
Anklicken des "Alle Events"-Eintrags in der linken Seitenleiste
le-event-hub-show-all-events
Anklicken des "Meine Events"-Filters in der linken Seitenleiste
le-event-hub-show-my-events

Zurücksetzen aller Filter im Event-Portal

le-event-hub-reset-filter
Anklicken des "Event duplizieren"-Eintrags im Kontextmenü eines Events
le-event-duplicated
Start Event bearbeiten 
le-event-edit-start
Anzeige Einzelevent-Makro
le-event-macro
Sich selbst zu einem Event anmelden
le-event-self-signup
Sich selbst von einem Event abmelden
le-event-self-signoff
Anzeige Event-Listen-Makro
le-event-list-macro
Anzeige Einzelevent-Ansicht
le-event-detail
Andere Person zu einem Event anmelden
le-event-signup-other
Übernehmen eines Bilds von Unsplash
le-stockimage-set
Bildupload durchgeführt
le-image-uploaded
Event nach bearbeiten gespeichert
le-event-saved
Bildsuche bei Bilderdienst Unsplash
le-stock-image-search

Admin: Aktivieren der Unsplash-Integration

le-admin-stockimage-on-true

Admin: Deaktivieren der Unsplash-Integration

le-admin-stockimage-on-false
Linchpin User ProfilesPersonenverzeichnis: Besuch der Seite: Ladezeit der Ergebnisse
lup-peopledirectory-view

Personenverzeichnis: Besuch der Seite: Anzahl der Ergebnisseitenlup-peopledirectory-view-available-pages

Personenverzeichnis: Suche oder Filter wurden benutzt: Länge der Sucheingabelup-peopledirectory-search-search-term-length

Personenverzeichnis: Suche oder Filter wurden benutzt: Anzahl der gewählten Filterlup-peopledirectory-search-number-of-filters

Personenverzeichnis: Suche oder Filter wurden benutzt: Nur Personen mit persönlichem Bereich anzeigen?lup-peopledirectory-search-only-personal

Personenverzeichnis: Suche oder Filter wurden benutzt: Anzahl der Ergebnisseitenlup-peopledirectory-search-available-pages

Personenverzeichnis: Suche oder Filter wurden benutzt: Nummer der aktuellen Ergebnisseitelup-peopledirectory-search-page-number

Personenverzeichnis: Suche oder Filter wurden benutzt: Anzahl der Suchergebnisse auf der aktuellen Ergebnisseitelup-peopledirectory-search-results

Personenverzeichnis: Suche oder Filter wurden benutzt: Ladezeit der Ergebnisselup-peopledirectory-search-load-duration

Personenverzeichnis: "Filter zurücksetzen" wurde benutzt: Ladezeit der Ergebnisselup-peopledirectory-reset-filters-load-duration



3.3 Wie sieht ein exemplarischer Datensatz aus? 

In der folgenden Tabelle sind drei vollständige Datensätze abgebildet, welche so in der Datenbank landen. 

timestamp

name

sessionID

browser

resolution

maxUsers

hostVersion

plugin

pluginVersion

plugins

app

appVersion

apps

2019-10-24 10:29:06.985 UTC

edit-micropost

333b6eca-919d-4a4d-8479-c0ae5dd993d9

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/76.0.3803.0 Safari/537.36

800x600

-1

6.12.4




net.seibertmedia.plugin.confluence.microblog

5.0.1-UPCOMING.1-X-license-inactive

{"net.seibertmedia.plugin.confluence.microblog":{"pluginKey":"net.seibertmedia.plugin.confluence.microblog","name":"Microblogging for Confluence (for internal use only)","version":"5.0.1-UPCOMING.1-X-license-inactive"}}

2019-10-24 08:54:47.948 UTC

edit-micropost

7b4de886-0c29-4b06-af85-c89cdcdbbc41

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

1024x1280

-1

7.0.1




net.seibertmedia.plugin.confluence.microblog

5.0.0

{"net.seibertmedia.plugin.confluence.microblog":{"pluginKey":"net.seibertmedia.plugin.confluence.microblog","name":"Microblogging for Confluence ","version":"5.0.0"}}

2019-10-24 06:21:40.981 UTC

edit-micropost

e0c80db6-e800-4d4c-8a13-f82478dbef7b

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

1920x1040

-1

7.0.1




net.seibertmedia.plugin.confluence.microblog

5.0.0

{"net.seibertmedia.plugin.confluence.microblog":{"pluginKey":"net.seibertmedia.plugin.confluence.microblog","name":"Microblogging for Confluence ","version":"5.0.0"}}


Datenauswertung

Rechts sehen Sie eine exemplarische Auswertung der anonymen Nutzungsdaten, die wir mithilfe des Linchpin App Usage beziehen.

Es handelt sich hierbei um Daten des Typus "Interaktion". Die Auswertung erfolgte mithilfe von Google Data Studio.

3.4 In welchem Zyklus werden Daten gespeichert und versendet? 

Die erfassten Daten werden im "Session Storage" gespeichert und jeweils mit einer zufälligen Session ID versehen. Diese wird im Browser pro Tab vergeben. Sessions können niemals über eine Session ID hinweg zugeordnet werden. Sie enthalten nie personenbezogene Daten.
Ein Datenpaket wird immer dann zur Datenbank gesendet, wenn fünf Interaktions- oder View-Events registriert wurden. Alternativ werden alle Datensätze beim Verlassen einer Seite, welche ein relevantes Event enthält, abgesendet. 

Daten, die abgesendet wurden, sind nach dem Versand weder in Caches noch in Sessions sichtbar ("fire and forget"). Übertragene Daten landen bei einem Proxy, der von //SEIBERT/MEDIA verwaltet wird. Dieser Proxy validiert die übertragenen Daten erneut anhand des oben beschriebenen JSON-Schemas und stellt so sicher, dass ausschließlich solche Daten übertragen werden, die vom Schema definiert sind. Alle durch den Proxy validierten Daten werden an die Datenbank übertragen. Diese liegt auf einem Google Cloud Server.





Dieser Inhalt wurde zuletzt am 09.09.2020 aktualisiert.

Der Inhalt auf dieser Seite ist schon seit einer Weile nicht mehr aktualisiert worden. Das muss kein Nachteil sein. Oft überdauern unsere Seiten Jahre, ohne wirklich unnütz zu werden. Einfach auf diesen Link klicken, wenn wir die Seite mal wieder aktualisieren sollten. Alte Inhalte können falsch, irreführend oder überholt sein. Bitte nutzen Sie das Formular oder den Live-Chat auf dieser Seite oder kontaktieren Sie uns via E-Mail unter content@seibert.group, wenn Sie Zweifel, Fragen, Anregungen oder Änderungswünsche haben.