SLIDER-319 codahale metrics integration, including web view and tests for it
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/524446db Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/524446db Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/524446db Branch: refs/heads/feature/SLIDER-319_codahale_metrics Commit: 524446dbba7c9a5efa6900cd53823488d363ae5d Parents: 00eca8f Author: Steve Loughran <[email protected]> Authored: Mon Nov 24 17:04:41 2014 +0000 Committer: Steve Loughran <[email protected]> Committed: Tue Nov 25 19:20:47 2014 +0000 ---------------------------------------------------------------------- .../server/appmaster/SliderAppMaster.java | 33 +++-- .../management/MetricsAndMonitoring.java | 62 +++++++++ .../management/MetricsBindingService.java | 128 +++++++++++++++++++ .../management/YarnServiceHealthCheck.java | 38 ++++++ .../slider/server/appmaster/state/AppState.java | 12 +- .../server/appmaster/web/SliderAMWebApp.java | 13 +- .../slider/server/appmaster/web/WebAppApi.java | 4 +- .../server/appmaster/web/WebAppApiImpl.java | 12 +- .../server/appmaster/web/rest/RestPaths.java | 2 +- .../appmaster/web/rest/agent/AgentWebApp.java | 1 - .../server/appmaster/web/view/NavBlock.java | 12 +- .../services/utility/MetricsBindingService.java | 128 ------------------- .../standalone/TestStandaloneAgentWeb.groovy | 5 +- .../appmaster/model/mock/MockAppState.groovy | 6 +- .../model/monkey/TestMockMonkey.groovy | 2 +- .../web/view/TestContainerStatsBlock.groovy | 2 +- .../appmaster/web/view/TestIndexBlock.groovy | 2 +- .../apache/slider/test/SliderTestBase.groovy | 3 +- .../web/rest/agent/TestAMAgentWebServices.java | 4 +- .../management/TestAMManagementWebServices.java | 4 +- .../funtest/framework/CommandTestBase.groovy | 51 ++++++++ .../funtest/lifecycle/AgentWebPagesIT.groovy | 92 +++++++++++++ .../lifecycle/AppsThroughAgentDemo.groovy | 2 +- 23 files changed, 444 insertions(+), 174 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java index 9530bc0..1bafe4b 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java @@ -19,6 +19,7 @@ package org.apache.slider.server.appmaster; import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.health.HealthCheckRegistry; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.protobuf.BlockingService; @@ -123,6 +124,8 @@ import org.apache.slider.server.appmaster.actions.RenewingAction; import org.apache.slider.server.appmaster.actions.ResetFailureWindow; import org.apache.slider.server.appmaster.actions.ReviewAndFlexApplicationSize; import org.apache.slider.server.appmaster.actions.UnregisterComponentInstance; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; +import org.apache.slider.server.appmaster.management.YarnServiceHealthCheck; import org.apache.slider.server.appmaster.monkey.ChaosKillAM; import org.apache.slider.server.appmaster.monkey.ChaosKillContainer; import org.apache.slider.server.appmaster.monkey.ChaosMonkeyService; @@ -149,7 +152,7 @@ import org.apache.slider.server.appmaster.web.rest.RestPaths; import org.apache.slider.server.services.security.CertificateManager; import org.apache.slider.server.services.security.FsDelegationTokenManager; import org.apache.slider.server.services.utility.AbstractSliderLaunchedService; -import org.apache.slider.server.services.utility.MetricsBindingService; +import org.apache.slider.server.appmaster.management.MetricsBindingService; import org.apache.slider.server.services.utility.WebAppService; import org.apache.slider.server.services.workflow.ServiceThreadFactory; import org.apache.slider.server.services.workflow.WorkflowExecutorService; @@ -209,9 +212,13 @@ public class SliderAppMaster extends AbstractSliderLaunchedService public static final int NUM_RPC_HANDLERS = 5; /** - * Singleton of metrics registry + * Metrics and monitoring services */ - public static final MetricRegistry metrics = new MetricRegistry(); + private final MetricsAndMonitoring metricsAndMonitoring = new MetricsAndMonitoring(); + /** + * metrics registry + */ + public MetricRegistry metrics; public static final String E_TRIGGERED_LAUNCH_FAILURE = "Chaos monkey triggered launch failure"; @@ -270,8 +277,8 @@ public class SliderAppMaster extends AbstractSliderLaunchedService * Ongoing state of the cluster: containers, nodes they * live on, etc. */ - private final AppState appState = new AppState(new ProtobufRecordFactory(), - metrics); + private final AppState appState = + new AppState(new ProtobufRecordFactory(), metricsAndMonitoring); private final ProviderAppState stateForProviders = new ProviderAppState("undefined", appState); @@ -436,6 +443,11 @@ public class SliderAppMaster extends AbstractSliderLaunchedService false); SliderUtils.validateSliderServerEnvironment(log, dependencyChecks); + // create app state and monitoring + addService(metricsAndMonitoring); + metrics = metricsAndMonitoring.getMetrics(); + + executorService = new WorkflowExecutorService<ExecutorService>("AmExecutor", Executors.newFixedThreadPool(2, new ServiceThreadFactory("AmExecutor", true))); @@ -443,8 +455,6 @@ public class SliderAppMaster extends AbstractSliderLaunchedService addService(actionQueues); - addService(new MetricsBindingService("MetricsBindingService", - metrics)); //init all child services super.serviceInit(conf); } @@ -452,6 +462,8 @@ public class SliderAppMaster extends AbstractSliderLaunchedService @Override protected void serviceStart() throws Exception { super.serviceStart(); + HealthCheckRegistry health = metricsAndMonitoring.getHealth(); + health.register("AM Health", new YarnServiceHealthCheck(this)); } /** @@ -708,7 +720,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService providerService, certificateManager, registryOperations, - metrics); + metricsAndMonitoring); webApp = new SliderAMWebApp(webAppApi); WebApps.$for(SliderAMWebApp.BASE_PATH, WebAppApi.class, webAppApi, @@ -1005,10 +1017,11 @@ public class SliderAppMaster extends AbstractSliderLaunchedService providerService, certificateManager, registryOperations, - metrics), + metricsAndMonitoring), RestPaths.AGENT_WS_CONTEXT) .withComponentConfig(getInstanceDefinition().getAppConfOperations() - .getComponent(SliderKeys.COMPONENT_AM)) + .getComponent( + SliderKeys.COMPONENT_AM)) .start(); agentOpsUrl = "https://" + appMasterHostname + ":" + agentWebApp.getSecuredPort(); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java new file mode 100644 index 0000000..77204d6 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.health.HealthCheckRegistry; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.service.AbstractService; +import org.apache.hadoop.service.CompositeService; + +/** + * Class for all metrics and monitoring + */ +public class MetricsAndMonitoring extends CompositeService { + + public MetricsAndMonitoring(String name) { + super(name); + } + + public MetricsAndMonitoring() { + super("MetricsAndMonitoring"); + } + + /** + * Singleton of metrics registry + */ + final MetricRegistry metrics = new MetricRegistry(); + + final HealthCheckRegistry health = new HealthCheckRegistry(); + + public MetricRegistry getMetrics() { + return metrics; + } + + public HealthCheckRegistry getHealth() { + return health; + } + + @Override + protected void serviceInit(Configuration conf) throws Exception { + addService(new MetricsBindingService("MetricsBindingService", + metrics)); + super.serviceInit(conf); + + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsBindingService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsBindingService.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsBindingService.java new file mode 100644 index 0000000..b49cf30 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsBindingService.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.ScheduledReporter; +import com.codahale.metrics.ganglia.GangliaReporter; +import info.ganglia.gmetric4j.gmetric.GMetric; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.service.AbstractService; + +import java.util.concurrent.TimeUnit; + +/** + * YARN service which hooks up Codahale metrics to + * Ganglia (if enabled) + */ +public class MetricsBindingService extends AbstractService { + + /** + * {@value} + */ + public static final String METRICS_GANGLIA_ENABLED = + "metrics.ganglia.enabled"; + /** + * {@value} + */ + public static final String METRICS_GANGLIA_HOST = "metrics.ganglia.host"; + + /** + * {@value} + */ + public static final String METRICS_GANGLIA_PORT = "metrics.ganglia.port"; + + /** + * {@value} + */ + public static final String METRICS_GANGLIA_VERSION_31 = "metrics.ganglia.version.31"; + + /** + * {@value} + */ + public static final String METRICS_GANGLIA_REPORT_INTERVAL = "metrics.ganglia.report.interval"; + + /** + * {@value} + */ + public static final int DEFAULT_GANGLIA_PORT = 8649; + + private final MetricRegistry metrics; + private ScheduledReporter reporter; + + public MetricsBindingService(String name, + MetricRegistry metrics) { + super(name); + this.metrics = metrics; + } + + /** + * Instantiate...create a metric registry in the process + * @param name service name + */ + public MetricsBindingService(String name) { + this(name, new MetricRegistry()); + } + + public MetricRegistry getMetrics() { + return metrics; + } + + @Override + protected void serviceStart() throws Exception { + super.serviceStart(); + Configuration conf = getConfig(); + boolean enabled = conf.getBoolean(METRICS_GANGLIA_ENABLED, false); + + if (enabled) { + String host = conf.getTrimmed(METRICS_GANGLIA_HOST, ""); + int port = conf.getInt(METRICS_GANGLIA_PORT, DEFAULT_GANGLIA_PORT); + int interval = conf.getInt(METRICS_GANGLIA_REPORT_INTERVAL, 60); + int ttl = 1; + GMetric.UDPAddressingMode + mcast = GMetric.UDPAddressingMode.getModeForAddress(host); + boolean ganglia31 = conf.getBoolean(METRICS_GANGLIA_VERSION_31, true); + + final GMetric ganglia = + new GMetric( + host, + port, + mcast, + ttl, + ganglia31); + reporter = GangliaReporter.forRegistry(metrics) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build(ganglia); + reporter.start(interval, TimeUnit.SECONDS); + } + } + + @Override + protected void serviceStop() throws Exception { + IOUtils.closeStream(reporter); + super.serviceStop(); + } + + public boolean isEnabled() { + return reporter != null; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/management/YarnServiceHealthCheck.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/YarnServiceHealthCheck.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/YarnServiceHealthCheck.java new file mode 100644 index 0000000..936563c --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/YarnServiceHealthCheck.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.health.HealthCheck; +import org.apache.hadoop.service.Service; + +public class YarnServiceHealthCheck extends HealthCheck { + + private final Service service; + + public YarnServiceHealthCheck(Service service) { + this.service = service; + } + + @Override + protected Result check() throws Exception { + return service.isInState(Service.STATE.STARTED) + ? Result.healthy() + : Result.unhealthy("Service is not running: %s", service); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java index 348a063..ddba5e2 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java @@ -18,7 +18,6 @@ package org.apache.slider.server.appmaster.state; -import com.codahale.metrics.MetricRegistry; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import org.apache.hadoop.conf.Configuration; @@ -61,6 +60,7 @@ import org.apache.slider.core.exceptions.SliderInternalStateException; import org.apache.slider.core.exceptions.TriggerClusterTeardownException; import org.apache.slider.providers.PlacementPolicy; import org.apache.slider.providers.ProviderRole; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.operations.AbstractRMOperation; import org.apache.slider.server.appmaster.operations.CancelRequestOperation; import org.apache.slider.server.appmaster.operations.ContainerReleaseOperation; @@ -98,6 +98,8 @@ public class AppState { private final AbstractRecordFactory recordFactory; + private final MetricsAndMonitoring metricsAndMonitoring; + /** * Flag set to indicate the application is live -this only happens * after the buildInstance operation @@ -262,16 +264,14 @@ public class AppState { private ContainerReleaseSelector containerReleaseSelector; - private MetricRegistry metrics; - /** * Create an instance * @param recordFactory factory for YARN records - * @param metrics metrics registry or null if a new one + * @param metricsAndMonitoring metrics and monitoring services */ - public AppState(AbstractRecordFactory recordFactory, MetricRegistry metrics) { + public AppState(AbstractRecordFactory recordFactory, MetricsAndMonitoring metricsAndMonitoring) { this.recordFactory = recordFactory; - this.metrics = metrics; + this.metricsAndMonitoring = metricsAndMonitoring; } public int getFailedCountainerCount() { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAMWebApp.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAMWebApp.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAMWebApp.java index 18c1a46..f2fc903 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAMWebApp.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/SliderAMWebApp.java @@ -16,6 +16,7 @@ */ package org.apache.slider.server.appmaster.web; +import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.servlets.HealthCheckServlet; import com.codahale.metrics.servlets.MetricsServlet; import com.codahale.metrics.servlets.PingServlet; @@ -25,10 +26,10 @@ import com.sun.jersey.api.container.filter.GZIPContentEncodingFilter; import com.sun.jersey.api.core.ResourceConfig; import com.sun.jersey.guice.spi.container.servlet.GuiceContainer; import com.sun.jersey.spi.container.servlet.ServletContainer; -import org.apache.hadoop.registry.client.api.RegistryOperations; import org.apache.hadoop.yarn.webapp.Dispatcher; import org.apache.hadoop.yarn.webapp.GenericExceptionHandler; import org.apache.hadoop.yarn.webapp.WebApp; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.web.rest.AMWadlGeneratorConfig; import org.apache.slider.server.appmaster.web.rest.AMWebServices; import static org.apache.slider.server.appmaster.web.rest.RestPaths.*; @@ -82,10 +83,12 @@ public class SliderAMWebApp extends WebApp { } // metrics -// serve(SYSTEM_HEALTHCHECK).with(new HealthCheckServlet()); - serve(SYSTEM_METRICS).with(new MetricsServlet(webAppApi.getMetrics())); -// serve(SYSTEM_PING).with(PingServlet.class); -// serve(SYSTEM_THREADS).with(ThreadDumpServlet.class); + MetricsAndMonitoring monitoring = + webAppApi.getMetricsAndMonitoring(); + serve(SYSTEM_HEALTHCHECK).with(new HealthCheckServlet(monitoring.getHealth())); + serve(SYSTEM_METRICS).with(new MetricsServlet(monitoring.getMetrics())); + serve(SYSTEM_PING).with(new PingServlet()); + serve(SYSTEM_THREADS).with(new ThreadDumpServlet()); String regex = "(?!/ws)"; serveRegex(regex).with(SliderDefaultWrapperServlet.class); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java index 43f8cf6..6aa24c4 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java @@ -16,10 +16,10 @@ */ package org.apache.slider.server.appmaster.web; -import com.codahale.metrics.MetricRegistry; import org.apache.hadoop.registry.client.api.RegistryOperations; import org.apache.slider.api.SliderClusterProtocol; import org.apache.slider.providers.ProviderService; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.state.AppState; import org.apache.slider.server.appmaster.state.RoleStatus; import org.apache.slider.server.appmaster.state.StateAccessForProviders; @@ -68,5 +68,5 @@ public interface WebAppApi { RegistryOperations getRegistryOperations(); - MetricRegistry getMetrics(); + MetricsAndMonitoring getMetricsAndMonitoring(); } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java index 81e6564..36d4a8f 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java @@ -16,10 +16,10 @@ */ package org.apache.slider.server.appmaster.web; -import com.codahale.metrics.MetricRegistry; import org.apache.hadoop.registry.client.api.RegistryOperations; import org.apache.slider.api.SliderClusterProtocol; import org.apache.slider.providers.ProviderService; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.state.RoleStatus; import org.apache.slider.server.appmaster.state.StateAccessForProviders; import org.apache.slider.server.appmaster.web.rest.agent.AgentRestOperations; @@ -44,14 +44,14 @@ public class WebAppApiImpl implements WebAppApi { protected final ProviderService provider; protected final CertificateManager certificateManager; private final RegistryOperations registryOperations; - private final MetricRegistry metrics; + private final MetricsAndMonitoring metricsAndMonitoring; public WebAppApiImpl(SliderClusterProtocol clusterProto, StateAccessForProviders appState, ProviderService provider, CertificateManager certificateManager, RegistryOperations registryOperations, - MetricRegistry metrics) { + MetricsAndMonitoring metricsAndMonitoring) { this.registryOperations = registryOperations; checkNotNull(clusterProto); checkNotNull(appState); @@ -61,7 +61,7 @@ public class WebAppApiImpl implements WebAppApi { this.appState = appState; this.provider = provider; this.certificateManager = certificateManager; - this.metrics = metrics; + this.metricsAndMonitoring = metricsAndMonitoring; } @Override @@ -106,7 +106,7 @@ public class WebAppApiImpl implements WebAppApi { } @Override - public MetricRegistry getMetrics() { - return metrics; + public MetricsAndMonitoring getMetricsAndMonitoring() { + return metricsAndMonitoring; } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java index 75788f9..9efd93b 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java @@ -65,7 +65,7 @@ public class RestPaths { public static final String SLIDER_CLASSPATH = "classpath"; public static final String SYSTEM = "/system"; - public static final String SYSTEM_HEALTHCHECK = SYSTEM + "/healthcheck"; + public static final String SYSTEM_HEALTHCHECK = SYSTEM + "/health"; public static final String SYSTEM_METRICS = SYSTEM + "/metrics"; public static final String SYSTEM_PING = SYSTEM + "/ping"; public static final String SYSTEM_THREADS = SYSTEM + "/threads"; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentWebApp.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentWebApp.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentWebApp.java index f8d7b88..f9ea06d 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentWebApp.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentWebApp.java @@ -115,7 +115,6 @@ public class AgentWebApp implements Closeable { AgentWebApp webApp = new AgentWebApp(); webApp.setPort(getConnectorPort(agentServer, 0)); webApp.setSecuredPort(getConnectorPort(agentServer, 1)); - return webApp; } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/NavBlock.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/NavBlock.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/NavBlock.java index d367d18..cf5e3ae 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/NavBlock.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/NavBlock.java @@ -18,6 +18,7 @@ package org.apache.slider.server.appmaster.web.view; import org.apache.hadoop.yarn.webapp.view.HtmlBlock; import org.apache.slider.server.appmaster.web.SliderAMWebApp; +import org.apache.slider.server.appmaster.web.rest.RestPaths; /** * @@ -32,6 +33,15 @@ public class NavBlock extends HtmlBlock { ul(). li().a(this.prefix(), "Overview")._(). li().a(this.prefix() + SliderAMWebApp.CONTAINER_STATS, "Statistics")._(). - li().a(this.prefix() + SliderAMWebApp.CLUSTER_SPEC, "Specification")._()._()._(); + li().a(this.prefix() + SliderAMWebApp.CLUSTER_SPEC, "Specification")._(). + li().a(rootPath(RestPaths.SYSTEM_METRICS), "Metrics")._(). + li().a(rootPath(RestPaths.SYSTEM_HEALTHCHECK), "Health")._(). + li().a(rootPath(RestPaths.SYSTEM_THREADS), "Threads")._() + ._() + ._(); + } + + private String rootPath(String absolutePath) { + return root_url(absolutePath); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/main/java/org/apache/slider/server/services/utility/MetricsBindingService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/services/utility/MetricsBindingService.java b/slider-core/src/main/java/org/apache/slider/server/services/utility/MetricsBindingService.java deleted file mode 100644 index afd2c1a..0000000 --- a/slider-core/src/main/java/org/apache/slider/server/services/utility/MetricsBindingService.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.slider.server.services.utility; - -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.ScheduledReporter; -import com.codahale.metrics.ganglia.GangliaReporter; -import info.ganglia.gmetric4j.gmetric.GMetric; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.io.IOUtils; -import org.apache.hadoop.service.AbstractService; - -import java.util.concurrent.TimeUnit; - -/** - * YARN service which hooks up Codahale metrics to - * Ganglia (if enabled) - */ -public class MetricsBindingService extends AbstractService { - - /** - * {@value} - */ - public static final String METRICS_GANGLIA_ENABLED = - "metrics.ganglia.enabled"; - /** - * {@value} - */ - public static final String METRICS_GANGLIA_HOST = "metrics.ganglia.host"; - - /** - * {@value} - */ - public static final String METRICS_GANGLIA_PORT = "metrics.ganglia.port"; - - /** - * {@value} - */ - public static final String METRICS_GANGLIA_VERSION_31 = "metrics.ganglia.version.31"; - - /** - * {@value} - */ - public static final String METRICS_GANGLIA_REPORT_INTERVAL = "metrics.ganglia.report.interval"; - - /** - * {@value} - */ - public static final int DEFAULT_GANGLIA_PORT = 8649; - - private final MetricRegistry metrics; - private ScheduledReporter reporter; - - public MetricsBindingService(String name, - MetricRegistry metrics) { - super(name); - this.metrics = metrics; - } - - /** - * Instantiate...create a metric registry in the process - * @param name service name - */ - public MetricsBindingService(String name) { - this(name, new MetricRegistry()); - } - - public MetricRegistry getMetrics() { - return metrics; - } - - @Override - protected void serviceStart() throws Exception { - super.serviceStart(); - Configuration conf = getConfig(); - boolean enabled = conf.getBoolean(METRICS_GANGLIA_ENABLED, false); - - if (enabled) { - String host = conf.getTrimmed(METRICS_GANGLIA_HOST, ""); - int port = conf.getInt(METRICS_GANGLIA_PORT, DEFAULT_GANGLIA_PORT); - int interval = conf.getInt(METRICS_GANGLIA_REPORT_INTERVAL, 60); - int ttl = 1; - GMetric.UDPAddressingMode - mcast = GMetric.UDPAddressingMode.getModeForAddress(host); - boolean ganglia31 = conf.getBoolean(METRICS_GANGLIA_VERSION_31, true); - - final GMetric ganglia = - new GMetric( - host, - port, - mcast, - ttl, - ganglia31); - reporter = GangliaReporter.forRegistry(metrics) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build(ganglia); - reporter.start(interval, TimeUnit.SECONDS); - } - } - - @Override - protected void serviceStop() throws Exception { - IOUtils.closeStream(reporter); - super.serviceStop(); - } - - public boolean isEnabled() { - return reporter != null; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentWeb.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentWeb.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentWeb.groovy index 458c921..e868b8f 100644 --- a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentWeb.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneAgentWeb.groovy @@ -71,8 +71,9 @@ class TestStandaloneAgentWeb extends AgentMiniClusterTestBase { GET(appmaster) -// GET(appmaster, RestPaths.SYSTEM_HEALTHCHECK) -// GET(appmaster, RestPaths.SYSTEM_PING) + log.info GET(appmaster, RestPaths.SYSTEM_PING) + log.info GET(appmaster, RestPaths.SYSTEM_THREADS) + log.info GET(appmaster, RestPaths.SYSTEM_HEALTHCHECK) } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockAppState.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockAppState.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockAppState.groovy index 7abb123..2cc13c2 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockAppState.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockAppState.groovy @@ -17,8 +17,8 @@ package org.apache.slider.server.appmaster.model.mock -import com.codahale.metrics.MetricRegistry import org.apache.slider.providers.ProviderRole +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring import org.apache.slider.server.appmaster.state.AbstractRecordFactory import org.apache.slider.server.appmaster.state.AppState @@ -28,7 +28,7 @@ import org.apache.slider.server.appmaster.state.AppState class MockAppState extends AppState { public MockAppState(AbstractRecordFactory recordFactory) { - super(recordFactory, new MetricRegistry()); + super(recordFactory, new MetricsAndMonitoring()); } long time = 0; @@ -37,7 +37,7 @@ class MockAppState extends AppState { * Instance with a mock record factory */ public MockAppState() { - super(new MockRecordFactory(), new MetricRegistry()); + super(new MockRecordFactory(), new MetricsAndMonitoring()); } public Map<String, ProviderRole> getRoleMap() { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/monkey/TestMockMonkey.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/monkey/TestMockMonkey.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/monkey/TestMockMonkey.groovy index e4a42fc..82192b9 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/monkey/TestMockMonkey.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/monkey/TestMockMonkey.groovy @@ -54,7 +54,7 @@ class TestMockMonkey extends BaseMockAppStateTest { def configuration = new YarnConfiguration() queues = new QueueService(); queues.init(configuration) - monkey = new ChaosMonkeyService(metricRegistry, queues) + monkey = new ChaosMonkeyService(metrics.metrics, queues) monkey.init(configuration) } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy index 4f1d52d..669c00e 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy @@ -64,7 +64,7 @@ public class TestContainerStatsBlock extends BaseMockAppStateTest { providerAppState, providerService, null, - null, metricRegistry); + null, metrics); Injector injector = Guice.createInjector(new AbstractModule() { @Override http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy index ff24b82..82e36f5 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy @@ -56,7 +56,7 @@ public class TestIndexBlock extends BaseMockAppStateTest { providerAppState, providerService, null, - null, metricRegistry); + null, metrics); Injector injector = Guice.createInjector(new AbstractModule() { @Override http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/groovy/org/apache/slider/test/SliderTestBase.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/test/SliderTestBase.groovy b/slider-core/src/test/groovy/org/apache/slider/test/SliderTestBase.groovy index e0798a4..7be7869 100644 --- a/slider-core/src/test/groovy/org/apache/slider/test/SliderTestBase.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/test/SliderTestBase.groovy @@ -22,6 +22,7 @@ import com.codahale.metrics.MetricRegistry import groovy.transform.CompileStatic import org.apache.hadoop.fs.FileUtil import org.apache.slider.common.SliderXMLConfKeysForTesting +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring import org.junit.Before import org.junit.BeforeClass import org.junit.Rule @@ -41,7 +42,7 @@ public abstract class SliderTestBase extends SliderTestUtils { /** * Singleton metric registry */ - public static final MetricRegistry metricRegistry = new MetricRegistry() + public static final MetricsAndMonitoring metrics = new MetricsAndMonitoring() @Rule public TestName methodName = new TestName(); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java index db8223a..f2a7569 100644 --- a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java +++ b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java @@ -18,7 +18,6 @@ package org.apache.slider.server.appmaster.web.rest.agent; -import com.codahale.metrics.MetricRegistry; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; @@ -34,6 +33,7 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.slider.common.SliderKeys; import org.apache.slider.common.tools.SliderUtils; import org.apache.slider.core.conf.MapOperations; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.model.mock.MockFactory; import org.apache.slider.server.appmaster.model.mock.MockProviderService; import org.apache.slider.server.appmaster.model.mock.MockRecordFactory; @@ -122,7 +122,7 @@ public class TestAMAgentWebServices { historyPath = new org.apache.hadoop.fs.Path(historyWorkDir.toURI()); fs.delete(historyPath, true); - appState = new AppState(new MockRecordFactory(), new MetricRegistry()); + appState = new AppState(new MockRecordFactory(), new MetricsAndMonitoring()); appState.setContainerLimits(RM_MAX_RAM, RM_MAX_CORES); appState.buildInstance( factory.newInstanceDefinition(0, 0, 0), http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java index 9bfcd25..0776afc 100644 --- a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java +++ b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java @@ -18,7 +18,6 @@ package org.apache.slider.server.appmaster.web.rest.management; -import com.codahale.metrics.MetricRegistry; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; @@ -40,6 +39,7 @@ import org.apache.slider.core.conf.ConfTree; import org.apache.slider.core.exceptions.BadClusterStateException; import org.apache.slider.core.exceptions.BadConfigException; import org.apache.slider.core.persist.JsonSerDeser; +import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.model.mock.MockFactory; import org.apache.slider.server.appmaster.model.mock.MockProviderService; import org.apache.slider.server.appmaster.model.mock.MockRecordFactory; @@ -168,7 +168,7 @@ public class TestAMManagementWebServices extends JerseyTest { historyPath = new org.apache.hadoop.fs.Path(historyWorkDir.toURI()); fs.delete(historyPath, true); - appState = new AppState(new MockRecordFactory(), new MetricRegistry()); + appState = new AppState(new MockRecordFactory(), new MetricsAndMonitoring()); appState.setContainerLimits(RM_MAX_RAM, RM_MAX_CORES); appState.buildInstance( factory.newInstanceDefinition(0, 0, 0), http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy ---------------------------------------------------------------------- diff --git a/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy b/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy index b3959af..4757d77 100644 --- a/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy +++ b/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy @@ -1225,6 +1225,7 @@ abstract class CommandTestBase extends SliderTestUtils { fail(errorText + "\n" + outfile.text) } } + /** * Is the registry accessible for an application? * @param args argument map containing <code>"application"</code> @@ -1262,4 +1263,54 @@ abstract class CommandTestBase extends SliderTestUtils { assert f.exists() return Outcome.fromBool(f.text.contains(text)) } + + /** + * Probe callback for is the the app root web page up + * @param args map where 'applicationId' must be set + * @return the outcome + */ + protected static Outcome isRootWebPageUp( + Map<String, String> args) { + assert args['applicationId'] != null + String applicationId = args['applicationId']; + def sar = lookupApplication(applicationId) + assert sar != null; + if (!sar.url) { + return Outcome.Retry; + } + try { + GET(sar.url) + return Outcome.Success + } catch (Exception e) { + return Outcome.Retry; + } + } + + /** + * Await for the root web page of an app to come up + * @param applicationId app ID + * @param launch_timeout launch timeout + */ + void expectRootWebPageUp( + String applicationId, + int launch_timeout) { + + repeatUntilSuccess( + "await root web page", + this.&isRootWebPageUp, + launch_timeout, + PROBE_SLEEP_TIME, + [ + applicationId: applicationId + ], + false, + "web page not up") { + + def sar = lookupApplication(applicationId) + assert sar != null; + assert sar.url + // this is the final failure cause + GET(sar.url) + } + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy ---------------------------------------------------------------------- diff --git a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy new file mode 100644 index 0000000..416fa11 --- /dev/null +++ b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.funtest.lifecycle + +import groovy.transform.CompileStatic +import groovy.util.logging.Slf4j +import org.apache.hadoop.registry.client.binding.RegistryUtils +import org.apache.hadoop.registry.client.types.Endpoint +import org.apache.hadoop.registry.client.types.ServiceRecord +import org.apache.hadoop.yarn.api.records.YarnApplicationState +import org.apache.slider.common.SliderExitCodes +import org.apache.slider.common.SliderKeys +import org.apache.slider.common.params.Arguments +import org.apache.slider.common.params.SliderActions +import org.apache.slider.funtest.framework.AgentCommandTestBase +import org.apache.slider.funtest.framework.FuntestProperties +import org.apache.slider.funtest.framework.SliderShell +import org.apache.slider.server.appmaster.web.rest.RestPaths +import org.apache.slider.test.Outcome +import org.junit.After +import org.junit.Before +import org.junit.Test + +import static org.apache.slider.core.registry.info.CustomRegistryConstants.* + +@CompileStatic +@Slf4j +public class AgentWebPagesIT extends AgentCommandTestBase + implements FuntestProperties, Arguments, SliderExitCodes, SliderActions { + + + static String CLUSTER = "test-agent-web" + + static String APP_RESOURCE2 = "../slider-core/src/test/app_packages/test_command_log/resources_no_role.json" + + + @Before + public void prepareCluster() { + setupCluster(CLUSTER) + } + + @After + public void destroyCluster() { + cleanup(CLUSTER) + } + + @Test + public void testAgentWeb() throws Throwable { + describe("Create a 0-role cluster and make web queries against it") + def clusterpath = buildClusterPath(CLUSTER) + File launchReportFile = createTempJsonFile(); + SliderShell shell = createTemplatedSliderApplication(CLUSTER, + APP_TEMPLATE, + APP_RESOURCE2, + [], + launchReportFile) + + logShell(shell) + + def appId = ensureYarnApplicationIsUp(launchReportFile) + assert appId + expectRootWebPageUp(appId, instanceLaunchTime) + File liveReportFile = createTempJsonFile(); + + lookup(appId,liveReportFile) + def report = loadAppReport(liveReportFile) + assert report.url + + def root = report.url + log.info GET(root, RestPaths.SYSTEM_METRICS) + GET(root, RestPaths.SYSTEM_THREADS) + log.info GET(root, RestPaths.SYSTEM_HEALTHCHECK) + log.info GET(root, RestPaths.SYSTEM_PING) + } + +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/524446db/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AppsThroughAgentDemo.groovy ---------------------------------------------------------------------- diff --git a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AppsThroughAgentDemo.groovy b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AppsThroughAgentDemo.groovy index 0f940cf..3dd7857 100644 --- a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AppsThroughAgentDemo.groovy +++ b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AppsThroughAgentDemo.groovy @@ -39,7 +39,7 @@ public class AppsThroughAgentDemo extends AppsThroughAgentIT { @Override void destroyCluster() { - super.destroyCluster() +// super.destroyCluster() } }
