public static void main(String[] args) throws Exception { ArrayList<String> approvedAdapters = new ArrayList(); approvedAdapters.add("Fail"); JSONObject node = new JSONObject() .put("type", "id") .put("value", UUID.randomUUID()) .put("status", "test") ; //Read file of certs and create job_config object then LGPayload String job_id = UUID.randomUUID().toString(); JSONObject job_config = new JSONObject() .put("job_item", "job_value"); LGPayload payload = new LGPayload(job_id, "", job_config); //Add all nodes payload.addResponseNode(node); SubmitToRabbitMQ submit = new SubmitToRabbitMQ(); submit.sendNewJobToCommandController(approvedAdapters, payload); Thread.sleep(500); submit.close(); System.out.println("Job submitted."); } }
public void resetJobs() { Set<String> ids = MongoDBStore.getResetJobs(); if(ids.size() == 0) { log.info("No jobs ready for reset."); return; } log.info("Resetting LEMONGRENADE jobs. IDs:"+ids.toString()); Iterator iterator = ids.iterator(); String reason = "RESET date reached."; while(iterator.hasNext()) { try { String jobId = iterator.next().toString(); SUBMIT_TO_RABBIT.sendReset(jobId, reason); } catch(Exception e) { e.printStackTrace(); } } }
/** * Builds a job with dummy payload based off job_id. (for testing purposes mostly) */ public static JSONObject buildJobSubmitObject(List approvedAdapters, String jobId) { JSONObject node = new JSONObject(); node.put("status","new"); node.put("type", "id"); node.put("value",UUID.randomUUID().toString()); return buildJobSubmitObject(approvedAdapters, jobId, node); }
/** Closes RabbitMQ connection, COORDINATORCMD channel, and LemonGraph * @throws Exception If the connection cannot be closed * */ public void close() throws Exception { closeChannel(channel); closeConnection(connection); log.info("Closing connection to LemonGraph."); LemonGraph.close(); JobManager.close(); }
public void close() { try { JOB_MANAGER.close(); ADAPTER_MANAGER.close(); SUBMIT_TO_RABBIT.close(); LEMONGRAPH.close(); } catch(Exception e) { log.error("Failed to close connections."); e.printStackTrace(); } }
LGJob lgJob = Utils.getSubmitToRabbit().sendNewJobToCommandController(approvedAdapters, newPayload); jobId = lgJob.getJobId(); } catch (Exception e) {
/** */ public void cancelAllActiveJobs() throws Exception { JobManager jb = new JobManager(); List<LGJob> activeJobs = jb.getAllActive(); for (LGJob j: activeJobs) { log.info("Cancelling Job :"+j.getJobId()); sendCancel(j.getJobId()); } }
/** * See api/Job.java for complete description * @param jobId String for job ID * @param taskId String for task ID * @throws Exception when failing to send retry. */ public void sendRetry(String jobId, String taskId) throws Exception { openConnections(); ArrayList approvedAdapters = new ArrayList<String>(); LGPayload cmdPayload = new LGPayload(jobId); JSONObject jobConfig = new JSONObject(); JSONArray tasks = new JSONArray(); // So in the future we can support a list of taskIds if (!taskId.equals("")) { tasks.put(taskId); } jobConfig.put("tasks", tasks); cmdPayload.setJobConfig(jobConfig); LGCommand cmd = new LGCommand(LGCommand.COMMAND_TYPE_RETRY_FAILED_TASKS, jobId, 100, 255, approvedAdapters, cmdPayload); channel.basicPublish( "" //exchange , LGConstants.LEMONGRENADE_COORDINATORCMD //routing key , new AMQP.BasicProperties.Builder().priority(LGConstants.QUEUE_PRIORITY_COMMAND).build() , cmd.toByteArray()); }
@Override public void prepare(final Map config, final TopologyContext context) { checkRunning = false; JOB_MANAGER = new JobManager(); ADAPTER_MANAGER = new AdapterManager(); SUBMIT_TO_RABBIT = new SubmitToRabbitMQ(); LEMONGRAPH = new LemonGraph(); log.info("Performing startup reset/expire for jobs."); resetJobs();//reset required jobs on startup expireJobs();//delete required jobs on startup LAST_RESET = System.currentTimeMillis(); }
public static void close() { try { ADAPTER_MANAGER.close(); LEMONGRAPH.close(); JOB_MANAGER.close(); MONGO_DB_STORE.close(); SUBMIT_TO_RABBIT.close(); EXECUTOR.shutdownNow(); } catch(Exception e) { log.error("Error closing connections."); e.printStackTrace(); } }
if ((status == LGJob.STATUS_NEW) || (status == LGJob.STATUS_PROCESSING) || (status == LGJob.STATUS_QUEUED)) { log.info("job:"+currentID+" status:"+lg.getStatusString(status)+" eligible for cancel."); getSubmitToRabbit().sendCancel(currentID);
/** * See api/Job.java for complete description * @param jobId String job ID * @param reason String reason for reset * */ public void sendReset(String jobId, String reason) throws Exception { openConnections(); ArrayList approvedAdapters = new ArrayList<String>(); LGPayload cmdPayload = new LGPayload(jobId); JSONObject jobConfig = new JSONObject(); jobConfig.put(LGConstants.LG_RESET_REASON, reason); cmdPayload.setJobConfig(jobConfig); LGCommand cmd = new LGCommand(LGCommand.COMMAND_TYPE_RESET, jobId, 100, 255, approvedAdapters, cmdPayload); channel.basicPublish("", LGConstants.LEMONGRENADE_COORDINATORCMD , new AMQP.BasicProperties.Builder().priority(LGConstants.QUEUE_PRIORITY_COMMAND).build() , cmd.toByteArray()); }
public static void feedCoordinator(int sleep, int times, ArrayList<String> approvedAdapters, JSONArray nodes) throws Exception { String jobId; SubmitToRabbitMQ submit = new SubmitToRabbitMQ(); for (int i = 0; i != times; i++) { LGPayload lgp = new LGPayload(); lgp.addResponseNodes(nodes); JSONObject jobConfig = new JSONObject(); jobConfig.put("depth","6"); lgp.setJobConfig(jobConfig); submit.sendNewJobToCommandController(approvedAdapters, lgp); if (sleep > 0) { Thread.sleep(sleep); // ~500 requests/sec } } submit.close(); }
Utils.getSubmitToRabbit().sendReset(jobId, reason);
/** */ public void sendCancel(String jobId) throws Exception { openConnections(); ArrayList approvedAdapters = new ArrayList<String>(); LGPayload seedPayload = new LGPayload(jobId); LGCommand cmd = new LGCommand(LGCommand.COMMAND_TYPE_STOP, jobId, 100, 255, approvedAdapters, seedPayload); channel.basicPublish("", LGConstants.LEMONGRENADE_COORDINATORCMD , new AMQP.BasicProperties.Builder().priority(LGConstants.QUEUE_PRIORITY_COMMAND).build() , cmd.toByteArray()); }
public static JSONObject buildJobSubmitObject(List approvedAdapters, String jobId, JSONObject node) { LGPayload lgp = new LGPayload(jobId); if(!node.has("type")) //add "type" if not present node.put("type","id"); if(!node.has("value")) //add value if not present node.put("value",UUID.randomUUID().toString()); lgp.addResponseNode(node); return buildJobSubmitObject(approvedAdapters, lgp); }
public static void feedCoordinator(int sleep, int times, ArrayList<String> approvedAdapters, JSONObject node) throws Exception { String jobId; SubmitToRabbitMQ submit = new SubmitToRabbitMQ(); for (int i = 0; i != times; i++) { LGPayload lgp = new LGPayload(); lgp.addResponseNode(node); JSONObject jobConfig = new JSONObject(); jobConfig.put("depth","6"); lgp.setJobConfig(jobConfig); submit.sendNewJobToCommandController(approvedAdapters, lgp); if (sleep > 0) { Thread.sleep(sleep); // ~500 requests/sec } } submit.close(); }
Utils.getSubmitToRabbit().sendReset(jobId, reason); } catch (Exception e) { error = "Can not reset job :" + e.getMessage();
/** * @param jobId LG job ID to send to * @param approvedAdapters List of approved adapter names * @param seedPayload LGPayload for seeding a new job * */ public void sendAddToJobToCommandController(String jobId, ArrayList<String> approvedAdapters, LGPayload seedPayload) throws Exception { openConnections(); int ttl = 0; if (seedPayload.getJobConfig().has("ttl")) { ttl = seedPayload.getJobConfig().getInt("ttl"); } try { LemonGraph.getGraph(jobId); //verify the job already exists in LemonGraph } catch(Exception e) { throw new Exception("job:"+jobId+" doesn't exist. First perform a job create. Error:"+e.getMessage()); } seedPayload.setJobId(jobId); LGCommand cmd = new LGCommand(LGCommand.COMMAND_TYPE_ADD, jobId, ttl, 255, approvedAdapters, seedPayload); channel.basicPublish("", LGConstants.LEMONGRENADE_COORDINATORCMD , new AMQP.BasicProperties.Builder().priority(LGConstants.QUEUE_PRIORITY_NEW_JOB).build() , cmd.toByteArray()); }
public static void main(String[] args) throws Exception { ArrayList<String> approvedAdapters = new ArrayList(); approvedAdapters.add("HelloWorld"); JSONObject node = new JSONObject() .put("type", "id") .put("value", UUID.randomUUID()) .put("status", "test") ; //Read file of certs and create job_config object then LGPayload String job_id = UUID.randomUUID().toString(); JSONObject job_config = new JSONObject() .put("job_item", "job_value"); LGPayload payload = new LGPayload(job_id, "", job_config); //Add all nodes payload.addResponseNode(node); SubmitToRabbitMQ submit = new SubmitToRabbitMQ(); submit.sendNewJobToCommandController(approvedAdapters, payload); Thread.sleep(500); submit.close(); System.out.println("Job submitted."); } }