Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+136
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
* DbWriter for RecordingManagement
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
#include "db_writer.h"
|
||||
|
||||
#include "db_writer_snapshot.h"
|
||||
#include "rec_db.h"
|
||||
#include "logger.h"
|
||||
#include "settings.h"
|
||||
#include <DDS/DDSConnector/dds_connector.h>
|
||||
|
||||
#include <QThread>
|
||||
|
||||
#include <ngldb/dbtransaction.h>
|
||||
|
||||
#include <LtsPluginManager/lts_plugin_loader.h>
|
||||
#include <RecordingManagement/rec_db_impl.h>
|
||||
|
||||
namespace RecordingManagement
|
||||
{
|
||||
|
||||
DbWriter::DbWriter(const std::shared_ptr<DDSConnector::DdsConnector> &ddsConnector)
|
||||
: m_query(nullptr)
|
||||
, m_recordTimer(new QTimer(this))
|
||||
, m_ddsConnector(ddsConnector)
|
||||
, m_dbWriterSnapshot(nullptr)
|
||||
, m_dbWriterSnapshotThread(nullptr)
|
||||
, m_logger(getLogger("DbWriter"))
|
||||
{}
|
||||
|
||||
DbWriter::~DbWriter()
|
||||
{
|
||||
if (m_dbWriterSnapshotThread)
|
||||
{
|
||||
m_dbWriterSnapshotThread->quit();
|
||||
m_dbWriterSnapshotThread->wait(30 * 1000);
|
||||
delete m_dbWriterSnapshotThread;
|
||||
}
|
||||
LtsPluginManager::LtsPluginLoader::getInstance()->unloadAllPlugins();
|
||||
m_plugins.clear();
|
||||
|
||||
delete m_dbWriterSnapshot;
|
||||
delete m_recordTimer;
|
||||
delete m_query;
|
||||
}
|
||||
|
||||
bool DbWriter::loadPlugin(const LtsPluginManager::PluginInstance &pi)
|
||||
{
|
||||
RecordReplay::RecordReplayPlugin *recPlugin = qobject_cast<RecordReplay::RecordReplayPlugin *>(pi.plugin);
|
||||
if (!recPlugin)
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Cannot load RecordReplayPlugin " << pi.fileName;
|
||||
return false;
|
||||
}
|
||||
INFO_LOG(m_logger) << "Loading RecordReplayPlugin " << pi.fileName;
|
||||
// exId == partId da wir hier in IDL::PartitionType::Exercise arbeiten
|
||||
if (!recPlugin->initDtc(m_ddsConnector, m_ddsConnector->getPartitionId()))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Initialisation for RecordReplayPlugin " << pi.fileName << " failed ";
|
||||
return false;
|
||||
}
|
||||
|
||||
INFO_LOG(m_logger) << "Loaded record replay plugin " << recPlugin->pluginName();
|
||||
m_plugins += recPlugin;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DbWriter::init(const std::shared_ptr<DatabaseInterface> &db)
|
||||
{
|
||||
m_db = db;
|
||||
|
||||
auto cb = [this](const LtsPluginManager::PluginInstance &pi) { return loadPlugin(pi);};
|
||||
LtsPluginManager::LtsPluginLoader::getInstance()->loadPlugins(LtsPluginManager::PluginType::SPECIAL,
|
||||
cb,
|
||||
QStringList(),
|
||||
QStringLiteral("recordreplay"));
|
||||
|
||||
// Start recording data
|
||||
qint64 msecs = Settings::updateFrequency();
|
||||
INFO_LOG(m_logger) << "Updating recording tables every " << msecs << " milliseconds.";
|
||||
connect(m_recordTimer, &QTimer::timeout, this, &DbWriter::ddsTopicsToDatabase);
|
||||
m_recordTimer->start(msecs);
|
||||
|
||||
delete m_query;
|
||||
m_query = new NSqlQuery(m_db->database());
|
||||
|
||||
return initSnapshot();
|
||||
}
|
||||
|
||||
bool DbWriter::initSnapshot()
|
||||
{
|
||||
if (m_dbWriterSnapshotThread)
|
||||
{
|
||||
m_dbWriterSnapshotThread->quit();
|
||||
m_dbWriterSnapshotThread->wait(30 * 1000);
|
||||
delete m_dbWriterSnapshotThread;
|
||||
}
|
||||
delete m_dbWriterSnapshot;
|
||||
|
||||
m_dbWriterSnapshot = new DbWriterSnapshot(m_plugins,
|
||||
m_ddsConnector->getPartitionId(),
|
||||
Settings::settings());
|
||||
m_dbWriterSnapshotThread = new DbWriterSnapshotThread(m_dbWriterSnapshot, this);
|
||||
m_dbWriterSnapshot->moveToThread(m_dbWriterSnapshotThread);
|
||||
m_dbWriterSnapshotThread->start();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DbWriter::ddsTopicsToDatabase()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "IN ddsTopicsToDatabase";
|
||||
DBTransaction trans(m_db->database());
|
||||
|
||||
QHash<QString, qint64> minRecordSampleTimes;
|
||||
|
||||
// for each plugin
|
||||
for (RecordReplay::RecordReplayPlugin *recPlugin : qAsConst(m_plugins))
|
||||
{
|
||||
if (!recPlugin->ddsTopicsToDatabase(*m_query, minRecordSampleTimes))
|
||||
{
|
||||
// should never happen but who knows
|
||||
ERROR_LOG(m_logger) << "Error recording dds topics - aborting recording data";
|
||||
return;
|
||||
}
|
||||
}
|
||||
trans.commit();
|
||||
|
||||
m_dbWriterSnapshot->setMinRecordedSampleTimes(minRecordSampleTimes);
|
||||
}
|
||||
|
||||
} // RecordingManagement
|
||||
Reference in new issue
Block a user