/**
* Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.seedstack.seed.web.internal.diagnostic;
import com.google.common.collect.Lists;
import io.nuun.kernel.api.plugin.InitState;
import io.nuun.kernel.api.plugin.context.InitContext;
import org.seedstack.seed.core.SeedRuntime;
import org.seedstack.seed.core.internal.AbstractSeedPlugin;
import org.seedstack.seed.diagnostic.DiagnosticManager;
import org.seedstack.seed.web.WebConfig;
import org.seedstack.seed.web.spi.FilterDefinition;
import org.seedstack.seed.web.spi.ListenerDefinition;
import org.seedstack.seed.web.spi.SeedFilterPriority;
import org.seedstack.seed.web.spi.ServletDefinition;
import org.seedstack.seed.web.spi.WebProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletContext;
import java.util.List;
public class WebDiagnosticPlugin extends AbstractSeedPlugin implements WebProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(WebDiagnosticPlugin.class);
private DiagnosticManager diagnosticManager;
private ServletContext servletContext;
private WebConfig webConfig;
@Override
public String name() {
return "web-diagnostic";
}
@Override
protected void setup(SeedRuntime seedRuntime) {
diagnosticManager = seedRuntime.getDiagnosticManager();
servletContext = seedRuntime.contextAs(ServletContext.class);
}
@Override
public InitState initialize(InitContext initContext) {
webConfig = getConfiguration(WebConfig.class);
if (servletContext != null) {
diagnosticManager.registerDiagnosticInfoCollector(
"web",
new WebDiagnosticCollector(servletContext)
);
}
return InitState.INITIALIZED;
}
@Override
public Object nativeUnitModule() {
if (webConfig.isRequestDiagnosticEnabled()) {
return new WebDiagnosticModule();
} else {
return null;
}
}
@Override
public List<ServletDefinition> servlets() {
return null;
}
@Override
public List<FilterDefinition> filters() {
if (webConfig.isRequestDiagnosticEnabled()) {
LOGGER.info("Per-request diagnostic enabled, a diagnostic file will be dumped for each request exception");
FilterDefinition filterDefinition = new FilterDefinition("web-diagnostic", WebDiagnosticFilter.class);
filterDefinition.setPriority(SeedFilterPriority.DIAGNOSTIC);
filterDefinition.setAsyncSupported(true);
filterDefinition.addMappings(new FilterDefinition.Mapping("/*"));
return Lists.newArrayList(filterDefinition);
} else {
return null;
}
}
@Override
public List<ListenerDefinition> listeners() {
return null;
}
}