package ControllerWorker; import java.util.HashMap; import java.util.Vector; import org.gearman.client.GearmanJobResult; import org.gearman.client.GearmanJobResultImpl; import org.gearman.util.ByteUtils; import org.gearman.worker.AbstractGearmanFunction; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; public class StatusWorker extends AbstractGearmanFunction { static HashMap BOOTTHREADS = new HashMap(); static HashMap SHUTDOWNTHREADS = new HashMap(); @Override public String getName() { return "status"; } @Override public GearmanJobResult executeFunction() { String data = ByteUtils.fromUTF8Bytes((byte[]) this.data); Vector events = new Vector(); JSONObject jsonObject = (JSONObject) JSONValue.parse(data); String type = jsonObject.get("type").toString(); JSONArray jsonArray = (JSONArray) jsonObject.get("events"); for (Object eventObj : jsonArray) { String event = eventObj.toString(); events.add(event); } String[] res = new String[jsonArray.size()]; int count = 0; if (type.equals("boot")) { for (String event : events) { Boot boot = BOOTTHREADS.get(event); if (boot.isFinished()) { res[count] = "Booting of " + event + " finished!"; } else if (boot.isFinishedWithErrors()) { res[count] = "Booting of " + event + " finished with errors!"; } else { res[count] = "Booting of " + event + " not yet finished!"; } count++; } } else if (type.equals("shutdown")) { for (String event : events) { Shutdown shutdown = SHUTDOWNTHREADS.get(event); if (shutdown.isFinished()) { res[count] = "Shutdown of " + event + " finished!"; } else if (shutdown.isFinishedWithErrors()) { res[count] = "Shutdown of " + event + " finished with errors!"; } else { res[count] = "Shutdown of " + event + " not yet finished!"; } count++; } } 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; } }