/** * Create a new job instance. * * @return void */ public function __construct(Models\Server $server, Models\Task $task) { $this->server = $server; $this->task = $task; $task->queued = 1; $task->save(); }
/** * Execute the console command. * * @return mixed */ public function handle() { $tasks = Models\Task::where('queued', 0)->where('active', 1)->where('next_run', '<=', Carbon::now()->toAtomString())->get(); $this->info(sprintf('Preparing to queue %d tasks.', count($tasks))); $bar = $this->output->createProgressBar(count($tasks)); foreach ($tasks as &$task) { $bar->advance(); $this->dispatch(new SendScheduledTask(Models\Server::findOrFail($task->server), $task)); } $bar->finish(); $this->info("\nFinished queuing tasks for running."); }
public function toggleTask(Request $request, $uuid, $id) { $server = Models\Server::getByUUID($uuid); $this->authorize('toggle-task', $server); $task = Models\Task::findOrFail($id); if (!$task || $server->id !== $task->server) { return response()->json(['error' => 'No task by that ID was found associated with this server.'], 404); } try { $repo = new Repositories\TaskRepository(); $resp = $repo->toggle($id); return response()->json(['status' => $resp]); } catch (\Exception $ex) { Log::error($ex); return response()->json(['error' => 'A server error occured while attempting to toggle this task.'], 503); } }
/** * Create a new scheduled task for a given server. * @param int $id * @param array $data * * @throws DisplayException * @throws DisplayValidationException * @return void */ public function create($id, $data) { $server = Models\Server::findOrFail($id); $validator = Validator::make($data, ['action' => 'string|required', 'data' => 'string|required', 'year' => 'string|sometimes', 'day_of_week' => 'string|sometimes', 'month' => 'string|sometimes', 'day_of_month' => 'string|sometimes', 'hour' => 'string|sometimes', 'minute' => 'string|sometimes']); if ($validator->fails()) { throw new DisplayValidationException(json_encode($validator->errors())); } if (!in_array($data['action'], $this->actions)) { throw new DisplayException('The action provided is not valid.'); } $cron = $this->defaults; foreach ($this->defaults as $setting => $value) { if (array_key_exists($setting, $data) && !is_null($data[$setting]) && $data[$setting] !== '') { $cron[$setting] = $data[$setting]; } } // Check that is this a valid Cron Entry try { $buildCron = Cron::factory(sprintf('%s %s %s %s %s %s', $cron['minute'], $cron['hour'], $cron['day_of_month'], $cron['month'], $cron['day_of_week'], $cron['year'])); } catch (\Exception $ex) { throw $ex; } $task = new Models\Task(); $task->fill(['server' => $server->id, 'active' => 1, 'action' => $data['action'], 'data' => $data['data'], 'queued' => 0, 'year' => $cron['year'], 'day_of_week' => $cron['day_of_week'], 'month' => $cron['month'], 'day_of_month' => $cron['day_of_month'], 'hour' => $cron['hour'], 'minute' => $cron['minute'], 'last_run' => null, 'next_run' => $buildCron->getNextRunDate()]); return $task->save(); }