def _generate_report()

in ilm/ilm_lib/dicom_store_lib.py [0:0]


  def _generate_report(self):
    """Generates report of storage class updates.

    Reports instances' updates and status (success, failure, still running) for
    each move rule and condition in ILM config.
    """
    self._compute_results()
    csv_separator = ','
    header = csv_separator.join([
        'from_storage_class',
        'to_storage_class',
        'condition',
        'rule_index',
        'condition_index',
        'succeeded',
        'failed',
        'unfinished',
    ])
    summarized_report_results = [header]
    detailed_report_results = [header]
    logging.info('Generating storage class updates report(s).')
    # TODO: Also add operation name.
    for rule_index, rule in enumerate(self._move_rules):
      from_storage_class = rule.from_storage_class
      to_storage_class = rule.to_storage_class
      for condition_index, condition in enumerate(rule.conditions):
        rule_id = ilm_types.MoveRuleId(
            rule_index=rule_index, condition_index=condition_index
        )
        if rule_id not in self._storage_class_results:
          continue
        condition_results = self._storage_class_results[rule_id]
        logging.info(
            'Instances moved from %s to %s due to %s (move rule %s, condition '
            '%s): %s succeeded, %s failed, %s unfinished',
            from_storage_class.value,
            to_storage_class.value,
            condition,
            rule_index,
            condition_index,
            condition_results.succeeded_count,
            condition_results.failed_count,
            condition_results.unfinished_count,
        )
        summarized_report_results.append(
            csv_separator.join([
                str(i)
                for i in [
                    from_storage_class.value,
                    to_storage_class.value,
                    condition,
                    rule_index,
                    condition_index,
                    condition_results.succeeded_count,
                    condition_results.failed_count,
                    condition_results.unfinished_count,
                ]
            ]),
        )
        if self._detailed_report:
          detailed_report_results.append(
              csv_separator.join([
                  str(i)
                  for i in [
                      from_storage_class.value,
                      to_storage_class.value,
                      condition,
                      rule_index,
                      condition_index,
                      f'"{condition_results.succeeded_instances}"',
                      f'"{condition_results.failed_instances}"',
                      f'"{condition_results.unfinished_instances}"',
                  ]
              ])
          )
    summarized_report_results_str = '\n'.join(summarized_report_results)
    pipeline_util.write_gcs_file(
        file_content=summarized_report_results_str,
        gcs_uri=self._summarized_report,
    )
    logging.info(
        'Wrote summarized report of updates to %s.', self._summarized_report
    )
    if self._detailed_report:
      detailed_report_results_str = '\n'.join(detailed_report_results)
      pipeline_util.write_gcs_file(
          file_content=detailed_report_results_str,
          gcs_uri=self._detailed_report,
      )
      logging.info(
          'Wrote detailed report of updates to %s.', self._detailed_report
      )