# Inspecting flow runs
For monitoring flow runs from the UI, see the UI documentation on flow runs.
# Python
The Prefect Core library provides an object for inspecting flow runs without writing queries at prefect.backend.FlowRunView
.
# Creating a FlowRunView
A FlowRunView
can be created using the from_flow_run_id
class method. This methods will query for flow run information and populate a FlowRunView
instance.
from prefect.backend import FlowRunView
flow_run = FlowRunView.from_flow_run_id("4c0101af-c6bb-4b96-8661-63a5bbfb5596")
Immutability
FlowRunView
objects are views of the backend Flow Run
at the time of the view's creation.
They will not retrieve the newest information each time you access their properties.
To get the newest data for a flow run, use flow_run = flow_run.get_latest()
which will return a new FlowRunView
instance.
# Getting flow run states
The state of the flow run is accessible using the .state
property
flow_run.state
# <Success: "All reference tasks succeeded.">
This state object is deserialized into the Prefect Core State
type, which provides some helpful utilities
flow_run.state.is_finished()
# True
flow_run.state.is_running()
# False
flow_run.state.message
# 'All reference tasks succeeded.'
# Getting flow run logs
Get a List of FlowRunLog
from the flow run using .get_logs()
:
flow_run.get_logs()
# [
# FlowRunLog(timestamp=DateTime(1978, 03, 08, 22, 30, 00, 000000, tzinfo=Timezone('+00:00')), level=20, message='Submitted for execution: Task XXXXXXX'),
# FlowRunLog(timestamp=DateTime(1978, 03, 08, 22, 30, 01, 123456, tzinfo=Timezone('+00:00')), level=20, message="Beginning Flow run for 'radio_show'"),
# FlowRunLog(timestamp=DateTime(1978, 03, 08, 22, 30, 02, 234567, tzinfo=Timezone('+00:00')), level=20, message="Task 'series_one': Starting task run..."),
# FlowRunLog(timestamp=DateTime(1978, 03, 08, 22, 42, 42, 424242, tzinfo=Timezone('+00:00')), level=20, message='It feels like I just had my brains smashed out by a slice of lemon wrapped round a large gold brick.'),
# FlowRunLog(timestamp=DateTime(1978, 04, 12, 22, 59, 59, 987654, tzinfo=Timezone('+00:00')), level=20, message="Task 'series_one': Finished task run for task with final state: 'Success'"),
# FlowRunLog(timestamp=DateTime(1978, 04, 12, 23, 00, 00, 000000, tzinfo=Timezone('+00:00')), level=20, message='Flow run SUCCESS: all reference tasks succeeded')
# ]
Each FlowRunLog
in the list contains a log message, along with the log level and timestamp.
# Getting flow metadata
Metadata about the flow that the flow run was created for is accessible using .get_flow_metadata()
flow_run.get_flow_metadata()
# FlowView(
# flow_id='8bdcf5b5-7598-49d1-a885-61612ca550de',
# name='hello-world',
# project_name='default',
# storage_type=Module
# )
This object contains the metadata that the Prefect backend stores about your flow at registration time. See the reference documentation for more details.
Flow metadata caching
Flow metadata is lazily loaded by request then cached in the FlowRunView
for later access.
This means the first call requires network IO but future calls are instant.
If you want to force the FlowView
to be reloaded, pass no_cache=True
.
# Getting flow task runs
The FlowRunView
allows you to access task runs from the flow run by task_run_id
or slug
.
This will run a query to retrieve the task run of interest and store the result in a TaskRunView
.
task_run = flow_run.get_task_run(task_slug='say_hello-1')
# TaskRunView(
# task_run_id='c8751f34-9d5e-4ea7-aead-8b50978dabb7',
# task_id='34b0dd2d-582e-4f0a-923d-63daf1e38fe5',
# task_slug='say_hello-1',
# state=<Success: "Task run succeeded.">,
# result=<not loaded>
# )
Task run caching
When a task run is retrieved, if it is in a finished state, it will be cached in the FlowRunView
.
This reduces the number of calls to the backend API.
When you use flow_run.get_latest()
, these cached tasks are preserved.
Listing task run ids
All of the task run ids for a flow run can be retrieved using the .task_run_ids
property.
This will run a query against the backend.
flow_run.task_run_ids
# ['c8751f34-9d5e-4ea7-aead-8b50978dabb7',
# 'f5f422f6-4f56-45d2-bd55-5ea048070d84',
# '7cc167d3-737d-4187-85d8-d5e5a75fbd93']
:::
For more details on the TaskRunView
, see the task runs documentation.
# GraphQL
# Querying for a single flow run
You can query for a flow run by any of its properties. Here's a query using the flow run name
query {
flow_run(where: {name: {_eq: "woodoo-leopard"}}) {
id
state
start_time
}
}
Example response
{
"data": {
"flow_run": [
{
"id": "8e445d74-9ca6-425b-98e5-72754b7ea174",
"state": "Success",
"start_time": "2021-05-12T17:59:56.383629+00:00"
}
]
}
}
Note that the response returns a list
in the flow_run
section because your query could return multiple results if the name is not unique.