code: def start(self, report, run_start_time=None):
      
      if not self.run_info:
        raise AssertionError('RunTracker.initialize must be called before RunTracker.start.')
  
      self.report = report
  
      # Set up the JsonReporter for V2 stats.
      if self.get_options().stats_version == 2:
        json_reporter_settings = JsonReporter.Settings(log_level=Report.INFO)
        self.json_reporter = JsonReporter(self, json_reporter_settings)
        report.add_reporter('json', self.json_reporter)
  
      self.report.open()
  
      # And create the workunit.
      self._main_root_workunit = WorkUnit(run_info_dir=self.run_info_dir, parent=None,
                                          name=RunTracker.DEFAULT_ROOT_NAME, cmd=None)
      self.register_thread(self._main_root_workunit)
      # Set the true start time in the case of e.g. the daemon.
      self._main_root_workunit.start(run_start_time)
      self.report.start_workunit(self._main_root_workunit)
  
      # Log reporting details.
      url = self.run_info.get_info('report_url')
      if url:
        self.log(Report.INFO, 'See a report at: {}'.format(url))
      else:
        self.log(Report.INFO, '(To run a reporting server: ./pants server)')
docs: Start tracking this pants run using the given Report.
  
      `RunTracker.initialize` must have been called first to create the run_info_dir and
      run_info. TODO: This lifecycle represents a delicate dance with the `Reporting.initialize`
      method, and portions of the `RunTracker` should likely move to `Reporting` instead.
  
      report: an instance of pants.reporting.Report.