mirror of https://github.com/nymea/nymea.git
core: Fix shutdown crash and improve application logging
Signed-off-by: Simon Stürz <simon.stuerz@nymea.io>pull/688/head
parent
4fe03a10ea
commit
a31daf7742
|
|
@ -365,19 +365,8 @@ void NymeaCore::thingManagerLoaded()
|
|||
|
||||
emit initialized();
|
||||
|
||||
// Do some houskeeping...
|
||||
qCDebug(dcCore()) << "Starting housekeeping...";
|
||||
QDateTime startTime = QDateTime::currentDateTime();
|
||||
// ThingsFetchJob *job = m_logger->fetchThings();
|
||||
// connect(job, &ThingsFetchJob::finished, m_thingManager, [this, job, startTime](){
|
||||
// foreach (const ThingId &thingId, job->results()) {
|
||||
// if (!m_thingManager->findConfiguredThing(thingId)) {
|
||||
// qCDebug(dcCore()) << "Cleaning stale thing entries from log DB for thing id" << thingId;
|
||||
// m_logger->removeThingLogs(thingId);
|
||||
// }
|
||||
// }
|
||||
// qCDebug(dcCore()) << "Housekeeping done in" << startTime.msecsTo(QDateTime::currentDateTime()) << "ms.";
|
||||
// });
|
||||
|
||||
foreach (const ThingId &thingId, m_ruleEngine->thingsInRules()) {
|
||||
if (!m_thingManager->findConfiguredThing(thingId)) {
|
||||
|
|
|
|||
|
|
@ -68,8 +68,7 @@ QDateTime TimeManager::currentDateTime() const
|
|||
*/
|
||||
void TimeManager::stopTimer()
|
||||
{
|
||||
qCWarning(dcTimeManager()) << "TimeManager timer stopped. You should only see this in tests.";
|
||||
// Stop clock (used for testing)
|
||||
qCDebug(dcTimeManager()) << "Stopping TimeManager";
|
||||
killTimer(m_timerId);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -222,19 +222,31 @@ int main(int argc, char *argv[])
|
|||
qCInfo(dcApplication()) << "=====================================";
|
||||
}
|
||||
|
||||
QStringList arguments;
|
||||
for (int i = 0; i < argc; i++) {
|
||||
arguments << QString(argv[i]);
|
||||
}
|
||||
qCInfo(dcApplication()) << "Started:" << arguments.takeFirst();
|
||||
qCInfo(dcApplication()) << "Parameters:" << arguments.join(' ');
|
||||
|
||||
// If running in a snappy environment, print out some details about it.
|
||||
if (!qgetenv("SNAP").isEmpty()) {
|
||||
// Note: http://snapcraft.io/docs/reference/env
|
||||
qCInfo(dcApplication) << "Snap name :" << qgetenv("SNAP_NAME");
|
||||
qCInfo(dcApplication) << "Snap version :" << qgetenv("SNAP_VERSION");
|
||||
qCInfo(dcApplication) << "Snap directory :" << qgetenv("SNAP");
|
||||
qCInfo(dcApplication) << "Snap app data :" << qgetenv("SNAP_DATA");
|
||||
qCInfo(dcApplication) << "Snap user data :" << qgetenv("SNAP_USER_DATA");
|
||||
qCInfo(dcApplication) << "Snap app common :" << qgetenv("SNAP_COMMON");
|
||||
qCInfo(dcApplication()) << "Snap name :" << qgetenv("SNAP_NAME");
|
||||
qCInfo(dcApplication()) << "Snap version :" << qgetenv("SNAP_VERSION");
|
||||
qCInfo(dcApplication()) << "Snap directory :" << qgetenv("SNAP");
|
||||
qCInfo(dcApplication()) << "Snap app data :" << qgetenv("SNAP_DATA");
|
||||
qCInfo(dcApplication()) << "Snap user data :" << qgetenv("SNAP_USER_DATA");
|
||||
qCInfo(dcApplication()) << "Snap app common :" << qgetenv("SNAP_COMMON");
|
||||
}
|
||||
|
||||
// create core instance
|
||||
QObject::connect(NymeaCore::instance(), &NymeaCore::initialized, NymeaCore::instance(), [](){
|
||||
qCInfo(dcApplication()) << "The core is now up and running.";
|
||||
});
|
||||
|
||||
NymeaCore::instance()->init(parser.values(interfacesOption), parser.isSet(noLogDbOption));
|
||||
|
||||
int ret = application.exec();
|
||||
closeLogFile();
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -79,44 +79,47 @@ static void catchUnixSignals(const std::vector<int>& quitSignals, const std::vec
|
|||
NymeaCore::ShutdownReason reason = NymeaCore::ShutdownReasonQuit;
|
||||
switch (sig) {
|
||||
case SIGQUIT:
|
||||
qCDebug(dcApplication) << "Cought SIGQUIT signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGQUIT signal...";
|
||||
reason = NymeaCore::ShutdownReasonQuit;
|
||||
break;
|
||||
case SIGINT:
|
||||
qCDebug(dcApplication) << "Cought SIGINT signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGINT signal...";
|
||||
reason = NymeaCore::ShutdownReasonTerm;
|
||||
break;
|
||||
case SIGTERM:
|
||||
qCDebug(dcApplication) << "Cought SIGTERM signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGTERM signal...";
|
||||
reason = NymeaCore::ShutdownReasonTerm;
|
||||
break;
|
||||
case SIGHUP:
|
||||
qCDebug(dcApplication) << "Cought SIGHUP signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGHUP signal...";
|
||||
reason = NymeaCore::ShutdownReasonTerm;
|
||||
break;
|
||||
case SIGKILL:
|
||||
qCDebug(dcApplication) << "Cought SIGKILL signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGKILL signal...";
|
||||
reason = NymeaCore::ShutdownReasonTerm;
|
||||
break;
|
||||
case SIGSEGV:
|
||||
qCDebug(dcApplication) << "Cought SIGSEGV quit signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGSEGV quit signal...";
|
||||
reason = NymeaCore::ShutdownReasonFailure;
|
||||
break;
|
||||
case SIGFPE:
|
||||
qCDebug(dcApplication) << "Cought SIGFPE quit signal...";
|
||||
qCDebug(dcApplication()) << "Cought SIGFPE quit signal...";
|
||||
reason = NymeaCore::ShutdownReasonFailure;
|
||||
break;
|
||||
default:
|
||||
qCDebug(dcApplication) << "Cought signal" << sig;
|
||||
qCDebug(dcApplication()) << "Cought signal" << sig;
|
||||
break;
|
||||
}
|
||||
|
||||
qCInfo(dcApplication) << "=====================================";
|
||||
qCInfo(dcApplication) << "Shutting down nymea:core";
|
||||
qCInfo(dcApplication) << "=====================================";
|
||||
qCInfo(dcApplication()) << "=====================================";
|
||||
qCInfo(dcApplication()) << "Shutting down nymea:core";
|
||||
qCInfo(dcApplication()) << "=====================================";
|
||||
|
||||
s_shutdownCounter++;
|
||||
NymeaCore::instance()->destroy(reason);
|
||||
|
||||
qCInfo(dcApplication()) << "nymea:core shut down successfully";
|
||||
NymeaApplication::processEvents();
|
||||
NymeaApplication::quit();
|
||||
};
|
||||
|
||||
|
|
@ -137,4 +140,9 @@ NymeaApplication::NymeaApplication(int &argc, char **argv) :
|
|||
catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP, SIGKILL, /*SIGSEGV,*/ SIGFPE});
|
||||
}
|
||||
|
||||
NymeaApplication::~NymeaApplication()
|
||||
{
|
||||
quit();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ class NymeaApplication : public QCoreApplication
|
|||
{
|
||||
public:
|
||||
NymeaApplication(int &argc, char **argv);
|
||||
~NymeaApplication() override;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ void NymeaService::start()
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
qCDebug(dcApplication) << "=====================================";
|
||||
qCDebug(dcApplication) << "nymead" << NYMEA_VERSION_STRING << "started as daemon.";
|
||||
qCDebug(dcApplication) << "=====================================";
|
||||
qCDebug(dcApplication()) << "=====================================";
|
||||
qCDebug(dcApplication()) << "nymead" << NYMEA_VERSION_STRING << "started as daemon.";
|
||||
qCDebug(dcApplication()) << "=====================================";
|
||||
NymeaCore::instance();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue