code: def start(self, container: "MetadataContainer"):
      gauge_mode = GaugeMode.CGROUP if in_docker() else GaugeMode.SYSTEM
      system_resource_info = SystemResourceInfoFactory(
          system_monitor=SystemMonitor(),
          gpu_monitor=GPUMonitor(),
          os_environ=os.environ,
      ).create(gauge_mode=gauge_mode)
      gauge_factory = GaugeFactory(gauge_mode=gauge_mode)
      metrics_factory = MetricsFactory(
          gauge_factory=gauge_factory,
          system_resource_info=system_resource_info,
      )
      metrics_container = metrics_factory.create_metrics_container()
      metric_reporter = MetricReporterFactory(time.time()).create(
          metrics=metrics_container.metrics()
      )
  
      for metric in metrics_container.metrics():
          self._gauges_in_resource[metric.resource_type] = len(
              metric.gauges
          )
  
      for metric in metrics_container.metrics():
          for gauge in metric.gauges:
              path = self.get_attribute_name(
                  metric.resource_type, gauge.name()
              )
              if not container.get_attribute(path):
                  container[path] = FloatSeries(
                      [],
                      min=metric.min_value,
                      max=metric.max_value,
                      unit=metric.unit,
                  )
  
      self._thread = self.ReportingThread(
          self, self._period, container, metric_reporter
      )
      self._thread.start()
      self._started = True
  
imports: import logging
  import os
  import time
  from itertools import groupby
  from typing import TYPE_CHECKING, Dict, Optional
  from neptune.common.hardware.gauges.gauge_factory import GaugeFactory
  from neptune.common.hardware.gauges.gauge_mode import GaugeMode
  from neptune.common.hardware.metrics.metrics_factory import MetricsFactory
  from neptune.common.hardware.metrics.reports.metric_reporter import MetricReporter
  from neptune.common.hardware.metrics.reports.metric_reporter_factory import MetricReporterFactory
  from neptune.common.hardware.resources.system_resource_info_factory import SystemResourceInfoFactory
  from neptune.common.hardware.system.system_monitor import SystemMonitor
  from neptune.common.utils import in_docker
  from neptune.internal.background_job import BackgroundJob
  from neptune.internal.hardware.gpu.gpu_monitor import GPUMonitor
  from neptune.internal.threading.daemon import Daemon
  from neptune.types.series import FloatSeries
label_desc: Use image node_id 2 for calling the HardwareMetricReportingJob obj's underlying member method code with example usage: obj.start(container) without return types