code: def _collect_metrics(repo, path, recursive, typ, xpath, branch):
      
      outs = [out for stage in repo.stages() for out in stage.outs]
  
      if path:
          try:
              outs = repo.find_outs_by_path(path, outs=outs, recursive=recursive)
          except OutputNotFoundError:
              logger.debug(
                  "stage file not for found for '{}' in branch '{}'".format(
                      path, branch
                  )
              )
              return []
  
      res = []
      for o in outs:
          if not o.metric:
              continue
  
          if not typ and isinstance(o.metric, dict):
              t = o.metric.get(o.PARAM_METRIC_TYPE, typ)
              x = o.metric.get(o.PARAM_METRIC_XPATH, xpath)
          else:
              t = typ
              x = xpath
  
          res.append((o, t, x))
  
      return res
docs: Gather all the metric outputs.
  
      Args:
          path (str): Path to a metric file or a directory.
          recursive (bool): If path is a directory, do a recursive search for
              metrics on the given path.
          typ (str): The type of metric to search for, could be one of the
              following (raw|json|tsv|htsv|csv|hcsv).
          xpath (str): Path to search for.
          branch (str): Branch to look up for metrics.
  
      Returns:
          list(tuple): (output, typ, xpath)
              - output:
              - typ:
              - xpath: