effectprocess 추가
git-svn-id: svn://192.168.0.12/source@305 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
@@ -21,7 +21,6 @@ SOURCES += main.cpp\
|
||||
srunninglistwidget.cpp \
|
||||
stimer.cpp \
|
||||
sadddelwidget.cpp \
|
||||
srunprocess.cpp \
|
||||
sparentprocess.cpp \
|
||||
scompanyprocess.cpp \
|
||||
serrorprocess.cpp \
|
||||
@@ -36,7 +35,6 @@ HEADERS += widget.h \
|
||||
srunninglistwidget.h \
|
||||
stimer.h \
|
||||
sadddelwidget.h \
|
||||
srunprocess.h \
|
||||
sparentprocess.h \
|
||||
scompanyprocess.h \
|
||||
serrorprocess.h \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 3.3.0, 2016-10-21T19:00:52. -->
|
||||
<!-- Written by QtCreator 3.3.0, 2016-10-27T19:07:05. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
||||
@@ -71,6 +71,9 @@ void SEffectLogic::initConnect()
|
||||
this, &SEffectLogic::slotCompleteCompany);
|
||||
QObject::connect(m_pSRunningProcess, &SRunningProcess::signalCompanyOutDated,
|
||||
this, &SEffectLogic::slotCompanyOutdated);
|
||||
|
||||
m_pSRunningListWidget->enableBtnForceStop(false);
|
||||
m_pSRunningListWidget->enableBtnTimerStop(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -228,6 +231,9 @@ void SEffectLogic::slotTerminateNormal(const QVector<SEffectRow>& _error,
|
||||
const QMap<int, SReportSummary>& _report)
|
||||
{
|
||||
qDebug() << "slotTerminateNormal";
|
||||
m_pSLogWidget->writeLog("Number of Erros : " + QString::number(_error.size()));
|
||||
m_pSLogWidget->writeLog(" ");
|
||||
|
||||
for (auto iterPos = _report.cbegin(); iterPos != _report.cend(); ++iterPos)
|
||||
{
|
||||
QString str;
|
||||
@@ -244,17 +250,22 @@ void SEffectLogic::slotTerminateNormal(const QVector<SEffectRow>& _error,
|
||||
if ((_error.size() > 0) && (nRetry-- > 0))
|
||||
{
|
||||
m_pSLogWidget->writeLog("Error Retry : " + QString::number(nRetry + 1));
|
||||
m_pSLogWidget->writeLog("Start Error Process");
|
||||
m_pSRunningProcess->setList(_error);
|
||||
m_pSRunningProcess->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!m_pSTimer->isActive())
|
||||
{
|
||||
m_pSRunningListWidget->enableBtnForceStart(true);
|
||||
m_pSRunningListWidget->enableBtnForceStop(false);
|
||||
m_pSRunningListWidget->enableBtnTimerStart(true);
|
||||
m_pSRunningListWidget->enableBtnTimerStop(false);
|
||||
}
|
||||
m_pSAddDelWidget->enableBtnAdd(true);
|
||||
m_pSAddDelWidget->enableBtnDel(true);
|
||||
m_pSRunningListWidget->enableBtnForceStart(true);
|
||||
m_pSRunningListWidget->enableBtnForceStop(false);
|
||||
m_pSRunningListWidget->enableBtnTimerStart(true);
|
||||
m_pSRunningListWidget->enableBtnTimerStop(false);
|
||||
|
||||
nRetry = RETRY;
|
||||
m_pSLogWidget->writeLog("Complete");
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ void SLogWidget::writeLog(const QString& _strLog)
|
||||
m_plwLog->addItem(strOut.left(1024));
|
||||
QDate date = QDate::currentDate();
|
||||
|
||||
QFile file(date.toString(Qt::ISODate)+ "_" + QString::number(QCoreApplication::applicationPid())+ ".log");
|
||||
QFile file("effect_" + date.toString(Qt::ISODate)+ "_" + QString::number(QCoreApplication::applicationPid())+ ".log");
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
|
||||
return;
|
||||
|
||||
|
||||
@@ -8,8 +8,27 @@ extern QString ERROR_MESSAGE[];
|
||||
|
||||
namespace
|
||||
{
|
||||
#if defined(Q_OS_WIN32)
|
||||
const QString APPNAME = "effectprocess.exe";
|
||||
const QString PYTHON = "python";
|
||||
#else
|
||||
const QString APPNAME = "./effectprocess";
|
||||
const QString PYTHON = "python3";
|
||||
#endif
|
||||
|
||||
|
||||
const int TIMEOUT = 180; // 3 minutes
|
||||
const QString SPLIT_KEYWORD = "!@#";
|
||||
const QString PYTAPPNAME = "effectprocess.py";
|
||||
const QString NAVER_BLOG_1 = "blog.naver.com/";
|
||||
const QString NAVER_BLOG_2 = ".blog.me/";
|
||||
const QString NAVER_CAFE = "cafe.naver.com/";
|
||||
const QString NAVER_NEWS = "news.naver.com";
|
||||
|
||||
const QString DAUM_CAFE = "cafe.daum.net/";
|
||||
const QString INSTAGRAM = "instagram.com/";
|
||||
const QString KAKAOSTORY = "story.kakao.com/";
|
||||
const QString FACEBOOK = "www.facebook.com/";
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +39,8 @@ SParentProcess::SParentProcess():m_pProcess(new QProcess(this)), m_bRunning(fals
|
||||
this, SLOT(finishedProcess(int, QProcess::ExitStatus)));
|
||||
QObject::connect(this, &SParentProcess::signalTerminateError,
|
||||
this, &SParentProcess::slotTerminateError);
|
||||
QObject::connect(m_pProcess, SIGNAL(error(QProcess::ProcessError)),
|
||||
this, SLOT(finishedProcess(QProcess::ProcessError)));
|
||||
}
|
||||
|
||||
void SParentProcess::clear()
|
||||
@@ -71,20 +92,63 @@ void SParentProcess::setModeWait()
|
||||
|
||||
QStringList SParentProcess::getProcessArguments(const SEffectRow& _row) const
|
||||
{
|
||||
return QStringList();
|
||||
}
|
||||
QStringList slargv;
|
||||
|
||||
QStringList SParentProcess::getProcessArguments(SEffectRow&& _row) const
|
||||
{
|
||||
return QStringList();
|
||||
if (_row.url.contains(NAVER_BLOG_1, Qt::CaseInsensitive) ||
|
||||
_row.url.contains(NAVER_BLOG_2, Qt::CaseInsensitive) ||
|
||||
_row.url.contains(NAVER_CAFE, Qt::CaseInsensitive) ||
|
||||
_row.url.contains(NAVER_NEWS, Qt::CaseInsensitive) ||
|
||||
_row.url.contains(DAUM_CAFE, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv.append(APPNAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
slargv << PYTHON << PYTAPPNAME;
|
||||
}
|
||||
|
||||
if (_row.url.contains(NAVER_BLOG_1, Qt::CaseInsensitive) || _row.url.contains(NAVER_BLOG_2, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "naver" << "blog";
|
||||
}
|
||||
else if (_row.url.contains(NAVER_CAFE, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "naver" << "cafe";
|
||||
}
|
||||
else if (_row.url.contains(NAVER_NEWS, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "naver" << "news";
|
||||
}
|
||||
else if (_row.url.contains(DAUM_CAFE, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "daum" << "cafe";
|
||||
}
|
||||
else if (_row.url.contains(INSTAGRAM, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "instagram";
|
||||
}
|
||||
else if (_row.url.contains(KAKAOSTORY, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "kakaostory";
|
||||
}
|
||||
else if (_row.url.contains(FACEBOOK, Qt::CaseInsensitive))
|
||||
{
|
||||
slargv << "facebook";
|
||||
}
|
||||
|
||||
slargv << _row.eventcode << _row.url;
|
||||
return slargv;
|
||||
}
|
||||
|
||||
void SParentProcess::runProcess(QStringList _arguments)
|
||||
{
|
||||
//qDebug () << _arguments;
|
||||
if (_arguments.size() > 0)
|
||||
{
|
||||
QString arg = _arguments.at(0);
|
||||
_arguments.removeFirst();
|
||||
qDebug() << arg;
|
||||
qDebug() << _arguments;
|
||||
|
||||
m_pProcess->start(arg, _arguments);
|
||||
}
|
||||
@@ -110,6 +174,7 @@ void SParentProcess::setError(SError&& _error)
|
||||
void SParentProcess::stop()
|
||||
{
|
||||
m_bUserAbort = true;
|
||||
killProcess();
|
||||
}
|
||||
|
||||
void SParentProcess::update()
|
||||
@@ -165,8 +230,53 @@ void SParentProcess::update()
|
||||
}
|
||||
}
|
||||
|
||||
void SParentProcess::finishedProcess(QProcess::ProcessError _error)
|
||||
{
|
||||
if (m_bUserAbort)
|
||||
{
|
||||
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_HANGING);
|
||||
emit signalUserAbort();
|
||||
return;
|
||||
}
|
||||
|
||||
QProcess *pPro = (QProcess*)sender();
|
||||
QThread::msleep(100);
|
||||
QString str = pPro->readAllStandardOutput();
|
||||
|
||||
SError analyzedResult = analyzeStdOut(str.trimmed());
|
||||
switch (_error)
|
||||
{
|
||||
case QProcess::FailedToStart:
|
||||
{
|
||||
analyzedResult.error_code = E_ERROR_CODE::NO_PROGRAM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
QString strLog = makeLog(analyzedResult);
|
||||
|
||||
if (analyzedResult.state == E_CRAWL_STATE::OK)
|
||||
{
|
||||
if (!m_mapReportSummary.contains(analyzedResult.company_num))
|
||||
m_mapReportSummary.insert(analyzedResult.company_num, SReportSummary());
|
||||
m_mapReportSummary[analyzedResult.company_num].nOk++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!m_mapReportSummary.contains(analyzedResult.company_num))
|
||||
m_mapReportSummary.insert(analyzedResult.company_num, SReportSummary());
|
||||
m_mapReportSummary[analyzedResult.company_num].nError++;
|
||||
m_vecError.append(m_erCurrentRow);
|
||||
}
|
||||
|
||||
emit signalLog(strLog);
|
||||
emit signalTerminateEachEvent(analyzedResult.company_num, analyzedResult.state);
|
||||
setInnerMode(E_INNER_RUN_MODE::MODE_RUN_EVENTCODE);
|
||||
}
|
||||
|
||||
void SParentProcess::finishedProcess(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
{
|
||||
qDebug() << "finishedProcess";
|
||||
if (m_bUserAbort)
|
||||
{
|
||||
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_HANGING);
|
||||
@@ -177,7 +287,7 @@ void SParentProcess::finishedProcess(int exitCode, QProcess::ExitStatus exitStat
|
||||
QThread::msleep(100);
|
||||
QString str = pPro->readAllStandardOutput();
|
||||
|
||||
SError analyzedResult = analyzeStdOut(str);
|
||||
SError analyzedResult = analyzeStdOut(str.trimmed());
|
||||
QString strLog = makeLog(analyzedResult);
|
||||
|
||||
if (analyzedResult.state == E_CRAWL_STATE::OK)
|
||||
@@ -220,7 +330,6 @@ SError SParentProcess::analyzeStdOut(const QString& _str)
|
||||
return errorResult;
|
||||
}
|
||||
|
||||
|
||||
// unknown type log
|
||||
// This result is treated like unknown error.
|
||||
else if (_str.trimmed().at(0) != 'o' && _str.trimmed().at(0) != 'O' &&
|
||||
@@ -315,6 +424,13 @@ SError SParentProcess::analyzeStdOut(const QString& _str)
|
||||
}
|
||||
}
|
||||
|
||||
void SParentProcess::killProcess()
|
||||
{
|
||||
//if (m_pProcess->state() != QProcess::NotRunning)
|
||||
m_pProcess->kill();
|
||||
qDebug() << "kill processed";
|
||||
}
|
||||
|
||||
|
||||
QString SParentProcess::makeLog(const SError& _error)
|
||||
{
|
||||
@@ -363,6 +479,6 @@ void SParentProcess::setCurrentEffectRow(const SEffectRow& _row)
|
||||
|
||||
void SParentProcess::setCurrentEffectRow(SEffectRow&& _row)
|
||||
{
|
||||
m_erCurrentRow = _row;
|
||||
//m_erCurrentRow = _row;
|
||||
m_erCurrentRow = std::move(_row);
|
||||
}
|
||||
|
||||
@@ -44,15 +44,15 @@ public:
|
||||
bool isWaiting() const;
|
||||
void setModeWait();
|
||||
|
||||
|
||||
private:
|
||||
SError analyzeStdOut(const QString& _str);
|
||||
QString makeLog(const SError& _error);
|
||||
void killProcess();
|
||||
|
||||
|
||||
protected:
|
||||
QStringList getProcessArguments(const SEffectRow& _row) const;
|
||||
QStringList getProcessArguments(SEffectRow&& _row) const;
|
||||
//QStringList getProcessArguments(SEffectRow&& _row) const;
|
||||
|
||||
void setError(const SError& _error);
|
||||
void setError(SError&& _error);
|
||||
@@ -67,7 +67,7 @@ public slots:
|
||||
void stop();
|
||||
void update();
|
||||
void finishedProcess(int exitCode, QProcess::ExitStatus exitStatus);
|
||||
|
||||
void finishedProcess(QProcess::ProcessError _error);
|
||||
|
||||
signals:
|
||||
void signalUserAbort();
|
||||
|
||||
@@ -37,6 +37,7 @@ public:
|
||||
void start(QVector<T>&& _list);
|
||||
SError gerError();
|
||||
|
||||
|
||||
public slots:
|
||||
void stop();
|
||||
void start();
|
||||
@@ -44,7 +45,6 @@ public slots:
|
||||
QVector<SError> getErrorList();
|
||||
|
||||
|
||||
|
||||
private slots:
|
||||
void update();
|
||||
|
||||
|
||||
@@ -1,15 +1,48 @@
|
||||
#include "stimer.h"
|
||||
#include <QTimer>
|
||||
#include <QTime>
|
||||
|
||||
#include <QSettings>
|
||||
#include <QDebug>
|
||||
namespace
|
||||
{
|
||||
const int TIME = 300000; // 5 minute
|
||||
//const int TIME = 300000; // 5 minute
|
||||
const int TIME = 30000;
|
||||
}
|
||||
|
||||
STimer::STimer(): m_pTimer(new QTimer), m_nPreviousHour(-1)
|
||||
{
|
||||
m_pTimer->setInterval(TIME);
|
||||
connect(&(*m_pTimer), &QTimer::timeout, this, &STimer::checkTimeout);
|
||||
init();
|
||||
}
|
||||
|
||||
void STimer::init()
|
||||
{
|
||||
QSettings settings(QString("effect.ini"), QSettings::IniFormat);
|
||||
settings.setIniCodec("UTF-8");
|
||||
settings.beginGroup("timer");
|
||||
|
||||
QString strTimes = settings.value("time", "1").toString();
|
||||
|
||||
if (strTimes.trimmed().isEmpty())
|
||||
strTimes = "1";
|
||||
|
||||
qDebug() << strTimes;
|
||||
settings.endGroup();
|
||||
|
||||
QStringList slTimes = strTimes.split(QChar('.'), QString::SkipEmptyParts);
|
||||
|
||||
qDebug() << "hahaha";
|
||||
qDebug() << slTimes.size();
|
||||
bool ok;
|
||||
int nTime;
|
||||
foreach (auto& strTime, slTimes)
|
||||
{
|
||||
qDebug() << strTime;
|
||||
nTime = strTime.toInt(&ok);
|
||||
if (ok)
|
||||
set(nTime);
|
||||
}
|
||||
}
|
||||
|
||||
STimer::~STimer()
|
||||
@@ -86,7 +119,15 @@ void STimer::checkTimeout()
|
||||
QTime now = QTime::currentTime();
|
||||
bool bChangedHour = (m_nPreviousHour == now.hour()) ? false : true;
|
||||
m_nPreviousHour = now.hour();
|
||||
qDebug() << "timer";
|
||||
qDebug() << "bChangedHour : " << bChangedHour;
|
||||
for (auto iter = m_setTime.begin(); iter != m_setTime.end(); ++iter)
|
||||
qDebug() << *iter;
|
||||
|
||||
if (bChangedHour && m_setTime.contains(now.hour()))
|
||||
{
|
||||
qDebug() << "TimeOut condition satisfied";
|
||||
emit timeout();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,10 +31,14 @@ public:
|
||||
void unset(int time);
|
||||
void unset(QVector<int> times);
|
||||
int timerId() const;
|
||||
|
||||
~STimer();
|
||||
|
||||
|
||||
private:
|
||||
void init();
|
||||
|
||||
|
||||
|
||||
signals:
|
||||
void timeout();
|
||||
|
||||
|
||||
@@ -57,3 +57,21 @@ QString ERROR_MESSAGE[static_cast<int>(E_ERROR_CODE::MAX)] =
|
||||
"NO_PROGRAM",
|
||||
"UNKNOWN_ERROR",
|
||||
};
|
||||
|
||||
QString ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::MAX)] =
|
||||
{
|
||||
"e000",
|
||||
"e001",
|
||||
"e002",
|
||||
"e003",
|
||||
"e004",
|
||||
"e005",
|
||||
"e006",
|
||||
"e007",
|
||||
"e008",
|
||||
"e009",
|
||||
"e010",
|
||||
"e011",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
#include <QRegExp>
|
||||
|
||||
extern QString ERROR_MESSAGE[];
|
||||
extern QString ERROR_MESSAGE_CODE[];
|
||||
|
||||
void databaseSetting(const QString &str)
|
||||
{
|
||||
QSettings settings("effect.ini");
|
||||
QSettings settings(QString("effect.ini"), QSettings::IniFormat);
|
||||
settings.setIniCodec("UTF-8");
|
||||
settings.beginGroup("database");
|
||||
|
||||
QString strHostName = settings.value("host", "182.162.171.147").toString();
|
||||
@@ -58,3 +60,12 @@ E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str)
|
||||
return E_ERROR_CODE::UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code)
|
||||
{
|
||||
if (0 <= static_cast<int>(_code) &&
|
||||
static_cast<int>(_code) < static_cast<int>(E_ERROR_CODE::MAX))
|
||||
return ERROR_MESSAGE_CODE[static_cast<int>(_code)];
|
||||
else
|
||||
return ERROR_MESSAGE_CODE[static_cast<int>(E_ERROR_CODE::UNKNOWN_ERROR)];
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@ void databaseSetting(const QString& str);
|
||||
void messageBoxError(const QString& title, const QString &body);
|
||||
QString errorCodeToString(E_ERROR_CODE _error_code);
|
||||
E_ERROR_CODE strErrorCodeToEnumErrorCode(const QString& _str);
|
||||
|
||||
QString EnumErrorCodetostrErrorCode(E_ERROR_CODE _code);
|
||||
#endif // SUTILFUNCTION
|
||||
|
||||
|
||||
Reference in New Issue
Block a user