Keeping track of workflows
Venture allows you to keep track of the state of your workflows after starting them.
When you start a workflow, an instance of the workflow will be returned.
$workflow = PublishPodcastWorkflow::start($podcast);
A workflow is just a regular Eloquent model, so you can do all the things with it that you're used to from Eloquent.
A workflow instance exposes several methods to inspect and manipulate its current state.
// The date the workflow finished... $workflow->finished_at; // The date the workflow was cancelled... $workflow->cancelled_at; // A collection of WorkflowJob instances that have not been processed yet... $workflow->pendingJobs(); // A collection of WorkflowJob instances that have failed... $workflow->failedJobs(); // Indicates if all jobs of the workflow have run successfully $workflow->allJobsHaveFinished(); // Indicates if the workflow has finished... $workflow->isFinished(); // Indicates if the workflow has been cancelled... $workflow->isCancelled(); // Indicates if the workflow has been executed. This returns true if all // jobs of the workflow have been processed, regardless of whether they // failed or succeeded. $workflow->hasRan(); // Marks a workflow as finished. This sets the `finished_at` timestamp // of the workflow. $workflow->markAsFinished(); // Cancels the workflow. This sets the `cancelled_at` timestamp of the // workflow and prevents any new jobs from being processed. $workflow->cancel();
You can access a workflow’s job via its
// Returns a `HasMany<WorkflowJob>` relation $workflow->jobs(); // Returns a `Collection<int, WorkflowJob>` $workflow->jobs;
WorkflowJob exposes the following methods to inspect and manipulate its state.
// Indicates if the workflow job is pending, i.e. is still waiting // to get processed $workflowJob->isPending(); // Indicates if the workflow job has been processed successfully $workflowJob->isFinished(); // Marks the job as finished. Venture calls this method after a job has been // processed successfully. $workflowJob->markAsFinished(); // Indicates if the workflow job has failed. If true, the `exception` field // of the job will contain the exception that caused the job to fail. $workflowJob->hasFailed(); // Marks the job as failed. Venture calls this method if an exception occurred // while processing a job. $workflowJob->markAsFailed($throwable); // Indicates if the workflow job is currently being processed by a // queue worker. $workflowJob->isProcessing(); // Marks the job as processing. Venture calls this method after the job // has been picked up by a queue worker. $workflowJob->markAsProcessing(); // Indicates if a job is ready to be dispatched. By default, this is true if // all of the job's dependencies have finished and the job is not marked as // gated. $workflowJob->canRun(); // Indicates if a job is waiting for manual approval. $workflowJob->isGated(); // Transitions a job to the next state. Venture calls this method each time // a job's dependency has finished. $workflowJob->transition(); // Manually starts a job. Will throw an exception if the job is already // being processed. $workflowJob->start(); // Retries the job after it has failed. Will throw an exception if the job // has not failed. $workflowJob->retry();