@@ -4,6 +4,7 @@ defmodule Obanalyze.Dashboard do
4
4
use Phoenix.LiveDashboard.PageBuilder , refresher?: true
5
5
6
6
import Phoenix.LiveDashboard.Helpers , only: [ format_value: 2 ]
7
+ import Obanalyze.Helpers
7
8
8
9
alias Obanalyze.ObanJobs
9
10
alias Obanalyze.NavItem
@@ -43,24 +44,40 @@ defmodule Obanalyze.Dashboard do
43
44
</ . live_nav_bar >
44
45
45
46
< . live_modal :if = { @ job != nil } id = "job-modal " title = { "Job - #{ @ job . id } " } return_to = { live_dashboard_path ( @ socket , @ page , params: % { } ) } >
46
- < . label_value_list >
47
- <: elem label = "ID " > <%= @ job . id %> </: elem >
48
- <: elem label = "State " > <%= @ job . state %> </: elem >
49
- <: elem label = "Queue " > <%= @ job . queue %> </: elem >
50
- <: elem label = "Worker " > <%= @ job . worker %> </: elem >
51
- <: elem label = "Args " > <%= format_value ( @ job . args , nil ) %> </: elem >
52
- <: elem :if = { @ job . meta != % { } } label = "Meta " > <%= format_value ( @ job . meta , nil ) %> </: elem >
53
- <: elem :if = { @ job . tags != [ ] } label = "Tags " > <%= format_value ( @ job . tags , nil ) %> </: elem >
54
- <: elem :if = { @ job . errors != [ ] } label = "Errors " > <%= format_errors ( @ job . errors ) %> </: elem >
55
- <: elem label = "Attempts " > <%= @ job . attempt %> /<%= @ job . max_attempts %> </: elem >
56
- <: elem label = "Priority " > <%= @ job . priority %> </: elem >
57
- <: elem label = "Attempted at " > <%= format_value ( @ job . attempted_at ) %> </: elem >
58
- <: elem :if = { @ job . cancelled_at } label = "Cancelled at " > <%= format_value ( @ job . cancelled_at ) %> </: elem >
59
- <: elem :if = { @ job . completed_at } label = "Completed at " > <%= format_value ( @ job . completed_at ) %> </: elem >
60
- <: elem :if = { @ job . discarded_at } label = "Discarded at " > <%= format_value ( @ job . discarded_at ) %> </: elem >
61
- <: elem label = "Inserted at " > <%= format_value ( @ job . inserted_at ) %> </: elem >
62
- <: elem label = "Scheduled at " > <%= format_value ( @ job . scheduled_at ) %> </: elem >
63
- </ . label_value_list >
47
+ < div class = "mb-4 btn-toolbar " role = "toolbar " aria-label = "Oban Job actions " >
48
+ < div :if = { can_cancel_job? ( @ job ) } class = "btn-group " role = "group " >
49
+ < button type = "button " class = "btn btn-primary btn-sm mr-2 " phx-click = "cancel_job " phx-value-job = { @ job . id } data-disable-with = "Cancelling... " > Cancel</ button >
50
+ </ div >
51
+ < div :if = { can_run_job? ( @ job ) } class = "btn-group " role = "group " >
52
+ < button type = "button " class = "btn btn-primary btn-sm mr-2 " phx-click = "retry_job " phx-value-job = { @ job . id } data-disable-with = "Running... " > Run now</ button >
53
+ </ div >
54
+ < div :if = { can_retry_job? ( @ job ) } class = "btn-group " role = "group " >
55
+ < button type = "button " class = "btn btn-primary btn-sm mr-2 " phx-click = "retry_job " phx-value-job = { @ job . id } data-disable-with = "Retrying... " > Retry</ button >
56
+ </ div >
57
+ < div :if = { can_delete_job? ( @ job ) } class = "btn-group " role = "group " >
58
+ < button type = "button " class = "btn btn-primary btn-sm mr-2 " phx-click = "delete_job " phx-value-job = { @ job . id } data-disable-with = "Deleting... " data-confirm = "Are you sure you want to delete this job? " > Delete</ button >
59
+ </ div >
60
+ </ div >
61
+ < div class = "tabular-info " >
62
+ < . label_value_list >
63
+ <: elem label = "ID " > <%= @ job . id %> </: elem >
64
+ <: elem label = "State " > <%= @ job . state %> </: elem >
65
+ <: elem label = "Queue " > <%= @ job . queue %> </: elem >
66
+ <: elem label = "Worker " > <%= @ job . worker %> </: elem >
67
+ <: elem label = "Args " > <%= format_value ( @ job . args , nil ) %> </: elem >
68
+ <: elem :if = { @ job . meta != % { } } label = "Meta " > <%= format_value ( @ job . meta , nil ) %> </: elem >
69
+ <: elem :if = { @ job . tags != [ ] } label = "Tags " > <%= format_value ( @ job . tags , nil ) %> </: elem >
70
+ <: elem :if = { @ job . errors != [ ] } label = "Errors " > <%= format_errors ( @ job . errors ) %> </: elem >
71
+ <: elem label = "Attempts " > <%= @ job . attempt %> /<%= @ job . max_attempts %> </: elem >
72
+ <: elem label = "Priority " > <%= @ job . priority %> </: elem >
73
+ <: elem label = "Attempted at " > <%= format_value ( @ job . attempted_at ) %> </: elem >
74
+ <: elem :if = { @ job . cancelled_at } label = "Cancelled at " > <%= format_value ( @ job . cancelled_at ) %> </: elem >
75
+ <: elem :if = { @ job . completed_at } label = "Completed at " > <%= format_value ( @ job . completed_at ) %> </: elem >
76
+ <: elem :if = { @ job . discarded_at } label = "Discarded at " > <%= format_value ( @ job . discarded_at ) %> </: elem >
77
+ <: elem label = "Inserted at " > <%= format_value ( @ job . inserted_at ) %> </: elem >
78
+ <: elem label = "Scheduled at " > <%= format_value ( @ job . scheduled_at ) %> </: elem >
79
+ </ . label_value_list >
80
+ </ div >
64
81
</ . live_modal >
65
82
"""
66
83
end
@@ -92,6 +109,25 @@ defmodule Obanalyze.Dashboard do
92
109
{ :noreply , push_patch ( socket , to: to ) }
93
110
end
94
111
112
+ def handle_event ( "cancel_job" , % { "job" => job_id } , socket ) do
113
+ with { :ok , job } <- ObanJobs . cancel_oban_job ( job_id ) do
114
+ { :noreply , assign ( socket , job: job ) }
115
+ end
116
+ end
117
+
118
+ def handle_event ( "retry_job" , % { "job" => job_id } , socket ) do
119
+ with { :ok , job } <- ObanJobs . retry_oban_job ( job_id ) do
120
+ { :noreply , assign ( socket , job: job ) }
121
+ end
122
+ end
123
+
124
+ def handle_event ( "delete_job" , % { "job" => job_id } , socket ) do
125
+ with :ok <- ObanJobs . delete_oban_job ( job_id ) do
126
+ to = live_dashboard_path ( socket , socket . assigns . page , params: % { } )
127
+ { :noreply , push_patch ( socket , to: to ) }
128
+ end
129
+ end
130
+
95
131
@ impl true
96
132
def handle_refresh ( socket ) do
97
133
socket =
@@ -107,8 +143,8 @@ defmodule Obanalyze.Dashboard do
107
143
108
144
defp assign_job ( socket , job_id ) do
109
145
if job_id do
110
- case ObanJobs . get_oban_job ( job_id ) do
111
- % Oban.Job { } = job ->
146
+ case ObanJobs . fetch_oban_job ( job_id ) do
147
+ { :ok , job } ->
112
148
assign ( socket , job: job )
113
149
114
150
_ ->
0 commit comments