class HeartbeatMonitor implements Runnable {

  public List<StatusCommand> generateStatusCommands(String hostname) throws AmbariException {
    List<StatusCommand> cmds = new ArrayList<>();

    for (Cluster cl : clusters.getClustersForHost(hostname)) {
      Map<String, DesiredConfig> desiredConfigs = cl.getDesiredConfigs();
      for (ServiceComponentHost sch : cl.getServiceComponentHosts(hostname)) {
        switch (sch.getState()) {
          case INIT:
          case INSTALLING:
          case STARTING:
          case STOPPING:
            //don't send commands until component is installed at least
            continue;
          default:
            StatusCommand statusCmd = createStatusCommand(hostname, cl, sch, desiredConfigs);
            cmds.add(statusCmd);
        }

      }
    }
    return cmds;
  }

  public  HeartbeatMonitor(Clusters clusters, ActionManager am,
                          int threadWakeupInterval, Injector injector);

}