Mise en place du versionnement horodaté (même mécanisme que shipheart_qt) : génération de _version.h à chaque build, archivage automatique d'une copie horodatée de l'exécutable dans versions/, affichage de la version au démarrage
This commit is contained in:
@@ -164,6 +164,32 @@ static QHttpServerResponse withCors(QHttpServerResponse &&resp)
|
||||
return std::move(resp);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Vérifie que la connexion MariaDB (ouverte une seule fois au démarrage) est
|
||||
// toujours active, et la rétablit sinon. isOpen() peut rester vrai même après
|
||||
// une coupure réseau ou un dépassement de wait_timeout côté serveur - un test
|
||||
// léger (SELECT 1) confirme que la connexion répond réellement. Sans ce
|
||||
// contrôle, l'API reste "vivante" indéfiniment mais chaque requête SQL échoue
|
||||
// silencieusement après une longue période d'inactivité (constaté après
|
||||
// plusieurs semaines d'exécution continue, cf synthèse).
|
||||
// À appeler en tout premier dans chaque route qui touche la base.
|
||||
// ----------------------------------------------------------------------------
|
||||
static void assurer_connexion_bdd()
|
||||
{
|
||||
QSqlDatabase db = QSqlDatabase::database();
|
||||
if (db.isOpen()) {
|
||||
QSqlQuery test(db);
|
||||
if (test.exec("SELECT 1")) return;
|
||||
}
|
||||
qWarning() << "Connexion MariaDB perdue, tentative de reconnexion...";
|
||||
db.close();
|
||||
if (db.open()) {
|
||||
qInfo() << "Reconnexion MariaDB réussie.";
|
||||
} else {
|
||||
qCritical() << "Reconnexion MariaDB échouée :" << db.lastError().text();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
@@ -196,6 +222,7 @@ int main(int argc, char *argv[])
|
||||
// requêtes onglets de mise_a_jour_onglets_circuits()).
|
||||
// ------------------------------------------------------------------
|
||||
server.route("/elements/familles", [](const QHttpServerRequest &request) {
|
||||
assurer_connexion_bdd();
|
||||
QUrlQuery query(request.query());
|
||||
const QString type = query.queryItemValue("type");
|
||||
|
||||
@@ -352,6 +379,7 @@ int main(int argc, char *argv[])
|
||||
// différents, mais un seul, appelé deux fois).
|
||||
// ------------------------------------------------------------------
|
||||
server.route("/elements", [](const QHttpServerRequest &request) {
|
||||
assurer_connexion_bdd();
|
||||
QUrlQuery query(request.query());
|
||||
const QString type = query.queryItemValue("type");
|
||||
const QString familleStr = query.queryItemValue("famille");
|
||||
@@ -610,6 +638,7 @@ int main(int argc, char *argv[])
|
||||
// ------------------------------------------------------------------
|
||||
server.route("/elements/circuit/<arg>", QHttpServerRequest::Method::Patch,
|
||||
[](int idCircuit, const QHttpServerRequest &request) {
|
||||
assurer_connexion_bdd();
|
||||
const QJsonDocument body = QJsonDocument::fromJson(request.body());
|
||||
if (!body.isObject()) {
|
||||
QJsonObject err;
|
||||
@@ -686,6 +715,7 @@ int main(int argc, char *argv[])
|
||||
// Circuits/batteries (sélection de variable côté client) à venir.
|
||||
// ------------------------------------------------------------------
|
||||
server.route("/mesures", [](const QHttpServerRequest &request) {
|
||||
assurer_connexion_bdd();
|
||||
QUrlQuery query(request.query());
|
||||
const QString type = query.queryItemValue("type");
|
||||
const QString idStr = query.queryItemValue("id");
|
||||
@@ -1037,6 +1067,7 @@ int main(int argc, char *argv[])
|
||||
// 90% du temps de traitement natif pour un gain marginal).
|
||||
// ------------------------------------------------------------------
|
||||
server.route("/energie", [](const QHttpServerRequest &request) {
|
||||
assurer_connexion_bdd();
|
||||
QUrlQuery query(request.query());
|
||||
const QString type = query.queryItemValue("type");
|
||||
const QString idStr = query.queryItemValue("id");
|
||||
|
||||
Reference in New Issue
Block a user