1.30.2.3. KogniDB

Kontakt:

Alexander Neumann <alneuman@techfak.uni-bielefeld.de>, Nils Kucza <nils.kucza@uni-bielefeld.de>

CITK:

kognidb

Vorbedingung:

kognidb unterstützt derzeit ausschließlich MySQL. Außerdem werden Robotic Service Bus und Robotic Service Types benötigt und sollten manuell oder über CITEC Toolkit installiert werden. Danach kann kognidb mit setuptools installiert werde:

$ python setup.py install

Werden RST und RSB nicht vorher installiert, wird setuptools versuchen die Abhängigkeiten aufzulösen. Die über PyPi verfügbaren Pakete sind jedoch nicht kompatibel mit kognidb.

Quickstart:

Stellen Sie sicher, dass eine lokale MySQL-Datenbankinstanz gestartet worden ist. Dann können Sie kognidb über die Kommandozeile ausführen. Als Parameter wird der Socket der lokalen MySQL-Datenbank erwartet:

$ kognidb /tmp/mysqld.socket
  No handlers could be found for logger "rstsandbox"
  Connection established...

Der voreingestellte Socket hängt von der MySQL-Konfiguration ab, welche für verschiedene Betriebssysteme und Distributionen anders ausfallen kann. Das Programm kann mit CTRL+C beendet werden.

1.30.2.3.1. RSB-Schnittstellen

Scope Method Input Output Description
/service/kognidb register_app string int Meldet Anwendung in der Datenbank an und erzeugt einen Endpunkt für diese.
/service/kognidb/<APP> get_clothing rst.kognihome.db.ClothingQuery rst.kognihome.db.ClothingResult Liefert eine Liste von Kleidungsstücken für einen Nutzer, die zu den übergebenen Tags passen.
/service/kognidb/<APP> get_token_config string rst.kognihome.db.Configuration Liefert die Konfiguration für <APP> für den Nutzer mit dem übergebenen Authentifizierungstoken.
/service/kognidb/<APP> get_user_config int rst.kognihome.db.Configuration Liefert die Konfiguration für <APP> für den Nutzer mit der übergebenen ID.
/service/kognidb/<APP> get_user_info int rst.kognihome.db.UserInfo Liefert Nutzerdaten zu einer ID.
/service/kognidb/<APP> get_user_tokens int rst.kognihome.db.IdentificationTokens Liefert alle Tokens, die zu einem Nutzer mit übergebener ID gehören.
/service/kognidb/<APP> identify_user string rst.kognihome.db.UserInfo Liefert Nutzeraten des mit dem Token assozierten Nutzers.
/service/kognidb/<APP> get_drawer string int Liefert die Schubladen-ID für einen gesuchten Gegenstand
/service/kognidb/<APP> get_empty_hanger string int Liefert die Bügel-ID eines leeren Platzes in der Garderobe. Der Inhalt des übergebenen Eingabeparameters wird nicht berücksichtigt.
/service/kognidb/<APP> get_vital_data int rst.kognihome.db.VitalDataResult Liefert Vital Daten zu einer ID.
/service/kognidb/<APP> set_vital_data rst.kognihome.db.VitalDataSetQuerry int Überschreiben der Vital Daten. Die ID <int> zur Nutzeridentifizierung ist enthalten. Liefert einen Fehlercode zurück.
/service/kognidb/<APP> get_daily_logs rst.kognihome.db.DailyLogsQuery rst.kognihome.db.DailyLogsResult Liefert alle Daily Logs zu einer ID zwischen zwei anzugebenen Zeiten.
/service/kognidb/<APP> add_daily_log rst.kognihome.db.DailyLogsAddQuery int Hinzufügen eines Logs. Liefert einen Fehlercode zurück.
/service/kognidb/<APP> get_activity_logs rst.kognihome.db.ActivityLogsQuery rst.kognihome.db.ActivityLogsResult Liefert alle Aktivity Logs zu einer ID zwischen zwei anzugebenen Zeiten.
/service/kognidb/<APP> add_activity_log rst.kognihome.db.ActivityLogsAddQuery int Hinzufügen eines Logs. Liefert einen Fehlercode zurück.

1.30.2.3.2. Anmerkungen

Zur Anmeldung von Anwendungen bzw. der Erstellung eines Endpunktes werden Nutzername und Passwort der Anwendung in der Form name:pw als String als Parameter übergeben. Diese Form ist vorläufig und bietet keine Sicherheit, da Nachrichten auf den entsprechenden Scopes mitgehört werden können. In wie weit dieses Verfahren durch ein sichereres ersetzt wird, steht zum aktuellen Zeitpunkt noch nicht fest.

Temporäre Berechtigungen werden auf Anwendungsbasis vergeben. So kann eine Adresse bzw. ein Token auch mit Rechten für mehrere Anwendungen verknüpft werden (mit unterschiedlicher Gültigkeit). Außerdem bleibt die Sonderberechtigung eines Tokens für alle anderen Anwendungen transparent. Alle Anfragen benutzen den gleichen RPC identify_user. Hat das Token keine Berechtigung für die anfragende Anwendung, wird die Standardnutzerin zurückgegeben. Ergo kann die Anwendung den Fall wie ein unbekanntes Tag handhaben. Die gewünschte Anwendung bekommt einen _generierten_ Nutzer mit der Rolle temporary und einer zufälligen ID gemeldet. Dass es diese Rolle NICHT in der Datenbank gibt, sondern nur im RST-Typ ist dabei beabsichtigt, um den temporären Charakter zu unterstreichen. Im Umkehrschluss heißt das auch, dass Nutzer/Bewohner prinzipiell alle temporär vergebenen Rechte besitzen. Das kann durch anwendungsspezifische Konfigurationen bei Bedarf unterbunden werden. Gleiches gilt für den Entzug von Rechten (z.B für Paul) unter bestimmten Bedingungen.

1.30.2.3.3. Datenbank Management

KogniDB wird bis aus weiteres im read-only modus betrieben. Demzufolge bietet kognidb als Connector keine Methoden zum Schreiben bzw. Einpflegen von Daten. Im Unterordner schemes des Projekts befindet sich eine MWB-Datei, welche mit der MySQL Workbench bearbeitet werden kann. Außerdem befindet sich das aktuelle Datenbankschema als PNG im gleichen Ordner.

../../_images/scheme.png

Stand: April 2017

Die Workbenchdatei enthält außerdem den Datenbank-Seed, welcher als Referenzdatensatz für die geplanten Szenarien genutzt wird. Vor Tests ist es also ratsam via Forward Engineering den Datenbanksatz auf den neuesten Stand zu bringen.

Der Seed kann auch mit Hilfe von der Workbench editiert werden. Bitte stellen Sie unbedingt sicher, dass Sie den aktuellsten Stand der Workbench-Datei besitzen und Synchronisieren Sie ihre Änderungen umgehend. term:MWB-Dateien lassen sich bei Konflikten nicht kombinieren, sodass im Zweifelsfall Ihre Änderung verloren ist und Sie die Änderungen erneut durchführen müssen.

../../_images/workbench_seed.png

In Insert-Tab können Daten für das Forward Engineering zugefügt werden. Stellen Sie sicher, dass Sie die Änderungen speichern, bevor Sie das Tab schließen.