effectprocess 추가

git-svn-id: svn://192.168.0.12/source@305 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
admin
2016-10-27 10:11:49 +00:00
parent 0b075003a4
commit 6d62c97b54
31 changed files with 2417 additions and 27 deletions

View File

@@ -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 \

View File

@@ -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>

View File

@@ -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");
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -31,10 +31,14 @@ public:
void unset(int time);
void unset(QVector<int> times);
int timerId() const;
~STimer();
private:
void init();
signals:
void timeout();

View File

@@ -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",
};

View File

@@ -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)];
}

View File

@@ -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