Projekt

Allgemein

Profil

Aktionen

Fehler #642

geschlossen

Sortierte Ausgabe bei EntityInspector und Logger

Von Sebastian Diel vor fast 7 Jahren hinzugefügt. Vor fast 6 Jahren aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
-
Beginn:
21.05.2017
Abgabedatum:
% erledigt:

100%

Geschätzter Aufwand:

Beschreibung

Bei der Fehlersuche umfangreicher Programme wird die ungeordnete Ausgabe der inspizierten Entities sehr unübersichtlich und lässt sich nicht sinnvoll automatisch diffen. Ein QStringList::sort kostet nicht allzuviel (bei ClassInTouch2: t.elapsed() < 1 ms!) und bringt dafür einen deutlichen Zugewinn in der Nutzbarkeit. Dafür muss nur eine Zeile eingefügt werden:

bool EntityInspector::checkRegisteredEntities() {
    QStringList classes = EntityInstanceFactory::getRegisteredClasses();
    classes.sort(); //  <<<<<<<<<<<<<<<<<<<<<<<<<  NEUE ZEILE  <<<<<<<<<<<<<<<<<<<<<<<<<
    QString msg = QDateTime::currentDateTime().toString(Qt::ISODate) +
                  " - Start checking entities\n";
    this->logger->logMsg(msg, MsgType::INFO);
    bool ok = true;
    for (int i = 0; i < classes.size(); ++i) {
        bool r = this->checkEntity(classes.at(i));
        if (!r) {
            msg = "###############################";
            msg += "\n";
            msg += classes.at(i) + " is erroneous!";
            msg += "\n";
            msg += "###############################\n";
            this->logger->logMsg(msg, MsgType::CRITICAL);
            ok = false;
        } else {
            msg = "Entity class " + classes.at(i) + " seems ok.\n";
            this->logger->logMsg(msg, MsgType::INFO);
        }
    }
    msg = QDateTime::currentDateTime().toString(Qt::ISODate) +
          " - End checking entities\n";
    this->logger->logMsg(msg, MsgType::INFO);
    return ok;
}


Dateien

mergeNonDiffable.png (109 KB) mergeNonDiffable.png Sebastian Diel, 23.05.2017 00:24
mergeDiffable.png (98,7 KB) mergeDiffable.png Sebastian Diel, 23.05.2017 00:24
Aktionen #1

Von Sebastian Diel vor fast 7 Jahren aktualisiert

  • Datei mergeDiffable.png wurde hinzugefügt
  • Datei mergeNonDiffable.png wurde hinzugefügt
  • Thema wurde von Sortierte Ausgabe beim EntityInspector zu Sortierte Ausgabe bei EntityInspector und Logger geändert

Bei der Sortierung der sonstigen Logs ist mehr Arbeit erforderlich. Ein Implementierungsvorschlag ist hier als Git Diff zu sehen:

--- src/entityinspector.cpp
+++ src/entityinspector.cpp
@@ -31,6 +31,7 @@ EntityInspector::~EntityInspector() {

 bool EntityInspector::checkRegisteredEntities() {
     QStringList classes = EntityInstanceFactory::getRegisteredClasses();
+    classes.sort();
     QString msg = QDateTime::currentDateTime().toString(Qt::ISODate) +
                   " - Start checking entities\n";
     this->logger->logMsg(msg, MsgType::INFO);
@@ -90,8 +91,17 @@ Entity *EntityInspector::instantiateEntity(const QString name) {
 void EntityInspector::checkMetaProperties(QHash<QString, QMetaProperty>
         &metaProperties, bool &ok, QHash<QString, Relation> &relations) {
     QString msg = "";
+#ifdef DIFFABLEOUTPUT
+    QMap<QString, QMetaProperty> metaPropertiesMap;
+    for (auto i = metaProperties.constBegin(); i != metaProperties.constEnd();
+                ++i) {
+        metaPropertiesMap[i.key()] = i.value();
+    }
+    for (auto i = metaPropertiesMap.constBegin(); i != metaPropertiesMap.constEnd(); i++) {
+#else
     for (auto i = metaProperties.constBegin(); i != metaProperties.constEnd();
             ++i) {
+#endif
         QString typeName = QString(i.value().typeName());
         if (!i.value().isWritable()) {
             ok = false;
@@ -118,7 +128,15 @@ bool EntityInspector::verifyRelations(Entity *&entity) {
     auto relations = entity->getRelations();
     QString msg = "";
     this->checkMetaProperties(metaProperties, ok, relations);
+#ifdef DIFFABLEOUTPUT
+    QMap<QString, Relation> relationsMap;
+    for (auto i = relations.constBegin(); i != relations.constEnd(); i++) {
+        relationsMap[i.key()] = i.value();
+    }
+    for (auto i = relationsMap.constBegin(); i != relationsMap.constEnd(); ++i) {
+#else
     for (auto i = relations.constBegin(); i != relations.constEnd(); ++i) {
+#endif
         this->checkRelationTypos(i.key(), i.value(), ok);
         if (!metaProperties.contains(i.key())) {
             msg += "For relation " + i.key() + " no property exists!";
--- src/entitymanager.cpp
+++ src/entitymanager.cpp
@@ -223,6 +223,9 @@ bool EntityManager::save(QList<QSharedPointer<Entity>> &entities,

 bool EntityManager::startup(QString version, QStringList toInitialize,
                             bool createIndices) {
+#ifdef DIFFABLEOUTPUT
+    qSetGlobalQHashSeed(1);
+#endif
     QSharedPointer<Entity> dbm = QSharedPointer<DatabaseMigration>
             (new DatabaseMigration());
     QHash<QString, QVariant> map = QHash<QString, QVariant>();
--- src/logger.cpp
+++ src/logger.cpp
@@ -38,8 +38,12 @@ void Logger::lastError(const QSqlQuery &q, bool logQuery) {
     if (logQuery || q.lastError().isValid()) {
         const QString errorMsg = this->generateLogMsg(q.lastError());
         if (logQuery || !errorMsg.isEmpty()) {
-            QString msg = "{" + QString("\"time\":\"") +
-                          QDateTime::currentDateTime().toString(Qt::ISODate) + QString("\"") + errorMsg;
+            QString timeStamp;
+#ifndef DIFFABLEOUTPUT
+            timeStamp = QString("\"time\":\"") +
+                        QDateTime::currentDateTime().toString(Qt::ISODate) + QString("\"");
+#endif
+            QString msg = "{" + timeStamp + errorMsg;
             msg += this->generateLogMsg(q) + "}";
             this->logMsg(msg, errorMsg.isEmpty() ? MsgType::DEBUG : MsgType::WARNING);
         }
--- src/logger.h
+++ src/logger.h
@@ -27,6 +27,7 @@ enum class MsgType { DEBUG, INFO, WARNING, CRITICAL, FATAL};
 class Logger {
 #ifdef QT_DEBUG
 #define DEFAULTMSGTYPE MsgType::DEBUG
+#define DIFFABLEOUTPUT
 #else
 #define DEFAULTMSGTYPE MsgType::CRITICAL
 #endif

Aktionen #2

Von Sebastian Diel vor fast 7 Jahren aktualisiert

  • Datei mergeNonDiffable.png wurde gelöscht
Aktionen #3

Von Sebastian Diel vor fast 7 Jahren aktualisiert

  • Datei mergeDiffable.png wurde gelöscht

Von Sebastian Diel vor fast 7 Jahren aktualisiert

Hiermit wird eine sinnvolle Nutzung von Diffs des Log-Outputs möglich.

Ohne diese Änderungen ist nach zwei identischen Starts von CiT (jeweils incl. Neuerzeugung der Datenbank) der Vergleich der Logs nicht sinnvoll möglich (mergeNonDiffable.png)

h3. Mit den angegebenen Änderungen ist schnell und klar ersichtlich, wo es zu Veränderungen gekommen ist (mergeDiffable.png):

h2. Es fällt sofort auf, welche Veränderungen es an welcher Stelle tatsächlich gegeben hat.

Aktionen #5

Von Anonym vor fast 6 Jahren aktualisiert

  • Status wurde von Neu zu Erledigt geändert
  • % erledigt wurde von 0 zu 100 geändert

Status geändert durch Changeset 2cded5d4cefef897161a2a202c06b4aade36cb4b.

Aktionen

Auch abrufbar als: Atom PDF