use of org.jvnet.hk2.config in project Payara by payara.
the class GrizzlyService method postConstruct.
/**
* The component has been injected with any dependency and
* will be placed into commission by the subsystem.
*/
@Override
public void postConstruct() {
events.register(this);
final NetworkConfig networkConfig = config.getNetworkConfig();
configListener = new DynamicConfigListener(config, LOGGER);
ObservableBean bean = (ObservableBean) ConfigSupport.getImpl(networkConfig.getNetworkListeners());
bean.addListener(configListener);
bean = (ObservableBean) ConfigSupport.getImpl(config.getHttpService());
bean.addListener(configListener);
transactions.addListenerForType(SystemProperty.class, configListener);
configListener.setGrizzlyService(this);
try {
boolean isAtLeastOneProxyStarted = false;
futures = new ArrayList<Future<Result<Thread>>>();
// Record how long it took for the listeners to start up
final long startTime = System.currentTimeMillis();
// Keep a list of successfully started listeners
List<NetworkListener> startedListeners = new ArrayList<>();
for (NetworkListener listener : networkConfig.getNetworkListeners().getNetworkListener()) {
if (createNetworkProxy(listener) != null) {
isAtLeastOneProxyStarted = true;
startedListeners.add(listener);
}
}
if (isAtLeastOneProxyStarted) {
// Get the startup time
final long startupTime = System.currentTimeMillis() - startTime;
// Log the listeners which started.
String boundAddresses = Arrays.toString(startedListeners.stream().map(listener -> listener.getAddress() + ":" + listener.getPort()).collect(Collectors.toList()).toArray());
LOGGER.log(Level.INFO, KernelLoggerInfo.grizzlyStarted, new Object[] { Grizzly.getDotedVersion(), startupTime, boundAddresses });
registerContainerAdapters();
}
} catch (RuntimeException e) {
// So far postConstruct can not throw any other exception type
LOGGER.log(Level.SEVERE, KernelLoggerInfo.grizzlyCantStart, e);
for (NetworkProxy proxy : proxies) {
try {
proxy.stop();
} catch (Exception proxyStopException) {
LOGGER.log(Level.SEVERE, KernelLoggerInfo.grizzlyCloseException, new Object[] { proxy.getPort(), proxyStopException });
}
}
throw e;
}
registerMonitoringStatsProviders();
}
use of org.jvnet.hk2.config in project Payara by payara.
the class DeleteSystemProperty method execute.
/**
* Executes the command with the command parameters passed as Properties
* where the keys are the paramter names and the values the parameter values
*
* @param context information
*/
public void execute(AdminCommandContext context) {
final ActionReport report = context.getActionReport();
Property domainProp = domain.getProperty("administrative.domain.name");
String domainName = domainProp.getValue();
if (!spb.containsProperty(propName)) {
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
String msg = localStrings.getLocalString("no.such.property", "System Property named {0} does not exist at the given target {1}", propName, target);
report.setMessage(msg);
return;
}
if (definitions(propName) == 1) {
// implying user is deleting the "last" definition of this property
List<String> refs = new ArrayList<String>();
List<Dom> doms = new ArrayList<Dom>();
if ("domain".equals(target) || target.equals(domainName)) {
for (Server s : domain.getServers().getServer()) {
Config config = s.getConfig();
Cluster cluster = s.getCluster();
if (!s.containsProperty(propName) && !config.containsProperty(propName)) {
if (cluster != null) {
if (!cluster.containsProperty(propName)) {
doms.add(Dom.unwrap(s));
}
} else {
doms.add(Dom.unwrap(s));
}
}
}
} else {
Config config = domain.getConfigNamed(target);
if (config != null) {
doms.add(Dom.unwrap(config));
String configName = config.getName();
for (Server s : domain.getServers().getServer()) {
String configRef = s.getConfigRef();
if (configRef.equals(configName)) {
if (!s.containsProperty(propName)) {
doms.add(Dom.unwrap(s));
}
}
}
for (Cluster c : domain.getClusters().getCluster()) {
String configRef = c.getConfigRef();
if (configRef.equals(configName)) {
if (!c.containsProperty(propName)) {
doms.add(Dom.unwrap(c));
}
}
}
} else {
Cluster cluster = domain.getClusterNamed(target);
if (cluster != null) {
doms.add(Dom.unwrap(cluster));
Config clusterConfig = domain.getConfigNamed(cluster.getConfigRef());
doms.add(Dom.unwrap(clusterConfig));
for (Server s : cluster.getInstances()) {
if (!s.containsProperty(propName)) {
doms.add(Dom.unwrap(s));
}
}
} else {
Server server = domain.getServerNamed(target);
doms.add(Dom.unwrap(server));
doms.add(Dom.unwrap(domain.getConfigNamed(server.getConfigRef())));
}
}
}
String sysPropName = SystemPropertyConstants.getPropertyAsValue(propName);
for (Dom d : doms) {
listRefs(d, sysPropName, refs);
}
if (!refs.isEmpty()) {
// there are some references
String msg = localStrings.getLocalString("cant.delete.referenced.property", "System Property {0} is referenced by {1} in the configuration. Please remove the references first.", propName, Arrays.toString(refs.toArray()));
report.setMessage(msg);
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
}
// now we are sure that the target exits in the config, just remove the given property
try {
ConfigSupport.apply(new SingleConfigCode<SystemPropertyBag>() {
public Object run(SystemPropertyBag param) throws PropertyVetoException, TransactionFailure {
param.getSystemProperty().remove(param.getSystemProperty(propName));
return param;
}
}, spb);
report.setActionExitCode(ActionReport.ExitCode.SUCCESS);
String msg = localStrings.getLocalString("delete.sysprops.ok", "System Property named {0} deleted from given target {1}. Make sure you check its references.", propName, target);
report.setMessage(msg);
} catch (TransactionFailure tf) {
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
report.setFailureCause(tf);
}
}
use of org.jvnet.hk2.config in project Payara by payara.
the class GetHealthCheckConfiguration method execute.
@Override
public void execute(AdminCommandContext context) {
Config config = targetUtil.getConfig(target);
if (config == null) {
context.getActionReport().setMessage("No such config named: " + target);
context.getActionReport().setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
ActionReport mainActionReport = context.getActionReport();
// subReport(0)
ActionReport baseActionReport = mainActionReport.addSubActionsReport();
// subReport(1)
ActionReport hoggingThreadsActionReport = mainActionReport.addSubActionsReport();
// subReport(2)
ActionReport thresholdDiagnosticsActionReport = mainActionReport.addSubActionsReport();
// subReport(3)
ActionReport stuckThreadsActionReport = mainActionReport.addSubActionsReport();
ColumnFormatter baseColumnFormatter = new ColumnFormatter(baseHeaders);
ColumnFormatter hoggingThreadsColumnFormatter = new ColumnFormatter(hoggingThreadsHeaders);
ColumnFormatter stuckThreadsColumnFormatter = new ColumnFormatter(stuckThreadsHeaders);
ColumnFormatter thresholdDiagnosticsColumnFormatter = new ColumnFormatter(thresholdDiagnosticsHeaders);
ColumnFormatter notifiersColumnFormatter = new ColumnFormatter(notifierHeaders);
HealthCheckServiceConfiguration configuration = config.getExtensionByType(HealthCheckServiceConfiguration.class);
List<ServiceHandle<BaseHealthCheck>> allServiceHandles = habitat.getAllServiceHandles(BaseHealthCheck.class);
List<ServiceHandle<BaseNotifierService>> allNotifierServiceHandles = habitat.getAllServiceHandles(BaseNotifierService.class);
mainActionReport.appendMessage("Health Check Service Configuration is enabled?: " + configuration.getEnabled() + "\n");
if (Boolean.parseBoolean(configuration.getEnabled())) {
mainActionReport.appendMessage("Historical Tracing Enabled?: " + configuration.getHistoricalTraceEnabled() + "\n");
if (Boolean.parseBoolean(configuration.getHistoricalTraceEnabled())) {
mainActionReport.appendMessage("Historical Tracing Store Size: " + configuration.getHistoricalTraceStoreSize() + "\n");
}
if (!Strings.isNullOrEmpty(configuration.getHistoricalTraceStoreTimeout())) {
mainActionReport.appendMessage("Health Check Historical Tracing Store Timeout in Seconds: " + configuration.getHistoricalTraceStoreTimeout() + "\n");
}
}
// Create the extraProps map for the general healthcheck configuration
Properties mainExtraProps = new Properties();
Map<String, Object> mainExtraPropsMap = new HashMap<>();
mainExtraPropsMap.put("enabled", configuration.getEnabled());
mainExtraPropsMap.put("historicalTraceEnabled", configuration.getHistoricalTraceEnabled());
mainExtraPropsMap.put("historicalTraceStoreSize", configuration.getHistoricalTraceStoreSize());
mainExtraPropsMap.put("historicalTraceStoreTimeout", configuration.getHistoricalTraceStoreTimeout());
mainExtraProps.put("healthcheckConfiguration", mainExtraPropsMap);
mainActionReport.setExtraProperties(mainExtraProps);
if (!configuration.getNotifierList().isEmpty()) {
List<Class<Notifier>> notifierClassList = Lists.transform(configuration.getNotifierList(), new Function<Notifier, Class<Notifier>>() {
@Override
public Class<Notifier> apply(Notifier input) {
return resolveNotifierClass(input);
}
});
Properties extraProps = new Properties();
for (ServiceHandle<BaseNotifierService> serviceHandle : allNotifierServiceHandles) {
Notifier notifier = configuration.getNotifierByType(serviceHandle.getService().getNotifierType());
if (notifier != null) {
ConfigView view = ConfigSupport.getImpl(notifier);
NotifierConfigurationType annotation = view.getProxyType().getAnnotation(NotifierConfigurationType.class);
if (notifierClassList.contains(view.<Notifier>getProxyType())) {
Object[] values = new Object[2];
values[0] = annotation.type();
values[1] = notifier.getEnabled();
notifiersColumnFormatter.addRow(values);
Map<String, Object> map = new HashMap<>(2);
map.put("notifierName", values[0]);
map.put("notifierEnabled", values[1]);
extraProps.put("notifierList" + annotation.type(), map);
}
}
}
mainActionReport.getExtraProperties().putAll(extraProps);
mainActionReport.appendMessage(notifiersColumnFormatter.toString());
mainActionReport.appendMessage(StringUtils.EOL);
}
mainActionReport.appendMessage("Below are the list of configuration details of each checker listed by its name.");
mainActionReport.appendMessage(StringUtils.EOL);
Properties baseExtraProps = new Properties();
Properties hoggingThreadsExtraProps = new Properties();
Properties stuckThreadsExtrasProps = new Properties();
Properties thresholdDiagnosticsExtraProps = new Properties();
for (ServiceHandle<BaseHealthCheck> serviceHandle : allServiceHandles) {
Checker checker = configuration.getCheckerByType(serviceHandle.getService().getCheckerType());
if (checker instanceof HoggingThreadsChecker) {
HoggingThreadsChecker hoggingThreadsChecker = (HoggingThreadsChecker) checker;
Object[] values = new Object[6];
values[0] = hoggingThreadsChecker.getName();
values[1] = hoggingThreadsChecker.getEnabled();
values[2] = hoggingThreadsChecker.getTime();
values[3] = hoggingThreadsChecker.getUnit();
values[4] = hoggingThreadsChecker.getThresholdPercentage();
values[5] = hoggingThreadsChecker.getRetryCount();
hoggingThreadsColumnFormatter.addRow(values);
// Create the extra props map for a hogging thread checker
addHoggingThreadsCheckerExtraProps(hoggingThreadsExtraProps, hoggingThreadsChecker);
} else if (checker instanceof ThresholdDiagnosticsChecker) {
ThresholdDiagnosticsChecker thresholdDiagnosticsChecker = (ThresholdDiagnosticsChecker) checker;
Object[] values = new Object[7];
values[0] = thresholdDiagnosticsChecker.getName();
values[1] = thresholdDiagnosticsChecker.getEnabled();
values[2] = thresholdDiagnosticsChecker.getTime();
values[3] = thresholdDiagnosticsChecker.getUnit();
Property thresholdCriticalProperty = thresholdDiagnosticsChecker.getProperty(THRESHOLD_CRITICAL);
values[4] = thresholdCriticalProperty != null ? thresholdCriticalProperty.getValue() : "-";
Property thresholdWarningProperty = thresholdDiagnosticsChecker.getProperty(THRESHOLD_WARNING);
values[5] = thresholdWarningProperty != null ? thresholdWarningProperty.getValue() : "-";
Property thresholdGoodProperty = thresholdDiagnosticsChecker.getProperty(THRESHOLD_GOOD);
values[6] = thresholdGoodProperty != null ? thresholdGoodProperty.getValue() : "-";
thresholdDiagnosticsColumnFormatter.addRow(values);
// Create the extra props map for a checker with thresholds
addThresholdDiagnosticsCheckerExtraProps(thresholdDiagnosticsExtraProps, thresholdDiagnosticsChecker);
} else if (checker instanceof StuckThreadsChecker) {
StuckThreadsChecker stuckThreadsChecker = (StuckThreadsChecker) checker;
Object[] values = new Object[6];
values[0] = stuckThreadsChecker.getName();
values[1] = stuckThreadsChecker.getEnabled();
values[2] = stuckThreadsChecker.getTime();
values[3] = stuckThreadsChecker.getUnit();
values[4] = stuckThreadsChecker.getThreshold();
values[5] = stuckThreadsChecker.getThresholdTimeUnit();
stuckThreadsColumnFormatter.addRow(values);
addStuckThreadsCheckerExtrasProps(stuckThreadsExtrasProps, stuckThreadsChecker);
} else if (checker != null) {
Object[] values = new Object[4];
values[0] = checker.getName();
values[1] = checker.getEnabled();
values[2] = checker.getTime();
values[3] = checker.getUnit();
baseColumnFormatter.addRow(values);
// Create the extra props map for a base checker
addBaseCheckerExtraProps(baseExtraProps, checker);
}
}
if (!baseColumnFormatter.getContent().isEmpty()) {
baseActionReport.setMessage(baseColumnFormatter.toString());
baseActionReport.appendMessage(StringUtils.EOL);
}
if (!hoggingThreadsColumnFormatter.getContent().isEmpty()) {
hoggingThreadsActionReport.setMessage(hoggingThreadsColumnFormatter.toString());
hoggingThreadsActionReport.appendMessage(StringUtils.EOL);
}
if (!thresholdDiagnosticsColumnFormatter.getContent().isEmpty()) {
thresholdDiagnosticsActionReport.setMessage(thresholdDiagnosticsColumnFormatter.toString());
thresholdDiagnosticsActionReport.appendMessage(StringUtils.EOL);
}
if (!stuckThreadsColumnFormatter.getContent().isEmpty()) {
stuckThreadsActionReport.setMessage(stuckThreadsColumnFormatter.toString());
stuckThreadsActionReport.appendMessage(StringUtils.EOL);
}
// Populate the extraProps with defaults for any checker that isn't present
baseExtraProps = checkCheckerPropertyPresence(thresholdDiagnosticsExtraProps, garbageCollectorPropertyName);
hoggingThreadsExtraProps = checkCheckerPropertyPresence(hoggingThreadsExtraProps, hoggingThreadsPropertyName);
stuckThreadsExtrasProps = checkCheckerPropertyPresence(stuckThreadsExtrasProps, stuckThreadsPropertyName);
thresholdDiagnosticsExtraProps = checkCheckerPropertyPresence(thresholdDiagnosticsExtraProps, cpuUsagePropertyName);
thresholdDiagnosticsExtraProps = checkCheckerPropertyPresence(thresholdDiagnosticsExtraProps, connectionPoolPropertyName);
thresholdDiagnosticsExtraProps = checkCheckerPropertyPresence(thresholdDiagnosticsExtraProps, heapMemoryUsagePropertyName);
thresholdDiagnosticsExtraProps = checkCheckerPropertyPresence(thresholdDiagnosticsExtraProps, machineMemoryUsagePropertyName);
// Add the extra props to their respective action reports
baseActionReport.setExtraProperties(baseExtraProps);
hoggingThreadsActionReport.setExtraProperties(hoggingThreadsExtraProps);
thresholdDiagnosticsActionReport.setExtraProperties(thresholdDiagnosticsExtraProps);
stuckThreadsActionReport.setExtraProperties(stuckThreadsExtrasProps);
mainActionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS);
}
use of org.jvnet.hk2.config in project Payara by payara.
the class HealthCheckServiceThresholdConfigurer method execute.
@Override
public void execute(AdminCommandContext context) {
final ActionReport actionReport = context.getActionReport();
final AdminCommandContext theContext = context;
Properties extraProperties = actionReport.getExtraProperties();
if (extraProperties == null) {
extraProperties = new Properties();
actionReport.setExtraProperties(extraProperties);
}
final BaseThresholdHealthCheck service = habitat.getService(BaseThresholdHealthCheck.class, serviceName);
Config config = targetUtil.getConfig(target);
if (service == null) {
actionReport.appendMessage(strings.getLocalString("healthcheck.service.configure.status.error", "Service with name {0} could not be found.", serviceName));
actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
HealthCheckServiceConfiguration healthCheckServiceConfiguration = config.getExtensionByType(HealthCheckServiceConfiguration.class);
final ThresholdDiagnosticsChecker checker = healthCheckServiceConfiguration.<ThresholdDiagnosticsChecker>getCheckerByType(service.getCheckerType());
if (checker == null) {
actionReport.appendMessage(strings.getLocalString("healthcheck.service.configure.threshold.checker.not.exists", "Health Check Service Checker Configuration with name {0} could not be found.", serviceName));
actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
try {
evaluateThresholdProp(actionReport, checker, HealthCheckConstants.THRESHOLD_CRITICAL, thresholdCritical);
evaluateThresholdProp(actionReport, checker, HealthCheckConstants.THRESHOLD_WARNING, thresholdWarning);
evaluateThresholdProp(actionReport, checker, HealthCheckConstants.THRESHOLD_GOOD, thresholdGood);
} catch (TransactionFailure ex) {
logger.log(Level.WARNING, "Exception during command ", ex);
actionReport.setMessage(ex.getCause().getMessage());
actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
if (dynamic) {
if (service.getOptions() == null) {
service.setOptions(service.constructOptions(checker));
}
if (server.isDas()) {
if (targetUtil.getConfig(target).isDas()) {
configureDynamically(actionReport, service);
healthCheckService.reboot();
}
} else {
// it implicitly targeted to us as we are not the DAS
// restart the service
configureDynamically(actionReport, service);
healthCheckService.reboot();
}
}
}
use of org.jvnet.hk2.config in project Payara by payara.
the class HoggingThreadsConfigurer method execute.
@Override
public void execute(AdminCommandContext context) {
Config config = targetUtil.getConfig(target);
HoggingThreadsHealthCheck service = habitat.getService(HoggingThreadsHealthCheck.class);
final ActionReport actionReport = context.getActionReport();
if (service == null) {
actionReport.appendMessage(strings.getLocalString("healthcheck.hoggingthreads.configure.status.error", "Hogging Threads Checker Service could not be found"));
actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE);
return;
}
// Warn about deprecated option
if (name != null) {
actionReport.appendMessage("\n--name parameter is decremented, please begin using the --checkerName option\n");
}
try {
HealthCheckServiceConfiguration healthCheckServiceConfiguration = config.getExtensionByType(HealthCheckServiceConfiguration.class);
HoggingThreadsChecker hoggingThreadConfiguration = healthCheckServiceConfiguration.getCheckerByType(HoggingThreadsChecker.class);
if (hoggingThreadConfiguration == null) {
ConfigSupport.apply(new SingleConfigCode<HealthCheckServiceConfiguration>() {
@Override
public Object run(final HealthCheckServiceConfiguration healthCheckServiceConfigurationProxy) throws PropertyVetoException, TransactionFailure {
HoggingThreadsChecker checkerProxy = healthCheckServiceConfigurationProxy.createChild(HoggingThreadsChecker.class);
applyValues(checkerProxy);
healthCheckServiceConfigurationProxy.getCheckerList().add(checkerProxy);
actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS);
return healthCheckServiceConfigurationProxy;
}
}, healthCheckServiceConfiguration);
} else {
ConfigSupport.apply(new SingleConfigCode<HoggingThreadsChecker>() {
@Override
public Object run(final HoggingThreadsChecker hoggingThreadConfigurationProxy) throws PropertyVetoException, TransactionFailure {
applyValues(hoggingThreadConfigurationProxy);
actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS);
return hoggingThreadConfigurationProxy;
}
}, hoggingThreadConfiguration);
}
if (dynamic) {
if (server.isDas()) {
if (targetUtil.getConfig(target).isDas()) {
HoggingThreadsChecker checkerByType = healthCheckServiceConfiguration.getCheckerByType(HoggingThreadsChecker.class);
service.setOptions(service.constructOptions(checkerByType));
healthCheckService.registerCheck(checkerByType.getName(), service);
healthCheckService.reboot();
}
} else {
// it implicitly targetted to us as we are not the DAS
// restart the service
HoggingThreadsChecker checkerByType = healthCheckServiceConfiguration.getCheckerByType(HoggingThreadsChecker.class);
service.setOptions(service.constructOptions(hoggingThreadConfiguration));
healthCheckService.registerCheck(checkerByType.getName(), service);
healthCheckService.reboot();
}
}
} catch (TransactionFailure ex) {
logger.log(Level.WARNING, "Exception during command ", ex);
actionReport.setMessage(ex.getCause().getMessage());
actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE);
}
}
Aggregations