BioTorrents.de’s version of Gazelle
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.php 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. #declare(strict_types=1);
  3. $ENV = ENV::go();
  4. // This page is run every 15 minutes by cron
  5. // todo: See if strict equality will break everything
  6. set_time_limit(50000);
  7. ob_end_flush();
  8. gc_enable();
  9. $ScheduleDebug = false;
  10. $PCount = chop(shell_exec('/usr/bin/pgrep -cf schedule.php'));
  11. // 3 because the cron job starts two processes and pgrep finds itself
  12. if ($PCount > 3) {
  13. error("schedule.php is already running. Exiting ($PCount)\n", $NoHTML = true);
  14. }
  15. $AS = check_perms('admin_schedule');
  16. function run_all_in($Dir)
  17. {
  18. $Tasks = array_diff(scandir(SERVER_ROOT.'/sections/schedule/'.$Dir, 1), ['.', '..']);
  19. extract($GLOBALS);
  20. foreach ($Tasks as $Task) {
  21. $TimeStart = microtime(true);
  22. include($Dir.'/'.$Task);
  23. if ($ScheduleDebug) {
  24. echo $Dir.'/'.$Task.': '.number_format(microtime(true)-$TimeStart, 3).($AS?"<br>":"\n");
  25. }
  26. }
  27. }
  28. if ((!isset($_REQUEST['key']) || $_REQUEST['key'] !== $ENV->getPriv('SCHEDULE_KEY'))
  29. #|| (!isset($argv[1]) || $argv[1] !== $ENV->getPriv('SCHEDULE_KEY'))
  30. && !$AS) {
  31. error(403);
  32. }
  33. if ($AS) {
  34. authorize();
  35. View::show_header();
  36. echo '<div class="box">';
  37. }
  38. $ASBreak = $AS ? '<br />' : "\n";
  39. $DB->query("
  40. SELECT
  41. `NextHour`,
  42. `NextDay`,
  43. `NextBiWeekly`
  44. FROM
  45. `schedule`
  46. ");
  47. list($Hour, $Day, $BiWeek) = $DB->next_record();
  48. $NextHour = date('H');
  49. $NextDay = date('d');
  50. $NextBiWeek = (date('d') < 22 && date('d') >= 8) ? 22 : 8;
  51. $DB->query("
  52. UPDATE
  53. `schedule`
  54. SET
  55. `NextHour` = $NextHour,
  56. `NextDay` = $NextDay,
  57. `NextBiWeekly` = $NextBiWeek
  58. ");
  59. $sqltime = sqltime();
  60. echo "$sqltime $ASBreak";
  61. // Run every time
  62. if (!(isset($_GET['notevery']) && $_GET['notevery'])) {
  63. run_all_in('every');
  64. echo "Ran every-time functions $ASBreak";
  65. }
  66. // Run every hour
  67. if ($Hour !== $NextHour || (isset($_GET['runhour']) && $_GET['runhour'])) {
  68. run_all_in('hourly');
  69. echo "Ran hourly functions $ASBreak";
  70. }
  71. // Run every day
  72. if ($Day !== $NextDay || (isset($_GET['runday']) && $_GET['runday'])) {
  73. run_all_in('daily');
  74. echo "Ran daily functions $ASBreak";
  75. }
  76. // Run every week
  77. if (($Day !== $NextDay && date('w') === 0) || (isset($_GET['runweek']) && $_GET['runweek'])) {
  78. run_all_in('weekly');
  79. echo "Ran weekly functions $ASBreak";
  80. }
  81. // Run twice per month
  82. if ($BiWeek !== $NextBiWeek || (isset($_GET['runbiweek']) && $_GET['runbiweek'])) {
  83. run_all_in('biweekly');
  84. echo "Ran bi-weekly functions $ASBreak";
  85. }
  86. // Run every month
  87. if (($BiWeek !== $NextBiWeek && $BiWeek === 8) || (isset($_GET['runmonth']) && $_GET['runmonth'])) {
  88. run_all_in('monthly');
  89. echo "Ran monthly functions $ASBreak";
  90. }
  91. // Run on request
  92. if (isset($_GET['runmanual']) && $_GET['runmanual']) {
  93. run_all_in('manually');
  94. echo "Ran manual functions $ASBreak";
  95. }
  96. if ($AS) {
  97. echo '</div>';
  98. View::show_footer();
  99. } else {
  100. echo "-------------------------\n\n";
  101. }