def METHOD_NAME(project_name, latest_project_info_url, bucket):
  """Collects coverage information for all fuzz targets in the given project and
  the total stats for the project."""
  logs.log('Processing coverage for %s project.' % project_name)
  report_info = _read_json(latest_project_info_url)
  if not report_info:
    logs.log_warn('Skipping code coverage for %s project.' % project_name)
    return
  # Iterate through report_info['fuzzer_stats_dir'] and prepare
  # CoverageInformation entities for invididual fuzz targets.
  entities = []
  for fuzzer in storage.list_blobs(
      report_info['fuzzer_stats_dir'], recursive=False):
    fuzzer_stats = _process_fuzzer_stats(fuzzer, report_info, project_name,
                                         bucket)
    if fuzzer_stats:
      entities.append(fuzzer_stats)
  logs.log('Processed coverage for %d targets in %s project.' % (len(entities),
                                                                 project_name))
  # Prepare CoverageInformation entity for the total project stats.
  project_stats = _process_project_stats(report_info, project_name)
  if project_stats:
    entities.append(project_stats)
    ndb_utils.put_multi(entities)