/** @return LabStatus */
  public LabStatus GetLabStatus(boolean verbose) {
    final String methodName = "GetLabStatus";
    Logfile.WriteCalled(logLevel, STR_ClassName, methodName);

    LabStatus labStatus = new LabStatus(false, "");

    try {
      if (this.labExperimentEngines == null) {
        throw new NullPointerException(STRERR_LabExperimentEngines);
      }

      /*
       * Check lab status of each experiment engine
       */
      for (int unitId = 0; unitId < this.labManagement.getFarmSize(); unitId++) {
        LabExperimentEngine labExperimentEngine = this.labExperimentEngines[unitId];
        if (labExperimentEngine == null) {
          throw new NullPointerException(
              String.format(STRERR_LabExperimentEngineUnitId_arg, unitId));
        }

        /*
         * Keep a tally, add the LabStatusMessage only if the engine is online
         */
        LabStatus engineLabStatus = labExperimentEngine.GetLabStatus();
        labStatus.setOnline(labStatus.isOnline() || engineLabStatus.isOnline());
        String message;
        if (engineLabStatus.isOnline() == true) {

          /*
           * Check if the engine is currently running an experiment
           */
          int experimentId = labExperimentEngine.getExperimentId();
          if (experimentId > 0) {
            /*
             * It is, so include the experiment Id in the lab status message
             */
            message =
                String.format(
                    STRLOG_UnitIdExperimentIdLabStatusMessage_arg2,
                    unitId,
                    experimentId,
                    engineLabStatus.getLabStatusMessage());
          } else {
            message =
                String.format(
                    STRLOG_UnitIdLabStatusMessage_arg2,
                    unitId,
                    engineLabStatus.getLabStatusMessage());
          }
        } else {
          message =
              (verbose == true)
                  ? String.format(
                      STRLOG_UnitIdLabStatusMessage_arg2,
                      unitId,
                      engineLabStatus.getLabStatusMessage())
                  : "";
        }
        labStatus.setLabStatusMessage(labStatus.getLabStatusMessage() + message);
      }
    } catch (Exception ex) {
      Logfile.WriteError(ex.toString());
      labStatus.setLabStatusMessage(ex.toString());
    }

    Logfile.WriteCompleted(logLevel, STR_ClassName, methodName);

    return labStatus;
  }