code: def _record_telemetry_if_needed(self):
      # Record telemetry once per handle and not when used from the proxy
      # (detected via request protocol).
      if (
          not self._recorded_telemetry
          and self.handle_options._request_protocol
          == RequestProtocol.UNDEFINED
      ):
          if self.__class__ == DeploymentHandle:
              ServeUsageTag.DEPLOYMENT_HANDLE_API_USED.record("1")
          elif self.__class__ == RayServeHandle:
              ServeUsageTag.RAY_SERVE_HANDLE_API_USED.record("1")
          else:
              ServeUsageTag.RAY_SERVE_SYNC_HANDLE_API_USED.record("1")
  
          self._recorded_telemetry = True
  
imports: import asyncio
  import concurrent.futures
  import threading
  import warnings
  from dataclasses import dataclass
  from typing import Any, AsyncIterator, Dict, Iterator, Optional, Tuple, Union
  import ray
  from ray import serve
  from ray._raylet import GcsClient, ObjectRefGenerator
  from ray.serve._private.common import DeploymentID, RequestProtocol
  from ray.serve._private.default_impl import create_cluster_node_info_cache
  from ray.serve._private.router import RequestMetadata, Router
  from ray.serve._private.usage import ServeUsageTag
  from ray.serve._private.utils import DEFAULT, get_current_actor_id, get_random_string, is_running_in_asyncio_loop
  from ray.util import metrics
  from ray.util.annotations import Deprecated, DeveloperAPI, PublicAPI
label_desc: Use image node_id 2 for calling the _DeploymentHandleBase obj's underlying member method code with example usage: obj._record_telemetry_if_needed() without return types