Skip to content

Commit

Permalink
Quick rq 1.2.0 compat solution
Browse files Browse the repository at this point in the history
Closes #283 and closes #70
  • Loading branch information
coolhacker committed Jan 16, 2020
1 parent f5b209b commit 38f33a7
Show file tree
Hide file tree
Showing 5 changed files with 173 additions and 57 deletions.
12 changes: 10 additions & 2 deletions rq_dashboard/templates/rq_dashboard/jobs.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
<option {% if registry_name == 'started' %} selected {% endif %}>started</option>
<option {% if registry_name == 'finished' %} selected {% endif %}>finished</option>
<option {% if registry_name == 'failed' %} selected {% endif %}>failed</option>
{% if scheduler_is_here %}
<option {% if registry_name == 'scheduled' %} selected {% endif %}>scheduled</option>
{% endif %}
</select>
</div>

Expand All @@ -47,7 +50,7 @@
<thead class="thead-light">
<tr>
<th>Name</th>
<th>Age</th>
<th>Created at{% if registry_name == 'scheduled' %} / Enqueued at{% endif %}</th>
<th class="narrow">Actions</th>
</tr>
</thead>
Expand All @@ -69,7 +72,12 @@
<pre class="exc_info"><%= $('<div/>').text(d.exc_info).html() %></pre>
<% } %>
</td>
<td><span class="creation_date"><%= d.created_at %></span></td>
<td>
<span class="creation_date" title='<%= d.long_created_at %>'><%= d.created_at %></span>
<% if (d.long_created_at !== d.long_enqueued_at) { %>
<span class="creation_date" title='<%= d.long_enqueued_at %>'>/ <%= d.enqueued_at %></span>
<% } %>
</td>
<td class="actions narrow">
<% if (d.exc_info) { %>
<a href="#" data-role="requeue-job-btn" class="btn btn-outline-warning btn-sm btn-block">Requeue</a>
Expand Down
18 changes: 16 additions & 2 deletions rq_dashboard/templates/rq_dashboard/queues.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,21 @@ <h1>Queues</h1>
<th>Queue</th>
<th class="narrow">Queued&nbsp;jobs</th>
<th class="narrow">Deferred&nbsp;jobs</th>
{% if scheduler_is_here %}
<th class="narrow">Scheduled&nbsp;jobs</th>
{% endif %}
<th class="narrow">Started&nbsp;jobs</th>
<th class="narrow">Finished&nbsp;jobs</th>
<th class="narrow">Failed&nbsp;jobs</th>
</tr>
</thead>
<tbody>
<tr data-role="loading-placeholder">
<td colspan="6">Loading...</td>
{% if scheduler_is_here %}
<td colspan="7">Loading...</td>
{% else %}
<td colspan="6">Loading...</td>
{% endif %}
</tr>
</tbody>
</table>
Expand All @@ -32,6 +39,9 @@ <h1>Queues</h1>
<td><%= d.name %></td>
<td class="narrow"> <a href="<%= d.queued_url %>"><%= d.count %></a></td>
<td class="narrow"> <a href="<%= d.deferred_url %>"><%= d.deferred_job_registry_count %></a></td>
{% if scheduler_is_here %}
<td class="narrow"> <a href="<%= d.scheduled_url %>"><%= d.scheduled_job_registry_count %></a></td>
{% endif %}
<td class="narrow"> <a href="<%= d.started_url %>"><%= d.started_job_registry_count %></a></td>
<td class="narrow"> <a href="<%= d.finished_url %>"><%= d.finished_job_registry_count %></a></td>
<td class="failed"> <a href="<%= d.failed_url %>"><%= d.failed_job_registry_count %></a></td>
Expand All @@ -40,7 +50,11 @@ <h1>Queues</h1>

<script name="no-queues-row" type="text/template">
<tr>
<td colspan="6">No queues.</td>
{% if scheduler_is_here %}
<td colspan="7">No queues.</td>
{% else %}
<td colspan="6">No queues.</td>
{% endif %}
</tr>
</script>

Expand Down
2 changes: 1 addition & 1 deletion rq_dashboard/templates/rq_dashboard/scripts/dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ var toRelative = function(universal_date_string) {
var toShort = function(universal_date_string) {
var tzo = new Date().getTimezoneOffset();
var d = Date.create(universal_date_string).rewind({ minutes: tzo });
return d.format()
return d.format('{d} {Month}, {yyyy}, {hh}:{mm}')
}

var api = {
Expand Down
5 changes: 5 additions & 0 deletions rq_dashboard/templates/rq_dashboard/scripts/jobs.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,12 @@

if (jobs.length > 0) {
$.each(jobs, function(i, job) {
job.long_created_at = toShort(Date.create(job.created_at));
job.created_at = toRelative(Date.create(job.created_at));
if (job.enqueued_at !== undefined) {
job.long_enqueued_at = toShort(Date.create(job.enqueued_at))
job.enqueued_at = toRelative(Date.create(job.enqueued_at));
}
if (job.ended_at !== undefined) {
job.ended_at = toRelative(Date.create(job.ended_at));
}
Expand Down
193 changes: 141 additions & 52 deletions rq_dashboard/web.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@
from .version import VERSION as rq_dashboard_version


# Quick import solution for backward compat
scheduler_is_here = True
try:
from rq.registry import ScheduledJobRegistry
except ImportError:
scheduler_is_here = False

blueprint = Blueprint(
"rq_dashboard", __name__, template_folder="templates", static_folder="static",
)
Expand Down Expand Up @@ -105,57 +112,120 @@ def _wrapped(*args, **kwargs):


def serialize_queues(instance_number, queues):
return [
dict(
name=q.name,
count=q.count,
queued_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="queued",
per_page="8",
page="1",
),
failed_job_registry_count=FailedJobRegistry(q.name).count,
failed_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="failed",
per_page="8",
page="1",
),
started_job_registry_count=StartedJobRegistry(q.name).count,
started_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="started",
per_page="8",
page="1",
),
deferred_job_registry_count=DeferredJobRegistry(q.name).count,
deferred_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="deferred",
per_page="8",
page="1",
),
finished_job_registry_count=FinishedJobRegistry(q.name).count,
finished_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="finished",
per_page="8",
page="1",
),
)
for q in queues
]
if scheduler_is_here:
result_list = [
dict(
name=q.name,
count=q.count,
queued_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="queued",
per_page="8",
page="1",
),
failed_job_registry_count=FailedJobRegistry(q.name).count,
failed_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="failed",
per_page="8",
page="1",
),
started_job_registry_count=StartedJobRegistry(q.name).count,
started_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="started",
per_page="8",
page="1",
),
deferred_job_registry_count=DeferredJobRegistry(q.name).count,
deferred_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="deferred",
per_page="8",
page="1",
),
finished_job_registry_count=FinishedJobRegistry(q.name).count,
finished_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="finished",
per_page="8",
page="1",
),
scheduled_job_registry_count=ScheduledJobRegistry(q.name).count,
scheduled_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="scheduled",
per_page="8",
page="1",
),
)
for q in queues
]
else:
result_list = [
dict(
name=q.name,
count=q.count,
queued_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="queued",
per_page="8",
page="1",
),
failed_job_registry_count=FailedJobRegistry(q.name).count,
failed_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="failed",
per_page="8",
page="1",
),
started_job_registry_count=StartedJobRegistry(q.name).count,
started_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="started",
per_page="8",
page="1",
),
deferred_job_registry_count=DeferredJobRegistry(q.name).count,
deferred_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="deferred",
per_page="8",
page="1",
),
finished_job_registry_count=FinishedJobRegistry(q.name).count,
finished_url=url_for(
".jobs_overview",
instance_number=instance_number,
queue_name=q.name,
registry_name="finished",
per_page="8",
page="1",
),
)
for q in queues
]
return result_list


def serialize_date(dt):
Expand All @@ -165,9 +235,15 @@ def serialize_date(dt):


def serialize_job(job):
enqueued_at = (
job.enqueued_at
if job.enqueued_at
else ScheduledJobRegistry(job.origin).get_scheduled_time(job)
)
return dict(
id=job.id,
created_at=serialize_date(job.created_at),
enqueued_at=serialize_date(enqueued_at),
ended_at=serialize_date(job.ended_at),
exc_info=str(job.exc_info) if job.exc_info else None,
description=job.description,
Expand Down Expand Up @@ -225,6 +301,8 @@ def get_queue_registry_jobs_count(queue_name, registry_name, offset, per_page):
current_queue = StartedJobRegistry(queue_name)
elif registry_name == "finished":
current_queue = FinishedJobRegistry(queue_name)
elif registry_name == "scheduled":
current_queue = ScheduledJobRegistry(queue_name)
else:
current_queue = queue
total_items = current_queue.count
Expand Down Expand Up @@ -259,6 +337,7 @@ def queues_overview(instance_number):
rq_dashboard_version=rq_dashboard_version,
rq_version=rq_version,
active_tab="queues",
scheduler_is_here=scheduler_is_here,
deprecation_options_usage=current_app.config.get(
"DEPRECATED_OPTIONS", False
),
Expand Down Expand Up @@ -320,6 +399,7 @@ def jobs_overview(instance_number, queue_name, registry_name, per_page, page):
rq_dashboard_version=rq_dashboard_version,
rq_version=rq_version,
active_tab="jobs",
scheduler_is_here=scheduler_is_here,
deprecation_options_usage=current_app.config.get(
"DEPRECATED_OPTIONS", False
),
Expand Down Expand Up @@ -398,6 +478,10 @@ def empty_queue(queue_name, registry_name):
ids = FinishedJobRegistry(queue_name).get_job_ids()
for id in ids:
delete_job_view(id)
elif registry_name == "scheduled":
ids = ScheduledJobRegistry(queue_name).get_job_ids()
for id in ids:
delete_job_view(id)
return dict(status="OK")


Expand Down Expand Up @@ -513,10 +597,15 @@ def list_jobs(instance_number, queue_name, registry_name, per_page, page):
@jsonify
def job_info(instance_number, job_id):
job = Job.fetch(job_id)
enqueued_at = (
job.enqueued_at
if job.enqueued_at
else ScheduledJobRegistry(job.origin).get_scheduled_time(job)
)
return dict(
id=job.id,
created_at=serialize_date(job.created_at),
enqueued_at=serialize_date(job.enqueued_at),
enqueued_at=serialize_date(enqueued_at),
ended_at=serialize_date(job.ended_at),
origin=job.origin,
status=job.get_status(),
Expand Down

0 comments on commit 38f33a7

Please sign in to comment.