nodejs.ultimate_cron.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. (function ($) {
  2. $(function() {
  3. // Ping Drupal for initial status of processes.
  4. $.ajax({
  5. type: 'GET',
  6. url: '/admin/ultimate-cron/service/process-status',
  7. data: '',
  8. dataType: 'json',
  9. success: function (result) {
  10. // Drupal.settings.ultimate_cron.initial_processes = result.processes;
  11. // Drupal.settings.ultimate_cron.processes = result.processes;
  12. // setTimeout(&ultimateCronInitialProcess, 100);
  13. }
  14. });
  15. // Setup progress counter
  16. setInterval(function() {
  17. var time = (new Date()).getTime() / 1000;
  18. $.each(Drupal.settings.ultimate_cron.processes, function (name, process) {
  19. if (process.exec_status == 2) {
  20. var row = 'row-' + name;
  21. var seconds = Math.round((time - Drupal.settings.ultimate_cron.skew) - process.start_stamp);
  22. seconds = seconds < 0 ? 0 : seconds;
  23. var formatted = (new Date(seconds * 1000)).toISOString().substring(11, 19);
  24. if (process.progress > 0) {
  25. var progress = Math.round(process.progress * 100);
  26. formatted += ' (' + progress + '%)';
  27. }
  28. $('tr.' + row + ' td.ultimate-cron-admin-status-running').closest('tr.' + row).find('td.ultimate-cron-admin-end').html(formatted);
  29. }
  30. });
  31. }, 1000);
  32. });
  33. Drupal.Nodejs.callbacks.nodejsBackgroundProcess = {
  34. updateSkew: function (time) {
  35. jsTime = (new Date()).getTime() / 1000;
  36. Drupal.settings.ultimate_cron.skew = jsTime - time;
  37. },
  38. callback: function (message) {
  39. var action = message.data.action;
  40. if (
  41. // action != 'locked' &&
  42. action != 'claimed' &&
  43. action != 'dispatch' &&
  44. // action != 'remove' &&
  45. action != 'setProgress' &&
  46. action != 'ultimateCronStatus'
  47. ) {
  48. return;
  49. }
  50. var process = message.data.background_process;
  51. var ultimate_cron = message.data.ultimate_cron;
  52. var regex = new RegExp('^' + Drupal.settings.ultimate_cron.handle_prefix);
  53. var name = process.handle.replace(regex, '');
  54. if (name == process.handle) {
  55. return;
  56. }
  57. name = encodeURIComponent(name).replace(/%/, '_');
  58. Drupal.settings.ultimate_cron.processes[name] = process;
  59. var row = 'row-' + name;
  60. switch (action) {
  61. case 'dispatch':
  62. this.updateSkew(message.data.timestamp);
  63. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  64. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  65. $('tr.' + row + ' td.ultimate-cron-admin-end').html(Drupal.t('Starting'));
  66. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Starting') + '</span>');
  67. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('title', Drupal.t('Running on !service_host', {'!service_host': process.service_host ? process.service_host : Drupal.t('N/A')}));
  68. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  69. link.attr('href', ultimate_cron.unlockURL);
  70. link.attr('title', Drupal.t('Unlock'));
  71. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  72. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  73. break;
  74. case 'claimed':
  75. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  76. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  77. $('tr.' + row + ' td.ultimate-cron-admin-end').html('00:00:00');
  78. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Running') + '</span>');
  79. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('title', Drupal.t('Running on !service_host', {'!service_host': process.service_host ? process.service_host : Drupal.t('N/A')}));
  80. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  81. link.attr('href', ultimate_cron.unlockURL);
  82. link.attr('title', Drupal.t('Unlock'));
  83. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  84. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  85. break;
  86. case 'setProgress':
  87. this.updateSkew(message.data.timestamp);
  88. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  89. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  90. // $('tr.' + row + ' td.ultimate-cron-admin-end').html(ultimate_cron.progress);
  91. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Running') + '</span>');
  92. // $('tr.' + row + ' td.ultimate-cron-admin-status').attr('title', Drupal.t('Running on !service_host', {'!service_host': process.service_host ? process.service_host : Drupal.t('N/A')}));
  93. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  94. link.attr('href', ultimate_cron.unlockURL);
  95. link.attr('title', Drupal.t('Unlock'));
  96. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  97. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  98. break;
  99. case 'ultimateCronStatus':
  100. switch (parseInt(process.exec_status)) {
  101. case 1:
  102. message.data.action = 'dispatch';
  103. return this.callback(message);
  104. case 2:
  105. message.data.action = 'setProgress';
  106. return this.callback(message);
  107. }
  108. return;
  109. default:
  110. return;
  111. }
  112. var sel = location.hash.substring(1);
  113. sel = sel ? sel : 'show-all';
  114. $('a#ultimate-cron-' + sel).trigger('click');
  115. }
  116. };
  117. Drupal.Nodejs.callbacks.nodejsProgress = {
  118. callback: function (message) {
  119. switch (message.data.action) {
  120. case 'setProgress':
  121. return Drupal.Nodejs.callbacks.nodejsBackgroundProcess.callback(message);
  122. }
  123. }
  124. }
  125. Drupal.Nodejs.callbacks.nodejsUltimateCron = {
  126. callback: function (message) {
  127. var action = message.data.action;
  128. switch (action) {
  129. case 'log':
  130. var log = message.data.log;
  131. var name = encodeURIComponent(log.name).replace(/%/, '_');
  132. delete Drupal.settings.ultimate_cron.processes[name];
  133. var row = 'row-' + name;
  134. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-' + log.formatted.severity);
  135. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + log.severity + '</span>');
  136. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('title', log.formatted.msg ? log.formatted.msg : Drupal.t('No errors'));
  137. $('tr.' + row + ' td.ultimate-cron-admin-start').html(log.formatted.start_stamp);
  138. $('tr.' + row + ' td.ultimate-cron-admin-start').attr('title', Drupal.t('Previous run started @ !timestamp', {'!timestamp': log.formatted.start_stamp}));
  139. $('tr.' + row + ' td.ultimate-cron-admin-end').html(log.formatted.duration);
  140. $('tr.' + row + ' td.ultimate-cron-admin-end').attr('title', Drupal.t('Previous run finished @ !timestamp', {'!timestamp': log.formatted.end_stamp}));
  141. var link = $('tr.' + row + ' td.ultimate-cron-admin-unlock a');
  142. link.attr('href', log.formatted.executeURL);
  143. link.attr('title', Drupal.t('Run'));
  144. link.html('<span>' + Drupal.t('Run') + '</span>');
  145. $('tr.' + row + ' td.ultimate-cron-admin-unlock').attr('class', 'ultimate-cron-admin-execute');
  146. break;
  147. default:
  148. return;
  149. }
  150. var sel = location.hash.substring(1);
  151. sel = sel ? sel : 'show-all';
  152. $('a#ultimate-cron-' + sel).trigger('click');
  153. }
  154. };
  155. }(jQuery));