Merge PR #688: core: Fix shutdown crash and improve application logging
This commit is contained in:
commit
628c2c9be7
@ -379,19 +379,8 @@ void NymeaCore::thingManagerLoaded()
|
|||||||
|
|
||||||
emit initialized();
|
emit initialized();
|
||||||
|
|
||||||
// Do some houskeeping...
|
|
||||||
qCDebug(dcCore()) << "Starting housekeeping...";
|
qCDebug(dcCore()) << "Starting housekeeping...";
|
||||||
QDateTime startTime = QDateTime::currentDateTime();
|
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()) {
|
foreach (const ThingId &thingId, m_ruleEngine->thingsInRules()) {
|
||||||
if (!m_thingManager->findConfiguredThing(thingId)) {
|
if (!m_thingManager->findConfiguredThing(thingId)) {
|
||||||
|
|||||||
@ -68,8 +68,7 @@ QDateTime TimeManager::currentDateTime() const
|
|||||||
*/
|
*/
|
||||||
void TimeManager::stopTimer()
|
void TimeManager::stopTimer()
|
||||||
{
|
{
|
||||||
qCWarning(dcTimeManager()) << "TimeManager timer stopped. You should only see this in tests.";
|
qCDebug(dcTimeManager()) << "Stopping TimeManager";
|
||||||
// Stop clock (used for testing)
|
|
||||||
killTimer(m_timerId);
|
killTimer(m_timerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -222,19 +222,31 @@ int main(int argc, char *argv[])
|
|||||||
qCInfo(dcApplication()) << "=====================================";
|
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 running in a snappy environment, print out some details about it.
|
||||||
if (!qgetenv("SNAP").isEmpty()) {
|
if (!qgetenv("SNAP").isEmpty()) {
|
||||||
// Note: http://snapcraft.io/docs/reference/env
|
// Note: http://snapcraft.io/docs/reference/env
|
||||||
qCInfo(dcApplication) << "Snap name :" << qgetenv("SNAP_NAME");
|
qCInfo(dcApplication()) << "Snap name :" << qgetenv("SNAP_NAME");
|
||||||
qCInfo(dcApplication) << "Snap version :" << qgetenv("SNAP_VERSION");
|
qCInfo(dcApplication()) << "Snap version :" << qgetenv("SNAP_VERSION");
|
||||||
qCInfo(dcApplication) << "Snap directory :" << qgetenv("SNAP");
|
qCInfo(dcApplication()) << "Snap directory :" << qgetenv("SNAP");
|
||||||
qCInfo(dcApplication) << "Snap app data :" << qgetenv("SNAP_DATA");
|
qCInfo(dcApplication()) << "Snap app data :" << qgetenv("SNAP_DATA");
|
||||||
qCInfo(dcApplication) << "Snap user data :" << qgetenv("SNAP_USER_DATA");
|
qCInfo(dcApplication()) << "Snap user data :" << qgetenv("SNAP_USER_DATA");
|
||||||
qCInfo(dcApplication) << "Snap app common :" << qgetenv("SNAP_COMMON");
|
qCInfo(dcApplication()) << "Snap app common :" << qgetenv("SNAP_COMMON");
|
||||||
}
|
}
|
||||||
|
|
||||||
// create core instance
|
// 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));
|
NymeaCore::instance()->init(parser.values(interfacesOption), parser.isSet(noLogDbOption));
|
||||||
|
|
||||||
int ret = application.exec();
|
int ret = application.exec();
|
||||||
closeLogFile();
|
closeLogFile();
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@ -79,44 +79,47 @@ static void catchUnixSignals(const std::vector<int>& quitSignals, const std::vec
|
|||||||
NymeaCore::ShutdownReason reason = NymeaCore::ShutdownReasonQuit;
|
NymeaCore::ShutdownReason reason = NymeaCore::ShutdownReasonQuit;
|
||||||
switch (sig) {
|
switch (sig) {
|
||||||
case SIGQUIT:
|
case SIGQUIT:
|
||||||
qCDebug(dcApplication) << "Cought SIGQUIT signal...";
|
qCDebug(dcApplication()) << "Cought SIGQUIT signal...";
|
||||||
reason = NymeaCore::ShutdownReasonQuit;
|
reason = NymeaCore::ShutdownReasonQuit;
|
||||||
break;
|
break;
|
||||||
case SIGINT:
|
case SIGINT:
|
||||||
qCDebug(dcApplication) << "Cought SIGINT signal...";
|
qCDebug(dcApplication()) << "Cought SIGINT signal...";
|
||||||
reason = NymeaCore::ShutdownReasonTerm;
|
reason = NymeaCore::ShutdownReasonTerm;
|
||||||
break;
|
break;
|
||||||
case SIGTERM:
|
case SIGTERM:
|
||||||
qCDebug(dcApplication) << "Cought SIGTERM signal...";
|
qCDebug(dcApplication()) << "Cought SIGTERM signal...";
|
||||||
reason = NymeaCore::ShutdownReasonTerm;
|
reason = NymeaCore::ShutdownReasonTerm;
|
||||||
break;
|
break;
|
||||||
case SIGHUP:
|
case SIGHUP:
|
||||||
qCDebug(dcApplication) << "Cought SIGHUP signal...";
|
qCDebug(dcApplication()) << "Cought SIGHUP signal...";
|
||||||
reason = NymeaCore::ShutdownReasonTerm;
|
reason = NymeaCore::ShutdownReasonTerm;
|
||||||
break;
|
break;
|
||||||
case SIGKILL:
|
case SIGKILL:
|
||||||
qCDebug(dcApplication) << "Cought SIGKILL signal...";
|
qCDebug(dcApplication()) << "Cought SIGKILL signal...";
|
||||||
reason = NymeaCore::ShutdownReasonTerm;
|
reason = NymeaCore::ShutdownReasonTerm;
|
||||||
break;
|
break;
|
||||||
case SIGSEGV:
|
case SIGSEGV:
|
||||||
qCDebug(dcApplication) << "Cought SIGSEGV quit signal...";
|
qCDebug(dcApplication()) << "Cought SIGSEGV quit signal...";
|
||||||
reason = NymeaCore::ShutdownReasonFailure;
|
reason = NymeaCore::ShutdownReasonFailure;
|
||||||
break;
|
break;
|
||||||
case SIGFPE:
|
case SIGFPE:
|
||||||
qCDebug(dcApplication) << "Cought SIGFPE quit signal...";
|
qCDebug(dcApplication()) << "Cought SIGFPE quit signal...";
|
||||||
reason = NymeaCore::ShutdownReasonFailure;
|
reason = NymeaCore::ShutdownReasonFailure;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
qCDebug(dcApplication) << "Cought signal" << sig;
|
qCDebug(dcApplication()) << "Cought signal" << sig;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
qCInfo(dcApplication) << "=====================================";
|
qCInfo(dcApplication()) << "=====================================";
|
||||||
qCInfo(dcApplication) << "Shutting down nymea:core";
|
qCInfo(dcApplication()) << "Shutting down nymea:core";
|
||||||
qCInfo(dcApplication) << "=====================================";
|
qCInfo(dcApplication()) << "=====================================";
|
||||||
|
|
||||||
s_shutdownCounter++;
|
s_shutdownCounter++;
|
||||||
NymeaCore::instance()->destroy(reason);
|
NymeaCore::instance()->destroy(reason);
|
||||||
|
|
||||||
|
qCInfo(dcApplication()) << "nymea:core shut down successfully";
|
||||||
|
NymeaApplication::processEvents();
|
||||||
NymeaApplication::quit();
|
NymeaApplication::quit();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -137,4 +140,9 @@ NymeaApplication::NymeaApplication(int &argc, char **argv) :
|
|||||||
catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP, SIGKILL, /*SIGSEGV,*/ SIGFPE});
|
catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP, SIGKILL, /*SIGSEGV,*/ SIGFPE});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NymeaApplication::~NymeaApplication()
|
||||||
|
{
|
||||||
|
quit();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,6 +41,7 @@ class NymeaApplication : public QCoreApplication
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NymeaApplication(int &argc, char **argv);
|
NymeaApplication(int &argc, char **argv);
|
||||||
|
~NymeaApplication() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,9 +83,9 @@ void NymeaService::start()
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(dcApplication) << "=====================================";
|
qCDebug(dcApplication()) << "=====================================";
|
||||||
qCDebug(dcApplication) << "nymead" << NYMEA_VERSION_STRING << "started as daemon.";
|
qCDebug(dcApplication()) << "nymead" << NYMEA_VERSION_STRING << "started as daemon.";
|
||||||
qCDebug(dcApplication) << "=====================================";
|
qCDebug(dcApplication()) << "=====================================";
|
||||||
NymeaCore::instance();
|
NymeaCore::instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user