|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfarmcontroller.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "ttcpip.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "texception.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfarmproxy.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfilepath_io.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9eb50d |
#include <strstream></strstream>
|
|
Shinya Kitaoka |
9eb50d |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class Controller final : public TFarmController, public TFarmProxy {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
Controller(const QString &hostName, const QString &addr, int port)
|
|
Shinya Kitaoka |
120a6e |
: TFarmProxy(hostName, addr, port) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// TFarmController interface implementation
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
QString addTask(const TFarmTask &task, bool suspended) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void removeTask(const QString &id) override;
|
|
Shinya Kitaoka |
473e70 |
void suspendTask(const QString &id) override;
|
|
Shinya Kitaoka |
473e70 |
void activateTask(const QString &id) override;
|
|
Shinya Kitaoka |
473e70 |
void restartTask(const QString &id) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void getTasks(vector<qstring> &tasks) override;</qstring>
|
|
Shinya Kitaoka |
473e70 |
void getTasks(const QString &parentId, vector<qstring> &tasks) override;</qstring>
|
|
Shinya Kitaoka |
473e70 |
void getTasks(const QString &parentId, vector<taskshortinfo> &tasks) override;</taskshortinfo>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void queryTaskInfo(const QString &id, TFarmTask &task) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void queryTaskShortInfo(const QString &id, QString &parentId, QString &name,
|
|
Shinya Kitaoka |
473e70 |
TaskState &status) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
38fd86 |
void attachServer(const QString &name, const QString &addr,
|
|
Shinya Kitaoka |
38fd86 |
int port) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
38fd86 |
void detachServer(const QString &name, const QString &addr,
|
|
Shinya Kitaoka |
38fd86 |
int port) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void taskSubmissionError(const QString &taskId, int errCode) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void taskProgress(const QString &taskId, int step, int stepCount,
|
|
Shinya Kitaoka |
473e70 |
int frameNumber, FrameState state) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void taskCompleted(const QString &taskId, int exitCode) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// fills the servers vector with the names of the servers
|
|
Shinya Kitaoka |
473e70 |
void getServers(vector<serveridentity> &servers) override;</serveridentity>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// returns the state of the server whose id has been specified
|
|
Shinya Kitaoka |
473e70 |
ServerState queryServerState2(const QString &id) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// fills info with the infoes about the server whose id has been specified
|
|
Shinya Kitaoka |
473e70 |
void queryServerInfo(const QString &id, ServerInfo &info) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// activates the server whose id has been specified
|
|
Shinya Kitaoka |
473e70 |
void activateServer(const QString &id) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// deactivates the server whose id has been specified
|
|
Shinya Kitaoka |
120a6e |
// once deactivated, a server is not available for task rendering
|
|
Shinya Kitaoka |
38fd86 |
void deactivateServer(const QString &id,
|
|
Shinya Kitaoka |
38fd86 |
bool completeRunningTasks = true) override;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString Controller::addTask(const TFarmTask &task, bool suspended) {
|
|
Shinya Kitaoka |
120a6e |
int i, count = task.getTaskCount();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString data("addTask@TFarmTask_2");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += task.m_name;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += task.getCommandLine(true);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += task.m_user;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += task.m_hostName;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(suspended);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(task.m_stepCount);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(task.m_priority);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(task.m_platform);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
int depCount = task.m_dependencies->getTaskCount();
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(depCount);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
i = 0;
|
|
Shinya Kitaoka |
120a6e |
for (; i < depCount; ++i) {
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += task.m_dependencies->getTaskId(i);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < count; ++i) {
|
|
Shinya Kitaoka |
120a6e |
TFarmTask &tt = const_cast<tfarmtask &="">(task);</tfarmtask>
|
|
Shinya Kitaoka |
120a6e |
TFarmTask *subtask = tt.getTask(i);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += subtask->m_name;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += subtask->getCommandLine(true);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += subtask->m_user;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += subtask->m_hostName;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(subtask->m_stepCount);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(subtask->m_priority);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Shinya Kitaoka |
120a6e |
// MessageBox(NULL, data.c_str(), "ciao", 0);
|
|
Shinya Kitaoka |
120a6e |
return reply;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::removeTask(const QString &id) {
|
|
Shinya Kitaoka |
120a6e |
QString data("removeTask");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::suspendTask(const QString &id) {
|
|
Shinya Kitaoka |
120a6e |
QString data("suspendTask");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::activateTask(const QString &id) {
|
|
Shinya Kitaoka |
120a6e |
QString data("activateTask");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::restartTask(const QString &id) {
|
|
Shinya Kitaoka |
120a6e |
QString data("restartTask");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::getTasks(vector<qstring> &tasks) {</qstring>
|
|
Shinya Kitaoka |
120a6e |
QString data("getTasks@vector");
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
tasks.clear();
|
|
Shinya Kitaoka |
120a6e |
std::vector<qstring>::iterator it = argv.begin();</qstring>
|
|
Shinya Kitaoka |
120a6e |
for (; it != argv.end(); ++it) tasks.push_back(*it);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::getTasks(const QString &parentId, vector<qstring> &tasks) {</qstring>
|
|
Shinya Kitaoka |
120a6e |
QString data("getTasks@string@vector");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += parentId;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni deiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
tasks.clear();
|
|
Shinya Kitaoka |
120a6e |
std::vector<qstring>::iterator it = argv.begin();</qstring>
|
|
Shinya Kitaoka |
120a6e |
for (; it != argv.end(); ++it) tasks.push_back(*it);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::getTasks(const QString &parentId,
|
|
Shinya Kitaoka |
120a6e |
vector<taskshortinfo> &tasks) {</taskshortinfo>
|
|
Shinya Kitaoka |
120a6e |
QString data("getTasks@string@vector$TaskShortInfo");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += parentId;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
tasks.clear();
|
|
Shinya Kitaoka |
120a6e |
std::vector<qstring>::iterator it = argv.begin();</qstring>
|
|
Shinya Kitaoka |
120a6e |
for (; it != argv.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
QString id = *it++;
|
|
Shinya Kitaoka |
120a6e |
QString name = *it++;
|
|
Shinya Kitaoka |
120a6e |
TaskState status;
|
|
Shinya Kitaoka |
120a6e |
status = (TaskState)(*it).toInt();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
tasks.push_back(TaskShortInfo(id, name, status));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::queryTaskInfo(const QString &id, TFarmTask &task) {
|
|
Shinya Kitaoka |
120a6e |
QString data("queryTaskInfo_2");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
int count = extractArgs(reply, argv);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (reply == "") return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
assert(argv.size() > 15);
|
|
Shinya Kitaoka |
120a6e |
int incr = 0;
|
|
Shinya Kitaoka |
120a6e |
task.m_name = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
task.parseCommandLine(argv[incr++]);
|
|
Shinya Kitaoka |
120a6e |
task.m_priority = argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
task.m_user = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
task.m_hostName = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
task.m_id = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
task.m_parentId = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
task.m_status = (TaskState)argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
task.m_server = argv[incr++];
|
|
Shinya Kitaoka |
120a6e |
task.m_submissionDate = QDateTime::fromString(argv[incr++]);
|
|
Shinya Kitaoka |
120a6e |
task.m_startDate = QDateTime::fromString(argv[incr++]);
|
|
Shinya Kitaoka |
120a6e |
task.m_completionDate = QDateTime::fromString(argv[incr++]);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
task.m_successfullSteps = argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
task.m_failedSteps = argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
task.m_stepCount = argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (incr < count) {
|
|
Shinya Kitaoka |
120a6e |
task.m_platform = (TFarmPlatform)argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
int depCount = 0;
|
|
Shinya Kitaoka |
120a6e |
depCount = argv[incr++].toInt();
|
|
Shinya Kitaoka |
120a6e |
if (depCount > 0) {
|
|
Shinya Kitaoka |
120a6e |
task.m_dependencies = new TFarmTask::Dependencies;
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < depCount; ++i) task.m_dependencies->add(argv[incr++]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::queryTaskShortInfo(const QString &id, QString &parentId,
|
|
Shinya Kitaoka |
120a6e |
QString &name, TaskState &status) {
|
|
Shinya Kitaoka |
120a6e |
QString data("queryTaskShortInfo");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
assert(argv.size() == 3);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
parentId = argv[0];
|
|
Shinya Kitaoka |
120a6e |
name = argv[1];
|
|
Shinya Kitaoka |
120a6e |
status = (TaskState)argv[2].toInt();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::attachServer(const QString &name, const QString &addr,
|
|
Shinya Kitaoka |
120a6e |
int port) {
|
|
Shinya Kitaoka |
120a6e |
QString data("attachServer");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += name;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += addr;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(port);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::detachServer(const QString &name, const QString &addr,
|
|
Shinya Kitaoka |
120a6e |
int port) {
|
|
Shinya Kitaoka |
120a6e |
QString data("detachServer");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += name;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += addr;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(port);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::taskSubmissionError(const QString &taskId, int errCode) {
|
|
Shinya Kitaoka |
120a6e |
QString data("taskSubmissionError");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += taskId;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(errCode);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::taskProgress(const QString &taskId, int step, int stepCount,
|
|
Shinya Kitaoka |
120a6e |
int frameNumber, FrameState state) {
|
|
Shinya Kitaoka |
120a6e |
QString data("taskProgress");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += taskId;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(step);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(stepCount);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(frameNumber);
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(state);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::taskCompleted(const QString &taskId, int exitCode) {
|
|
Shinya Kitaoka |
120a6e |
QString data("taskCompleted");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += taskId;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(exitCode);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::getServers(vector<serveridentity> &servers) {</serveridentity>
|
|
Shinya Kitaoka |
120a6e |
QString data("getServers");
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
servers.clear();
|
|
Shinya Kitaoka |
120a6e |
std::vector<qstring>::iterator it = argv.begin();</qstring>
|
|
Shinya Kitaoka |
120a6e |
for (; it != argv.end(); it += 2)
|
|
Shinya Kitaoka |
120a6e |
servers.push_back(ServerIdentity(*it, *(it + 1)));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ServerState Controller::queryServerState2(const QString &name) {
|
|
Shinya Kitaoka |
120a6e |
QString data("queryServerState2");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += name;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ServerState serverState = (ServerState)reply.toInt();
|
|
Shinya Kitaoka |
120a6e |
return serverState;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::queryServerInfo(const QString &id, ServerInfo &info) {
|
|
Shinya Kitaoka |
120a6e |
QString data("queryServerInfo");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Shinya Kitaoka |
120a6e |
if (reply != "") {
|
|
Shinya Kitaoka |
120a6e |
// la stringa restituita contiene le informazioni desiderate separate da ","
|
|
Shinya Kitaoka |
120a6e |
vector<qstring> argv;</qstring>
|
|
Shinya Kitaoka |
120a6e |
extractArgs(reply, argv);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
info.m_name = argv[0];
|
|
Shinya Kitaoka |
120a6e |
info.m_ipAddress = argv[1];
|
|
Shinya Kitaoka |
120a6e |
info.m_portNumber = argv[2];
|
|
Shinya Kitaoka |
120a6e |
info.m_state = (ServerState)argv[3].toInt();
|
|
Shinya Kitaoka |
120a6e |
info.m_platform = argv[4];
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int cpuCount, totPhysMem, totVirtMem, availPhysMem, availVirtMem;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
cpuCount = argv[5].toInt();
|
|
Shinya Kitaoka |
120a6e |
totPhysMem = argv[6].toInt();
|
|
Shinya Kitaoka |
120a6e |
totVirtMem = argv[7].toInt();
|
|
Shinya Kitaoka |
120a6e |
availPhysMem = argv[8].toInt();
|
|
Shinya Kitaoka |
120a6e |
availVirtMem = argv[9].toInt();
|
|
Shinya Kitaoka |
120a6e |
info.m_currentTaskId = argv[10];
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
info.m_cpuCount = cpuCount;
|
|
Shinya Kitaoka |
120a6e |
info.m_totPhysMem = totPhysMem;
|
|
Shinya Kitaoka |
120a6e |
info.m_totVirtMem = totVirtMem;
|
|
Shinya Kitaoka |
120a6e |
info.m_availPhysMem = availPhysMem;
|
|
Shinya Kitaoka |
120a6e |
info.m_availVirtMem = availVirtMem;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::activateServer(const QString &id) {
|
|
Shinya Kitaoka |
120a6e |
QString data("activateServer");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void Controller::deactivateServer(const QString &id,
|
|
Shinya Kitaoka |
120a6e |
bool completeRunningTasks) {
|
|
Shinya Kitaoka |
120a6e |
QString data("deactivateServer");
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += id;
|
|
Shinya Kitaoka |
120a6e |
data += ",";
|
|
Shinya Kitaoka |
120a6e |
data += QString::number(completeRunningTasks);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString reply = sendToStub(data);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
} // anonymous namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFarmControllerFactory::TFarmControllerFactory() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int TFarmControllerFactory::create(const ControllerData &data,
|
|
Shinya Kitaoka |
120a6e |
TFarmController **controller)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
*controller = new Controller(data.m_hostName, data.m_ipAddress, data.m_port);
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TFarmControllerFactory::create(const QString &hostname, int port,
|
|
Shinya Kitaoka |
120a6e |
TFarmController **controller) {
|
|
Shinya Kitaoka |
120a6e |
*controller = new Controller(hostname, "", port);
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void loadControllerData(const TFilePath &fp, ControllerData &data) {
|
|
Shinya Kitaoka |
120a6e |
Tifstream is(fp);
|
|
Shinya Kitaoka |
120a6e |
if (!is || !is.good()) {
|
|
Shinya Kitaoka |
120a6e |
throw TException(L"Unable to get Farm Controller Data (looking for '" +
|
|
Shinya Kitaoka |
120a6e |
fp.getWideString() + L"')");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (!is.eof()) {
|
|
Shinya Kitaoka |
120a6e |
char line[1024];
|
|
Shinya Kitaoka |
120a6e |
is.getline(line, 1024);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (line[0] != '#' && QString(line) != "") {
|
|
Shinya Kitaoka |
120a6e |
std::istrstream iss(line);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
char hostName[512];
|
|
Shinya Kitaoka |
120a6e |
char ipAddr[80];
|
|
Shinya Kitaoka |
120a6e |
int port;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
iss >> hostName >> ipAddr >> port;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
data.m_hostName = hostName;
|
|
Shinya Kitaoka |
120a6e |
data.m_ipAddress = ipAddr;
|
|
Shinya Kitaoka |
120a6e |
data.m_port = port;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|