Lightning.Invocation (Lightning v2.16.2)
View SourceThe Invocation context.
Summary
Functions
Return all logs for a step as a string of text, separated by new line breaks
Returns an %Ecto.Changeset{} for tracking dataclip changes.
Returns an %Ecto.Changeset{} for tracking step changes.
Creates a dataclip.
Deletes a dataclip.
Exports work orders by performing a series of database operations wrapped in a transaction.
Gets a single dataclip given one of
Gets a single dataclip.
Query for retrieving the dataclip that was step's starting dataclip.
Returns the dataclip that the scheduler will use for the next cron run of the given trigger. Branches on cron_cursor_job_id.
Query for retrieving the dataclip that was the result of a successful step.
Get a run with all its steps preloaded, including work_order and workflow for authorization checks.
Gets a single step.
Gets a step by ID with its input and output dataclips preloaded. Returns nil if step not found.
Fetches a step and preloads the job via the step's event.
Returns the final dataclip from the last successful run for a trigger's workflow. Used when cron_cursor_job_id is nil (use final run state).
Returns the output dataclip from the last successful step for a job. Used when cron_cursor_job_id is set to a specific job.
Returns the list of dataclips.
Lists dataclips for a job, including next cron run state if cron-triggered.
Returns the list of steps.
Return all logs for a step as a list
Searches for work orders based on project and search parameters.
Returns work orders matching the search params that have cancellable (available) runs. Unlike retry, does not filter on wiped dataclips since cancellation doesn't need the dataclip.
Updates a dataclip.
Functions
@spec assemble_logs_for_job_and_run(Ecto.UUID.t(), Ecto.UUID.t()) :: binary()
@spec assemble_logs_for_step(Lightning.Invocation.Step.t()) :: binary()
Return all logs for a step as a string of text, separated by new line breaks
Returns an %Ecto.Changeset{} for tracking dataclip changes.
Examples
iex> change_dataclip(dataclip)
%Ecto.Changeset{data: %Dataclip{}}
Returns an %Ecto.Changeset{} for tracking step changes.
Examples
iex> change_step(step)
%Ecto.Changeset{data: %Step{}}
@spec create_dataclip(attrs :: map()) :: {:ok, Lightning.Invocation.Dataclip.t()} | {:error, Ecto.Changeset.t(Lightning.Invocation.Dataclip)}
Creates a dataclip.
Examples
iex> create_dataclip(%{field: value})
{:ok, %Dataclip{}}
iex> create_dataclip(%{field: bad_value})
{:error, %Ecto.Changeset{}}
Deletes a dataclip.
Examples
iex> delete_dataclip(dataclip)
{:ok, %Dataclip{}}
iex> delete_dataclip(dataclip)
{:error, %Ecto.Changeset{}}
Exports work orders by performing a series of database operations wrapped in a transaction.
This function creates an audit log, a project file record, and enqueues an export job using a transaction.
Each step is executed as part of an Ecto.Multi operation, ensuring atomicity.
Parameters
project- The project for which work orders are being exported. Expected to be a map or struct with anidfield.user- The user initiating the export operation. Expected to be a map or struct with anidfield.search_params- A map of search parameters used to filter work orders to export.
Returns
{:ok, %{audit: audit, project_file: project_file, export_job: job}}on success:audit: The audit log entry created for the export operation.project_file: The project file record created for the export operation.export_job: The result of the export job enqueuing step.
{:error, step, reason, changes}if any step in the transaction fails:step: The step where the error occurred, e.g.,:audit,:project_file, or:export_job.reason: The reason for the failure, typically an error atom.changes: A map of changes up to the point of failure.
@spec get_dataclip(step_or_uuid :: Lightning.Invocation.Step.t() | Ecto.UUID.t()) :: Lightning.Invocation.Dataclip.t() | nil
Gets a single dataclip given one of:
- a Dataclip uuid
- a Step model
Returns nil if the Dataclip does not exist.
Examples
iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
%Dataclip{}
iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
nil
iex> get_dataclip(%Step{id: "a uuid"})
%Dataclip{}
@spec get_dataclip!(id :: Ecto.UUID.t()) :: Lightning.Invocation.Dataclip.t()
Gets a single dataclip.
Raises Ecto.NoResultsError if the Dataclip does not exist.
Examples
iex> get_dataclip!(123)
%Dataclip{}
iex> get_dataclip!(456)
** (Ecto.NoResultsError)
@spec get_dataclip_for_run(run_id :: Ecto.UUID.t()) :: Lightning.Invocation.Dataclip.t() | nil
Query for retrieving the dataclip that was step's starting dataclip.
@spec get_dataclip_with_body!(id :: Ecto.UUID.t()) :: %{ body_json: String.t(), type: atom(), id: Ecto.UUID.t(), updated_at: DateTime.t() }
@spec get_first_dataclip_for_run_and_job( run_id :: Ecto.UUID.t(), job_id :: Ecto.UUID.t() ) :: Lightning.Invocation.Dataclip.t() | nil
@spec get_first_step_for_run_and_job( run_id :: Ecto.UUID.t(), job_id :: Ecto.UUID.t() ) :: Lightning.Invocation.Step.t() | nil
Returns the dataclip that the scheduler will use for the next cron run of the given trigger. Branches on cron_cursor_job_id.
Query for retrieving the dataclip that was the result of a successful step.
Get a run with all its steps preloaded, including work_order and workflow for authorization checks.
@spec get_step!(Ecto.UUID.t()) :: Lightning.Invocation.Step.t()
Gets a single step.
Raises Ecto.NoResultsError if the Step does not exist.
Examples
iex> get_step!(123)
%Step{}
iex> get_step!(456)
** (Ecto.NoResultsError)
@spec get_step_count_for_run(run_id :: Ecto.UUID.t()) :: non_neg_integer()
@spec get_step_with_dataclips(Ecto.UUID.t()) :: Lightning.Invocation.Step.t() | nil
Gets a step by ID with its input and output dataclips preloaded. Returns nil if step not found.
Note: Dataclip body fields have load_in_query: false for performance,
so we use a custom preload query to explicitly select the body field.
Fetches a step and preloads the job via the step's event.
Returns the final dataclip from the last successful run for a trigger's workflow. Used when cron_cursor_job_id is nil (use final run state).
Scopes by workflow (not trigger) so that manual runs are also considered.
Returns the output dataclip from the last successful step for a job. Used when cron_cursor_job_id is set to a specific job.
@spec list_dataclips() :: [Lightning.Invocation.Dataclip.t()]
Returns the list of dataclips.
Examples
iex> list_dataclips()
[%Dataclip{}, ...]
@spec list_dataclips(Lightning.Projects.Project.t()) :: [ Lightning.Invocation.Dataclip.t() ]
@spec list_dataclips_for_job(Lightning.Workflows.Job.t(), limit :: pos_integer()) :: [ Lightning.Invocation.Dataclip.t() ]
@spec list_dataclips_for_job( Lightning.Workflows.Job.t(), user_filters :: map(), opts :: Keyword.t() ) :: [Lightning.Invocation.Dataclip.t()]
@spec list_dataclips_for_job_with_cron_state( Lightning.Workflows.Job.t(), user_filters :: map(), opts :: Keyword.t() ) :: {[Lightning.Invocation.Dataclip.t()], Ecto.UUID.t() | nil}
Lists dataclips for a job, including next cron run state if cron-triggered.
For cron-triggered jobs, this function will include the next run state dataclip and return its ID even if it doesn't match the filters.
Returns a tuple of {dataclips, next_cron_run_dataclip_id}.
@spec list_dataclips_query(Lightning.Projects.Project.t()) :: Ecto.Queryable.t()
Returns the list of steps.
Examples
iex> list_steps()
[%Step{}, ...]
@spec list_steps_for_project(Lightning.Projects.Project.t(), keyword() | map()) :: Scrivener.Page.t()
@spec list_steps_for_project_query(Lightning.Projects.Project.t()) :: Ecto.Query.t()
@spec logs_for_step(Lightning.Invocation.Step.t()) :: list()
Return all logs for a step as a list
Searches for work orders based on project and search parameters.
Parameters:
project: The project to filter the work orders by.search_params: The parameters to guide the search.
Returns:
A paginated list of work orders that match the criteria.
Example:
search_workorders(%Project{id: 1}, %SearchParams{status: ["completed"]})
@spec search_workorders( Lightning.Projects.Project.t(), Lightning.WorkOrders.SearchParams.t(), keyword() | map() ) :: Scrivener.Page.t(Lightning.WorkOrder.t())
Returns work orders matching the search params that have cancellable (available) runs. Unlike retry, does not filter on wiped dataclips since cancellation doesn't need the dataclip.
Updates a dataclip.
Examples
iex> update_dataclip(dataclip, %{field: new_value})
{:ok, %Dataclip{}}
iex> update_dataclip(dataclip, %{field: bad_value})
{:error, %Ecto.Changeset{}}
@spec update_dataclip_name( Lightning.Invocation.Dataclip.t(), String.t() | nil, Lightning.Accounts.User.t() ) :: {:ok, Lightning.Invocation.Dataclip.t()} | {:error, Ecto.Changeset.t()}