nodejs.ultimate_cron.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 name = process.handle.replace(/^uc:/, '');
  53. if (name == process.handle) {
  54. return;
  55. }
  56. name = encodeURIComponent(name).replace(/%/, '_');
  57. Drupal.settings.ultimate_cron.processes[name] = process;
  58. var row = 'row-' + name;
  59. switch (action) {
  60. case 'dispatch':
  61. this.updateSkew(message.data.timestamp);
  62. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  63. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  64. $('tr.' + row + ' td.ultimate-cron-admin-end').html(Drupal.t('Starting'));
  65. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Starting') + '</span>');
  66. $('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')}));
  67. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  68. link.attr('href', ultimate_cron.unlockURL);
  69. link.attr('title', Drupal.t('Unlock'));
  70. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  71. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  72. break;
  73. case 'claimed':
  74. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  75. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  76. $('tr.' + row + ' td.ultimate-cron-admin-end').html('00:00:00');
  77. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Running') + '</span>');
  78. $('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')}));
  79. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  80. link.attr('href', ultimate_cron.unlockURL);
  81. link.attr('title', Drupal.t('Unlock'));
  82. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  83. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  84. break;
  85. case 'setProgress':
  86. this.updateSkew(message.data.timestamp);
  87. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-running');
  88. $('tr.' + row + ' td.ultimate-cron-admin-start').html(ultimate_cron.start_stamp);
  89. // $('tr.' + row + ' td.ultimate-cron-admin-end').html(ultimate_cron.progress);
  90. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + Drupal.t('Running') + '</span>');
  91. // $('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')}));
  92. var link = $('tr.' + row + ' td.ultimate-cron-admin-execute a');
  93. link.attr('href', ultimate_cron.unlockURL);
  94. link.attr('title', Drupal.t('Unlock'));
  95. link.html('<span>' + Drupal.t('Unlock') + '</span>');
  96. $('tr.' + row + ' td.ultimate-cron-admin-execute').attr('class', 'ultimate-cron-admin-unlock');
  97. break;
  98. case 'ultimateCronStatus':
  99. switch (parseInt(process.exec_status)) {
  100. case 1:
  101. message.data.action = 'dispatch';
  102. return this.callback(message);
  103. case 2:
  104. message.data.action = 'setProgress';
  105. return this.callback(message);
  106. }
  107. return;
  108. default:
  109. return;
  110. }
  111. var sel = location.hash.substring(1);
  112. sel = sel ? sel : 'show-all';
  113. $('a#ultimate-cron-' + sel).trigger('click');
  114. }
  115. };
  116. Drupal.Nodejs.callbacks.nodejsProgress = {
  117. callback: function (message) {
  118. switch (message.data.action) {
  119. case 'setProgress':
  120. return Drupal.Nodejs.callbacks.nodejsBackgroundProcess.callback(message);
  121. }
  122. }
  123. }
  124. Drupal.Nodejs.callbacks.nodejsUltimateCron = {
  125. callback: function (message) {
  126. var action = message.data.action;
  127. switch (action) {
  128. case 'log':
  129. var log = message.data.log;
  130. var name = encodeURIComponent(log.name).replace(/%/, '_');
  131. delete Drupal.settings.ultimate_cron.processes[name];
  132. var row = 'row-' + name;
  133. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('class', 'ultimate-cron-admin-status ultimate-cron-admin-status-' + log.formatted.severity);
  134. $('tr.' + row + ' td.ultimate-cron-admin-status').html('<span>' + log.severity + '</span>');
  135. $('tr.' + row + ' td.ultimate-cron-admin-status').attr('title', log.formatted.msg ? log.formatted.msg : Drupal.t('No errors'));
  136. $('tr.' + row + ' td.ultimate-cron-admin-start').html(log.formatted.start_stamp);
  137. $('tr.' + row + ' td.ultimate-cron-admin-start').attr('title', Drupal.t('Previous run started @ !timestamp', {'!timestamp': log.formatted.start_stamp}));
  138. $('tr.' + row + ' td.ultimate-cron-admin-end').html(log.formatted.duration);
  139. $('tr.' + row + ' td.ultimate-cron-admin-end').attr('title', Drupal.t('Previous run finished @ !timestamp', {'!timestamp': log.formatted.end_stamp}));
  140. var link = $('tr.' + row + ' td.ultimate-cron-admin-unlock a');
  141. link.attr('href', log.formatted.executeURL);
  142. link.attr('title', Drupal.t('Run'));
  143. link.html('<span>' + Drupal.t('Run') + '</span>');
  144. $('tr.' + row + ' td.ultimate-cron-admin-unlock').attr('class', 'ultimate-cron-admin-execute');
  145. break;
  146. default:
  147. return;
  148. }
  149. var sel = location.hash.substring(1);
  150. sel = sel ? sel : 'show-all';
  151. $('a#ultimate-cron-' + sel).trigger('click');
  152. }
  153. };
  154. }(jQuery));