Adding in minimal js to resubmit jobs, still need to get functionality working

This commit is contained in:
Ian Roddis
2022-02-10 17:15:11 -04:00
parent 0fba67adce
commit 015c3a3e04

View File

@@ -290,8 +290,9 @@ namespace daggy::daggyd {
}
else {
// HTML
ss << "<html><header><title>Daggy "
"Runs</title></header><body><center><h2>Current Runs</h2><br>";
ss << "<html><head><title>Daggy "
"Runs</title><meta http-equiv=\"refresh\" "
"content=\"10\"></head><body><center><h2>Current Runs</h2><br>";
if (!dagRuns.empty()) {
std::sort(dagRuns.begin(), dagRuns.end(),
[](const auto &a, const auto &b) {
@@ -305,6 +306,15 @@ namespace daggy::daggyd {
size_t nTasks = 0;
for (const auto &[k, cnt] : ds.taskStateCounts)
nTasks += cnt;
auto stateURL = [&](RunState state) {
std::stringstream ss;
ss << R"(<a href="/v1/dagrun/)" << ds.runID
<< "/?state=" << state._to_string() << "\">"
<< ds.taskStateCounts[state] << "</a>";
return ss.str();
};
ss << "<tr>"
<< R"(<td><a href="/v1/dagrun/)" << ds.runID << R"(">)" << ds.runID
<< "</a></td>"
@@ -313,11 +323,11 @@ namespace daggy::daggyd {
<< "<td>" << nTasks << "</td>"
<< "<td>" << timePointToString(ds.startTime) << "</td>"
<< "<td>" << timePointToString(ds.lastUpdate) << "</td>"
<< "<td>" << ds.taskStateCounts[RunState::QUEUED] << "</td>"
<< "<td>" << ds.taskStateCounts[RunState::RUNNING] << "</td>"
<< "<td>" << ds.taskStateCounts[RunState::RETRY] << "</td>"
<< "<td>" << ds.taskStateCounts[RunState::ERRORED] << "</td>"
<< "<td>" << ds.taskStateCounts[RunState::COMPLETED] << "</td>"
<< "<td>" << stateURL(RunState::QUEUED) << "</td>"
<< "<td>" << stateURL(RunState::RUNNING) << "</td>"
<< "<td>" << stateURL(RunState::RETRY) << "</td>"
<< "<td>" << stateURL(RunState::ERRORED) << "</td>"
<< "<td>" << stateURL(RunState::COMPLETED) << "</td>"
<< "</tr>";
}
ss << "</table>";
@@ -339,6 +349,12 @@ namespace daggy::daggyd {
auto run = logger_.getDAGRun(runID);
bool isJSON = requestIsForJSON(request);
std::optional<RunState> filterState;
if (request.query().has("state")) {
auto val = request.query().get("state").value();
filterState = RunState::_from_string(val.c_str());
}
std::stringstream ss;
if (isJSON) {
bool first = true;
@@ -408,10 +424,18 @@ namespace daggy::daggyd {
}
ss << R"(<html>
<header>
<head>
<title>Details for RunID )"
<< runID << R"(</title>
</header>
<meta http-equiv="refresh" "content="10">
<script>
function resubmit(run_id, task_name) {
let url = "/v1/dagrun/" + run_id + "/task/" + task_name + "/state/QUEUED";
fetch(url, { method: 'PATCH' })
.then(res => console.log('Resubmitted task'))
}
</script>
</head>
<body>
<center>
<h2>Summary</h2>
@@ -435,6 +459,14 @@ namespace daggy::daggyd {
"Update</th><th> Logs</th></tr>";
for (const auto &[taskName, task] : run.dagSpec.tasks) {
auto taskState = run.taskRunStates.at(taskName);
if (filterState and taskState != *filterState)
continue;
std::string retryButton = "";
if (taskState == +RunState::ERRORED) {
retryButton = "<button onclick=\"resubmit(" + std::to_string(runID) +
", '" + taskName + "');\">Retry</button>";
}
ss << "<tr>"
<< "<td>" << taskName << "</td>"
<< "<td>" << run.taskRunStates.at(taskName) << "</td>"
@@ -442,7 +474,7 @@ namespace daggy::daggyd {
<< timePointToString(run.taskStateChanges.at(taskName).back().time)
<< "</td>"
<< "<td><a href=\"/v1/dagrun/" << runID << "/task/" << taskName
<< "\">Logs</a>"
<< "\">Logs</a>" << retryButton << "</td>"
<< "</tr>";
}
ss << "</table></center></body></html>";