diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnDas.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnDas.java new file mode 100644 index 00000000000..74e2783dccc --- /dev/null +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnDas.java @@ -0,0 +1,99 @@ +/* + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright (c) 2016 C2B2 Consulting Limited. All rights reserved. + + The contents of this file are subject to the terms of the Common Development + and Distribution License("CDDL") (collectively, the "License"). You + may not use this file except in compliance with the License. You can + obtain a copy of the License at + https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + or packager/legal/LICENSE.txt. See the License for the specific + language governing permissions and limitations under the License. + + When distributing the software, include this License Header Notice in each + file and include the License file at packager/legal/LICENSE.txt. + */ +package fish.payara.nucleus.requesttracing.admin; + +import com.sun.enterprise.config.serverbeans.Domain; +import com.sun.enterprise.util.LocalStringManagerImpl; +import com.sun.enterprise.util.SystemPropertyConstants; +import fish.payara.nucleus.requesttracing.RequestTracingService; +import org.glassfish.api.ActionReport; +import org.glassfish.api.I18n; +import org.glassfish.api.Param; +import org.glassfish.api.admin.*; +import org.glassfish.config.support.CommandTarget; +import org.glassfish.config.support.TargetType; +import org.glassfish.hk2.api.PerLookup; +import org.jvnet.hk2.annotations.Service; + +import javax.inject.Inject; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +/** + * + * @author Susan Rai + */ +@ExecuteOn({RuntimeType.DAS}) +@TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) +@Service(name = "__enable-requesttracing-configure-das") +@CommandLock(CommandLock.LockType.NONE) +@PerLookup +@I18n("__enable-requesttracing-configure-das") +@RestEndpoints({ + @RestEndpoint(configBean = Domain.class, + opType = RestEndpoint.OpType.POST, + path = "__enable-requesttracing-configure-das", + description = "Enables/Disables Request Tracing Service") +}) +public class EnableRequestTracingConfigurerOnDas implements AdminCommand { + + final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(EnableRequestTracingConfigurerOnDas.class); + + @Inject + RequestTracingService service; + + @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) + String target; + + @Param(name = "enabled", optional = false) + private Boolean enabled; + + @Param(name = "thresholdUnit", optional = true, defaultValue = "SECONDS") + private String unit; + + @Param(name = "thresholdValue", optional = true, defaultValue = "30") + private String value; + + @Override + public void execute(AdminCommandContext context) { + final AdminCommandContext theContext = context; + final ActionReport actionReport = context.getActionReport(); + Properties extraProperties = actionReport.getExtraProperties(); + if (extraProperties == null) { + extraProperties = new Properties(); + actionReport.setExtraProperties(extraProperties); + } + + if (enabled != null) { + service.getExecutionOptions().setEnabled(enabled); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.status.success", + "request tracing service status is set to {0}.", enabled) + "\n"); + } + if (value != null) { + service.getExecutionOptions().setThresholdValue(Long.valueOf(value)); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdvalue.success", + "Request Tracing Service Threshold Value is set to {0}.", value) + "\n"); + } + if (unit != null) { + service.getExecutionOptions().setThresholdUnit(TimeUnit.valueOf(unit)); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdunit.success", + "Request Tracing Service Threshold Unit is set to {0}.", unit) + "\n"); + } + } +} + diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnInstance.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnInstance.java new file mode 100644 index 00000000000..34adf6097ca --- /dev/null +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingConfigurerOnInstance.java @@ -0,0 +1,100 @@ +/* + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright (c) 2016 C2B2 Consulting Limited. All rights reserved. + + The contents of this file are subject to the terms of the Common Development + and Distribution License("CDDL") (collectively, the "License"). You + may not use this file except in compliance with the License. You can + obtain a copy of the License at + https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + or packager/legal/LICENSE.txt. See the License for the specific + language governing permissions and limitations under the License. + + When distributing the software, include this License Header Notice in each + file and include the License file at packager/legal/LICENSE.txt. + */ +package fish.payara.nucleus.requesttracing.admin; + +import com.sun.enterprise.config.serverbeans.Domain; +import com.sun.enterprise.util.LocalStringManagerImpl; +import com.sun.enterprise.util.SystemPropertyConstants; +import fish.payara.nucleus.requesttracing.RequestTracingService; +import org.glassfish.api.ActionReport; +import org.glassfish.api.I18n; +import org.glassfish.api.Param; +import org.glassfish.api.admin.*; +import org.glassfish.config.support.CommandTarget; +import org.glassfish.config.support.TargetType; +import org.glassfish.hk2.api.PerLookup; +import org.jvnet.hk2.annotations.Service; + +import javax.inject.Inject; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +/** + * + * + * @author Susan Rai + */ +@ExecuteOn({RuntimeType.INSTANCE}) +@TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) +@Service(name = "__enable-requesttracing-configure-instance") +@CommandLock(CommandLock.LockType.NONE) +@PerLookup +@I18n("__enable-requesttracing-configure-instance") +@RestEndpoints({ + @RestEndpoint(configBean = Domain.class, + opType = RestEndpoint.OpType.POST, + path = "__enable-requesttracing-configure-instance", + description = "Enables/Disables Request Tracing Service") +}) +public class EnableRequestTracingConfigurerOnInstance implements AdminCommand { + + final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(EnableRequestTracingConfigurerOnInstance.class); + + @Inject + RequestTracingService service; + + @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) + String target; + + @Param(name = "enabled", optional = false) + private Boolean enabled; + + @Param(name = "thresholdUnit", optional = true, defaultValue = "SECONDS") + private String unit; + + @Param(name = "thresholdValue", optional = true, defaultValue = "30") + private String value; + + @Override + public void execute(AdminCommandContext context) { + final AdminCommandContext theContext = context; + final ActionReport actionReport = context.getActionReport(); + Properties extraProperties = actionReport.getExtraProperties(); + if (extraProperties == null) { + extraProperties = new Properties(); + actionReport.setExtraProperties(extraProperties); + } + + if (enabled != null) { + service.getExecutionOptions().setEnabled(enabled); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.status.success", + "request tracing service status is set to {0}.", enabled) + "\n"); + } + if (value != null) { + service.getExecutionOptions().setThresholdValue(Long.valueOf(value)); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdvalue.success", + "Request Tracing Service Threshold Value is set to {0}.", value) + "\n"); + } + if (unit != null) { + service.getExecutionOptions().setThresholdUnit(TimeUnit.valueOf(unit)); + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdunit.success", + "Request Tracing Service Threshold Unit is set to {0}.", unit) + "\n"); + } + } +} + diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurerDas.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnDas.java similarity index 80% rename from nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurerDas.java rename to nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnDas.java index 01fda2112e4..905abfa5133 100644 --- a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurerDas.java +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnDas.java @@ -50,25 +50,24 @@ and Distribution License("CDDL") (collectively, the "License"). You /** - * Admin command to enable/disable specific notifier given with its name - * - * @author mertcaliskan + * + * @author Susan Rai */ @ExecuteOn({RuntimeType.DAS}) @TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) -@Service(name = "requesttracing-configure-notifier-das") +@Service(name = "__enable-requesttracing-configure-notifier-das") @CommandLock(CommandLock.LockType.NONE) @PerLookup -@I18n("requesttracing.configure.notifier.das") +@I18n("__enable-requesttracing-configure-notifier-das") @RestEndpoints({ @RestEndpoint(configBean = Domain.class, opType = RestEndpoint.OpType.POST, - path = "requesttracing-configure-notifier-das", + path = "__enable-requesttracing-configure-notifier-das", description = "Enables/Disables Notifier Specified With Name") }) -public class RequestTracingNotifierConfigurerDas implements AdminCommand { +public class EnableRequestTracingNotifierConfigurerOnDas implements AdminCommand { - final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(RequestTracingNotifierConfigurerDas.class); + final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(RequestTracingNotifierConfigurer.class); @Inject RequestTracingService service; @@ -85,9 +84,6 @@ public class RequestTracingNotifierConfigurerDas implements AdminCommand { @Inject protected Target targetUtil; - @Param(name = "dynamic", optional = true, defaultValue = "false") - private Boolean dynamic; - @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) String target; @@ -127,23 +123,16 @@ public void execute(AdminCommandContext context) { public Object run(final RequestTracingServiceConfiguration requestTracingServiceConfigurationProxy) throws PropertyVetoException, TransactionFailure { Notifier notifierProxy = (Notifier) requestTracingServiceConfigurationProxy.createChild(notifierService.getNotifierType()); - if (notifierEnabled != null) { - notifierProxy.enabled(notifierEnabled); - } createdNotifier[0] = notifierProxy; List notifierList = requestTracingServiceConfigurationProxy.getNotifierList(); NotifierExecutionOptions executionOptions = factory.build(createdNotifier[0]); if (notifierEnabled) { notifierList.add(createdNotifier[0]); - if (dynamic) { - service.getExecutionOptions().addNotifierExecutionOption(executionOptions); - } + service.getExecutionOptions().addNotifierExecutionOption(executionOptions); } else { notifierList.remove(createdNotifier[0]); - if (dynamic) { - service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); - } + service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); } actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); @@ -155,17 +144,11 @@ public Object run(final RequestTracingServiceConfiguration requestTracingService @Override public Object run(final Notifier notifierProxy) throws PropertyVetoException, TransactionFailure { - if (notifierEnabled != null) { - notifierProxy.enabled(notifierEnabled); - } - - if (dynamic) { - NotifierExecutionOptions executionOptions = factory.build(notifierProxy); - if (notifierEnabled) { - service.getExecutionOptions().addNotifierExecutionOption(executionOptions); - } else { - service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); - } + NotifierExecutionOptions executionOptions = factory.build(notifierProxy); + if (notifierEnabled) { + service.getExecutionOptions().addNotifierExecutionOption(executionOptions); + } else { + service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); } actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnInstance.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnInstance.java new file mode 100644 index 00000000000..c9b93660712 --- /dev/null +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/EnableRequestTracingNotifierConfigurerOnInstance.java @@ -0,0 +1,169 @@ +/* + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright (c) 2016 C2B2 Consulting Limited. All rights reserved. + + The contents of this file are subject to the terms of the Common Development + and Distribution License("CDDL") (collectively, the "License"). You + may not use this file except in compliance with the License. You can + obtain a copy of the License at + https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + or packager/legal/LICENSE.txt. See the License for the specific + language governing permissions and limitations under the License. + + When distributing the software, include this License Header Notice in each + file and include the License file at packager/legal/LICENSE.txt. + */ +package fish.payara.nucleus.requesttracing.admin; + +import com.sun.enterprise.config.serverbeans.Config; +import com.sun.enterprise.config.serverbeans.Domain; +import com.sun.enterprise.util.LocalStringManagerImpl; +import com.sun.enterprise.util.SystemPropertyConstants; +import fish.payara.nucleus.notification.configuration.Notifier; +import fish.payara.nucleus.notification.service.BaseNotifierService; +import fish.payara.nucleus.requesttracing.RequestTracingService; +import fish.payara.nucleus.requesttracing.configuration.RequestTracingServiceConfiguration; +import fish.payara.nucleus.requesttracing.domain.execoptions.NotifierExecutionOptions; +import fish.payara.nucleus.requesttracing.domain.execoptions.NotifierExecutionOptionsFactory; +import org.glassfish.api.ActionReport; +import org.glassfish.api.I18n; +import org.glassfish.api.Param; +import org.glassfish.api.admin.*; +import org.glassfish.config.support.CommandTarget; +import org.glassfish.config.support.TargetType; +import org.glassfish.hk2.api.PerLookup; +import org.glassfish.hk2.api.ServiceLocator; +import org.glassfish.internal.api.Target; +import org.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.config.ConfigSupport; +import org.jvnet.hk2.config.SingleConfigCode; +import org.jvnet.hk2.config.TransactionFailure; + +import javax.inject.Inject; +import java.beans.PropertyVetoException; +import java.util.List; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + + +/** + * + * @author Susan Rai + */ +@ExecuteOn({RuntimeType.INSTANCE}) +@TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) +@Service(name = "__enable-requesttracing-configure-notifier-instance") +@CommandLock(CommandLock.LockType.NONE) +@PerLookup +@I18n("__enable-requesttracing-configure-notifier-instance") +@RestEndpoints({ + @RestEndpoint(configBean = Domain.class, + opType = RestEndpoint.OpType.POST, + path = "__enable-requesttracing-configure-notifier-instance", + description = "Enables/Disables Notifier Specified With Name") +}) +public class EnableRequestTracingNotifierConfigurerOnInstance implements AdminCommand { + + final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(RequestTracingNotifierConfigurer.class); + + @Inject + RequestTracingService service; + + @Inject + NotifierExecutionOptionsFactory factory; + + @Inject + ServiceLocator habitat; + + @Inject + protected Logger logger; + + @Inject + protected Target targetUtil; + + @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) + String target; + + @Param(name = "notifierName", optional = true, defaultValue = "service-log") + private String notifierName; + + @Param(name = "notifierEnabled", optional = false) + private Boolean notifierEnabled; + + @Override + public void execute(AdminCommandContext context) { + final ActionReport actionReport = context.getActionReport(); + Properties extraProperties = actionReport.getExtraProperties(); + if (extraProperties == null) { + extraProperties = new Properties(); + actionReport.setExtraProperties(extraProperties); + } + + Config config = targetUtil.getConfig(target); + + final BaseNotifierService notifierService = habitat.getService(BaseNotifierService.class, notifierName); + if (service == null) { + actionReport.appendMessage(strings.getLocalString("requesttracing.notifier.configure.status.error", + "Notifier with name {0} could not be found.", notifierName)); + actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE); + return; + } + + final RequestTracingServiceConfiguration requestTracingServiceConfiguration = config.getExtensionByType(RequestTracingServiceConfiguration.class); + final Notifier notifier = requestTracingServiceConfiguration.getNotifierByType(notifierService.getNotifierType()); + + try { + if (notifier == null) { + final Notifier[] createdNotifier = {null}; + ConfigSupport.apply(new SingleConfigCode() { + @Override + public Object run(final RequestTracingServiceConfiguration requestTracingServiceConfigurationProxy) throws + PropertyVetoException, TransactionFailure { + Notifier notifierProxy = (Notifier) requestTracingServiceConfigurationProxy.createChild(notifierService.getNotifierType()); + createdNotifier[0] = notifierProxy; + + List notifierList = requestTracingServiceConfigurationProxy.getNotifierList(); + NotifierExecutionOptions executionOptions = factory.build(createdNotifier[0]); + if (notifierEnabled) { + notifierList.add(createdNotifier[0]); + service.getExecutionOptions().addNotifierExecutionOption(executionOptions); + } else { + notifierList.remove(createdNotifier[0]); + service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); + } + + actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); + return requestTracingServiceConfigurationProxy; + } + }, requestTracingServiceConfiguration); + } else { + ConfigSupport.apply(new SingleConfigCode() { + @Override + public Object run(final Notifier notifierProxy) throws + PropertyVetoException, TransactionFailure { + NotifierExecutionOptions executionOptions = factory.build(notifierProxy); + if (notifierEnabled) { + service.getExecutionOptions().addNotifierExecutionOption(executionOptions); + } else { + service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); + } + + actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); + return notifierProxy; + } + }, notifier); + + } + + actionReport.appendMessage(strings.getLocalString("requesttracing.configure.notifier.added.configured", + "Request Tracing Notifier with name {0} is registered and set enabled to {1}.", notifierName, notifierEnabled) + "\n"); + } catch (TransactionFailure ex) { + logger.log(Level.WARNING, "Exception during command ", ex); + actionReport.setMessage(ex.getCause().getMessage()); + actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE); + } + } +} diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurer.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurer.java index 75d99937331..6ecbb695b47 100644 --- a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurer.java +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurer.java @@ -45,11 +45,12 @@ and Distribution License("CDDL") (collectively, the "License"). You import org.glassfish.hk2.api.ServiceLocator; /** - * Admin command to enable/disable all request tracing services defined in domain.xml. + * Admin command to enable/disable all request tracing services defined in + * domain.xml. * * @author mertcaliskan */ -@ExecuteOn({RuntimeType.INSTANCE}) +@ExecuteOn({RuntimeType.DAS}) @TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) @Service(name = "requesttracing-configure") @CommandLock(CommandLock.LockType.NONE) @@ -91,6 +92,8 @@ public class RequestTracingConfigurer implements AdminCommand { @Inject ServiceLocator serviceLocator; + + CommandRunner.CommandInvocation inv; @Override public void execute(AdminCommandContext context) { @@ -142,20 +145,25 @@ public Object run(final RequestTracingServiceConfiguration requestTracingService } private void enableOnTarget(ActionReport actionReport, AdminCommandContext context, Boolean enabled) { - if (enabled != null) { - service.getExecutionOptions().setEnabled(enabled); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.status.success", - "request tracing service status is set to {0}.", enabled) + "\n"); - } - if (value != null) { - service.getExecutionOptions().setThresholdValue(Long.valueOf(value)); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdvalue.success", - "Request Tracing Service Threshold Value is set to {0}.", value) + "\n"); + CommandRunner runner = serviceLocator.getService(CommandRunner.class); + ActionReport subReport = context.getActionReport().addSubActionsReport(); + + if (target.equals("server-config")) { + inv = runner.getCommandInvocation("__enable-requesttracing-configure-das", subReport, context.getSubject()); + } else { + inv = runner.getCommandInvocation("__enable-requesttracing-configure-instance", subReport, context.getSubject()); } - if (unit != null) { - service.getExecutionOptions().setThresholdUnit(TimeUnit.valueOf(unit)); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdunit.success", - "Request Tracing Service Threshold Unit is set to {0}.", unit) + "\n"); + + ParameterMap params = new ParameterMap(); + params.add("enabled", enabled.toString()); + params.add("target", target); + params.add("thresholdUnit", unit); + params.add("thresholdValue", value); + inv.parameters(params); + inv.execute(); + // swallow the offline warning as it is not a problem + if (subReport.hasWarnings()) { + subReport.setMessage(""); } } @@ -174,7 +182,7 @@ private boolean validate(ActionReport actionReport) { } } - + if (unit != null) { try { if (!unit.equals("NANOSECONDS") diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurerDas.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurerDas.java deleted file mode 100644 index c4b6a88c434..00000000000 --- a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingConfigurerDas.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright (c) 2016 C2B2 Consulting Limited. All rights reserved. - - The contents of this file are subject to the terms of the Common Development - and Distribution License("CDDL") (collectively, the "License"). You - may not use this file except in compliance with the License. You can - obtain a copy of the License at - https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html - or packager/legal/LICENSE.txt. See the License for the specific - language governing permissions and limitations under the License. - - When distributing the software, include this License Header Notice in each - file and include the License file at packager/legal/LICENSE.txt. - */ -package fish.payara.nucleus.requesttracing.admin; - -import com.sun.enterprise.config.serverbeans.Config; -import com.sun.enterprise.config.serverbeans.Domain; -import com.sun.enterprise.util.LocalStringManagerImpl; -import com.sun.enterprise.util.SystemPropertyConstants; -import fish.payara.nucleus.requesttracing.RequestTracingService; -import fish.payara.nucleus.requesttracing.configuration.RequestTracingServiceConfiguration; -import org.glassfish.api.ActionReport; -import org.glassfish.api.I18n; -import org.glassfish.api.Param; -import org.glassfish.api.admin.*; -import org.glassfish.config.support.CommandTarget; -import org.glassfish.config.support.TargetType; -import org.glassfish.hk2.api.PerLookup; -import org.glassfish.internal.api.Target; -import org.jvnet.hk2.annotations.Service; -import org.jvnet.hk2.config.ConfigSupport; -import org.jvnet.hk2.config.SingleConfigCode; -import org.jvnet.hk2.config.TransactionFailure; - -import javax.inject.Inject; -import java.beans.PropertyVetoException; -import java.util.Properties; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.glassfish.hk2.api.ServiceLocator; - -/** - * Admin command to enable/disable all request tracing services defined in - * domain.xml. - * - * @author mertcaliskan - */ -@ExecuteOn({RuntimeType.DAS}) -@TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) -@Service(name = "requesttracing-configure-das") -@CommandLock(CommandLock.LockType.NONE) -@PerLookup -@I18n("requesttracing.configure.das") -@RestEndpoints({ - @RestEndpoint(configBean = Domain.class, - opType = RestEndpoint.OpType.POST, - path = "requesttracing-configure-das", - description = "Enables/Disables Request Tracing Service") -}) -public class RequestTracingConfigurerDas implements AdminCommand { - - final private static LocalStringManagerImpl strings = new LocalStringManagerImpl(RequestTracingConfigurerDas.class); - - @Inject - RequestTracingService service; - - @Inject - protected Logger logger; - - @Inject - protected Target targetUtil; - - @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) - String target; - - @Param(name = "enabled", optional = false) - private Boolean enabled; - - @Param(name = "dynamic", optional = true, defaultValue = "false") - private Boolean dynamic; - - @Param(name = "thresholdUnit", optional = true, defaultValue = "SECONDS") - private String unit; - - @Param(name = "thresholdValue", optional = true, defaultValue = "30") - private String value; - - @Inject - ServiceLocator serviceLocator; - - @Override - public void execute(AdminCommandContext context) { - final AdminCommandContext theContext = context; - final ActionReport actionReport = context.getActionReport(); - Properties extraProperties = actionReport.getExtraProperties(); - if (extraProperties == null) { - extraProperties = new Properties(); - actionReport.setExtraProperties(extraProperties); - } - - if (!validate(actionReport)) { - return; - } - - Config config = targetUtil.getConfig(target); - final RequestTracingServiceConfiguration requestTracingServiceConfiguration = config.getExtensionByType(RequestTracingServiceConfiguration.class); - - if (requestTracingServiceConfiguration != null) { - try { - ConfigSupport.apply(new SingleConfigCode() { - @Override - public Object run(final RequestTracingServiceConfiguration requestTracingServiceConfigurationProxy) throws - PropertyVetoException, TransactionFailure { - if (enabled != null) { - requestTracingServiceConfigurationProxy.enabled(enabled.toString()); - } - if (unit != null) { - requestTracingServiceConfigurationProxy.setThresholdUnit(unit); - } - if (value != null) { - requestTracingServiceConfigurationProxy.setThresholdValue(value); - } - actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); - return requestTracingServiceConfigurationProxy; - } - }, requestTracingServiceConfiguration); - } catch (TransactionFailure ex) { - logger.log(Level.WARNING, "Exception during command ", ex); - actionReport.setMessage(ex.getCause().getMessage()); - actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE); - return; - } - } - - if (dynamic) { - enableOnTarget(actionReport, theContext, enabled); - } - } - - private void enableOnTarget(ActionReport actionReport, AdminCommandContext context, Boolean enabled) { - if (enabled != null) { - service.getExecutionOptions().setEnabled(enabled); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.status.success", - "request tracing service status is set to {0}.", enabled) + "\n"); - } - if (value != null) { - service.getExecutionOptions().setThresholdValue(Long.valueOf(value)); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdvalue.success", - "Request Tracing Service Threshold Value is set to {0}.", value) + "\n"); - } - if (unit != null) { - service.getExecutionOptions().setThresholdUnit(TimeUnit.valueOf(unit)); - actionReport.appendMessage(strings.getLocalString("requesttracing.configure.thresholdunit.success", - "Request Tracing Service Threshold Unit is set to {0}.", unit) + "\n"); - } - } - - private boolean validate(ActionReport actionReport) { - boolean result = false; - if (value != null) { - try { - int thresholdValue = Integer.parseInt(value); - if (thresholdValue <= 0 || thresholdValue > Short.MAX_VALUE * 2) { - actionReport.failure(logger, "Threshold Value must be greater than zero or less than " + Short.MAX_VALUE * 2 + 1); - return result; - } - } catch (NumberFormatException nfe) { - actionReport.failure(logger, "Threshold Value is not a valid integer", nfe); - return result; - } - - } - - if (unit != null) { - try { - if (!unit.equals("NANOSECONDS") - && !unit.equals("MICROSECONDS") - && !unit.equals("MILLISECONDS") - && !unit.equals("SECONDS") - && !unit.equals("MINUTES") - && !unit.equals("HOURS") - && !unit.equals("DAYS")) { - actionReport.failure(logger, unit + " is an invalid time unit"); - return result; - } - } catch (IllegalArgumentException iaf) { - actionReport.failure(logger, unit + " is an invalid time unit", iaf); - return result; - } - } - - return true; - } -} diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurer.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurer.java index 3cdfeeef952..ee60fda6500 100644 --- a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurer.java +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/RequestTracingNotifierConfigurer.java @@ -48,13 +48,12 @@ and Distribution License("CDDL") (collectively, the "License"). You import java.util.logging.Level; import java.util.logging.Logger; - /** * Admin command to enable/disable specific notifier given with its name * * @author mertcaliskan */ -@ExecuteOn({RuntimeType.INSTANCE}) +@ExecuteOn({RuntimeType.DAS}) @TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) @Service(name = "requesttracing-configure-notifier") @CommandLock(CommandLock.LockType.NONE) @@ -97,9 +96,13 @@ public class RequestTracingNotifierConfigurer implements AdminCommand { @Param(name = "notifierEnabled", optional = false) private Boolean notifierEnabled; + @Inject + ServiceLocator serviceLocator; + @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(); @@ -130,22 +133,10 @@ public Object run(final RequestTracingServiceConfiguration requestTracingService if (notifierEnabled != null) { notifierProxy.enabled(notifierEnabled); } - createdNotifier[0] = notifierProxy; - - List notifierList = requestTracingServiceConfigurationProxy.getNotifierList(); - NotifierExecutionOptions executionOptions = factory.build(createdNotifier[0]); - if (notifierEnabled) { - notifierList.add(createdNotifier[0]); - if (dynamic) { - service.getExecutionOptions().addNotifierExecutionOption(executionOptions); - } - } else { - notifierList.remove(createdNotifier[0]); - if (dynamic) { - service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); - } - } + if (dynamic) { + enableOnTarget(actionReport, theContext, notifierEnabled); + } actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); return requestTracingServiceConfigurationProxy; } @@ -158,16 +149,9 @@ public Object run(final Notifier notifierProxy) throws if (notifierEnabled != null) { notifierProxy.enabled(notifierEnabled); } - if (dynamic) { - NotifierExecutionOptions executionOptions = factory.build(notifierProxy); - if (notifierEnabled) { - service.getExecutionOptions().addNotifierExecutionOption(executionOptions); - } else { - service.getExecutionOptions().removeNotifierExecutionOption(executionOptions); - } + enableOnTarget(actionReport, theContext, notifierEnabled); } - actionReport.setActionExitCode(ActionReport.ExitCode.SUCCESS); return notifierProxy; } @@ -183,4 +167,28 @@ public Object run(final Notifier notifierProxy) throws actionReport.setActionExitCode(ActionReport.ExitCode.FAILURE); } } + + private void enableOnTarget(ActionReport actionReport, AdminCommandContext context, Boolean enabled) { + CommandRunner runner = serviceLocator.getService(CommandRunner.class); + ActionReport subReport = context.getActionReport().addSubActionsReport(); + CommandRunner.CommandInvocation inv; + + if (target.equals("server-config")) { + inv = runner.getCommandInvocation("__enable-requesttracing-configure-notifier-das", subReport, context.getSubject()); + } else { + inv = runner.getCommandInvocation("__enable-requesttracing-configure-notifier-instance", subReport, context.getSubject()); + } + + ParameterMap params = new ParameterMap(); + params.add("enabled", enabled.toString()); + params.add("target", target); + params.add("notifierName", notifierName); + inv.parameters(params); + inv.execute(); + // swallow the offline warning as it is not a problem + if (subReport.hasWarnings()) { + subReport.setMessage(""); + } + + } } diff --git a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/SetRequestTracingConfiguration.java b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/SetRequestTracingConfiguration.java index f1d80f1c3dc..685b0d4f554 100644 --- a/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/SetRequestTracingConfiguration.java +++ b/nucleus/payara-modules/requesttracing-core/src/main/java/fish/payara/nucleus/requesttracing/admin/SetRequestTracingConfiguration.java @@ -128,11 +128,7 @@ private void enableRequestTracingConfigureOnTarget(ActionReport actionReport, Ad CommandRunner runner = serviceLocator.getService(CommandRunner.class); ActionReport subReport = context.getActionReport().addSubActionsReport(); - if (target.equals("server-config")) { - inv = runner.getCommandInvocation("requesttracing-configure-das", subReport, context.getSubject()); - } else { - inv = runner.getCommandInvocation("requesttracing-configure", subReport, context.getSubject()); - } + inv = runner.getCommandInvocation("requesttracing-configure", subReport, context.getSubject()); ParameterMap params = new ParameterMap(); params.add("enabled", enabled.toString()); @@ -152,11 +148,7 @@ private void enableRequestTracingNotifierConfigurerOnTarget(ActionReport actionR CommandRunner runner = serviceLocator.getService(CommandRunner.class); ActionReport subReport = context.getActionReport().addSubActionsReport(); - if (target.equals("server-config")) { - inv = runner.getCommandInvocation("requesttracing-configure-notifier-das", subReport, context.getSubject()); - } else { - inv = runner.getCommandInvocation("requesttracing-configure-notifier", subReport, context.getSubject()); - } + inv = runner.getCommandInvocation("requesttracing-configure-notifier", subReport, context.getSubject()); ParameterMap params = new ParameterMap(); params.add("dynamic", notifierDynamic.toString());