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; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.apache.log4j.Logger; public class BootWorker extends AbstractGearmanFunction { private static final Logger logger = ControllerWorkerMain.getLogger(); @Override public String getName() { return "boot"; } @Override public GearmanJobResult executeFunction() { String data = ByteUtils.fromUTF8Bytes((byte[]) this.data); Vector clients = new Vector(); JSONObject jsonObject = (JSONObject) JSONValue.parse(data); String event = ""; if (jsonObject.get("eventName") != null) { event = jsonObject.get("eventName").toString(); } String eventOS = ""; if (jsonObject.get("eventOS") != null) { eventOS = jsonObject.get("eventOS").toString(); } JSONArray jsonClients = new JSONArray(); if (jsonObject.get("clients") != null) { jsonClients = (JSONArray) jsonObject.get("clients"); } String res; if (!event.isEmpty() && !eventOS.isEmpty() && !jsonClients.isEmpty()) { for (Object clientObj : jsonClients) { JSONObject clientJsonObj = (JSONObject) clientObj; Client client = new Client(clientJsonObj, "boot", event); clients.add(client); } 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")); long scsavTime = Integer .parseInt(ControllerWorkerMain.getApplication_ini() .getString("gearman.worker.scsavTime")); 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, ", "); String whitelist = ControllerWorkerMain.getApplication_ini() .getString("gearman.worker.ps.whitelist"); StringTokenizer whitelistTokenizer = new StringTokenizer(whitelist, ", "); Vector psWhitelist = new Vector(); Vector psBlacklist = new Vector(); while (whitelistTokenizer.hasMoreTokens()) { String whiteEntry = whitelistTokenizer.nextToken(); psWhitelist.add(whiteEntry); } while (blacklistTokenizer.hasMoreTokens()) { String blackEntry = blacklistTokenizer.nextToken(); psBlacklist.add(blackEntry); } Boot boot = new Boot(event, clients, eventOS, updateRate, waitTime, scsavTime, psWhitelist, psBlacklist, gearmanServerHost, gearmanServerPort); GearmanJobServerConnection gearmanConnection = new GearmanNIOJobServerConnection( gearmanServerHost, gearmanServerPort); GearmanClient gearmanClient = new GearmanClientImpl(); gearmanClient.addJobServer(gearmanConnection); LinkedHashMap jsonData = new LinkedHashMap(); jsonData.put("eventName", event); jsonData.put("type", "createBootState"); jsonData.put("eventOS", eventOS); jsonData.put("clients", jsonClients); 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"); res = "Booting started"; } else { res = "Parameters incomplete"; } byte[] warnings = new byte[0]; byte[] exceptions = new byte[0]; int numerator = 0; int denominator = 0; GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true, res.getBytes(), warnings, exceptions, numerator, denominator); return gjr; } }