package org.ourgrid.worker.business.requester;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.worker.business.controller.IdlenessDetectorController;
import org.ourgrid.worker.business.dao.IdlenessDetectorDAO;
import org.ourgrid.worker.business.dao.WorkerDAOFactory;
import org.ourgrid.worker.request.MacOSIdlenessDetectorActionRequestTO;
public class MacOSIdlenessDetectorActionRequester
extends
AbstractScheduledIdlenessDetectorActionRequester<MacOSIdlenessDetectorActionRequestTO> {
private static final String IDLENESS_CMD_LOCATION = "/usr/share/ourgrid/idleness";
private boolean checkIdle() throws Exception {
IdlenessDetectorDAO idlenessDetectorDAO = WorkerDAOFactory
.getInstance().getIdlenessDetectorDAO();
Long idlenessTimeInSeconds = idlenessDetectorDAO.getIdlenessTime() / 1000;
ProcessBuilder pb = new ProcessBuilder(IDLENESS_CMD_LOCATION);
Process process = pb.start();
process.waitFor();
String idleTime = IOUtils.toString(process.getInputStream()).trim();
return Long.valueOf(idleTime) > idlenessTimeInSeconds;
}
@Override
public List<IResponseTO> execute(
MacOSIdlenessDetectorActionRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
if (isIdleNow()) {
IdlenessDetectorController.getInstance().resumeWorker(responses);
} else {
IdlenessDetectorController.getInstance().pauseWorker(responses);
}
return responses;
}
private boolean isIdleNow() {
IdlenessDetectorDAO idlenessDetectorDAO = WorkerDAOFactory.getInstance().getIdlenessDetectorDAO();
boolean isScheduledToBeIdle = super.isIdle();
if (!idlenessDetectorDAO.isActive()) {
return isScheduledToBeIdle;
}
try {
return checkIdle();
} catch (Exception e) {
return false;
}
}
}