11 : is_running_(false), start_time_(0), reattempts_(0)
15 const std::string &cmd,
17 name_(name), cmd_(cmd), input_(*(evm->io_service())),
18 setup_done_(false), pid_(0), cmd_type_(cmd_type), pipe_stdout_(false) {
24 std::string data(
rx_buff_, read_bytes);
28 LOG(DEBUG,
"Command output: " + data);
32 boost::system::error_code close_ec;
38 LOG(DEBUG,
"Command code: " + ec.message());
45 this, boost::asio::placeholders::error,
46 boost::asio::placeholders::bytes_transferred));
72 std::vector<std::string> argv;
76 boost::split(argv,
cmd_, boost::is_any_of(
" "), boost::token_compress_on);
77 std::vector<const char *> c_argv(argv.size() + 1);
78 for (std::size_t i = 0; i != argv.size(); ++i) {
79 c_argv[i] = argv[i].c_str();
91 dup2(err[1], STDOUT_FILENO);
93 dup2(err[1], STDERR_FILENO);
104 execvp(c_argv[0], (
char **) c_argv.data());
114 int fd = ::dup(err[0]);
122 boost::system::error_code ec;
137 this, boost::asio::placeholders::error,
138 boost::asio::placeholders::bytes_transferred));
146 "Instance Manager Task Timeout",
176 LOG(ERROR,
"NetNS timeout error: " << error);
static const size_t kBufLen
static void CloseTaskFds(void)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
void TimerErrorHandler(const std::string &name, std::string error)
OnDataCallback on_data_cb_
boost::asio::posix::stream_descriptor input_
void StartTimer(int time)
OnTimeoutCallback on_timeout_cb_
std::queue< InstanceTask * > task_queue_
bool Start(int time, Handler handler, ErrorHandler error_handler=NULL)
#define LOG(_Level, _Msg)
void ReadData(const boost::system::error_code &ec, size_t read_bytes)
#define INSTANCE_MANAGER_TASK_NAME
OnExitCallback on_exit_cb_
InstanceTaskExecvp(const std::string &name, const std::string &cmd, int cmd_type, EventManager *evm)
static bool DeleteTimer(Timer *Timer)
InstanceTaskQueue(EventManager *evm)