(function(){
var failedCount = null; var checkFailedInterval; function getNotificationPrivileges(){ if (Notification.permission !== "granted") Notification.requestPermission(); } function checkFailedCount(){ var failedTd = $('td.queue.failed'); var newFailedCount = parseInt(failedTd.next().text()); if( failedCount === null ) { failedCount = newFailedCount; } else if ( newFailedCount > failedCount ) { failedCount = newFailedCount; getFailed(); } else if ( newFailedCount < failedCount) { failedCount = newFailedCount; } } function notifyFailed(failedClassText, failedError) { var failedLink = $('td.queue.failed').find('a').attr('href'); var notification = new Notification(failedClassText + ' Failed', { icon: '/resque/notify/public/failed.gif', body: "Exception Raised: " + failedError }); clearInterval(checkFailedInterval); startInterval(); notification.onclick = function(){ window.open(failedLink); } } function getFailed(){ $.ajax({ dataType: 'text', type: 'get', url: "/resque/failed.poll", success: function(data) { parseFailed($(data)); } }); } function parseFailed(failedData){ var failedLi = failedData.filter('.failed').find('li:first'); var failedClass = failedLi.find("dt:contains('Class')").next(); var failedClassText = failedClass.find('a code').text(); var failedError = failedLi.find("dd.error .backtrace").text(); notifyFailed(failedClassText, failedError); } function startInterval(){ checkFailedInterval = setInterval(checkFailedCount, 2000); } function startMonitoring(){ getNotificationPrivileges(); startInterval(); } $(function(){ var pollLink = $('a[rel=poll]'); if( pollLink.length != 0) { pollLink.click(function(){ startMonitoring(); }); var pollEvent = pollLink.data("events").click[3] pollLink.data("events").click[3] = pollLink.data("events").click[4] pollLink.data('events').click[4] = pollEvent; } });
})();