/** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('export-monster-files test')->cron('00 * * * *')->name('process-feed')->withoutOverlapping(); $schedule->call(function () { $files = \App\FileDeleteQueue::all(); foreach ($files as $file) { $local_file = config('monster.tmp_storage_path') . $file->file_name; if (file_exists($local_file)) { $tmp_is_deleted = unlink(realpath($local_file)); if (!$tmp_is_deleted) { \App\ExportLog::create(['process' => 'deleting local file', 'filename' => $ftp_file, 'message' => 'cannot be deleted from /tmp/ folder']); } else { $file->delete(); } } } })->name('delete-local-files')->twiceDaily(12, 23); $schedule->call(function () { // deleting expired jobs $today = date('Y-m-d', time()); $jobs = \App\Job::where('end_date', '<', $today)->take(1000)->get(); if (!$jobs->isEmpty()) { $i = 0; foreach ($jobs as $j) { $j->delete(); $i++; } \App\ExportLog::create(['process' => 'deleting expired jobs', 'message' => 'Deleted ' . $i . ' jobs']); } })->cron('5 * * * *')->name('delete-expired-jobs-hourly')->withoutOverlapping(); $schedule->call(function () { $today = date('Y-m-d', time() - 3 * 86400); \App\ExportRecordFailure::where('created_at', '<', $today)->take(3000)->delete(); })->cron('5 * * * *')->name('delete-export-record-failures')->withoutOverlapping(); $schedule->call(function () { $queue = \App\CacheQueue::where(['in_process' => 0])->take(10); $records = $queue->get(); if (!$records->isEmpty()) { $queue->update(['in_process' => 1]); foreach ($records as $record) { $run = call_user_func($record->model . '::' . $record->method, $record->args); if ($run) { $record->delete(); } else { $record->in_process = null; $record->save(); } } } })->everyMinute()->name('process-cache-queue-records'); }
public static function moveFtpFile($filename, $process) { $ftp_dir = $process . '/'; $final_destination = '/processed_feed/' . $filename; $ftp_conn = ftp_connect(config('monster.ftp_server'), 21); if ($ftp_conn) { $ftp_login = ftp_login($ftp_conn, config('monster.ftp_user'), config('monster.ftp_password')); if ($ftp_login) { $is_passive = ftp_pasv($ftp_conn, true); if ($is_passive) { $is_dir_changed = ftp_chdir($ftp_conn, $ftp_dir); if (!$is_dir_changed) { ftp_close($ftp_conn); } else { // move ftp file $ftp_files = ftp_nlist($ftp_conn, ""); if (in_array($filename, $ftp_files)) { if ($process == 'test' || $process == 'processed_feed') { // TO DO: keep it to test the export process $is_deleted = ftp_delete($ftp_conn, '/' . $ftp_dir . $filename); if ($is_deleted) { ExportLog::create(['process' => $process, 'filename' => $filename, 'message' => 'was deleted from FTP [' . $process . '] folder']); FileInProgress::where(['file_name' => $filename])->delete(); } else { ExportLog::create(['process' => $process, 'filename' => $filename, 'message' => 'cannot be deleted']); FileInProgress::where(['file_name' => $filename])->delete(); } } else { $is_moved = ftp_rename($ftp_conn, $filename, $final_destination); if ($is_moved) { ExportLog::create(['process' => $process, 'filename' => $filename, 'message' => 'was moved to FTP [processed_feed] folder']); FileInProgress::where(['file_name' => $filename])->delete(); } else { ExportLog::create(['process' => $process, 'filename' => $filename, 'message' => 'cannot be moved to [' . $final_destination . ']']); } } } else { ExportLog::create(['process' => $process, 'filename' => $filename, 'message' => 'is not found on the FTP server']); } } } } ftp_close($ftp_conn); } //queue local file for deletion FileDeleteQueue::create(['file_name' => $filename]); }