summaryrefslogtreecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/Shutdown.java
diff options
context:
space:
mode:
authorSebastian Wagner2011-10-17 14:46:27 +0200
committerSebastian Wagner2011-10-17 14:46:27 +0200
commit6b48c89d0b54a0430e612997f932886c6ee9905a (patch)
treebf3be453ab356e57901c346c0f242db8e9af25bd /gearman/controllerWorker/ControllerWorker/Shutdown.java
parentlsWorker (diff)
downloadpoolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.tar.gz
poolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.tar.xz
poolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.zip
ls job implemented
Diffstat (limited to 'gearman/controllerWorker/ControllerWorker/Shutdown.java')
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Shutdown.java64
1 files changed, 64 insertions, 0 deletions
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<String> psWhitelist;
private Vector<String> 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;