summaryrefslogtreecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/Boot.java
diff options
context:
space:
mode:
authorBjörn Geiger2011-07-27 11:07:08 +0200
committerBjörn Geiger2011-07-27 11:07:08 +0200
commitdeab5361bf7815924203af59b03b233e842241b7 (patch)
tree4c083c3c4d42ceb8834a241ff56b90b19c6e695a /gearman/controllerWorker/ControllerWorker/Boot.java
parentSomePingWorker korrigiert (diff)
downloadpoolctrl-deab5361bf7815924203af59b03b233e842241b7.tar.gz
poolctrl-deab5361bf7815924203af59b03b233e842241b7.tar.xz
poolctrl-deab5361bf7815924203af59b03b233e842241b7.zip
Stopping the Thread after all Clients have been finished
Diffstat (limited to 'gearman/controllerWorker/ControllerWorker/Boot.java')
-rw-r--r--gearman/controllerWorker/ControllerWorker/Boot.java66
1 files changed, 56 insertions, 10 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Boot.java b/gearman/controllerWorker/ControllerWorker/Boot.java
index 444c55c..031db60 100644
--- a/gearman/controllerWorker/ControllerWorker/Boot.java
+++ b/gearman/controllerWorker/ControllerWorker/Boot.java
@@ -2,12 +2,9 @@ package ControllerWorker;
import java.io.IOException;
import java.lang.Thread;
+import java.util.concurrent.ExecutionException;
import java.util.HashMap;
import java.util.Vector;
-import java.util.concurrent.ExecutionException;
-
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
import org.gearman.client.GearmanClient;
import org.gearman.client.GearmanClientImpl;
@@ -19,6 +16,9 @@ import org.gearman.common.GearmanJobServerConnection;
import org.gearman.common.GearmanNIOJobServerConnection;
import org.gearman.util.ByteUtils;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+
public class Boot extends Thread {
private Vector<HashMap<String, String>> clients;
private GearmanClient gearmanClient;
@@ -52,10 +52,11 @@ public class Boot extends Thread {
}
private void workerLoop() {
- while (true) {
+ Boolean run = true;
+ while (run) {
try {
beginTime = System.nanoTime();
- update();
+ run = update();
timeTaken = System.nanoTime() - beginTime;
timeLeft = (UPDATE_PERIOD - timeTaken) / 1000000;
if (timeLeft < 10)
@@ -65,32 +66,43 @@ public class Boot extends Thread {
e.printStackTrace();
}
}
+ System.out.println("Booting finished");
}
- private void update() throws IllegalStateException, IOException,
+ private Boolean update() throws IllegalStateException, IOException,
InterruptedException, ExecutionException {
+ Boolean finished = false;
+
for (HashMap<String, String> client : clients) {
String ipAddress = client.get("ip");
String macAddress = client.get("mac");
int clientID = Integer.parseInt(client.get("id"));
int status = STATUS.get(clientID);
+
switch (status) {
+
case 0:
ping(client);
+
break;
+
case 1:
GearmanJob pingJob = PING_JOBS.get(clientID);
+
if (pingJob != null) {
GearmanJobStatus jobStatus = gearmanClient
.getJobStatus(pingJob);
+
if (!jobStatus.isKnown() && pingJob.isDone()) {
GearmanJobResult pingJobRes = pingJob.get();
String result = ByteUtils.fromUTF8Bytes(pingJobRes
.getResults());
+
if (result != "") {
JSONObject resultObj = (JSONObject) JSONValue
.parse(result);
String alive = resultObj.get("alive").toString();
+
if (alive.equals("true")) {
System.out.println(ipAddress + " alive");
STATUS.put(clientID, 2); // alive
@@ -103,22 +115,30 @@ public class Boot extends Thread {
}
}
}
+
break;
+
case 2:
ssh(client);
+
break;
+
case 3:
wakeOnLan(client);
+
break;
+
case 4:
GearmanJob wolJob = WOL_JOBS.get(clientID);
if (wolJob != null) {
GearmanJobStatus jobStatus = gearmanClient
.getJobStatus(wolJob);
+
if (!jobStatus.isKnown() && wolJob.isDone()) {
GearmanJobResult wolJobRes = wolJob.get();
String result = ByteUtils.fromUTF8Bytes(wolJobRes
.getResults());
+
if (result.equals("Magic packet send.")) {
System.out
.println(macAddress + "Magic packet send");
@@ -127,45 +147,71 @@ public class Boot extends Thread {
}
}
}
+
break;
+
case 5:
+
break;
+
case 6:
+
break;
}
+
+ if (status == 20) {
+ finished = true;
+ } else {
+ finished = false;
+ }
+ }
+
+ if (finished) {
+ return false;
+ } else {
+ return true;
}
}
private void ping(HashMap<String, String> client) {
String ipAddress = client.get("ip");
int clientID = Integer.parseInt(client.get("id"));
+
GearmanJob job = GearmanJobImpl.createJob("ping", ipAddress.getBytes(),
"ping" + clientID);
- STATUS.put(clientID, 1); // ping started
gearmanClient.submit(job);
+
+ STATUS.put(clientID, 1); // ping started
PING_JOBS.put(clientID, job);
+
System.out.println("ping " + ipAddress);
}
private void wakeOnLan(HashMap<String, String> client) {
String macAddress = client.get("mac");
int clientID = Integer.parseInt(client.get("id"));
+
GearmanJob job = GearmanJobImpl.createJob("wol", macAddress.getBytes(),
"wol" + clientID);
- STATUS.put(clientID, 4); // wake on lan started
gearmanClient.submit(job);
+
+ STATUS.put(clientID, 4); // wake on lan started
WOL_JOBS.put(clientID, job);
+
System.out.println("wake on lan " + macAddress);
}
private void ssh(HashMap<String, String> client) {
String ipAddress = client.get("ip");
int clientID = Integer.parseInt(client.get("id"));
+
GearmanJob job = GearmanJobImpl.createJob("ssh", ipAddress.getBytes(),
"ssh" + clientID);
- STATUS.put(clientID, 6); // ssh started
gearmanClient.submit(job);
+
+ STATUS.put(clientID, 6); // ssh started
SSH_JOBS.put(clientID, job);
+
System.out.println("ssh " + ipAddress);
}
}