$(function () {
|
|
var base = document.getElementById("base-url").getAttribute("href").slice(0, -1);
|
|
var period = document.getElementById("period-value");
|
|
var periodUnit = document.getElementById("period-unit");
|
|
var grace = document.getElementById("grace-value");
|
|
var graceUnit = document.getElementById("grace-unit");
|
|
|
|
$(".rw .timeout-grace").click(function() {
|
|
var code = $(this).closest("tr.checks-row").attr("id");
|
|
if (!code) {
|
|
code = this.dataset.code;
|
|
}
|
|
|
|
var url = base + "/checks/" + code + "/timeout/";
|
|
|
|
$("#update-timeout-form").attr("action", url);
|
|
$("#update-cron-form").attr("action", url);
|
|
|
|
// Simple, period
|
|
var parsed = secsToUnits(this.dataset.timeout);
|
|
period.value = parsed.value;
|
|
periodUnit.value = parsed.unit;
|
|
periodSlider.noUiSlider.set(this.dataset.timeout);
|
|
$("#update-timeout-timeout").val(this.dataset.timeout);
|
|
|
|
// Simple, grace
|
|
var parsed = secsToUnits(this.dataset.grace);
|
|
grace.value = parsed.value;
|
|
graceUnit.value = parsed.unit;
|
|
graceSlider.noUiSlider.set(this.dataset.grace);
|
|
$("#update-timeout-grace").val(this.dataset.grace);
|
|
|
|
// Cron
|
|
currentPreviewHash = "";
|
|
$("#cron-preview").html("<p>Updating...</p>");
|
|
$("#schedule").val(this.dataset.schedule);
|
|
$("#tz").selectpicker("val", this.dataset.tz);
|
|
var minutes = parseInt(this.dataset.grace / 60);
|
|
$("#update-timeout-grace-cron").val(minutes);
|
|
updateCronPreview();
|
|
|
|
this.dataset.kind == "simple" ? showSimple() : showCron();
|
|
$('#update-timeout-modal').modal({"show":true, "backdrop":"static"});
|
|
return false;
|
|
});
|
|
|
|
var secsToUnits = function(secs) {
|
|
if (secs % 86400 == 0) {
|
|
return {value: secs / 86400, unit: 86400}
|
|
}
|
|
if (secs % 3600 == 0) {
|
|
return {value: secs / 3600, unit: 3600}
|
|
}
|
|
|
|
return {value: Math.round(secs / 60), unit: 60}
|
|
}
|
|
|
|
var pipLabels = {
|
|
60: "1 minute",
|
|
1800: "30 minutes",
|
|
3600: "1 hour",
|
|
43200: "12 hours",
|
|
86400: "1 day",
|
|
604800: "1 week",
|
|
2592000: "30 days",
|
|
31536000: "365 days"
|
|
}
|
|
|
|
var periodSlider = document.getElementById("period-slider");
|
|
noUiSlider.create(periodSlider, {
|
|
start: [20],
|
|
connect: "lower",
|
|
range: {
|
|
'min': [60, 60],
|
|
'30%': [3600, 3600],
|
|
'60%': [86400, 86400],
|
|
'75%': [604800, 86400],
|
|
'90%': [2592000, 2592000],
|
|
'max': 31536000
|
|
},
|
|
pips: {
|
|
mode: 'values',
|
|
values: [60, 1800, 3600, 43200, 86400, 604800, 2592000, 31536000],
|
|
density: 4,
|
|
format: {
|
|
to: function(v) { return pipLabels[v] },
|
|
from: function() {}
|
|
}
|
|
}
|
|
});
|
|
|
|
// Update inputs and the hidden field when user slides the period slider
|
|
periodSlider.noUiSlider.on("slide", function(a, b, value) {
|
|
var rounded = Math.round(value);
|
|
$("#update-timeout-timeout").val(rounded);
|
|
|
|
var parsed = secsToUnits(rounded);
|
|
period.value = parsed.value;
|
|
periodUnit.value = parsed.unit;
|
|
});
|
|
|
|
// Update the slider and the hidden field when user changes period inputs
|
|
$(".period-input").on("keyup change", function() {
|
|
var secs = Math.round(period.value * periodUnit.value);
|
|
period.setCustomValidity(secs <= 31536000 ? "" : "Must not exceed 365 days");
|
|
|
|
if (secs >= 60) {
|
|
periodSlider.noUiSlider.set(secs);
|
|
$("#update-timeout-timeout").val(secs);
|
|
}
|
|
})
|
|
|
|
var graceSlider = document.getElementById("grace-slider");
|
|
noUiSlider.create(graceSlider, {
|
|
start: [20],
|
|
connect: "lower",
|
|
range: {
|
|
'min': [60, 60],
|
|
'30%': [3600, 3600],
|
|
'60%': [86400, 86400],
|
|
'75%': [604800, 86400],
|
|
'90%': [2592000, 2592000],
|
|
'max': 31536000
|
|
},
|
|
pips: {
|
|
mode: 'values',
|
|
values: [60, 1800, 3600, 43200, 86400, 604800, 2592000, 31536000],
|
|
density: 4,
|
|
format: {
|
|
to: function(v) { return pipLabels[v] },
|
|
from: function() {}
|
|
}
|
|
}
|
|
});
|
|
|
|
// Update inputs and the hidden field when user slides the grace slider
|
|
graceSlider.noUiSlider.on("slide", function(a, b, value) {
|
|
var rounded = Math.round(value);
|
|
$("#update-timeout-grace").val(rounded);
|
|
|
|
var parsed = secsToUnits(rounded);
|
|
grace.value = parsed.value;
|
|
graceUnit.value = parsed.unit;
|
|
});
|
|
|
|
// Update the slider and the hidden field when user changes grace inputs
|
|
$(".grace-input").on("keyup change", function() {
|
|
var secs = Math.round(grace.value * graceUnit.value);
|
|
grace.setCustomValidity(secs <= 31536000 ? "" : "Must not exceed 365 days");
|
|
|
|
if (secs >= 60) {
|
|
graceSlider.noUiSlider.set(secs);
|
|
$("#update-timeout-grace").val(secs);
|
|
}
|
|
});
|
|
|
|
function showSimple() {
|
|
$("#update-timeout-form").show();
|
|
$("#update-cron-form").hide();
|
|
}
|
|
|
|
function showCron() {
|
|
$("#update-timeout-form").hide();
|
|
$("#update-cron-form").show();
|
|
}
|
|
|
|
var currentPreviewHash = "";
|
|
function updateCronPreview() {
|
|
var schedule = $("#schedule").val();
|
|
var tz = $("#tz").val();
|
|
var hash = schedule + tz;
|
|
|
|
// Don't try preview with empty values, or if values have not changed
|
|
if (!schedule || !tz || hash == currentPreviewHash)
|
|
return;
|
|
|
|
// OK, we're good
|
|
currentPreviewHash = hash;
|
|
$("#cron-preview-title").text("Updating...");
|
|
|
|
var token = $('input[name=csrfmiddlewaretoken]').val();
|
|
$.ajax({
|
|
url: base + "/checks/cron_preview/",
|
|
type: "post",
|
|
headers: {"X-CSRFToken": token},
|
|
data: {schedule: schedule, tz: tz},
|
|
success: function(data) {
|
|
if (hash != currentPreviewHash) {
|
|
return; // ignore stale results
|
|
}
|
|
|
|
$("#cron-preview" ).html(data);
|
|
var haveError = $("#invalid-arguments").length > 0;
|
|
$("#update-cron-submit").prop("disabled", haveError);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Wire up events for Timeout/Cron forms
|
|
$(".kind-simple").click(showSimple);
|
|
$(".kind-cron").click(showCron);
|
|
|
|
$("#schedule").on("keyup", updateCronPreview);
|
|
$("#tz").on("change", updateCronPreview);
|
|
|
|
});
|