package org.ourgrid.worker.business.requester; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; 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.LinuxIdlenessDetectorActionRequestTO; public class LinuxXSessionIdlenessDetectorActionRequester extends AbstractScheduledIdlenessDetectorActionRequester<LinuxIdlenessDetectorActionRequestTO> { private Date lastModification; private String xSessionIdlenessFile; public List<IResponseTO> execute( LinuxIdlenessDetectorActionRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); xSessionIdlenessFile = request.getXIdleTimeLibPath(); if (isIdle(responses)) { IdlenessDetectorController.getInstance().resumeWorker(responses); } else { IdlenessDetectorController.getInstance().pauseWorker(responses); } return responses; } @SuppressWarnings("unchecked") private Date getLastInput() { File idlenessDetectorFile = new File(xSessionIdlenessFile); Date lastInput = null; if (!idlenessDetectorFile.exists()) { return getLastModification(); } List<String> idlenessFileContent = null; try { idlenessFileContent = IOUtils.readLines(new FileInputStream( idlenessDetectorFile)); } catch (IOException e) { return getLastModification(); } if (idlenessFileContent.isEmpty()) { return getLastModification(); } String idlenessDataStr = idlenessFileContent.get(0); String[] idlenessData = idlenessDataStr.split(";"); if (idlenessData.length != 2) { return getLastModification(); } lastModification = new Date(Long.parseLong(idlenessData[0]) * 1000); Long idleTime = Long.parseLong(idlenessData[1]); lastInput = new Date(lastModification.getTime() - idleTime); return lastInput; } public Date getLastModification() { if (lastModification == null) { lastModification = new Date(); } return lastModification; } private boolean isIdle(List<IResponseTO> responses) { IdlenessDetectorDAO idlenessDetectorDAO = WorkerDAOFactory .getInstance().getIdlenessDetectorDAO(); Date now = new Date(); long idlenessTime = idlenessDetectorDAO.getIdlenessTime(); long idleTime = now.getTime() - getLastInput().getTime(); return (idleTime >= idlenessTime); } }