public void save_statistics() {
    /**
     * * There's a mistake here... we are saving total account wall time ** (i.e. the sum of account
     * wall times...which may have overlapped in time), ** instead of the walltime of the billrun. *
     */
    BICServerLog.debugMsg(
        "BillRunTabulator(" + billrun.get_billrunid() + ").save_statistics(): entered.");

    /**
     * * Compute total total wall time and total cpu time: ** sum the local and foreign times for
     * each. *
     */
    total_wall_time = total_local_wall_time + total_foreign_wall_time;
    total_cpu_time = total_local_cpu_time + total_foreign_cpu_time;

    try {
      AdminCatalogOpCenterDAO.save_billrun_stats(
          billrun.get_billrunid(),
          total_wall_time,
          total_cpu_time,
          num_todo,
          num_accounts_bip_succeeded,
          num_accounts_bip_failed,
          num_accounts_limboed,
          0,
          "Place your BillRun(" + billrun.get_billrunid() + ") commentary here.");
    } catch (Exception e) {
      BICServerLog.printStackTrace(e);
      BICServerLog.infoMsg(
          "BillRunTabulator("
              + billrun.get_billrunid()
              + ").save_statistics(): caught exception while saving the bill run statistics."
              + e);
    }

    /**
     * * Cannot save machine stats because the table BILLRUN_MACHINE_STATS ** does not contain the
     * hostname as a field in the table. *
     */
    // AdminCatalogOpCenterDAO.save_billrun_...
  }
  public void tally_accounts_bip_status(Collection accounts) {
    Account account;
    Iterator tour;

    BICServerLog.debugMsg(
        "BillRunTabulator("
            + billrun.get_billrunid()
            + ").tally_accounts_bip_status(): entered with accounts.size() = "
            + accounts.size());
    tour = accounts.iterator();
    while (tour.hasNext()) {
      account = (Account) tour.next();
      tally_account_bip_status(account);
    }
    return;
  }
  /**
   * Saves the walltime stats of the various phases of the BillRun. The reason why this couldn't be
   * called in save_statistics() method is because one of the things it saves is how long tabulating
   * takes. So these stats are saved after tabulating is done.
   */
  public void save_billrun_walltime_stats() {
    long billrun_lifespan;
    long billrun_lifespan_listing;
    long billrun_lifespan_estimating;
    long billrun_lifespan_bipping;
    long billrun_lifespan_tabulating;

    billrun_lifespan = note_billrun_lifespan();
    billrun_lifespan_listing = note_billrun_listing_lifespan();
    billrun_lifespan_estimating = note_billrun_estimating_lifespan();
    billrun_lifespan_bipping = note_billrun_bipping_lifespan();
    billrun_lifespan_tabulating = note_billrun_tabulating_lifespan();

    AdminCatalogOpCenterDAO.save_billrun_walltime_stats(
        billrun.get_billrunid(),
        billrun_lifespan,
        billrun_lifespan_listing,
        billrun_lifespan_estimating,
        billrun_lifespan_bipping,
        billrun_lifespan_tabulating);
  }