Implémentation du client SFTP

This commit is contained in:
jfmartel 2023-11-24 13:19:55 -05:00
parent f35cb3cfee
commit 76f0fa79bc
6 changed files with 161 additions and 82 deletions

View File

@ -106,18 +106,29 @@ NETWORK_SHARE_PASSWORD=SigN4lisat10n!77240TraNsf3Rt
NETWORK_SHARE_DOMAIN=metro NETWORK_SHARE_DOMAIN=metro
#----------------------------------
#Paramètres du serveur SFTP pour la copie des fichiers logs
#Activation de la copie des fichiers sur le réseau (OUI ou NON)
#ACTIVER_SFTP=OUI
#Login pour accéder au serveur SFTP
#SFTP_LOGIN=service.ct
#Password pour accéder au serveur SFTP
#SFTP_PASSWORD=SigN4lisat10n!77240TraNsf3Rt
#Adresse du serveur
#SFTP_SERVER_ADDRESS=127.0.0.1
#Répertoire de destination sur le serveur (doit finir par un "/")
#SFTP_DESTINATION=/Transfert$/vers_corpo/CT/
#---------------------------------- #----------------------------------
#Paramètres du serveur SFTP pour la copie des fichiers logs #Paramètres du serveur SFTP pour la copie des fichiers logs
#Activation de la copie des fichiers sur le réseau (OUI ou NON) #Activation de la copie des fichiers sur le réseau (OUI ou NON)
ACTIVER_SFTP=OUI ACTIVER_SFTP=OUI
#Login pour accéder au serveur SFTP #Login pour accéder au serveur SFTP
SFTP_LOGIN=service.ct SFTP_LOGIN=zonetest
#Password pour accéder au serveur SFTP #Password pour accéder au serveur SFTP
SFTP_PASSWORD=SigN4lisat10n!77240TraNsf3Rt SFTP_PASSWORD=zonetest
#Adresse du serveur #Adresse du serveur
SFTP_SERVER_ADDRESS=127.0.0.1 SFTP_SERVER_ADDRESS=127.0.0.1
#Répertoire de destination sur le serveur (doit finir par un "/") #Répertoire de destination sur le serveur (doit finir par un "/")
SFTP_DESTINATION=/Transfert$/vers_corpo/CT/ SFTP_DESTINATION=/home/zonetest/DevZT/test/

1
sftpbatch Normal file
View File

@ -0,0 +1 @@
put ./Trains/LOGZT2_2023-11-24-13-19-04-944.bin /home/zonetest/DevZT/test/CVRT-N-LOGZT2_2023-11-24-13-19-04-944.bin

View File

@ -1,5 +1,7 @@
#include "SFTPServerManager.h" #include "SFTPServerManager.h"
#include "GlobalDefine.h" #include "GlobalDefine.h"
#include <QFile>
CSFTPServerManager::CSFTPServerManager() CSFTPServerManager::CSFTPServerManager()
{ {
@ -21,9 +23,23 @@ int CSFTPServerManager::InitFTPServerManager(bool EnableSFTPClient, QString SFTP
mSFTPRemoteDir = SFTPRemoteDir; mSFTPRemoteDir = SFTPRemoteDir;
mFilenamePrefix = FilenamePrefix; mFilenamePrefix = FilenamePrefix;
mProcessTimer = new QTimer;
mProcessTimer->setSingleShot(true);
connect(mProcessTimer,SIGNAL(timeout()),this,SLOT(ProcessTimerExpired()));
mTransferProcess = new QProcess(this);
connect(mTransferProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(ProcessFinished(int,QProcess::ExitStatus)));
return RET_OK; return RET_OK;
} }
CSFTPServerManager::~CSFTPServerManager()
{
delete mTransferProcess;
delete mProcessTimer;
}
int CSFTPServerManager::TransferTrainLogToSFTPServer(QString FileName, bool Detection) int CSFTPServerManager::TransferTrainLogToSFTPServer(QString FileName, bool Detection)
{ {
if(mEnableSFTPClient == false) if(mEnableSFTPClient == false)
@ -53,12 +69,38 @@ int CSFTPServerManager::TransferTrainLogToSFTPServer(QString FileName, bool Dete
#ifdef USE_SCP #ifdef USE_SCP
Cmd = QString ("sshpass -p \"%1\" scp %2 %3@%4:%5").arg(mSFTPPassword).arg(OriginFilePath).arg(mSFTPLogin).arg(mSFTPServerAddress).arg(DestFilePath); Cmd = QString ("sshpass -p \"%1\" scp %2 %3@%4:%5").arg(mSFTPPassword).arg(OriginFilePath).arg(mSFTPLogin).arg(mSFTPServerAddress).arg(DestFilePath);
#else #else
#endif QFile *SFTPBatchFile = new QFile("./sftpbatch");
qDebug("%s",qPrintable(Cmd)); if(SFTPBatchFile->open(QFile::ReadWrite | QFile::Truncate | QFile::Text | QFile::Unbuffered) == false)
{
qDebug("Imposible d'ouvrir le fichier sftpbatch");
SFTPBatchFile->close();
delete SFTPBatchFile;
return RET_ERROR;
}
// mTransferProcess->start(Cmd); QString BatchCmds;
// mProcessTimer->start(PROCESS_TIMEOUT); //Allow some time to copy the file BatchCmds.clear();
// mNetDriveSMState = NET_DRIVE_TRANSFERRING_TRAIN_LOG_STATE;
BatchCmds.append(QString("put %1 %2").arg(OriginFilePath).arg(DestFilePath));
SFTPBatchFile->write(qPrintable(BatchCmds));
SFTPBatchFile->close();
delete SFTPBatchFile;
Cmd = QString ("sshpass -p \"%1\" sftp -oBatchMode=no -b ./sftpbatch %2@%3").arg(mSFTPPassword).arg(mSFTPLogin).arg(mSFTPServerAddress);
#endif
qDebug("Commande pour copie du fichier log: %s",qPrintable(Cmd));
if(mTransferProcess->state() != QProcess::NotRunning)
{
qDebug("Copie de fichier log avortée car QProcess roule");
return RET_ERROR;
}
mTransferProcess->start(Cmd);
mProcessTimer->start(PROCESS_TIMEOUT); //Allow some time to copy the file
return RET_OK; return RET_OK;
@ -68,3 +110,18 @@ void CSFTPServerManager::NewTrainFileSaved(QString Filename, bool Detection)
{ {
TransferTrainLogToSFTPServer(Filename,Detection); TransferTrainLogToSFTPServer(Filename,Detection);
} }
void CSFTPServerManager::ProcessFinished(int ExitCode, QProcess::ExitStatus ExitStatus)
{
qDebug("Process SFTP terminé. Exit code - status %d - %d || Output %s || Erreur %s",ExitCode,ExitStatus,qPrintable(mTransferProcess->readAllStandardOutput()),qPrintable(mTransferProcess->readAllStandardError()));
qDebug("stdout: %s",qPrintable(mTransferProcess->readAll()));
}
void CSFTPServerManager::ProcessTimerExpired()
{
if(mTransferProcess->state() != QProcess::NotRunning)
{
mTransferProcess->terminate();
qDebug("Timer du process SFTP expiré Output %s || Erreur %s",qPrintable(mTransferProcess->readAllStandardOutput()),qPrintable(mTransferProcess->readAllStandardError()));
}
}

View File

@ -2,8 +2,11 @@
#define SFTPSERVERMANAGER_H #define SFTPSERVERMANAGER_H
#include <QObject> #include <QObject>
#include <QProcess>
#include <QTimer>
#define USE_SCP //#define USE_SCP
#define PROCESS_TIMEOUT 2000 //millisecs
class CSFTPServerManager : public QObject class CSFTPServerManager : public QObject
{ {
@ -11,6 +14,7 @@ class CSFTPServerManager : public QObject
public: public:
CSFTPServerManager(); CSFTPServerManager();
~CSFTPServerManager();
int InitFTPServerManager(bool EnableSFTPClient, QString SFTPLogin, QString SFTPPassword, QString SFTPServerAddress, QString SFTPRemoteDir, QString FilenamePrefix); int InitFTPServerManager(bool EnableSFTPClient, QString SFTPLogin, QString SFTPPassword, QString SFTPServerAddress, QString SFTPRemoteDir, QString FilenamePrefix);
int TransferTrainLogToSFTPServer(QString Filename, bool Detection); int TransferTrainLogToSFTPServer(QString Filename, bool Detection);
@ -22,8 +26,14 @@ private:
QString mSFTPRemoteDir; QString mSFTPRemoteDir;
QString mFilenamePrefix; QString mFilenamePrefix;
QProcess *mTransferProcess;
QTimer *mProcessTimer;
public slots: public slots:
void NewTrainFileSaved(QString,bool); void NewTrainFileSaved(QString,bool);
void ProcessTimerExpired();
void ProcessFinished(int ExitCode, QProcess::ExitStatus ExitStatus);
}; };

View File

@ -107,103 +107,103 @@ unsigned int CSimulationScenario::CreateScenario()
/// //ZT2 /// //ZT2
// InsertNewStep(STEP_ACTION_REGISTER_ZT2_ITI,300); InsertNewStep(STEP_ACTION_REGISTER_ZT2_ITI,300);
// InsertNewStep(STEP_ACTION_OCCUPY_ZT2,300); InsertNewStep(STEP_ACTION_OCCUPY_ZT2,300);
// for(int bogie = 1; bogie <= 18; bogie++) for(int bogie = 1; bogie <= 18; bogie++)
// { {
// InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_S1,SENSOR_DELAY); InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_S1,SENSOR_DELAY);
// InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_S1,BOGIE_DELAY); InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_S1,BOGIE_DELAY);
// // if(bogie == 5 || bogie == 2) // if(bogie == 5 || bogie == 2)
// { {
// // InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_PPE,5); // InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_PPE,5);
// // InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_PPE,1); // InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_PPE,1);
// } }
// // if(bogie == 3 || bogie == 10) // if(bogie == 3 || bogie == 10)
// { {
//// InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_PPI,3); // InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_PPI,3);
//// InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_PPI,1); // InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_PPI,1);
// } }
// //if(bogie != 3) //if(bogie != 3)
// { {
// InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_S1,SENSOR_DELAY); InsertNewStep(STEP_ACTION_ACTIVATE_ZT2_S1,SENSOR_DELAY);
// InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_S1,BOGIE_DELAY); InsertNewStep(STEP_ACTION_DEACTIVATE_ZT2_S1,BOGIE_DELAY);
// } }
// } }
// InsertNewStep(STEP_ACTION_DESTROY_ZT2_ITI,800); InsertNewStep(STEP_ACTION_DESTROY_ZT2_ITI,800);
// InsertNewStep(STEP_ACTION_FREE_ZT2,800); InsertNewStep(STEP_ACTION_FREE_ZT2,800);
//// MR //// MR
// InsertNewStep(STEP_ACTION_REGISTER_ZT1_ITI,300); // // InsertNewStep(STEP_ACTION_REGISTER_ZT1_ITI,300);
InsertNewStep(STEP_ACTION_OCCUPY_ZT1_APPROACH,300); // InsertNewStep(STEP_ACTION_OCCUPY_ZT1_APPROACH,300);
InsertNewStep(STEP_ACTION_OCCUPY_ZT1,300); // InsertNewStep(STEP_ACTION_OCCUPY_ZT1,300);
InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0); // InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0);
for(int bogie = 1; bogie <= 18; bogie++) // for(int bogie = 1; bogie <= 18; bogie++)
{
// if(bogie != 5 && bogie != 7)
// InsertNewStep(STEP_ACTION_ACTIVATE_PGI,0);
// InsertNewStep(STEP_ACTION_ACTIVATE_PGE,0);
//V00 DETECTION
// if(bogie != 9)
// { // {
InsertNewStep(STEP_ACTION_ACTIVATE_S1,SENSOR_DELAY); // // if(bogie != 5 && bogie != 7)
// } // // InsertNewStep(STEP_ACTION_ACTIVATE_PGI,0);
InsertNewStep(STEP_ACTION_DEACTIVATE_S1,BOGIE_DELAY); // // InsertNewStep(STEP_ACTION_ACTIVATE_PGE,0);
// InsertNewStep(STEP_ACTION_DEACTIVATE_PGI,0); ////V00 DETECTION
// InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0); //// if(bogie != 9)
//// {
// InsertNewStep(STEP_ACTION_ACTIVATE_S1,SENSOR_DELAY);
//// }
// InsertNewStep(STEP_ACTION_DEACTIVATE_S1,BOGIE_DELAY);
// // InsertNewStep(STEP_ACTION_DEACTIVATE_PGI,0);
// // InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0);
//FN DETECTION ////FN DETECTION
if(bogie != 7 /*&& bogie != 8 && bogie != 3*/) // if(bogie != 7 /*&& bogie != 8 && bogie != 3*/)
InsertNewStep(STEP_ACTION_ACTIVATE_FN,0); // InsertNewStep(STEP_ACTION_ACTIVATE_FN,0);
InsertNewStep(STEP_ACTION_ACTIVATE_S1,SENSOR_DELAY);
InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY);
InsertNewStep(STEP_ACTION_DEACTIVATE_S1,BOGIE_DELAY);
//PPI DETECTION
// if(bogie == 6 || bogie == 9)
// InsertNewStep(STEP_ACTION_ACTIVATE_PPI,0);
//FN DETECTION
if(bogie != 7 /*&& bogie != 8 && bogie != 3*/)
InsertNewStep(STEP_ACTION_DEACTIVATE_FN,0);
// InsertNewStep(STEP_ACTION_ACTIVATE_S1,SENSOR_DELAY);
// InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY); // InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY);
InsertNewStep(STEP_ACTION_DEACTIVATE_S2,BOGIE_DELAY); // InsertNewStep(STEP_ACTION_DEACTIVATE_S1,BOGIE_DELAY);
//PPI DETECTION ////PPI DETECTION
// if(bogie == 6 || bogie == 9) //// if(bogie == 6 || bogie == 9)
// InsertNewStep(STEP_ACTION_DEACTIVATE_PPI,0); //// InsertNewStep(STEP_ACTION_ACTIVATE_PPI,0);
// if(bogie != 2 && bogie != 11) ////FN DETECTION
// InsertNewStep(STEP_ACTION_ACTIVATE_PGI,0); // if(bogie != 7 /*&& bogie != 8 && bogie != 3*/)
// if(bogie != 2 && bogie != 11) // InsertNewStep(STEP_ACTION_DEACTIVATE_FN,0);
// InsertNewStep(STEP_ACTION_ACTIVATE_PGE,0);
InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY);
InsertNewStep(STEP_ACTION_DEACTIVATE_S2,BOGIE_DELAY);
// InsertNewStep(STEP_ACTION_DEACTIVATE_PGI,0);
// InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0);
} //// InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY);
// InsertNewStep(STEP_ACTION_DEACTIVATE_S2,BOGIE_DELAY);
////PPI DETECTION
//// if(bogie == 6 || bogie == 9)
//// InsertNewStep(STEP_ACTION_DEACTIVATE_PPI,0);
// // if(bogie != 2 && bogie != 11)
// // InsertNewStep(STEP_ACTION_ACTIVATE_PGI,0);
// // if(bogie != 2 && bogie != 11)
// // InsertNewStep(STEP_ACTION_ACTIVATE_PGE,0);
// InsertNewStep(STEP_ACTION_ACTIVATE_S2,SENSOR_DELAY);
// InsertNewStep(STEP_ACTION_DEACTIVATE_S2,BOGIE_DELAY);
// // InsertNewStep(STEP_ACTION_DEACTIVATE_PGI,0);
// // InsertNewStep(STEP_ACTION_DEACTIVATE_PGE,0);
// }
// InsertNewStep(STEP_ACTION_DESTROY_ZT1_ITI,800); // InsertNewStep(STEP_ACTION_DESTROY_ZT1_ITI,800);
InsertNewStep(STEP_ACTION_FREE_ZT1,800); // InsertNewStep(STEP_ACTION_FREE_ZT1,800);
InsertNewStep(STEP_ACTION_FREE_ZT1_APPROACH,800); // InsertNewStep(STEP_ACTION_FREE_ZT1_APPROACH,800);
return RET_OK; return RET_OK;
} }

View File

@ -270,7 +270,7 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
mActivateSAMBADrive = true; mActivateSAMBADrive = true;
CEngLog::instance()->AddLogString(QString().sprintf("Copie sur répertoire SAMBA activée"),1); CEngLog::instance()->AddLogString(QString().sprintf("Copie sur répertoire SAMBA activée"),1);
} }
else if(string.mid(pos) == "NON") else
{ {
mActivateSAMBADrive = false; mActivateSAMBADrive = false;
CEngLog::instance()->AddLogString(QString().sprintf("Copie sur répertoire SAMBA désactivée"),1); CEngLog::instance()->AddLogString(QString().sprintf("Copie sur répertoire SAMBA désactivée"),1);
@ -303,7 +303,7 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
mActivateSFTPClient = true; mActivateSFTPClient = true;
CEngLog::instance()->AddLogString(QString().sprintf("Copie sur serveur SFTP activée"),1); CEngLog::instance()->AddLogString(QString().sprintf("Copie sur serveur SFTP activée"),1);
} }
else if(string.mid(pos) == "NON") else
{ {
mActivateSFTPClient = false; mActivateSFTPClient = false;
CEngLog::instance()->AddLogString(QString().sprintf("Copie sur serveur SFTP désactivée"),1); CEngLog::instance()->AddLogString(QString().sprintf("Copie sur serveur SFTP désactivée"),1);