Adds immediate migration results in progress

This commit is contained in:
torsten committed 2026-08-19 11:18:24 +02:00
1 parent 8453e104c5
commit 3bb6e89496
2102 files changed
+17482 -15071

No files matched your search

@@ -53,8 +53,7 @@ WebSocketAvs::WebSocketAvs(MainHandler *mainHandler,
const std::shared_ptr<AudioVideoManagement::Interface::Dtc> &avmDtc,
const std::shared_ptr<InfrastructureManagement::Interface::Dtc> &ismDtc,
int exerciseId,
QObject *parent)
: QObject(parent)
QObject *parent) : QObject(parent)
, m_ddsHandler(ddsHandler)
, m_dbHandler(db)
, m_eventServer(eventServer)
@@ -66,8 +65,8 @@ WebSocketAvs::WebSocketAvs(MainHandler *mainHandler,
, m_cleanupTimer(new QTimer(this))
, m_exerciseId(exerciseId)
, m_lastUpdate(0)
, m_bWebSocketDisconnectedWarnedOnce(false)
{
, m_bWebSocketDisconnectedWarnedOnce(false),
m_logger(NGL::NGLLoggerBootstrap::getLogger()) {
connect(m_wsReconnectTimer, &QTimer::timeout,
this, &WebSocketAvs::openWebSocket);
@@ -77,12 +76,12 @@ WebSocketAvs::WebSocketAvs(MainHandler *mainHandler,
//if there is a positive time start it
//if not: don't do it!
int cleanupTimeout = Settings::getCleanupTimeout();
INFO_LOG() << "cleanup Timer Interval: " << cleanupTimeout;
INFO_LOG(m_logger) << "cleanup Timer Interval: " << cleanupTimeout;
if (cleanupTimeout > 0)
{
m_cleanupTimer->setInterval(cleanupTimeout);
m_cleanupTimer->start();
INFO_LOG() << "Started cleanup Timer with Interval: " << cleanupTimeout;
INFO_LOG(m_logger) << "Started cleanup Timer with Interval: " << cleanupTimeout;
}
}
@@ -93,14 +92,14 @@ WebSocketAvs::~WebSocketAvs()
void WebSocketAvs::init()
{
DEBUG_LOG() << "WebSocketAvs::init";
DEBUG_LOG(m_logger) << "WebSocketAvs::init";
m_wsReconnectTimer->start(1000);
//onCleanUpDbInternal();
}
void WebSocketAvs::setWsUrl(const QString &url)
{
DEBUG_LOG() << "Url: " << url;
DEBUG_LOG(m_logger) << "Url: " << url;
m_wsUrl = url;
}
@@ -128,7 +127,7 @@ AvsData WebSocketAvs::jsonObjectToAvsData(const QJsonObject &obj)
break;
default:
eventType = ProjectDataManagement::EventType::Unknown;
ERROR_LOG() << "Unknown avsEventType: " << avsEventType;
ERROR_LOG(m_logger) << "Unknown avsEventType: " << avsEventType;
break;
}
data.eventType = eventType.underlying();
@@ -188,7 +187,7 @@ ExerciseEventManagement::Event WebSocketAvs::avsDataToEvent(const AvsData &data)
void WebSocketAvs::onTextMessageReceived(const QString &message)
{
INFO_LOG() << "Got message from AVS control process: " << message;
INFO_LOG(m_logger) << "Got message from AVS control process: " << message;
const QJsonDocument doc(QJsonDocument::fromJson(message.toUtf8()));
const QJsonObject obj = doc.object();
@@ -202,41 +201,41 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
{
QString streamName = data.streamName;
DEBUG_LOG() << "handleAvsData for stream: " << streamName;
DEBUG_LOG(m_logger) << "handleAvsData for stream: " << streamName;
auto it = m_avsDataMap.find(streamName);
// existing stream ..........................................................
if (it != m_avsDataMap.end())
{
DEBUG_LOG() << "handleAvsData for stream 1: " << streamName;
DEBUG_LOG(m_logger) << "handleAvsData for stream 1: " << streamName;
AvsData &avsData = m_avsDataMap[streamName];
if ( (avsData.endTime == -1) && (data.endTime == -1))
{
DEBUG_LOG() << "kein Publish (avsData.endTime == -1) && (data.endTime == -1)";
DEBUG_LOG(m_logger) << "kein Publish (avsData.endTime == -1) && (data.endTime == -1)";
return;
}
if ( (data.endTime == -1) && (data.eventType == ProjectDataManagement::EventType::RadioCnr))
{
DEBUG_LOG() << "kein Publish (avsData.endTime == -1) && RadioCnr";
DEBUG_LOG(m_logger) << "kein Publish (avsData.endTime == -1) && RadioCnr";
return;
}
if (avsData.eventTime != data.eventTime) // new range -> close old range
{
DEBUG_LOG() << "handleAvsData for stream 2: " << streamName;
DEBUG_LOG(m_logger) << "handleAvsData for stream 2: " << streamName;
if (avsData.eventTime == -1) // missing end time -> set artificial end time
{
WARNING_LOG() << "Missing end time for stream: " << streamName << " -> setting artificial end time: " << avsData.eventTime + 1000;
WARNING_LOG(m_logger) << "Missing end time for stream: " << streamName << " -> setting artificial end time: " << avsData.eventTime + 1000;
avsData.eventTime = avsData.eventTime + 1000;
publishData(streamName);
}
DEBUG_LOG() << "handleAvsData for stream remove: " << streamName;
DEBUG_LOG(m_logger) << "handleAvsData for stream remove: " << streamName;
m_avsDataMap.remove(streamName);
}
else // update range
{
DEBUG_LOG() << "handleAvsData update range publish" << streamName;
DEBUG_LOG(m_logger) << "handleAvsData update range publish" << streamName;
avsData.endTime = data.endTime;
publishData(streamName);
@@ -247,20 +246,20 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
}
// new range ................................................................
DEBUG_LOG() << "m_avsDataMap.insert(streamName";
DEBUG_LOG(m_logger) << "m_avsDataMap.insert(streamName";
m_avsDataMap.insert(streamName, data);
AvsData &avsData = m_avsDataMap[streamName];
if (!lastRangeClosed)
{
DEBUG_LOG() << "!lastRangeClosed";
DEBUG_LOG(m_logger) << "!lastRangeClosed";
avsData.endTime = -1;
}
else if (avsData.endTime == -1) // range is closed but end time is missing
{
DEBUG_LOG() << "avsData.endTime == -1";
DEBUG_LOG(m_logger) << "avsData.endTime == -1";
avsData.endTime = avsData.eventTime + 1000; // -> set artificial end time
}
DEBUG_LOG() << "publishData";
DEBUG_LOG(m_logger) << "publishData";
avsData.id = publishData(streamName);
// if (lastRangeClosed)
// m_avsDataMap.remove(streamName);
@@ -268,7 +267,7 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
// // new stream ...............................................................
// if (it == m_avsDataMap.end())
// {
// DEBUG_LOG() << "received event on new stream: " << streamName;
// DEBUG_LOG(m_logger) << "received event on new stream: " << streamName;
// AvsData avsData = data;
// if (!lastRangeClosed) // waiting for end time
// avsData.endTime = -1;
@@ -288,12 +287,12 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
// if (avsData.eventTime != data.eventTime) // same stream, different time -> new event received
// {
// DEBUG_LOG() << "new event on stream: " << streamName;
// DEBUG_LOG(m_logger) << "new event on stream: " << streamName;
// // close old event ........................................................
// if (avsData.endTime == -1) // last event on the same stream was not closed
// {
// WARNING_LOG() << "Missing end time for stream: " << streamName << ". Setting artificial end time.";
// WARNING_LOG(m_logger) << "Missing end time for stream: " << streamName << ". Setting artificial end time.";
// avsData.endTime = avsData.eventTime + 1000;
// publishData(streamName);
// }
@@ -311,7 +310,7 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
// else // same event
// {
// avsData.endTime = data.endTime;
// DEBUG_LOG() << "received new end time: " << data.endTime << " for stream: " << streamName;
// DEBUG_LOG(m_logger) << "received new end time: " << data.endTime << " for stream: " << streamName;
// if (lastRangeClosed)
// {
// publishData(streamName);
@@ -322,10 +321,10 @@ void WebSocketAvs::handleAvsData(const AvsData &data, const bool &lastRangeClose
int WebSocketAvs::publishData(const QString &streamName)
{
DEBUG_LOG() << "WebSocketAvs::publishData";
DEBUG_LOG(m_logger) << "WebSocketAvs::publishData";
if (streamName.isEmpty())
{
WARNING_LOG() << "Ignoring empty stream name";
WARNING_LOG(m_logger) << "Ignoring empty stream name";
return 0;
}
@@ -355,7 +354,7 @@ int WebSocketAvs::publishData(const QString &streamName)
{
if (isAlreadyInDb)
{
WARNING_LOG() << "Ignoring existing event at " << dbData.sampleTime;
WARNING_LOG(m_logger) << "Ignoring existing event at " << dbData.sampleTime;
return 0;
}
}
@@ -364,17 +363,17 @@ int WebSocketAvs::publishData(const QString &streamName)
if (dbData.id > 0)
{
if (!m_dbHandler->db()->update(dbData))
ERROR_LOG() << "Error while updating dbData with id : " << data.id;
ERROR_LOG(m_logger) << "Error while updating dbData with id : " << data.id;
}
else
{
if (!m_dbHandler->db()->insert(dbData))
ERROR_LOG() << "Error while inserting avsData in db: streamName: " << data.streamName;
ERROR_LOG(m_logger) << "Error while inserting avsData in db: streamName: " << data.streamName;
ddsEvent.id(dbData.id);
}
// publish data
INFO_LOG() << "Publish data for stream: " << streamName << " and database id=" << dbData.id;
INFO_LOG(m_logger) << "Publish data for stream: " << streamName << " and database id=" << dbData.id;
m_eventServer->sendEvent(Database::toJson(dbData));
m_ddsHandler->dts()->publish(ddsEvent);
m_mainHandler->addEventIdToRemove(dbData.id); // take data from dds-bus after 10s, we need just to make sure the recording service got it
@@ -385,7 +384,7 @@ int WebSocketAvs::publishData(const QString &streamName)
void WebSocketAvs::openWebSocket()
{
DEBUG_LOG() << "openWebSocket";
DEBUG_LOG(m_logger) << "openWebSocket";
closeWebSocket();
m_wsSocket = new QWebSocket;
connect(m_wsSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
@@ -402,7 +401,7 @@ void WebSocketAvs::openWebSocket()
void WebSocketAvs::closeWebSocket()
{
DEBUG_LOG() << "closeWebSocket";
DEBUG_LOG(m_logger) << "closeWebSocket";
if (m_wsSocket)
{
m_wsSocket->disconnect(this);
@@ -417,14 +416,14 @@ void WebSocketAvs::onWebSocketError(QAbstractSocket::SocketError error)
{
if (!m_wsSocket)
return;
WARNING_LOG() << "Error connecting to " << m_wsSocket->peerAddress().toString() << ": " << error;
WARNING_LOG(m_logger) << "Error connecting to " << m_wsSocket->peerAddress().toString() << ": " << error;
closeWebSocket();
m_wsReconnectTimer->start(1000);
}
void WebSocketAvs::onWebSocketConnected()
{
DEBUG_LOG() << "connected to via websockets";
DEBUG_LOG(m_logger) << "connected to via websockets";
m_wsReconnectTimer->stop();
m_bWebSocketDisconnectedWarnedOnce = false;
@@ -433,11 +432,11 @@ void WebSocketAvs::onWebSocketConnected()
void WebSocketAvs::onWebSocketDisconnected()
{
DEBUG_LOG() << "WebSocketAvs::onWebSocketDisconnected()";
DEBUG_LOG(m_logger) << "WebSocketAvs::onWebSocketDisconnected()";
if (!m_bWebSocketDisconnectedWarnedOnce)
{
m_bWebSocketDisconnectedWarnedOnce = true;
WARNING_LOG() << "Websocket to " << m_wsUrl << " closed - trying to reconnect in 1 sec";
WARNING_LOG(m_logger) << "Websocket to " << m_wsUrl << " closed - trying to reconnect in 1 sec";
}
closeWebSocket();
@@ -446,7 +445,7 @@ void WebSocketAvs::onWebSocketDisconnected()
void WebSocketAvs::onSendExerciseId()
{
ERROR_LOG() << "Send exerciseId: ";
ERROR_LOG(m_logger) << "Send exerciseId: ";
QJsonObject obj;
@@ -484,7 +483,7 @@ void WebSocketAvs::onCleanUpDbInternal()
{
ntpRangeSortLocal.insert(avItem.eventTime, avItem);
}
DEBUG_LOG() <<" Start with key: '" << stream << "' external = " << externalData.size() << " internal: " << ntpRangeSortLocal.size();
DEBUG_LOG(m_logger) <<" Start with key: '" << stream << "' external = " << externalData.size() << " internal: " << ntpRangeSortLocal.size();
QVector<qint64> itemsToRemoveFromInternal;
QMap<qint64, AvsData> collection;
QVector<AvsData> toAdd;
@@ -512,7 +511,7 @@ void WebSocketAvs::onCleanUpDbInternal()
if (m_ismDtc->getBuildingId(mountingPointId, mainStructureElementId))
add.mainStructureElementId = mainStructureElementId;
}
DEBUG_LOG() << "need to add: " << add.eventType << " st: " << add.streamName << " mpi:" << add.mainStructureElementId;
DEBUG_LOG(m_logger) << "need to add: " << add.eventType << " st: " << add.streamName << " mpi:" << add.mainStructureElementId;
toAdd.append(add);
collection.insert(add.eventTime, add);
}
@@ -595,11 +594,11 @@ void WebSocketAvs::onCleanUpDbInternal()
dbDataAdd.id = 0;
m_dbHandler->db()->insert(dbDataAdd);
}
DEBUG_LOG() << "DONE Sync wite remote DB "<< stream << " to Ignore" << toIgnore.size()<< " to Add" << toAdd.size() << " to Update:" << toUpdate.size()<< " to remove:" << itemsToRemoveFromInternal.size();
DEBUG_LOG(m_logger) << "DONE Sync wite remote DB "<< stream << " to Ignore" << toIgnore.size()<< " to Add" << toAdd.size() << " to Update:" << toUpdate.size()<< " to remove:" << itemsToRemoveFromInternal.size();
}
m_cleanupTimer->start();
m_lastUpdate = QDateTime::currentMSecsSinceEpoch()-2*60*1000;
DEBUG_LOG() << "DONE Sync wite remote DB next check starts at: " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
DEBUG_LOG(m_logger) << "DONE Sync wite remote DB next check starts at: " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
}
QMap<QString, QVector<AvsData> > WebSocketAvs::getAllAvsData()
@@ -616,11 +615,11 @@ QMap<QString, QVector<AvsData> > WebSocketAvs::getAllAvsData()
QLatin1String(" WHERE context_id = :context"));
if (m_lastUpdate > 0)
stmt += QLatin1String(" and time_start_msec > ") + QString::number(m_lastUpdate);
DEBUG_LOG() << "START Sync read remote DB at " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
DEBUG_LOG(m_logger) << "START Sync read remote DB at " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
NSqlQuery q(m_dbHandler->db()->database());
if (!q.prepare(stmt))
{
WARNING_LOG() << "Could not prepare statement" << stmt << q.lastError().text() << q.lastError().databaseText();
WARNING_LOG(m_logger) << "Could not prepare statement" << stmt << q.lastError().text() << q.lastError().databaseText();
return retu;
} // if
q.setForwardOnly(true);
@@ -632,7 +631,7 @@ QMap<QString, QVector<AvsData> > WebSocketAvs::getAllAvsData()
if (!q.exec())
{
DEBUG_LOG() << "Could not execute" << stmt << q.lastError().text() << q.lastError().databaseText();
DEBUG_LOG(m_logger) << "Could not execute" << stmt << q.lastError().text() << q.lastError().databaseText();
return retu;
} // if
@@ -678,7 +677,7 @@ QMap<QString, QVector<AvsData>> WebSocketAvs::getAllInternalDbData()
// m_dbHandler->db()->select(dataVec);
//qCritical() << "END select reading internal db ";
DEBUG_LOG() << "START Sync read local DB at " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
DEBUG_LOG(m_logger) << "START Sync read local DB at " << QDateTime::fromMSecsSinceEpoch(m_lastUpdate).toString();
int j = 0;
for (const auto &dataI : std::as_const(dataVec))
{
@@ -687,7 +686,7 @@ QMap<QString, QVector<AvsData>> WebSocketAvs::getAllInternalDbData()
QJsonDocument job = QJsonDocument::fromJson(dataI.properties.toUtf8());
if(!job.isObject())
{
WARNING_LOG() << "ERROR Parsing Json";
WARNING_LOG(m_logger) << "ERROR Parsing Json";
}
QJsonObject obj = job.object();