bool operator == (const Task& left, const Task& right) { // Order of task statuses is important. if (left.statuses().size() != right.statuses().size()) { return false; } for (int i = 0; i < left.statuses().size(); i++) { if (left.statuses().Get(i) != right.statuses().Get(i)) { return false; } } return left.name() == right.name() && left.task_id() == right.task_id() && left.framework_id() == right.framework_id() && left.executor_id() == right.executor_id() && left.slave_id() == right.slave_id() && left.state() == right.state() && Resources(left.resources()) == Resources(right.resources()) && left.status_update_state() == right.status_update_state() && left.status_update_uuid() == right.status_update_uuid() && left.labels() == right.labels() && left.discovery() == right.discovery(); }
// TODO(bmahler): Expose the executor name / source. JSON::Object model(const Task& task) { JSON::Object object; object.values["id"] = task.task_id().value(); object.values["name"] = task.name(); object.values["framework_id"] = task.framework_id().value(); if (task.has_executor_id()) { object.values["executor_id"] = task.executor_id().value(); } else { object.values["executor_id"] = ""; } object.values["slave_id"] = task.slave_id().value(); object.values["state"] = TaskState_Name(task.state()); object.values["resources"] = model(task.resources()); JSON::Array array; foreach (const TaskStatus& status, task.statuses()) { array.values.push_back(model(status)); } object.values["statuses"] = array; JSON::Array labels; foreach (const Label& label, task.labels()) { labels.values.push_back(JSON::Protobuf(label)); } object.values["labels"] = labels; return object; }
Option<ContainerStatus> getTaskContainerStatus(const Task& task) { // The statuses list only keeps the most recent TaskStatus for // each state, and appends later states at the end. Let's find // the most recent TaskStatus with a valid container_status. foreach (const TaskStatus& status, adaptor::reverse(task.statuses())) { if (status.has_container_status()) { return status.container_status(); } } return None(); }
Option<bool> getTaskHealth(const Task& task) { Option<bool> healthy = None(); if (task.statuses_size() > 0) { // The statuses list only keeps the most recent TaskStatus for // each state, and appends later states at the end. Thus the last // status is either a terminal state (where health is // irrelevant), or the latest RUNNING status. TaskStatus lastStatus = task.statuses(task.statuses_size() - 1); if (lastStatus.has_healthy()) { healthy = lastStatus.healthy(); } } return healthy; }
Option<CheckStatusInfo> getTaskCheckStatus(const Task& task) { Option<CheckStatusInfo> checkStatus = None(); if (task.statuses_size() > 0) { // The statuses list only keeps the most recent `TaskStatus` for // each state, and appends later statuses at the end. Thus the last // status is either a terminal state (where check is irrelevant), // or the latest TASK_RUNNING status. const TaskStatus& lastStatus = task.statuses(task.statuses_size() - 1); if (lastStatus.has_check_status()) { checkStatus = lastStatus.check_status(); } } return checkStatus; }