code: def host_impl(self, run, tool):
      
      hosts = {}
      run_dir = self._run_dir(run)
      if not run_dir:
        logger.warn("Cannot find asset directory for: %s", run)
        return hosts
      tool_pattern = '*' + TOOLS[tool]
      try:
        files = tf.io.gfile.glob(os.path.join(run_dir, tool_pattern))
        hosts = [os.path.basename(f).replace(TOOLS[tool], '') for f in files]
      except tf.errors.OpError as e:
        logger.warn("Cannot read asset directory: %s, OpError %s",
                        run_dir, e)
      return hosts
docs: Returns available hosts for the run and tool in the log directory.
  
      In the plugin log directory, each directory contains profile data for a
      single run (identified by the directory name), and files in the run
      directory contains data for different tools and hosts. The file that
      contains profile for a specific tool "x" will have a prefix name TOOLS["x"].
  
      Example:
        log/
          run1/
            plugins/
              profile/
                host1.trace
                host2.trace
          run2/
            plugins/
              profile/
                host1.trace
                host2.trace
  
      Returns:
        A list of host names e.g.
          {"host1", "host2", "host3"} for the example.