Adding in minimal js to resubmit jobs, still need to get functionality working
This commit is contained in:
@@ -290,8 +290,9 @@ namespace daggy::daggyd {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// HTML
|
// HTML
|
||||||
ss << "<html><header><title>Daggy "
|
ss << "<html><head><title>Daggy "
|
||||||
"Runs</title></header><body><center><h2>Current Runs</h2><br>";
|
"Runs</title><meta http-equiv=\"refresh\" "
|
||||||
|
"content=\"10\"></head><body><center><h2>Current Runs</h2><br>";
|
||||||
if (!dagRuns.empty()) {
|
if (!dagRuns.empty()) {
|
||||||
std::sort(dagRuns.begin(), dagRuns.end(),
|
std::sort(dagRuns.begin(), dagRuns.end(),
|
||||||
[](const auto &a, const auto &b) {
|
[](const auto &a, const auto &b) {
|
||||||
@@ -305,6 +306,15 @@ namespace daggy::daggyd {
|
|||||||
size_t nTasks = 0;
|
size_t nTasks = 0;
|
||||||
for (const auto &[k, cnt] : ds.taskStateCounts)
|
for (const auto &[k, cnt] : ds.taskStateCounts)
|
||||||
nTasks += cnt;
|
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>"
|
ss << "<tr>"
|
||||||
<< R"(<td><a href="/v1/dagrun/)" << ds.runID << R"(">)" << ds.runID
|
<< R"(<td><a href="/v1/dagrun/)" << ds.runID << R"(">)" << ds.runID
|
||||||
<< "</a></td>"
|
<< "</a></td>"
|
||||||
@@ -313,11 +323,11 @@ namespace daggy::daggyd {
|
|||||||
<< "<td>" << nTasks << "</td>"
|
<< "<td>" << nTasks << "</td>"
|
||||||
<< "<td>" << timePointToString(ds.startTime) << "</td>"
|
<< "<td>" << timePointToString(ds.startTime) << "</td>"
|
||||||
<< "<td>" << timePointToString(ds.lastUpdate) << "</td>"
|
<< "<td>" << timePointToString(ds.lastUpdate) << "</td>"
|
||||||
<< "<td>" << ds.taskStateCounts[RunState::QUEUED] << "</td>"
|
<< "<td>" << stateURL(RunState::QUEUED) << "</td>"
|
||||||
<< "<td>" << ds.taskStateCounts[RunState::RUNNING] << "</td>"
|
<< "<td>" << stateURL(RunState::RUNNING) << "</td>"
|
||||||
<< "<td>" << ds.taskStateCounts[RunState::RETRY] << "</td>"
|
<< "<td>" << stateURL(RunState::RETRY) << "</td>"
|
||||||
<< "<td>" << ds.taskStateCounts[RunState::ERRORED] << "</td>"
|
<< "<td>" << stateURL(RunState::ERRORED) << "</td>"
|
||||||
<< "<td>" << ds.taskStateCounts[RunState::COMPLETED] << "</td>"
|
<< "<td>" << stateURL(RunState::COMPLETED) << "</td>"
|
||||||
<< "</tr>";
|
<< "</tr>";
|
||||||
}
|
}
|
||||||
ss << "</table>";
|
ss << "</table>";
|
||||||
@@ -339,6 +349,12 @@ namespace daggy::daggyd {
|
|||||||
auto run = logger_.getDAGRun(runID);
|
auto run = logger_.getDAGRun(runID);
|
||||||
bool isJSON = requestIsForJSON(request);
|
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;
|
std::stringstream ss;
|
||||||
if (isJSON) {
|
if (isJSON) {
|
||||||
bool first = true;
|
bool first = true;
|
||||||
@@ -408,10 +424,18 @@ namespace daggy::daggyd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ss << R"(<html>
|
ss << R"(<html>
|
||||||
<header>
|
<head>
|
||||||
<title>Details for RunID )"
|
<title>Details for RunID )"
|
||||||
<< runID << R"(</title>
|
<< 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>
|
<body>
|
||||||
<center>
|
<center>
|
||||||
<h2>Summary</h2>
|
<h2>Summary</h2>
|
||||||
@@ -435,6 +459,14 @@ namespace daggy::daggyd {
|
|||||||
"Update</th><th> Logs</th></tr>";
|
"Update</th><th> Logs</th></tr>";
|
||||||
|
|
||||||
for (const auto &[taskName, task] : run.dagSpec.tasks) {
|
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>"
|
ss << "<tr>"
|
||||||
<< "<td>" << taskName << "</td>"
|
<< "<td>" << taskName << "</td>"
|
||||||
<< "<td>" << run.taskRunStates.at(taskName) << "</td>"
|
<< "<td>" << run.taskRunStates.at(taskName) << "</td>"
|
||||||
@@ -442,7 +474,7 @@ namespace daggy::daggyd {
|
|||||||
<< timePointToString(run.taskStateChanges.at(taskName).back().time)
|
<< timePointToString(run.taskStateChanges.at(taskName).back().time)
|
||||||
<< "</td>"
|
<< "</td>"
|
||||||
<< "<td><a href=\"/v1/dagrun/" << runID << "/task/" << taskName
|
<< "<td><a href=\"/v1/dagrun/" << runID << "/task/" << taskName
|
||||||
<< "\">Logs</a>"
|
<< "\">Logs</a>" << retryButton << "</td>"
|
||||||
<< "</tr>";
|
<< "</tr>";
|
||||||
}
|
}
|
||||||
ss << "</table></center></body></html>";
|
ss << "</table></center></body></html>";
|
||||||
|
|||||||
Reference in New Issue
Block a user