diff --git a/daggyd/libdaggyd/src/Server.cpp b/daggyd/libdaggyd/src/Server.cpp index 86bf4eb..e326135 100644 --- a/daggyd/libdaggyd/src/Server.cpp +++ b/daggyd/libdaggyd/src/Server.cpp @@ -290,8 +290,9 @@ namespace daggy::daggyd { } else { // HTML - ss << "
Daggy " - "Runs

Current Runs


"; + ss << "Daggy " + "Runs

Current Runs


"; 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"(" + << ds.taskStateCounts[state] << ""; + return ss.str(); + }; + ss << "" << R"()" << ds.runID << "" @@ -313,11 +323,11 @@ namespace daggy::daggyd { << "" << nTasks << "" << "" << timePointToString(ds.startTime) << "" << "" << timePointToString(ds.lastUpdate) << "" - << "" << ds.taskStateCounts[RunState::QUEUED] << "" - << "" << ds.taskStateCounts[RunState::RUNNING] << "" - << "" << ds.taskStateCounts[RunState::RETRY] << "" - << "" << ds.taskStateCounts[RunState::ERRORED] << "" - << "" << ds.taskStateCounts[RunState::COMPLETED] << "" + << "" << stateURL(RunState::QUEUED) << "" + << "" << stateURL(RunState::RUNNING) << "" + << "" << stateURL(RunState::RETRY) << "" + << "" << stateURL(RunState::ERRORED) << "" + << "" << stateURL(RunState::COMPLETED) << "" << ""; } ss << ""; @@ -339,6 +349,12 @@ namespace daggy::daggyd { auto run = logger_.getDAGRun(runID); bool isJSON = requestIsForJSON(request); + std::optional 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"( -
+ Details for RunID )" << runID << R"( -
+ + +

Summary

@@ -435,6 +459,14 @@ namespace daggy::daggyd { "Update Logs"; 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 = ""; + } ss << "" << "" << taskName << "" << "" << run.taskRunStates.at(taskName) << "" @@ -442,7 +474,7 @@ namespace daggy::daggyd { << timePointToString(run.taskStateChanges.at(taskName).back().time) << "" << "Logs" + << "\">Logs" << retryButton << "" << ""; } ss << "
";