code: def _run_hardware_metrics_reporting_thread(self):
      gauge_mode = GaugeMode.CGROUP if in_docker() else GaugeMode.SYSTEM
      metric_service = MetricServiceFactory(
          self._backend, os.environ
      ).create(
          gauge_mode=gauge_mode,
          experiment=self._experiment,
          reference_timestamp=time.time(),
      )
  
      self._hardware_metric_thread = HardwareMetricReportingThread(
          metric_service=metric_service,
          metric_sending_interval_seconds=10,
      )
      self._hardware_metric_thread.start()
  
imports: import logging
  import os
  import sys
  import time
  import traceback
  from logging import StreamHandler
  from neptune.common.hardware.gauges.gauge_mode import GaugeMode
  from neptune.common.hardware.metrics.service.metric_service_factory import MetricServiceFactory
  from neptune.common.utils import in_docker, is_ipython, is_notebook
  from neptune.legacy.internal.abort import CustomAbortImpl, DefaultAbortImpl
  from neptune.legacy.internal.channels.channels import ChannelNamespace
  from neptune.legacy.internal.streams.channel_writer import ChannelWriter
  from neptune.legacy.internal.streams.stdstream_uploader import StdErrWithUpload, StdOutWithUpload
  from neptune.legacy.internal.threads.aborting_thread import AbortingThread
  from neptune.legacy.internal.threads.hardware_metric_reporting_thread import HardwareMetricReportingThread
  from neptune.legacy.internal.threads.ping_thread import PingThread
label_desc: Use image node_id 7 for calling the ExecutionContext obj's underlying member method code with example usage: obj._run_hardware_metrics_reporting_thread() without return types