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_