From 6b48c89d0b54a0430e612997f932886c6ee9905a Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Mon, 17 Oct 2011 14:46:27 +0200 Subject: ls job implemented --- .../ControllerWorker/Shutdown.java | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'gearman/controllerWorker/ControllerWorker/Shutdown.java') diff --git a/gearman/controllerWorker/ControllerWorker/Shutdown.java b/gearman/controllerWorker/ControllerWorker/Shutdown.java index 63ecd42..fda54e0 100755 --- a/gearman/controllerWorker/ControllerWorker/Shutdown.java +++ b/gearman/controllerWorker/ControllerWorker/Shutdown.java @@ -32,6 +32,7 @@ public class Shutdown extends Thread { private long waitTime; // private Vector psWhitelist; private Vector psBlacklist; + private String scsavPID; private final GearmanJobServerConnection gearmanConnection; private GearmanClient gearmanClient; @@ -161,6 +162,16 @@ public class Shutdown extends Thread { checkPsProgress(client); break; + + case USERPROCESSES_ARE_RUNNING: + ls(client); + + break; + + case CHECK_LS_PROGRESS: + checkLsProgress(client); + + break; case USER_IS_WORKING: logger.error(client.getIp() + " User has been working"); @@ -494,6 +505,8 @@ public class Shutdown extends Thread { * * } else { */ + logger.info(client.getIp() + " is working"); + //client.setState(ClientState.USERPROCESSES_ARE_RUNNING, client.setState(ClientState.USER_IS_WORKING, gearmanClient); client.removeJob(psJob); @@ -521,6 +534,57 @@ public class Shutdown extends Thread { } } } + + // screensaver check + private void ls(Client client) { + GearmanJob job = GearmanJobImpl.createJob("ls", client.getIp() + .getBytes(), "ls" + client.getId()); + gearmanClient.submit(job); + client.setState(ClientState.CHECK_LS_PROGRESS, gearmanClient); + client.addJob(ClientJob.LSJOB, job); + logger.info("ls " + client.getIp()); + } + + private void checkLsProgress(Client client) throws Exception, IOException { + GearmanJob lsJob = client.getJob(ClientJob.LSJOB); + + if (lsJob != null) { + GearmanJobStatus jobStatus = gearmanClient.getJobStatus(lsJob); + + if (!jobStatus.isKnown() && lsJob.isDone()) { + GearmanJobResult psJobRes = lsJob.get(); + String result = ByteUtils.fromUTF8Bytes(psJobRes.getResults()); + + if (!result.isEmpty()) { + JSONObject resultObj = (JSONObject) JSONValue.parse(result); + if (!resultObj.containsKey("err")) { + /* + String clientScreenSaver = resultObj.get(scsavPID) + .toString() + + " " + resultObj.get("date").toString(); + + //check screensaver has been running longer than 30min/1h + if(clientScreenSaver < 30) { + client.setState(ClientState.USER_IS_WORKING, gearmanClient); + client.removeJob(lsJob); + } else { + client.setState(ClientState.RESTART_CLIENT, gearmanClient); + client.removeJob(lsJob); + + }*/ + } + } else { + logger.error(client.getIp() + " Cannot check 'ls -al' of /proc/"); + client + .setError("The check for screensaver has been failed."); + // cannot check ls, go in errorState + client.setState(ClientState.BOOT_ERROR, gearmanClient); + client.removeJob(lsJob); + } + } + } + } + //------------------ public Boolean isFinished() { return finished && !error; -- cgit v1.2.3-55-g7522