in bistro/server/HTTPMonitor.cpp [103:178]
dynamic HTTPMonitor::handleSingle(const Config& c, const dynamic& d) {
const auto& handler = d["handler"].asString();
if (handler == "errors") {
auto errors = monitor_->copyErrors();
dynamic dObj = dynamic::object;
for (const auto& key_and_error : errors) {
dObj[key_and_error.first] = key_and_error.second;
}
return dObj;
}
if (handler == "refresh_time") {
return dynamic(monitor_->getLastUpdateTime());
}
if (handler == "jobs") {
return handleJobs(c, getRequestedJobs(c, d));
}
if (handler == "sorted_node_names") {
return handleSortedNodeNames(c);
}
// TODO: deprecate this in favor of running_tasks
if (handler == "job_node_runtime") {
return handleTaskRuntime(d);
}
if (handler == "running_tasks") {
return handleRunningTasks(d);
}
if (handler == "histogram") {
return handleHistograms(
c,
getRequestedJobs(c, d),
d.getDefault("num_samples", 0).asInt()
);
}
if (handler == "task_logs") {
return handleTaskLogs(c, d);
}
if (handler == "delete_job") {
configLoader_->deleteJob(d["job_id"].asString());
return "deleted";
}
if (handler == "save_job") {
configLoader_->saveJob(d["job_id"].asString(), d["job"]);
return "saved";
}
if (handler == "forgive_jobs") {
if (auto* p = d.get_ptr("jobs")) {
for (const auto& j : *p) {
taskStatuses_->forgiveJob(j.asString());
}
}
return "forgiven";
}
if (handler == "nodes") {
return handleNodes(c, d);
}
if (handler == "kill_task") {
// Ignore d["status_filter"], since that option is now deprecated.
auto job = d["job_id"].asString();
auto node = d["node_id"].asString();
// Look up the job
auto jit = c.jobs.find(job);
if (jit == c.jobs.end()) {
throw BistroException("Unknown job ", job);
}
// Look up the running task
const Job::ID job_id(as_const(Job::JobNameTable)->lookup(job));
const Node::ID node_id(as_const(Node::NodeNameTable)->lookup(node));
auto maybe_rt = taskStatuses_->copyRunningTask(job_id, node_id);
if (!maybe_rt.has_value()) {
throw BistroException("Unknown running task ", job, ", ", node);
}
taskRunner_->killTask(*maybe_rt, jit->second->killRequest());
return "signaled";
}
throw BistroException("Unknown handler: ", handler);
}