Skip to content

Commit 906467b

Browse files
Added complete task ui page.
1 parent fb25b62 commit 906467b

File tree

7 files changed

+162
-16
lines changed

7 files changed

+162
-16
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ This project started shortly after migrating [Pagoda](https://github.com/mikeste
6060

6161
<img src="https://raw.githubusercontent.com/mikestefanello/readmeimages/main/backlite/task.png" alt="Task details"/>
6262

63+
<img src="https://raw.githubusercontent.com/mikestefanello/readmeimages/main/backlite/task-failed.png" alt="Task failed"/>
64+
6365
More to come as the web UI is under active development.
6466

6567
### Status

ui/handler.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func NewHandler(db *sql.DB) *http.ServeMux {
3131
mux.HandleFunc("GET /succeeded", h.Succeeded)
3232
mux.HandleFunc("GET /failed", h.Failed)
3333
mux.HandleFunc("GET /task/{task}", h.Task)
34+
mux.HandleFunc("GET /completed/{task}", h.TaskCompleted)
3435
return mux
3536
}
3637

@@ -116,6 +117,27 @@ func (h *Handler) Task(w http.ResponseWriter, req *http.Request) {
116117
}
117118
}
118119

120+
func (h *Handler) TaskCompleted(w http.ResponseWriter, req *http.Request) {
121+
err := func() error {
122+
var t *task.Completed
123+
id := req.PathValue("task")
124+
tasks, err := task.GetCompletedTasks(req.Context(), h.db, selectCompletedTask, id)
125+
if err != nil {
126+
return err
127+
}
128+
129+
if len(tasks) > 0 {
130+
t = tasks[0]
131+
}
132+
133+
return h.render(req, w, tmplTaskCompleted, t)
134+
}()
135+
136+
if err != nil {
137+
h.error(w, err)
138+
}
139+
}
140+
119141
func (h *Handler) error(w http.ResponseWriter, err error) {
120142
fmt.Fprint(w, err)
121143
log.Println(err)

ui/query.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@ const selectTask = `
2020
id = ?
2121
`
2222

23+
const selectCompletedTask = `
24+
SELECT
25+
id,
26+
created_at,
27+
queue text,
28+
last_executed_at,
29+
attempts,
30+
last_duration_micro,
31+
succeeded,
32+
task,
33+
expires_at,
34+
error
35+
FROM
36+
backlite_tasks_completed
37+
WHERE
38+
id = ?
39+
`
40+
2341
const selectRunningTasks = `
2442
SELECT
2543
id,

ui/templates.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ var (
1414
tmplTasksUpcoming = mustParse("upcoming")
1515
tmplTasksCompleted = mustParse("completed_tasks")
1616
tmplTask = mustParse("task")
17+
tmplTaskCompleted = mustParse("completed_task")
1718
)
1819

1920
func mustParse(page string) *template.Template {

ui/templates/completed_task.gohtml

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{{define "content"}}
2+
<div class="row">
3+
<div class="col-12 col-md-6 col-lg">
4+
<div class="card">
5+
{{if .}}
6+
<div class="card-header">
7+
<h3 class="card-title">Completed task</h3>
8+
</div>
9+
<div class="card-body">
10+
<div class="datagrid">
11+
<div class="datagrid-item">
12+
<div class="datagrid-title">Status</div>
13+
<div class="datagrid-content">
14+
{{if .Succeeded}}
15+
<span class="status status-green status-lite">
16+
<span class="status-dot"></span>
17+
Succeeded
18+
</span>
19+
{{else}}
20+
<span class="status status-red status-lite">
21+
<span class="status-dot"></span>
22+
Failed
23+
</span>
24+
{{end}}
25+
</div>
26+
</div>
27+
<div class="datagrid-item">
28+
<div class="datagrid-title">Queue</div>
29+
<div class="datagrid-content">{{.Queue}}</div>
30+
</div>
31+
<div class="datagrid-item">
32+
<div class="datagrid-title">ID</div>
33+
<div class="datagrid-content">{{.ID}}</div>
34+
</div>
35+
<div class="datagrid-item">
36+
<div class="datagrid-title">Created at</div>
37+
<div class="datagrid-content">{{.CreatedAt}}</div>
38+
</div>
39+
<div class="datagrid-item">
40+
<div class="datagrid-title">Last executed at</div>
41+
<div class="datagrid-content">{{.LastExecutedAt}}</div>
42+
</div>
43+
<div class="datagrid-item">
44+
<div class="datagrid-title">Last duration</div>
45+
<div class="datagrid-content">{{.LastDuration}}</div>
46+
</div>
47+
<div class="datagrid-item">
48+
<div class="datagrid-title">Attempts</div>
49+
<div class="datagrid-content">{{.Attempts}}</div>
50+
</div>
51+
<div class="datagrid-item">
52+
<div class="datagrid-title">Expires at</div>
53+
<div class="datagrid-content">
54+
{{if .ExpiresAt}}
55+
{{.ExpiresAt}}
56+
{{else}}
57+
Never
58+
{{end}}
59+
</div>
60+
</div>
61+
</div>
62+
{{if .Error}}
63+
<br />
64+
<div class="datagrid">
65+
<div class="datagrid-item">
66+
<div class="datagrid-title">Error</div>
67+
<div class="datagrid-content">
68+
<div class="alert alert-important alert-danger" role="alert">
69+
{{.Error}}
70+
</div>
71+
</div>
72+
</div>
73+
</div>
74+
{{end}}
75+
<br />
76+
<div class="datagrid">
77+
<div class="datagrid-item">
78+
<div class="datagrid-title">Task</div>
79+
<div class="datagrid-content">
80+
{{if .Task}}
81+
<kbd>{{bytestring .Task}}</kbd>
82+
{{else}}
83+
Not retained
84+
{{end}}
85+
</div>
86+
</div>
87+
</div>
88+
</div>
89+
{{else}}
90+
<div class="card-header">
91+
<h3 class="card-title">Task not found!</h3>
92+
</div>
93+
{{end}}
94+
</div>
95+
</div>
96+
</div>
97+
{{end}}

ui/templates/completed_tasks.gohtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<td class="text-secondary">{{.LastExecutedAt}}</td>
2626
<td class="text-secondary">{{.LastDuration}}</td>
2727
<td>
28-
<a href="">View</a>
28+
<a href="/completed/{{.ID}}">View</a>
2929
</td>
3030
</tr>
3131
{{end}}

ui/templates/task.gohtml

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,23 @@
3838
</div>
3939
<div class="datagrid-item">
4040
<div class="datagrid-title">Started</div>
41-
{{if .ClaimedAt}}
42-
{{.ClaimedAt}}
43-
{{else}}
44-
-
45-
{{end}}
41+
<div class="datagrid-content">
42+
{{if .ClaimedAt}}
43+
{{.ClaimedAt}}
44+
{{else}}
45+
-
46+
{{end}}
47+
</div>
4648
</div>
4749
<div class="datagrid-item">
4850
<div class="datagrid-title">Wait until</div>
49-
{{if .WaitUntil}}
50-
{{.WaitUntil}}
51-
{{else}}
52-
-
53-
{{end}}
51+
<div class="datagrid-content">
52+
{{if .WaitUntil}}
53+
{{.WaitUntil}}
54+
{{else}}
55+
-
56+
{{end}}
57+
</div>
5458
</div>
5559
<div class="datagrid-item">
5660
<div class="datagrid-title">Attempts</div>
@@ -60,11 +64,13 @@
6064
</div>
6165
<div class="datagrid-item">
6266
<div class="datagrid-title">Last executed at</div>
63-
{{if .LastExecutedAt}}
64-
{{.LastExecutedAt}}
65-
{{else}}
66-
-
67-
{{end}}
67+
<div class="datagrid-content">
68+
{{if .LastExecutedAt}}
69+
{{.LastExecutedAt}}
70+
{{else}}
71+
-
72+
{{end}}
73+
</div>
6874
</div>
6975
<div class="datagrid-item">
7076
<div class="datagrid-title">Data</div>

0 commit comments

Comments
 (0)