class_docstr: Uses datadog API to send metrics of practically anything measurable.
  
  It's possible to track # of db records inserted/deleted, records read
  from file and many other useful metrics.
  
  Depends on the datadog API, which has to be deployed on the same server where
  Airflow runs.
  
  :param datadog_conn_id: The connection to datadog, containing metadata for api keys.
class_docstr_tok: ["Uses","datadog","API","to","send","metrics","of","practically","anything","measurable",".","It","'s","possible","to","track","#","of","db","records","inserted\/deleted",",","records","read","from","file","and","many","other","useful","metrics",".","Depends","on","the","datadog","API",",","which","has","to","be","deployed","on","the","same","server","where","Airflow","runs",".",":","param","datadog_conn_id",":","The","connection","to","datadog",",","containing","metadata","for","api","keys","."]
code: def __init__(self, datadog_conn_id: str = "datadog_default") -> None:
      super().__init__()
      conn = self.get_connection(datadog_conn_id)
      self.api_key = conn.extra_dejson.get("api_key", None)
      self.app_key = conn.extra_dejson.get("app_key", None)
      self.api_host = conn.extra_dejson.get("api_host", None)
      self.source_type_name = conn.extra_dejson.get(
          "source_type_name", None
      )
  
      # If the host is populated, it will use that hostname instead.
      # for all metric submissions.
      self.host = conn.host
  
      if self.api_key is None:
          raise AirflowException(
              "api_key must be specified in the Datadog connection details"
          )
  
      self.log.info("Setting up api keys for Datadog")
      initialize(
          api_key=self.api_key,
          app_key=self.app_key,
          api_host=self.api_host,
      )
  
file_path: airflow/airflow/providers/datadog/hooks/datadog.py
imports: from __future__ import annotations
  import time
  from typing import Any
  from datadog import api, initialize
  from airflow.exceptions import AirflowException
  from airflow.hooks.base import BaseHook
  from airflow.utils.log.logging_mixin import LoggingMixin
label_desc: Use image node_id 1 to create a new DatadogHook object from inherited base classes: BaseHook, LoggingMixin with example: obj = DatadogHook(datadog_conn_id)