| await {civis} | R Documentation |
Call a function repeatedly until a status is reached.
Description
await repeatedly calls a Civis API endpoint such as scripts_get_sql_runs
that monitors the status of a script, job, import, or model. It blocks until the function
returns a result with a successful or error status.
If the script, job, import or model results in an error state,
await throws an error with useful debugging information.
await_all is a vectorized version of await. It repeatedly calls a Civis API endpoint for
all values of a vector, e.g. a vector of script, job, import, run, or model ids. It blocks until
all calls have returned a result with a given status, and silently captures jobs that return
errors.
Usage
await(
f,
...,
.status_key = "state",
.success_states = c("succeeded", "success"),
.error_states = c("failed", "cancelled"),
.timeout = NULL,
.interval = getOption("civis.default_polling_interval"),
.verbose = FALSE
)
await_all(
f,
.x,
.y = NULL,
...,
.status_key = "state",
.success_states = c("succeeded", "success"),
.error_states = c("failed", "cancelled"),
.timeout = NULL,
.interval = NULL,
.verbose = FALSE
)
Arguments
f |
function to be called repeatedly until a status is reached. |
... |
arguments to |
.status_key |
The name of the element of the list returned by |
.success_states |
list of states indicating remote work has completed successfully.
For most Civis API endpoints, this set of states is the default, |
.error_states |
list of states indicating remote work is in an error state. For most Civis
API endpoints, this set of states is the default, |
.timeout |
Number of seconds after which to timeout. |
.interval |
The interval for retries (in seconds). If |
.verbose |
Print the status of |
.x |
a vector of values to be passed to |
.y |
a vector of values to be passed to |
Details
await and await_all can wrap Civis API endpoints in generated_client.R.
The default values for .status_key, .success_states, and .error_states
are suitable for most endpoints. The final status of f can be obtained using
get_status.
If an error state is reached, await throws a civis_await_error.
await_all silently captures and returns a civis_await_error for any job
reaching an error state as an element in the list of results.
If .timeout is specified and the job fails to reach a success state
within the time limit, await throws a civis_timeout_error.
Likewise, await_all throws a civis_timeout_error if all jobs fail to
reach a success state within the time limit.
These errors can be caught using try or tryCatch.
Useful debugging information can be returned using get_error and fetch_logs.
The set of possible states for jobs on Civis platform are:
"succeeded", "success", "failed", "queued", "running",
and "cancelled".
Unless .interval is specified, retries are attempted with exponentially increasing intervals using
.25 * (1.2^i)) + runif(1, 0, .2), where i is the index of the current retry.
Approximate intervals for a given number of retries are as follows:
1-5: .5s
6-10: 1-5s
11-19: 5-10s
20-29: 10s - 1m
The polling interval can be set to a fixed value globally with
options("civis.default_polling_interval" = INTERVAL_IN_SECONDS).
Functions
-
await_all(): Call a function repeatedly for all values of a vector until all have reached a completed status
See Also
get_status, get_error, fetch_logs
Examples
## Not run:
# Executing a query
q_id <- queries_post(db_id, query, n_rows, cred_id)[["id"]]
r <- await(queries_get, id = q_id)
get_status(r)
r <- tryCatch(await(queries_get, id = q_id), error = function(e) e)
get_error(r)
r <- try(await(queries_get, id = q_id))
get_error(r)
jobs <- c(1234, 5678)
runs <- c(1234, 5678)
rs <- await_all(scripts_get_r_runs, .x = jobs, .y = runs)
## End(Not run)