8000 Feature/update status by yottahmd · Pull Request #21 · dagu-org/dagu · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Feature/update status #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions internal/admin/handlers/dag.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,17 +115,20 @@ func HandleGetDAG(hc *DAGHandlerConfig) http.HandlerFunc {
switch params.Tab {
case DAG_TabType_Status:
data.Graph = models.StepGraph(dag.Status.Nodes, params.Tab != DAG_TabType_Config)

case DAG_TabType_Config:
steps := models.FromSteps(dag.Config.Steps)
data.Graph = models.StepGraph(steps, params.Tab != DAG_TabType_Config)
data.Definition, _ = config.ReadConfig(path.Join(hc.DAGsDir, params.Group, cfg))

case DAG_TabType_History:
logs, err := controller.New(dag.Config).GetStatusHist(30)
if err != nil {
encodeError(w, err)
return
}
data.LogData = buildLog(logs)

case DAG_TabType_StepLog:
if isJsonRequest(r) {
data.StepLog, err = readStepLog(c, params.File, params.Step, hc.LogEncodingCharset)
Expand All @@ -134,6 +137,7 @@ func HandleGetDAG(hc *DAGHandlerConfig) http.HandlerFunc {
return
}
}

case DAG_TabType_ScLog:
if isJsonRequest(r) {
data.ScLog, err = readSchedulerLog(c, params.File)
Expand All @@ -142,6 +146,7 @@ func HandleGetDAG(hc *DAGHandlerConfig) http.HandlerFunc {
return
}
}

default:
}

Expand Down Expand Up @@ -169,6 +174,7 @@ func HandlePostDAGAction(hc *PostDAGHandlerConfig) http.HandlerFunc {
action := r.FormValue("action")
group := r.FormValue("group")
reqId := r.FormValue("request-id")
step := r.FormValue("step")

cfg, err := getPathParameter(r)
if err != nil {
Expand Down Expand Up @@ -197,6 +203,7 @@ func HandlePostDAGAction(hc *PostDAGHandlerConfig) http.HandlerFunc {
w.Write([]byte(err.Error()))
return
}

case "stop":
if dag.Status.Status != scheduler.SchedulerStatus_Running {
w.WriteHeader(http.StatusBadRequest)
Expand All @@ -209,6 +216,7 @@ func HandlePostDAGAction(hc *PostDAGHandlerConfig) http.HandlerFunc {
w.Write([]byte(err.Error()))
return
}

case "retry":
if reqId == "" {
w.WriteHeader(http.StatusBadRequest)
Expand All @@ -221,6 +229,57 @@ func HandlePostDAGAction(hc *PostDAGHandlerConfig) http.HandlerFunc {
w.Write([]byte(err.Error()))
return
}

case "mark-success":
if dag.Status.Status == scheduler.SchedulerStatus_Running {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("DAG is running."))
return
}
if reqId == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("request-id is required."))
return
}
if step == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("step is required."))
return
}

err = updateStatus(c, reqId, step, scheduler.NodeStatus_Success)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
return
}

return

case "mark-failed":
if dag.Status.Status == scheduler.SchedulerStatus_Running {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("DAG is running."))
return
}
if reqId == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("request-id is required."))
return
}
if step == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("step is required."))
return
}

err = updateStatus(c, reqId, step, scheduler.NodeStatus_Error)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
return
}

default:
encodeError(w, errInvalidArgs)
return
Expand All @@ -230,6 +289,26 @@ func HandlePostDAGAction(hc *PostDAGHandlerConfig) http.HandlerFunc {
}
}

func updateStatus(c controller.Controller, reqId, step string, to scheduler.NodeStatus) error {
status, err := c.GetStatusByRequestId(reqId)
if err != nil {
return err
}
found := false
for i := range status.Nodes {
if status.Nodes[i].Step.Name == step {
status.Nodes[i].Status = to
status.Nodes[i].StatusText = to.String()
found = true
break
}
}
if !found {
return fmt.Errorf("step %s not found", step)
}
return c.UpdateStatus(status)
}

func readSchedulerLog(c controller.Controller, file string) (*schedulerLog, error) {
logFile := ""
if file == "" {
Expand Down
2 changes: 1 addition & 1 deletion internal/admin/handlers/web/templates/base.gohtml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
<div class="navbar-brand">
<a class="navbar-item" href="/">
<img alt="dagu" width="32" height="32" src="data:image/png;base64,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">
<span id="nav-title">degu</span>
<span id="nav-title">dagu</span>
</a>
</div>
</nav>
Expand Down
80 changes: 77 additions & 3 deletions internal/admin/handlers/web/templates/dag.gohtml
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,27 @@
{},
]
function NodeTable({ nodes, file = "", dag }) {
const [modal, setModal] = React.useState(false);
const [current, setCurrent] = React.useState(null);
const requireModal = (step) => {
if (dag.Status.Status == SCHEDULER_STATUS__RUNNING || dag.Status.Status == SCHEDULER_STATUS__NONE) {
return;
}
setCurrent(step);
setModal(true);
}
const dismissModal = () => { setModal(false); }
React.useEffect(() => {
document.addEventListener('keydown', (event) => {
const e = event || window.event;
if (e.keyCode === 27) { // Escape key
setModal(false);
}
});
return () => {
document.removeEventListener('keydown');
};
}, [])
const tableStyle = {
"tableLayout": "fixed",
"wordWrap": "break-word",
Expand All @@ -515,6 +536,10 @@
"overflow-x": "auto",
};
const styles = stepTabColStyles;
const modalbuttonStyle = {};
const modalStyle = {
display: modal ? "flex" : "none",
}
let i = 0;
if (!nodes.length) {
return null;
Expand All @@ -537,9 +562,49 @@
</tr>
</thead>
<tbody>
{nodes.map((n, idx) => <NodeTableRow rownum={idx + 1} node={n} file={file}></NodeTableRow>)}
{nodes.map((n, idx) => <NodeTableRow rownum={idx + 1} node={n} file={file} >></NodeTableRow>)}
</tbody>
</table>

{current ? (
<div className="modal is-active" style={modalStyle}>
<div className="modal-background"></div>
<div className="modal-card">
<header className="modal-card-head">
<p className="modal-card-title">Update status of "{current.Name}"</p>
<button className="delete" aria-label="close" >
</header>
<section className="modal-card-body">
<div className="mr-4 pt-4 is-flex is-flex-direction-row">
<form method="post" >
<input type="hidden" name="group" value="{{.Group}}"></input>
<input type="hidden" name="request-id" value={dag.Status.RequestId}></input>
<input type="hidden" name="step" value={current.Name}></input>
<button type="submit" name="action" value="mark-success"
className="button is-info"
style={modalbuttonStyle}>
<span>Mark Success</span>
</button>
</form>
<form method="post" >
<input type="hidden" name="group" value="{{.Group}}"></input>
<input type="hidden" name="request-id" value={dag.Status.RequestId}></input>
<input type="hidden" name="step" value={current.Name}></input>
<button type="submit" name="action" value="mark-failed"
className="button is-info ml-4"
style={modalbuttonStyle}>
<span>Mark Failed</span>
</button>
</form>
</div>
</section>
<footer className="modal-card-foot">
<button className="button" >
</footer>
</div>
</div>

) : null}
</div>
)
}
Expand All @@ -550,8 +615,15 @@
</React.Fragment>
)
}
function NodeTableRow({ rownum, node, file }) {
function NodeTableRow({ rownum, node, file, onRequireModal }) {
const url = encodeURI("?t=" + TAB_ID__STEPLOG + "&group={{.Group}}&file=" + file + "&step=" + node.Step.Name)
const buttonStyle = {
"margin": "0px",
"padding": "0px",
"border": "0px",
"background": "none",
"outline": "none",
};
return (
<tr>
<td> {rownum} </td>
Expand All @@ -561,7 +633,9 @@
<td> {node.Step.Args ? node.Step.Args.join(" ") : ""} </td>
<td> {node.StartedAt} </td>
<td> {node.FinishedAt} </td>
<td> <StatusTag status={node.Status}>{node.StatusText}</StatusTag></td>
<td> <button style={buttonStyle} => onRequireModal(node.Step)}>
<StatusTag status={node.Status}>{node.StatusText}</StatusTag>
</button> </td>
<td> {node.Error} </td>
<td> <a href={url}> {node.Log} </a> </td>
</tr>
Expand Down
Loading
0