private void initModules(final List<ModuleConfiguration> modulesConfiguration, final GlobalConfiguration globalConfiguration) { for (ModuleConfiguration moduleConfig : modulesConfiguration) { try { logger.info("Creating module for class name {}", moduleConfig.module); final Module module = createModule(moduleConfig, globalConfiguration); modules.add(module); } catch (Exception e) { logger.warn("Failed to create module by class name", e); } } }
/** * DiagnosticsProcessor constructor. * * @param configuration Configuration object */ public DiagnosticsProcessor(final Configuration configuration) { if (configuration.reporters == null) { throw new IllegalStateException("Configuration does not have any reporter defined."); } if (configuration.modules == null) { throw new IllegalStateException("Configuration does not have any module defined."); } if (configuration.global == null) { throw new IllegalStateException("Configuration does not have global configuration defined."); } initReporters(configuration.reporters, configuration.global); initModules(configuration.modules, configuration.global); }
@Override public void report(Query query) { if (isRunning.get()) { diagnosticsProcessor.process(query); } }
/** * Reloads configuration and reinitialize modules and reporters. */ public void reload() { isRunning.set(false); diagnosticsProcessor.shutdown(); logger.info("Reloading diagnostics configuation."); Configuration newConfig; try { newConfig = loadConfiguration(); if (newConfig == null) { logger.error("Reload operation unsuccessful. Fix configuration and reload again"); return; } } catch (IllegalStateException ex) { logger.error("Reload operation failed. Fix configuration and reload again"); return; } unregisterEndpoints(); config = newConfig; diagnosticsProcessor = new DiagnosticsProcessor(config); initEndpoints(); logger.info("Configuration realoaded"); isRunning.set(true); }
/** * Completes the initialization and activates the query processing. */ public void activate() { this.diagnosticsProcessor = new DiagnosticsProcessor(config); this.isRunning.set(true); initEndpoints(); }
private Module createModule(final ModuleConfiguration moduleConfiguration, final GlobalConfiguration globalConfiguration) throws Exception { final List<Reporter> moduleReporters = new ArrayList<>(); if (moduleConfiguration.reporters == null || moduleConfiguration.reporters.isEmpty()) { logger.info("Assigning all available reporters to module {}", moduleConfiguration.module); moduleReporters.addAll(reporters.values()); } else { List<Reporter> reporters = getModuleReporters(moduleConfiguration.reporters); if (reporters.isEmpty()) { throw new IllegalStateException("Module does not have any reporter assigned."); } moduleReporters.addAll(reporters); } final Module module = (Module) Class.forName(moduleConfiguration.module) .getConstructor(ModuleConfiguration.class, List.class, GlobalConfiguration.class) .newInstance(moduleConfiguration, moduleReporters, globalConfiguration); return module; }