summaryrefslogtreecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/Shutdown.java
diff options
context:
space:
mode:
authorBjörn Geiger2011-07-27 12:57:56 +0200
committerBjörn Geiger2011-07-27 12:57:56 +0200
commit215a85c786bcbfdf4f57fb3c8917fd1706d3e92a (patch)
tree0509582811eaab052daee8d65f9652bd562ee505 /gearman/controllerWorker/ControllerWorker/Shutdown.java
parentkleinen fehler korrigiert (diff)
downloadpoolctrl-215a85c786bcbfdf4f57fb3c8917fd1706d3e92a.tar.gz
poolctrl-215a85c786bcbfdf4f57fb3c8917fd1706d3e92a.tar.xz
poolctrl-215a85c786bcbfdf4f57fb3c8917fd1706d3e92a.zip
Shutdown hinzugefügt
Diffstat (limited to 'gearman/controllerWorker/ControllerWorker/Shutdown.java')
-rw-r--r--gearman/controllerWorker/ControllerWorker/Shutdown.java183
1 files changed, 183 insertions, 0 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Shutdown.java b/gearman/controllerWorker/ControllerWorker/Shutdown.java
new file mode 100644
index 0000000..6cb8645
--- /dev/null
+++ b/gearman/controllerWorker/ControllerWorker/Shutdown.java
@@ -0,0 +1,183 @@
+package ControllerWorker;
+
+import java.io.IOException;
+import java.lang.Thread;
+import java.util.concurrent.ExecutionException;
+import java.util.HashMap;
+import java.util.Vector;
+
+import org.gearman.client.GearmanClient;
+import org.gearman.client.GearmanClientImpl;
+import org.gearman.client.GearmanJob;
+import org.gearman.client.GearmanJobImpl;
+import org.gearman.client.GearmanJobResult;
+import org.gearman.client.GearmanJobStatus;
+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 Shutdown extends Thread {
+ private long beginTime;
+ private long timeTaken;
+ private long timeLeft;
+ private Boolean finished;
+ private Boolean error;
+ private final int updateRate;
+ private final long updatePeriod;
+
+ private HashMap<Integer, GearmanJob> pingJobs;
+ private HashMap<Integer, GearmanJob> wolJobs;
+ private HashMap<Integer, GearmanJob> sshJobs;
+ private HashMap<Integer, Integer> status;
+ private HashMap<Integer, Integer> errors;
+
+ private Vector<HashMap<String, String>> clients;
+
+ private final GearmanJobServerConnection gearmanConnection;
+ private GearmanClient gearmanClient;
+
+ public Shutdown(String serverAddress, int port,
+ Vector<HashMap<String, String>> clients, int updateRate) {
+ this.pingJobs = new HashMap<Integer, GearmanJob>();
+ this.wolJobs = new HashMap<Integer, GearmanJob>();
+ this.sshJobs = new HashMap<Integer, GearmanJob>();
+ this.status = new HashMap<Integer, Integer>();
+ this.errors = new HashMap<Integer, Integer>();
+ this.updateRate = updateRate; // updates per second
+ this.updatePeriod = 1000000000L / this.updateRate; // nanoseconds
+ this.gearmanConnection = new GearmanNIOJobServerConnection(
+ serverAddress, port);
+ this.gearmanClient = new GearmanClientImpl();
+ gearmanClient.addJobServer(this.gearmanConnection);
+ this.clients = clients;
+ for (HashMap<String, String> client : clients) {
+ int clientID = Integer.parseInt(client.get("id"));
+ status.put(clientID, 0); // no work
+ }
+ this.finished = false;
+ this.error = false;
+ }
+
+ public void run() {
+ workerLoop();
+ }
+
+ private void workerLoop() {
+ Boolean run = true;
+ while (run) {
+ try {
+ beginTime = System.nanoTime();
+ run = update();
+ timeTaken = System.nanoTime() - beginTime;
+ timeLeft = (updatePeriod - timeTaken) / 1000000;
+ if (timeLeft < 10)
+ timeLeft = 10;
+ Thread.sleep(timeLeft);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ this.finished = true;
+ System.out.println("Booting finished");
+ }
+
+ private Boolean update() throws IllegalStateException, IOException,
+ InterruptedException, ExecutionException {
+ Boolean allFinished = 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 clientStatus = status.get(clientID);
+
+ switch (clientStatus) {
+ }
+ if (clientStatus == 20) {
+ allFinished = true;
+ } else if (clientStatus == 19) {
+ allFinished = true;
+ this.error = true;
+ } else {
+ allFinished = false;
+ }
+ }
+
+ if (allFinished) {
+ 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);
+ gearmanClient.submit(job);
+
+ status.put(clientID, 1); // ping started
+ pingJobs.put(clientID, job);
+
+ System.out.println("ping " + ipAddress);
+ }
+
+ 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);
+ gearmanClient.submit(job);
+
+ status.put(clientID, 6); // ssh started
+ sshJobs.put(clientID, job);
+
+ System.out.println("ssh " + ipAddress);
+ }
+
+ public Vector<HashMap<String, String>> getClients() {
+ return clients;
+ }
+
+ public GearmanClient getGearmanClient() {
+ return gearmanClient;
+ }
+
+ public GearmanJobServerConnection getGearmanConnection() {
+ return gearmanConnection;
+ }
+
+ public HashMap<Integer, GearmanJob> getPingJobs() {
+ return pingJobs;
+ }
+
+ public HashMap<Integer, GearmanJob> getWolJobs() {
+ return wolJobs;
+ }
+
+ public HashMap<Integer, GearmanJob> getSshJobs() {
+ return sshJobs;
+ }
+
+ public HashMap<Integer, Integer> getStatus() {
+ return status;
+ }
+
+ public HashMap<Integer, Integer> getErrors() {
+ return errors;
+ }
+
+ public Boolean isFinished() {
+ return finished;
+ }
+
+ public Boolean isFinishedWithErrors() {
+ return finished && error;
+ }
+} \ No newline at end of file