summaryrefslogtreecommitdiffstats
path: root/gearman
diff options
context:
space:
mode:
authorBjörn Geiger2011-09-21 14:28:54 +0200
committerBjörn Geiger2011-09-21 14:28:54 +0200
commit24025bbcd2b3d27b3faaee838be7d65e69189451 (patch)
tree2fada98cd40443f8ab353deb97492b14fe73988b /gearman
parentrm getpoolselectboxval (diff)
downloadpoolctrl-24025bbcd2b3d27b3faaee838be7d65e69189451.tar.gz
poolctrl-24025bbcd2b3d27b3faaee838be7d65e69189451.tar.xz
poolctrl-24025bbcd2b3d27b3faaee838be7d65e69189451.zip
StatusWorker überarbeitet, noch nicht getestet
Diffstat (limited to 'gearman')
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Boot.java112
-rw-r--r--gearman/controllerWorker/ControllerWorker/BootState.java65
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/BootWorker.java40
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Client.java36
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Shutdown.java71
-rw-r--r--gearman/controllerWorker/ControllerWorker/ShutdownState.java59
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/ShutdownWorker.java39
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/StatusWorker.java335
8 files changed, 586 insertions, 171 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Boot.java b/gearman/controllerWorker/ControllerWorker/Boot.java
index 6a71890..17a017f 100755
--- a/gearman/controllerWorker/ControllerWorker/Boot.java
+++ b/gearman/controllerWorker/ControllerWorker/Boot.java
@@ -3,6 +3,7 @@ package ControllerWorker;
import java.io.IOException;
import java.lang.Thread;
import java.util.Date;
+import java.util.LinkedHashMap;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -81,11 +82,20 @@ public class Boot extends Thread {
}
}
finished = true;
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ jsonData.put("eventName", eventName);
+ jsonData.put("type", "finishBootState");
if (error) {
logger.error("Booting of " + eventName + " failed");
+ jsonData.put("error", true);
} else {
logger.info("Booting of " + eventName + " finished");
+ jsonData.put("error", false);
}
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + eventName);
+ gearmanClient.submit(job);
}
/*
@@ -199,7 +209,8 @@ public class Boot extends Thread {
logger.error(client.getIp() + " User has been working");
client.setError("The user has been working.");
// user has been working, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
+
break;
case CLIENT_IS_DOWN:
@@ -264,7 +275,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_PROGRESS);
+ client.setState(ClientState.CHECK_PING_PROGRESS, gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -284,11 +295,13 @@ public class Boot extends Thread {
String alive = resultObj.get("alive").toString();
if (alive.equals("true")) {
logger.info(client.getIp() + " alive");
- client.setState(ClientState.CLIENT_IS_ALIVE);
+ client.setState(ClientState.CLIENT_IS_ALIVE,
+ gearmanClient);
client.removeJob(pingJob);
} else if (alive.equals("false")) {
logger.info(client.getIp() + " not alive");
- client.setState(ClientState.CLIENT_NOT_ALIVE);
+ client.setState(ClientState.CLIENT_NOT_ALIVE,
+ gearmanClient);
client.removeJob(pingJob);
}
} else {
@@ -296,7 +309,7 @@ public class Boot extends Thread {
+ " Cannot send the ping message.");
client
.setError("Sending the ping message has been failed.");
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(pingJob);
}
}
@@ -308,7 +321,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_WOL_PROGRESS);
+ client.setState(ClientState.CHECK_PING_WOL_PROGRESS, gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -339,11 +352,13 @@ public class Boot extends Thread {
logger.info(client.getIp()
+ " is alive after WoL");
// alive, go in successState
- client.setState(ClientState.BOOT_SUCCESS);
+ client.setState(ClientState.BOOT_SUCCESS,
+ gearmanClient);
client.removeJob(pingJobWoL);
} else if (alive.equals("false")) {
logger.info("ping again " + client.getIp());
- client.setState(ClientState.PING_WOL_AGAIN);
+ client.setState(ClientState.PING_WOL_AGAIN,
+ gearmanClient);
client.removeJob(pingJobWoL);
}
} else {
@@ -356,7 +371,8 @@ public class Boot extends Thread {
* sending the ping after wake on LAN message has
* been failed, go to errorState
*/
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR,
+ gearmanClient);
client.removeJob(pingJobWoL);
}
}
@@ -365,7 +381,7 @@ public class Boot extends Thread {
logger.error(client.getIp() + " is not alive after WoL");
client.setError("The wake on LAN has been failed.");
// not alive, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(pingJobWoL);
}
}
@@ -375,7 +391,8 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_RESTART_SHUTDOWN_PROGRESS);
+ client.setState(ClientState.CHECK_PING_RESTART_SHUTDOWN_PROGRESS,
+ gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -407,12 +424,15 @@ public class Boot extends Thread {
logger.info(client.getIp() + " is still alive");
// still alive, ping again
client
- .setState(ClientState.PING_RESTART_SHUTDOWN_AGAIN);
+ .setState(
+ ClientState.PING_RESTART_SHUTDOWN_AGAIN,
+ gearmanClient);
client.removeJob(pingJobRestartShutdown);
} else if (alive.equals("false")) {
logger.info(client.getIp() + " is down");
// not alive, ping again
- client.setState(ClientState.CLIENT_IS_DOWN);
+ client.setState(ClientState.CLIENT_IS_DOWN,
+ gearmanClient);
client.removeJob(pingJobRestartShutdown);
}
} else {
@@ -425,7 +445,8 @@ public class Boot extends Thread {
* sending the ping after restart message has been
* failed
*/
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR,
+ gearmanClient);
client.removeJob(pingJobRestartShutdown);
}
}
@@ -434,7 +455,7 @@ public class Boot extends Thread {
logger.error(client.getIp() + " shutdown failed");
client.setError("The shutdown has been failed.");
// still alive, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(pingJobRestartShutdown);
}
}
@@ -444,7 +465,8 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_RESTART_BOOT_PROGRESS);
+ client.setState(ClientState.CHECK_PING_RESTART_BOOT_PROGRESS,
+ gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -477,13 +499,15 @@ public class Boot extends Thread {
logger.info(client.getIp()
+ " is alive after restart");
// alive, go to success state
- client.setState(ClientState.BOOT_SUCCESS);
+ client.setState(ClientState.BOOT_SUCCESS,
+ gearmanClient);
client.removeJob(pingJobRestartBoot);
} else if (alive.equals("false")) {
logger.info("ping again " + client.getIp());
// not alive, ping again
- client
- .setState(ClientState.PING_RESTART_BOOT_AGAIN);
+ client.setState(
+ ClientState.PING_RESTART_BOOT_AGAIN,
+ gearmanClient);
client.removeJob(pingJobRestartBoot);
}
} else {
@@ -496,7 +520,8 @@ public class Boot extends Thread {
* sending the ping after shutdown message has been
* failed
*/
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR,
+ gearmanClient);
}
}
}
@@ -504,7 +529,7 @@ public class Boot extends Thread {
logger.error(client.getIp() + " is not alive after reboot");
client.setError("The reboot has been failed.");
// not alive, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(pingJobRestartBoot);
}
}
@@ -514,7 +539,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("wol", client.getMac()
.getBytes(), "wol" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_WAKE_ON_LAN_PROGRESS);
+ client.setState(ClientState.CHECK_WAKE_ON_LAN_PROGRESS, gearmanClient);
client.addJob(ClientJob.WOLJOB, job);
logger.info("wake on lan " + client.getMac());
}
@@ -531,14 +556,15 @@ public class Boot extends Thread {
String result = ByteUtils.fromUTF8Bytes(wolJobRes.getResults());
if (result.equals("Magic packet send.")) {
logger.info(client.getMac() + " Magic packet sent.");
- client.setState(ClientState.MAGIC_PACKET_SENT);
+ client.setState(ClientState.MAGIC_PACKET_SENT,
+ gearmanClient);
client.removeJob(wolJob);
} else {
logger.error(client.getIp() + " Cannot send magic packet.");
client
.setError("Sending the magic packet has been failed.");
// cannot send magic packet, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(wolJob);
}
}
@@ -549,7 +575,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("os", client.getIp()
.getBytes(), "os" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_CHECKOS_PROGRESS);
+ client.setState(ClientState.CHECK_CHECKOS_PROGRESS, gearmanClient);
client.addJob(ClientJob.OSJOB, job);
logger.info("check OS " + client.getIp());
}
@@ -579,11 +605,14 @@ public class Boot extends Thread {
if (description.equals(bootOS)) {
logger.info(client.getIp() + " right OS");
// right os, go to successState
- client.setState(ClientState.BOOT_SUCCESS);
+ client.setState(ClientState.BOOT_SUCCESS,
+ gearmanClient);
client.removeJob(osJob);
} else {
logger.info(client.getIp() + " wrong OS");
- client.setState(ClientState.WRONG_OS);
+ client
+ .setState(ClientState.WRONG_OS,
+ gearmanClient);
client.removeJob(osJob);
}
} else {
@@ -591,7 +620,7 @@ public class Boot extends Thread {
client
.setError("The check for correct operating system has been failed.");
// cannot check os, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(osJob);
}
}
@@ -603,7 +632,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("who", client.getIp()
.getBytes(), "who" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_WHO_PROGRESS);
+ client.setState(ClientState.CHECK_WHO_PROGRESS, gearmanClient);
client.addJob(ClientJob.WHOJOB, job);
logger.info("who " + client.getIp());
}
@@ -636,13 +665,15 @@ public class Boot extends Thread {
// no user is logged in, doing restart
// -----
// didn´t work in test-pool, check ps
- client.setState(ClientState.A_USER_IS_LOGGED_IN);
+ client.setState(ClientState.A_USER_IS_LOGGED_IN,
+ gearmanClient);
client.removeJob(whoJob);
} else {
logger
.info(client.getIp()
+ " a user is logged in");
- client.setState(ClientState.A_USER_IS_LOGGED_IN);
+ client.setState(ClientState.A_USER_IS_LOGGED_IN,
+ gearmanClient);
client.removeJob(whoJob);
}
} else {
@@ -654,7 +685,7 @@ public class Boot extends Thread {
* cannot check if a user is logged in, go in errorState
*/
// client
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(whoJob);
}
}
@@ -666,7 +697,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ps", client.getIp()
.getBytes(), "ps" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PS_PROGRESS);
+ client.setState(ClientState.CHECK_PS_PROGRESS, gearmanClient);
client.addJob(ClientJob.PSJOB, job);
logger.info("ps " + client.getIp());
}
@@ -708,12 +739,14 @@ public class Boot extends Thread {
* client.removeClientJob(job); } else {
*/
logger.info(client.getIp() + " is working");
- client.setState(ClientState.USER_IS_WORKING);
+ client.setState(ClientState.USER_IS_WORKING,
+ gearmanClient);
client.removeJob(psJob);
// }
} else {
// user is not working, doing restart
- client.setState(ClientState.RESTART_CLIENT);
+ client.setState(ClientState.RESTART_CLIENT,
+ gearmanClient);
client.removeJob(psJob);
}
} else {
@@ -724,7 +757,7 @@ public class Boot extends Thread {
/*
* cannot check if user is working, go in errorState
*/
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(psJob);
}
}
@@ -736,7 +769,7 @@ public class Boot extends Thread {
GearmanJob job = GearmanJobImpl.createJob("restart", client.getIp()
.getBytes(), "restart" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_RESTART_PROGRESS);
+ client.setState(ClientState.CHECK_RESTART_PROGRESS, gearmanClient);
client.addJob(ClientJob.RESTARTJOB, job);
logger.info("restart " + client.getIp());
}
@@ -755,7 +788,8 @@ public class Boot extends Thread {
JSONObject resultObj = (JSONObject) JSONValue.parse(result);
if (!resultObj.containsKey("err")) {
logger.info(client.getIp() + " Restart command sent");
- client.setState(ClientState.RESTART_COMMAND_SENT);
+ client.setState(ClientState.RESTART_COMMAND_SENT,
+ gearmanClient);
client.removeJob(restartJob);
} else {
logger.error(client.getIp()
@@ -763,7 +797,7 @@ public class Boot extends Thread {
client
.setError("Sending the restart command has been failed.");
// cannot send restart command, go in errorState
- client.setState(ClientState.BOOT_ERROR);
+ client.setState(ClientState.BOOT_ERROR, gearmanClient);
client.removeJob(restartJob);
}
}
diff --git a/gearman/controllerWorker/ControllerWorker/BootState.java b/gearman/controllerWorker/ControllerWorker/BootState.java
new file mode 100644
index 0000000..91c1f7a
--- /dev/null
+++ b/gearman/controllerWorker/ControllerWorker/BootState.java
@@ -0,0 +1,65 @@
+package ControllerWorker;
+
+import java.util.Vector;
+
+public class BootState {
+ private String eventName;
+ private String bootOS;
+ private Vector<Client> clients;
+ private Boolean finished;
+ private Boolean error;
+
+ public BootState(String eventName, Vector<Client> clients, String bootOS) {
+ this.eventName = eventName;
+ this.clients = clients;
+ this.bootOS = bootOS;
+ finished = false;
+ error = false;
+ }
+
+ public Boolean isFinished() {
+ return finished && !error;
+ }
+
+ public Boolean isFinishedWithErrors() {
+ return finished && error;
+ }
+
+ public Vector<Client> getClients() {
+ return clients;
+ }
+
+ public String getEventName() {
+ return eventName;
+ }
+
+ public String getBootOS() {
+ return bootOS;
+ }
+
+ public void finish() {
+ this.finished = true;
+ }
+
+ public void error() {
+ this.error = true;
+ }
+
+ public void setClientState(int clientID, ClientState newClientState) {
+ for (Client client : clients) {
+ if (client.getId() == clientID) {
+ client.setState(newClientState);
+ break;
+ }
+ }
+ }
+
+ public void setClientError(int clientID, String error) {
+ for (Client client : clients) {
+ if (client.getId() == clientID) {
+ client.setError(error);
+ break;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/gearman/controllerWorker/ControllerWorker/BootWorker.java b/gearman/controllerWorker/ControllerWorker/BootWorker.java
index 0963aef..e9021e5 100755
--- a/gearman/controllerWorker/ControllerWorker/BootWorker.java
+++ b/gearman/controllerWorker/ControllerWorker/BootWorker.java
@@ -1,10 +1,17 @@
package ControllerWorker;
+import java.util.LinkedHashMap;
import java.util.StringTokenizer;
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.GearmanJobResultImpl;
+import org.gearman.common.GearmanJobServerConnection;
+import org.gearman.common.GearmanNIOJobServerConnection;
import org.gearman.util.ByteUtils;
import org.gearman.worker.AbstractGearmanFunction;
@@ -29,23 +36,22 @@ public class BootWorker extends AbstractGearmanFunction {
JSONObject jsonObject = (JSONObject) JSONValue.parse(data);
String event = jsonObject.get("eventName").toString();
String eventOS = jsonObject.get("eventOS").toString();
- JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
+ JSONArray jsonClients = (JSONArray) jsonObject.get("clients");
- for (Object clientObj : jsonArray) {
+ for (Object clientObj : jsonClients) {
JSONObject clientJsonObj = (JSONObject) clientObj;
- Client client = new Client(clientJsonObj,
- "The booting process of the client has been started.");
+ Client client = new Client(clientJsonObj, "boot", event);
clients.add(client);
}
- String gearmanServerHost = ControllerWorkerMain.getApplication_ini().getString(
- "gearman.server.host");
+ String gearmanServerHost = ControllerWorkerMain.getApplication_ini()
+ .getString("gearman.server.host");
int gearmanServerPort = Integer.parseInt(ControllerWorkerMain
.getApplication_ini().getString("gearman.server.port"));
- long waitTime = Long.parseLong(ControllerWorkerMain.getApplication_ini()
- .getString("gearman.worker.waitTime"));
- int updateRate = Integer.parseInt(ControllerWorkerMain.getApplication_ini()
- .getString("gearman.worker.updateRate"));
+ long waitTime = Long.parseLong(ControllerWorkerMain
+ .getApplication_ini().getString("gearman.worker.waitTime"));
+ int updateRate = Integer.parseInt(ControllerWorkerMain
+ .getApplication_ini().getString("gearman.worker.updateRate"));
String blacklist = ControllerWorkerMain.getApplication_ini().getString(
"gearman.worker.ps.blacklist");
StringTokenizer blacklistTokenizer = new StringTokenizer(blacklist, ",");
@@ -65,7 +71,19 @@ public class BootWorker extends AbstractGearmanFunction {
Boot boot = new Boot(event, clients, eventOS, updateRate, waitTime,
psWhitelist, psBlacklist, gearmanServerHost, gearmanServerPort);
- StatusWorker.BOOTTHREADS.put(event, boot);
+ GearmanJobServerConnection gearmanConnection = new GearmanNIOJobServerConnection(
+ gearmanServerHost, gearmanServerPort);
+ GearmanClient gearmanClient = new GearmanClientImpl();
+ gearmanClient.addJobServer(gearmanConnection);
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ jsonData.put("eventName", event);
+ jsonData.put("type", "createBootState");
+ jsonData.put("eventOS", eventOS);
+ jsonData.put("clients", jsonClients.toArray());
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + event);
+ gearmanClient.submit(job);
boot.start();
logger.info("Booting of " + event + " started");
String res = "Booting started";
diff --git a/gearman/controllerWorker/ControllerWorker/Client.java b/gearman/controllerWorker/ControllerWorker/Client.java
index 86d21b5..deb3246 100755
--- a/gearman/controllerWorker/ControllerWorker/Client.java
+++ b/gearman/controllerWorker/ControllerWorker/Client.java
@@ -1,27 +1,35 @@
package ControllerWorker;
+import java.util.LinkedHashMap;
import java.util.Vector;
+import org.gearman.client.GearmanClient;
import org.gearman.client.GearmanJob;
+import org.gearman.client.GearmanJobImpl;
import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
public class Client {
private int id;
private String ip;
private String mac;
private ClientState state;
+ private String type;
+ private String eventName;
private Vector<ClientPingTime> times;
private Vector<ClientJob> jobs;
private String error;
private Boolean finished;
- public Client(JSONObject clientJsonObj, String initialStateText) {
+ public Client(JSONObject clientJsonObj, String type, String eventName) {
+ this.type = type;
+ this.eventName = eventName;
id = Integer.parseInt(clientJsonObj.get("id").toString());
ip = clientJsonObj.get("ip").toString();
mac = clientJsonObj.get("mac").toString();
finished = false;
error = "";
- setState(ClientState.CLIENT_UNKNOWN);
+ state = ClientState.CLIENT_UNKNOWN;
times = new Vector<ClientPingTime>();
jobs = new Vector<ClientJob>();
}
@@ -85,6 +93,11 @@ public class Client {
return state;
}
+ public void setState(ClientState state_, GearmanClient gearmanClient) {
+ state = state_;
+ publishStateChange(gearmanClient);
+ }
+
public void setState(ClientState state_) {
state = state_;
}
@@ -107,4 +120,23 @@ public class Client {
+ id + ", ip=" + ip + ", jobs=" + jobs + ", mac=" + mac
+ ", state=" + state + ", times=" + times + "]";
}
+
+ private void publishStateChange(GearmanClient gearmanClient) {
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ if (type.equals("boot")) {
+ jsonData.put("type", "updateClientStateBoot");
+ } else if (type.equals("shutdown")) {
+ jsonData.put("type", "updateClientStateShutdown");
+ } else {
+ return;
+ }
+ jsonData.put("eventName", eventName);
+ jsonData.put("clientID", id);
+ jsonData.put("error", error);
+ jsonData.put("newState", state.toString());
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + eventName);
+ gearmanClient.submit(job);
+ }
} \ No newline at end of file
diff --git a/gearman/controllerWorker/ControllerWorker/Shutdown.java b/gearman/controllerWorker/ControllerWorker/Shutdown.java
index b0c869e..9920acc 100755
--- a/gearman/controllerWorker/ControllerWorker/Shutdown.java
+++ b/gearman/controllerWorker/ControllerWorker/Shutdown.java
@@ -3,6 +3,7 @@ package ControllerWorker;
import java.io.IOException;
import java.lang.Thread;
import java.util.Date;
+import java.util.LinkedHashMap;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -79,11 +80,20 @@ public class Shutdown extends Thread {
}
}
finished = true;
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ jsonData.put("eventName", eventName);
+ jsonData.put("type", "finishShutdownState");
if (error) {
logger.error("Shutdown of " + eventName + " failed");
+ jsonData.put("error", true);
} else {
logger.info("Shutdown of " + eventName + " finished");
+ jsonData.put("error", false);
}
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + eventName);
+ gearmanClient.submit(job);
}
/*
@@ -155,7 +165,7 @@ public class Shutdown extends Thread {
case USER_IS_WORKING:
logger.error(client.getIp() + " User has been working");
client.setError("The user has been working.");
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR, gearmanClient);
break;
case SHUTDOWN_ERROR:
@@ -203,7 +213,7 @@ public class Shutdown extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_PROGRESS);
+ client.setState(ClientState.CHECK_PING_PROGRESS, gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -226,14 +236,16 @@ public class Shutdown extends Thread {
if (alive.equals("true")) {
logger.info(client.getIp() + " alive");
- client.setState(ClientState.CLIENT_IS_ALIVE);
+ client.setState(ClientState.CLIENT_IS_ALIVE,
+ gearmanClient);
// check
// Users
client.removeJob(pingJob);
} else if (alive.equals("false")) {
logger.info(client.getIp() + " not alive");
// not alive, go in successState
- client.setState(ClientState.SHUTDOWN_SUCCESS);
+ client.setState(ClientState.SHUTDOWN_SUCCESS,
+ gearmanClient);
client.removeJob(pingJob);
}
} else {
@@ -242,7 +254,8 @@ public class Shutdown extends Thread {
client
.setError("Sending the ping message has been failed.");
// sending the ping message has been failed
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR,
+ gearmanClient);
client.removeJob(pingJob);
}
}
@@ -254,7 +267,7 @@ public class Shutdown extends Thread {
GearmanJob job = GearmanJobImpl.createJob("who", client.getIp()
.getBytes(), "who" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_WHO_PROGRESS);
+ client.setState(ClientState.CHECK_WHO_PROGRESS, gearmanClient);
client.addJob(ClientJob.WHOJOB, job);
logger.info("who " + client.getIp());
}
@@ -287,14 +300,16 @@ public class Shutdown extends Thread {
// no user is logged in
// -----
// didn´t work in test-pool, check ps
- client.setState(ClientState.USER_IS_LOGGED_IN);
+ client.setState(ClientState.USER_IS_LOGGED_IN,
+ gearmanClient);
client.removeJob(whoJob);
} else {
logger
.info(client.getIp()
+ " a user is logged in");
// a user is logged in
- client.setState(ClientState.USER_IS_LOGGED_IN);
+ client.setState(ClientState.USER_IS_LOGGED_IN,
+ gearmanClient);
client.removeJob(whoJob);
}
} else {
@@ -305,7 +320,8 @@ public class Shutdown extends Thread {
/*
* cannot check if a user is logged in, go in errorState
*/
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR,
+ gearmanClient);
client.removeJob(whoJob);
}
}
@@ -318,7 +334,7 @@ public class Shutdown extends Thread {
.getBytes(), "doShutdown" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_SHUTDOWN_PROGRESS);
+ client.setState(ClientState.CHECK_SHUTDOWN_PROGRESS, gearmanClient);
client.addJob(ClientJob.SHUTDOWNJOB, job);
logger.info("doShutdown " + client.getIp());
}
@@ -338,7 +354,8 @@ public class Shutdown extends Thread {
JSONObject resultObj = (JSONObject) JSONValue.parse(result);
if (!resultObj.containsKey("err")) {
logger.info(client.getIp() + " Shutdown command sent");
- client.setState(ClientState.SHUTDOWN_COMMAND_SENT);
+ client.setState(ClientState.SHUTDOWN_COMMAND_SENT,
+ gearmanClient);
client.removeJob(doShutdownJob);
} else {
logger.error(client.getIp()
@@ -346,7 +363,8 @@ public class Shutdown extends Thread {
client
.setError("Sending the shutdown command has been failed.");
// cannot send shutdown command, go in / errorState
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR,
+ gearmanClient);
client.removeJob(doShutdownJob);
}
}
@@ -358,7 +376,9 @@ public class Shutdown extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ping", client.getIp()
.getBytes(), "ping" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PING_SHUTDOWN_PROGRESS);
+ client
+ .setState(ClientState.CHECK_PING_SHUTDOWN_PROGRESS,
+ gearmanClient);
client.addJob(ClientJob.PINGJOB, job);
logger.info("ping " + client.getIp());
}
@@ -389,14 +409,16 @@ public class Shutdown extends Thread {
if (alive.equals("false")) {
logger.info(client.getIp()
+ " is not alive anymore");
- client.setState(ClientState.SHUTDOWN_SUCCESS);
+ client.setState(ClientState.SHUTDOWN_SUCCESS,
+ gearmanClient);
client.removeJob(pingJobShutdown);
} else if (alive.equals("true")) {
logger
.info(client.getIp()
+ " is still alive after shutdown command");
- client
- .setState(ClientState.PING_SHUTDOWN_AGAIN);
+ client.setState(
+ ClientState.PING_SHUTDOWN_AGAIN,
+ gearmanClient);
}
} else {
logger
@@ -408,7 +430,8 @@ public class Shutdown extends Thread {
* sending the ping after shutdown message has been
* failed
*/
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR,
+ gearmanClient);
client.removeJob(pingJobShutdown);
}
}
@@ -417,7 +440,7 @@ public class Shutdown extends Thread {
logger.error(client.getIp() + " is alive after shutdown");
client.setError("Client is still alive after shutdown.");
// still alive, go in errorState
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR, gearmanClient);
client.removeJob(pingJobShutdown);
}
}
@@ -427,7 +450,7 @@ public class Shutdown extends Thread {
GearmanJob job = GearmanJobImpl.createJob("ps", client.getIp()
.getBytes(), "ps" + client.getId());
gearmanClient.submit(job);
- client.setState(ClientState.CHECK_PS_PROGRESS);
+ client.setState(ClientState.CHECK_PS_PROGRESS, gearmanClient);
client.addJob(ClientJob.PSJOB, job);
logger.info("ps " + client.getIp());
}
@@ -470,13 +493,15 @@ public class Shutdown extends Thread {
*
* } else {
*/
- client.setState(ClientState.USER_IS_WORKING);
+ client.setState(ClientState.USER_IS_WORKING,
+ gearmanClient);
client.removeJob(psJob);
// }
} else {
logger.info(client.getIp() + " is not working");
// is not working
- client.setState(ClientState.SHUTDOWN_CLIENT);
+ client.setState(ClientState.SHUTDOWN_CLIENT,
+ gearmanClient);
client.removeJob(psJob);
}
} else {
@@ -487,7 +512,8 @@ public class Shutdown extends Thread {
/*
* cannot check if user is working, go in errorState
*/
- client.setState(ClientState.SHUTDOWN_ERROR);
+ client.setState(ClientState.SHUTDOWN_ERROR,
+ gearmanClient);
client.removeJob(psJob);
}
}
@@ -510,5 +536,4 @@ public class Shutdown extends Thread {
public String getEventName() {
return eventName;
}
-
} \ No newline at end of file
diff --git a/gearman/controllerWorker/ControllerWorker/ShutdownState.java b/gearman/controllerWorker/ControllerWorker/ShutdownState.java
new file mode 100644
index 0000000..cf3aa8e
--- /dev/null
+++ b/gearman/controllerWorker/ControllerWorker/ShutdownState.java
@@ -0,0 +1,59 @@
+package ControllerWorker;
+
+import java.util.Vector;
+
+public class ShutdownState {
+ private String eventName;
+ private Vector<Client> clients;
+ private Boolean finished;
+ private Boolean error;
+
+ public ShutdownState(String eventName, Vector<Client> clients) {
+ this.eventName = eventName;
+ this.clients = clients;
+ finished = false;
+ error = false;
+ }
+
+ public Boolean isFinished() {
+ return finished && !error;
+ }
+
+ public Boolean isFinishedWithErrors() {
+ return finished && error;
+ }
+
+ public Vector<Client> getClients() {
+ return clients;
+ }
+
+ public String getEventName() {
+ return eventName;
+ }
+
+ public void finish() {
+ this.finished = true;
+ }
+
+ public void error() {
+ this.error = true;
+ }
+
+ public void setClientState(int clientID, ClientState newClientState) {
+ for (Client client : clients) {
+ if (client.getId() == clientID) {
+ client.setState(newClientState);
+ break;
+ }
+ }
+ }
+
+ public void setClientError(int clientID, String error) {
+ for (Client client : clients) {
+ if (client.getId() == clientID) {
+ client.setError(error);
+ break;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java b/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
index 4057d9f..654c07f 100755
--- a/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
+++ b/gearman/controllerWorker/ControllerWorker/ShutdownWorker.java
@@ -1,10 +1,17 @@
package ControllerWorker;
+import java.util.LinkedHashMap;
import java.util.StringTokenizer;
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.GearmanJobResultImpl;
+import org.gearman.common.GearmanJobServerConnection;
+import org.gearman.common.GearmanNIOJobServerConnection;
import org.gearman.util.ByteUtils;
import org.gearman.worker.AbstractGearmanFunction;
@@ -28,23 +35,22 @@ public class ShutdownWorker extends AbstractGearmanFunction {
Vector<Client> clients = new Vector<Client>();
JSONObject jsonObject = (JSONObject) JSONValue.parse(data);
String event = jsonObject.get("eventName").toString();
- JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
+ JSONArray jsonClients = (JSONArray) jsonObject.get("clients");
- for (Object clientObj : jsonArray) {
+ for (Object clientObj : jsonClients) {
JSONObject clientJsonObj = (JSONObject) clientObj;
- Client client = new Client(clientJsonObj,
- "The shutdown process of the client has been started.");
+ Client client = new Client(clientJsonObj, "shutdown", event);
clients.add(client);
}
- String gearmanServerHost = ControllerWorkerMain.getApplication_ini().getString(
- "gearman.server.host");
+ String gearmanServerHost = ControllerWorkerMain.getApplication_ini()
+ .getString("gearman.server.host");
int gearmanServerPort = Integer.parseInt(ControllerWorkerMain
.getApplication_ini().getString("gearman.server.port"));
- long waitTime = Long.parseLong(ControllerWorkerMain.getApplication_ini()
- .getString("gearman.worker.waitTime"));
- int updateRate = Integer.parseInt(ControllerWorkerMain.getApplication_ini()
- .getString("gearman.worker.updateRate"));
+ long waitTime = Long.parseLong(ControllerWorkerMain
+ .getApplication_ini().getString("gearman.worker.waitTime"));
+ int updateRate = Integer.parseInt(ControllerWorkerMain
+ .getApplication_ini().getString("gearman.worker.updateRate"));
String blacklist = ControllerWorkerMain.getApplication_ini().getString(
"gearman.worker.ps.blacklist");
StringTokenizer blacklistTokenizer = new StringTokenizer(blacklist, ",");
@@ -64,7 +70,18 @@ public class ShutdownWorker extends AbstractGearmanFunction {
Shutdown shutdown = new Shutdown(event, clients, updateRate, waitTime,
psWhitelist, psBlacklist, gearmanServerHost, gearmanServerPort);
- StatusWorker.SHUTDOWNTHREADS.put(event, shutdown);
+ GearmanJobServerConnection gearmanConnection = new GearmanNIOJobServerConnection(
+ gearmanServerHost, gearmanServerPort);
+ GearmanClient gearmanClient = new GearmanClientImpl();
+ gearmanClient.addJobServer(gearmanConnection);
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ jsonData.put("eventName", event);
+ jsonData.put("type", "createShutdownState");
+ jsonData.put("clients", jsonClients.toArray());
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + event);
+ gearmanClient.submit(job);
shutdown.start();
logger.info("Shutdown of " + event + " started");
String res = "Shutdown started";
diff --git a/gearman/controllerWorker/ControllerWorker/StatusWorker.java b/gearman/controllerWorker/ControllerWorker/StatusWorker.java
index 1743a2d..75bca69 100755
--- a/gearman/controllerWorker/ControllerWorker/StatusWorker.java
+++ b/gearman/controllerWorker/ControllerWorker/StatusWorker.java
@@ -17,8 +17,8 @@ import org.json.simple.JSONValue;
public class StatusWorker extends AbstractGearmanFunction {
// private static final Logger logger = ControllerWorkerMain.getLogger();
- static HashMap<String, Boot> BOOTTHREADS = new HashMap<String, Boot>();
- static HashMap<String, Shutdown> SHUTDOWNTHREADS = new HashMap<String, Shutdown>();
+ private HashMap<String, BootState> BOOTSTATES = new HashMap<String, BootState>();
+ private HashMap<String, ShutdownState> SHUTDOWNSTATES = new HashMap<String, ShutdownState>();
@Override
public String getName() {
@@ -28,9 +28,31 @@ public class StatusWorker extends AbstractGearmanFunction {
@Override
public GearmanJobResult executeFunction() {
String data = ByteUtils.fromUTF8Bytes((byte[]) this.data);
- Vector<String> events = new Vector<String>();
JSONObject jsonObject = (JSONObject) JSONValue.parse(data);
String type = jsonObject.get("type").toString();
+ if (type == "getBootState") {
+ return getBootState(jsonObject);
+ } else if (type == "getShutdownState") {
+ return getShutdownState(jsonObject);
+ } else if (type == "updateClientStateBoot") {
+ return updateClientStateBoot(jsonObject);
+ } else if (type == "updateClientStateShutdown") {
+ return updateClientStateShutdown(jsonObject);
+ } else if (type == "createBootState") {
+ return createBootState(jsonObject);
+ } else if (type == "createShutdownState") {
+ return createShutdownState(jsonObject);
+ } else if (type == "finishBootState") {
+ return finishBootState(jsonObject);
+ } else if (type == "finishShutdownState") {
+ return finishShutdownState(jsonObject);
+ } else {
+ return null;
+ }
+ }
+
+ private GearmanJobResult getBootState(JSONObject jsonObject) {
+ Vector<String> events = new Vector<String>();
JSONArray jsonArray = (JSONArray) jsonObject.get("events");
for (Object eventObj : jsonArray) {
String event = eventObj.toString();
@@ -38,99 +60,115 @@ public class StatusWorker extends AbstractGearmanFunction {
}
LinkedHashMap<String, LinkedHashMap<String, Object>> res = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
LinkedHashMap<String, Object> content = new LinkedHashMap<String, Object>();
- if (type.equals("boot")) {
- for (String event : events) {
- Boot boot = BOOTTHREADS.get(event);
- if (BOOTTHREADS.containsKey(event)) {
- Vector<Client> clients = boot.getClients();
- if (boot.isFinished()) {
- content.put("result shortcut", "successful");
- content.put("result text", "Booting of " + event
- + " has been finished!");
- res.put(event, content);
- BOOTTHREADS.remove(event);
- boot = null;
- } else if (boot.isFinishedWithErrors()) {
- content.put("result shortcut", "failed");
- content.put("result text", "Booting of " + event
- + " has not been finished, due to errors!");
- LinkedHashMap<String, String> clientErrors = new LinkedHashMap<String, String>();
- for (Client client : clients) {
- if (!client.getError().isEmpty()) {
- clientErrors.put(Integer.toString(client
- .getId()), client.getError());
- }
- }
- content.put("clients errors", clientErrors);
- res.put(event, content);
- BOOTTHREADS.remove(event);
- boot = null;
- } else {
- content.put("result shortcut", "not finished");
- content.put("result text", "Booting of " + event
- + " has not yet been finished!");
- LinkedHashMap<String, String> clientStatus = new LinkedHashMap<String, String>();
- for (Client client : clients) {
- clientStatus.put(Integer.toString(client.getId()),
- client.getStateText());
+ for (String event : events) {
+ BootState boot = BOOTSTATES.get(event);
+ if (BOOTSTATES.containsKey(event)) {
+ Vector<Client> clients = boot.getClients();
+ if (boot.isFinished()) {
+ content.put("result shortcut", "successful");
+ content.put("result text", "Booting of " + event
+ + " has been finished!");
+ res.put(event, content);
+ BOOTSTATES.remove(event);
+ boot = null;
+ } else if (boot.isFinishedWithErrors()) {
+ content.put("result shortcut", "failed");
+ content.put("result text", "Booting of " + event
+ + " has not been finished, due to errors!");
+ LinkedHashMap<String, String> clientErrors = new LinkedHashMap<String, String>();
+ for (Client client : clients) {
+ if (!client.getError().isEmpty()) {
+ clientErrors.put(Integer.toString(client.getId()),
+ client.getError());
}
- content.put("clients states", clientStatus);
- res.put(event, content);
}
+ content.put("clients errors", clientErrors);
+ res.put(event, content);
+ BOOTSTATES.remove(event);
+ boot = null;
} else {
- content.put("result shortcut", "not founded");
- content
- .put("result text",
- "The Boot process for the event has not been found.");
+ content.put("result shortcut", "not finished");
+ content.put("result text", "Booting of " + event
+ + " has not yet been finished!");
+ LinkedHashMap<String, String> clientStatus = new LinkedHashMap<String, String>();
+ for (Client client : clients) {
+ clientStatus.put(Integer.toString(client.getId()),
+ client.getStateText());
+ }
+ content.put("clients states", clientStatus);
res.put(event, content);
}
+ } else {
+ content.put("result shortcut", "not founded");
+ content.put("result text",
+ "The Boot process for the event has not been found.");
+ res.put(event, content);
}
- } else if (type.equals("shutdown")) {
- for (String event : events) {
- if (SHUTDOWNTHREADS.containsKey(event)) {
- Shutdown shutdown = SHUTDOWNTHREADS.get(event);
- Vector<Client> clients = shutdown.getClients();
- if (shutdown.isFinished()) {
- content.put("result shortcut", "succeeded");
- content.put("result text", "Shutdown of " + event
- + " has been finished!");
- res.put(event, content);
- SHUTDOWNTHREADS.remove(event);
- shutdown = null;
- } else if (shutdown.isFinishedWithErrors()) {
- content.put("result shortcut", "failed");
- content.put("result text", "Shutdown of " + event
- + " has not been finished, due to errors!");
- LinkedHashMap<String, String> clientErrors = new LinkedHashMap<String, String>();
- for (Client client : clients) {
- if (!client.getError().isEmpty()) {
- clientErrors.put(Integer.toString(client
- .getId()), client.getError());
- }
- }
- content.put("clients errors", clientErrors);
- res.put(event, content);
- SHUTDOWNTHREADS.remove(event);
- shutdown = null;
- } else {
- content.put("result shortcut", "not finished");
- content.put("result text", "Shutdown of " + event
- + " has not yet been finished!");
- LinkedHashMap<String, String> clientStatus = new LinkedHashMap<String, String>();
- for (Client client : clients) {
- clientStatus.put(Integer.toString(client.getId()),
- client.getStateText());
+ }
+ String jsonResult = JSONValue.toJSONString(res);
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult getShutdownState(JSONObject jsonObject) {
+ Vector<String> events = new Vector<String>();
+ JSONArray jsonArray = (JSONArray) jsonObject.get("events");
+ for (Object eventObj : jsonArray) {
+ String event = eventObj.toString();
+ events.add(event);
+ }
+ LinkedHashMap<String, LinkedHashMap<String, Object>> res = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
+ LinkedHashMap<String, Object> content = new LinkedHashMap<String, Object>();
+ for (String event : events) {
+ if (SHUTDOWNSTATES.containsKey(event)) {
+ ShutdownState shutdown = SHUTDOWNSTATES.get(event);
+ Vector<Client> clients = shutdown.getClients();
+ if (shutdown.isFinished()) {
+ content.put("result shortcut", "succeeded");
+ content.put("result text", "Shutdown of " + event
+ + " has been finished!");
+ res.put(event, content);
+ SHUTDOWNSTATES.remove(event);
+ shutdown = null;
+ } else if (shutdown.isFinishedWithErrors()) {
+ content.put("result shortcut", "failed");
+ content.put("result text", "Shutdown of " + event
+ + " has not been finished, due to errors!");
+ LinkedHashMap<String, String> clientErrors = new LinkedHashMap<String, String>();
+ for (Client client : clients) {
+ if (!client.getError().isEmpty()) {
+ clientErrors.put(Integer.toString(client.getId()),
+ client.getError());
}
- content.put("clients states", clientStatus);
- res.put(event, content);
}
+ content.put("clients errors", clientErrors);
+ res.put(event, content);
+ SHUTDOWNSTATES.remove(event);
+ shutdown = null;
} else {
- content.put("result shortcut", "not founded");
- content
- .put("result text",
- "The Shutdown process for the event has not been found.");
+ content.put("result shortcut", "not finished");
+ content.put("result text", "Shutdown of " + event
+ + " has not yet been finished!");
+ LinkedHashMap<String, String> clientStatus = new LinkedHashMap<String, String>();
+ for (Client client : clients) {
+ clientStatus.put(Integer.toString(client.getId()),
+ client.getStateText());
+ }
+ content.put("clients states", clientStatus);
res.put(event, content);
}
+ } else {
+ content.put("result shortcut", "not founded");
+ content
+ .put("result text",
+ "The Shutdown process for the event has not been found.");
+ res.put(event, content);
}
}
String jsonResult = JSONValue.toJSONString(res);
@@ -143,4 +181,131 @@ public class StatusWorker extends AbstractGearmanFunction {
denominator);
return gjr;
}
+
+ private GearmanJobResult updateClientStateBoot(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ String newState = jsonObject.get("newState").toString();
+ String error = jsonObject.get("error").toString();
+ int clientID = Integer.parseInt(jsonObject.get("clientID").toString());
+ BootState boot = BOOTSTATES.get(event);
+ boot.setClientState(clientID, ClientState.valueOf(newState));
+ if (!error.isEmpty()) {
+ boot.setClientError(clientID, error);
+ }
+ String jsonResult = "{client state successfully updated}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult updateClientStateShutdown(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ String newState = jsonObject.get("newState").toString();
+ String error = jsonObject.get("error").toString();
+ int clientID = Integer.parseInt(jsonObject.get("clientID").toString());
+ ShutdownState shutdown = SHUTDOWNSTATES.get(event);
+ shutdown.setClientState(clientID, ClientState.valueOf(newState));
+ if (!error.isEmpty()) {
+ shutdown.setClientError(clientID, error);
+ }
+ String jsonResult = "{client state successfully updated}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult createBootState(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ String eventOS = jsonObject.get("eventOS").toString();
+ JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
+ Vector<Client> clients = new Vector<Client>();
+ for (Object clientObj : jsonArray) {
+ JSONObject clientJsonObj = (JSONObject) clientObj;
+ Client client = new Client(clientJsonObj, "boot", event);
+ clients.add(client);
+ }
+ BootState boot = new BootState(event, clients, eventOS);
+ BOOTSTATES.put(event, boot);
+ String jsonResult = "{boot state successfully created}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult createShutdownState(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ JSONArray jsonArray = (JSONArray) jsonObject.get("clients");
+ Vector<Client> clients = new Vector<Client>();
+ for (Object clientObj : jsonArray) {
+ JSONObject clientJsonObj = (JSONObject) clientObj;
+ Client client = new Client(clientJsonObj, "shutdown", event);
+ clients.add(client);
+ }
+ ShutdownState shutdown = new ShutdownState(event, clients);
+ SHUTDOWNSTATES.put(event, shutdown);
+ String jsonResult = "{shutdown state successfully created}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult finishBootState(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ Boolean error = Boolean
+ .parseBoolean(jsonObject.get("error").toString());
+ BootState boot = BOOTSTATES.get(event);
+ boot.finish();
+ if (error) {
+ boot.error();
+ }
+ String jsonResult = "{boot state successfully finished}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
+
+ private GearmanJobResult finishShutdownState(JSONObject jsonObject) {
+ String event = jsonObject.get("eventName").toString();
+ Boolean error = Boolean
+ .parseBoolean(jsonObject.get("error").toString());
+ ShutdownState shutdown = SHUTDOWNSTATES.get(event);
+ shutdown.finish();
+ if (error) {
+ shutdown.error();
+ }
+ String jsonResult = "{shutdown state successfully finished}";
+ byte[] warnings = new byte[0];
+ byte[] exceptions = new byte[0];
+ int numerator = 0;
+ int denominator = 0;
+ GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true,
+ jsonResult.getBytes(), warnings, exceptions, numerator,
+ denominator);
+ return gjr;
+ }
} \ No newline at end of file