[elvystrac] r1839 - changes in destructors but statistics are still not propageted

  • From: elvys@xxxxxxxxxxxxxxxxxxxxxx
  • To: elvystrac@xxxxxxxxxxxxx
  • Date: Tue, 23 Feb 2010 23:19:46 +0100

Author: JirkaH
Date: 2010-02-23 23:19:45 +0100 (Tue, 23 Feb 2010)
New Revision: 1839

Modified:
   trunk/client/elvys-client/src/category.cpp
   trunk/client/elvys-client/src/elvys.cpp
   trunk/client/elvys-client/src/http.cpp
   trunk/client/elvys-client/src/panel.cpp
   trunk/client/elvys-client/src/statisticsdata.cpp
   trunk/client/elvys-client/src/statisticsdata.h
Log:
changes in destructors but statistics are still not propageted


Modified: trunk/client/elvys-client/src/category.cpp
===================================================================
--- trunk/client/elvys-client/src/category.cpp  2010-02-23 20:03:07 UTC (rev 
1838)
+++ trunk/client/elvys-client/src/category.cpp  2010-02-23 22:19:45 UTC (rev 
1839)
@@ -48,7 +48,13 @@
 /** Class destructor.
   */
 
-Category::~Category() {
+Category::~Category() {        
+       QList<Panel *> panels = findChildren<Panel *>();
+
+       while ( panels.empty() == false ) {
+               delete panels.takeFirst();
+       }
+
        delete layoutMaint;
        layoutMaint = NULL;
        delete docParser;
@@ -521,6 +527,6 @@
        sendStatEvent(ElvysNs::exhibitStartEvent, documentId, posId, panelId);
 }
 
-void Category::exhibitFinishedEventHandler(int documentId, int posId, int 
panelId) {
+void Category::exhibitFinishedEventHandler(int documentId, int posId, int 
panelId) {   
        sendStatEvent(ElvysNs::exhibitFinishedEvent, documentId, posId, 
panelId);
 }

Modified: trunk/client/elvys-client/src/elvys.cpp
===================================================================
--- trunk/client/elvys-client/src/elvys.cpp     2010-02-23 20:03:07 UTC (rev 
1838)
+++ trunk/client/elvys-client/src/elvys.cpp     2010-02-23 22:19:45 UTC (rev 
1839)
@@ -9,11 +9,11 @@
 
 Elvys::~Elvys() {
        //give documents some time to exit properly - to emit statistics 
related signals correctly
-       sleep(1);
 
        delete catManager;
        delete appMaint;
        delete screenS;
+       sleep(1);
        timer->stop();
        delete timer;
        delete deleter;
@@ -90,8 +90,8 @@
 void Elvys::keyPressEvent ( QKeyEvent * event ) {      
        switch( event->key()) {
                case Qt::Key_Q:
-                       //qDebug() << "Quit requested, closing";
-                       exit(0);
+                       qDebug() << "Quit requested, closing";
+                       QApplication::exit();
                        break;
                default:
                        event->ignore();

Modified: trunk/client/elvys-client/src/http.cpp
===================================================================
--- trunk/client/elvys-client/src/http.cpp      2010-02-23 20:03:07 UTC (rev 
1838)
+++ trunk/client/elvys-client/src/http.cpp      2010-02-23 22:19:45 UTC (rev 
1839)
@@ -6,7 +6,7 @@
   */
 
 Http::Http() {
-       QHttp * http;
+       QHttp * http;   
 
        defaultUserAgent = "Elvys";
        fileSuffix = ".filePart";

Modified: trunk/client/elvys-client/src/panel.cpp
===================================================================
--- trunk/client/elvys-client/src/panel.cpp     2010-02-23 20:03:07 UTC (rev 
1838)
+++ trunk/client/elvys-client/src/panel.cpp     2010-02-23 22:19:45 UTC (rev 
1839)
@@ -84,14 +84,14 @@
   */
 
 Panel::~Panel() {
-       delete docMaint;
-       docMaint = NULL;
-
        QList<Document *> documents = findChildren<Document *>();
 
        while ( documents.empty() == false ) {                          
                delete documents.takeFirst();
        }       
+
+       delete docMaint;
+       docMaint = NULL;
 }
 
 /** Returns list of all files used by this panel (by all documents). This also 
includes

Modified: trunk/client/elvys-client/src/statisticsdata.cpp
===================================================================
--- trunk/client/elvys-client/src/statisticsdata.cpp    2010-02-23 20:03:07 UTC 
(rev 1838)
+++ trunk/client/elvys-client/src/statisticsdata.cpp    2010-02-23 22:19:45 UTC 
(rev 1839)
@@ -14,7 +14,8 @@
 
 StatisticsData::StatisticsData() {
        restartEventSent = false;
-       bool ok;
+       _lastRestarted = 0;
+       bool ok;        
        db = QSqlDatabase::addDatabase("QSQLITE");
 
        db.setDatabaseName(DATABASE_NAME);
@@ -35,34 +36,25 @@
                exit(1);
        }
 
+       statEvent = new StatsEvent();
+       uploader = new Http();
+
        cleanDatabase();
-       //make sure all events that haven't been uploaded sucesfuly will get 
second chance
-       queryUpdate.prepare("UPDATE " TABLE_NAME " SET uploading = 0");
 
-       ok = queryUpdate.exec();
-       if ( ! ok ) {
-               qWarning() << "Query execution failed: " << 
queryUpdate.lastError();
-               qWarning() << queryUpdate.executedQuery();
-       }
-
-
        //make sure statistics are upload to the server regularly
        timer = new QTimer();
        connect(timer, SIGNAL(timeout()), this, SLOT(uploadStatistics()));
-       timer->start(AppConfig::getInstance()->getStatisticsPeriod());
+       timer->start(AppConfig::getInstance()->getStatisticsPeriod());  
 
-       uploader = new Http();
-
        connect(uploader, SIGNAL(uploadComplete(QString&)), this, 
SLOT(uploadComplete(QString&)));
-       connect(uploader, SIGNAL(uploadFailed(const QString &)), this, 
SLOT(uploadFailed(const QString&)));
-
-       statEvent = new StatsEvent();
+       connect(uploader, SIGNAL(uploadFailed(const QString &)), this, 
SLOT(uploadFailed(const QString&)));     
 }
 
 /** Class destructor.
   */
 
 StatisticsData::~StatisticsData() {
+       qDebug() << "killing statisticsdata object...";
        db.close();
        timer->stop();
        delete timer;
@@ -88,6 +80,8 @@
                return;
        }
 
+       _lastRestarted = timeStamp;
+
        xmlWriter->start();
        xmlWriter->writeRestartEvent(timeStamp);
        xmlWriter->stop();
@@ -95,21 +89,36 @@
        delete xmlWriter;
 
        HttpAddress address = AppConfig::getInstance()->getStatisticsAddress();
-       QString userAgent = QString("Statistic") + 
QString("%1").arg(AppConfig::getInstance()->getMachineID());
-       uploader->upload(httpId, address, *array, userAgent);
+       QString userAgent = QString("Statistics") + 
QString("%1").arg(AppConfig::getInstance()->getMachineID());
+       uploader->upload(httpId, address, *array, userAgent);   
 
-       qDebug() << array->data();
-
        delete array;
 }
 
+/** Slot to be called to send restart event. It does the same as the 
sendRestartEvent(int Timestamp) function. It uses private variable
+  as inputs to the function.
+  */
 
+void StatisticsData::sendRestartEvent() {
+       sendRestartEvent(_lastRestarted);
+}
+
 /** Cleans database of all incomplete events. This is to prevent populating 
server db with faulty events after app restart. */
 
 void StatisticsData::cleanDatabase() {
        bool ok;
        QSqlQuery query(db);
 
+       query.prepare("DELETE FROM " TABLE_NAME " WHERE action_type = 
:action_type AND action_end = 0");
+       query.bindValue(":action_type", EXHIBIT_EVENT);
+       ok = query.exec();
+
+       if ( ! ok ) {
+               qWarning() << "Query execution failed: " << query.lastError();
+               qWarning() << query.executedQuery();
+       }
+
+       //make sure all events that haven't been uploaded sucesfuly will get 
second chance
        query.prepare("UPDATE " TABLE_NAME " SET uploading = 0");
 
        ok = query.exec();
@@ -117,6 +126,9 @@
                qWarning() << "Query execution failed: " << query.lastError();
                qWarning() << query.executedQuery();
        }
+
+       //try to upload remaining complete statistics
+       uploadStatisticsReal();
 }
 
 
@@ -373,10 +385,11 @@
        }
 }
 
-/** uploads statistics (in XML format) the server.
+
+/** Uploads statistics (in XML format) the server irrespectively of the 
restart event
   */
 
-void StatisticsData::uploadStatistics() {
+void StatisticsData::uploadStatisticsReal() {
        QSqlQuery query(db);
        QSqlQuery queryUpdate(db);
        QString httpId = 
QString("%1").arg(QDateTime::currentDateTime().toTime_t());
@@ -428,13 +441,27 @@
        }
 
        HttpAddress address = AppConfig::getInstance()->getStatisticsAddress();
-       QString userAgent = QString("Statistic") + 
QString("%1").arg(AppConfig::getInstance()->getMachineID());
+       QString userAgent = QString("Statistics") + 
QString("%1").arg(AppConfig::getInstance()->getMachineID());
        uploader->upload(httpId, address, *array, userAgent);
        qWarning() << array->data();
        delete array;
        delete xmlWriter;
 }
 
+
+
+/** Uploads statistics (in XML format) the server, but only if the restart 
event has already been sent.
+  */
+
+void StatisticsData::uploadStatistics() {
+       if (! restartEventSent) { // we have to make sure that the restart 
event is sent first
+               return;
+       } else {
+               uploadStatisticsReal();
+       }
+
+}
+
 /** Deletes events in database, which were uploadded in uploaded with id @a id.
   *@param id id of completed upload
   */
@@ -466,6 +493,11 @@
        bool ok;
        QSqlQuery query;
 
+       if (id == RESTART_EVENT_ID) {
+               QTimer::singleShot(30000, this, SLOT(sendRestartEvent()));
+               return;
+       }
+
        query.prepare("UPDATE " TABLE_NAME " SET uploading = 0 WHERE uploading 
= :uploading");
        query.bindValue(":uploading", id);
 

Modified: trunk/client/elvys-client/src/statisticsdata.h
===================================================================
--- trunk/client/elvys-client/src/statisticsdata.h      2010-02-23 20:03:07 UTC 
(rev 1838)
+++ trunk/client/elvys-client/src/statisticsdata.h      2010-02-23 22:19:45 UTC 
(rev 1839)
@@ -72,7 +72,11 @@
 protected:
                virtual bool event(QEvent *);
 
+       private slots:
+               void sendRestartEvent();
+
        private:
+               void uploadStatisticsReal();
                void cleanDatabase();           
 
                QSqlDatabase db;
@@ -80,6 +84,7 @@
                StatsEvent * statEvent;
                Http * uploader;
                bool restartEventSent;
+               int _lastRestarted;
 };
 
 #endif // _ELVYS_STATISTICS_H_


Other related posts:

  • » [elvystrac] r1839 - changes in destructors but statistics are still not propageted - elvys