blob: bdc8620df72bd65bfbebbe3915b9ebe1535f8f7e [file] [log] [blame]
{% extends "skeleton.html" %}
{% block page_title %}Cron Jobs{% endblock %}
{% block page_head %}
<style type="text/css">{% include "cron.css" %}</style>
{% endblock %}
{% block body %}
<div id="cron">
<h3>Cron Jobs</h3>
<div id="cron-feedback" {% if cron_error %}class="errorbox"{% endif %}>
{% if cron_error %}
Error loading cron.yaml:
<pre>{{ cron_error }}</pre>
{% endif %}
</div>
{% if cronjobs %}
<table id="ae-cron-jobs" class="ae-table">
<colgroup>
<col class="ae-cron-job">
<col>
</colgroup>
<thead>
<tr>
<th>Cron Job</th>
<th>Schedule</th>
</tr>
</thead>
<tbody>
{% for job in cronjobs %}
<tr>
<td>
<h3>{{ job.url }}</h3>
<p>
{{ job.description }}
</p>
</td>
<td>
<strong>{{ job.schedule }}</strong>
<button class="ae-cron-run ae-button" name="{{ job.url }}">Run now</button>
{% if job.timezone %}
<div><strong>Timezone: {{ job.timezone }}</strong></div>
{% endif %}
{% if job.timezone and not has_pytz %}
<div class="ae-cron-message">
pytz is required to calculate future run times for cron jobs
with timezones.
</div>
{% else %}
<div class="ae-cron-times">
In production, this would run at these times:
<ol>
{% for run in job.times %}
<li>
{{ run.runtime }} <span class="unimportant">{{ run.difference }} from now</span>
</li>
{% endfor %}
</ol>
</div>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% elif not cron_error %}
<p>
This application doesn't define any cron jobs. See <a href="https://developers.google.com/appengine/docs/">the documentation</a> to learn how to configure cron jobs.
</p>
{% endif %}
<script>
$('.ae-cron-run').click(function() {
var url = $(this).attr('name');
var data = {'url': url, 'xsrf_token': '{{ xsrf_token }}'};
var request = $.ajax({
url: '/cron',
type: 'POST',
data: data
})
.done(function() {
$('#cron-feedback').removeClass().addClass('messagebox').text(
'Request to ' + url + ' succeeded!');
})
.fail(function(xhr, textStatus) {
$('#cron-feedback').removeClass().addClass('errorbox').text(
'Request failured with status: ' + request.status);
});
});
</script>
</div>
{% endblock %}