From 0f190756679002442b88dd5fda50434c21b8ce6c Mon Sep 17 00:00:00 2001 From: mertcaliskan Date: Sun, 10 Jun 2018 21:21:17 +0300 Subject: [PATCH] PAYARA-2821-HealthCheck-checks-send-multiple-notifications-when-a-new-notifier-is-added --- .../extras/rest/PayaraRestApiHandlers.java | 2 +- .../admin/HealthCheckRebooter.java | 104 ++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 nucleus/payara-modules/healthcheck-core/src/main/java/fish/payara/nucleus/healthcheck/admin/HealthCheckRebooter.java diff --git a/appserver/admingui/payara-console-extras/src/main/java/fish/payara/admingui/extras/rest/PayaraRestApiHandlers.java b/appserver/admingui/payara-console-extras/src/main/java/fish/payara/admingui/extras/rest/PayaraRestApiHandlers.java index 2e40be988fe..142e09aacc5 100644 --- a/appserver/admingui/payara-console-extras/src/main/java/fish/payara/admingui/extras/rest/PayaraRestApiHandlers.java +++ b/appserver/admingui/payara-console-extras/src/main/java/fish/payara/admingui/extras/rest/PayaraRestApiHandlers.java @@ -611,7 +611,7 @@ public static void updateNotifiers(HandlerContext handlerCtx) { RestUtil.restRequest(restEndpoint, null, "post", handlerCtx, quiet, throwException); } if (forHealthCheck) { - String restEndpoint = endpoint + "/bootstrap-healthcheck"; + String restEndpoint = endpoint + "/reboot-healthcheck"; RestUtil.restRequest(restEndpoint, null, "post", handlerCtx, quiet, throwException); } if (forMonitoring){ diff --git a/nucleus/payara-modules/healthcheck-core/src/main/java/fish/payara/nucleus/healthcheck/admin/HealthCheckRebooter.java b/nucleus/payara-modules/healthcheck-core/src/main/java/fish/payara/nucleus/healthcheck/admin/HealthCheckRebooter.java new file mode 100644 index 00000000000..3c37800ef6e --- /dev/null +++ b/nucleus/payara-modules/healthcheck-core/src/main/java/fish/payara/nucleus/healthcheck/admin/HealthCheckRebooter.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) [2018] Payara Foundation and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or 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://github.com/payara/Payara/blob/master/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 glassfish/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * The Payara Foundation designates this particular file as subject to the "Classpath" + * exception as provided by the Payara Foundation in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ +package fish.payara.nucleus.healthcheck.admin; + +import com.sun.enterprise.util.SystemPropertyConstants; +import fish.payara.nucleus.healthcheck.HealthCheckService; +import fish.payara.nucleus.healthcheck.configuration.HealthCheckServiceConfiguration; +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 javax.inject.Inject; +import java.util.Properties; + +/** + * Admin command to reboot health check service + * + * @author mertcaliskan + */ +@ExecuteOn({RuntimeType.DAS, RuntimeType.INSTANCE}) +@TargetType(value = {CommandTarget.DAS, CommandTarget.STANDALONE_INSTANCE, CommandTarget.CLUSTER, CommandTarget.CLUSTERED_INSTANCE, CommandTarget.CONFIG}) +@Service(name = "reboot-healthcheck") +@CommandLock(CommandLock.LockType.NONE) +@PerLookup +@I18n("reboot.healthcheck") +@RestEndpoints({ + @RestEndpoint(configBean = HealthCheckServiceConfiguration.class, + opType = RestEndpoint.OpType.POST, + path = "reboot-healthcheck", + description = "Reboots Health Check Service") +}) +public class HealthCheckRebooter implements AdminCommand { + + @Inject + ServerEnvironment server; + + @Inject + HealthCheckService service; + + @Inject + protected Target targetUtil; + + @Param(name = "target", optional = true, defaultValue = SystemPropertyConstants.DAS_SERVER_NAME) + String target; + + @Override + public void execute(AdminCommandContext context) { + final ActionReport actionReport = context.getActionReport(); + Properties extraProperties = actionReport.getExtraProperties(); + if (extraProperties == null) { + extraProperties = new Properties(); + actionReport.setExtraProperties(extraProperties); + } + + if (server.isDas()) { + if (targetUtil.getConfig(target).isDas()) { + service.reboot(); + } + } else { + service.reboot(); + } + } +}