Backend-Komponenten

Client-Komponenten

Charting

Basics

JANUS verwendet folgende Charting - Bibliotheken:

Sonstige Bibliotheken

Nicht nur für JANUS verwendet, sondern Teil auch anderer Web - basierter Entwicklungen und Oracle APEX - Projekte

Der npm Build - Prozess

Mittels npm lassen sich Builds automatisieren. Es wird eine Package-Datei definiert, die alle Abhängigkeiten der Software beinhaltet.
Hier die package.json - Datei für JANUS.
Gestartet wird der Build aus der Konsole mittels:
npm install

MongoDB

Labware LIMS kann programmiert werden. Der Code, der dabei entsteht befindet sich in verschiedenen Tabellen wie z.B. SUBROUTINE, CALCULATION oder FORMAT_CALCULATION.

JANUS erlaubt es, in den entsprechenden Tabellen nach Code zu suchen, um z.B. die Verwendung einer bestimmten Subroutine oder einer Variablen bestimmten Namens herauszufinden.

Das ist mit SQL möglich, ist aber langsam, da nicht nur eine Tabelle auf Code hin überprüft werden muss sondern eben mehrere. MongoDB als dokumentenbasierte NoSQL Datenbank ist ideal, um Text in Objekten zu suchen.

MongoDB Data Store aufbauen

Zuerst muss der MongoDB Store aufgebaut werden, indem die Daten aus der Oracle-DB ausgelesen werden

Das geschieht durech eine SQL SELECT * - Abfrage gegen die entsprechenden Tabellen, die Treffer werden in die MongoDB persistiert.

Wir benötigen folgende Packages

Hier Code zur Persistierung von SQL-Abfragen in einer MongoDB

Volltextsuche im Store

Die Volltextsuche in einer MongoDB gestaltet sich unglaublich viel schneller als in einer relationalen Datenbank.

Die Abfrage erfolgt allerdings nicht über eine Abfragesprache wie SQL, sondern mittels des Aufrufs von bestimmten befehlen wie find(), die gegen eine Datenmenge (Collection) ausgeführt werden.

Die find() - Funktion erwartert als Parameter vorkonfigurierte JSON - Objekte mit den Abfrageparametern.




function find(database, collection, expression, callBack) {
    var projection;
    projection = {};
    var sortObj = {"NAME": 1};
    mongoClient.connect(mongoURL, function (err, db) {
        if (err) throw err;
        var dbo = db.db(database);
        try {
            dbo.collection(collection).find(expression, projection).sort(sortObj)
                .toArray(function (err, result) {
                    if (err) throw err;
                    callBack(result);
                    db.close();
                });
        } catch(e){
            console.log("mongo.find: error:" + expression + ":");
        }
    });
}


var searchExpr = "ArrayFromCSV";
var expression =
    {
        $text:
            {
                $search: "\"" + searchExpr + "\"",
                $caseSensitive: false,
            }
    }

find("DEV", "SUBROUTINE", expression, function(result){
    console.log(result);
})

    

Das Ganze kann dann in einer Webanwendung etwa so aussehen:

Gantt Chart

Docker

...to be done...