summaryrefslogtreecommitdiffstats
path: root/gearman
diff options
context:
space:
mode:
authorSebastian Wagner2011-08-09 12:20:43 +0200
committerSebastian Wagner2011-08-09 12:20:43 +0200
commit73c66e9916818ed98dcdbb3006ebf587aca81ef7 (patch)
treeeb84b9c9dad849c4790d2be20858f7ff5ef5b5fc /gearman
parentDatenbankänderung (diff)
downloadpoolctrl-73c66e9916818ed98dcdbb3006ebf587aca81ef7.tar.gz
poolctrl-73c66e9916818ed98dcdbb3006ebf587aca81ef7.tar.xz
poolctrl-73c66e9916818ed98dcdbb3006ebf587aca81ef7.zip
boot and shutdown changes
Diffstat (limited to 'gearman')
-rw-r--r--gearman/controllerWorker/ControllerWorker/Boot.java92
-rw-r--r--gearman/controllerWorker/ControllerWorker/BootWorker.java3
-rw-r--r--gearman/controllerWorker/ControllerWorker/Shutdown.java8
-rw-r--r--gearman/controllerWorker/ControllerWorker/ShutdownWorker.java3
4 files changed, 84 insertions, 22 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Boot.java b/gearman/controllerWorker/ControllerWorker/Boot.java
index c7228a6..9f8f41f 100644
--- a/gearman/controllerWorker/ControllerWorker/Boot.java
+++ b/gearman/controllerWorker/ControllerWorker/Boot.java
@@ -28,11 +28,12 @@ public class Boot extends Thread {
private Boolean error;
private final int updateRate;
private final long updatePeriod;
+ private String bootOS;
private HashMap<Integer, GearmanJob> pingJobs;
private HashMap<Integer, GearmanJob> wolJobs;
private HashMap<Integer, GearmanJob> pingWoLJobs;
- private HashMap<Integer, GearmanJob> sshJobs;
+ private HashMap<Integer, GearmanJob> osJobs;
private HashMap<Integer, Integer> status;
private HashMap<Integer, Integer> errors;
private HashMap<Integer, Long> pingWolTime;
@@ -43,11 +44,11 @@ public class Boot extends Thread {
private GearmanClient gearmanClient;
public Boot(String serverAddress, int port,
- Vector<HashMap<String, String>> clients, int updateRate) {
+ Vector<HashMap<String, String>> clients, int updateRate, String bootOS) {
this.pingJobs = new HashMap<Integer, GearmanJob>();
this.pingWoLJobs = new HashMap<Integer, GearmanJob>();
this.wolJobs = new HashMap<Integer, GearmanJob>();
- this.sshJobs = new HashMap<Integer, GearmanJob>();
+ this.osJobs = new HashMap<Integer, GearmanJob>();
this.status = new HashMap<Integer, Integer>();
this.errors = new HashMap<Integer, Integer>();
this.pingWolTime = new HashMap<Integer, Long>();
@@ -64,6 +65,7 @@ public class Boot extends Thread {
}
this.finished = false;
this.error = false;
+ this.bootOS = bootOS;
}
public void run() {
@@ -139,7 +141,7 @@ public class Boot extends Thread {
break;
case 2:
- ssh(client);
+ checkOS(client);
break;
@@ -203,7 +205,7 @@ public class Boot extends Thread {
if (alive.equals("true")) {
System.out.println(ipAddress
+ " is alive after WoL");
- status.put(clientID, 9); // alive, go in successState
+ status.put(clientID, 19); // alive, go in successState
pingWoLJobs.remove(clientID);
} else {
System.out.println("ping again "
@@ -215,20 +217,62 @@ public class Boot extends Thread {
} else {
System.out.println(ipAddress
+ " is not alive after WoL");
- status.put(clientID, 8); // not alive, go in errorState
+ status.put(clientID, 18); // not alive, go in errorState
pingWoLJobs.remove(clientID);
}
}
break;
-
+
case 8:
- System.out.println("WoL failed after 2min"); // errorState
+ GearmanJob osJob = osJobs.get(clientID);
+
+ if (osJob != null) {
+ GearmanJobStatus jobStatus = gearmanClient
+ .getJobStatus(osJob);
+
+ if (!jobStatus.isKnown() && osJob.isDone()) {
+ GearmanJobResult osJobRes = osJob.get();
+ String result = ByteUtils.fromUTF8Bytes(osJobRes
+ .getResults());
+
+ if (result != "") {
+ JSONObject resultObj = (JSONObject) JSONValue
+ .parse(result);
+ String osName = resultObj.toString();
+
+ if (osName.equals(this.bootOS)) {
+ System.out.println(ipAddress + " right OS");
+ status.put(clientID, 19); // go in successState
+ pingJobs.remove(clientID);
+ } else {
+ System.out.println(ipAddress + " wrong OS");
+ status.put(clientID, 9); // check User
+ pingJobs.remove(clientID);
+ }
+ }
+ }
+ }
break;
-
+
case 9:
- System.out.println("WoL successful"); // successState
+ who(client);
+
+ break;
+
+ case 10:
+ System.out.println("Who successful"); // errorState
+
+ break;
+
+ case 18:
+ System.out.println("Boot failed after 2min"); // errorState
+
+ break;
+
+ case 19:
+ System.out.println("Boot successful"); // successState
break;
@@ -293,18 +337,32 @@ public class Boot extends Thread {
System.out.println("wake on lan");
}
- private void ssh(HashMap<String, String> client) {
+ private void checkOS(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);
+ GearmanJob job = GearmanJobImpl.createJob("os", ipAddress.getBytes(),
+ "os" + clientID);
gearmanClient.submit(job);
- status.put(clientID, 6); // ssh started
- sshJobs.put(clientID, job);
+ status.put(clientID, 8); // checkOS started
+ osJobs.put(clientID, job);
+
+ System.out.println("check OS " + ipAddress);
+ }
+
+ private void who(HashMap<String, String> client) {
+ String ipAddress = client.get("ip");
+ int clientID = Integer.parseInt(client.get("id"));
+
+ GearmanJob job = GearmanJobImpl.createJob("who", ipAddress.getBytes(),
+ "who" + clientID);
+ gearmanClient.submit(job);
+
+ status.put(clientID, 10); // who started
+ pingJobs.put(clientID, job);
- System.out.println("ssh " + ipAddress);
+ System.out.println("who " + ipAddress);
}
public Vector<HashMap<String, String>> getClients() {
@@ -328,7 +386,7 @@ public class Boot extends Thread {
}
public HashMap<Integer, GearmanJob> getSshJobs() {
- return sshJobs;
+ return osJobs;
}
public HashMap<Integer, Integer> getStatus() {
diff --git a/gearman/controllerWorker/ControllerWorker/BootWorker.java b/gearman/controllerWorker/ControllerWorker/BootWorker.java
index 84a557a..1600b87 100644
--- a/gearman/controllerWorker/ControllerWorker/BootWorker.java
+++ b/gearman/controllerWorker/ControllerWorker/BootWorker.java
@@ -24,6 +24,7 @@ public class BootWorker extends AbstractGearmanFunction {
Vector<HashMap<String, String>> clients = new Vector<HashMap<String, String>>();
JSONObject jsonObject = (JSONObject) JSONValue.parse(data);
String event = jsonObject.get("eventName").toString();
+ String eventOS = jsonObject.get("eventBootOS").toString();
int updateRate = Integer.parseInt(jsonObject.get("updateRate")
.toString());
JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
@@ -37,7 +38,7 @@ public class BootWorker extends AbstractGearmanFunction {
clients.add(clientMap);
}
- Boot boot = new Boot("127.0.0.1", 4730, clients, updateRate);
+ Boot boot = new Boot("127.0.0.1", 4730, clients, updateRate, eventOS);
StatusWorker.BOOTTHREADS.put(event, boot);
boot.start();
System.out.println("Booting started");
diff --git a/gearman/controllerWorker/ControllerWorker/Shutdown.java b/gearman/controllerWorker/ControllerWorker/Shutdown.java
index c981a61..ca474ac 100644
--- a/gearman/controllerWorker/ControllerWorker/Shutdown.java
+++ b/gearman/controllerWorker/ControllerWorker/Shutdown.java
@@ -28,6 +28,7 @@ public class Shutdown extends Thread {
private Boolean error;
private final int updateRate;
private final long updatePeriod;
+ private String bootOS;
private HashMap<Integer, GearmanJob> pingJobs;
private HashMap<Integer, GearmanJob> whoJobs;
@@ -44,7 +45,7 @@ public class Shutdown extends Thread {
private GearmanClient gearmanClient;
public Shutdown(String serverAddress, int port,
- Vector<HashMap<String, String>> clients, int updateRate) {
+ Vector<HashMap<String, String>> clients, int updateRate, String bootOS) {
this.pingJobs = new HashMap<Integer, GearmanJob>();
this.whoJobs = new HashMap<Integer, GearmanJob>();
this.shutdownJobs = new HashMap<Integer, GearmanJob>();
@@ -64,6 +65,7 @@ public class Shutdown extends Thread {
}
this.finished = false;
this.error = false;
+ this.bootOS = bootOS;
}
public void run() {
@@ -139,7 +141,7 @@ public class Shutdown extends Thread {
break;
case 2:
- woh(client);
+ who(client);
break;
@@ -235,7 +237,7 @@ public class Shutdown extends Thread {
System.out.println("ping " + ipAddress);
}
- private void woh(HashMap<String, String> client) {
+ private void who(HashMap<String, String> client) {
String ipAddress = client.get("ip");
int clientID = Integer.parseInt(client.get("id"));
diff --git a/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java b/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
index b454cca..a2de19e 100644
--- a/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
+++ b/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
@@ -24,6 +24,7 @@ public class ShutdownWorker extends AbstractGearmanFunction {
Vector<HashMap<String, String>> clients = new Vector<HashMap<String, String>>();
JSONObject jsonObject = (JSONObject) JSONValue.parse(data);
String event = jsonObject.get("eventName").toString();
+ String eventOS = jsonObject.get("eventBootOS").toString();
int updateRate = Integer.parseInt(jsonObject.get("updateRate")
.toString());
JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
@@ -37,7 +38,7 @@ public class ShutdownWorker extends AbstractGearmanFunction {
clients.add(clientMap);
}
- Shutdown shutdown = new Shutdown("127.0.0.1", 4730, clients, updateRate);
+ Shutdown shutdown = new Shutdown("127.0.0.1", 4730, clients, updateRate, eventOS);
StatusWorker.SHUTDOWNTHREADS.put(event, shutdown);
shutdown.start();
System.out.println("Shutdown started");