mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-10-31 18:59:23 +00:00 
			
		
		
		
	 eda1db081b
			
		
	
	
		eda1db081b
		
			
		
	
	
	
	
		
			
			Co-authored-by: John Joyce <john@Johns-MacBook-Pro.local> Co-authored-by: John Joyce <john@ip-10-0-0-48.us-west-2.compute.internal> Co-authored-by: John Joyce <john@Johns-MBP-432.lan> Co-authored-by: John Joyce <john@ip-192-168-1-200.us-west-2.compute.internal> Co-authored-by: John Joyce <john@Johns-MBP.lan>
		
			
				
	
	
		
			164 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| import Tabs from '@theme/Tabs';
 | |
| import TabItem from '@theme/TabItem';
 | |
| 
 | |
| # Incidents
 | |
| 
 | |
| ## Why Would You Use Incidents APIs?
 | |
| 
 | |
| The Incidents APIs allow you to raise, retrieve, update and resolve data incidents via API. This is 
 | |
| useful for raising or resolving data incidents programmatically, for example from Airflow, Prefect, or Dagster DAGs.
 | |
| Incidents are also useful for conditional Circuit Breaking in these pipelines. 
 | |
| 
 | |
| ### Goal Of This Guide
 | |
| 
 | |
| This guide will show you how to raise, retrieve, update and resolve data incidents via API.
 | |
| 
 | |
| ## Prerequisites
 | |
| 
 | |
| The actor making API calls must have the `Edit Incidents` privileges for the Tables at hand.
 | |
| 
 | |
| ## Raise Incident
 | |
| 
 | |
| You can raise a new Data Incident for an existing asset using the following APIs. 
 | |
| 
 | |
| <Tabs>
 | |
| <TabItem value="graphql" label="GraphQL" default>
 | |
| 
 | |
| ```graphql
 | |
| mutation raiseIncident {
 | |
|   raiseIncident(
 | |
|       input: { 
 | |
|           resourceUrn: "urn:li:dataset:(urn:li:dataPlatform:snowflake,public.prod.purchases,PROD)",
 | |
|           type: OPERATIONAL,
 | |
|           title: "Data is Delayed",
 | |
|           description: "Data is delayed on May 15, 2024 because of downtime in the Spark Cluster.",
 | |
|       }
 | |
|   )
 | |
| }
 | |
| ```
 | |
| 
 | |
| Where `resourceUrn` is the unique identifier for the data asset (dataset, dashboard, chart, data job, or data flow) you want to raise the incident on. 
 | |
| 
 | |
| Where supported Incident Types include
 | |
| 
 | |
| - `OPERATIONAL`
 | |
| - `FRESHNESS`
 | |
| - `VOLUME`
 | |
| - `COLUMN`
 | |
| - `SQL`
 | |
| - `DATA_SCHEMA`
 | |
| - `CUSTOM`
 | |
| 
 | |
| If you see the following response, a unique identifier for the new incident will be returned. 
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "data": {
 | |
|     "raiseIncident": "urn:li:incident:new-incident-id"
 | |
|   },
 | |
|   "extensions": {}
 | |
| }
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| 
 | |
| <TabItem value="python" label="Python">
 | |
| 
 | |
| ```
 | |
| Python SDK support coming soon!
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| 
 | |
| </Tabs>
 | |
| 
 | |
| ## Get Incidents For Data Asset
 | |
| 
 | |
| You can use retrieve the incidents and their statuses for a given Data Asset using the following APIs. 
 | |
| 
 | |
| <Tabs>
 | |
| <TabItem value="graphql" label="GraphQL" default>
 | |
| 
 | |
| ```graphql
 | |
| query getAssetIncidents {
 | |
|     dataset(urn: "urn:li:dataset:(urn:li:dataPlatform:snowflake,public.prod.purchases,PROD)") {
 | |
|         incidents(
 | |
|             state: ACTIVE, start: 0, count: 20
 | |
|         ) {
 | |
|             start
 | |
|             count
 | |
|             total
 | |
|             incidents {
 | |
|                 urn
 | |
|                 incidentType
 | |
|                 title
 | |
|                 description
 | |
|                 status {
 | |
|                     state
 | |
|                     lastUpdated {
 | |
|                         time
 | |
|                         actor
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| Where you can filter for active incidents by passing the `ACTIVE` state and resolved incidents by passing the `RESOLVED` state.
 | |
| This will return all relevant incidents for the dataset.
 | |
| 
 | |
| </TabItem>
 | |
| 
 | |
| <TabItem value="python" label="Python">
 | |
| 
 | |
| ```
 | |
| Python SDK support coming soon!
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| </Tabs>
 | |
| 
 | |
| 
 | |
| ## Resolve Incidents
 | |
| 
 | |
| You can update the status of an incident using the following APIs. 
 | |
| 
 | |
| <Tabs>
 | |
| <TabItem value="graphql" label="GraphQL" default>
 | |
| 
 | |
| ```graphql
 | |
| mutation updateIncidentStatus {
 | |
|     updateIncidentStatus(
 | |
|         input: { 
 | |
|             state: RESOLVED,
 | |
|             message: "The delayed data issue was resolved at 4:55pm on May 15."
 | |
|         }
 | |
|     )
 | |
| }
 | |
| ```
 | |
| 
 | |
| You can also reopen an incident by updating the state from `RESOLVED` to `ACTIVE`.
 | |
| 
 | |
| If you see the following response, the operation was successful:
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "data": {
 | |
|     "updateIncidentStatus": true
 | |
|   },
 | |
|   "extensions": {}
 | |
| }
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| 
 | |
| <TabItem value="python" label="Python">
 | |
| 
 | |
| ```
 | |
| Python SDK support coming soon!
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| </Tabs> |