public static void main(String[] args) throws Exception { Server server = Server.builder().setHost("localhost").setPort("1099").build(); JMXConnector conn = null; try { conn = server.getServerConnection(); MBeanServerConnection mbeanServer = conn.getMBeanServerConnection(); TreeWalker tw = new TreeWalker(); tw.walkTree(mbeanServer); } catch (IOException e) { log.error("Problem processing queries for server: " + server.getHost() + ":" + server.getPort(), e); } finally { if (conn != null) { conn.close(); } } }
private Server merge(Server firstServer, Server secondServer) { return Server.builder(firstServer) .addQueries(secondServer.getQueries()) .build(); } }
private KResult(Server server, Result result) { alias = server.getAlias(); pid = server.getPid(); host = server.getHost(); port = server.getPort(); source = server.getSource(); attributeName = result.getAttributeName(); className = result.getClassName(); objDomain = result.getObjDomain(); typeName = result.getTypeName(); typeNameMap = result.getTypeNameMap(); epoch = result.getEpoch(); keyAlias = result.getKeyAlias(); this.valuePath = result.getValuePath(); this.value = result.getValue(); } }
private Trigger createTrigger(Server server) throws ParseException { int runPeriod = configuration.getRunPeriod(); Trigger trigger; if (server.getCronExpression() != null && CronExpression.isValidExpression(server.getCronExpression())) { CronTrigger cTrigger = new CronTrigger(); cTrigger.setCronExpression(server.getCronExpression()); trigger = cTrigger; } else { if (server.getRunPeriodSeconds() != null) { runPeriod = server.getRunPeriodSeconds(); } trigger = TriggerUtils.makeSecondlyTrigger(runPeriod); // TODO replace Quartz with a ScheduledExecutorService } trigger.setName(server.getHost() + ":" + server.getPort() + "-" + Long.toString(System.nanoTime())); trigger.setStartTime(computeSpreadStartDate(runPeriod)); return trigger; }
private void scheduleJob(Server server) throws SchedulerException, ParseException { Scheduler scheduler = getScheduler(); String name = server.getHost() + ":" + server.getPort() + "-" + System.currentTimeMillis(); JobDetail jd = new JobDetail(name, "ServerJob", ServerJob.class); JobDataMap map = new JobDataMap(); map.put(Server.class.getName(), server); map.put(Server.JMX_CONNECTION_FACTORY_POOL, this.getObjectPoolMap().get(Server.JMX_CONNECTION_FACTORY_POOL)); jd.setJobDataMap(map); Trigger trigger = null; if ((server.getCronExpression() != null) && CronExpression.isValidExpression(server.getCronExpression())) { trigger = new CronTrigger(); ((CronTrigger) trigger).setCronExpression(server.getCronExpression()); ((CronTrigger) trigger).setName(server.getHost() + ":" + server.getPort() + "-" + Long.valueOf(System.currentTimeMillis()).toString()); ((CronTrigger) trigger).setStartTime(new Date()); } else { Trigger minuteTrigger = TriggerUtils.makeSecondlyTrigger(SECONDS_BETWEEN_SERVER_JOB_RUNS); minuteTrigger.setName(server.getHost() + ":" + server.getPort() + "-" + Long.valueOf(System.currentTimeMillis()).toString()); minuteTrigger.setStartTime(new Date()); trigger = minuteTrigger; } scheduler.scheduleJob(jd, trigger); if (LOG.isDebugEnabled()) { LOG.debug("Scheduled job: " + jd.getName() + " for server: " + server); } }
public String getSource() { if (alias != null) { return alias; } return this.getHost(); }
public Server build() { Server.Builder builder = Server.builder(server) .addOutputWriters(createOutputWriters(temporaryOutputWriters)) .clearQueries(); for (Map.Entry<Query, Set<OutputWriterFactory>> queryEntry : queries.entrySet()) { builder.addQuery( Query.builder(queryEntry.getKey()) .addOutputWriters(createOutputWriters(queryEntry.getValue())) .build()); } return builder.build(); }
resultTagList.add(",jmxport=" + server.getPort());
/** * Shut down the output writers and clear the master server list * Used both during shutdown and when re-reading config files */ private void stopWriterAndClearMasterServerList() { for (Server server : this.masterServersList) { for (OutputWriter writer : server.getOutputWriters()) { try { writer.close(); } catch (LifecycleException ex) { log.error("Eror stopping writer: {}", writer); } } for (Query query : server.getQueries()) { for (OutputWriter writer : query.getOutputWriterInstances()) { try { writer.close(); log.debug("Stopped writer: {} for query: {}", writer, query); } catch (LifecycleException ex) { log.error("Error stopping writer: {} for query: {}", writer, query, ex); } } } } this.masterServersList = ImmutableList.of(); }
public void process() throws LifecycleException, ValidationException, SchedulerException, ParseException { for (Server server : this.masterServersList) { if (server.isLocal()) { server.setLocalMBeanServer(mbeanServer); server.setAlias(fabricService.getCurrentContainerName()); } // need to inject the poolMap for (Query query : server.getQueries()) { query.setServer(server); for (OutputWriter writer : query.getOutputWriters()) { writer.setObjectPoolMap(getObjectPoolMap()); writer.start(); } } // Now validate the setup of each of the OutputWriter's per query. validateSetup(server.getQueries()); // Now schedule the jobs for execution. scheduleJob(server); } }
/** * Processes all the Servers into Job's * <p/> * Needs to be called after processFiles() */ private void processServersIntoJobs() throws LifecycleException { for (Server server : this.masterServersList) { try { // need to inject the poolMap for (Query query : server.getQueries()) { for (OutputWriter writer : query.getOutputWriterInstances()) { writer.start(); } } // Now validate the setup of each of the OutputWriter's per // query. this.validateSetup(server, server.getQueries()); // Now schedule the jobs for execution. this.scheduleJob(server); } catch (ParseException ex) { throw new LifecycleException("Error parsing cron expression: " + server.getCronExpression(), ex); } catch (SchedulerException ex) { throw new LifecycleException("Error scheduling job for server: " + server, ex); } catch (ValidationException ex) { throw new LifecycleException("Error validating json setup for query", ex); } } }
StringBuilder writer = new StringBuilder(); writer.append("{ \"host\": "); quote(query.getServer().getAlias(), writer); writer.append(", \"seq\" : " + SEQUENCE_COUNTER.incrementAndGet()); writer.append(", \"timestamp\" : ");
/** * Either invokes the queries multithreaded (max threads == * server.getMultiThreaded()) or invokes them one at a time. */ public static void processQueriesForServer(MBeanServerConnection mbeanServer, Server server) throws Exception { if (server.isQueriesMultiThreaded()) { ExecutorService service = null; try { service = Executors.newFixedThreadPool(server.getNumQueryThreads()); if (log.isDebugEnabled()) { log.debug("----- Creating " + server.getQueries().size() + " query threads"); } List<Callable<Object>> threads = new ArrayList<Callable<Object>>(server.getQueries().size()); for (Query query : server.getQueries()) { query.setServer(server); ProcessQueryThread pqt = new ProcessQueryThread(mbeanServer, query); threads.add(Executors.callable(pqt)); } service.invokeAll(threads); } finally { shutdownAndAwaitTermination(service); } } else { for (Query query : server.getQueries()) { query.setServer(server); processQuery(mbeanServer, query); } } }
private void add(Server server) { TemporaryServer temporaryServer = singleton(server); temporaryServer.addQueries(server.getQueries()); temporaryServer.addOutputWriters(server.getOutputWriterFactories()); }
@Override public void run() { log.debug("+++++ Started server job {}", server); try { final ThreadPoolExecutor executor = queryExecutorRepository.getExecutor(server); for (Query query : server.getQueries()) { ProcessQueryThread pqt = new ProcessQueryThread(resultProcessor, server, query); try { executor.submit(pqt); } catch (RejectedExecutionException ree) { log.error("Could not submit query {}. You could try to size the 'queryProcessorExecutor' to a larger size.", pqt, ree); } } log.debug("+++++ Finished server job {}", server); } catch (Exception e) { if (log.isDebugEnabled()) { log.warn("+++++ Failed server job " + server, e); } else { log.warn("+++++ Failed server job {}: {} {}", server, e.getClass().getName(), e.getMessage()); } } }