summaryrefslogtreecommitdiffstats
path: root/gearman
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
parentlsWorker (diff)
downloadpoolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.tar.gz
poolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.tar.xz
poolctrl-6b48c89d0b54a0430e612997f932886c6ee9905a.zip
ls job implemented
Diffstat (limited to 'gearman')
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Boot.java73
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/ClientJob.java1
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/ClientState.java42
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Shutdown.java64
-rw-r--r--gearman/lsWorker.py2
5 files changed, 158 insertions, 24 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Boot.java b/gearman/controllerWorker/ControllerWorker/Boot.java
index bac42e1..77b31a6 100755
--- a/gearman/controllerWorker/ControllerWorker/Boot.java
+++ b/gearman/controllerWorker/ControllerWorker/Boot.java
@@ -33,6 +33,7 @@ public class Boot extends Thread {
private long waitTime;
// private Vector<String> psWhitelist;
private Vector<String> psBlacklist;
+ private String scsavPID;
private final GearmanJobServerConnection gearmanConnection;
private GearmanClient gearmanClient;
@@ -176,6 +177,16 @@ public class Boot extends Thread {
checkPsProgress(client);
break;
+
+ case USERPROCESSES_ARE_RUNNING:
+ ls(client);
+
+ break;
+
+ case CHECK_LS_PROGRESS:
+ checkLsProgress(client);
+
+ break;
case RESTART_CLIENT:
restart(client);
@@ -658,9 +669,11 @@ public class Boot extends Thread {
if (user.isEmpty()) {
logger.info(client.getIp()
+ " no user is logged in -CHECK PS-");
- // no user is logged in, doing restart
- // -----
- // didn´t work in test-pool, check ps
+ /*
+ * no user is logged in, doing restart
+ * -----
+ * didn´t work in test-pool, check ps
+ */
client.setState(ClientState.A_USER_IS_LOGGED_IN,
gearmanClient);
client.removeJob(whoJob);
@@ -712,6 +725,7 @@ public class Boot extends Thread {
JSONObject resultObj = (JSONObject) JSONValue.parse(result);
if (!resultObj.containsKey("err")) {
JSONArray ps = (JSONArray) resultObj.get("ps");
+ scsavPID = resultObj.get("pid").toString();
// boolean whitelistFound = false;
boolean blacklistFound = false;
@@ -735,11 +749,13 @@ public class Boot extends Thread {
* client.removeClientJob(job); } else {
*/
logger.info(client.getIp() + " is working");
+ //client.setState(ClientState.USERPROCESSES_ARE_RUNNING,
client.setState(ClientState.USER_IS_WORKING,
gearmanClient);
client.removeJob(psJob);
// }
} else {
+ logger.info(client.getIp() + " is not working");
// user is not working, doing restart
client.setState(ClientState.RESTART_CLIENT,
gearmanClient);
@@ -760,6 +776,57 @@ public class Boot 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);
+ }
+ }
+ }
+ }
+ //------------------
private void restart(Client client) {
GearmanJob job = GearmanJobImpl.createJob("restart", client.getIp()
diff --git a/gearman/controllerWorker/ControllerWorker/ClientJob.java b/gearman/controllerWorker/ControllerWorker/ClientJob.java
index c4aa1e8..2b0bf16 100755
--- a/gearman/controllerWorker/ControllerWorker/ClientJob.java
+++ b/gearman/controllerWorker/ControllerWorker/ClientJob.java
@@ -10,6 +10,7 @@ public class ClientJob {
public static int PSJOB = 4;
public static int RESTARTJOB = 5;
public static int SHUTDOWNJOB = 6;
+ public static int LSJOB = 7;
private int JobType;
private GearmanJob gearmanJob;
diff --git a/gearman/controllerWorker/ControllerWorker/ClientState.java b/gearman/controllerWorker/ControllerWorker/ClientState.java
index 14e0eea..37aebca 100755
--- a/gearman/controllerWorker/ControllerWorker/ClientState.java
+++ b/gearman/controllerWorker/ControllerWorker/ClientState.java
@@ -16,30 +16,32 @@ public enum ClientState {
CHECK_RESTART_PROGRESS(10),
CHECK_PING_RESTART_SHUTDOWN_PROGRESS(11),
CHECK_PING_RESTART_BOOT_PROGRESS(12),
+ CHECK_LS_PROGRESS(13),
//job states
- CLIENT_IS_ALIVE(13),
- SHUTDOWN_CLIENT(14),
- SHUTDOWN_COMMAND_SENT(15),
- PING_SHUTDOWN_AGAIN(16),
- USER_IS_LOGGED_IN(17),
- USER_IS_WORKING(18),
- CLIENT_NOT_ALIVE(19),
- MAGIC_PACKET_SENT(20),
- PING_WOL_AGAIN(21),
- WRONG_OS(22),
- A_USER_IS_LOGGED_IN(23),
- RESTART_CLIENT(24),
- RESTART_COMMAND_SENT(25),
- PING_RESTART_SHUTDOWN_AGAIN(26),
- CLIENT_IS_DOWN(27),
- PING_RESTART_BOOT_AGAIN(28),
+ CLIENT_IS_ALIVE(14),
+ SHUTDOWN_CLIENT(15),
+ SHUTDOWN_COMMAND_SENT(16),
+ PING_SHUTDOWN_AGAIN(17),
+ USER_IS_LOGGED_IN(18),
+ USER_IS_WORKING(19),
+ CLIENT_NOT_ALIVE(20),
+ MAGIC_PACKET_SENT(21),
+ PING_WOL_AGAIN(22),
+ WRONG_OS(23),
+ A_USER_IS_LOGGED_IN(24),
+ RESTART_CLIENT(25),
+ RESTART_COMMAND_SENT(26),
+ PING_RESTART_SHUTDOWN_AGAIN(27),
+ CLIENT_IS_DOWN(28),
+ PING_RESTART_BOOT_AGAIN(29),
+ USERPROCESSES_ARE_RUNNING(30),
//final states
- BOOT_SUCCESS(29),
- BOOT_ERROR(30),
- SHUTDOWN_SUCCESS(31),
- SHUTDOWN_ERROR(32);
+ BOOT_SUCCESS(31),
+ BOOT_ERROR(32),
+ SHUTDOWN_SUCCESS(33),
+ SHUTDOWN_ERROR(34);
ClientState(int state) {
this.state = state;
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;
diff --git a/gearman/lsWorker.py b/gearman/lsWorker.py
index b619fb1..93c72e9 100644
--- a/gearman/lsWorker.py
+++ b/gearman/lsWorker.py
@@ -22,7 +22,7 @@ def lsWorker(worker, job):
user = "root"
sshopts = "-o PasswordAuthentication=no -a"
keyfile = "/etc/systemd/workers.ssh/id_rsa"
- remotecmd = "ls -al"
+ remotecmd = "ls -al /proc/"
cmd = "ssh -p {p} -l {l} -i {i} {o} {h} {r}".format(p=port, l=user, i=keyfile, o=sshopts, h=host, r=remotecmd)
print cmd