azkaban-aplcache
Changes
azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java 10(+5 -5)
azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java 181(+79 -102)
Details
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
index 116cf99..c7008ca 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
@@ -16,57 +16,17 @@
package azkaban.webapp;
-import azkaban.AzkabanCommonModule;
-import azkaban.executor.AlerterHolder;
-import com.codahale.metrics.MetricRegistry;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.management.ManagementFactory;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.charset.StandardCharsets;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import javax.management.MBeanInfo;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
+import static azkaban.ServiceProvider.SERVICE_PROVIDER;
+import static java.util.Objects.requireNonNull;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.log4j.jmx.HierarchyDynamicMBean;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.log.Log4JLogChute;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
-import org.joda.time.DateTimeZone;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.DefaultServlet;
-import org.mortbay.jetty.servlet.ServletHolder;
-import org.mortbay.thread.QueuedThreadPool;
-
-import azkaban.alert.Alerter;
+import azkaban.AzkabanCommonModule;
import azkaban.Constants;
import azkaban.database.AzkabanDatabaseSetup;
import azkaban.executor.ExecutorManager;
-import azkaban.executor.JdbcExecutorLoader;
import azkaban.jmx.JmxExecutorManager;
import azkaban.jmx.JmxJettyServer;
import azkaban.jmx.JmxTriggerManager;
+import azkaban.metrics.MetricsManager;
import azkaban.metrics.MetricsUtility;
import azkaban.project.ProjectManager;
import azkaban.scheduler.ScheduleLoader;
@@ -74,8 +34,6 @@ import azkaban.scheduler.ScheduleManager;
import azkaban.scheduler.TriggerBasedScheduleLoader;
import azkaban.server.AzkabanServer;
import azkaban.server.session.SessionCache;
-import azkaban.trigger.JdbcTriggerLoader;
-import azkaban.trigger.TriggerLoader;
import azkaban.trigger.TriggerManager;
import azkaban.trigger.TriggerManagerException;
import azkaban.trigger.builtin.BasicTimeChecker;
@@ -87,7 +45,6 @@ import azkaban.trigger.builtin.SlaAlertAction;
import azkaban.trigger.builtin.SlaChecker;
import azkaban.user.UserManager;
import azkaban.user.XmlUserManager;
-import azkaban.utils.Emailer;
import azkaban.utils.FileIOUtils;
import azkaban.utils.Props;
import azkaban.utils.PropsUtils;
@@ -106,12 +63,43 @@ import azkaban.webapp.servlet.ProjectServlet;
import azkaban.webapp.servlet.ScheduleServlet;
import azkaban.webapp.servlet.StatsServlet;
import azkaban.webapp.servlet.TriggerManagerServlet;
-import azkaban.metrics.MetricsManager;
-
+import com.codahale.metrics.MetricRegistry;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
import com.linkedin.restli.server.RestliServlet;
-
-import static azkaban.ServiceProvider.*;
-import static java.util.Objects.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.log4j.jmx.HierarchyDynamicMBean;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.log.Log4JLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
+import org.joda.time.DateTimeZone;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.thread.QueuedThreadPool;
/**
@@ -135,46 +123,34 @@ import static java.util.Objects.*;
* Jetty truststore password
*/
public class AzkabanWebServer extends AzkabanServer {
+
+ public static final String DEFAULT_CONF_PATH = "conf";
private static final String AZKABAN_ACCESS_LOGGER_NAME =
"azkaban.webapp.servlet.LoginAbstractAzkabanServlet";
-
private static final Logger logger = Logger.getLogger(AzkabanWebServer.class);
-
- public static final String DEFAULT_CONF_PATH = "conf";
private static final int MAX_FORM_CONTENT_SIZE = 10 * 1024 * 1024;
- private static AzkabanWebServer app;
-
private static final String DEFAULT_TIMEZONE_ID = "default.timezone.id";
private static final String VELOCITY_DEV_MODE_PARAM = "velocity.dev.mode";
private static final String USER_MANAGER_CLASS_PARAM = "user.manager.class";
private static final String DEFAULT_STATIC_DIR = "";
-
+ private static AzkabanWebServer app;
private final VelocityEngine velocityEngine;
private final Server server;
-
- //queuedThreadPool is mainly used to monitor jetty threadpool.
- private QueuedThreadPool queuedThreadPool;
-
private final UserManager userManager;
private final ProjectManager projectManager;
private final ExecutorManager executorManager;
private final ScheduleManager scheduleManager;
private final TriggerManager triggerManager;
-
private final ClassLoader baseClassLoader;
-
private final Props props;
private final SessionCache sessionCache;
private final List<ObjectName> registeredMBeans = new ArrayList<>();
-
+ //queuedThreadPool is mainly used to monitor jetty threadpool.
+ private QueuedThreadPool queuedThreadPool;
private Map<String, TriggerPlugin> triggerPlugins;
private MBeanServer mbeanServer;
- public static AzkabanWebServer getInstance() {
- return app;
- }
-
/**
* Constructor usually called by tomcat AzkabanServletContext to create the
* initial server
@@ -184,345 +160,56 @@ public class AzkabanWebServer extends AzkabanServer {
}
@Inject
- public AzkabanWebServer(Server server, Props props) throws Exception {
+ public AzkabanWebServer(final Server server, final Props props) throws Exception {
this.props = requireNonNull(props);
- this.server = server;
-
- velocityEngine = configureVelocityEngine(props.getBoolean(VELOCITY_DEV_MODE_PARAM, false));
- sessionCache = new SessionCache(props);
- userManager = loadUserManager(props);
-
- // TODO remove hack. Move injection to constructor
- executorManager = SERVICE_PROVIDER.getInstance(ExecutorManager.class);
- projectManager = SERVICE_PROVIDER.getInstance(ProjectManager.class);
- triggerManager = SERVICE_PROVIDER.getInstance(TriggerManager.class);
-
- loadBuiltinCheckersAndActions();
-
- // load all trigger agents here
- scheduleManager = loadScheduleManager(triggerManager);
-
- String triggerPluginDir =
- props.getString("trigger.plugin.dir", "plugins/triggers");
-
- loadPluginCheckersAndActions(triggerPluginDir);
-
- baseClassLoader = this.getClassLoader();
-
- // Setup time zone
- if (props.containsKey(DEFAULT_TIMEZONE_ID)) {
- String timezone = props.getString(DEFAULT_TIMEZONE_ID);
- System.setProperty("user.timezone", timezone);
- TimeZone.setDefault(TimeZone.getTimeZone(timezone));
- DateTimeZone.setDefault(DateTimeZone.forID(timezone));
- logger.info("Setting timezone to " + timezone);
- }
-
- configureMBeanServer();
- }
-
- private void startWebMetrics() throws Exception {
-
- MetricRegistry registry = MetricsManager.INSTANCE.getRegistry();
-
- // The number of idle threads in Jetty thread pool
- MetricsUtility.addGauge("JETTY-NumIdleThreads", registry, queuedThreadPool::getIdleThreads);
-
- // The number of threads in Jetty thread pool. The formula is:
- // threads = idleThreads + busyThreads
- MetricsUtility.addGauge("JETTY-NumTotalThreads", registry, queuedThreadPool::getThreads);
-
- // The number of requests queued in the Jetty thread pool.
- MetricsUtility.addGauge("JETTY-NumQueueSize", registry, queuedThreadPool::getQueueSize);
-
- MetricsUtility.addGauge("WEB-NumQueuedFlows", registry, executorManager::getQueuedFlowSize);
- /**
- * TODO: Currently {@link ExecutorManager#getRunningFlows()} includes both running and non-dispatched flows.
- * Originally we would like to do a subtraction between getRunningFlows and {@link ExecutorManager#getQueuedFlowSize()},
- * in order to have the correct runnable flows.
- * However, both getRunningFlows and getQueuedFlowSize are not synchronized, such that we can not make
- * a thread safe subtraction. We need to fix this in the future.
- */
- MetricsUtility.addGauge("WEB-NumRunningFlows", registry, () -> executorManager.getRunningFlows().size());
-
- logger.info("starting reporting Web Server Metrics");
- MetricsManager.INSTANCE.startReporting("AZ-WEB", props);
- }
-
- private void setTriggerPlugins(Map<String, TriggerPlugin> triggerPlugins) {
- this.triggerPlugins = triggerPlugins;
- }
-
- private UserManager loadUserManager(Props props) {
- Class<?> userManagerClass = props.getClass(USER_MANAGER_CLASS_PARAM, null);
- UserManager manager;
- if (userManagerClass != null && userManagerClass.getConstructors().length > 0) {
- logger.info("Loading user manager class " + userManagerClass.getName());
- try {
- Constructor<?> userManagerConstructor = userManagerClass.getConstructor(Props.class);
- manager = (UserManager) userManagerConstructor.newInstance(props);
- } catch (Exception e) {
- logger.error("Could not instantiate UserManager " + userManagerClass.getName());
- throw new RuntimeException(e);
- }
- } else {
- manager = new XmlUserManager(props);
- }
- return manager;
- }
-
- private ScheduleManager loadScheduleManager(TriggerManager tm)
- throws Exception {
- logger.info("Loading trigger based scheduler");
- ScheduleLoader loader =
- new TriggerBasedScheduleLoader(tm, ScheduleManager.triggerSource);
- return new ScheduleManager(loader);
- }
-
- private void loadBuiltinCheckersAndActions() {
- logger.info("Loading built-in checker and action types");
- ExecuteFlowAction.setExecutorManager(executorManager);
- ExecuteFlowAction.setProjectManager(projectManager);
- ExecuteFlowAction.setTriggerManager(triggerManager);
- KillExecutionAction.setExecutorManager(executorManager);
- CreateTriggerAction.setTriggerManager(triggerManager);
- ExecutionChecker.setExecutorManager(executorManager);
-
- triggerManager.registerCheckerType(BasicTimeChecker.type, BasicTimeChecker.class);
- triggerManager.registerCheckerType(SlaChecker.type, SlaChecker.class);
- triggerManager.registerCheckerType(ExecutionChecker.type, ExecutionChecker.class);
- triggerManager.registerActionType(ExecuteFlowAction.type, ExecuteFlowAction.class);
- triggerManager.registerActionType(KillExecutionAction.type, KillExecutionAction.class);
- triggerManager.registerActionType(SlaAlertAction.type, SlaAlertAction.class);
- triggerManager.registerActionType(CreateTriggerAction.type, CreateTriggerAction.class);
- }
-
- private void loadPluginCheckersAndActions(String pluginPath) {
- logger.info("Loading plug-in checker and action types");
- File triggerPluginPath = new File(pluginPath);
- if (!triggerPluginPath.exists()) {
- logger.error("plugin path " + pluginPath + " doesn't exist!");
- return;
- }
-
- ClassLoader parentLoader = this.getClassLoader();
- File[] pluginDirs = triggerPluginPath.listFiles();
- ArrayList<String> jarPaths = new ArrayList<String>();
- for (File pluginDir : pluginDirs) {
- if (!pluginDir.exists()) {
- logger.error("Error! Trigger plugin path " + pluginDir.getPath()
- + " doesn't exist.");
- continue;
- }
-
- if (!pluginDir.isDirectory()) {
- logger.error("The plugin path " + pluginDir + " is not a directory.");
- continue;
- }
-
- // Load the conf directory
- File propertiesDir = new File(pluginDir, "conf");
- Props pluginProps = null;
- if (propertiesDir.exists() && propertiesDir.isDirectory()) {
- File propertiesFile = new File(propertiesDir, "plugin.properties");
- File propertiesOverrideFile =
- new File(propertiesDir, "override.properties");
-
- if (propertiesFile.exists()) {
- if (propertiesOverrideFile.exists()) {
- pluginProps =
- PropsUtils.loadProps(null, propertiesFile,
- propertiesOverrideFile);
- } else {
- pluginProps = PropsUtils.loadProps(null, propertiesFile);
- }
- } else {
- logger.error("Plugin conf file " + propertiesFile + " not found.");
- continue;
- }
- } else {
- logger.error("Plugin conf path " + propertiesDir + " not found.");
- continue;
- }
-
- List<String> extLibClasspath =
- pluginProps.getStringList("trigger.external.classpaths",
- (List<String>) null);
-
- String pluginClass = pluginProps.getString("trigger.class");
- if (pluginClass == null) {
- logger.error("Trigger class is not set.");
- } else {
- logger.error("Plugin class " + pluginClass);
- }
-
- URLClassLoader urlClassLoader = null;
- File libDir = new File(pluginDir, "lib");
- if (libDir.exists() && libDir.isDirectory()) {
- File[] files = libDir.listFiles();
-
- ArrayList<URL> urls = new ArrayList<URL>();
- for (int i = 0; i < files.length; ++i) {
- try {
- URL url = files[i].toURI().toURL();
- urls.add(url);
- } catch (MalformedURLException e) {
- logger.error(e);
- }
- }
- if (extLibClasspath != null) {
- for (String extLib : extLibClasspath) {
- try {
- File file = new File(pluginDir, extLib);
- URL url = file.toURI().toURL();
- urls.add(url);
- } catch (MalformedURLException e) {
- logger.error(e);
- }
- }
- }
-
- urlClassLoader =
- new URLClassLoader(urls.toArray(new URL[urls.size()]), parentLoader);
- } else {
- logger.error("Library path " + propertiesDir + " not found.");
- continue;
- }
-
- Class<?> triggerClass = null;
- try {
- triggerClass = urlClassLoader.loadClass(pluginClass);
- } catch (ClassNotFoundException e) {
- logger.error("Class " + pluginClass + " not found.");
- continue;
- }
-
- String source = FileIOUtils.getSourcePathFromClass(triggerClass);
- logger.info("Source jar " + source);
- jarPaths.add("jar:file:" + source);
-
- try {
- Utils.invokeStaticMethod(urlClassLoader, pluginClass,
- "initiateCheckerTypes", pluginProps, app);
- } catch (Exception e) {
- logger.error("Unable to initiate checker types for " + pluginClass);
- continue;
- }
-
- try {
- Utils.invokeStaticMethod(urlClassLoader, pluginClass,
- "initiateActionTypes", pluginProps, app);
- } catch (Exception e) {
- logger.error("Unable to initiate action types for " + pluginClass);
- continue;
- }
-
- }
- }
-
- /**
- * Returns the web session cache.
- *
- * @return
- */
- @Override
- public SessionCache getSessionCache() {
- return sessionCache;
- }
-
- /**
- * Returns the velocity engine for pages to use.
- *
- * @return
- */
- @Override
- public VelocityEngine getVelocityEngine() {
- return velocityEngine;
- }
-
- @Override
- public UserManager getUserManager() {
- return userManager;
- }
-
- public ProjectManager getProjectManager() {
- return projectManager;
- }
-
- public ExecutorManager getExecutorManager() {
- return executorManager;
- }
-
- public ScheduleManager getScheduleManager() {
- return scheduleManager;
- }
-
- public TriggerManager getTriggerManager() {
- return triggerManager;
- }
-
- /**
- * Creates and configures the velocity engine.
- *
- * @param devMode
- * @return
- */
- private VelocityEngine configureVelocityEngine(final boolean devMode) {
- VelocityEngine engine = new VelocityEngine();
- engine.setProperty("resource.loader", "classpath, jar");
- engine.setProperty("classpath.resource.loader.class",
- ClasspathResourceLoader.class.getName());
- engine.setProperty("classpath.resource.loader.cache", !devMode);
- engine.setProperty("classpath.resource.loader.modificationCheckInterval",
- 5L);
- engine.setProperty("jar.resource.loader.class",
- JarResourceLoader.class.getName());
- engine.setProperty("jar.resource.loader.cache", !devMode);
- engine.setProperty("resource.manager.logwhenfound", false);
- engine.setProperty("input.encoding", "UTF-8");
- engine.setProperty("output.encoding", "UTF-8");
- engine.setProperty("directive.set.null.allowed", true);
- engine.setProperty("resource.manager.logwhenfound", false);
- engine.setProperty("velocimacro.permissions.allow.inline", true);
- engine.setProperty("velocimacro.library.autoreload", devMode);
- engine.setProperty("velocimacro.library",
- "/azkaban/webapp/servlet/velocity/macros.vm");
- engine.setProperty(
- "velocimacro.permissions.allow.inline.to.replace.global", true);
- engine.setProperty("velocimacro.arguments.strict", true);
- engine.setProperty("runtime.log.invalid.references", devMode);
- engine.setProperty("runtime.log.logsystem.class", Log4JLogChute.class);
- engine.setProperty("runtime.log.logsystem.log4j.logger",
- Logger.getLogger("org.apache.velocity.Logger"));
- engine.setProperty("parser.pool.size", 3);
- return engine;
- }
+ this.server = server;
- public ClassLoader getClassLoader() {
- return baseClassLoader;
+ this.velocityEngine = configureVelocityEngine(props.getBoolean(VELOCITY_DEV_MODE_PARAM, false));
+ this.sessionCache = new SessionCache(props);
+ this.userManager = loadUserManager(props);
+
+ // TODO remove hack. Move injection to constructor
+ this.executorManager = SERVICE_PROVIDER.getInstance(ExecutorManager.class);
+ this.projectManager = SERVICE_PROVIDER.getInstance(ProjectManager.class);
+ this.triggerManager = SERVICE_PROVIDER.getInstance(TriggerManager.class);
+
+ loadBuiltinCheckersAndActions();
+
+ // load all trigger agents here
+ this.scheduleManager = loadScheduleManager(this.triggerManager);
+
+ final String triggerPluginDir =
+ props.getString("trigger.plugin.dir", "plugins/triggers");
+
+ loadPluginCheckersAndActions(triggerPluginDir);
+
+ this.baseClassLoader = this.getClassLoader();
+
+ // Setup time zone
+ if (props.containsKey(DEFAULT_TIMEZONE_ID)) {
+ final String timezone = props.getString(DEFAULT_TIMEZONE_ID);
+ System.setProperty("user.timezone", timezone);
+ TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+ DateTimeZone.setDefault(DateTimeZone.forID(timezone));
+ logger.info("Setting timezone to " + timezone);
+ }
+
+ configureMBeanServer();
}
- /**
- * Returns the global azkaban properties
- *
- * @return
- */
- @Override
- public Props getServerProps() {
- return props;
+ public static AzkabanWebServer getInstance() {
+ return app;
}
/**
* Azkaban using Jetty
- *
- * @param args
*/
- public static void main(String[] args) throws Exception {
+ public static void main(final String[] args) throws Exception {
// Redirect all std out and err messages into log4j
StdOutErrRedirect.redirectOutAndErrToLog();
logger.info("Starting Jetty Azkaban Web Server...");
- Props props = AzkabanServer.loadProps(args);
+ final Props props = AzkabanServer.loadProps(args);
if (props == null) {
logger.error("Azkaban Properties not loaded. Exiting..");
@@ -530,13 +217,14 @@ public class AzkabanWebServer extends AzkabanServer {
}
/* Initialize Guice Injector */
- final Injector injector = Guice.createInjector(new AzkabanCommonModule(props), new AzkabanWebServerModule());
+ final Injector injector = Guice
+ .createInjector(new AzkabanCommonModule(props), new AzkabanWebServerModule());
SERVICE_PROVIDER.setInjector(injector);
launch(injector.getInstance(AzkabanWebServer.class));
}
- public static void launch(AzkabanWebServer webServer) throws Exception {
+ public static void launch(final AzkabanWebServer webServer) throws Exception {
/* This creates the Web Server instance */
app = webServer;
@@ -549,14 +237,14 @@ public class AzkabanWebServer extends AzkabanServer {
public void run() {
try {
logTopMemoryConsumers();
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.info(("Exception when logging top memory consumers"), e);
}
logger.info("Shutting down http server...");
try {
app.close();
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error("Error while shutting down http server.", e);
}
logger.info("kk thx bye.");
@@ -567,14 +255,14 @@ public class AzkabanWebServer extends AzkabanServer {
&& new File("/usr/bin/head").exists()) {
logger.info("logging top memeory consumer");
- java.lang.ProcessBuilder processBuilder =
+ final java.lang.ProcessBuilder processBuilder =
new java.lang.ProcessBuilder("/bin/bash", "-c",
"/bin/ps aux --sort -rss | /usr/bin/head");
- Process p = processBuilder.start();
+ final Process p = processBuilder.start();
p.waitFor();
- InputStream is = p.getInputStream();
- java.io.BufferedReader reader =
+ final InputStream is = p.getInputStream();
+ final java.io.BufferedReader reader =
new java.io.BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
String line = null;
while ((line = reader.readLine()) != null) {
@@ -586,7 +274,8 @@ public class AzkabanWebServer extends AzkabanServer {
});
}
- private static void prepareAndStartServer(Props azkabanSettings, Server server) throws Exception {
+ private static void prepareAndStartServer(final Props azkabanSettings, final Server server)
+ throws Exception {
validateDatabaseVersion(azkabanSettings);
configureRoutes(server, azkabanSettings);
@@ -596,16 +285,18 @@ public class AzkabanWebServer extends AzkabanServer {
try {
server.start();
logger.info("Server started");
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.warn(e);
Utils.croak(e.getMessage(), 1);
}
}
- private static void validateDatabaseVersion(Props azkabanSettings) throws IOException, SQLException {
- boolean checkDB = azkabanSettings.getBoolean(AzkabanDatabaseSetup.DATABASE_CHECK_VERSION, false);
+ private static void validateDatabaseVersion(final Props azkabanSettings)
+ throws IOException, SQLException {
+ final boolean checkDB = azkabanSettings
+ .getBoolean(AzkabanDatabaseSetup.DATABASE_CHECK_VERSION, false);
if (checkDB) {
- AzkabanDatabaseSetup setup = new AzkabanDatabaseSetup(azkabanSettings);
+ final AzkabanDatabaseSetup setup = new AzkabanDatabaseSetup(azkabanSettings);
setup.loadTableInfo();
if (setup.needsUpdating()) {
logger.error("Database is out of date.");
@@ -617,29 +308,31 @@ public class AzkabanWebServer extends AzkabanServer {
}
}
- private static void configureRoutes(Server server, Props azkabanSettings) throws TriggerManagerException {
- final int maxThreads = azkabanSettings.getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
+ private static void configureRoutes(final Server server, final Props azkabanSettings)
+ throws TriggerManagerException {
+ final int maxThreads = azkabanSettings
+ .getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
- QueuedThreadPool httpThreadPool = new QueuedThreadPool(maxThreads);
+ final QueuedThreadPool httpThreadPool = new QueuedThreadPool(maxThreads);
app.setThreadPool(httpThreadPool);
server.setThreadPool(httpThreadPool);
- String staticDir =
+ final String staticDir =
azkabanSettings.getString("web.resource.dir", DEFAULT_STATIC_DIR);
logger.info("Setting up web resource dir " + staticDir);
- Context root = new Context(server, "/", Context.SESSIONS);
+ final Context root = new Context(server, "/", Context.SESSIONS);
root.setMaxFormContentSize(MAX_FORM_CONTENT_SIZE);
- String defaultServletPath =
+ final String defaultServletPath =
azkabanSettings.getString("azkaban.default.servlet.path", "/index");
root.setResourceBase(staticDir);
- ServletHolder indexRedirect =
+ final ServletHolder indexRedirect =
new ServletHolder(new IndexRedirectServlet(defaultServletPath));
root.addServlet(indexRedirect, "/");
- ServletHolder index = new ServletHolder(new ProjectServlet());
+ final ServletHolder index = new ServletHolder(new ProjectServlet());
root.addServlet(index, "/index");
- ServletHolder staticServlet = new ServletHolder(new DefaultServlet());
+ final ServletHolder staticServlet = new ServletHolder(new DefaultServlet());
root.addServlet(staticServlet, "/css/*");
root.addServlet(staticServlet, "/js/*");
root.addServlet(staticServlet, "/images/*");
@@ -654,18 +347,18 @@ public class AzkabanWebServer extends AzkabanServer {
root.addServlet(new ServletHolder(new TriggerManagerServlet()), "/triggers");
root.addServlet(new ServletHolder(new StatsServlet()), "/stats");
- ServletHolder restliHolder = new ServletHolder(new RestliServlet());
+ final ServletHolder restliHolder = new ServletHolder(new RestliServlet());
restliHolder.setInitParameter("resourcePackages", "azkaban.restli");
root.addServlet(restliHolder, "/restli/*");
- String viewerPluginDir =
+ final String viewerPluginDir =
azkabanSettings.getString("viewer.plugin.dir", "plugins/viewer");
loadViewerPlugins(root, viewerPluginDir, app.getVelocityEngine());
// triggerplugin
- String triggerPluginDir =
+ final String triggerPluginDir =
azkabanSettings.getString("trigger.plugin.dir", "plugins/triggers");
- Map<String, TriggerPlugin> triggerPlugins =
+ final Map<String, TriggerPlugin> triggerPlugins =
loadTriggerPlugins(root, triggerPluginDir, app);
app.setTriggerPlugins(triggerPlugins);
// always have basic time trigger
@@ -675,19 +368,19 @@ public class AzkabanWebServer extends AzkabanServer {
root.setAttribute(Constants.AZKABAN_SERVLET_CONTEXT_KEY, app);
}
- private static Map<String, TriggerPlugin> loadTriggerPlugins(Context root,
- String pluginPath, AzkabanWebServer azkabanWebApp) {
- File triggerPluginPath = new File(pluginPath);
+ private static Map<String, TriggerPlugin> loadTriggerPlugins(final Context root,
+ final String pluginPath, final AzkabanWebServer azkabanWebApp) {
+ final File triggerPluginPath = new File(pluginPath);
if (!triggerPluginPath.exists()) {
- return new HashMap<String, TriggerPlugin>();
+ return new HashMap<>();
}
- Map<String, TriggerPlugin> installedTriggerPlugins =
- new HashMap<String, TriggerPlugin>();
- ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
- File[] pluginDirs = triggerPluginPath.listFiles();
- ArrayList<String> jarPaths = new ArrayList<String>();
- for (File pluginDir : pluginDirs) {
+ final Map<String, TriggerPlugin> installedTriggerPlugins =
+ new HashMap<>();
+ final ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
+ final File[] pluginDirs = triggerPluginPath.listFiles();
+ final ArrayList<String> jarPaths = new ArrayList<>();
+ for (final File pluginDir : pluginDirs) {
if (!pluginDir.exists()) {
logger.error("Error! Trigger plugin path " + pluginDir.getPath()
+ " doesn't exist.");
@@ -700,11 +393,11 @@ public class AzkabanWebServer extends AzkabanServer {
}
// Load the conf directory
- File propertiesDir = new File(pluginDir, "conf");
+ final File propertiesDir = new File(pluginDir, "conf");
Props pluginProps = null;
if (propertiesDir.exists() && propertiesDir.isDirectory()) {
- File propertiesFile = new File(propertiesDir, "plugin.properties");
- File propertiesOverrideFile =
+ final File propertiesFile = new File(propertiesDir, "plugin.properties");
+ final File propertiesOverrideFile =
new File(propertiesDir, "override.properties");
if (propertiesFile.exists()) {
@@ -724,12 +417,12 @@ public class AzkabanWebServer extends AzkabanServer {
continue;
}
- String pluginName = pluginProps.getString("trigger.name");
- List<String> extLibClasspath =
+ final String pluginName = pluginProps.getString("trigger.name");
+ final List<String> extLibClasspath =
pluginProps.getStringList("trigger.external.classpaths",
(List<String>) null);
- String pluginClass = pluginProps.getString("trigger.class");
+ final String pluginClass = pluginProps.getString("trigger.class");
if (pluginClass == null) {
logger.error("Trigger class is not set.");
} else {
@@ -737,26 +430,26 @@ public class AzkabanWebServer extends AzkabanServer {
}
URLClassLoader urlClassLoader = null;
- File libDir = new File(pluginDir, "lib");
+ final File libDir = new File(pluginDir, "lib");
if (libDir.exists() && libDir.isDirectory()) {
- File[] files = libDir.listFiles();
+ final File[] files = libDir.listFiles();
- ArrayList<URL> urls = new ArrayList<URL>();
+ final ArrayList<URL> urls = new ArrayList<>();
for (int i = 0; i < files.length; ++i) {
try {
- URL url = files[i].toURI().toURL();
+ final URL url = files[i].toURI().toURL();
urls.add(url);
- } catch (MalformedURLException e) {
+ } catch (final MalformedURLException e) {
logger.error(e);
}
}
if (extLibClasspath != null) {
- for (String extLib : extLibClasspath) {
+ for (final String extLib : extLibClasspath) {
try {
- File file = new File(pluginDir, extLib);
- URL url = file.toURI().toURL();
+ final File file = new File(pluginDir, extLib);
+ final URL url = file.toURI().toURL();
urls.add(url);
- } catch (MalformedURLException e) {
+ } catch (final MalformedURLException e) {
logger.error(e);
}
}
@@ -772,12 +465,12 @@ public class AzkabanWebServer extends AzkabanServer {
Class<?> triggerClass = null;
try {
triggerClass = urlClassLoader.loadClass(pluginClass);
- } catch (ClassNotFoundException e) {
+ } catch (final ClassNotFoundException e) {
logger.error("Class " + pluginClass + " not found.");
continue;
}
- String source = FileIOUtils.getSourcePathFromClass(triggerClass);
+ final String source = FileIOUtils.getSourcePathFromClass(triggerClass);
logger.info("Source jar " + source);
jarPaths.add("jar:file:" + source);
@@ -786,7 +479,7 @@ public class AzkabanWebServer extends AzkabanServer {
constructor =
triggerClass.getConstructor(String.class, Props.class,
Context.class, AzkabanWebServer.class);
- } catch (NoSuchMethodException e) {
+ } catch (final NoSuchMethodException e) {
logger.error("Constructor not found in " + pluginClass);
continue;
}
@@ -796,7 +489,7 @@ public class AzkabanWebServer extends AzkabanServer {
obj =
constructor.newInstance(pluginName, pluginProps, root,
azkabanWebApp);
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e);
}
@@ -805,34 +498,30 @@ public class AzkabanWebServer extends AzkabanServer {
continue;
}
- TriggerPlugin plugin = (TriggerPlugin) obj;
+ final TriggerPlugin plugin = (TriggerPlugin) obj;
installedTriggerPlugins.put(pluginName, plugin);
}
// Velocity needs the jar resource paths to be set.
- String jarResourcePath = StringUtils.join(jarPaths, ", ");
+ final String jarResourcePath = StringUtils.join(jarPaths, ", ");
logger.info("Setting jar resource path " + jarResourcePath);
- VelocityEngine ve = azkabanWebApp.getVelocityEngine();
+ final VelocityEngine ve = azkabanWebApp.getVelocityEngine();
ve.addProperty("jar.resource.loader.path", jarResourcePath);
return installedTriggerPlugins;
}
- public Map<String, TriggerPlugin> getTriggerPlugins() {
- return triggerPlugins;
- }
-
- private static void loadViewerPlugins(Context root, String pluginPath,
- VelocityEngine ve) {
- File viewerPluginPath = new File(pluginPath);
+ private static void loadViewerPlugins(final Context root, final String pluginPath,
+ final VelocityEngine ve) {
+ final File viewerPluginPath = new File(pluginPath);
if (!viewerPluginPath.exists()) {
return;
}
- ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
- File[] pluginDirs = viewerPluginPath.listFiles();
- ArrayList<String> jarPaths = new ArrayList<String>();
- for (File pluginDir : pluginDirs) {
+ final ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
+ final File[] pluginDirs = viewerPluginPath.listFiles();
+ final ArrayList<String> jarPaths = new ArrayList<>();
+ for (final File pluginDir : pluginDirs) {
if (!pluginDir.exists()) {
logger.error("Error viewer plugin path " + pluginDir.getPath()
+ " doesn't exist.");
@@ -845,11 +534,11 @@ public class AzkabanWebServer extends AzkabanServer {
}
// Load the conf directory
- File propertiesDir = new File(pluginDir, "conf");
+ final File propertiesDir = new File(pluginDir, "conf");
Props pluginProps = null;
if (propertiesDir.exists() && propertiesDir.isDirectory()) {
- File propertiesFile = new File(propertiesDir, "plugin.properties");
- File propertiesOverrideFile =
+ final File propertiesFile = new File(propertiesDir, "plugin.properties");
+ final File propertiesOverrideFile =
new File(propertiesDir, "override.properties");
if (propertiesFile.exists()) {
@@ -869,16 +558,16 @@ public class AzkabanWebServer extends AzkabanServer {
continue;
}
- String pluginName = pluginProps.getString("viewer.name");
- String pluginWebPath = pluginProps.getString("viewer.path");
- String pluginJobTypes = pluginProps.getString("viewer.jobtypes", null);
- int pluginOrder = pluginProps.getInt("viewer.order", 0);
- boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
- List<String> extLibClasspath =
+ final String pluginName = pluginProps.getString("viewer.name");
+ final String pluginWebPath = pluginProps.getString("viewer.path");
+ final String pluginJobTypes = pluginProps.getString("viewer.jobtypes", null);
+ final int pluginOrder = pluginProps.getInt("viewer.order", 0);
+ final boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
+ final List<String> extLibClasspath =
pluginProps.getStringList("viewer.external.classpaths",
(List<String>) null);
- String pluginClass = pluginProps.getString("viewer.servlet.class");
+ final String pluginClass = pluginProps.getString("viewer.servlet.class");
if (pluginClass == null) {
logger.error("Viewer class is not set.");
} else {
@@ -886,42 +575,42 @@ public class AzkabanWebServer extends AzkabanServer {
}
URLClassLoader urlClassLoader = null;
- File libDir = new File(pluginDir, "lib");
+ final File libDir = new File(pluginDir, "lib");
if (libDir.exists() && libDir.isDirectory()) {
- File[] files = libDir.listFiles();
+ final File[] files = libDir.listFiles();
- ArrayList<URL> urls = new ArrayList<URL>();
+ final ArrayList<URL> urls = new ArrayList<>();
for (int i = 0; i < files.length; ++i) {
try {
- URL url = files[i].toURI().toURL();
+ final URL url = files[i].toURI().toURL();
urls.add(url);
- } catch (MalformedURLException e) {
+ } catch (final MalformedURLException e) {
logger.error(e);
}
}
// Load any external libraries.
if (extLibClasspath != null) {
- for (String extLib : extLibClasspath) {
- File extLibFile = new File(pluginDir, extLib);
+ for (final String extLib : extLibClasspath) {
+ final File extLibFile = new File(pluginDir, extLib);
if (extLibFile.exists()) {
if (extLibFile.isDirectory()) {
// extLibFile is a directory; load all the files in the
// directory.
- File[] extLibFiles = extLibFile.listFiles();
+ final File[] extLibFiles = extLibFile.listFiles();
for (int i = 0; i < extLibFiles.length; ++i) {
try {
- URL url = extLibFiles[i].toURI().toURL();
+ final URL url = extLibFiles[i].toURI().toURL();
urls.add(url);
- } catch (MalformedURLException e) {
+ } catch (final MalformedURLException e) {
logger.error(e);
}
}
} else { // extLibFile is a file
try {
- URL url = extLibFile.toURI().toURL();
+ final URL url = extLibFile.toURI().toURL();
urls.add(url);
- } catch (MalformedURLException e) {
+ } catch (final MalformedURLException e) {
logger.error(e);
}
}
@@ -944,19 +633,19 @@ public class AzkabanWebServer extends AzkabanServer {
Class<?> viewerClass = null;
try {
viewerClass = urlClassLoader.loadClass(pluginClass);
- } catch (ClassNotFoundException e) {
+ } catch (final ClassNotFoundException e) {
logger.error("Class " + pluginClass + " not found.");
continue;
}
- String source = FileIOUtils.getSourcePathFromClass(viewerClass);
+ final String source = FileIOUtils.getSourcePathFromClass(viewerClass);
logger.info("Source jar " + source);
jarPaths.add("jar:file:" + source);
Constructor<?> constructor = null;
try {
constructor = viewerClass.getConstructor(Props.class);
- } catch (NoSuchMethodException e) {
+ } catch (final NoSuchMethodException e) {
logger.error("Constructor not found in " + pluginClass);
continue;
}
@@ -964,7 +653,7 @@ public class AzkabanWebServer extends AzkabanServer {
Object obj = null;
try {
obj = constructor.newInstance(pluginProps);
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e);
logger.error(e.getCause());
}
@@ -974,7 +663,7 @@ public class AzkabanWebServer extends AzkabanServer {
continue;
}
- AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet) obj;
+ final AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet) obj;
root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
PluginRegistry.getRegistry().register(
new ViewerPlugin(pluginName, pluginWebPath, pluginOrder,
@@ -982,18 +671,16 @@ public class AzkabanWebServer extends AzkabanServer {
}
// Velocity needs the jar resource paths to be set.
- String jarResourcePath = StringUtils.join(jarPaths, ", ");
+ final String jarResourcePath = StringUtils.join(jarPaths, ", ");
logger.info("Setting jar resource path " + jarResourcePath);
ve.addProperty("jar.resource.loader.path", jarResourcePath);
}
/**
* Loads the Azkaban property file from the AZKABAN_HOME conf directory
- *
- * @return
*/
private static Props loadConfigurationFromAzkabanHome() {
- String azkabanHome = System.getenv("AZKABAN_HOME");
+ final String azkabanHome = System.getenv("AZKABAN_HOME");
if (azkabanHome == null) {
logger.error("AZKABAN_HOME not set. Will try default.");
@@ -1006,7 +693,7 @@ public class AzkabanWebServer extends AzkabanServer {
return null;
}
- File confPath = new File(azkabanHome, DEFAULT_CONF_PATH);
+ final File confPath = new File(azkabanHome, DEFAULT_CONF_PATH);
if (!confPath.exists() || !confPath.isDirectory() || !confPath.canRead()) {
logger
.error(azkabanHome + " does not contain a readable conf directory.");
@@ -1016,28 +703,319 @@ public class AzkabanWebServer extends AzkabanServer {
return loadAzkabanConfigurationFromDirectory(confPath);
}
+ private void startWebMetrics() throws Exception {
+
+ final MetricRegistry registry = MetricsManager.INSTANCE.getRegistry();
+
+ // The number of idle threads in Jetty thread pool
+ MetricsUtility
+ .addGauge("JETTY-NumIdleThreads", registry, this.queuedThreadPool::getIdleThreads);
+
+ // The number of threads in Jetty thread pool. The formula is:
+ // threads = idleThreads + busyThreads
+ MetricsUtility.addGauge("JETTY-NumTotalThreads", registry, this.queuedThreadPool::getThreads);
+
+ // The number of requests queued in the Jetty thread pool.
+ MetricsUtility.addGauge("JETTY-NumQueueSize", registry, this.queuedThreadPool::getQueueSize);
+
+ MetricsUtility
+ .addGauge("WEB-NumQueuedFlows", registry, this.executorManager::getQueuedFlowSize);
+ /**
+ * TODO: Currently {@link ExecutorManager#getRunningFlows()} includes both running and non-dispatched flows.
+ * Originally we would like to do a subtraction between getRunningFlows and {@link ExecutorManager#getQueuedFlowSize()},
+ * in order to have the correct runnable flows.
+ * However, both getRunningFlows and getQueuedFlowSize are not synchronized, such that we can not make
+ * a thread safe subtraction. We need to fix this in the future.
+ */
+ MetricsUtility
+ .addGauge("WEB-NumRunningFlows", registry,
+ () -> this.executorManager.getRunningFlows().size());
+
+ logger.info("starting reporting Web Server Metrics");
+ MetricsManager.INSTANCE.startReporting("AZ-WEB", this.props);
+ }
+
+ private UserManager loadUserManager(final Props props) {
+ final Class<?> userManagerClass = props.getClass(USER_MANAGER_CLASS_PARAM, null);
+ final UserManager manager;
+ if (userManagerClass != null && userManagerClass.getConstructors().length > 0) {
+ logger.info("Loading user manager class " + userManagerClass.getName());
+ try {
+ final Constructor<?> userManagerConstructor = userManagerClass.getConstructor(Props.class);
+ manager = (UserManager) userManagerConstructor.newInstance(props);
+ } catch (final Exception e) {
+ logger.error("Could not instantiate UserManager " + userManagerClass.getName());
+ throw new RuntimeException(e);
+ }
+ } else {
+ manager = new XmlUserManager(props);
+ }
+ return manager;
+ }
+
+ private ScheduleManager loadScheduleManager(final TriggerManager tm)
+ throws Exception {
+ logger.info("Loading trigger based scheduler");
+ final ScheduleLoader loader =
+ new TriggerBasedScheduleLoader(tm, ScheduleManager.triggerSource);
+ return new ScheduleManager(loader);
+ }
+
+ private void loadBuiltinCheckersAndActions() {
+ logger.info("Loading built-in checker and action types");
+ ExecuteFlowAction.setExecutorManager(this.executorManager);
+ ExecuteFlowAction.setProjectManager(this.projectManager);
+ ExecuteFlowAction.setTriggerManager(this.triggerManager);
+ KillExecutionAction.setExecutorManager(this.executorManager);
+ CreateTriggerAction.setTriggerManager(this.triggerManager);
+ ExecutionChecker.setExecutorManager(this.executorManager);
+
+ this.triggerManager.registerCheckerType(BasicTimeChecker.type, BasicTimeChecker.class);
+ this.triggerManager.registerCheckerType(SlaChecker.type, SlaChecker.class);
+ this.triggerManager.registerCheckerType(ExecutionChecker.type, ExecutionChecker.class);
+ this.triggerManager.registerActionType(ExecuteFlowAction.type, ExecuteFlowAction.class);
+ this.triggerManager.registerActionType(KillExecutionAction.type, KillExecutionAction.class);
+ this.triggerManager.registerActionType(SlaAlertAction.type, SlaAlertAction.class);
+ this.triggerManager.registerActionType(CreateTriggerAction.type, CreateTriggerAction.class);
+ }
+
+ private void loadPluginCheckersAndActions(final String pluginPath) {
+ logger.info("Loading plug-in checker and action types");
+ final File triggerPluginPath = new File(pluginPath);
+ if (!triggerPluginPath.exists()) {
+ logger.error("plugin path " + pluginPath + " doesn't exist!");
+ return;
+ }
+
+ final ClassLoader parentLoader = this.getClassLoader();
+ final File[] pluginDirs = triggerPluginPath.listFiles();
+ final ArrayList<String> jarPaths = new ArrayList<>();
+ for (final File pluginDir : pluginDirs) {
+ if (!pluginDir.exists()) {
+ logger.error("Error! Trigger plugin path " + pluginDir.getPath()
+ + " doesn't exist.");
+ continue;
+ }
+
+ if (!pluginDir.isDirectory()) {
+ logger.error("The plugin path " + pluginDir + " is not a directory.");
+ continue;
+ }
+
+ // Load the conf directory
+ final File propertiesDir = new File(pluginDir, "conf");
+ Props pluginProps = null;
+ if (propertiesDir.exists() && propertiesDir.isDirectory()) {
+ final File propertiesFile = new File(propertiesDir, "plugin.properties");
+ final File propertiesOverrideFile =
+ new File(propertiesDir, "override.properties");
+
+ if (propertiesFile.exists()) {
+ if (propertiesOverrideFile.exists()) {
+ pluginProps =
+ PropsUtils.loadProps(null, propertiesFile,
+ propertiesOverrideFile);
+ } else {
+ pluginProps = PropsUtils.loadProps(null, propertiesFile);
+ }
+ } else {
+ logger.error("Plugin conf file " + propertiesFile + " not found.");
+ continue;
+ }
+ } else {
+ logger.error("Plugin conf path " + propertiesDir + " not found.");
+ continue;
+ }
+
+ final List<String> extLibClasspath =
+ pluginProps.getStringList("trigger.external.classpaths",
+ (List<String>) null);
+
+ final String pluginClass = pluginProps.getString("trigger.class");
+ if (pluginClass == null) {
+ logger.error("Trigger class is not set.");
+ } else {
+ logger.error("Plugin class " + pluginClass);
+ }
+
+ URLClassLoader urlClassLoader = null;
+ final File libDir = new File(pluginDir, "lib");
+ if (libDir.exists() && libDir.isDirectory()) {
+ final File[] files = libDir.listFiles();
+
+ final ArrayList<URL> urls = new ArrayList<>();
+ for (int i = 0; i < files.length; ++i) {
+ try {
+ final URL url = files[i].toURI().toURL();
+ urls.add(url);
+ } catch (final MalformedURLException e) {
+ logger.error(e);
+ }
+ }
+ if (extLibClasspath != null) {
+ for (final String extLib : extLibClasspath) {
+ try {
+ final File file = new File(pluginDir, extLib);
+ final URL url = file.toURI().toURL();
+ urls.add(url);
+ } catch (final MalformedURLException e) {
+ logger.error(e);
+ }
+ }
+ }
+
+ urlClassLoader =
+ new URLClassLoader(urls.toArray(new URL[urls.size()]), parentLoader);
+ } else {
+ logger.error("Library path " + propertiesDir + " not found.");
+ continue;
+ }
+
+ Class<?> triggerClass = null;
+ try {
+ triggerClass = urlClassLoader.loadClass(pluginClass);
+ } catch (final ClassNotFoundException e) {
+ logger.error("Class " + pluginClass + " not found.");
+ continue;
+ }
+
+ final String source = FileIOUtils.getSourcePathFromClass(triggerClass);
+ logger.info("Source jar " + source);
+ jarPaths.add("jar:file:" + source);
+
+ try {
+ Utils.invokeStaticMethod(urlClassLoader, pluginClass,
+ "initiateCheckerTypes", pluginProps, app);
+ } catch (final Exception e) {
+ logger.error("Unable to initiate checker types for " + pluginClass);
+ continue;
+ }
+
+ try {
+ Utils.invokeStaticMethod(urlClassLoader, pluginClass,
+ "initiateActionTypes", pluginProps, app);
+ } catch (final Exception e) {
+ logger.error("Unable to initiate action types for " + pluginClass);
+ continue;
+ }
+
+ }
+ }
+
+ /**
+ * Returns the web session cache.
+ */
+ @Override
+ public SessionCache getSessionCache() {
+ return this.sessionCache;
+ }
+
+ /**
+ * Returns the velocity engine for pages to use.
+ */
+ @Override
+ public VelocityEngine getVelocityEngine() {
+ return this.velocityEngine;
+ }
+
+ @Override
+ public UserManager getUserManager() {
+ return this.userManager;
+ }
+
+ public ProjectManager getProjectManager() {
+ return this.projectManager;
+ }
+
+ public ExecutorManager getExecutorManager() {
+ return this.executorManager;
+ }
+
+ public ScheduleManager getScheduleManager() {
+ return this.scheduleManager;
+ }
+
+ public TriggerManager getTriggerManager() {
+ return this.triggerManager;
+ }
+
+ /**
+ * Creates and configures the velocity engine.
+ */
+ private VelocityEngine configureVelocityEngine(final boolean devMode) {
+ final VelocityEngine engine = new VelocityEngine();
+ engine.setProperty("resource.loader", "classpath, jar");
+ engine.setProperty("classpath.resource.loader.class",
+ ClasspathResourceLoader.class.getName());
+ engine.setProperty("classpath.resource.loader.cache", !devMode);
+ engine.setProperty("classpath.resource.loader.modificationCheckInterval",
+ 5L);
+ engine.setProperty("jar.resource.loader.class",
+ JarResourceLoader.class.getName());
+ engine.setProperty("jar.resource.loader.cache", !devMode);
+ engine.setProperty("resource.manager.logwhenfound", false);
+ engine.setProperty("input.encoding", "UTF-8");
+ engine.setProperty("output.encoding", "UTF-8");
+ engine.setProperty("directive.set.null.allowed", true);
+ engine.setProperty("resource.manager.logwhenfound", false);
+ engine.setProperty("velocimacro.permissions.allow.inline", true);
+ engine.setProperty("velocimacro.library.autoreload", devMode);
+ engine.setProperty("velocimacro.library",
+ "/azkaban/webapp/servlet/velocity/macros.vm");
+ engine.setProperty(
+ "velocimacro.permissions.allow.inline.to.replace.global", true);
+ engine.setProperty("velocimacro.arguments.strict", true);
+ engine.setProperty("runtime.log.invalid.references", devMode);
+ engine.setProperty("runtime.log.logsystem.class", Log4JLogChute.class);
+ engine.setProperty("runtime.log.logsystem.log4j.logger",
+ Logger.getLogger("org.apache.velocity.Logger"));
+ engine.setProperty("parser.pool.size", 3);
+ return engine;
+ }
+
+ public ClassLoader getClassLoader() {
+ return this.baseClassLoader;
+ }
+
+ /**
+ * Returns the global azkaban properties
+ */
+ @Override
+ public Props getServerProps() {
+ return this.props;
+ }
+
+ public Map<String, TriggerPlugin> getTriggerPlugins() {
+ return this.triggerPlugins;
+ }
+
+ private void setTriggerPlugins(final Map<String, TriggerPlugin> triggerPlugins) {
+ this.triggerPlugins = triggerPlugins;
+ }
+
private void configureMBeanServer() {
logger.info("Registering MBeans...");
- mbeanServer = ManagementFactory.getPlatformMBeanServer();
+ this.mbeanServer = ManagementFactory.getPlatformMBeanServer();
- registerMbean("jetty", new JmxJettyServer(server));
- registerMbean("triggerManager", new JmxTriggerManager(triggerManager));
- if (executorManager instanceof ExecutorManager) {
+ registerMbean("jetty", new JmxJettyServer(this.server));
+ registerMbean("triggerManager", new JmxTriggerManager(this.triggerManager));
+ if (this.executorManager instanceof ExecutorManager) {
registerMbean("executorManager", new JmxExecutorManager(
- (ExecutorManager) executorManager));
+ (ExecutorManager) this.executorManager));
}
// Register Log4J loggers as JMX beans so the log level can be
// updated via JConsole or Java VisualVM
- HierarchyDynamicMBean log4jMBean = new HierarchyDynamicMBean();
+ final HierarchyDynamicMBean log4jMBean = new HierarchyDynamicMBean();
registerMbean("log4jmxbean", log4jMBean);
- ObjectName accessLogLoggerObjName =
+ final ObjectName accessLogLoggerObjName =
log4jMBean.addLoggerMBean(AZKABAN_ACCESS_LOGGER_NAME);
if (accessLogLoggerObjName == null) {
System.out
- .println("************* loginLoggerObjName is null, make sure there is a logger with name "
- + AZKABAN_ACCESS_LOGGER_NAME);
+ .println(
+ "************* loginLoggerObjName is null, make sure there is a logger with name "
+ + AZKABAN_ACCESS_LOGGER_NAME);
} else {
System.out.println("******** loginLoggerObjName: "
+ accessLogLoggerObjName.getCanonicalName());
@@ -1046,61 +1024,61 @@ public class AzkabanWebServer extends AzkabanServer {
public void close() {
try {
- for (ObjectName name : registeredMBeans) {
- mbeanServer.unregisterMBean(name);
+ for (final ObjectName name : this.registeredMBeans) {
+ this.mbeanServer.unregisterMBean(name);
logger.info("Jmx MBean " + name.getCanonicalName() + " unregistered.");
}
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error("Failed to cleanup MBeanServer", e);
}
- scheduleManager.shutdown();
- executorManager.shutdown();
+ this.scheduleManager.shutdown();
+ this.executorManager.shutdown();
try {
- server.stop();
- } catch (Exception e) {
+ this.server.stop();
+ } catch (final Exception e) {
// Catch all while closing server
logger.error(e);
}
- server.destroy();
+ this.server.destroy();
}
- private void registerMbean(String name, Object mbean) {
- Class<?> mbeanClass = mbean.getClass();
- ObjectName mbeanName;
+ private void registerMbean(final String name, final Object mbean) {
+ final Class<?> mbeanClass = mbean.getClass();
+ final ObjectName mbeanName;
try {
mbeanName = new ObjectName(mbeanClass.getName() + ":name=" + name);
- mbeanServer.registerMBean(mbean, mbeanName);
+ this.mbeanServer.registerMBean(mbean, mbeanName);
logger.info("Bean " + mbeanClass.getCanonicalName() + " registered.");
- registeredMBeans.add(mbeanName);
- } catch (Exception e) {
+ this.registeredMBeans.add(mbeanName);
+ } catch (final Exception e) {
logger.error("Error registering mbean " + mbeanClass.getCanonicalName(),
e);
}
}
public List<ObjectName> getMbeanNames() {
- return registeredMBeans;
+ return this.registeredMBeans;
}
- public MBeanInfo getMBeanInfo(ObjectName name) {
+ public MBeanInfo getMBeanInfo(final ObjectName name) {
try {
- return mbeanServer.getMBeanInfo(name);
- } catch (Exception e) {
+ return this.mbeanServer.getMBeanInfo(name);
+ } catch (final Exception e) {
logger.error(e);
return null;
}
}
- public Object getMBeanAttribute(ObjectName name, String attribute) {
+ public Object getMBeanAttribute(final ObjectName name, final String attribute) {
try {
- return mbeanServer.getAttribute(name, attribute);
- } catch (Exception e) {
+ return this.mbeanServer.getAttribute(name, attribute);
+ } catch (final Exception e) {
logger.error(e);
return null;
}
}
- private void setThreadPool(QueuedThreadPool queuedThreadPool) {
+ private void setThreadPool(final QueuedThreadPool queuedThreadPool) {
this.queuedThreadPool = queuedThreadPool;
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
index 7a244a9..de4effa 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
@@ -22,11 +22,12 @@ import com.google.inject.Scopes;
import org.mortbay.jetty.Server;
/**
- * This Guice module is currently a one place container for all bindings in the current module. This is intended to
- * help during the migration process to Guice. Once this class starts growing we can move towards more modular
- * structuring of Guice components.
+ * This Guice module is currently a one place container for all bindings in the current module. This
+ * is intended to help during the migration process to Guice. Once this class starts growing we can
+ * move towards more modular structuring of Guice components.
*/
public class AzkabanWebServerModule extends AbstractModule {
+
@Override
protected void configure() {
bind(Server.class).toProvider(WebServerProvider.class);
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
index bcb0758..b4a26d1 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
@@ -31,46 +31,46 @@ public class PluginRegistry {
public Map<String, TreeSet<ViewerPlugin>> jobTypeViewerPlugins;
private PluginRegistry() {
- viewerPlugins = new TreeSet<ViewerPlugin>(ViewerPlugin.COMPARATOR);
- jobTypeViewerPlugins = new HashMap<String, TreeSet<ViewerPlugin>>();
+ this.viewerPlugins = new TreeSet<>(ViewerPlugin.COMPARATOR);
+ this.jobTypeViewerPlugins = new HashMap<>();
}
- public void register(ViewerPlugin plugin) {
- viewerPlugins.add(plugin);
- List<String> jobTypes = plugin.getJobTypes();
+ public static PluginRegistry getRegistry() {
+ if (registry == null) {
+ registry = new PluginRegistry();
+ }
+ return registry;
+ }
+
+ public void register(final ViewerPlugin plugin) {
+ this.viewerPlugins.add(plugin);
+ final List<String> jobTypes = plugin.getJobTypes();
if (jobTypes == null) {
return;
}
- for (String jobType : jobTypes) {
+ for (final String jobType : jobTypes) {
TreeSet<ViewerPlugin> plugins = null;
- if (!jobTypeViewerPlugins.containsKey(jobType)) {
- plugins = new TreeSet<ViewerPlugin>(ViewerPlugin.COMPARATOR);
+ if (!this.jobTypeViewerPlugins.containsKey(jobType)) {
+ plugins = new TreeSet<>(ViewerPlugin.COMPARATOR);
plugins.add(plugin);
- jobTypeViewerPlugins.put(jobType, plugins);
+ this.jobTypeViewerPlugins.put(jobType, plugins);
} else {
- plugins = jobTypeViewerPlugins.get(jobType);
+ plugins = this.jobTypeViewerPlugins.get(jobType);
plugins.add(plugin);
}
}
}
public List<ViewerPlugin> getViewerPlugins() {
- return new ArrayList<ViewerPlugin>(viewerPlugins);
+ return new ArrayList<>(this.viewerPlugins);
}
- public List<ViewerPlugin> getViewerPluginsForJobType(String jobType) {
- TreeSet<ViewerPlugin> plugins = jobTypeViewerPlugins.get(jobType);
+ public List<ViewerPlugin> getViewerPluginsForJobType(final String jobType) {
+ final TreeSet<ViewerPlugin> plugins = this.jobTypeViewerPlugins.get(jobType);
if (plugins == null) {
return null;
}
- return new ArrayList<ViewerPlugin>(plugins);
- }
-
- public static PluginRegistry getRegistry() {
- if (registry == null) {
- registry = new PluginRegistry();
- }
- return registry;
+ return new ArrayList<>(plugins);
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
index 6d84c43..66b5f3d 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
@@ -21,25 +21,25 @@ import java.util.Comparator;
import java.util.List;
public class ViewerPlugin {
- private final String pluginName;
- private final String pluginPath;
- private final int order;
- private boolean hidden;
- private final List<String> jobTypes;
public static final Comparator<ViewerPlugin> COMPARATOR =
new Comparator<ViewerPlugin>() {
@Override
- public int compare(ViewerPlugin o1, ViewerPlugin o2) {
+ public int compare(final ViewerPlugin o1, final ViewerPlugin o2) {
if (o1.getOrder() != o2.getOrder()) {
return o1.getOrder() - o2.getOrder();
}
return o1.getPluginName().compareTo(o2.getPluginName());
}
};
+ private final String pluginName;
+ private final String pluginPath;
+ private final int order;
+ private final List<String> jobTypes;
+ private boolean hidden;
- public ViewerPlugin(String pluginName, String pluginPath, int order,
- boolean hidden, String jobTypes) {
+ public ViewerPlugin(final String pluginName, final String pluginPath, final int order,
+ final boolean hidden, final String jobTypes) {
this.pluginName = pluginName;
this.pluginPath = pluginPath;
this.order = order;
@@ -48,31 +48,31 @@ public class ViewerPlugin {
}
public String getPluginName() {
- return pluginName;
+ return this.pluginName;
}
public String getPluginPath() {
- return pluginPath;
+ return this.pluginPath;
}
public int getOrder() {
- return order;
+ return this.order;
}
public boolean isHidden() {
- return hidden;
+ return this.hidden;
}
- public void setHidden(boolean hidden) {
+ public void setHidden(final boolean hidden) {
this.hidden = hidden;
}
- protected List<String> parseJobTypes(String jobTypesStr) {
+ protected List<String> parseJobTypes(final String jobTypesStr) {
if (jobTypesStr == null) {
return null;
}
- String[] parts = jobTypesStr.split(",");
- List<String> jobTypes = new ArrayList<String>();
+ final String[] parts = jobTypesStr.split(",");
+ final List<String> jobTypes = new ArrayList<>();
for (int i = 0; i < parts.length; ++i) {
jobTypes.add(parts[i].trim());
}
@@ -80,6 +80,6 @@ public class ViewerPlugin {
}
public List<String> getJobTypes() {
- return jobTypes;
+ return this.jobTypes;
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java b/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
index ea4dabd..9f72ee0 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
@@ -16,23 +16,23 @@
package azkaban.webapp;
-import java.io.File;
-import java.util.List;
-import java.util.HashMap;
-import java.util.Map;
-
import azkaban.executor.ExecutableFlow;
import azkaban.executor.ExecutorManagerAdapter;
import azkaban.executor.ExecutorManagerException;
import azkaban.executor.Status;
import azkaban.scheduler.Schedule;
import azkaban.scheduler.ScheduleManager;
-import azkaban.scheduler.ScheduleStatisticManager;
import azkaban.scheduler.ScheduleManagerException;
+import azkaban.scheduler.ScheduleStatisticManager;
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class SchedulerStatistics {
+
public static Map<String, Object> getStatistics(
- int scheduleId, AzkabanWebServer server)
+ final int scheduleId, final AzkabanWebServer server)
throws ScheduleManagerException {
if (ScheduleStatisticManager.getCacheDirectory() == null) {
ScheduleStatisticManager.setCacheFolder(
@@ -50,15 +50,15 @@ public class SchedulerStatistics {
}
private static Map<String, Object> calculateStats(
- int scheduleId, AzkabanWebServer server)
+ final int scheduleId, final AzkabanWebServer server)
throws ScheduleManagerException {
- Map<String, Object> data = new HashMap<String, Object>();
- ExecutorManagerAdapter executorManager = server.getExecutorManager();
- ScheduleManager scheduleManager = server.getScheduleManager();
- Schedule schedule = scheduleManager.getSchedule(scheduleId);
+ final Map<String, Object> data = new HashMap<>();
+ final ExecutorManagerAdapter executorManager = server.getExecutorManager();
+ final ScheduleManager scheduleManager = server.getScheduleManager();
+ final Schedule schedule = scheduleManager.getSchedule(scheduleId);
try {
- List<ExecutableFlow> executables = executorManager.getExecutableFlows(
+ final List<ExecutableFlow> executables = executorManager.getExecutableFlows(
schedule.getProjectId(), schedule.getFlowName(), 0,
ScheduleStatisticManager.STAT_NUMBERS, Status.SUCCEEDED);
@@ -70,8 +70,8 @@ public class SchedulerStatistics {
min = 0;
max = 0;
} else {
- for (ExecutableFlow flow : executables) {
- long time = flow.getEndTime() - flow.getStartTime();
+ for (final ExecutableFlow flow : executables) {
+ final long time = flow.getEndTime() - flow.getStartTime();
average += time;
if (time < min) {
min = time;
@@ -86,7 +86,7 @@ public class SchedulerStatistics {
data.put("average", average);
data.put("min", min);
data.put("max", max);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
e.printStackTrace();
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 69f4edd..381cf77 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -16,55 +16,51 @@
package azkaban.webapp.servlet;
+import azkaban.server.AzkabanServer;
+import azkaban.server.HttpRequestUtils;
+import azkaban.server.session.Session;
+import azkaban.utils.JSONUtils;
+import azkaban.utils.Props;
+import azkaban.utils.WebUtils;
+import azkaban.webapp.AzkabanWebServer;
+import azkaban.webapp.plugin.PluginRegistry;
+import azkaban.webapp.plugin.TriggerPlugin;
+import azkaban.webapp.plugin.ViewerPlugin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.joda.time.DateTime;
-import azkaban.server.AzkabanServer;
-import azkaban.server.HttpRequestUtils;
-import azkaban.server.session.Session;
-import azkaban.utils.Props;
-import azkaban.utils.JSONUtils;
-import azkaban.utils.WebUtils;
-import azkaban.webapp.AzkabanWebServer;
-import azkaban.webapp.plugin.PluginRegistry;
-import azkaban.webapp.plugin.ViewerPlugin;
-import azkaban.webapp.plugin.TriggerPlugin;
-
/**
* Base Servlet for pages
*/
public abstract class AbstractAzkabanServlet extends HttpServlet {
- private static final String AZKABAN_SUCCESS_MESSAGE =
- "azkaban.success.message";
- private static final String AZKABAN_WARN_MESSAGE =
- "azkaban.warn.message";
- private static final String AZKABAN_FAILURE_MESSAGE =
- "azkaban.failure.message";
- private static final long serialVersionUID = -1;
public static final String DEFAULT_LOG_URL_PREFIX =
"predefined_log_url_prefix";
public static final String LOG_URL_PREFIX = "log_url_prefix";
public static final String HTML_TYPE = "text/html";
public static final String XML_MIME_TYPE = "application/xhtml+xml";
public static final String JSON_MIME_TYPE = "application/json";
-
- public static final String jarVersion = AbstractAzkabanServlet.class.getPackage().getImplementationVersion();
+ public static final String jarVersion = AbstractAzkabanServlet.class.getPackage()
+ .getImplementationVersion();
protected static final WebUtils utils = new WebUtils();
-
+ private static final String AZKABAN_SUCCESS_MESSAGE =
+ "azkaban.success.message";
+ private static final String AZKABAN_WARN_MESSAGE =
+ "azkaban.warn.message";
+ private static final String AZKABAN_FAILURE_MESSAGE =
+ "azkaban.failure.message";
+ private static final long serialVersionUID = -1;
private AzkabanServer application;
private String name;
private String label;
@@ -74,135 +70,139 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
private List<TriggerPlugin> triggerPlugins;
/**
+ * Retrieve the Azkaban application
+ */
+ public static AzkabanWebServer getApp(final ServletConfig config) {
+ final AzkabanWebServer app =
+ (AzkabanWebServer) config.getServletContext().getAttribute(
+ AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
+
+ if (app == null) {
+ throw new IllegalStateException(
+ "No batch application is defined in the servlet context!");
+ } else {
+ return app;
+ }
+ }
+
+ public static String createJsonResponse(final String status, final String message,
+ final String action, final Map<String, Object> params) {
+ final HashMap<String, Object> response = new HashMap<>();
+ response.put("status", status);
+ if (message != null) {
+ response.put("message", message);
+ }
+ if (action != null) {
+ response.put("action", action);
+ }
+ if (params != null) {
+ response.putAll(params);
+ }
+
+ return JSONUtils.toJSON(response);
+ }
+
+ /**
* To retrieve the application for the servlet
- *
- * @return
*/
public AzkabanServer getApplication() {
- return application;
+ return this.application;
}
@Override
- public void init(ServletConfig config) throws ServletException {
- application =
+ public void init(final ServletConfig config) throws ServletException {
+ this.application =
(AzkabanServer) config.getServletContext().getAttribute(
AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
- if (application == null) {
+ if (this.application == null) {
throw new IllegalStateException(
"No batch application is defined in the servlet context!");
}
- Props props = application.getServerProps();
- name = props.getString("azkaban.name", "");
- label = props.getString("azkaban.label", "");
- color = props.getString("azkaban.color", "#FF0000");
+ final Props props = this.application.getServerProps();
+ this.name = props.getString("azkaban.name", "");
+ this.label = props.getString("azkaban.label", "");
+ this.color = props.getString("azkaban.color", "#FF0000");
- if (application instanceof AzkabanWebServer) {
- AzkabanWebServer server = (AzkabanWebServer) application;
- viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();
- triggerPlugins =
- new ArrayList<TriggerPlugin>(server.getTriggerPlugins().values());
+ if (this.application instanceof AzkabanWebServer) {
+ final AzkabanWebServer server = (AzkabanWebServer) this.application;
+ this.viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();
+ this.triggerPlugins =
+ new ArrayList<>(server.getTriggerPlugins().values());
}
}
/**
* Checks for the existance of the parameter in the request
- *
- * @param request
- * @param param
- * @return
*/
- public boolean hasParam(HttpServletRequest request, String param) {
+ public boolean hasParam(final HttpServletRequest request, final String param) {
return HttpRequestUtils.hasParam(request, param);
}
/**
* Retrieves the param from the http servlet request. Will throw an exception
* if not found
- *
- * @param request
- * @param name
- * @return
- * @throws ServletException
*/
- public String getParam(HttpServletRequest request, String name)
+ public String getParam(final HttpServletRequest request, final String name)
throws ServletException {
return HttpRequestUtils.getParam(request, name);
}
/**
* Retrieves the param from the http servlet request.
- *
- * @param request
- * @param name
- * @param default
- *
- * @return
*/
- public String getParam(HttpServletRequest request, String name,
- String defaultVal) {
+ public String getParam(final HttpServletRequest request, final String name,
+ final String defaultVal) {
return HttpRequestUtils.getParam(request, name, defaultVal);
}
/**
* Returns the param and parses it into an int. Will throw an exception if not
* found, or a parse error if the type is incorrect.
- *
- * @param request
- * @param name
- * @return
- * @throws ServletException
*/
- public int getIntParam(HttpServletRequest request, String name)
+ public int getIntParam(final HttpServletRequest request, final String name)
throws ServletException {
return HttpRequestUtils.getIntParam(request, name);
}
- public int getIntParam(HttpServletRequest request, String name, int defaultVal) {
+ public int getIntParam(final HttpServletRequest request, final String name,
+ final int defaultVal) {
return HttpRequestUtils.getIntParam(request, name, defaultVal);
}
- public long getLongParam(HttpServletRequest request, String name)
+ public long getLongParam(final HttpServletRequest request, final String name)
throws ServletException {
return HttpRequestUtils.getLongParam(request, name);
}
- public long getLongParam(HttpServletRequest request, String name,
- long defaultVal) {
+ public long getLongParam(final HttpServletRequest request, final String name,
+ final long defaultVal) {
return HttpRequestUtils.getLongParam(request, name, defaultVal);
}
- public Map<String, String> getParamGroup(HttpServletRequest request,
- String groupName) throws ServletException {
+ public Map<String, String> getParamGroup(final HttpServletRequest request,
+ final String groupName) throws ServletException {
return HttpRequestUtils.getParamGroup(request, groupName);
}
/**
* Returns the session value of the request.
- *
- * @param request
- * @param key
- * @param value
*/
- protected void setSessionValue(HttpServletRequest request, String key,
- Object value) {
+ protected void setSessionValue(final HttpServletRequest request, final String key,
+ final Object value) {
request.getSession(true).setAttribute(key, value);
}
/**
* Adds a session value to the request
- *
- * @param request
- * @param key
- * @param value
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected void addSessionValue(HttpServletRequest request, String key,
- Object value) {
+ protected void addSessionValue(final HttpServletRequest request, final String key,
+ final Object value) {
List l = (List) request.getSession(true).getAttribute(key);
- if (l == null)
+ if (l == null) {
l = new ArrayList();
+ }
l.add(value);
request.getSession(true).setAttribute(key, l);
}
@@ -210,13 +210,10 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Sets an error message in azkaban.failure.message in the cookie. This will
* be used by the web client javascript to somehow display the message
- *
- * @param response
- * @param errorMsg
*/
- protected void setErrorMessageInCookie(HttpServletResponse response,
- String errorMsg) {
- Cookie cookie = new Cookie(AZKABAN_FAILURE_MESSAGE, errorMsg);
+ protected void setErrorMessageInCookie(final HttpServletResponse response,
+ final String errorMsg) {
+ final Cookie cookie = new Cookie(AZKABAN_FAILURE_MESSAGE, errorMsg);
cookie.setPath("/");
response.addCookie(cookie);
}
@@ -224,13 +221,10 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Sets a warning message in azkaban.warn.message in the cookie. This will
* be used by the web client javascript to somehow display the message
- *
- * @param response
- * @param warnMsg
*/
- protected void setWarnMessageInCookie(HttpServletResponse response,
- String errorMsg) {
- Cookie cookie = new Cookie(AZKABAN_WARN_MESSAGE, errorMsg);
+ protected void setWarnMessageInCookie(final HttpServletResponse response,
+ final String errorMsg) {
+ final Cookie cookie = new Cookie(AZKABAN_WARN_MESSAGE, errorMsg);
cookie.setPath("/");
response.addCookie(cookie);
}
@@ -238,25 +232,19 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Sets a message in azkaban.success.message in the cookie. This will be used
* by the web client javascript to somehow display the message
- *
- * @param response
- * @param errorMsg
*/
- protected void setSuccessMessageInCookie(HttpServletResponse response,
- String message) {
- Cookie cookie = new Cookie(AZKABAN_SUCCESS_MESSAGE, message);
+ protected void setSuccessMessageInCookie(final HttpServletResponse response,
+ final String message) {
+ final Cookie cookie = new Cookie(AZKABAN_SUCCESS_MESSAGE, message);
cookie.setPath("/");
response.addCookie(cookie);
}
/**
* Retrieves a success message from a cookie. azkaban.success.message
- *
- * @param request
- * @return
*/
- protected String getSuccessMessageFromCookie(HttpServletRequest request) {
- Cookie cookie = getCookieByName(request, AZKABAN_SUCCESS_MESSAGE);
+ protected String getSuccessMessageFromCookie(final HttpServletRequest request) {
+ final Cookie cookie = getCookieByName(request, AZKABAN_SUCCESS_MESSAGE);
if (cookie == null) {
return null;
@@ -266,12 +254,9 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Retrieves a warn message from a cookie. azkaban.warn.message
- *
- * @param request
- * @return
*/
- protected String getWarnMessageFromCookie(HttpServletRequest request) {
- Cookie cookie = getCookieByName(request, AZKABAN_WARN_MESSAGE);
+ protected String getWarnMessageFromCookie(final HttpServletRequest request) {
+ final Cookie cookie = getCookieByName(request, AZKABAN_WARN_MESSAGE);
if (cookie == null) {
return null;
@@ -281,12 +266,9 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Retrieves a success message from a cookie. azkaban.failure.message
- *
- * @param request
- * @return
*/
- protected String getErrorMessageFromCookie(HttpServletRequest request) {
- Cookie cookie = getCookieByName(request, AZKABAN_FAILURE_MESSAGE);
+ protected String getErrorMessageFromCookie(final HttpServletRequest request) {
+ final Cookie cookie = getCookieByName(request, AZKABAN_FAILURE_MESSAGE);
if (cookie == null) {
return null;
}
@@ -297,14 +279,11 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Retrieves a cookie by name. Potential issue in performance if a lot of
* cookie variables are used.
- *
- * @param request
- * @return
*/
- protected Cookie getCookieByName(HttpServletRequest request, String name) {
- Cookie[] cookies = request.getCookies();
+ protected Cookie getCookieByName(final HttpServletRequest request, final String name) {
+ final Cookie[] cookies = request.getCookies();
if (cookies != null) {
- for (Cookie cookie : cookies) {
+ for (final Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
@@ -316,19 +295,14 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Creates a new velocity page to use. With session.
- *
- * @param req
- * @param resp
- * @param template
- * @return
*/
- protected Page newPage(HttpServletRequest req, HttpServletResponse resp,
- Session session, String template) {
- Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
+ protected Page newPage(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session, final String template) {
+ final Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
page.add("version", jarVersion);
- page.add("azkaban_name", name);
- page.add("azkaban_label", label);
- page.add("azkaban_color", color);
+ page.add("azkaban_name", this.name);
+ page.add("azkaban_label", this.label);
+ page.add("azkaban_color", this.color);
page.add("utils", utils);
page.add("timezone", TimeZone.getDefault().getID());
page.add("currentTime", (new DateTime()).getMillis());
@@ -337,29 +311,29 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
}
page.add("context", req.getContextPath());
- String errorMsg = getErrorMessageFromCookie(req);
+ final String errorMsg = getErrorMessageFromCookie(req);
page.add("error_message", errorMsg == null || errorMsg.isEmpty() ? "null"
: errorMsg);
setErrorMessageInCookie(resp, null);
- String warnMsg = getWarnMessageFromCookie(req);
+ final String warnMsg = getWarnMessageFromCookie(req);
page.add("warn_message", warnMsg == null || warnMsg.isEmpty() ? "null"
: warnMsg);
setWarnMessageInCookie(resp, null);
- String successMsg = getSuccessMessageFromCookie(req);
+ final String successMsg = getSuccessMessageFromCookie(req);
page.add("success_message",
successMsg == null || successMsg.isEmpty() ? "null" : successMsg);
setSuccessMessageInCookie(resp, null);
// @TODO, allow more than one type of viewer. For time sake, I only install
// the first one
- if (viewerPlugins != null && !viewerPlugins.isEmpty()) {
- page.add("viewers", viewerPlugins);
+ if (this.viewerPlugins != null && !this.viewerPlugins.isEmpty()) {
+ page.add("viewers", this.viewerPlugins);
}
- if (triggerPlugins != null && !triggerPlugins.isEmpty()) {
- page.add("triggerPlugins", triggerPlugins);
+ if (this.triggerPlugins != null && !this.triggerPlugins.isEmpty()) {
+ page.add("triggerPlugins", this.triggerPlugins);
}
return page;
@@ -367,34 +341,29 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Creates a new velocity page to use.
- *
- * @param req
- * @param resp
- * @param template
- * @return
*/
- protected Page newPage(HttpServletRequest req, HttpServletResponse resp,
- String template) {
- Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
+ protected Page newPage(final HttpServletRequest req, final HttpServletResponse resp,
+ final String template) {
+ final Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
page.add("version", jarVersion);
- page.add("azkaban_name", name);
- page.add("azkaban_label", label);
- page.add("azkaban_color", color);
+ page.add("azkaban_name", this.name);
+ page.add("azkaban_label", this.label);
+ page.add("azkaban_color", this.color);
page.add("timezone", TimeZone.getDefault().getID());
page.add("currentTime", (new DateTime()).getMillis());
page.add("context", req.getContextPath());
// @TODO, allow more than one type of viewer. For time sake, I only install
// the first one
- if (viewerPlugins != null && !viewerPlugins.isEmpty()) {
- page.add("viewers", viewerPlugins);
- ViewerPlugin plugin = viewerPlugins.get(0);
+ if (this.viewerPlugins != null && !this.viewerPlugins.isEmpty()) {
+ page.add("viewers", this.viewerPlugins);
+ final ViewerPlugin plugin = this.viewerPlugins.get(0);
page.add("viewerName", plugin.getPluginName());
page.add("viewerPath", plugin.getPluginPath());
}
- if (triggerPlugins != null && !triggerPlugins.isEmpty()) {
- page.add("triggers", triggerPlugins);
+ if (this.triggerPlugins != null && !this.triggerPlugins.isEmpty()) {
+ page.add("triggers", this.triggerPlugins);
}
return page;
@@ -402,55 +371,15 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
/**
* Writes json out to the stream.
- *
- * @param resp
- * @param obj
- * @throws IOException
*/
- protected void writeJSON(HttpServletResponse resp, Object obj)
+ protected void writeJSON(final HttpServletResponse resp, final Object obj)
throws IOException {
writeJSON(resp, obj, false);
}
- protected void writeJSON(HttpServletResponse resp, Object obj, boolean pretty)
+ protected void writeJSON(final HttpServletResponse resp, final Object obj, final boolean pretty)
throws IOException {
resp.setContentType(JSON_MIME_TYPE);
JSONUtils.toJSON(obj, resp.getOutputStream(), true);
}
-
- /**
- * Retrieve the Azkaban application
- *
- * @param config
- * @return
- */
- public static AzkabanWebServer getApp(ServletConfig config) {
- AzkabanWebServer app =
- (AzkabanWebServer) config.getServletContext().getAttribute(
- AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
-
- if (app == null) {
- throw new IllegalStateException(
- "No batch application is defined in the servlet context!");
- } else {
- return app;
- }
- }
-
- public static String createJsonResponse(String status, String message,
- String action, Map<String, Object> params) {
- HashMap<String, Object> response = new HashMap<String, Object>();
- response.put("status", status);
- if (message != null) {
- response.put("message", message);
- }
- if (action != null) {
- response.put("action", action);
- }
- if (params != null) {
- response.putAll(params);
- }
-
- return JSONUtils.toJSON(response);
- }
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
index 33462ef..4372ed6 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
@@ -16,15 +16,15 @@
package azkaban.webapp.servlet;
+import azkaban.webapp.AzkabanWebServer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
-import azkaban.webapp.AzkabanWebServer;
-
/**
* A ServletContextListener that loads the batch application
*/
public class AzkabanServletContextListener implements ServletContextListener {
+
public static final String AZKABAN_SERVLET_CONTEXT_KEY = "azkaban_app";
private AzkabanWebServer app;
@@ -33,7 +33,7 @@ public class AzkabanServletContextListener implements ServletContextListener {
* Delete the app
*/
@Override
- public void contextDestroyed(ServletContextEvent event) {
+ public void contextDestroyed(final ServletContextEvent event) {
this.app = null;
}
@@ -41,10 +41,10 @@ public class AzkabanServletContextListener implements ServletContextListener {
* Load the app for use in non jetty containers.
*/
@Override
- public void contextInitialized(ServletContextEvent event) {
+ public void contextInitialized(final ServletContextEvent event) {
try {
this.app = new AzkabanWebServer();
- } catch (Exception e) {
+ } catch (final Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
index 30b2c4f..6479c8d 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -45,26 +45,24 @@ import azkaban.utils.FlowUtils;
import azkaban.utils.Pair;
import azkaban.utils.Props;
import azkaban.webapp.AzkabanWebServer;
+import azkaban.webapp.WebMetrics;
import azkaban.webapp.plugin.PluginRegistry;
import azkaban.webapp.plugin.ViewerPlugin;
-import azkaban.webapp.WebMetrics;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;
public class ExecutorServlet extends LoginAbstractAzkabanServlet {
+
private static final Logger LOGGER =
Logger.getLogger(ExecutorServlet.class.getName());
private static final long serialVersionUID = 1L;
@@ -75,19 +73,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
private UserManager userManager;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
- userManager = server.getUserManager();
- projectManager = server.getProjectManager();
- executorManager = server.getExecutorManager();
- scheduleManager = server.getScheduleManager();
- velocityHelper = new ExecutorVelocityHelper();
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ this.userManager = server.getUserManager();
+ this.projectManager = server.getProjectManager();
+ this.executorManager = server.getExecutorManager();
+ this.scheduleManager = server.getScheduleManager();
+ this.velocityHelper = new ExecutorVelocityHelper();
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
} else if (hasParam(req, "execid")) {
@@ -101,19 +99,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleAJAXAction(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleAJAXAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- HashMap<String, Object> ret = new HashMap<String, Object>();
- String ajaxName = getParam(req, "ajax");
+ final HashMap<String, Object> ret = new HashMap<>();
+ final String ajaxName = getParam(req, "ajax");
if (hasParam(req, "execid")) {
- int execid = getIntParam(req, "execid");
+ final int execid = getIntParam(req, "execid");
ExecutableFlow exFlow = null;
try {
- exFlow = executorManager.getExecutableFlow(execid);
- } catch (ExecutorManagerException e) {
+ exFlow = this.executorManager.getExecutableFlow(execid);
+ } catch (final ExecutorManagerException e) {
ret.put("error",
"Error fetching execution '" + execid + "': " + e.getMessage());
}
@@ -145,8 +143,8 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
}
} else if (ajaxName.equals("fetchscheduledflowgraph")) {
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
ajaxFetchScheduledFlowGraph(projectName, flowName, ret, session.getUser());
} else if (ajaxName.equals("reloadExecutors")) {
ajaxReloadExecutors(req, resp, ret, session.getUser());
@@ -155,17 +153,17 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
} else if (ajaxName.equals("disableQueueProcessor")) {
ajaxUpdateQueueProcessor(req, resp, ret, session.getUser(), false);
} else if (ajaxName.equals("getRunning")) {
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
ajaxGetFlowRunning(req, resp, ret, session.getUser(), projectName,
flowName);
} else if (ajaxName.equals("flowInfo")) {
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
ajaxFetchFlowInfo(req, resp, ret, session.getUser(), projectName,
flowName);
} else {
- String projectName = getParam(req, "project");
+ final String projectName = getParam(req, "project");
ret.put("project", projectName);
if (ajaxName.equals("executeFlow")) {
@@ -183,50 +181,51 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
* disables queueProcessor if @param status is false.
* </pre>
*/
- private void ajaxUpdateQueueProcessor(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> returnMap, User user,
- boolean enableQueue) {
+ private void ajaxUpdateQueueProcessor(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> returnMap, final User user,
+ final boolean enableQueue) {
boolean wasSuccess = false;
- if (HttpRequestUtils.hasPermission(userManager, user, Type.ADMIN)) {
+ if (HttpRequestUtils.hasPermission(this.userManager, user, Type.ADMIN)) {
try {
if (enableQueue) {
- executorManager.enableQueueProcessorThread();
+ this.executorManager.enableQueueProcessorThread();
} else {
- executorManager.disableQueueProcessorThread();
+ this.executorManager.disableQueueProcessorThread();
}
returnMap.put(ConnectorParams.STATUS_PARAM,
- ConnectorParams.RESPONSE_SUCCESS);
+ ConnectorParams.RESPONSE_SUCCESS);
wasSuccess = true;
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
returnMap.put(ConnectorParams.RESPONSE_ERROR, e.getMessage());
}
} else {
returnMap.put(ConnectorParams.RESPONSE_ERROR,
- "Only Admins are allowed to update queue processor");
+ "Only Admins are allowed to update queue processor");
}
if (!wasSuccess) {
returnMap.put(ConnectorParams.STATUS_PARAM,
- ConnectorParams.RESPONSE_ERROR);
+ ConnectorParams.RESPONSE_ERROR);
}
}
- private void ajaxFetchScheduledFlowGraph(String projectName, String flowName,
- HashMap<String, Object> ret, User user) throws ServletException {
- Project project =
+ private void ajaxFetchScheduledFlowGraph(final String projectName, final String flowName,
+ final HashMap<String, Object> ret, final User user) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
if (project == null) {
ret.put("error", "Project '" + projectName + "' doesn't exist.");
return;
}
try {
- Schedule schedule = scheduleManager.getSchedule(project.getId(), flowName);
- ExecutionOptions executionOptions = schedule != null ? schedule.getExecutionOptions() : new ExecutionOptions();
- Flow flow = project.getFlow(flowName);
+ final Schedule schedule = this.scheduleManager.getSchedule(project.getId(), flowName);
+ final ExecutionOptions executionOptions =
+ schedule != null ? schedule.getExecutionOptions() : new ExecutionOptions();
+ final Flow flow = project.getFlow(flowName);
if (flow == null) {
ret.put("error", "Flow '" + flowName + "' cannot be found in project " + project);
return;
}
- ExecutableFlow exFlow = new ExecutableFlow(project, flow);
+ final ExecutableFlow exFlow = new ExecutableFlow(project, flow);
exFlow.setExecutionOptions(executionOptions);
ret.put("submitTime", exFlow.getSubmitTime());
ret.put("submitUser", exFlow.getSubmitUser());
@@ -234,55 +233,55 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.put("projectId", exFlow.getProjectId());
ret.put("project", project.getName());
FlowUtils.applyDisabledJobs(executionOptions.getDisabledJobs(), exFlow);
- Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
+ final Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
ret.putAll(flowObj);
- } catch(ScheduleManagerException ex) {
+ } catch (final ScheduleManagerException ex) {
throw new ServletException(ex);
}
}
/* Reloads executors from DB and azkaban.properties via executorManager */
- private void ajaxReloadExecutors(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> returnMap, User user) {
+ private void ajaxReloadExecutors(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> returnMap, final User user) {
boolean wasSuccess = false;
- if (HttpRequestUtils.hasPermission(userManager, user, Type.ADMIN)) {
+ if (HttpRequestUtils.hasPermission(this.userManager, user, Type.ADMIN)) {
try {
- executorManager.setupExecutors();
+ this.executorManager.setupExecutors();
returnMap.put(ConnectorParams.STATUS_PARAM,
- ConnectorParams.RESPONSE_SUCCESS);
+ ConnectorParams.RESPONSE_SUCCESS);
wasSuccess = true;
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
returnMap.put(ConnectorParams.RESPONSE_ERROR,
- "Failed to refresh the executors " + e.getMessage());
+ "Failed to refresh the executors " + e.getMessage());
}
} else {
returnMap.put(ConnectorParams.RESPONSE_ERROR,
- "Only Admins are allowed to refresh the executors");
+ "Only Admins are allowed to refresh the executors");
}
if (!wasSuccess) {
returnMap.put(ConnectorParams.STATUS_PARAM,
- ConnectorParams.RESPONSE_ERROR);
+ ConnectorParams.RESPONSE_ERROR);
}
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
}
}
- private void handleExecutionJobDetailsPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleExecutionJobDetailsPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/jobdetailspage.vm");
- User user = session.getUser();
- int execId = getIntParam(req, "execid");
- String jobId = getParam(req, "job");
- int attempt = getIntParam(req, "attempt", 0);
+ final User user = session.getUser();
+ final int execId = getIntParam(req, "execid");
+ final String jobId = getParam(req, "job");
+ final int attempt = getIntParam(req, "attempt", 0);
page.add("execid", execId);
page.add("jobid", jobId);
page.add("attempt", attempt);
@@ -290,7 +289,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ExecutableFlow flow = null;
ExecutableNode node = null;
try {
- flow = executorManager.getExecutableFlow(execId);
+ flow = this.executorManager.getExecutableFlow(execId);
if (flow == null) {
page.add("errorMsg", "Error loading executing flow " + execId
+ ": not found.");
@@ -305,18 +304,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return;
}
- List<ViewerPlugin> jobViewerPlugins =
+ final List<ViewerPlugin> jobViewerPlugins =
PluginRegistry.getRegistry().getViewerPluginsForJobType(
node.getType());
page.add("jobViewerPlugins", jobViewerPlugins);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
page.add("errorMsg", "Error loading executing flow: " + e.getMessage());
page.render();
return;
}
- int projectId = flow.getProjectId();
- Project project =
+ final int projectId = flow.getProjectId();
+ final Project project =
getProjectPageByPermission(page, projectId, user, Type.READ);
if (project == null) {
page.render();
@@ -331,66 +330,66 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
page.render();
}
- private void handleExecutionsPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleExecutionsPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/executionspage.vm");
- List<Pair<ExecutableFlow, Executor>> runningFlows =
- executorManager.getActiveFlowsWithExecutor();
+ final List<Pair<ExecutableFlow, Executor>> runningFlows =
+ this.executorManager.getActiveFlowsWithExecutor();
page.add("runningFlows", runningFlows.isEmpty() ? null : runningFlows);
- List<ExecutableFlow> finishedFlows =
- executorManager.getRecentlyFinishedFlows();
+ final List<ExecutableFlow> finishedFlows =
+ this.executorManager.getRecentlyFinishedFlows();
page.add("recentlyFinished", finishedFlows.isEmpty() ? null : finishedFlows);
- page.add("vmutils", velocityHelper);
+ page.add("vmutils", this.velocityHelper);
page.render();
}
- private void handleExecutionFlowPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleExecutionFlowPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/executingflowpage.vm");
- User user = session.getUser();
- int execId = getIntParam(req, "execid");
+ final User user = session.getUser();
+ final int execId = getIntParam(req, "execid");
page.add("execid", execId);
ExecutableFlow flow = null;
try {
- flow = executorManager.getExecutableFlow(execId);
+ flow = this.executorManager.getExecutableFlow(execId);
if (flow == null) {
page.add("errorMsg", "Error loading executing flow " + execId
+ " not found.");
page.render();
return;
}
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
page.add("errorMsg", "Error loading executing flow: " + e.getMessage());
page.render();
return;
}
- int projectId = flow.getProjectId();
- Project project =
+ final int projectId = flow.getProjectId();
+ final Project project =
getProjectPageByPermission(page, projectId, user, Type.READ);
if (project == null) {
page.render();
return;
}
- Props props = getApplication().getServerProps();
- String execExternalLinkURL = ExternalLinkUtils.getExternalAnalyzerOnReq(props, req);
+ final Props props = getApplication().getServerProps();
+ final String execExternalLinkURL = ExternalLinkUtils.getExternalAnalyzerOnReq(props, req);
- if(execExternalLinkURL.length() > 0) {
+ if (execExternalLinkURL.length() > 0) {
page.add("executionExternalLinkURL", execExternalLinkURL);
LOGGER.debug("Added an External analyzer to the page");
LOGGER.debug("External analyzer url: " + execExternalLinkURL);
- String execExternalLinkLabel =
+ final String execExternalLinkLabel =
props.getString(Constants.ConfigurationKeys.AZKABAN_SERVER_EXTERNAL_ANALYZER_LABEL,
"External Analyzer");
page.add("executionExternalLinkLabel", execExternalLinkLabel);
@@ -404,9 +403,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
page.render();
}
- protected Project getProjectPageByPermission(Page page, int projectId,
- User user, Permission.Type type) {
- Project project = projectManager.getProject(projectId);
+ protected Project getProjectPageByPermission(final Page page, final int projectId,
+ final User user, final Permission.Type type) {
+ final Project project = this.projectManager.getProject(projectId);
if (project == null) {
page.add("errorMsg", "Project " + project + " not found.");
@@ -421,9 +420,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return null;
}
- protected Project getProjectAjaxByPermission(Map<String, Object> ret,
- String projectName, User user, Permission.Type type) {
- Project project = projectManager.getProject(projectName);
+ protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
+ final String projectName, final User user, final Permission.Type type) {
+ final Project project = this.projectManager.getProject(projectName);
if (project == null) {
ret.put("error", "Project '" + project + "' not found.");
@@ -438,9 +437,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return null;
}
- protected Project getProjectAjaxByPermission(Map<String, Object> ret,
- int projectId, User user, Permission.Type type) {
- Project project = projectManager.getProject(projectId);
+ protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
+ final int projectId, final User user, final Permission.Type type) {
+ final Project project = this.projectManager.getProject(projectId);
if (project == null) {
ret.put("error", "Project '" + project + "' not found.");
@@ -455,10 +454,10 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return null;
}
- private void ajaxRestartFailed(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
- Project project =
+ private void ajaxRestartFailed(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
Type.EXECUTE);
if (project == null) {
@@ -472,39 +471,33 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
try {
- executorManager.retryFailures(exFlow, user.getUserId());
- } catch (ExecutorManagerException e) {
+ this.executorManager.retryFailures(exFlow, user.getUserId());
+ } catch (final ExecutorManagerException e) {
ret.put("error", e.getMessage());
}
}
/**
* Gets the logs through plain text stream to reduce memory overhead.
- *
- * @param req
- * @param resp
- * @param user
- * @param exFlow
- * @throws ServletException
*/
- private void ajaxFetchExecFlowLogs(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
- long startMs = System.currentTimeMillis();
- Project project =
+ private void ajaxFetchExecFlowLogs(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
+ final long startMs = System.currentTimeMillis();
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
if (project == null) {
return;
}
- int offset = this.getIntParam(req, "offset");
- int length = this.getIntParam(req, "length");
+ final int offset = this.getIntParam(req, "offset");
+ final int length = this.getIntParam(req, "length");
resp.setCharacterEncoding("utf-8");
try {
- LogData data =
- executorManager.getExecutableFlowLog(exFlow, offset, length);
+ final LogData data =
+ this.executorManager.getExecutableFlowLog(exFlow, offset, length);
if (data == null) {
ret.put("length", 0);
ret.put("offset", offset);
@@ -514,7 +507,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.put("offset", data.getOffset());
ret.put("data", StringEscapeUtils.escapeHtml(data.getData()));
}
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
throw new ServletException(e);
}
@@ -529,39 +522,33 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
/**
* Gets the logs through ajax plain text stream to reduce memory overhead.
- *
- * @param req
- * @param resp
- * @param user
- * @param exFlow
- * @throws ServletException
*/
- private void ajaxFetchJobLogs(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
- Project project =
+ private void ajaxFetchJobLogs(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
if (project == null) {
return;
}
- int offset = this.getIntParam(req, "offset");
- int length = this.getIntParam(req, "length");
+ final int offset = this.getIntParam(req, "offset");
+ final int length = this.getIntParam(req, "length");
- String jobId = this.getParam(req, "jobId");
+ final String jobId = this.getParam(req, "jobId");
resp.setCharacterEncoding("utf-8");
try {
- ExecutableNode node = exFlow.getExecutableNodePath(jobId);
+ final ExecutableNode node = exFlow.getExecutableNodePath(jobId);
if (node == null) {
ret.put("error",
"Job " + jobId + " doesn't exist in " + exFlow.getExecutionId());
return;
}
- int attempt = this.getIntParam(req, "attempt", node.getAttempt());
- LogData data =
- executorManager.getExecutionJobLog(exFlow, jobId, offset, length,
+ final int attempt = this.getIntParam(req, "attempt", node.getAttempt());
+ final LogData data =
+ this.executorManager.getExecutionJobLog(exFlow, jobId, offset, length,
attempt);
if (data == null) {
ret.put("length", 0);
@@ -572,51 +559,51 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.put("offset", data.getOffset());
ret.put("data", StringEscapeUtils.escapeHtml(data.getData()));
}
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
throw new ServletException(e);
}
}
- private void ajaxFetchJobStats(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
- Project project =
+ private void ajaxFetchJobStats(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
if (project == null) {
return;
}
- String jobId = this.getParam(req, "jobid");
+ final String jobId = this.getParam(req, "jobid");
resp.setCharacterEncoding("utf-8");
try {
- ExecutableNode node = exFlow.getExecutableNodePath(jobId);
+ final ExecutableNode node = exFlow.getExecutableNodePath(jobId);
if (node == null) {
ret.put("error",
"Job " + jobId + " doesn't exist in " + exFlow.getExecutionId());
return;
}
- List<Object> jsonObj =
- executorManager
+ final List<Object> jsonObj =
+ this.executorManager
.getExecutionJobStats(exFlow, jobId, node.getAttempt());
ret.put("jobStats", jsonObj);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
ret.put("error", "Error retrieving stats for job " + jobId);
return;
}
}
- private void ajaxFetchFlowInfo(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- String projectName, String flowId) throws ServletException {
- Project project =
+ private void ajaxFetchFlowInfo(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final String projectName, final String flowId) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, projectName, user, Type.READ);
if (project == null) {
return;
}
- Flow flow = project.getFlow(flowId);
+ final Flow flow = project.getFlow(flowId);
if (flow == null) {
ret.put("error", "Error loading flow. Flow " + flowId
+ " doesn't exist in " + projectName);
@@ -628,14 +615,14 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
Schedule sflow = null;
try {
- for (Schedule sched : scheduleManager.getSchedules()) {
+ for (final Schedule sched : this.scheduleManager.getSchedules()) {
if (sched.getProjectId() == project.getId()
&& sched.getFlowName().equals(flowId)) {
sflow = sched;
break;
}
}
- } catch (ScheduleManagerException e) {
+ } catch (final ScheduleManagerException e) {
// TODO Auto-generated catch block
throw new ServletException(e);
}
@@ -645,40 +632,40 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
}
- private void ajaxFetchExecutableFlowInfo(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exflow) throws ServletException {
- Project project =
+ private void ajaxFetchExecutableFlowInfo(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exflow) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, exflow.getProjectId(), user, Type.READ);
if (project == null) {
return;
}
- Flow flow = project.getFlow(exflow.getFlowId());
+ final Flow flow = project.getFlow(exflow.getFlowId());
if (flow == null) {
ret.put("error", "Error loading flow. Flow " + exflow.getFlowId()
+ " doesn't exist in " + exflow.getProjectId());
return;
}
- ExecutionOptions options = exflow.getExecutionOptions();
+ final ExecutionOptions options = exflow.getExecutionOptions();
ret.put("successEmails", options.getSuccessEmails());
ret.put("failureEmails", options.getFailureEmails());
ret.put("flowParam", options.getFlowParameters());
- FailureAction action = options.getFailureAction();
+ final FailureAction action = options.getFailureAction();
String failureAction = null;
switch (action) {
- case FINISH_CURRENTLY_RUNNING:
- failureAction = "finishCurrent";
- break;
- case CANCEL_ALL:
- failureAction = "cancelImmediately";
- break;
- case FINISH_ALL_POSSIBLE:
- failureAction = "finishPossible";
- break;
+ case FINISH_CURRENTLY_RUNNING:
+ failureAction = "finishCurrent";
+ break;
+ case CANCEL_ALL:
+ failureAction = "cancelImmediately";
+ break;
+ case FINISH_ALL_POSSIBLE:
+ failureAction = "finishPossible";
+ break;
}
ret.put("failureAction", failureAction);
@@ -693,18 +680,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.put("pipelineExecution", options.getPipelineExecutionId());
ret.put("queueLevel", options.getQueueLevel());
- HashMap<String, String> nodeStatus = new HashMap<String, String>();
- for (ExecutableNode node : exflow.getExecutableNodes()) {
+ final HashMap<String, String> nodeStatus = new HashMap<>();
+ for (final ExecutableNode node : exflow.getExecutableNodes()) {
nodeStatus.put(node.getId(), node.getStatus().toString());
}
ret.put("nodeStatus", nodeStatus);
ret.put("disabled", options.getDisabledJobs());
}
- private void ajaxCancelFlow(HttpServletRequest req, HttpServletResponse resp,
- HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+ private void ajaxCancelFlow(final HttpServletRequest req, final HttpServletResponse resp,
+ final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
throws ServletException {
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
Type.EXECUTE);
if (project == null) {
@@ -712,32 +699,32 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
try {
- executorManager.cancelFlow(exFlow, user.getUserId());
- } catch (ExecutorManagerException e) {
+ this.executorManager.cancelFlow(exFlow, user.getUserId());
+ } catch (final ExecutorManagerException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxGetFlowRunning(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- String projectId, String flowId) throws ServletException {
- Project project =
+ private void ajaxGetFlowRunning(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final String projectId, final String flowId) throws ServletException {
+ final Project project =
getProjectAjaxByPermission(ret, projectId, user, Type.EXECUTE);
if (project == null) {
return;
}
- List<Integer> refs =
- executorManager.getRunningFlows(project.getId(), flowId);
+ final List<Integer> refs =
+ this.executorManager.getRunningFlows(project.getId(), flowId);
if (!refs.isEmpty()) {
ret.put("execIds", refs);
}
}
- private void ajaxPauseFlow(HttpServletRequest req, HttpServletResponse resp,
- HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+ private void ajaxPauseFlow(final HttpServletRequest req, final HttpServletResponse resp,
+ final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
throws ServletException {
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
Type.EXECUTE);
if (project == null) {
@@ -745,16 +732,16 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
try {
- executorManager.pauseFlow(exFlow, user.getUserId());
- } catch (ExecutorManagerException e) {
+ this.executorManager.pauseFlow(exFlow, user.getUserId());
+ } catch (final ExecutorManagerException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxResumeFlow(HttpServletRequest req, HttpServletResponse resp,
- HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+ private void ajaxResumeFlow(final HttpServletRequest req, final HttpServletResponse resp,
+ final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
throws ServletException {
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
Type.EXECUTE);
if (project == null) {
@@ -762,22 +749,22 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
try {
- executorManager.resumeFlow(exFlow, user.getUserId());
- } catch (ExecutorManagerException e) {
+ this.executorManager.resumeFlow(exFlow, user.getUserId());
+ } catch (final ExecutorManagerException e) {
ret.put("resume", e.getMessage());
}
}
- private Map<String, Object> getExecutableFlowUpdateInfo(ExecutableNode node,
- long lastUpdateTime) {
- HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+ private Map<String, Object> getExecutableFlowUpdateInfo(final ExecutableNode node,
+ final long lastUpdateTime) {
+ final HashMap<String, Object> nodeObj = new HashMap<>();
if (node instanceof ExecutableFlowBase) {
- ExecutableFlowBase base = (ExecutableFlowBase) node;
- ArrayList<Map<String, Object>> nodeList =
- new ArrayList<Map<String, Object>>();
+ final ExecutableFlowBase base = (ExecutableFlowBase) node;
+ final ArrayList<Map<String, Object>> nodeList =
+ new ArrayList<>();
- for (ExecutableNode subNode : base.getExecutableNodes()) {
- Map<String, Object> subNodeObj =
+ for (final ExecutableNode subNode : base.getExecutableNodes()) {
+ final Map<String, Object> subNodeObj =
getExecutableFlowUpdateInfo(subNode, lastUpdateTime);
if (!subNodeObj.isEmpty()) {
nodeList.add(subNodeObj);
@@ -806,8 +793,8 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return nodeObj;
}
- private Map<String, Object> getExecutableNodeInfo(ExecutableNode node) {
- HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+ private Map<String, Object> getExecutableNodeInfo(final ExecutableNode node) {
+ final HashMap<String, Object> nodeObj = new HashMap<>();
nodeObj.put("id", node.getId());
nodeObj.put("status", node.getStatus());
nodeObj.put("startTime", node.getStartTime());
@@ -826,12 +813,12 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
if (node instanceof ExecutableFlowBase) {
- ExecutableFlowBase base = (ExecutableFlowBase) node;
- ArrayList<Map<String, Object>> nodeList =
- new ArrayList<Map<String, Object>>();
+ final ExecutableFlowBase base = (ExecutableFlowBase) node;
+ final ArrayList<Map<String, Object>> nodeList =
+ new ArrayList<>();
- for (ExecutableNode subNode : base.getExecutableNodes()) {
- Map<String, Object> subNodeObj = getExecutableNodeInfo(subNode);
+ for (final ExecutableNode subNode : base.getExecutableNodes()) {
+ final Map<String, Object> subNodeObj = getExecutableNodeInfo(subNode);
if (!subNodeObj.isEmpty()) {
nodeList.add(subNodeObj);
}
@@ -845,19 +832,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return nodeObj;
}
- private void ajaxFetchExecutableFlowUpdate(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
- Long lastUpdateTime = Long.parseLong(getParam(req, "lastUpdateTime"));
+ private void ajaxFetchExecutableFlowUpdate(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
+ final Long lastUpdateTime = Long.parseLong(getParam(req, "lastUpdateTime"));
System.out.println("Fetching " + exFlow.getExecutionId());
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
if (project == null) {
return;
}
- Map<String, Object> map =
+ final Map<String, Object> map =
getExecutableFlowUpdateInfo(exFlow, lastUpdateTime);
map.put("status", exFlow.getStatus());
map.put("startTime", exFlow.getStartTime());
@@ -866,12 +853,12 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.putAll(map);
}
- private void ajaxFetchExecutableFlow(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user,
- ExecutableFlow exFlow) throws ServletException {
+ private void ajaxFetchExecutableFlow(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+ final ExecutableFlow exFlow) throws ServletException {
System.out.println("Fetching " + exFlow.getExecutionId());
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
if (project == null) {
return;
@@ -883,17 +870,17 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ret.put("projectId", exFlow.getProjectId());
ret.put("project", project.getName());
- Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
+ final Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
ret.putAll(flowObj);
}
- private void ajaxAttemptExecuteFlow(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user)
+ private void ajaxAttemptExecuteFlow(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user)
throws ServletException {
- String projectName = getParam(req, "project");
- String flowId = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowId = getParam(req, "flow");
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
if (project == null) {
ret.put("error", "Project '" + projectName + "' doesn't exist.");
@@ -901,7 +888,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
ret.put("flow", flowId);
- Flow flow = project.getFlow(flowId);
+ final Flow flow = project.getFlow(flowId);
if (flow == null) {
ret.put("error", "Flow '" + flowId + "' cannot be found in project "
+ project);
@@ -911,13 +898,13 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
ajaxExecuteFlow(req, resp, ret, user);
}
- private void ajaxExecuteFlow(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret, User user)
+ private void ajaxExecuteFlow(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret, final User user)
throws ServletException {
- String projectName = getParam(req, "project");
- String flowId = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowId = getParam(req, "flow");
- Project project =
+ final Project project =
getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
if (project == null) {
ret.put("error", "Project '" + projectName + "' doesn't exist.");
@@ -925,18 +912,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
ret.put("flow", flowId);
- Flow flow = project.getFlow(flowId);
+ final Flow flow = project.getFlow(flowId);
if (flow == null) {
ret.put("error", "Flow '" + flowId + "' cannot be found in project "
+ project);
return;
}
- ExecutableFlow exflow = new ExecutableFlow(project, flow);
+ final ExecutableFlow exflow = new ExecutableFlow(project, flow);
exflow.setSubmitUser(user.getUserId());
exflow.addAllProxyUsers(project.getProxyUsers());
- ExecutionOptions options = HttpRequestUtils.parseFlowOptions(req);
+ final ExecutionOptions options = HttpRequestUtils.parseFlowOptions(req);
exflow.setExecutionOptions(options);
if (!options.isFailureEmailsOverridden()) {
options.setFailureEmails(flow.getFailureEmails());
@@ -947,11 +934,11 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
options.setMailCreator(flow.getMailCreator());
try {
- HttpRequestUtils.filterAdminOnlyFlowParams(userManager, options, user);
- String message =
- executorManager.submitExecutableFlow(exflow, user.getUserId());
+ HttpRequestUtils.filterAdminOnlyFlowParams(this.userManager, options, user);
+ final String message =
+ this.executorManager.submitExecutableFlow(exflow, user.getUserId());
ret.put("message", message);
- } catch (Exception e) {
+ } catch (final Exception e) {
e.printStackTrace();
ret.put("error",
"Error submitting flow " + exflow.getFlowId() + ". " + e.getMessage());
@@ -961,8 +948,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
public class ExecutorVelocityHelper {
- public String getProjectName(int id) {
- Project project = projectManager.getProject(id);
+
+ public String getProjectName(final int id) {
+ final Project project = ExecutorServlet.this.projectManager.getProject(id);
if (project == null) {
return String.valueOf(id);
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
index ba76dd6..7563760 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
@@ -16,25 +16,22 @@
package azkaban.webapp.servlet;
+import azkaban.executor.ExecutableFlow;
+import azkaban.executor.ExecutorManagerAdapter;
+import azkaban.executor.ExecutorManagerException;
+import azkaban.project.Project;
+import azkaban.project.ProjectManager;
+import azkaban.server.session.Session;
+import azkaban.webapp.AzkabanWebServer;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.joda.time.format.DateTimeFormat;
-import azkaban.executor.ExecutableFlow;
-import azkaban.executor.ExecutorManagerAdapter;
-import azkaban.executor.ExecutorManagerException;
-import azkaban.project.Project;
-import azkaban.project.ProjectManager;
-import azkaban.server.session.Session;
-import azkaban.webapp.AzkabanWebServer;
-
public class HistoryServlet extends LoginAbstractAzkabanServlet {
private static final String FILTER_BY_DATE_PATTERN = "MM/dd/yyyy hh:mm aa";
@@ -44,17 +41,17 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
private ExecutorVMHelper vmHelper;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
- executorManager = server.getExecutorManager();
- projectManager = server.getProjectManager();
- vmHelper = new ExecutorVMHelper();
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ this.executorManager = server.getExecutorManager();
+ this.projectManager = server.getProjectManager();
+ this.vmHelper = new ExecutorVMHelper();
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
@@ -67,11 +64,11 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleAJAXAction(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleAJAXAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- HashMap<String, Object> ret = new HashMap<String, Object>();
- String ajaxName = getParam(req, "ajax");
+ final HashMap<String, Object> ret = new HashMap<>();
+ final String ajaxName = getParam(req, "ajax");
if (ajaxName.equals("fetch")) {
fetchHistoryData(req, resp, ret);
@@ -82,62 +79,62 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
}
}
- private void fetchHistoryData(HttpServletRequest req,
- HttpServletResponse resp, HashMap<String, Object> ret)
+ private void fetchHistoryData(final HttpServletRequest req,
+ final HttpServletResponse resp, final HashMap<String, Object> ret)
throws ServletException {
}
- private void handleHistoryPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException {
- Page page =
+ private void handleHistoryPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/historypage.vm");
int pageNum = getIntParam(req, "page", 1);
- int pageSize = getIntParam(req, "size", 16);
- page.add("vmutils", vmHelper);
+ final int pageSize = getIntParam(req, "size", 16);
+ page.add("vmutils", this.vmHelper);
if (pageNum < 0) {
pageNum = 1;
}
List<ExecutableFlow> history = null;
if (hasParam(req, "advfilter")) {
- String projContain = getParam(req, "projcontain");
- String flowContain = getParam(req, "flowcontain");
- String userContain = getParam(req, "usercontain");
- int status = getIntParam(req, "status");
- String begin = getParam(req, "begin");
+ final String projContain = getParam(req, "projcontain");
+ final String flowContain = getParam(req, "flowcontain");
+ final String userContain = getParam(req, "usercontain");
+ final int status = getIntParam(req, "status");
+ final String begin = getParam(req, "begin");
- long beginTime =
+ final long beginTime =
begin == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
.parseDateTime(begin).getMillis();
- String end = getParam(req, "end");
+ final String end = getParam(req, "end");
- long endTime =
+ final long endTime =
end == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
.parseDateTime(end).getMillis();
try {
history =
- executorManager.getExecutableFlows(projContain, flowContain,
+ this.executorManager.getExecutableFlows(projContain, flowContain,
userContain, status, beginTime, endTime, (pageNum - 1)
* pageSize, pageSize);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
page.add("error", e.getMessage());
}
} else if (hasParam(req, "search")) {
- String searchTerm = getParam(req, "searchterm");
+ final String searchTerm = getParam(req, "searchterm");
try {
history =
- executorManager.getExecutableFlows(searchTerm, (pageNum - 1)
+ this.executorManager.getExecutableFlows(searchTerm, (pageNum - 1)
* pageSize, pageSize);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
page.add("error", e.getMessage());
}
} else {
try {
history =
- executorManager.getExecutableFlows((pageNum - 1) * pageSize,
+ this.executorManager.getExecutableFlows((pageNum - 1) * pageSize,
pageSize);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
e.printStackTrace();
}
}
@@ -192,21 +189,28 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
page.render();
}
- private void handleHistoryTimelinePage(HttpServletRequest req,
- HttpServletResponse resp, Session session) {
+ private void handleHistoryTimelinePage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) {
+ }
+
+ private void handleHistoryDayPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) {
}
- private void handleHistoryDayPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) {
+ @Override
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
}
public static class PageSelection {
- private int page;
- private int size;
- private boolean disabled;
+
+ private final int page;
+ private final int size;
+ private final boolean disabled;
private boolean selected;
- public PageSelection(int page, int size, boolean disabled, boolean selected) {
+ public PageSelection(final int page, final int size, final boolean disabled,
+ final boolean selected) {
this.page = page;
this.size = size;
this.disabled = disabled;
@@ -214,34 +218,30 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
}
public int getPage() {
- return page;
+ return this.page;
}
public int getSize() {
- return size;
+ return this.size;
}
public boolean getDisabled() {
- return disabled;
+ return this.disabled;
}
public boolean isSelected() {
- return selected;
+ return this.selected;
}
- public void setSelected(boolean selected) {
+ public void setSelected(final boolean selected) {
this.selected = selected;
}
}
- @Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
- }
-
public class ExecutorVMHelper {
- public String getProjectName(int id) {
- Project project = projectManager.getProject(id);
+
+ public String getProjectName(final int id) {
+ final Project project = HistoryServlet.this.projectManager.getProject(id);
if (project == null) {
return String.valueOf(id);
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
index 31153e5..bda1815 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
@@ -16,22 +16,21 @@
package azkaban.webapp.servlet;
+import azkaban.server.session.Session;
import java.io.IOException;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import azkaban.server.session.Session;
-
/**
* The main page
*/
public class IndexRedirectServlet extends LoginAbstractAzkabanServlet {
+
private static final long serialVersionUID = -1;
private String defaultServletPath;
- public IndexRedirectServlet(String defaultServletPath) {
+ public IndexRedirectServlet(final String defaultServletPath) {
this.defaultServletPath = defaultServletPath;
if (this.defaultServletPath.isEmpty()
|| this.defaultServletPath.equals("/")) {
@@ -40,14 +39,14 @@ public class IndexRedirectServlet extends LoginAbstractAzkabanServlet {
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
- resp.sendRedirect(defaultServletPath);
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
+ resp.sendRedirect(this.defaultServletPath);
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
- resp.sendRedirect(defaultServletPath);
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
+ resp.sendRedirect(this.defaultServletPath);
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
index f1760a1..62dfc66 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
@@ -16,11 +16,19 @@
package azkaban.webapp.servlet;
+import azkaban.executor.ConnectorParams;
+import azkaban.executor.ExecutorManagerAdapter;
+import azkaban.server.session.Session;
+import azkaban.trigger.TriggerManager;
+import azkaban.user.Permission;
+import azkaban.user.Role;
+import azkaban.user.User;
+import azkaban.user.UserManager;
+import azkaban.webapp.AzkabanWebServer;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
-
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.ObjectName;
@@ -28,24 +36,14 @@ import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.apache.log4j.Logger;
-import azkaban.executor.ConnectorParams;
-import azkaban.executor.ExecutorManagerAdapter;
-import azkaban.server.session.Session;
-import azkaban.trigger.TriggerManager;
-import azkaban.user.Permission;
-import azkaban.user.Role;
-import azkaban.user.User;
-import azkaban.user.UserManager;
-import azkaban.webapp.AzkabanWebServer;
-
/**
* Limited set of jmx calls for when you cannot attach to the jvm
*/
public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
ConnectorParams {
+
/**
*
*/
@@ -60,21 +58,21 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
private TriggerManager triggerManager;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- server = (AzkabanWebServer) getApplication();
- userManager = server.getUserManager();
- executorManager = server.getExecutorManager();
+ this.server = (AzkabanWebServer) getApplication();
+ this.userManager = this.server.getUserManager();
+ this.executorManager = this.server.getExecutorManager();
- triggerManager = server.getTriggerManager();
+ this.triggerManager = this.server.getTriggerManager();
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
- Map<String, Object> ret = new HashMap<String, Object>();
+ Map<String, Object> ret = new HashMap<>();
if (!hasPermission(session.getUser(), Permission.Type.METRICS)) {
ret.put("error", "User " + session.getUser().getUserId()
@@ -82,7 +80,7 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
this.writeJSON(resp, ret, true);
return;
}
- String ajax = getParam(req, "ajax");
+ final String ajax = getParam(req, "ajax");
if (JMX_GET_ALL_EXECUTOR_ATTRIBUTES.equals(ajax)) {
if (!hasParam(req, JMX_MBEAN) || !hasParam(req, JMX_HOSTPORT)) {
ret.put("error", "Parameters '" + JMX_MBEAN + "' and '"
@@ -91,31 +89,30 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
return;
}
- String hostPort = getParam(req, JMX_HOSTPORT);
- String mbean = getParam(req, JMX_MBEAN);
- Map<String, Object> result =
- executorManager.callExecutorJMX(hostPort,
+ final String hostPort = getParam(req, JMX_HOSTPORT);
+ final String mbean = getParam(req, JMX_MBEAN);
+ final Map<String, Object> result =
+ this.executorManager.callExecutorJMX(hostPort,
JMX_GET_ALL_MBEAN_ATTRIBUTES, mbean);
// order the attribute by name
- for (Map.Entry<String, Object> entry : result.entrySet()) {
+ for (final Map.Entry<String, Object> entry : result.entrySet()) {
if (entry.getValue() instanceof Map) {
- @SuppressWarnings("unchecked")
- Map<String, Object> entryValue = (Map<String, Object>) entry.getValue();
- result.put(entry.getKey(), new TreeMap<String,Object>(entryValue));
+ final Map<String, Object> entryValue = (Map<String, Object>) entry.getValue();
+ result.put(entry.getKey(), new TreeMap<>(entryValue));
}
}
ret = result;
} else if (JMX_GET_MBEANS.equals(ajax)) {
- ret.put("mbeans", server.getMbeanNames());
+ ret.put("mbeans", this.server.getMbeanNames());
} else if (JMX_GET_MBEAN_INFO.equals(ajax)) {
if (hasParam(req, JMX_MBEAN)) {
- String mbeanName = getParam(req, JMX_MBEAN);
+ final String mbeanName = getParam(req, JMX_MBEAN);
try {
- ObjectName name = new ObjectName(mbeanName);
- MBeanInfo info = server.getMBeanInfo(name);
+ final ObjectName name = new ObjectName(mbeanName);
+ final MBeanInfo info = this.server.getMBeanInfo(name);
ret.put("attributes", info.getAttributes());
ret.put("description", info.getDescription());
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e);
ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
}
@@ -126,14 +123,14 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
if (!hasParam(req, JMX_MBEAN) || !hasParam(req, JMX_ATTRIBUTE)) {
ret.put("error", "Parameters 'mbean' and 'attribute' must be set");
} else {
- String mbeanName = getParam(req, JMX_MBEAN);
- String attribute = getParam(req, JMX_ATTRIBUTE);
+ final String mbeanName = getParam(req, JMX_MBEAN);
+ final String attribute = getParam(req, JMX_ATTRIBUTE);
try {
- ObjectName name = new ObjectName(mbeanName);
- Object obj = server.getMBeanAttribute(name, attribute);
+ final ObjectName name = new ObjectName(mbeanName);
+ final Object obj = this.server.getMBeanAttribute(name, attribute);
ret.put("value", obj);
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e);
ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
}
@@ -142,31 +139,31 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
if (!hasParam(req, JMX_MBEAN)) {
ret.put("error", "Parameters 'mbean' must be set");
} else {
- String mbeanName = getParam(req, JMX_MBEAN);
+ final String mbeanName = getParam(req, JMX_MBEAN);
try {
- ObjectName name = new ObjectName(mbeanName);
- MBeanInfo info = server.getMBeanInfo(name);
+ final ObjectName name = new ObjectName(mbeanName);
+ final MBeanInfo info = this.server.getMBeanInfo(name);
- MBeanAttributeInfo[] mbeanAttrs = info.getAttributes();
- Map<String, Object> attributes = new TreeMap<String, Object>();
+ final MBeanAttributeInfo[] mbeanAttrs = info.getAttributes();
+ final Map<String, Object> attributes = new TreeMap<>();
- for (MBeanAttributeInfo attrInfo : mbeanAttrs) {
- Object obj = server.getMBeanAttribute(name, attrInfo.getName());
+ for (final MBeanAttributeInfo attrInfo : mbeanAttrs) {
+ final Object obj = this.server.getMBeanAttribute(name, attrInfo.getName());
attributes.put(attrInfo.getName(), obj);
}
ret.put("attributes", attributes);
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e);
ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
}
}
} else {
- ret.put("commands", new String[] {
+ ret.put("commands", new String[]{
JMX_GET_MBEANS,
JMX_GET_MBEAN_INFO + "&" + JMX_MBEAN + "=<name>",
JMX_GET_MBEAN_ATTRIBUTE + "&" + JMX_MBEAN + "=<name>&"
- + JMX_ATTRIBUTE + "=<attributename>" });
+ + JMX_ATTRIBUTE + "=<attributename>"});
}
this.writeJSON(resp, ret, true);
} else {
@@ -174,9 +171,9 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
}
}
- private void handleJMXPage(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws IOException {
- Page page =
+ private void handleJMXPage(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws IOException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/jmxpage.vm");
@@ -187,25 +184,25 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
return;
}
- page.add("mbeans", server.getMbeanNames());
+ page.add("mbeans", this.server.getMbeanNames());
- Map<String, Object> executorMBeans = new HashMap<String, Object>();
- for (String hostPort : executorManager.getAllActiveExecutorServerHosts()) {
+ final Map<String, Object> executorMBeans = new HashMap<>();
+ for (final String hostPort : this.executorManager.getAllActiveExecutorServerHosts()) {
try {
- Map<String, Object> mbeans =
- executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
+ final Map<String, Object> mbeans =
+ this.executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
executorMBeans.put(hostPort, mbeans.get("mbeans"));
- } catch (IOException e) {
+ } catch (final IOException e) {
logger.error("Cannot contact executor " + hostPort, e);
}
}
page.add("executorRemoteMBeans", executorMBeans);
- Map<String, Object> triggerserverMBeans = new HashMap<String, Object>();
- triggerserverMBeans.put(triggerManager.getJMX().getPrimaryServerHost(),
- triggerManager.getJMX().getAllJMXMbeans());
+ final Map<String, Object> triggerserverMBeans = new HashMap<>();
+ triggerserverMBeans.put(this.triggerManager.getJMX().getPrimaryServerHost(),
+ this.triggerManager.getJMX().getAllJMXMbeans());
page.add("triggerserverRemoteMBeans", triggerserverMBeans);
@@ -213,14 +210,14 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
}
- protected boolean hasPermission(User user, Permission.Type type) {
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
+ protected boolean hasPermission(final User user, final Permission.Type type) {
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
if (role.getPermission().isPermissionSet(type)
|| role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
return true;
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
index 3980d3f..f917316 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
@@ -16,6 +16,15 @@
package azkaban.webapp.servlet;
+import azkaban.project.Project;
+import azkaban.server.session.Session;
+import azkaban.user.Permission;
+import azkaban.user.Role;
+import azkaban.user.User;
+import azkaban.user.UserManager;
+import azkaban.user.UserManagerException;
+import azkaban.utils.StringUtils;
+import azkaban.utils.WebUtils;
import azkaban.webapp.WebMetrics;
import java.io.BufferedInputStream;
import java.io.File;
@@ -26,27 +35,15 @@ import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
-import azkaban.utils.WebUtils;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
-import azkaban.project.Project;
-import azkaban.server.session.Session;
-import azkaban.user.Permission;
-import azkaban.user.Role;
-import azkaban.user.User;
-import azkaban.user.UserManager;
-import azkaban.user.UserManagerException;
-import azkaban.utils.StringUtils;
-
/**
* Abstract Servlet that handles auto login when the session hasn't been
* verified.
@@ -61,8 +58,9 @@ public abstract class LoginAbstractAzkabanServlet extends
private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
private static final int DEFAULT_UPLOAD_DISK_SPOOL_SIZE = 20 * 1024 * 1024;
- private static HashMap<String, String> contextType =
- new HashMap<String, String>();
+ private static final HashMap<String, String> contextType =
+ new HashMap<>();
+
static {
contextType.put(".js", "application/javascript");
contextType.put(".css", "text/css");
@@ -83,27 +81,27 @@ public abstract class LoginAbstractAzkabanServlet extends
private boolean shouldLogRawUserAgent = false;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- multipartParser = new MultipartParser(DEFAULT_UPLOAD_DISK_SPOOL_SIZE);
+ this.multipartParser = new MultipartParser(DEFAULT_UPLOAD_DISK_SPOOL_SIZE);
- shouldLogRawUserAgent =
+ this.shouldLogRawUserAgent =
getApplication().getServerProps().getBoolean("accesslog.raw.useragent",
false);
}
- public void setResourceDirectory(File file) {
+ public void setResourceDirectory(final File file) {
this.webResourceDirectory = file;
}
@Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
WebMetrics.INSTANCE.markWebGetCall();
// Set session id
- Session session = getSessionFromRequest(req);
+ final Session session = getSessionFromRequest(req);
logRequest(req, session);
if (hasParam(req, "logout")) {
resp.sendRedirect(req.getContextPath());
@@ -125,7 +123,7 @@ public abstract class LoginAbstractAzkabanServlet extends
handleGet(req, resp, session);
} else {
if (hasParam(req, "ajax")) {
- HashMap<String, String> retVal = new HashMap<String, String>();
+ final HashMap<String, String> retVal = new HashMap<>();
retVal.put("error", "session");
this.writeJSON(resp, retVal);
} else {
@@ -136,12 +134,9 @@ public abstract class LoginAbstractAzkabanServlet extends
/**
* Log out request - the format should be close to Apache access log format
- *
- * @param req
- * @param session
*/
- private void logRequest(HttpServletRequest req, Session session) {
- StringBuilder buf = new StringBuilder();
+ private void logRequest(final HttpServletRequest req, final Session session) {
+ final StringBuilder buf = new StringBuilder();
buf.append(getRealClientIpAddr(req)).append(" ");
if (session != null && session.getUser() != null) {
buf.append(session.getUser().getUserId()).append(" ");
@@ -159,8 +154,8 @@ public abstract class LoginAbstractAzkabanServlet extends
}
buf.append(req.getProtocol()).append("\" ");
- String userAgent = req.getHeader("User-Agent");
- if (shouldLogRawUserAgent) {
+ final String userAgent = req.getHeader("User-Agent");
+ if (this.shouldLogRawUserAgent) {
buf.append(userAgent);
} else {
// simply log a short string to indicate browser or not
@@ -174,30 +169,30 @@ public abstract class LoginAbstractAzkabanServlet extends
logger.info(buf.toString());
}
- private boolean handleFileGet(HttpServletRequest req, HttpServletResponse resp)
+ private boolean handleFileGet(final HttpServletRequest req, final HttpServletResponse resp)
throws IOException {
- if (webResourceDirectory == null) {
+ if (this.webResourceDirectory == null) {
return false;
}
// Check if it's a resource
- String prefix = req.getContextPath() + req.getServletPath();
- String path = req.getRequestURI().substring(prefix.length());
- int index = path.lastIndexOf('.');
+ final String prefix = req.getContextPath() + req.getServletPath();
+ final String path = req.getRequestURI().substring(prefix.length());
+ final int index = path.lastIndexOf('.');
if (index == -1) {
return false;
}
- String extension = path.substring(index);
+ final String extension = path.substring(index);
if (contextType.containsKey(extension)) {
- File file = new File(webResourceDirectory, path);
+ final File file = new File(this.webResourceDirectory, path);
if (!file.exists() || !file.isFile()) {
return false;
}
resp.setContentType(contextType.get(extension));
- OutputStream output = resp.getOutputStream();
+ final OutputStream output = resp.getOutputStream();
BufferedInputStream input = null;
try {
input = new BufferedInputStream(new FileInputStream(file));
@@ -214,26 +209,26 @@ public abstract class LoginAbstractAzkabanServlet extends
return false;
}
- private String getRealClientIpAddr(HttpServletRequest req){
+ private String getRealClientIpAddr(final HttpServletRequest req) {
// If some upstream device added an X-Forwarded-For header
// use it for the client ip
// This will support scenarios where load balancers or gateways
// front the Azkaban web server and a changing Ip address invalidates
// the session
- HashMap<String, String> headers = new HashMap<>();
+ final HashMap<String, String> headers = new HashMap<>();
headers.put(WebUtils.X_FORWARDED_FOR_HEADER,
- req.getHeader(WebUtils.X_FORWARDED_FOR_HEADER.toLowerCase()));
+ req.getHeader(WebUtils.X_FORWARDED_FOR_HEADER.toLowerCase()));
- WebUtils utils = new WebUtils();
+ final WebUtils utils = new WebUtils();
return utils.getRealClientIpAddr(headers, req.getRemoteAddr());
}
- private Session getSessionFromRequest(HttpServletRequest req)
+ private Session getSessionFromRequest(final HttpServletRequest req)
throws ServletException {
- String remoteIp = getRealClientIpAddr(req);
- Cookie cookie = getCookieByName(req, SESSION_ID_NAME);
+ final String remoteIp = getRealClientIpAddr(req);
+ final Cookie cookie = getCookieByName(req, SESSION_ID_NAME);
String sessionId = null;
if (cookie != null) {
@@ -246,12 +241,12 @@ public abstract class LoginAbstractAzkabanServlet extends
return getSessionFromSessionId(sessionId, remoteIp);
}
- private Session getSessionFromSessionId(String sessionId, String remoteIp) {
+ private Session getSessionFromSessionId(final String sessionId, final String remoteIp) {
if (sessionId == null) {
return null;
}
- Session session = getApplication().getSessionCache().getSession(sessionId);
+ final Session session = getApplication().getSessionCache().getSession(sessionId);
// Check if the IP's are equal. If not, we invalidate the sesson.
if (session == null || !remoteIp.equals(session.getIp())) {
return null;
@@ -260,14 +255,14 @@ public abstract class LoginAbstractAzkabanServlet extends
return session;
}
- private void handleLogin(HttpServletRequest req, HttpServletResponse resp)
+ private void handleLogin(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
handleLogin(req, resp, null);
}
- private void handleLogin(HttpServletRequest req, HttpServletResponse resp,
- String errorMsg) throws ServletException, IOException {
- Page page = newPage(req, resp, "azkaban/webapp/servlet/velocity/login.vm");
+ private void handleLogin(final HttpServletRequest req, final HttpServletResponse resp,
+ final String errorMsg) throws ServletException, IOException {
+ final Page page = newPage(req, resp, "azkaban/webapp/servlet/velocity/login.vm");
if (errorMsg != null) {
page.add("errorMsg", errorMsg);
}
@@ -276,7 +271,7 @@ public abstract class LoginAbstractAzkabanServlet extends
}
@Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+ protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
Session session = getSessionFromRequest(req);
WebMetrics.INSTANCE.markWebPostCall();
@@ -284,12 +279,12 @@ public abstract class LoginAbstractAzkabanServlet extends
// Handle Multipart differently from other post messages
if (ServletFileUpload.isMultipartContent(req)) {
- Map<String, Object> params = multipartParser.parseMultipart(req);
+ final Map<String, Object> params = this.multipartParser.parseMultipart(req);
if (session == null) {
// See if the session id is properly set.
if (params.containsKey("session.id")) {
- String sessionId = (String) params.get("session.id");
- String ip = getRealClientIpAddr(req);
+ final String sessionId = (String) params.get("session.id");
+ final String ip = getRealClientIpAddr(req);
session = getSessionFromSessionId(sessionId, ip);
if (session != null) {
@@ -304,13 +299,13 @@ public abstract class LoginAbstractAzkabanServlet extends
return;
}
- String username = (String) params.get("username");
- String password = (String) params.get("password");
- String ip = getRealClientIpAddr(req);
+ final String username = (String) params.get("username");
+ final String password = (String) params.get("password");
+ final String ip = getRealClientIpAddr(req);
try {
session = createSession(username, password, ip);
- } catch (UserManagerException e) {
+ } catch (final UserManagerException e) {
writeResponse(resp, "Login error: " + e.getMessage());
return;
}
@@ -319,7 +314,7 @@ public abstract class LoginAbstractAzkabanServlet extends
handleMultiformPost(req, resp, params, session);
} else if (hasParam(req, "action")
&& getParam(req, "action").equals("login")) {
- HashMap<String, Object> obj = new HashMap<String, Object>();
+ final HashMap<String, Object> obj = new HashMap<>();
handleAjaxLoginAction(req, resp, obj);
this.writeJSON(resp, obj);
} else if (session == null) {
@@ -327,7 +322,7 @@ public abstract class LoginAbstractAzkabanServlet extends
// If it's a post command with curl, we create a temporary session
try {
session = createSession(req);
- } catch (UserManagerException e) {
+ } catch (final UserManagerException e) {
writeResponse(resp, "Login error: " + e.getMessage());
}
@@ -336,7 +331,7 @@ public abstract class LoginAbstractAzkabanServlet extends
// There are no valid sessions and temporary logins, no we either pass
// back a message or redirect.
if (isAjaxCall(req)) {
- String response =
+ final String response =
createJsonResponse("error", "Invalid Session. Need to re-login",
"login", null);
writeResponse(resp, response);
@@ -349,35 +344,35 @@ public abstract class LoginAbstractAzkabanServlet extends
}
}
- private Session createSession(HttpServletRequest req)
+ private Session createSession(final HttpServletRequest req)
throws UserManagerException, ServletException {
- String username = getParam(req, "username");
- String password = getParam(req, "password");
- String ip = getRealClientIpAddr(req);
+ final String username = getParam(req, "username");
+ final String password = getParam(req, "password");
+ final String ip = getRealClientIpAddr(req);
return createSession(username, password, ip);
}
- private Session createSession(String username, String password, String ip)
+ private Session createSession(final String username, final String password, final String ip)
throws UserManagerException, ServletException {
- UserManager manager = getApplication().getUserManager();
- User user = manager.getUser(username, password);
+ final UserManager manager = getApplication().getUserManager();
+ final User user = manager.getUser(username, password);
- String randomUID = UUID.randomUUID().toString();
- Session session = new Session(randomUID, user, ip);
+ final String randomUID = UUID.randomUUID().toString();
+ final Session session = new Session(randomUID, user, ip);
return session;
}
- protected boolean hasPermission(Project project, User user,
- Permission.Type type) {
- UserManager userManager = getApplication().getUserManager();
+ protected boolean hasPermission(final Project project, final User user,
+ final Permission.Type type) {
+ final UserManager userManager = getApplication().getUserManager();
if (project.hasPermission(user, type)) {
return true;
}
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
+ for (final String roleName : user.getRoles()) {
+ final Role role = userManager.getRole(roleName);
if (role.getPermission().isPermissionSet(type)
|| role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
return true;
@@ -387,19 +382,19 @@ public abstract class LoginAbstractAzkabanServlet extends
return false;
}
- protected void handleAjaxLoginAction(HttpServletRequest req,
- HttpServletResponse resp, Map<String, Object> ret)
+ protected void handleAjaxLoginAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Map<String, Object> ret)
throws ServletException {
if (hasParam(req, "username") && hasParam(req, "password")) {
Session session = null;
try {
session = createSession(req);
- } catch (UserManagerException e) {
+ } catch (final UserManagerException e) {
ret.put("error", "Incorrect Login. " + e.getMessage());
return;
}
- Cookie cookie = new Cookie(SESSION_ID_NAME, session.getSessionId());
+ final Cookie cookie = new Cookie(SESSION_ID_NAME, session.getSessionId());
cookie.setPath("/");
resp.addCookie(cookie);
getApplication().getSessionCache().addSession(session);
@@ -410,15 +405,15 @@ public abstract class LoginAbstractAzkabanServlet extends
}
}
- protected void writeResponse(HttpServletResponse resp, String response)
+ protected void writeResponse(final HttpServletResponse resp, final String response)
throws IOException {
- Writer writer = resp.getWriter();
+ final Writer writer = resp.getWriter();
writer.append(response);
writer.flush();
}
- protected boolean isAjaxCall(HttpServletRequest req) throws ServletException {
- String value = req.getHeader("X-Requested-With");
+ protected boolean isAjaxCall(final HttpServletRequest req) throws ServletException {
+ final String value = req.getHeader("X-Requested-With");
if (value != null) {
logger.info("has X-Requested-With " + value);
return value.equals("XMLHttpRequest");
@@ -430,12 +425,6 @@ public abstract class LoginAbstractAzkabanServlet extends
/**
* The get request is handed off to the implementor after the user is logged
* in.
- *
- * @param req
- * @param resp
- * @param session
- * @throws ServletException
- * @throws IOException
*/
protected abstract void handleGet(HttpServletRequest req,
HttpServletResponse resp, Session session) throws ServletException,
@@ -444,12 +433,6 @@ public abstract class LoginAbstractAzkabanServlet extends
/**
* The post request is handed off to the implementor after the user is logged
* in.
- *
- * @param req
- * @param resp
- * @param session
- * @throws ServletException
- * @throws IOException
*/
protected abstract void handlePost(HttpServletRequest req,
HttpServletResponse resp, Session session) throws ServletException,
@@ -458,15 +441,9 @@ public abstract class LoginAbstractAzkabanServlet extends
/**
* The post request is handed off to the implementor after the user is logged
* in.
- *
- * @param req
- * @param resp
- * @param session
- * @throws ServletException
- * @throws IOException
*/
- protected void handleMultiformPost(HttpServletRequest req,
- HttpServletResponse resp, Map<String, Object> multipart, Session session)
+ protected void handleMultiformPost(final HttpServletRequest req,
+ final HttpServletResponse resp, final Map<String, Object> multipart, final Session session)
throws ServletException, IOException {
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
index 353b21e..8d4aa6b 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
@@ -20,10 +20,8 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
-
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
@@ -31,30 +29,30 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class MultipartParser {
- private DiskFileItemFactory _uploadItemFactory;
+ private final DiskFileItemFactory _uploadItemFactory;
- public MultipartParser(int spillToDiskSize) {
- _uploadItemFactory = new DiskFileItemFactory();
- _uploadItemFactory.setSizeThreshold(spillToDiskSize);
+ public MultipartParser(final int spillToDiskSize) {
+ this._uploadItemFactory = new DiskFileItemFactory();
+ this._uploadItemFactory.setSizeThreshold(spillToDiskSize);
}
- @SuppressWarnings("unchecked")
- public Map<String, Object> parseMultipart(HttpServletRequest request)
+ public Map<String, Object> parseMultipart(final HttpServletRequest request)
throws IOException, ServletException {
- ServletFileUpload upload = new ServletFileUpload(_uploadItemFactory);
+ final ServletFileUpload upload = new ServletFileUpload(this._uploadItemFactory);
List<FileItem> items = null;
try {
items = upload.parseRequest(request);
- } catch (FileUploadException e) {
+ } catch (final FileUploadException e) {
throw new ServletException(e);
}
- Map<String, Object> params = new HashMap<String, Object>();
- for (FileItem item : items) {
- if (item.isFormField())
+ final Map<String, Object> params = new HashMap<>();
+ for (final FileItem item : items) {
+ if (item.isFormField()) {
params.put(item.getFieldName(), item.getString());
- else
+ } else {
params.put(item.getFieldName(), item);
+ }
}
return params;
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
index cb8e06e..3a46763 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
@@ -16,21 +16,19 @@
package azkaban.webapp.servlet;
+import azkaban.utils.Utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.tools.generic.EscapeTool;
-import azkaban.utils.Utils;
-
/**
* A page to display
*/
public class Page {
+
private static final String DEFAULT_MIME_TYPE = "text/html";
- @SuppressWarnings("unused")
private final HttpServletRequest request;
private final HttpServletResponse response;
private final VelocityEngine engine;
@@ -40,14 +38,9 @@ public class Page {
/**
* Creates a page and sets up the velocity engine to render
- *
- * @param request
- * @param response
- * @param engine
- * @param template
*/
- public Page(HttpServletRequest request, HttpServletResponse response,
- VelocityEngine engine, String template) {
+ public Page(final HttpServletRequest request, final HttpServletResponse response,
+ final VelocityEngine engine, final String template) {
this.request = Utils.nonNull(request);
this.response = Utils.nonNull(response);
this.engine = Utils.nonNull(engine);
@@ -63,11 +56,11 @@ public class Page {
*/
public void render() {
try {
- response.setHeader("Content-type", "text/html; charset=UTF-8");
- response.setCharacterEncoding("UTF-8");
- response.setContentType(mimeType);
- engine.mergeTemplate(template, "UTF-8", context, response.getWriter());
- } catch (Exception e) {
+ this.response.setHeader("Content-type", "text/html; charset=UTF-8");
+ this.response.setCharacterEncoding("UTF-8");
+ this.response.setContentType(this.mimeType);
+ this.engine.mergeTemplate(this.template, "UTF-8", this.context, this.response.getWriter());
+ } catch (final Exception e) {
throw new PageRenderException(e);
}
}
@@ -75,11 +68,11 @@ public class Page {
/**
* Adds variables to the velocity context.
*/
- public void add(String name, Object value) {
- context.put(name, value);
+ public void add(final String name, final Object value) {
+ this.context.put(name, value);
}
- public void setMimeType(String type) {
- mimeType = type;
+ public void setMimeType(final String type) {
+ this.mimeType = type;
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
index 5b0c774..55c3ef1 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
@@ -20,9 +20,10 @@ package azkaban.webapp.servlet;
* Thrown if there is an error rendering the page
*/
public class PageRenderException extends RuntimeException {
+
private static final long serialVersionUID = -1;
- public PageRenderException(Throwable cause) {
+ public PageRenderException(final Throwable cause) {
super(cause);
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 5a6137b..9e7106f 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -16,36 +16,6 @@
package azkaban.webapp.servlet;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.security.AccessControlException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
import azkaban.executor.ExecutableFlow;
import azkaban.executor.ExecutableJobInfo;
import azkaban.executor.ExecutorManagerAdapter;
@@ -78,8 +48,36 @@ import azkaban.utils.Props;
import azkaban.utils.PropsUtils;
import azkaban.utils.Utils;
import azkaban.webapp.AzkabanWebServer;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
+
private static final String APPLICATION_ZIP_MIME_TYPE = "application/zip";
private static final long serialVersionUID = 1;
private static final Logger logger = Logger
@@ -93,54 +91,51 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
private static final String PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES =
"project.download.buffer.size";
-
+ private static final Comparator<Flow> FLOW_ID_COMPARATOR = new Comparator<Flow>() {
+ @Override
+ public int compare(final Flow f1, final Flow f2) {
+ return f1.getId().compareTo(f2.getId());
+ }
+ };
private ProjectManager projectManager;
private ExecutorManagerAdapter executorManager;
private ScheduleManager scheduleManager;
private UserManager userManager;
private int downloadBufferSize;
-
private boolean lockdownCreateProjects = false;
private boolean lockdownUploadProjects = false;
- private static Comparator<Flow> FLOW_ID_COMPARATOR = new Comparator<Flow>() {
- @Override
- public int compare(Flow f1, Flow f2) {
- return f1.getId().compareTo(f2.getId());
- }
- };
-
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
- projectManager = server.getProjectManager();
- executorManager = server.getExecutorManager();
- scheduleManager = server.getScheduleManager();
- userManager = server.getUserManager();
- lockdownCreateProjects =
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ this.projectManager = server.getProjectManager();
+ this.executorManager = server.getExecutorManager();
+ this.scheduleManager = server.getScheduleManager();
+ this.userManager = server.getUserManager();
+ this.lockdownCreateProjects =
server.getServerProps().getBoolean(LOCKDOWN_CREATE_PROJECTS_KEY, false);
- if (lockdownCreateProjects) {
+ if (this.lockdownCreateProjects) {
logger.info("Creation of projects is locked down");
}
- lockdownUploadProjects =
+ this.lockdownUploadProjects =
server.getServerProps().getBoolean(LOCKDOWN_UPLOAD_PROJECTS_KEY, false);
- if (lockdownUploadProjects) {
+ if (this.lockdownUploadProjects) {
logger.info("Uploading of projects is locked down");
}
- downloadBufferSize =
+ this.downloadBufferSize =
server.getServerProps().getInt(PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES,
8192);
- logger.info("downloadBufferSize: " + downloadBufferSize);
+ logger.info("downloadBufferSize: " + this.downloadBufferSize);
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "project")) {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
@@ -170,7 +165,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
handleReloadProjectWhitelist(req, resp, session);
}
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/projectpage.vm");
page.add("errorMsg", "No project set.");
@@ -178,21 +173,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
@Override
- protected void handleMultiformPost(HttpServletRequest req,
- HttpServletResponse resp, Map<String, Object> params, Session session)
+ protected void handleMultiformPost(final HttpServletRequest req,
+ final HttpServletResponse resp, final Map<String, Object> params, final Session session)
throws ServletException, IOException {
// Looks like a duplicate, but this is a move away from the regular
// multiform post + redirect
// to a more ajax like command.
if (params.containsKey("ajax")) {
- String action = (String) params.get("ajax");
- HashMap<String, String> ret = new HashMap<String, String>();
+ final String action = (String) params.get("ajax");
+ final HashMap<String, String> ret = new HashMap<>();
if (action.equals("upload")) {
ajaxHandleUpload(req, resp, ret, params, session);
}
this.writeJSON(resp, ret);
} else if (params.containsKey("action")) {
- String action = (String) params.get("action");
+ final String action = (String) params.get("action");
if (action.equals("upload")) {
handleUpload(req, resp, params, session);
}
@@ -200,31 +195,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "action")) {
- String action = getParam(req, "action");
+ final String action = getParam(req, "action");
if (action.equals("create")) {
handleCreate(req, resp, session);
}
}
}
- private void handleAJAXAction(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleAJAXAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- String projectName = getParam(req, "project");
- User user = session.getUser();
+ final String projectName = getParam(req, "project");
+ final User user = session.getUser();
- HashMap<String, Object> ret = new HashMap<>();
+ final HashMap<String, Object> ret = new HashMap<>();
ret.put("project", projectName);
- Project project = projectManager.getProject(projectName);
+ final Project project = this.projectManager.getProject(projectName);
if (project == null) {
ret.put("error", "Project " + projectName + " doesn't exist.");
} else {
ret.put("projectId", project.getId());
- String ajaxName = getParam(req, "ajax");
+ final String ajaxName = getParam(req, "ajax");
if (ajaxName.equals("getProjectId")) {
// Do nothing, since projectId is added to all AJAX requests.
} else if (ajaxName.equals("fetchProjectLogs")) {
@@ -307,8 +302,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
this.writeJSON(resp, ret);
}
- private boolean handleAjaxPermission(Project project, User user, Type type,
- Map<String, Object> ret) {
+ private boolean handleAjaxPermission(final Project project, final User user, final Type type,
+ final Map<String, Object> ret) {
if (hasPermission(project, user, type)) {
return true;
}
@@ -317,24 +312,24 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return false;
}
- private void ajaxFetchProjectLogEvents(Project project,
- HttpServletRequest req, HashMap<String, Object> ret) throws ServletException {
- int num = this.getIntParam(req, "size", 1000);
- int skip = this.getIntParam(req, "skip", 0);
+ private void ajaxFetchProjectLogEvents(final Project project,
+ final HttpServletRequest req, final HashMap<String, Object> ret) throws ServletException {
+ final int num = this.getIntParam(req, "size", 1000);
+ final int skip = this.getIntParam(req, "skip", 0);
- List<ProjectLogEvent> logEvents;
+ final List<ProjectLogEvent> logEvents;
try {
- logEvents = projectManager.getProjectEventLogs(project, num, skip);
- } catch (ProjectManagerException e) {
+ logEvents = this.projectManager.getProjectEventLogs(project, num, skip);
+ } catch (final ProjectManagerException e) {
throw new ServletException(e);
}
- String[] columns = new String[] { "user", "time", "type", "message" };
+ final String[] columns = new String[]{"user", "time", "type", "message"};
ret.put("columns", columns);
- List<Object[]> eventData = new ArrayList<>();
- for (ProjectLogEvent events : logEvents) {
- Object[] entry = new Object[4];
+ final List<Object[]> eventData = new ArrayList<>();
+ for (final ProjectLogEvent events : logEvents) {
+ final Object[] entry = new Object[4];
entry[0] = events.getUser();
entry[1] = events.getTime();
entry[2] = events.getType();
@@ -346,20 +341,20 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("logData", eventData);
}
- private List<String> getFlowJobTypes(Flow flow) {
- Set<String> jobTypeSet = new HashSet<String>();
- for (Node node : flow.getNodes()) {
+ private List<String> getFlowJobTypes(final Flow flow) {
+ final Set<String> jobTypeSet = new HashSet<>();
+ for (final Node node : flow.getNodes()) {
jobTypeSet.add(node.getType());
}
- List<String> jobTypes = new ArrayList<String>();
+ final List<String> jobTypes = new ArrayList<>();
jobTypes.addAll(jobTypeSet);
return jobTypes;
}
- private void ajaxFetchFlowDetails(Project project,
- HashMap<String, Object> ret, HttpServletRequest req)
+ private void ajaxFetchFlowDetails(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req)
throws ServletException {
- String flowName = getParam(req, "flow");
+ final String flowName = getParam(req, "flow");
Flow flow = null;
try {
@@ -370,21 +365,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
ret.put("jobTypes", getFlowJobTypes(flow));
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxFetchLastSuccessfulFlowExecution(Project project,
- HashMap<String, Object> ret, HttpServletRequest req)
+ private void ajaxFetchLastSuccessfulFlowExecution(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req)
throws ServletException {
- String flowId = getParam(req, "flow");
+ final String flowId = getParam(req, "flow");
List<ExecutableFlow> exFlows = null;
try {
exFlows =
- executorManager.getExecutableFlows(project.getId(), flowId, 0, 1,
+ this.executorManager.getExecutableFlows(project.getId(), flowId, 0, 1,
Status.SUCCEEDED);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
ret.put("error", "Error retrieving executable flows");
return;
}
@@ -400,20 +395,20 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("execId", exFlows.get(0).getExecutionId());
}
- private void ajaxFetchFlowExecutions(Project project,
- HashMap<String, Object> ret, HttpServletRequest req)
+ private void ajaxFetchFlowExecutions(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req)
throws ServletException {
- String flowId = getParam(req, "flow");
- int from = Integer.valueOf(getParam(req, "start"));
- int length = Integer.valueOf(getParam(req, "length"));
+ final String flowId = getParam(req, "flow");
+ final int from = Integer.valueOf(getParam(req, "start"));
+ final int length = Integer.valueOf(getParam(req, "length"));
- ArrayList<ExecutableFlow> exFlows = new ArrayList<ExecutableFlow>();
+ final ArrayList<ExecutableFlow> exFlows = new ArrayList<>();
int total = 0;
try {
total =
- executorManager.getExecutableFlows(project.getId(), flowId, from,
+ this.executorManager.getExecutableFlows(project.getId(), flowId, from,
length, exFlows);
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
ret.put("error", "Error retrieving executable flows");
}
@@ -422,9 +417,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("from", from);
ret.put("length", length);
- ArrayList<Object> history = new ArrayList<Object>();
- for (ExecutableFlow flow : exFlows) {
- HashMap<String, Object> flowInfo = new HashMap<String, Object>();
+ final ArrayList<Object> history = new ArrayList<>();
+ for (final ExecutableFlow flow : exFlows) {
+ final HashMap<String, Object> flowInfo = new HashMap<>();
flowInfo.put("execId", flow.getExecutionId());
flowInfo.put("flowId", flow.getFlowId());
flowInfo.put("projectId", flow.getProjectId());
@@ -444,22 +439,16 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
* Download project zip file from DB and send it back client.
*
* This method requires a project name and an optional project version.
- *
- * @param req
- * @param resp
- * @param session
- * @throws ServletException
- * @throws IOException
*/
- private void handleDownloadProject(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleDownloadProject(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- User user = session.getUser();
- String projectName = getParam(req, "project");
+ final User user = session.getUser();
+ final String projectName = getParam(req, "project");
logger.info(user.getUserId() + " is downloading project: " + projectName);
- Project project = projectManager.getProject(projectName);
+ final Project project = this.projectManager.getProject(projectName);
if (project == null) {
this.setErrorMessageInCookie(resp, "Project " + projectName
+ " doesn't exist.");
@@ -477,15 +466,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
OutputStream outStream = null;
try {
projectFileHandler =
- projectManager.getProjectFileHandler(project, version);
+ this.projectManager.getProjectFileHandler(project, version);
if (projectFileHandler == null) {
this.setErrorMessageInCookie(resp, "Project " + projectName
+ " with version " + version + " doesn't exist");
resp.sendRedirect(req.getContextPath());
return;
}
- File projectZipFile = projectFileHandler.getLocalFile();
- String logStr =
+ final File projectZipFile = projectFileHandler.getLocalFile();
+ final String logStr =
String.format(
"downloading project zip file for project \"%s\" at \"%s\""
+ " size: %d type: %s fileName: \"%s\"",
@@ -500,8 +489,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
resp.setContentType(APPLICATION_ZIP_MIME_TYPE);
- String headerKey = "Content-Disposition";
- String headerValue =
+ final String headerKey = "Content-Disposition";
+ final String headerValue =
String.format("attachment; filename=\"%s\"",
projectFileHandler.getFileName());
resp.setHeader(headerKey, headerValue);
@@ -512,14 +501,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
outStream = resp.getOutputStream();
- byte[] buffer = new byte[downloadBufferSize];
+ final byte[] buffer = new byte[this.downloadBufferSize];
int bytesRead = -1;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
- } catch (Throwable e) {
+ } catch (final Throwable e) {
logger.error(
"Encountered error while downloading project zip file for project: "
+ projectName + " by user: " + user.getUserId(), e);
@@ -539,27 +528,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
* validate readiness of a project and user permission and use projectManager
* to purge the project if things looks good
**/
- private void handlePurgeProject(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handlePurgeProject(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- User user = session.getUser();
- HashMap<String, Object> ret = new HashMap<String, Object>();
+ final User user = session.getUser();
+ final HashMap<String, Object> ret = new HashMap<>();
boolean isOperationSuccessful = true;
try {
Project project = null;
- String projectParam = getParam(req, "project");
+ final String projectParam = getParam(req, "project");
if (StringUtils.isNumeric(projectParam)) {
- project = projectManager.getProject(Integer.parseInt(projectParam)); // get
- // project
- // by
- // Id
+ project = this.projectManager.getProject(Integer.parseInt(projectParam)); // get
+ // project
+ // by
+ // Id
} else {
- project = projectManager.getProject(projectParam); // get project by
- // name (name cannot
- // start
- // from ints)
+ project = this.projectManager.getProject(projectParam); // get project by
+ // name (name cannot
+ // start
+ // from ints)
}
// invalid project
@@ -570,7 +559,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
// project is already deleted
if (isOperationSuccessful
- && projectManager.isActiveProject(project.getId())) {
+ && this.projectManager.isActiveProject(project.getId())) {
ret.put("error", "Project " + project.getName()
+ " should be deleted before purging");
isOperationSuccessful = false;
@@ -584,9 +573,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
if (isOperationSuccessful) {
- projectManager.purgeProject(project, user);
+ this.projectManager.purgeProject(project, user);
}
- } catch (Exception e) {
+ } catch (final Exception e) {
ret.put("error", e.getMessage());
isOperationSuccessful = false;
}
@@ -595,13 +584,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
this.writeJSON(resp, ret);
}
- private void handleRemoveProject(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleRemoveProject(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- User user = session.getUser();
- String projectName = getParam(req, "project");
+ final User user = session.getUser();
+ final String projectName = getParam(req, "project");
- Project project = projectManager.getProject(projectName);
+ final Project project = this.projectManager.getProject(projectName);
if (project == null) {
this.setErrorMessageInCookie(resp, "Project " + projectName
+ " doesn't exist.");
@@ -619,14 +608,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
// Check if scheduled
Schedule sflow = null;
try {
- for (Schedule flow : scheduleManager.getSchedules()) {
+ for (final Schedule flow : this.scheduleManager.getSchedules()) {
if (flow.getProjectId() == project.getId()) {
sflow = flow;
break;
}
}
- } catch (ScheduleManagerException e) {
+ } catch (final ScheduleManagerException e) {
throw new ServletException(e);
}
@@ -640,7 +629,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
// Check if executing
ExecutableFlow exflow = null;
- for (ExecutableFlow flow : executorManager.getRunningFlows()) {
+ for (final ExecutableFlow flow : this.executorManager.getRunningFlows()) {
if (flow.getProjectId() == project.getId()) {
exflow = flow;
break;
@@ -654,8 +643,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
try {
- projectManager.removeProject(project, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.removeProject(project, user);
+ } catch (final ProjectManagerException e) {
this.setErrorMessageInCookie(resp, e.getMessage());
resp.sendRedirect(req.getRequestURI() + "?project=" + projectName);
return;
@@ -666,49 +655,49 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
resp.sendRedirect(req.getContextPath());
}
- private void ajaxChangeDescription(Project project,
- HashMap<String, Object> ret, HttpServletRequest req, User user)
+ private void ajaxChangeDescription(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
throws ServletException {
- String description = getParam(req, "description");
+ final String description = getParam(req, "description");
project.setDescription(description);
try {
- projectManager.updateProjectDescription(project, description, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.updateProjectDescription(project, description, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxFetchJobInfo(Project project, HashMap<String, Object> ret,
- HttpServletRequest req) throws ServletException {
- String flowName = getParam(req, "flowName");
- String jobName = getParam(req, "jobName");
+ private void ajaxFetchJobInfo(final Project project, final HashMap<String, Object> ret,
+ final HttpServletRequest req) throws ServletException {
+ final String flowName = getParam(req, "flowName");
+ final String jobName = getParam(req, "jobName");
- Flow flow = project.getFlow(flowName);
+ final Flow flow = project.getFlow(flowName);
if (flow == null) {
ret.put("error",
"Flow " + flowName + " not found in project " + project.getName());
return;
}
- Node node = flow.getNode(jobName);
+ final Node node = flow.getNode(jobName);
if (node == null) {
ret.put("error", "Job " + jobName + " not found in flow " + flowName);
return;
}
- Props prop;
+ final Props prop;
try {
- prop = projectManager.getProperties(project, node.getJobSource());
- } catch (ProjectManagerException e) {
+ prop = this.projectManager.getProperties(project, node.getJobSource());
+ } catch (final ProjectManagerException e) {
ret.put("error", "Failed to retrieve job properties!");
return;
}
Props overrideProp;
try {
- overrideProp = projectManager.getJobOverrideProperty(project, jobName);
- } catch (ProjectManagerException e) {
+ overrideProp = this.projectManager.getJobOverrideProperty(project, jobName);
+ } catch (final ProjectManagerException e) {
ret.put("error", "Failed to retrieve job override properties!");
return;
}
@@ -720,55 +709,54 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
overrideProp = new Props(prop);
}
- Map<String, String> generalParams = new HashMap<String, String>();
- Map<String, String> overrideParams = new HashMap<String, String>();
- for (String ps : prop.getKeySet()) {
+ final Map<String, String> generalParams = new HashMap<>();
+ final Map<String, String> overrideParams = new HashMap<>();
+ for (final String ps : prop.getKeySet()) {
generalParams.put(ps, prop.getString(ps));
}
- for (String ops : overrideProp.getKeySet()) {
+ for (final String ops : overrideProp.getKeySet()) {
overrideParams.put(ops, overrideProp.getString(ops));
}
ret.put("generalParams", generalParams);
ret.put("overrideParams", overrideParams);
}
- private void ajaxSetJobOverrideProperty(Project project,
- HashMap<String, Object> ret, HttpServletRequest req, User user)
+ private void ajaxSetJobOverrideProperty(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
throws ServletException {
- String flowName = getParam(req, "flowName");
- String jobName = getParam(req, "jobName");
+ final String flowName = getParam(req, "flowName");
+ final String jobName = getParam(req, "jobName");
- Flow flow = project.getFlow(flowName);
+ final Flow flow = project.getFlow(flowName);
if (flow == null) {
ret.put("error",
"Flow " + flowName + " not found in project " + project.getName());
return;
}
- Node node = flow.getNode(jobName);
+ final Node node = flow.getNode(jobName);
if (node == null) {
ret.put("error", "Job " + jobName + " not found in flow " + flowName);
return;
}
- Map<String, String> jobParamGroup = this.getParamGroup(req, "jobOverride");
- @SuppressWarnings("unchecked")
- Props overrideParams = new Props(null, jobParamGroup);
+ final Map<String, String> jobParamGroup = this.getParamGroup(req, "jobOverride");
+ final Props overrideParams = new Props(null, jobParamGroup);
try {
- projectManager.setJobOverrideProperty(project, overrideParams, jobName, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.setJobOverrideProperty(project, overrideParams, jobName, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", "Failed to upload job override property");
}
}
- private void ajaxFetchProjectFlows(Project project,
- HashMap<String, Object> ret, HttpServletRequest req)
+ private void ajaxFetchProjectFlows(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req)
throws ServletException {
- ArrayList<Map<String, Object>> flowList =
- new ArrayList<Map<String, Object>>();
- for (Flow flow : project.getFlows()) {
- HashMap<String, Object> flowObj = new HashMap<String, Object>();
+ final ArrayList<Map<String, Object>> flowList =
+ new ArrayList<>();
+ for (final Flow flow : project.getFlows()) {
+ final HashMap<String, Object> flowObj = new HashMap<>();
flowObj.put("flowId", flow.getId());
flowList.add(flowObj);
}
@@ -776,21 +764,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("flows", flowList);
}
- private void ajaxFetchFlowGraph(Project project, HashMap<String, Object> ret,
- HttpServletRequest req) throws ServletException {
- String flowId = getParam(req, "flow");
+ private void ajaxFetchFlowGraph(final Project project, final HashMap<String, Object> ret,
+ final HttpServletRequest req) throws ServletException {
+ final String flowId = getParam(req, "flow");
fillFlowInfo(project, flowId, ret);
}
- private void fillFlowInfo(Project project, String flowId,
- HashMap<String, Object> ret) {
- Flow flow = project.getFlow(flowId);
+ private void fillFlowInfo(final Project project, final String flowId,
+ final HashMap<String, Object> ret) {
+ final Flow flow = project.getFlow(flowId);
- ArrayList<Map<String, Object>> nodeList =
- new ArrayList<Map<String, Object>>();
- for (Node node : flow.getNodes()) {
- HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+ final ArrayList<Map<String, Object>> nodeList =
+ new ArrayList<>();
+ for (final Node node : flow.getNodes()) {
+ final HashMap<String, Object> nodeObj = new HashMap<>();
nodeObj.put("id", node.getId());
nodeObj.put("type", node.getType());
if (node.getEmbeddedFlowId() != null) {
@@ -799,10 +787,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
nodeList.add(nodeObj);
- Set<Edge> inEdges = flow.getInEdges(node.getId());
+ final Set<Edge> inEdges = flow.getInEdges(node.getId());
if (inEdges != null && !inEdges.isEmpty()) {
- ArrayList<String> inEdgesList = new ArrayList<String>();
- for (Edge edge : inEdges) {
+ final ArrayList<String> inEdgesList = new ArrayList<>();
+ for (final Edge edge : inEdges) {
inEdgesList.add(edge.getSourceId());
}
Collections.sort(inEdgesList);
@@ -812,8 +800,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
Collections.sort(nodeList, new Comparator<Map<String, Object>>() {
@Override
- public int compare(Map<String, Object> o1, Map<String, Object> o2) {
- String id = (String) o1.get("id");
+ public int compare(final Map<String, Object> o1, final Map<String, Object> o2) {
+ final String id = (String) o1.get("id");
return id.compareTo((String) o2.get("id"));
}
});
@@ -822,14 +810,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("nodes", nodeList);
}
- private void ajaxFetchFlowNodeData(Project project,
- HashMap<String, Object> ret, HttpServletRequest req)
+ private void ajaxFetchFlowNodeData(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req)
throws ServletException {
- String flowId = getParam(req, "flow");
- Flow flow = project.getFlow(flowId);
+ final String flowId = getParam(req, "flow");
+ final Flow flow = project.getFlow(flowId);
- String nodeId = getParam(req, "node");
- Node node = flow.getNode(nodeId);
+ final String nodeId = getParam(req, "node");
+ final Node node = flow.getNode(nodeId);
if (node == null) {
ret.put("error", "Job " + nodeId + " doesn't exist.");
@@ -840,10 +828,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("flow", flowId);
ret.put("type", node.getType());
- Props props;
+ final Props props;
try {
- props = projectManager.getProperties(project, node.getJobSource());
- } catch (ProjectManagerException e) {
+ props = this.projectManager.getProperties(project, node.getJobSource());
+ } catch (final ProjectManagerException e) {
ret.put("error", "Failed to upload job override property for " + nodeId);
return;
}
@@ -853,7 +841,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return;
}
- Map<String, String> properties = PropsUtils.toStringMap(props, true);
+ final Map<String, String> properties = PropsUtils.toStringMap(props, true);
ret.put("props", properties);
if (node.getType().equals("flow")) {
@@ -863,31 +851,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
}
- private void ajaxFetchFlow(Project project, HashMap<String, Object> ret,
- HttpServletRequest req) throws ServletException {
- String flowId = getParam(req, "flow");
- Flow flow = project.getFlow(flowId);
+ private void ajaxFetchFlow(final Project project, final HashMap<String, Object> ret,
+ final HttpServletRequest req) throws ServletException {
+ final String flowId = getParam(req, "flow");
+ final Flow flow = project.getFlow(flowId);
- ArrayList<Node> flowNodes = new ArrayList<Node>(flow.getNodes());
+ final ArrayList<Node> flowNodes = new ArrayList<>(flow.getNodes());
Collections.sort(flowNodes, NODE_LEVEL_COMPARATOR);
- ArrayList<Object> nodeList = new ArrayList<Object>();
- for (Node node : flowNodes) {
- HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+ final ArrayList<Object> nodeList = new ArrayList<>();
+ for (final Node node : flowNodes) {
+ final HashMap<String, Object> nodeObj = new HashMap<>();
nodeObj.put("id", node.getId());
- ArrayList<String> dependencies = new ArrayList<String>();
+ final ArrayList<String> dependencies = new ArrayList<>();
Collection<Edge> collection = flow.getInEdges(node.getId());
if (collection != null) {
- for (Edge edge : collection) {
+ for (final Edge edge : collection) {
dependencies.add(edge.getSourceId());
}
}
- ArrayList<String> dependents = new ArrayList<String>();
+ final ArrayList<String> dependents = new ArrayList<>();
collection = flow.getOutEdges(node.getId());
if (collection != null) {
- for (Edge edge : collection) {
+ for (final Edge edge : collection) {
dependents.add(edge.getTargetId());
}
}
@@ -902,15 +890,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("nodes", nodeList);
}
- private void ajaxAddProxyUser(Project project, HashMap<String, Object> ret,
- HttpServletRequest req, User user) throws ServletException {
- String name = getParam(req, "name");
+ private void ajaxAddProxyUser(final Project project, final HashMap<String, Object> ret,
+ final HttpServletRequest req, final User user) throws ServletException {
+ final String name = getParam(req, "name");
logger.info("Adding proxy user " + name + " by " + user.getUserId());
- if (userManager.validateProxyUser(name, user)) {
+ if (this.userManager.validateProxyUser(name, user)) {
try {
- projectManager.addProjectProxyUser(project, name, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.addProjectProxyUser(project, name, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
} else {
@@ -920,31 +908,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
}
- private void ajaxRemoveProxyUser(Project project,
- HashMap<String, Object> ret, HttpServletRequest req, User user)
+ private void ajaxRemoveProxyUser(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
throws ServletException {
- String name = getParam(req, "name");
+ final String name = getParam(req, "name");
logger.info("Removing proxy user " + name + " by " + user.getUserId());
try {
- projectManager.removeProjectProxyUser(project, name, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.removeProjectProxyUser(project, name, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxAddPermission(Project project, HashMap<String, Object> ret,
- HttpServletRequest req, User user) throws ServletException {
- String name = getParam(req, "name");
- boolean group = Boolean.parseBoolean(getParam(req, "group"));
+ private void ajaxAddPermission(final Project project, final HashMap<String, Object> ret,
+ final HttpServletRequest req, final User user) throws ServletException {
+ final String name = getParam(req, "name");
+ final boolean group = Boolean.parseBoolean(getParam(req, "group"));
if (group) {
if (project.getGroupPermission(name) != null) {
ret.put("error", "Group permission already exists.");
return;
}
- if (!userManager.validateGroup(name)) {
+ if (!this.userManager.validateGroup(name)) {
ret.put("error", "Group is invalid.");
return;
}
@@ -953,21 +941,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("error", "User permission already exists.");
return;
}
- if (!userManager.validateUser(name)) {
+ if (!this.userManager.validateUser(name)) {
ret.put("error", "User is invalid.");
return;
}
}
- boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
- boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
- boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
- boolean execute =
+ final boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
+ final boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
+ final boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
+ final boolean execute =
Boolean.parseBoolean(getParam(req, "permissions[execute]"));
- boolean schedule =
+ final boolean schedule =
Boolean.parseBoolean(getParam(req, "permissions[schedule]"));
- Permission perm = new Permission();
+ final Permission perm = new Permission();
if (admin) {
perm.setPermission(Type.ADMIN, true);
} else {
@@ -978,27 +966,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
try {
- projectManager.updateProjectPermission(project, name, perm, group, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.updateProjectPermission(project, name, perm, group, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
}
- private void ajaxChangePermissions(Project project,
- HashMap<String, Object> ret, HttpServletRequest req, User user)
+ private void ajaxChangePermissions(final Project project,
+ final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
throws ServletException {
- boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
- boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
- boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
- boolean execute =
+ final boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
+ final boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
+ final boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
+ final boolean execute =
Boolean.parseBoolean(getParam(req, "permissions[execute]"));
- boolean schedule =
+ final boolean schedule =
Boolean.parseBoolean(getParam(req, "permissions[schedule]"));
- boolean group = Boolean.parseBoolean(getParam(req, "group"));
+ final boolean group = Boolean.parseBoolean(getParam(req, "group"));
- String name = getParam(req, "name");
- Permission perm;
+ final String name = getParam(req, "name");
+ final Permission perm;
if (group) {
perm = project.getGroupPermission(name);
} else {
@@ -1026,15 +1014,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
try {
- projectManager
+ this.projectManager
.updateProjectPermission(project, name, perm, group, user);
- } catch (ProjectManagerException e) {
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
} else {
try {
- projectManager.removeProjectPermission(project, name, group, user);
- } catch (ProjectManagerException e) {
+ this.projectManager.removeProjectPermission(project, name, group, user);
+ } catch (final ProjectManagerException e) {
ret.put("error", e.getMessage());
}
}
@@ -1043,16 +1031,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
/**
* this only returns user permissions, but not group permissions and proxy
* users
- *
- * @param project
- * @param ret
*/
- private void ajaxGetPermissions(Project project, HashMap<String, Object> ret) {
- ArrayList<HashMap<String, Object>> permissions =
- new ArrayList<HashMap<String, Object>>();
- for (Pair<String, Permission> perm : project.getUserPermissions()) {
- HashMap<String, Object> permObj = new HashMap<String, Object>();
- String userId = perm.getFirst();
+ private void ajaxGetPermissions(final Project project, final HashMap<String, Object> ret) {
+ final ArrayList<HashMap<String, Object>> permissions =
+ new ArrayList<>();
+ for (final Pair<String, Permission> perm : project.getUserPermissions()) {
+ final HashMap<String, Object> permObj = new HashMap<>();
+ final String userId = perm.getFirst();
permObj.put("username", userId);
permObj.put("permission", perm.getSecond().toStringArray());
@@ -1062,13 +1047,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("permissions", permissions);
}
- private void ajaxGetGroupPermissions(Project project,
- HashMap<String, Object> ret) {
- ArrayList<HashMap<String, Object>> permissions =
- new ArrayList<HashMap<String, Object>>();
- for (Pair<String, Permission> perm : project.getGroupPermissions()) {
- HashMap<String, Object> permObj = new HashMap<String, Object>();
- String userId = perm.getFirst();
+ private void ajaxGetGroupPermissions(final Project project,
+ final HashMap<String, Object> ret) {
+ final ArrayList<HashMap<String, Object>> permissions =
+ new ArrayList<>();
+ for (final Pair<String, Permission> perm : project.getGroupPermissions()) {
+ final HashMap<String, Object> permObj = new HashMap<>();
+ final String userId = perm.getFirst();
permObj.put("username", userId);
permObj.put("permission", perm.getSecond().toStringArray());
@@ -1078,23 +1063,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
ret.put("permissions", permissions);
}
- private void ajaxGetProxyUsers(Project project, HashMap<String, Object> ret) {
- String[] proxyUsers = project.getProxyUsers().toArray(new String[0]);
+ private void ajaxGetProxyUsers(final Project project, final HashMap<String, Object> ret) {
+ final String[] proxyUsers = project.getProxyUsers().toArray(new String[0]);
ret.put("proxyUsers", proxyUsers);
}
- private void handleProjectLogsPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleProjectLogsPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/projectlogpage.vm");
- String projectName = getParam(req, "project");
+ final String projectName = getParam(req, "project");
- User user = session.getUser();
+ final User user = session.getUser();
Project project = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " doesn't exist.");
} else {
@@ -1106,10 +1091,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("project", project);
page.add("admins", Utils.flattenToString(
project.getUsersWithPermission(Type.ADMIN), ","));
- Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+ final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
page.add("userpermission", perm);
- boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
+ final boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
if (adminPerm) {
page.add("admin", true);
}
@@ -1121,31 +1106,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("exec", false);
}
}
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
}
- int numBytes = 1024;
+ final int numBytes = 1024;
// Really sucks if we do a lot of these because it'll eat up memory fast.
// But it's expected that this won't be a heavily used thing. If it is,
// then we'll revisit it to make it more stream friendly.
- StringBuffer buffer = new StringBuffer(numBytes);
+ final StringBuffer buffer = new StringBuffer(numBytes);
page.add("log", buffer.toString());
page.render();
}
- private void handleJobHistoryPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleJobHistoryPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/jobhistorypage.vm");
- String projectName = getParam(req, "project");
- User user = session.getUser();
+ final String projectName = getParam(req, "project");
+ final User user = session.getUser();
- Project project = projectManager.getProject(projectName);
+ final Project project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " doesn't exist.");
page.render();
@@ -1157,23 +1142,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return;
}
- String jobId = getParam(req, "job");
- int pageNum = getIntParam(req, "page", 1);
- int pageSize = getIntParam(req, "size", 25);
+ final String jobId = getParam(req, "job");
+ final int pageNum = getIntParam(req, "page", 1);
+ final int pageSize = getIntParam(req, "size", 25);
page.add("projectId", project.getId());
page.add("projectName", project.getName());
page.add("jobid", jobId);
page.add("page", pageNum);
- int skipPage = (pageNum - 1) * pageSize;
+ final int skipPage = (pageNum - 1) * pageSize;
int numResults = 0;
try {
- numResults = executorManager.getNumberOfJobExecutions(project, jobId);
- int maxPage = (numResults / pageSize) + 1;
+ numResults = this.executorManager.getNumberOfJobExecutions(project, jobId);
+ final int maxPage = (numResults / pageSize) + 1;
List<ExecutableJobInfo> jobInfo =
- executorManager.getExecutableJobs(project, jobId, skipPage, pageSize);
+ this.executorManager.getExecutableJobs(project, jobId, skipPage, pageSize);
if (jobInfo == null || jobInfo.isEmpty()) {
jobInfo = null;
@@ -1189,16 +1174,16 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
pageNum + 1, maxPage)));
if (jobInfo != null) {
- ArrayList<Object> dataSeries = new ArrayList<Object>();
- for (ExecutableJobInfo info : jobInfo) {
- Map<String, Object> map = info.toObject();
+ final ArrayList<Object> dataSeries = new ArrayList<>();
+ for (final ExecutableJobInfo info : jobInfo) {
+ final Map<String, Object> map = info.toObject();
dataSeries.add(map);
}
page.add("dataSeries", JSONUtils.toJSON(dataSeries));
} else {
page.add("dataSeries", "[]");
}
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
page.add("errorMsg", e.getMessage());
}
@@ -1207,52 +1192,52 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
if (pageNum > 3) {
pageStartValue = pageNum - 2;
}
- int maxPage = (numResults / pageSize) + 1;
+ final int maxPage = (numResults / pageSize) + 1;
page.add(
"page1",
new PageSelection(String.valueOf(pageStartValue), pageSize,
pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
- pageStartValue, maxPage)));
+ pageStartValue, maxPage)));
pageStartValue++;
page.add(
"page2",
new PageSelection(String.valueOf(pageStartValue), pageSize,
pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
- pageStartValue, maxPage)));
+ pageStartValue, maxPage)));
pageStartValue++;
page.add(
"page3",
new PageSelection(String.valueOf(pageStartValue), pageSize,
pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
- pageStartValue, maxPage)));
+ pageStartValue, maxPage)));
pageStartValue++;
page.add(
"page4",
new PageSelection(String.valueOf(pageStartValue), pageSize,
pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
- pageStartValue, maxPage)));
+ pageStartValue, maxPage)));
pageStartValue++;
page.add(
"page5",
new PageSelection(String.valueOf(pageStartValue), pageSize,
pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
- pageStartValue, maxPage)));
+ pageStartValue, maxPage)));
page.render();
}
- private void handlePermissionPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException {
- Page page =
+ private void handlePermissionPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/permissionspage.vm");
- String projectName = getParam(req, "project");
- User user = session.getUser();
+ final String projectName = getParam(req, "project");
+ final User user = session.getUser();
Project project = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " not found.");
} else {
@@ -1265,26 +1250,26 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("username", user.getUserId());
page.add("admins", Utils.flattenToString(
project.getUsersWithPermission(Type.ADMIN), ","));
- Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+ final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
page.add("userpermission", perm);
if (perm.isPermissionSet(Type.ADMIN)) {
page.add("admin", true);
}
- List<Pair<String, Permission>> userPermission =
+ final List<Pair<String, Permission>> userPermission =
project.getUserPermissions();
if (userPermission != null && !userPermission.isEmpty()) {
page.add("permissions", userPermission);
}
- List<Pair<String, Permission>> groupPermission =
+ final List<Pair<String, Permission>> groupPermission =
project.getGroupPermissions();
if (groupPermission != null && !groupPermission.isEmpty()) {
page.add("groupPermissions", groupPermission);
}
- Set<String> proxyUsers = project.getProxyUsers();
+ final Set<String> proxyUsers = project.getProxyUsers();
if (proxyUsers != null && !proxyUsers.isEmpty()) {
page.add("proxyUsers", proxyUsers);
}
@@ -1293,27 +1278,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("isAdmin", true);
}
}
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
}
page.render();
}
- private void handleJobPage(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException {
- Page page =
+ private void handleJobPage(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/jobpage.vm");
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
- String jobName = getParam(req, "job");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
+ final String jobName = getParam(req, "job");
- User user = session.getUser();
+ final User user = session.getUser();
Project project = null;
Flow flow = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " not found.");
page.render();
@@ -1333,30 +1318,30 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
page.add("flowid", flow.getId());
- Node node = flow.getNode(jobName);
+ final Node node = flow.getNode(jobName);
if (node == null) {
page.add("errorMsg", "Job " + jobName + " not found.");
page.render();
return;
}
- Props prop = projectManager.getProperties(project, node.getJobSource());
+ final Props prop = this.projectManager.getProperties(project, node.getJobSource());
Props overrideProp =
- projectManager.getJobOverrideProperty(project, jobName);
+ this.projectManager.getJobOverrideProperty(project, jobName);
if (overrideProp == null) {
overrideProp = new Props();
}
- Props comboProp = new Props(prop);
- for (String key : overrideProp.getKeySet()) {
+ final Props comboProp = new Props(prop);
+ for (final String key : overrideProp.getKeySet()) {
comboProp.put(key, overrideProp.get(key));
}
page.add("jobid", node.getId());
page.add("jobtype", node.getType());
- ArrayList<String> dependencies = new ArrayList<String>();
- Set<Edge> inEdges = flow.getInEdges(node.getId());
+ final ArrayList<String> dependencies = new ArrayList<>();
+ final Set<Edge> inEdges = flow.getInEdges(node.getId());
if (inEdges != null) {
- for (Edge dependency : inEdges) {
+ for (final Edge dependency : inEdges) {
dependencies.add(dependency.getSourceId());
}
}
@@ -1364,10 +1349,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("dependencies", dependencies);
}
- ArrayList<String> dependents = new ArrayList<String>();
- Set<Edge> outEdges = flow.getOutEdges(node.getId());
+ final ArrayList<String> dependents = new ArrayList<>();
+ final Set<Edge> outEdges = flow.getOutEdges(node.getId());
if (outEdges != null) {
- for (Edge dependent : outEdges) {
+ for (final Edge dependent : outEdges) {
dependents.add(dependent.getTargetId());
}
}
@@ -1376,8 +1361,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
// Resolve property dependencies
- ArrayList<String> source = new ArrayList<String>();
- String nodeSource = node.getPropsSource();
+ final ArrayList<String> source = new ArrayList<>();
+ final String nodeSource = node.getPropsSource();
if (nodeSource != null) {
source.add(nodeSource);
FlowProps parent = flow.getFlowProps(nodeSource);
@@ -1390,38 +1375,38 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("properties", source);
}
- ArrayList<Pair<String, String>> parameters =
- new ArrayList<Pair<String, String>>();
+ final ArrayList<Pair<String, String>> parameters =
+ new ArrayList<>();
// Parameter
- for (String key : comboProp.getKeySet()) {
- String value = comboProp.get(key);
- parameters.add(new Pair<String, String>(key, value));
+ for (final String key : comboProp.getKeySet()) {
+ final String value = comboProp.get(key);
+ parameters.add(new Pair<>(key, value));
}
page.add("parameters", parameters);
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
- } catch (ProjectManagerException e) {
+ } catch (final ProjectManagerException e) {
page.add("errorMsg", e.getMessage());
}
page.render();
}
- private void handlePropertyPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException {
- Page page =
+ private void handlePropertyPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/propertypage.vm");
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
- String jobName = getParam(req, "job");
- String propSource = getParam(req, "prop");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
+ final String jobName = getParam(req, "job");
+ final String propSource = getParam(req, "prop");
- User user = session.getUser();
+ final User user = session.getUser();
Project project = null;
Flow flow = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " not found.");
logger.info("Display project property. Project " + projectName + " not found.");
@@ -1445,7 +1430,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
page.add("flowid", flow.getId());
- Node node = flow.getNode(jobName);
+ final Node node = flow.getNode(jobName);
if (node == null) {
page.add("errorMsg", "Job " + jobName + " not found.");
logger.info("Display project property. Project " + projectName +
@@ -1454,7 +1439,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return;
}
- Props prop = projectManager.getProperties(project, propSource);
+ final Props prop = this.projectManager.getProperties(project, propSource);
if (prop == null) {
page.add("errorMsg", "Property " + propSource + " not found.");
logger.info("Display project property. Project " + projectName +
@@ -1468,7 +1453,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("jobid", node.getId());
// Resolve property dependencies
- ArrayList<String> inheritProps = new ArrayList<String>();
+ final ArrayList<String> inheritProps = new ArrayList<>();
FlowProps parent = flow.getFlowProps(propSource);
while (parent.getInheritedSource() != null) {
inheritProps.add(parent.getInheritedSource());
@@ -1478,7 +1463,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("inheritedproperties", inheritProps);
}
- ArrayList<String> dependingProps = new ArrayList<String>();
+ final ArrayList<String> dependingProps = new ArrayList<>();
FlowProps child =
flow.getFlowProps(flow.getNode(jobName).getPropsSource());
while (!child.getSource().equals(propSource)) {
@@ -1489,37 +1474,37 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("dependingproperties", dependingProps);
}
- ArrayList<Pair<String, String>> parameters =
- new ArrayList<Pair<String, String>>();
+ final ArrayList<Pair<String, String>> parameters =
+ new ArrayList<>();
// Parameter
- for (String key : prop.getKeySet()) {
- String value = prop.get(key);
- parameters.add(new Pair<String, String>(key, value));
+ for (final String key : prop.getKeySet()) {
+ final String value = prop.get(key);
+ parameters.add(new Pair<>(key, value));
}
page.add("parameters", parameters);
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
- } catch (ProjectManagerException e) {
+ } catch (final ProjectManagerException e) {
page.add("errorMsg", e.getMessage());
}
page.render();
}
- private void handleFlowPage(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException {
- Page page =
+ private void handleFlowPage(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/flowpage.vm");
- String projectName = getParam(req, "project");
- String flowName = getParam(req, "flow");
+ final String projectName = getParam(req, "project");
+ final String flowName = getParam(req, "flow");
- User user = session.getUser();
+ final User user = session.getUser();
Project project = null;
Flow flow = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " not found.");
page.render();
@@ -1538,24 +1523,24 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
} else {
page.add("flowid", flow.getId());
}
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
}
page.render();
}
- private void handleProjectPage(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException {
- Page page =
+ private void handleProjectPage(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException {
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/projectpage.vm");
- String projectName = getParam(req, "project");
+ final String projectName = getParam(req, "project");
- User user = session.getUser();
+ final User user = session.getUser();
Project project = null;
try {
- project = projectManager.getProject(projectName);
+ project = this.projectManager.getProject(projectName);
if (project == null) {
page.add("errorMsg", "Project " + projectName + " not found.");
} else {
@@ -1567,23 +1552,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("project", project);
page.add("admins", Utils.flattenToString(
project.getUsersWithPermission(Type.ADMIN), ","));
- Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+ final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
page.add("userpermission", perm);
page.add(
"validatorFixPrompt",
- projectManager.getProps().getBoolean(
+ this.projectManager.getProps().getBoolean(
ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_FLAG_PARAM,
ValidatorConfigs.DEFAULT_VALIDATOR_AUTO_FIX_PROMPT_FLAG));
page.add(
"validatorFixLabel",
- projectManager.getProps().get(
+ this.projectManager.getProps().get(
ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LABEL_PARAM));
page.add(
"validatorFixLink",
- projectManager.getProps().get(
+ this.projectManager.getProps().get(
ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LINK_PARAM));
- boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
+ final boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
if (adminPerm) {
page.add("admin", true);
}
@@ -1595,33 +1580,33 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("exec", false);
}
- List<Flow> flows = project.getFlows();
+ final List<Flow> flows = project.getFlows();
if (!flows.isEmpty()) {
Collections.sort(flows, FLOW_ID_COMPARATOR);
page.add("flows", flows);
}
}
- } catch (AccessControlException e) {
+ } catch (final AccessControlException e) {
page.add("errorMsg", e.getMessage());
}
page.render();
}
- private void handleCreate(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException {
- String projectName = hasParam(req, "name") ? getParam(req, "name") : null;
- String projectDescription =
+ private void handleCreate(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException {
+ final String projectName = hasParam(req, "name") ? getParam(req, "name") : null;
+ final String projectDescription =
hasParam(req, "description") ? getParam(req, "description") : null;
logger.info("Create project " + projectName);
- User user = session.getUser();
+ final User user = session.getUser();
String status = null;
String action = null;
String message = null;
HashMap<String, Object> params = null;
- if (lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
+ if (this.lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
message =
"User " + user.getUserId()
+ " doesn't have permission to create projects.";
@@ -1629,48 +1614,48 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
status = "error";
} else {
try {
- projectManager.createProject(projectName, projectDescription, user);
+ this.projectManager.createProject(projectName, projectDescription, user);
status = "success";
action = "redirect";
- String redirect = "manager?project=" + projectName;
- params = new HashMap<String, Object>();
+ final String redirect = "manager?project=" + projectName;
+ params = new HashMap<>();
params.put("path", redirect);
- } catch (ProjectManagerException e) {
+ } catch (final ProjectManagerException e) {
message = e.getMessage();
status = "error";
}
}
- String response = createJsonResponse(status, message, action, params);
+ final String response = createJsonResponse(status, message, action, params);
try {
- Writer write = resp.getWriter();
+ final Writer write = resp.getWriter();
write.append(response);
write.flush();
- } catch (IOException e) {
+ } catch (final IOException e) {
e.printStackTrace();
}
}
- private void registerError(Map<String, String> ret, String error,
- HttpServletResponse resp, int returnCode) {
+ private void registerError(final Map<String, String> ret, final String error,
+ final HttpServletResponse resp, final int returnCode) {
ret.put("error", error);
resp.setStatus(returnCode);
}
- private void ajaxHandleUpload(HttpServletRequest req, HttpServletResponse resp,
- Map<String, String> ret, Map<String, Object> multipart, Session session)
+ private void ajaxHandleUpload(final HttpServletRequest req, final HttpServletResponse resp,
+ final Map<String, String> ret, final Map<String, Object> multipart, final Session session)
throws ServletException, IOException {
- User user = session.getUser();
- String projectName = (String) multipart.get("project");
- Project project = projectManager.getProject(projectName);
- String autoFix = (String) multipart.get("fix");
- Props props = new Props();
+ final User user = session.getUser();
+ final String projectName = (String) multipart.get("project");
+ final Project project = this.projectManager.getProject(projectName);
+ final String autoFix = (String) multipart.get("fix");
+ final Props props = new Props();
if (autoFix != null && autoFix.equals("off")) {
props.put(ValidatorConfigs.CUSTOM_AUTO_FIX_FLAG_PARAM, "false");
} else {
props.put(ValidatorConfigs.CUSTOM_AUTO_FIX_FLAG_PARAM, "true");
}
- if (lockdownUploadProjects) {
+ if (this.lockdownUploadProjects) {
registerError(ret, "Project uploading is locked out", resp, 400);
} else if (projectName == null || projectName.isEmpty()) {
registerError(ret, "No project name found.", resp, 400);
@@ -1683,15 +1668,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
} else {
ret.put("projectId", String.valueOf(project.getId()));
- FileItem item = (FileItem) multipart.get("file");
- String name = item.getName();
+ final FileItem item = (FileItem) multipart.get("file");
+ final String name = item.getName();
String type = null;
final String contentType = item.getContentType();
if (contentType != null
&& (contentType.startsWith(APPLICATION_ZIP_MIME_TYPE)
- || contentType.startsWith("application/x-zip-compressed") || contentType
- .startsWith("application/octet-stream"))) {
+ || contentType.startsWith("application/x-zip-compressed") || contentType
+ .startsWith("application/octet-stream"))) {
type = "zip";
} else {
item.delete();
@@ -1700,40 +1685,40 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return;
}
- File tempDir = Utils.createTempDir();
+ final File tempDir = Utils.createTempDir();
OutputStream out = null;
try {
logger.info("Uploading file " + name);
- File archiveFile = new File(tempDir, name);
+ final File archiveFile = new File(tempDir, name);
out = new BufferedOutputStream(new FileOutputStream(archiveFile));
IOUtils.copy(item.getInputStream(), out);
out.close();
- Map<String, ValidationReport> reports =
- projectManager.uploadProject(project, archiveFile, type, user,
+ final Map<String, ValidationReport> reports =
+ this.projectManager.uploadProject(project, archiveFile, type, user,
props);
- StringBuffer errorMsgs = new StringBuffer();
- StringBuffer warnMsgs = new StringBuffer();
- for (Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
- ValidationReport report = reportEntry.getValue();
+ final StringBuffer errorMsgs = new StringBuffer();
+ final StringBuffer warnMsgs = new StringBuffer();
+ for (final Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
+ final ValidationReport report = reportEntry.getValue();
if (!report.getInfoMsgs().isEmpty()) {
- for (String msg : report.getInfoMsgs()) {
+ for (final String msg : report.getInfoMsgs()) {
switch (ValidationReport.getInfoMsgLevel(msg)) {
- case ERROR:
- errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
- break;
- case WARN:
- warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
- break;
- default:
- break;
+ case ERROR:
+ errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+ break;
+ case WARN:
+ warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+ break;
+ default:
+ break;
}
}
}
if (!report.getErrorMsgs().isEmpty()) {
errorMsgs.append("Validator " + reportEntry.getKey()
+ " reports errors:<ul>");
- for (String msg : report.getErrorMsgs()) {
+ for (final String msg : report.getErrorMsgs()) {
errorMsgs.append("<li>" + msg + "</li>");
}
errorMsgs.append("</ul>");
@@ -1741,7 +1726,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
if (!report.getWarningMsgs().isEmpty()) {
warnMsgs.append("Validator " + reportEntry.getKey()
+ " reports warnings:<ul>");
- for (String msg : report.getWarningMsgs()) {
+ for (final String msg : report.getWarningMsgs()) {
warnMsgs.append("<li>" + msg + "</li>");
}
warnMsgs.append("</ul>");
@@ -1752,7 +1737,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
// message
// will somehow get discarded.
registerError(ret, errorMsgs.length() > 4000 ? errorMsgs.substring(0, 4000)
- : errorMsgs.toString(), resp, 500);
+ : errorMsgs.toString(), resp, 500);
}
if (warnMsgs.length() > 0) {
ret.put(
@@ -1760,14 +1745,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
warnMsgs.length() > 4000 ? warnMsgs.substring(0, 4000) : warnMsgs
.toString());
}
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.info("Installation Failed.", e);
String error = e.getMessage();
if (error.length() > 512) {
error =
error.substring(0, 512) + "<br>Too many errors to display.<br>";
}
- registerError(ret, "Installation Failed.<br>" + error, resp , 500);
+ registerError(ret, "Installation Failed.<br>" + error, resp, 500);
} finally {
if (out != null) {
out.close();
@@ -1781,11 +1766,11 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleUpload(HttpServletRequest req, HttpServletResponse resp,
- Map<String, Object> multipart, Session session) throws ServletException,
+ private void handleUpload(final HttpServletRequest req, final HttpServletResponse resp,
+ final Map<String, Object> multipart, final Session session) throws ServletException,
IOException {
- HashMap<String, String> ret = new HashMap<String, String>();
- String projectName = (String) multipart.get("project");
+ final HashMap<String, String> ret = new HashMap<>();
+ final String projectName = (String) multipart.get("project");
ajaxHandleUpload(req, resp, ret, multipart, session);
if (ret.containsKey("error")) {
@@ -1799,70 +1784,22 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
resp.sendRedirect(req.getRequestURI() + "?project=" + projectName);
}
- private static class NodeLevelComparator implements Comparator<Node> {
- @Override
- public int compare(Node node1, Node node2) {
- return node1.getLevel() - node2.getLevel();
- }
- }
-
- public static class PageSelection {
- private String page;
- private int size;
- private boolean disabled;
- private boolean selected;
- private int nextPage;
-
- public PageSelection(String pageName, int size, boolean disabled,
- boolean selected, int nextPage) {
- this.page = pageName;
- this.size = size;
- this.disabled = disabled;
- this.setSelected(selected);
- this.nextPage = nextPage;
- }
-
- public String getPage() {
- return page;
- }
-
- public int getSize() {
- return size;
- }
-
- public boolean getDisabled() {
- return disabled;
- }
-
- public boolean isSelected() {
- return selected;
- }
-
- public int getNextPage() {
- return nextPage;
- }
+ private Permission getPermissionObject(final Project project, final User user,
+ final Permission.Type type) {
+ final Permission perm = project.getCollectivePermission(user);
- public void setSelected(boolean selected) {
- this.selected = selected;
- }
- }
-
- private Permission getPermissionObject(Project project, User user,
- Permission.Type type) {
- Permission perm = project.getCollectivePermission(user);
-
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
perm.addPermissions(role.getPermission());
}
return perm;
}
- private boolean hasPermissionToCreateProject(User user) {
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
- Permission perm = role.getPermission();
+ private boolean hasPermissionToCreateProject(final User user) {
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
+ final Permission perm = role.getPermission();
if (perm.isPermissionSet(Permission.Type.ADMIN)
|| perm.isPermissionSet(Permission.Type.CREATEPROJECTS)) {
return true;
@@ -1872,19 +1809,19 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return false;
}
- private void handleReloadProjectWhitelist(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws IOException {
- HashMap<String, Object> ret = new HashMap<String, Object>();
+ private void handleReloadProjectWhitelist(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws IOException {
+ final HashMap<String, Object> ret = new HashMap<>();
if (hasPermission(session.getUser(), Permission.Type.ADMIN)) {
try {
- if (projectManager.loadProjectWhiteList()) {
+ if (this.projectManager.loadProjectWhiteList()) {
ret.put("success", "Project whitelist re-loaded!");
} else {
ret.put("error", "azkaban.properties doesn't contain property "
+ ProjectWhitelist.XML_FILE_PARAM);
}
- } catch (Exception e) {
+ } catch (final Exception e) {
ret.put("error",
"Exception occurred while trying to re-load project whitelist: "
+ e);
@@ -1896,9 +1833,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
this.writeJSON(resp, ret);
}
- protected boolean hasPermission(User user, Permission.Type type) {
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
+ protected boolean hasPermission(final User user, final Permission.Type type) {
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
if (role.getPermission().isPermissionSet(type)
|| role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
return true;
@@ -1907,4 +1844,54 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
return false;
}
+
+ private static class NodeLevelComparator implements Comparator<Node> {
+
+ @Override
+ public int compare(final Node node1, final Node node2) {
+ return node1.getLevel() - node2.getLevel();
+ }
+ }
+
+ public static class PageSelection {
+
+ private final String page;
+ private final int size;
+ private final boolean disabled;
+ private final int nextPage;
+ private boolean selected;
+
+ public PageSelection(final String pageName, final int size, final boolean disabled,
+ final boolean selected, final int nextPage) {
+ this.page = pageName;
+ this.size = size;
+ this.disabled = disabled;
+ this.setSelected(selected);
+ this.nextPage = nextPage;
+ }
+
+ public String getPage() {
+ return this.page;
+ }
+
+ public int getSize() {
+ return this.size;
+ }
+
+ public boolean getDisabled() {
+ return this.disabled;
+ }
+
+ public boolean isSelected() {
+ return this.selected;
+ }
+
+ public void setSelected(final boolean selected) {
+ this.selected = selected;
+ }
+
+ public int getNextPage() {
+ return this.nextPage;
+ }
+ }
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
index a86a82c..5e01bb3 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
@@ -16,18 +16,6 @@
package azkaban.webapp.servlet;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.log4j.Logger;
-
import azkaban.project.Project;
import azkaban.project.ProjectManager;
import azkaban.server.session.Session;
@@ -37,11 +25,21 @@ import azkaban.user.User;
import azkaban.user.UserManager;
import azkaban.utils.Pair;
import azkaban.webapp.AzkabanWebServer;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.log4j.Logger;
/**
* The main page
*/
public class ProjectServlet extends LoginAbstractAzkabanServlet {
+
private static final Logger logger = Logger.getLogger(ProjectServlet.class
.getName());
private static final String LOCKDOWN_CREATE_PROJECTS_KEY =
@@ -53,23 +51,23 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
private boolean lockdownCreateProjects = false;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
- userManager = server.getUserManager();
- lockdownCreateProjects =
+ this.userManager = server.getUserManager();
+ this.lockdownCreateProjects =
server.getServerProps().getBoolean(LOCKDOWN_CREATE_PROJECTS_KEY, false);
- if (lockdownCreateProjects) {
+ if (this.lockdownCreateProjects) {
logger.info("Creation of projects is locked down");
}
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
- ProjectManager manager =
+ final ProjectManager manager =
((AzkabanWebServer) getApplication()).getProjectManager();
if (hasParam(req, "ajax")) {
@@ -83,26 +81,20 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
/**
* ProjectServlet class now handles ajax requests. It returns a
- * @SimplifiedProject object: information regarding projects, and information
- * regarding user and project association
*
- * @param req
- * @param resp
- * @param session
- * @param manager
- * @throws ServletException
- * @throws IOException
+ * @SimplifiedProject object: information regarding projects, and information regarding user and
+ * project association
*/
- private void handleAjaxAction(HttpServletRequest req,
- HttpServletResponse resp, Session session, ProjectManager manager)
+ private void handleAjaxAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session, final ProjectManager manager)
throws ServletException, IOException {
- String ajaxName = getParam(req, "ajax");
- HashMap<String, Object> ret = new HashMap<String, Object>();
+ final String ajaxName = getParam(req, "ajax");
+ final HashMap<String, Object> ret = new HashMap<>();
if (ajaxName.equals("fetchallprojects")) {
- List<Project> projects = manager.getProjects();
- List<SimplifiedProject> simplifiedProjects =
+ final List<Project> projects = manager.getProjects();
+ final List<SimplifiedProject> simplifiedProjects =
toSimplifiedProjects(projects);
ret.put("projects", simplifiedProjects);
} else if (ajaxName.equals("fetchuserprojects")) {
@@ -119,21 +111,15 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
* If user provides an empty user name, the user defaults to the session user<br>
* If user does not provide the user param, the user also defaults to the
* session user<br>
- *
- * @param req
- * @param session
- * @param manager
- * @param ret
- * @throws ServletException
*/
- private void handleFetchUserProjects(HttpServletRequest req, Session session,
- ProjectManager manager, HashMap<String, Object> ret)
+ private void handleFetchUserProjects(final HttpServletRequest req, final Session session,
+ final ProjectManager manager, final HashMap<String, Object> ret)
throws ServletException {
User user = null;
// if key "user" is specified, follow this logic
if (hasParam(req, "user")) {
- String userParam = getParam(req, "user");
+ final String userParam = getParam(req, "user");
if (userParam.isEmpty()) {
user = session.getUser();
} else {
@@ -144,21 +130,18 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
user = session.getUser();
}
- List<Project> projects = manager.getUserProjects(user);
- List<SimplifiedProject> simplifiedProjects = toSimplifiedProjects(projects);
+ final List<Project> projects = manager.getUserProjects(user);
+ final List<SimplifiedProject> simplifiedProjects = toSimplifiedProjects(projects);
ret.put("projects", simplifiedProjects);
}
/**
* A simple helper method that converts a List<Project> to List<SimplifiedProject>
- *
- * @param projects
- * @return
*/
- private List<SimplifiedProject> toSimplifiedProjects(List<Project> projects) {
- List<SimplifiedProject> simplifiedProjects = new ArrayList<>();
- for (Project p : projects) {
- SimplifiedProject sp =
+ private List<SimplifiedProject> toSimplifiedProjects(final List<Project> projects) {
+ final List<SimplifiedProject> simplifiedProjects = new ArrayList<>();
+ for (final Project p : projects) {
+ final SimplifiedProject sp =
new SimplifiedProject(p.getId(), p.getName(),
p.getLastModifiedUser(), p.getCreateTimestamp(),
p.getUserPermissions(), p.getGroupPermissions());
@@ -169,33 +152,28 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
/**
* Renders the user homepage that users see when they log in
- *
- * @param req
- * @param resp
- * @param session
- * @param manager
*/
- private void handlePageRender(HttpServletRequest req,
- HttpServletResponse resp, Session session, ProjectManager manager) {
- User user = session.getUser();
+ private void handlePageRender(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session, final ProjectManager manager) {
+ final User user = session.getUser();
- Page page =
+ final Page page =
newPage(req, resp, session, "azkaban/webapp/servlet/velocity/index.vm");
- if (lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
+ if (this.lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
page.add("hideCreateProject", true);
}
if (hasParam(req, "all")) {
- List<Project> projects = manager.getProjects();
+ final List<Project> projects = manager.getProjects();
page.add("viewProjects", "all");
page.add("projects", projects);
} else if (hasParam(req, "group")) {
- List<Project> projects = manager.getGroupProjects(user);
+ final List<Project> projects = manager.getGroupProjects(user);
page.add("viewProjects", "group");
page.add("projects", projects);
} else {
- List<Project> projects = manager.getUserProjects(user);
+ final List<Project> projects = manager.getUserProjects(user);
page.add("viewProjects", "personal");
page.add("projects", projects);
}
@@ -203,10 +181,10 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
page.render();
}
- private void handleDoAction(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException {
+ private void handleDoAction(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException {
if (getParam(req, "doaction").equals("search")) {
- String searchTerm = getParam(req, "searchterm");
+ final String searchTerm = getParam(req, "searchterm");
if (!searchTerm.equals("") && !searchTerm.equals(".*")) {
handleFilter(req, resp, session, searchTerm);
return;
@@ -214,21 +192,21 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleFilter(HttpServletRequest req, HttpServletResponse resp,
- Session session, String searchTerm) {
- User user = session.getUser();
- ProjectManager manager =
+ private void handleFilter(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session, final String searchTerm) {
+ final User user = session.getUser();
+ final ProjectManager manager =
((AzkabanWebServer) getApplication()).getProjectManager();
- Page page =
+ final Page page =
newPage(req, resp, session, "azkaban/webapp/servlet/velocity/index.vm");
if (hasParam(req, "all")) {
// do nothing special if one asks for 'ALL' projects
- List<Project> projects = manager.getProjectsByRegex(searchTerm);
+ final List<Project> projects = manager.getProjectsByRegex(searchTerm);
page.add("allProjects", "");
page.add("projects", projects);
page.add("search_term", searchTerm);
} else {
- List<Project> projects = manager.getUserProjectsByRegex(user, searchTerm);
+ final List<Project> projects = manager.getUserProjectsByRegex(user, searchTerm);
page.add("projects", projects);
page.add("search_term", searchTerm);
}
@@ -237,15 +215,15 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
// TODO Auto-generated method stub
}
- private boolean hasPermissionToCreateProject(User user) {
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
- Permission perm = role.getPermission();
+ private boolean hasPermissionToCreateProject(final User user) {
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
+ final Permission perm = role.getPermission();
if (perm.isPermissionSet(Permission.Type.ADMIN)
|| perm.isPermissionSet(Permission.Type.CREATEPROJECTS)) {
return true;
@@ -262,9 +240,9 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
* but does not want every flow and every job inside that project.
*
* @author jyu
- *
*/
private static class SimplifiedProject {
+
private int projectId;
private String projectName;
private String createdBy;
@@ -272,10 +250,10 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
private List<Pair<String, Permission>> userPermissions;
private List<Pair<String, Permission>> groupPermissions;
- public SimplifiedProject(int projectId, String projectName,
- String createdBy, long createdTime,
- List<Pair<String, Permission>> userPermissions,
- List<Pair<String, Permission>> groupPermissions) {
+ public SimplifiedProject(final int projectId, final String projectName,
+ final String createdBy, final long createdTime,
+ final List<Pair<String, Permission>> userPermissions,
+ final List<Pair<String, Permission>> groupPermissions) {
this.projectId = projectId;
this.projectName = projectName;
this.createdBy = createdBy;
@@ -285,52 +263,52 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
}
public int getProjectId() {
- return projectId;
+ return this.projectId;
}
- public void setProjectId(int projectId) {
+ public void setProjectId(final int projectId) {
this.projectId = projectId;
}
public String getProjectName() {
- return projectName;
+ return this.projectName;
}
- public void setProjectName(String projectName) {
+ public void setProjectName(final String projectName) {
this.projectName = projectName;
}
public String getCreatedBy() {
- return createdBy;
+ return this.createdBy;
}
- public void setCreatedBy(String createdBy) {
+ public void setCreatedBy(final String createdBy) {
this.createdBy = createdBy;
}
public long getCreatedTime() {
- return createdTime;
+ return this.createdTime;
}
- public void setCreatedTime(long createdTime) {
+ public void setCreatedTime(final long createdTime) {
this.createdTime = createdTime;
}
public List<Pair<String, Permission>> getUserPermissions() {
- return userPermissions;
+ return this.userPermissions;
}
public void setUserPermissions(
- List<Pair<String, Permission>> userPermissions) {
+ final List<Pair<String, Permission>> userPermissions) {
this.userPermissions = userPermissions;
}
public List<Pair<String, Permission>> getGroupPermissions() {
- return groupPermissions;
+ return this.groupPermissions;
}
public void setGroupPermissions(
- List<Pair<String, Permission>> groupPermissions) {
+ final List<Pair<String, Permission>> groupPermissions) {
this.groupPermissions = groupPermissions;
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
index 0b3b4fd..6908473 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
@@ -68,6 +68,7 @@ import org.joda.time.ReadablePeriod;
import org.joda.time.format.DateTimeFormat;
public class ScheduleServlet extends LoginAbstractAzkabanServlet {
+
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(ScheduleServlet.class);
private ProjectManager projectManager;
@@ -85,7 +86,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
@Override
protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
- final Session session) throws ServletException, IOException {
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
} else if (hasParam(req, "calendar")) {
@@ -96,7 +97,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void handleAJAXAction(final HttpServletRequest req,
- final HttpServletResponse resp, final Session session) throws ServletException,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
HashMap<String, Object> ret = new HashMap<>();
final String ajaxName = getParam(req, "ajax");
@@ -124,14 +125,14 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxSetSla(final HttpServletRequest req, final HashMap<String, Object> ret,
- final User user) {
+ final User user) {
try {
final int scheduleId = getIntParam(req, "scheduleId");
final Schedule sched = this.scheduleManager.getSchedule(scheduleId);
if (sched == null) {
ret.put("error",
- "Error loading schedule. Schedule " + scheduleId
- + " doesn't exist");
+ "Error loading schedule. Schedule " + scheduleId
+ + " doesn't exist");
return;
}
@@ -240,7 +241,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxFetchSchedule(final HttpServletRequest req,
- final HashMap<String, Object> ret, final User user) throws ServletException {
+ final HashMap<String, Object> ret, final User user) throws ServletException {
final int projectId = getIntParam(req, "projectId");
final String flowId = getParam(req, "flowId");
@@ -267,15 +268,15 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxSlaInfo(final HttpServletRequest req, final HashMap<String, Object> ret,
- final User user) {
+ final User user) {
final int scheduleId;
try {
scheduleId = getIntParam(req, "scheduleId");
final Schedule sched = this.scheduleManager.getSchedule(scheduleId);
if (sched == null) {
ret.put("error",
- "Error loading schedule. Schedule " + scheduleId
- + " doesn't exist");
+ "Error loading schedule. Schedule " + scheduleId
+ + " doesn't exist");
return;
}
@@ -338,7 +339,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
- final int projectId, final User user, final Permission.Type type) {
+ final int projectId, final User user, final Permission.Type type) {
final Project project = this.projectManager.getProject(projectId);
if (project == null) {
@@ -355,7 +356,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void handleGetAllSchedules(final HttpServletRequest req,
- final HttpServletResponse resp, final Session session) throws ServletException,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
final Page page =
@@ -373,7 +374,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void handleGetScheduleCalendar(final HttpServletRequest req,
- final HttpServletResponse resp, final Session session) throws ServletException,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
final Page page =
@@ -392,7 +393,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
@Override
protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
- final Session session) throws ServletException, IOException {
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
} else {
@@ -408,17 +409,18 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
}
- if (ret.get("status") == ("success"))
+ if (ret.get("status") == ("success")) {
setSuccessMessageInCookie(resp, (String) ret.get("message"));
- else
+ } else {
setErrorMessageInCookie(resp, (String) ret.get("message"));
+ }
this.writeJSON(resp, ret);
}
}
private void ajaxLoadFlows(final HttpServletRequest req,
- final HashMap<String, Object> ret, final User user) throws ServletException {
+ final HashMap<String, Object> ret, final User user) throws ServletException {
final List<Schedule> schedules;
try {
schedules = this.scheduleManager.getSchedules();
@@ -426,8 +428,9 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
throw new ServletException(e);
}
// See if anything is scheduled
- if (schedules.size() <= 0)
+ if (schedules.size() <= 0) {
return;
+ }
final List<HashMap<String, Object>> output =
new ArrayList<>();
@@ -443,7 +446,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void writeScheduleData(final List<HashMap<String, Object>> output,
- final Schedule schedule) throws ScheduleManagerException {
+ final Schedule schedule) throws ScheduleManagerException {
final Map<String, Object> stats =
SchedulerStatistics.getStatistics(schedule.getScheduleId(),
(AzkabanWebServer) getApplication());
@@ -474,7 +477,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxLoadHistory(final HttpServletRequest req,
- final HttpServletResponse resp, final User user) throws ServletException, IOException {
+ final HttpServletResponse resp, final User user) throws ServletException, IOException {
resp.setContentType(JSON_MIME_TYPE);
final long today = DateTime.now().withTime(0, 0, 0, 0).getMillis();
long startTime = getLongParam(req, "startTime");
@@ -565,7 +568,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void writeHistoryData(final List<HashMap<String, Object>> output,
- final ExecutableFlow history) {
+ final ExecutableFlow history) {
final HashMap<String, Object> data = new HashMap<>();
data.put("scheduleid", history.getScheduleId());
@@ -586,7 +589,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxRemoveSched(final HttpServletRequest req, final Map<String, Object> ret,
- final User user) throws ServletException {
+ final User user) throws ServletException {
final int scheduleId = getIntParam(req, "scheduleId");
final Schedule sched;
try {
@@ -629,7 +632,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
private void ajaxScheduleFlow(final HttpServletRequest req,
- final HashMap<String, Object> ret, final User user) throws ServletException {
+ final HashMap<String, Object> ret, final User user) throws ServletException {
final String projectName = getParam(req, "projectName");
final String flowName = getParam(req, "flow");
final int projectId = getIntParam(req, "projectId");
@@ -667,7 +670,8 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
return;
}
- final long endSchedTime = getLongParam(req, "endSchedTime", Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
+ final long endSchedTime = getLongParam(req, "endSchedTime",
+ Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
try {
// Todo kunkun-tang: Need to verify if passed end time is valid.
} catch (final Exception e) {
@@ -713,12 +717,10 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
}
/**
- *
* This method is in charge of doing cron scheduling.
- * @throws ServletException
*/
private void ajaxScheduleCronFlow(final HttpServletRequest req,
- final HashMap<String, Object> ret, final User user) throws ServletException {
+ final HashMap<String, Object> ret, final User user) throws ServletException {
final String projectName = getParam(req, "projectName");
final String flowName = getParam(req, "flow");
@@ -754,18 +756,21 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
// everything in Azkaban functions is at the minute granularity, so we add 0 here
// to let the expression to be complete.
cronExpression = getParam(req, "cronExpression");
- if(azkaban.utils.Utils.isCronExpressionValid(cronExpression, timezone) == false) {
- ret.put("error", "This expression <" + cronExpression + "> can not be parsed to quartz cron.");
+ if (azkaban.utils.Utils.isCronExpressionValid(cronExpression, timezone) == false) {
+ ret.put("error",
+ "This expression <" + cronExpression + "> can not be parsed to quartz cron.");
return;
}
}
- if(cronExpression == null)
+ if (cronExpression == null) {
throw new Exception("Cron expression must exist.");
+ }
} catch (final Exception e) {
ret.put("error", e.getMessage());
}
- final long endSchedTime = getLongParam(req, "endSchedTime", Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
+ final long endSchedTime = getLongParam(req, "endSchedTime",
+ Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
try {
// Todo kunkun-tang: Need to verify if passed end time is valid.
} catch (final Exception e) {
@@ -823,8 +828,9 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
hour %= 12;
- if (isPm)
+ if (isPm) {
hour += 12;
+ }
final DateTime firstSchedTime =
day.withHourOfDay(hour).withMinuteOfHour(minutes).withSecondOfMinute(0);
@@ -834,11 +840,13 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
/**
* @param cronTimezone represents the timezone from remote API call
- * @return if the string is equal to UTC, we return UTC; otherwise, we always return default timezone.
+ * @return if the string is equal to UTC, we return UTC; otherwise, we always return default
+ * timezone.
*/
private DateTimeZone parseTimeZone(final String cronTimezone) {
- if(cronTimezone != null && cronTimezone.equals("UTC"))
+ if (cronTimezone != null && cronTimezone.equals("UTC")) {
return DateTimeZone.UTC;
+ }
return DateTimeZone.getDefault();
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
index 3fdcc45..917c982 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
@@ -16,19 +16,6 @@
package azkaban.webapp.servlet;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import azkaban.executor.ConnectorParams;
import azkaban.executor.Executor;
import azkaban.executor.ExecutorManager;
@@ -40,6 +27,17 @@ import azkaban.user.User;
import azkaban.user.UserManager;
import azkaban.utils.Pair;
import azkaban.webapp.AzkabanWebServer;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
@@ -54,15 +52,17 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
private ExecutorManager execManager;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
- userManager = server.getUserManager();
- execManager = server.getExecutorManager();
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ this.userManager = server.getUserManager();
+ this.execManager = server.getExecutorManager();
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException,
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
+ throws ServletException,
IOException {
if (hasParam(req, ConnectorParams.ACTION_PARAM)) {
handleAJAXAction(req, resp, session);
@@ -71,26 +71,32 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleAJAXAction(HttpServletRequest req, HttpServletResponse resp, Session session)
+ private void handleAJAXAction(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
throws ServletException, IOException {
- HashMap<String, Object> ret = new HashMap<String, Object>();
- int executorId = getIntParam(req, ConnectorParams.EXECUTOR_ID_PARAM);
- String actionName = getParam(req, ConnectorParams.ACTION_PARAM);
+ final HashMap<String, Object> ret = new HashMap<>();
+ final int executorId = getIntParam(req, ConnectorParams.EXECUTOR_ID_PARAM);
+ final String actionName = getParam(req, ConnectorParams.ACTION_PARAM);
if (actionName.equals(ConnectorParams.STATS_GET_METRICHISTORY)) {
handleGetMetricHistory(executorId, req, ret, session.getUser());
} else if (actionName.equals(ConnectorParams.STATS_GET_ALLMETRICSNAME)) {
handleGetAllMetricName(executorId, req, ret);
} else if (actionName.equals(ConnectorParams.STATS_SET_REPORTINGINTERVAL)) {
- handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_REPORTINGINTERVAL, req, ret);
+ handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_REPORTINGINTERVAL, req,
+ ret);
} else if (actionName.equals(ConnectorParams.STATS_SET_CLEANINGINTERVAL)) {
- handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_CLEANINGINTERVAL, req, ret);
+ handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_CLEANINGINTERVAL, req,
+ ret);
} else if (actionName.equals(ConnectorParams.STATS_SET_MAXREPORTERPOINTS)) {
- handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_MAXREPORTERPOINTS, req, ret);
+ handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_MAXREPORTERPOINTS, req,
+ ret);
} else if (actionName.equals(ConnectorParams.STATS_SET_ENABLEMETRICS)) {
- handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_ENABLEMETRICS, req, ret);
+ handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_ENABLEMETRICS, req,
+ ret);
} else if (actionName.equals(ConnectorParams.STATS_SET_DISABLEMETRICS)) {
- handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_DISABLEMETRICS, req, ret);
+ handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_DISABLEMETRICS, req,
+ ret);
}
writeJSON(resp, ret);
@@ -98,52 +104,48 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
/**
* Get all metrics tracked by the given executor
- *
- * @param executorId
- * @param req
- * @param ret
*/
- private void handleGetAllMetricName(int executorId, HttpServletRequest req,
- HashMap<String, Object> ret) throws IOException {
- Map<String, Object> result;
+ private void handleGetAllMetricName(final int executorId, final HttpServletRequest req,
+ final HashMap<String, Object> ret) throws IOException {
+ final Map<String, Object> result;
try {
result =
- execManager.callExecutorStats(executorId,
- ConnectorParams.STATS_GET_ALLMETRICSNAME,
- (Pair<String, String>[]) null);
+ this.execManager.callExecutorStats(executorId,
+ ConnectorParams.STATS_GET_ALLMETRICSNAME,
+ (Pair<String, String>[]) null);
if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
ret.put("error", result.get(ConnectorParams.RESPONSE_ERROR).toString());
} else {
ret.put("metricList", result.get("data"));
}
- } catch (ExecutorManagerException e) {
+ } catch (final ExecutorManagerException e) {
logger.error(e.getMessage(), e);
ret.put("error", "Failed to fetch metric names for executor : "
- + executorId);
+ + executorId);
}
}
/**
* Generic method to facilitate actionName action using Azkaban exec server
- * @param executorId
- * @param actionName Name of the action
- * @throws ExecutorManagerException
+ *
+ * @param actionName Name of the action
*/
- private void handleChangeConfigurationRequest(int executorId, String actionName, HttpServletRequest req, HashMap<String, Object> ret)
+ private void handleChangeConfigurationRequest(final int executorId, final String actionName,
+ final HttpServletRequest req, final HashMap<String, Object> ret)
throws ServletException, IOException {
try {
- Map<String, Object> result =
- execManager
- .callExecutorStats(executorId, actionName, getAllParams(req));
+ final Map<String, Object> result =
+ this.execManager
+ .callExecutorStats(executorId, actionName, getAllParams(req));
if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
ret.put(ConnectorParams.RESPONSE_ERROR,
- result.get(ConnectorParams.RESPONSE_ERROR).toString());
+ result.get(ConnectorParams.RESPONSE_ERROR).toString());
} else {
ret.put(ConnectorParams.STATUS_PARAM,
- result.get(ConnectorParams.STATUS_PARAM));
+ result.get(ConnectorParams.STATUS_PARAM));
}
- } catch (ExecutorManagerException ex) {
+ } catch (final ExecutorManagerException ex) {
logger.error(ex.getMessage(), ex);
ret.put("error", "Failed to change config change");
}
@@ -151,24 +153,21 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
/**
* Get metric snapshots for a metric and date specification
- * @param executorId
- * @throws ServletException
- * @throws ExecutorManagerException
*/
- private void handleGetMetricHistory(int executorId, HttpServletRequest req,
- HashMap<String, Object> ret, User user) throws IOException,
- ServletException {
+ private void handleGetMetricHistory(final int executorId, final HttpServletRequest req,
+ final HashMap<String, Object> ret, final User user) throws IOException,
+ ServletException {
try {
- Map<String, Object> result =
- execManager.callExecutorStats(executorId,
- ConnectorParams.STATS_GET_METRICHISTORY, getAllParams(req));
+ final Map<String, Object> result =
+ this.execManager.callExecutorStats(executorId,
+ ConnectorParams.STATS_GET_METRICHISTORY, getAllParams(req));
if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
ret.put(ConnectorParams.RESPONSE_ERROR,
- result.get(ConnectorParams.RESPONSE_ERROR).toString());
+ result.get(ConnectorParams.RESPONSE_ERROR).toString());
} else {
ret.put("data", result.get("data"));
}
- } catch (ExecutorManagerException ex) {
+ } catch (final ExecutorManagerException ex) {
logger.error(ex.getMessage(), ex);
ret.put("error", "Failed to fetch metric history");
}
@@ -178,9 +177,10 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
* @throws ExecutorManagerException
*
*/
- private void handleStatePageLoad(HttpServletRequest req, HttpServletResponse resp, Session session)
+ private void handleStatePageLoad(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
throws ServletException {
- Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/statsPage.vm");
+ final Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/statsPage.vm");
if (!hasPermission(session.getUser(), Permission.Type.METRICS)) {
page.add("errorMsg", "User " + session.getUser().getUserId() + " has no permission.");
page.render();
@@ -188,20 +188,20 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
}
try {
- Collection<Executor> executors = execManager.getAllActiveExecutors();
+ final Collection<Executor> executors = this.execManager.getAllActiveExecutors();
page.add("executorList", executors);
- Map<String, Object> result =
- execManager.callExecutorStats(executors.iterator().next().getId(),
- ConnectorParams.STATS_GET_ALLMETRICSNAME,
- (Pair<String, String>[]) null);
+ final Map<String, Object> result =
+ this.execManager.callExecutorStats(executors.iterator().next().getId(),
+ ConnectorParams.STATS_GET_ALLMETRICSNAME,
+ (Pair<String, String>[]) null);
if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
page.add("errorMsg", result.get(ConnectorParams.RESPONSE_ERROR)
- .toString());
+ .toString());
} else {
page.add("metricList", result.get("data"));
}
- } catch (Exception e) {
+ } catch (final Exception e) {
logger.error(e.getMessage(), e);
page.add("errorMsg", "Failed to get a response from Azkaban exec server");
}
@@ -210,14 +210,17 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException,
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
+ throws ServletException,
IOException {
}
- protected boolean hasPermission(User user, Permission.Type type) {
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
- if (role.getPermission().isPermissionSet(type) || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
+ protected boolean hasPermission(final User user, final Permission.Type type) {
+ for (final String roleName : user.getRoles()) {
+ final Role role = this.userManager.getRole(roleName);
+ if (role.getPermission().isPermissionSet(type) || role.getPermission()
+ .isPermissionSet(Permission.Type.ADMIN)) {
return true;
}
}
@@ -226,17 +229,15 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
/**
* Parse all Http request params
- * @return
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private Pair<String, String>[] getAllParams(HttpServletRequest req) {
- List<Pair<String, String>> allParams = new LinkedList<Pair<String, String>>();
+ private Pair<String, String>[] getAllParams(final HttpServletRequest req) {
+ final List<Pair<String, String>> allParams = new LinkedList<>();
- Iterator it = req.getParameterMap().entrySet().iterator();
+ final Iterator it = req.getParameterMap().entrySet().iterator();
while (it.hasNext()) {
- Map.Entry pairs = (Map.Entry) it.next();
- for (Object value : (String[]) pairs.getValue()) {
- allParams.add(new Pair<String, String>((String) pairs.getKey(), (String) value));
+ final Map.Entry pairs = (Map.Entry) it.next();
+ for (final Object value : (String[]) pairs.getValue()) {
+ allParams.add(new Pair<>((String) pairs.getKey(), (String) value));
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
index 18cdcd9..de6f270 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
@@ -16,41 +16,39 @@
package azkaban.webapp.servlet;
+import azkaban.server.session.Session;
+import azkaban.trigger.Trigger;
+import azkaban.trigger.TriggerManager;
+import azkaban.trigger.TriggerManagerException;
+import azkaban.user.User;
+import azkaban.webapp.AzkabanWebServer;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.apache.log4j.Logger;
-import azkaban.server.session.Session;
-import azkaban.trigger.Trigger;
-import azkaban.trigger.TriggerManager;
-import azkaban.trigger.TriggerManagerException;
-import azkaban.user.User;
-import azkaban.webapp.AzkabanWebServer;
-
public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
+
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger
.getLogger(TriggerManagerServlet.class);
private TriggerManager triggerManager;
@Override
- public void init(ServletConfig config) throws ServletException {
+ public void init(final ServletConfig config) throws ServletException {
super.init(config);
- AzkabanWebServer server = (AzkabanWebServer) getApplication();
- triggerManager = server.getTriggerManager();
+ final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+ this.triggerManager = server.getTriggerManager();
}
@Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
} else {
@@ -58,17 +56,17 @@ public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleAJAXAction(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleAJAXAction(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- HashMap<String, Object> ret = new HashMap<String, Object>();
- String ajaxName = getParam(req, "ajax");
+ final HashMap<String, Object> ret = new HashMap<>();
+ final String ajaxName = getParam(req, "ajax");
try {
if (ajaxName.equals("expireTrigger")) {
ajaxExpireTrigger(req, ret, session.getUser());
}
- } catch (Exception e) {
+ } catch (final Exception e) {
ret.put("error", e.getMessage());
}
@@ -77,39 +75,39 @@ public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
}
}
- private void handleGetAllSchedules(HttpServletRequest req,
- HttpServletResponse resp, Session session) throws ServletException,
+ private void handleGetAllSchedules(final HttpServletRequest req,
+ final HttpServletResponse resp, final Session session) throws ServletException,
IOException {
- Page page =
+ final Page page =
newPage(req, resp, session,
"azkaban/webapp/servlet/velocity/triggerspage.vm");
- List<Trigger> triggers = triggerManager.getTriggers();
+ final List<Trigger> triggers = this.triggerManager.getTriggers();
page.add("triggers", triggers);
page.render();
}
@Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
- Session session) throws ServletException, IOException {
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session) throws ServletException, IOException {
if (hasParam(req, "ajax")) {
handleAJAXAction(req, resp, session);
}
}
- private void ajaxExpireTrigger(HttpServletRequest req,
- Map<String, Object> ret, User user) throws ServletException,
+ private void ajaxExpireTrigger(final HttpServletRequest req,
+ final Map<String, Object> ret, final User user) throws ServletException,
TriggerManagerException {
- int triggerId = getIntParam(req, "triggerId");
- Trigger t = triggerManager.getTrigger(triggerId);
+ final int triggerId = getIntParam(req, "triggerId");
+ final Trigger t = this.triggerManager.getTrigger(triggerId);
if (t == null) {
ret.put("message", "Trigger with ID " + triggerId + " does not exist");
ret.put("status", "error");
return;
}
- triggerManager.expireTrigger(triggerId);
+ this.triggerManager.expireTrigger(triggerId);
logger.info("User '" + user.getUserId() + " has removed trigger "
+ t.getDescription());
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
index 89aada8..cf2071f 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
@@ -21,21 +21,22 @@ import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class VelocityUtils {
- public String formatDate(long timestamp) {
+
+ public String formatDate(final long timestamp) {
return formatDate(timestamp, "yyyy-MM-dd HH:mm:ss");
}
- public String formatDate(DateTime date) {
+ public String formatDate(final DateTime date) {
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
}
- public String formatDate(long timestamp, String format) {
- DateTimeFormatter f = DateTimeFormat.forPattern(format);
+ public String formatDate(final long timestamp, final String format) {
+ final DateTimeFormatter f = DateTimeFormat.forPattern(format);
return f.print(timestamp);
}
- public String formatDate(DateTime date, String format) {
- DateTimeFormatter f = DateTimeFormat.forPattern(format);
+ public String formatDate(final DateTime date, final String format) {
+ final DateTimeFormatter f = DateTimeFormat.forPattern(format);
return f.print(date);
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java b/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
index 36ba760..2c8c695 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
@@ -18,10 +18,8 @@ package azkaban.webapp;
import azkaban.metrics.MetricsManager;
import azkaban.metrics.MetricsUtility;
-
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
-
import java.util.concurrent.atomic.AtomicLong;
@@ -41,10 +39,10 @@ public enum WebMetrics {
private final AtomicLong logFetchLatency = new AtomicLong(0L);
WebMetrics() {
- registry = MetricsManager.INSTANCE.getRegistry();
- webGetCall = MetricsUtility.addMeter("Web-Get-Call-Meter", registry);
- webPostCall = MetricsUtility.addMeter("Web-Post-Call-Meter", registry);
- MetricsUtility.addGauge("fetchLogLatency", registry, logFetchLatency::get);
+ this.registry = MetricsManager.INSTANCE.getRegistry();
+ this.webGetCall = MetricsUtility.addMeter("Web-Get-Call-Meter", this.registry);
+ this.webPostCall = MetricsUtility.addMeter("Web-Post-Call-Meter", this.registry);
+ MetricsUtility.addGauge("fetchLogLatency", this.registry, this.logFetchLatency::get);
}
public void markWebGetCall() {
@@ -55,15 +53,15 @@ public enum WebMetrics {
* 1). drop wizard metrics deals with concurrency internally;
* 2). mark is basically a math addition operation, which should not cause race condition issue.
*/
- webGetCall.mark();
+ this.webGetCall.mark();
}
public void markWebPostCall() {
- webPostCall.mark();
+ this.webPostCall.mark();
}
- public void setFetchLogLatency(long milliseconds) {
- logFetchLatency.set(milliseconds);
+ public void setFetchLogLatency(final long milliseconds) {
+ this.logFetchLatency.set(milliseconds);
}
}
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java b/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
index 1ffb6a5..c853928 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
@@ -17,6 +17,8 @@
package azkaban.webapp;
+import static java.util.Objects.requireNonNull;
+
import azkaban.Constants;
import azkaban.utils.Props;
import com.google.inject.Inject;
@@ -28,10 +30,9 @@ import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.security.SslSocketConnector;
-import static java.util.Objects.*;
-
public class WebServerProvider implements Provider<Server> {
+
private static final Logger logger = Logger.getLogger(WebServerProvider.class);
private static final int MAX_HEADER_BUFFER_SIZE = 10 * 1024 * 1024;
@@ -40,33 +41,36 @@ public class WebServerProvider implements Provider<Server> {
@Override
public Server get() {
- requireNonNull(props);
+ requireNonNull(this.props);
- final int maxThreads = props.getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
- boolean isStatsOn = props.getBoolean("jetty.connector.stats", true);
+ final int maxThreads = this.props
+ .getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
+ final boolean isStatsOn = this.props.getBoolean("jetty.connector.stats", true);
logger.info("Setting up connector with stats on: " + isStatsOn);
- boolean ssl;
- int port;
+ final boolean ssl;
+ final int port;
final Server server = new Server();
- if (props.getBoolean("jetty.use.ssl", true)) {
- int sslPortNumber = props.getInt("jetty.ssl.port", Constants.DEFAULT_SSL_PORT_NUMBER);
+ if (this.props.getBoolean("jetty.use.ssl", true)) {
+ final int sslPortNumber = this.props
+ .getInt("jetty.ssl.port", Constants.DEFAULT_SSL_PORT_NUMBER);
port = sslPortNumber;
ssl = true;
logger.info("Setting up Jetty Https Server with port:" + sslPortNumber
+ " and numThreads:" + maxThreads);
- SslSocketConnector secureConnector = new SslSocketConnector();
+ final SslSocketConnector secureConnector = new SslSocketConnector();
secureConnector.setPort(sslPortNumber);
- secureConnector.setKeystore(props.getString("jetty.keystore"));
- secureConnector.setPassword(props.getString("jetty.password"));
- secureConnector.setKeyPassword(props.getString("jetty.keypassword"));
- secureConnector.setTruststore(props.getString("jetty.truststore"));
- secureConnector.setTrustPassword(props.getString("jetty.trustpassword"));
+ secureConnector.setKeystore(this.props.getString("jetty.keystore"));
+ secureConnector.setPassword(this.props.getString("jetty.password"));
+ secureConnector.setKeyPassword(this.props.getString("jetty.keypassword"));
+ secureConnector.setTruststore(this.props.getString("jetty.truststore"));
+ secureConnector.setTrustPassword(this.props.getString("jetty.trustpassword"));
secureConnector.setHeaderBufferSize(MAX_HEADER_BUFFER_SIZE);
// set up vulnerable cipher suites to exclude
- List<String> cipherSuitesToExclude = props.getStringList("jetty.excludeCipherSuites");
+ final List<String> cipherSuitesToExclude = this.props
+ .getStringList("jetty.excludeCipherSuites");
logger.info("Excluded Cipher Suites: " + String.valueOf(cipherSuitesToExclude));
if (cipherSuitesToExclude != null && !cipherSuitesToExclude.isEmpty()) {
secureConnector.setExcludeCipherSuites(cipherSuitesToExclude.toArray(new String[0]));
@@ -75,15 +79,15 @@ public class WebServerProvider implements Provider<Server> {
server.addConnector(secureConnector);
} else {
ssl = false;
- port = props.getInt("jetty.port", Constants.DEFAULT_PORT_NUMBER);
- SocketConnector connector = new SocketConnector();
+ port = this.props.getInt("jetty.port", Constants.DEFAULT_PORT_NUMBER);
+ final SocketConnector connector = new SocketConnector();
connector.setPort(port);
connector.setHeaderBufferSize(MAX_HEADER_BUFFER_SIZE);
server.addConnector(connector);
}
// setting stats configuration for connectors
- for (Connector connector : server.getConnectors()) {
+ for (final Connector connector : server.getConnectors()) {
connector.setStatsOn(isStatsOn);
}
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java b/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
index 8447ac3..4112f81 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
@@ -15,17 +15,6 @@
*/
package azkaban.restli;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
-
import azkaban.project.Project;
import azkaban.project.ProjectManager;
import azkaban.project.ProjectManagerException;
@@ -36,16 +25,24 @@ import azkaban.user.UserManagerException;
import azkaban.utils.Props;
import azkaban.utils.Utils;
import azkaban.webapp.AzkabanWebServer;
-
import com.linkedin.restli.common.HttpStatus;
+import com.linkedin.restli.server.RestLiServiceException;
import com.linkedin.restli.server.annotations.Action;
import com.linkedin.restli.server.annotations.ActionParam;
import com.linkedin.restli.server.annotations.RestLiActions;
import com.linkedin.restli.server.resources.ResourceContextHolder;
-import com.linkedin.restli.server.RestLiServiceException;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import javax.servlet.ServletException;
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
@RestLiActions(name = "project", namespace = "azkaban.restli")
public class ProjectManagerResource extends ResourceContextHolder {
+
private static final Logger logger = Logger
.getLogger(ProjectManagerResource.class);
@@ -54,25 +51,25 @@ public class ProjectManagerResource extends ResourceContextHolder {
}
@Action(name = "deploy")
- public String deploy(@ActionParam("sessionId") String sessionId,
- @ActionParam("projectName") String projectName,
- @ActionParam("packageUrl") String packageUrl)
+ public String deploy(@ActionParam("sessionId") final String sessionId,
+ @ActionParam("projectName") final String projectName,
+ @ActionParam("packageUrl") final String packageUrl)
throws ProjectManagerException, RestLiServiceException, UserManagerException,
ServletException, IOException {
logger.info("Deploy called. {sessionId: " + sessionId + ", projectName: "
+ projectName + ", packageUrl:" + packageUrl + "}");
- String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
- User user = ResourceUtils.getUserFromSessionId(sessionId, ip);
- ProjectManager projectManager = getAzkaban().getProjectManager();
- Project project = projectManager.getProject(projectName);
+ final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+ final User user = ResourceUtils.getUserFromSessionId(sessionId, ip);
+ final ProjectManager projectManager = getAzkaban().getProjectManager();
+ final Project project = projectManager.getProject(projectName);
if (project == null) {
- String errorMsg = "Project '" + projectName + "' not found.";
+ final String errorMsg = "Project '" + projectName + "' not found.";
throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, errorMsg);
}
if (!ResourceUtils.hasPermission(project, user, Permission.Type.WRITE)) {
- String errorMsg =
+ final String errorMsg =
"User " + user.getUserId()
+ " has no permission to write to project " + project.getName();
logger.error(errorMsg);
@@ -83,15 +80,15 @@ public class ProjectManagerResource extends ResourceContextHolder {
URL url = null;
try {
url = new URL(packageUrl);
- } catch (MalformedURLException e) {
- String errorMsg = "URL " + packageUrl + " is malformed.";
+ } catch (final MalformedURLException e) {
+ final String errorMsg = "URL " + packageUrl + " is malformed.";
logger.error(errorMsg, e);
throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, errorMsg);
}
- String filename = getFileName(url.getFile());
- File tempDir = Utils.createTempDir();
- File archiveFile = new File(tempDir, filename);
+ final String filename = getFileName(url.getFile());
+ final File tempDir = Utils.createTempDir();
+ final File archiveFile = new File(tempDir, filename);
try {
// Since zip files can be large, don't specify an explicit read or
// connection
@@ -101,8 +98,8 @@ public class ProjectManagerResource extends ResourceContextHolder {
FileUtils.copyURLToFile(url, archiveFile);
logger.info("Downloaded to " + archiveFile.toString());
- } catch (IOException e) {
- String errorMsg =
+ } catch (final IOException e) {
+ final String errorMsg =
"Download of URL " + packageUrl + " to " + archiveFile.toString()
+ " failed";
logger.error(errorMsg, e);
@@ -115,12 +112,13 @@ public class ProjectManagerResource extends ResourceContextHolder {
try {
// Check if project upload runs into any errors, such as the file
// having blacklisted jars
- Props props = new Props();
- Map<String, ValidationReport> reports = projectManager.uploadProject(project, archiveFile, "zip", user, props);
+ final Props props = new Props();
+ final Map<String, ValidationReport> reports = projectManager
+ .uploadProject(project, archiveFile, "zip", user, props);
checkReports(reports);
return Integer.toString(project.getVersion());
- } catch (ProjectManagerException e) {
- String errorMsg = "Upload of project " + project + " from " + archiveFile + " failed";
+ } catch (final ProjectManagerException e) {
+ final String errorMsg = "Upload of project " + project + " from " + archiveFile + " failed";
logger.error(errorMsg, e);
throw e;
} finally {
@@ -130,13 +128,13 @@ public class ProjectManagerResource extends ResourceContextHolder {
}
}
- void checkReports(Map<String, ValidationReport> reports) throws RestLiServiceException {
- StringBuffer errorMsgs = new StringBuffer();
- for (Map.Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
- ValidationReport report = reportEntry.getValue();
+ void checkReports(final Map<String, ValidationReport> reports) throws RestLiServiceException {
+ final StringBuffer errorMsgs = new StringBuffer();
+ for (final Map.Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
+ final ValidationReport report = reportEntry.getValue();
if (!report.getErrorMsgs().isEmpty()) {
errorMsgs.append("Validator " + reportEntry.getKey() + " reports errors: ");
- for (String msg : report.getErrorMsgs()) {
+ for (final String msg : report.getErrorMsgs()) {
errorMsgs.append(msg + System.getProperty("line.separator"));
}
}
@@ -146,7 +144,7 @@ public class ProjectManagerResource extends ResourceContextHolder {
}
}
- private String getFileName(String file) {
+ private String getFileName(final String file) {
return file.substring(file.lastIndexOf("/") + 1);
}
}
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java b/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
index ccb0a18..e55e555 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
@@ -1,12 +1,12 @@
/*
* Copyright 2014 LinkedIn Corp.
- *
+ *
* Licensed 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
@@ -16,6 +16,7 @@
package azkaban.restli;
import azkaban.project.Project;
+import azkaban.server.session.Session;
import azkaban.user.Permission;
import azkaban.user.Role;
import azkaban.user.User;
@@ -23,22 +24,20 @@ import azkaban.user.UserManager;
import azkaban.user.UserManagerException;
import azkaban.utils.WebUtils;
import azkaban.webapp.AzkabanWebServer;
-import azkaban.server.session.Session;
import com.linkedin.restli.server.ResourceContext;
-
import java.util.Map;
public class ResourceUtils {
- public static boolean hasPermission(Project project, User user,
- Permission.Type type) {
- UserManager userManager = AzkabanWebServer.getInstance().getUserManager();
+ public static boolean hasPermission(final Project project, final User user,
+ final Permission.Type type) {
+ final UserManager userManager = AzkabanWebServer.getInstance().getUserManager();
if (project.hasPermission(user, type)) {
return true;
}
- for (String roleName : user.getRoles()) {
- Role role = userManager.getRole(roleName);
+ for (final String roleName : user.getRoles()) {
+ final Role role = userManager.getRole(roleName);
if (role.getPermission().isPermissionSet(type)
|| role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
return true;
@@ -48,9 +47,9 @@ public class ResourceUtils {
return false;
}
- public static User getUserFromSessionId(String sessionId, String ip)
+ public static User getUserFromSessionId(final String sessionId, final String ip)
throws UserManagerException {
- Session session =
+ final Session session =
AzkabanWebServer.getInstance().getSessionCache().getSession(sessionId);
if (session == null) {
throw new UserManagerException("Invalid session. Login required");
@@ -61,18 +60,18 @@ public class ResourceUtils {
return session.getUser();
}
- public static String getRealClientIpAddr(ResourceContext context){
+ public static String getRealClientIpAddr(final ResourceContext context) {
// If some upstream device added an X-Forwarded-For header
// use it for the client ip
// This will support scenarios where load balancers or gateways
// front the Azkaban web server and a changing Ip address invalidates
// the session
- Map<String, String> headers = context.getRequestHeaders();
+ final Map<String, String> headers = context.getRequestHeaders();
- WebUtils utils = new WebUtils();
+ final WebUtils utils = new WebUtils();
return utils.getRealClientIpAddr(headers,
- (String) context.getRawRequestContext().getLocalAttr("REMOTE_ADDR"));
+ (String) context.getRawRequestContext().getLocalAttr("REMOTE_ADDR"));
}
}
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java b/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
index ed995c3..566a28a 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
@@ -16,23 +16,22 @@
package azkaban.restli;
-import java.util.UUID;
-import javax.servlet.ServletException;
-import org.apache.log4j.Logger;
-
import azkaban.restli.user.User;
+import azkaban.server.session.Session;
import azkaban.user.UserManager;
import azkaban.user.UserManagerException;
import azkaban.webapp.AzkabanWebServer;
-import azkaban.server.session.Session;
-
import com.linkedin.restli.server.annotations.Action;
import com.linkedin.restli.server.annotations.ActionParam;
import com.linkedin.restli.server.annotations.RestLiActions;
import com.linkedin.restli.server.resources.ResourceContextHolder;
+import java.util.UUID;
+import javax.servlet.ServletException;
+import org.apache.log4j.Logger;
@RestLiActions(name = "user", namespace = "azkaban.restli")
public class UserManagerResource extends ResourceContextHolder {
+
private static final Logger logger = Logger
.getLogger(UserManagerResource.class);
@@ -41,14 +40,14 @@ public class UserManagerResource extends ResourceContextHolder {
}
@Action(name = "login")
- public String login(@ActionParam("username") String username,
- @ActionParam("password") String password) throws UserManagerException,
+ public String login(@ActionParam("username") final String username,
+ @ActionParam("password") final String password) throws UserManagerException,
ServletException {
- String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+ final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
logger
.info("Attempting to login for " + username + " from ip '" + ip + "'");
- Session session = createSession(username, password, ip);
+ final Session session = createSession(username, password, ip);
logger.info("Session id " + session.getSessionId() + " created for user '"
+ username + "' and ip " + ip);
@@ -56,36 +55,36 @@ public class UserManagerResource extends ResourceContextHolder {
}
@Action(name = "getUserFromSessionId")
- public User getUserFromSessionId(@ActionParam("sessionId") String sessionId) {
- String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
- Session session = getSessionFromSessionId(sessionId, ip);
- azkaban.user.User azUser = session.getUser();
+ public User getUserFromSessionId(@ActionParam("sessionId") final String sessionId) {
+ final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+ final Session session = getSessionFromSessionId(sessionId, ip);
+ final azkaban.user.User azUser = session.getUser();
// Fill out the restli object with properties from the Azkaban user
- User user = new User();
+ final User user = new User();
user.setUserId(azUser.getUserId());
user.setEmail(azUser.getEmail());
return user;
}
- private Session createSession(String username, String password, String ip)
+ private Session createSession(final String username, final String password, final String ip)
throws UserManagerException, ServletException {
- UserManager manager = getAzkaban().getUserManager();
- azkaban.user.User user = manager.getUser(username, password);
+ final UserManager manager = getAzkaban().getUserManager();
+ final azkaban.user.User user = manager.getUser(username, password);
- String randomUID = UUID.randomUUID().toString();
- Session session = new Session(randomUID, user, ip);
+ final String randomUID = UUID.randomUUID().toString();
+ final Session session = new Session(randomUID, user, ip);
getAzkaban().getSessionCache().addSession(session);
return session;
}
- private Session getSessionFromSessionId(String sessionId, String remoteIp) {
+ private Session getSessionFromSessionId(final String sessionId, final String remoteIp) {
if (sessionId == null) {
return null;
}
- Session session = getAzkaban().getSessionCache().getSession(sessionId);
+ final Session session = getAzkaban().getSessionCache().getSession(sessionId);
// Check if the IP's are equal. If not, we invalidate the sesson.
if (session == null || !remoteIp.equals(session.getIp())) {
return null;
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java b/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
index f0e1164..f862be6 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
@@ -11,6 +11,7 @@ import org.junit.Assert;
* The type File assertion.
*/
public class FileAssertion {
+
/**
* Assert the given string equals the given file's content.
*
@@ -18,9 +19,11 @@ public class FileAssertion {
* @param actual the actual string
* @throws IOException the io exception
*/
- public static void assertStringEqualFileContent(String expectedFilePath, String actual)
+ public static void assertStringEqualFileContent(final String expectedFilePath,
+ final String actual)
throws IOException {
- String expected = new String(Files.readAllBytes(Paths.get(expectedFilePath)), StandardCharsets.UTF_8);
+ final String expected = new String(Files.readAllBytes(Paths.get(expectedFilePath)),
+ StandardCharsets.UTF_8);
Assert.assertEquals(expected, actual);
}
@@ -33,7 +36,7 @@ public class FileAssertion {
* @param content the content
* @return string
*/
- public static String surroundWithHtmlTag(String content) {
+ public static String surroundWithHtmlTag(final String content) {
return "<html>\n" + content + "</html>\n";
}
}
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
index e266711..2ffadcf 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
@@ -17,127 +17,127 @@
package azkaban.fixture;
-import azkaban.server.AzkabanServer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
import azkaban.server.session.Session;
import azkaban.server.session.SessionCache;
import azkaban.user.UserManager;
import azkaban.utils.Props;
import azkaban.webapp.AzkabanWebServer;
import azkaban.webapp.servlet.LoginAbstractAzkabanServlet;
-import azkaban.user.User;
-import org.apache.velocity.app.VelocityEngine;
-import org.mockito.Spy;
-import org.mortbay.jetty.Server;
-
-import javax.servlet.ServletConfig;
+import java.io.IOException;
import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.util.UUID;
-
-import static org.mockito.Mockito.*;
+import org.apache.velocity.app.VelocityEngine;
+import org.mortbay.jetty.Server;
public class MockLoginAzkabanServlet extends LoginAbstractAzkabanServlet {
- private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
-
- public static HttpServletRequest getRequestWithNoUpstream(String clientIp, String sessionId, String requestMethod){
+ private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
- HttpServletRequest req = mock(HttpServletRequest.class);
+ public static HttpServletRequest getRequestWithNoUpstream(final String clientIp,
+ final String sessionId,
+ final String requestMethod) {
- when(req.getRemoteAddr()).thenReturn(clientIp);
- when(req.getHeader("x-forwarded-for")).thenReturn(null);
- when(req.getMethod()).thenReturn(requestMethod);
- when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+ final HttpServletRequest req = mock(HttpServletRequest.class);
- // Requires sessionId to be passed that is in the application's session cache
- when(req.getParameter("session.id")).thenReturn(sessionId);
+ when(req.getRemoteAddr()).thenReturn(clientIp);
+ when(req.getHeader("x-forwarded-for")).thenReturn(null);
+ when(req.getMethod()).thenReturn(requestMethod);
+ when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
- return req;
- }
+ // Requires sessionId to be passed that is in the application's session cache
+ when(req.getParameter("session.id")).thenReturn(sessionId);
- public static HttpServletRequest getRequestWithUpstream(String clientIp, String upstreamIp, String sessionId, String requestMethod){
+ return req;
+ }
- HttpServletRequest req = mock(HttpServletRequest.class);
+ public static HttpServletRequest getRequestWithUpstream(final String clientIp,
+ final String upstreamIp,
+ final String sessionId, final String requestMethod) {
- when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
- when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp);
- when(req.getMethod()).thenReturn(requestMethod);
- when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+ final HttpServletRequest req = mock(HttpServletRequest.class);
- // Requires sessionId to be passed that is in the application's session cache
- when(req.getParameter("session.id")).thenReturn(sessionId);
+ when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
+ when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp);
+ when(req.getMethod()).thenReturn(requestMethod);
+ when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
- return req;
- }
+ // Requires sessionId to be passed that is in the application's session cache
+ when(req.getParameter("session.id")).thenReturn(sessionId);
- public static HttpServletRequest getRequestWithMultipleUpstreams(String clientIp, String upstreamIp, String sessionId, String requestMethod){
+ return req;
+ }
- HttpServletRequest req = mock(HttpServletRequest.class);
+ public static HttpServletRequest getRequestWithMultipleUpstreams(final String clientIp,
+ final String upstreamIp, final String sessionId, final String requestMethod) {
- when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
- when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp + ",1.1.1.1,3.3.3.3:33333");
- when(req.getMethod()).thenReturn(requestMethod);
- when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+ final HttpServletRequest req = mock(HttpServletRequest.class);
- // Requires sessionId to be passed that is in the application's session cache
- when(req.getParameter("session.id")).thenReturn(sessionId);
+ when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
+ when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp + ",1.1.1.1,3.3.3.3:33333");
+ when(req.getMethod()).thenReturn(requestMethod);
+ when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
- return req;
- }
+ // Requires sessionId to be passed that is in the application's session cache
+ when(req.getParameter("session.id")).thenReturn(sessionId);
- public static MockLoginAzkabanServlet getServletWithSession(String sessionId,
- String username, String clientIp)
- throws Exception{
+ return req;
+ }
- MockLoginAzkabanServlet servlet = new MockLoginAzkabanServlet();
+ public static MockLoginAzkabanServlet getServletWithSession(final String sessionId,
+ final String username, final String clientIp)
+ throws Exception {
- Server server = mock(Server.class);
- Props props = new Props();
- UserManager userManager = mock(UserManager.class);
+ final MockLoginAzkabanServlet servlet = new MockLoginAzkabanServlet();
- // Need to mock and inject an application instance into the servlet
- AzkabanWebServer app = mock(AzkabanWebServer.class);
+ final Server server = mock(Server.class);
+ final Props props = new Props();
+ final UserManager userManager = mock(UserManager.class);
- MockLoginAzkabanServlet servletSpy = spy(servlet);
+ // Need to mock and inject an application instance into the servlet
+ final AzkabanWebServer app = mock(AzkabanWebServer.class);
- when(servletSpy.getApplication()).thenReturn(app);
+ final MockLoginAzkabanServlet servletSpy = spy(servlet);
- // Create a concrete SessionCache so a session will get persisted
- // and can get looked up
- SessionCache cache = new SessionCache(props);
- when(app.getSessionCache()).thenReturn(cache);
+ when(servletSpy.getApplication()).thenReturn(app);
- // Need a valid object here when processing a request
- when(app.getVelocityEngine()).thenReturn(mock(VelocityEngine.class));
+ // Create a concrete SessionCache so a session will get persisted
+ // and can get looked up
+ final SessionCache cache = new SessionCache(props);
+ when(app.getSessionCache()).thenReturn(cache);
- // Construct and store a session in the servlet
- azkaban.user.User user = mock(azkaban.user.User.class);
- when(user.getEmail()).thenReturn(username + "@mail.com");
- when(user.getUserId()).thenReturn(username);
+ // Need a valid object here when processing a request
+ when(app.getVelocityEngine()).thenReturn(mock(VelocityEngine.class));
- Session session = new Session(sessionId, user, clientIp);
- servletSpy.getApplication().getSessionCache().addSession(session);
+ // Construct and store a session in the servlet
+ final azkaban.user.User user = mock(azkaban.user.User.class);
+ when(user.getEmail()).thenReturn(username + "@mail.com");
+ when(user.getUserId()).thenReturn(username);
+ final Session session = new Session(sessionId, user, clientIp);
+ servletSpy.getApplication().getSessionCache().addSession(session);
- // Return the servletSpy since we replaced implementation for 'getApplication'
- return servletSpy;
- }
+ // Return the servletSpy since we replaced implementation for 'getApplication'
+ return servletSpy;
+ }
- @Override
- protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session)
- throws ServletException, IOException {
+ @Override
+ protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
+ throws ServletException, IOException {
- resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
- }
+ resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
+ }
- @Override
- protected void handlePost(HttpServletRequest req, HttpServletResponse resp, Session session)
- throws ServletException, IOException {
+ @Override
+ protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+ final Session session)
+ throws ServletException, IOException {
- resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
- }
+ resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
+ }
}
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
index cbfb24c..684f268 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
@@ -11,30 +11,30 @@ import java.util.Date;
* Provide a mock project.
*/
public class MockProject {
+
/**
* Get mock project project.
*
* @return a mock project for testing
*/
- public static Project getMockProject(){
- Project project = new Project(1, "test_project");
+ public static Project getMockProject() {
+ final Project project = new Project(1, "test_project");
project.setDescription("My project description");
project.setLastModifiedUser("last_modified_user_name");
- DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
+ final DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
try {
- Date modifiedDate = dateFormat.parse("2000:01:02:3:4:5");
+ final Date modifiedDate = dateFormat.parse("2000:01:02:3:4:5");
- long modifiedTime = modifiedDate.getTime();
+ final long modifiedTime = modifiedDate.getTime();
project.setLastModifiedTimestamp(modifiedTime);
- Date createDate = dateFormat.parse("1999:06:07:8:9:10");
+ final Date createDate = dateFormat.parse("1999:06:07:8:9:10");
- long createTime = createDate.getTime();
+ final long createTime = createDate.getTime();
project.setCreateTimestamp(createTime);
- }
- catch (ParseException e) {
+ } catch (final ParseException e) {
e.printStackTrace();
}
return project;
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
index bce0e90..2796941 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
@@ -22,7 +22,6 @@ import com.linkedin.r2.message.rest.RestRequest;
import com.linkedin.restli.server.PathKeys;
import com.linkedin.restli.server.ProjectionMode;
import com.linkedin.restli.server.ResourceContext;
-
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -30,113 +29,114 @@ import java.util.Map;
public class MockResourceContext implements ResourceContext {
- Map<String, String> requestHeaders;
- RequestContext requestContext;
+ Map<String, String> requestHeaders;
+ RequestContext requestContext;
- @Override
- public RestRequest getRawRequest() {
- return null;
- }
+ public MockResourceContext() {
+ this.requestHeaders = new HashMap<>();
+ this.requestContext = new RequestContext();
+ }
- @Override
- public String getRequestMethod() {
- return null;
- }
+ public static MockResourceContext getResourceContextWithUpstream(final String clientIp,
+ final String upstream) {
+ final MockResourceContext ctx = new MockResourceContext();
- @Override
- public PathKeys getPathKeys() {
- return null;
- }
+ ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+ ctx.setRequestHeader("X-Forwarded-For", upstream);
- @Override
- public MaskTree getProjectionMask() {
- return null;
- }
+ return ctx;
+ }
- @Override
- public boolean hasParameter(String key) {
- return false;
- }
+ public static MockResourceContext getResourceContextWithMultipleUpstreams(final String clientIp,
+ final String firstUpstream) {
+ final MockResourceContext ctx = new MockResourceContext();
- @Override
- public String getParameter(String key) {
- return null;
- }
+ ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+ ctx.setRequestHeader("X-Forwarded-For", firstUpstream + ",55.55.55.55:55555,1.1.1.1:9999");
- @Override
- public Object getStructuredParameter(String key) {
- return null;
- }
+ return ctx;
+ }
- @Override
- public List<String> getParameterValues(String key) {
- return null;
- }
+ public static MockResourceContext getResourceContext(final String clientIp) {
+ final MockResourceContext ctx = new MockResourceContext();
- public void setRequestHeader(String name, String value){
+ ctx.setLocalAttr("REMOTE_ADDR", clientIp);
- this.requestHeaders.put(name, value);
- }
+ return ctx;
+ }
- @Override
- public Map<String, String> getRequestHeaders() {
- return this.requestHeaders;
- }
+ @Override
+ public RestRequest getRawRequest() {
+ return null;
+ }
- @Override
- public void setResponseHeader(String name, String value) {
+ @Override
+ public String getRequestMethod() {
+ return null;
+ }
- }
+ @Override
+ public PathKeys getPathKeys() {
+ return null;
+ }
- @Override
- public RequestContext getRawRequestContext() {
- return this.requestContext;
- }
+ @Override
+ public MaskTree getProjectionMask() {
+ return null;
+ }
- @Override
- public ProjectionMode getProjectionMode() {
- return null;
- }
+ @Override
+ public boolean hasParameter(final String key) {
+ return false;
+ }
- @Override
- public void setProjectionMode(ProjectionMode mode) {
+ @Override
+ public String getParameter(final String key) {
+ return null;
+ }
- }
+ @Override
+ public Object getStructuredParameter(final String key) {
+ return null;
+ }
- public void setLocalAttr(String name, String value){
- requestContext.putLocalAttr(name, value);
- }
+ @Override
+ public List<String> getParameterValues(final String key) {
+ return null;
+ }
- public MockResourceContext(){
- requestHeaders = new HashMap<>();
- requestContext = new RequestContext();
- }
+ public void setRequestHeader(final String name, final String value) {
- public static MockResourceContext getResourceContextWithUpstream(String clientIp, String upstream){
- MockResourceContext ctx = new MockResourceContext();
+ this.requestHeaders.put(name, value);
+ }
- ctx.setLocalAttr("REMOTE_ADDR", clientIp);
- ctx.setRequestHeader("X-Forwarded-For", upstream);
+ @Override
+ public Map<String, String> getRequestHeaders() {
+ return this.requestHeaders;
+ }
- return ctx;
- }
+ @Override
+ public void setResponseHeader(final String name, final String value) {
- public static MockResourceContext getResourceContextWithMultipleUpstreams(String clientIp,
- String firstUpstream){
- MockResourceContext ctx = new MockResourceContext();
+ }
- ctx.setLocalAttr("REMOTE_ADDR", clientIp);
- ctx.setRequestHeader("X-Forwarded-For", firstUpstream + ",55.55.55.55:55555,1.1.1.1:9999");
+ @Override
+ public RequestContext getRawRequestContext() {
+ return this.requestContext;
+ }
- return ctx;
- }
+ @Override
+ public ProjectionMode getProjectionMode() {
+ return null;
+ }
- public static MockResourceContext getResourceContext(String clientIp){
- MockResourceContext ctx = new MockResourceContext();
+ @Override
+ public void setProjectionMode(final ProjectionMode mode) {
- ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+ }
- return ctx;
- }
+ public void setLocalAttr(final String name, final String value) {
+ this.requestContext.putLocalAttr(name, value);
+ }
}
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java b/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
index 9a77d41..a71f38a 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
@@ -9,6 +9,7 @@ import org.apache.velocity.tools.generic.EscapeTool;
* The type Velocity context test util.
*/
public class VelocityContextTestUtil {
+
/**
* Gets an instance of the velocity context
*
@@ -17,9 +18,9 @@ public class VelocityContextTestUtil {
* @return the instance
*/
public static VelocityContext getInstance() {
- VelocityContext context = new VelocityContext();
+ final VelocityContext context = new VelocityContext();
context.put("esc", new EscapeTool());
- WebUtils utils = new WebUtils();
+ final WebUtils utils = new WebUtils();
context.put("utils", utils);
return context;
}
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java b/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
index 52b5929..0ad0b84 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
@@ -7,6 +7,7 @@ import java.io.IOException;
* Utility to assert based on expected files in the webserver project.
*/
public class WebFileAssertion {
+
private static final String EXPECTED_FILE_DIR = "src/test/expected/";
/**
@@ -16,9 +17,10 @@ public class WebFileAssertion {
* @param actual the actual
* @throws IOException the io exception
*/
- public static void assertStringEqualFileContent(String expectedFileName, String actual)
+ public static void assertStringEqualFileContent(final String expectedFileName,
+ final String actual)
throws IOException {
- String expectedFilePath = EXPECTED_FILE_DIR + expectedFileName;
+ final String expectedFilePath = EXPECTED_FILE_DIR + expectedFileName;
FileAssertion.assertStringEqualFileContent(expectedFilePath, actual);
}
}
diff --git a/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java b/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
index a42abcc..0555851 100644
--- a/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
@@ -19,15 +19,12 @@ package azkaban.restli;
import static org.junit.Assert.assertEquals;
import azkaban.project.validator.ValidationReport;
-
import com.linkedin.restli.common.HttpStatus;
import com.linkedin.restli.server.RestLiServiceException;
-
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
-
import org.junit.Test;
/**
@@ -38,10 +35,11 @@ import org.junit.Test;
*/
public class DeployProjectTest {
+
@Test
public void testWarnedDeploy() {
- ProjectManagerResource resource = new ProjectManagerResource();
- Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+ final ProjectManagerResource resource = new ProjectManagerResource();
+ final Map<String, ValidationReport> reports = new LinkedHashMap<>();
for (int i = 0; i < 3; i++) {
addMockWarning(reports, "Test warn level info message.");
}
@@ -52,8 +50,8 @@ public class DeployProjectTest {
@Test
public void testErrorDeploy() {
- ProjectManagerResource resource = new ProjectManagerResource();
- Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+ final ProjectManagerResource resource = new ProjectManagerResource();
+ final Map<String, ValidationReport> reports = new LinkedHashMap<>();
for (int i = 0; i < 3; i++) {
addMockError(reports, "Test error level info message.");
}
@@ -61,7 +59,7 @@ public class DeployProjectTest {
// report with errors. Uncaught exceptions will result in failure
try {
resource.checkReports(reports);
- } catch (RestLiServiceException e) {
+ } catch (final RestLiServiceException e) {
//Ensure we have the right status code and exit
assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
}
@@ -69,14 +67,13 @@ public class DeployProjectTest {
@Test
public void testWarnErrorDeploy() {
- ProjectManagerResource resource = new ProjectManagerResource();
- Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+ final ProjectManagerResource resource = new ProjectManagerResource();
+ final Map<String, ValidationReport> reports = new LinkedHashMap<>();
for (int i = 0; i < 7; i++) {
// If i is even, make an error report, otherwise make a warning report
if (i % 2 == 0) {
addMockError(reports, "Test error level info message.");
- }
- else {
+ } else {
addMockWarning(reports, "Test warn level info message.");
}
}
@@ -85,7 +82,7 @@ public class DeployProjectTest {
// report with errors. Uncaught exceptions will result in failure
try {
resource.checkReports(reports);
- } catch (RestLiServiceException e) {
+ } catch (final RestLiServiceException e) {
//Ensure we have the right status code and exit
assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
}
@@ -96,8 +93,8 @@ public class DeployProjectTest {
*/
@Test
public void testErrorMessageDeploy() {
- ProjectManagerResource resource = new ProjectManagerResource();
- Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+ final ProjectManagerResource resource = new ProjectManagerResource();
+ final Map<String, ValidationReport> reports = new LinkedHashMap<>();
addMockError(reports, "This should show up.");
@@ -105,7 +102,7 @@ public class DeployProjectTest {
// report with errors. Uncaught exceptions will result in failure
try {
resource.checkReports(reports);
- } catch (RestLiServiceException e) {
+ } catch (final RestLiServiceException e) {
//Ensure we have the right status code and exit
assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
assertEquals(e.getMessage(), "Validator Error reports errors: This should show up."
@@ -113,17 +110,17 @@ public class DeployProjectTest {
}
}
- private void addMockWarning(Map<String, ValidationReport> reports, String msg) {
- Set<String> warnMsgs = new HashSet<String>();
- ValidationReport warnRpt = new ValidationReport();
+ private void addMockWarning(final Map<String, ValidationReport> reports, final String msg) {
+ final Set<String> warnMsgs = new HashSet<>();
+ final ValidationReport warnRpt = new ValidationReport();
warnMsgs.add(msg);
warnRpt.addWarningMsgs(warnMsgs);
reports.put("Warn", warnRpt);
}
- private void addMockError(Map<String, ValidationReport> reports, String msg) {
- Set<String> errorMsgs = new HashSet<String>();
- ValidationReport errorRpt = new ValidationReport();
+ private void addMockError(final Map<String, ValidationReport> reports, final String msg) {
+ final Set<String> errorMsgs = new HashSet<>();
+ final ValidationReport errorRpt = new ValidationReport();
errorMsgs.add(msg);
errorRpt.addErrorMsgs(errorMsgs);
reports.put("Error", errorRpt);
diff --git a/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java b/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
index c6203b5..ff2378b 100644
--- a/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
@@ -16,62 +16,63 @@
package azkaban.restli;
-import azkaban.fixture.MockResourceContext;
-
-import org.junit.Test;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import azkaban.fixture.MockResourceContext;
+import org.junit.Test;
+
public class ResourceUtilsTest {
- @Test
- public void testWhenNoXForwardedForHeaderUseClientIp(){
+ @Test
+ public void testWhenNoXForwardedForHeaderUseClientIp() {
- String clientIp = "127.0.0.1:10000";
- MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
- assertNotNull(ctx);
+ final String clientIp = "127.0.0.1:10000";
+ final MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
+ assertNotNull(ctx);
- String ip = ResourceUtils.getRealClientIpAddr(ctx);
+ final String ip = ResourceUtils.getRealClientIpAddr(ctx);
- assertEquals(ip, "127.0.0.1");
- }
+ assertEquals(ip, "127.0.0.1");
+ }
- @Test
- public void testWhenClientIpNoPort(){
+ @Test
+ public void testWhenClientIpNoPort() {
- String clientIp = "192.168.1.1";
- MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
- assertNotNull(ctx);
+ final String clientIp = "192.168.1.1";
+ final MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
+ assertNotNull(ctx);
- String ip = ResourceUtils.getRealClientIpAddr(ctx);
+ final String ip = ResourceUtils.getRealClientIpAddr(ctx);
- assertEquals(ip, "192.168.1.1");
- }
+ assertEquals(ip, "192.168.1.1");
+ }
- @Test
- public void testWhenXForwardedForHeaderUseHeader(){
+ @Test
+ public void testWhenXForwardedForHeaderUseHeader() {
- String clientIp = "127.0.0.1:10000";
- String upstreamIp = "192.168.1.1:10000";
- MockResourceContext ctx = MockResourceContext.getResourceContextWithUpstream(clientIp, upstreamIp);
- assertNotNull(ctx);
+ final String clientIp = "127.0.0.1:10000";
+ final String upstreamIp = "192.168.1.1:10000";
+ final MockResourceContext ctx = MockResourceContext
+ .getResourceContextWithUpstream(clientIp, upstreamIp);
+ assertNotNull(ctx);
- String ip = ResourceUtils.getRealClientIpAddr(ctx);
+ final String ip = ResourceUtils.getRealClientIpAddr(ctx);
- assertEquals(ip, "192.168.1.1");
- }
+ assertEquals(ip, "192.168.1.1");
+ }
- @Test
- public void testWhenXForwardedForHeaderMultipleUpstreamsUseHeader(){
+ @Test
+ public void testWhenXForwardedForHeaderMultipleUpstreamsUseHeader() {
- String clientIp = "127.0.0.1:10000";
- String upstreamIp = "192.168.1.1:10000";
- MockResourceContext ctx = MockResourceContext.getResourceContextWithMultipleUpstreams(clientIp, upstreamIp);
- assertNotNull(ctx);
+ final String clientIp = "127.0.0.1:10000";
+ final String upstreamIp = "192.168.1.1:10000";
+ final MockResourceContext ctx = MockResourceContext
+ .getResourceContextWithMultipleUpstreams(clientIp, upstreamIp);
+ assertNotNull(ctx);
- String ip = ResourceUtils.getRealClientIpAddr(ctx);
+ final String ip = ResourceUtils.getRealClientIpAddr(ctx);
- assertEquals(ip, "192.168.1.1");
- }
+ assertEquals(ip, "192.168.1.1");
+ }
}
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
index bb6cf7e..14b2f0b 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
@@ -17,8 +17,13 @@
package azkaban.webapp;
+import static azkaban.ServiceProvider.SERVICE_PROVIDER;
+import static azkaban.executor.ExecutorManager.AZKABAN_USE_MULTIPLE_EXECUTORS;
+import static java.util.Objects.requireNonNull;
+import static org.apache.commons.io.FileUtils.deleteQuietly;
+import static org.junit.Assert.assertNotNull;
+
import azkaban.AzkabanCommonModule;
-import azkaban.Constants;
import azkaban.database.AzkabanDatabaseSetup;
import azkaban.database.AzkabanDatabaseUpdater;
import azkaban.executor.Executor;
@@ -35,30 +40,26 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-import static azkaban.ServiceProvider.*;
-import static azkaban.executor.ExecutorManager.*;
-import static java.util.Objects.*;
-import static org.apache.commons.io.FileUtils.*;
-import static org.junit.Assert.*;
-
public class AzkabanWebServerTest {
+
public static final String AZKABAN_DB_SQL_PATH = "azkaban-db/src/main/sql";
private static final Props props = new Props();
private static String getUserManagerXmlFile() {
- URL resource = AzkabanWebServerTest.class.getClassLoader().getResource("azkaban-users.xml");
+ final URL resource = AzkabanWebServerTest.class.getClassLoader()
+ .getResource("azkaban-users.xml");
return requireNonNull(resource).getPath();
}
private static String getSqlScriptsDir() throws IOException {
// Dummy because any resource file works.
final String dummyResourcePath = getUserManagerXmlFile();
- Path resources = Paths.get(dummyResourcePath).getParent();
- Path azkabanRoot = resources.getParent().getParent().getParent().getParent();
+ final Path resources = Paths.get(dummyResourcePath).getParent();
+ final Path azkabanRoot = resources.getParent().getParent().getParent().getParent();
- File sqlScriptDir = Paths.get(azkabanRoot.toString(), AZKABAN_DB_SQL_PATH).toFile();
+ final File sqlScriptDir = Paths.get(azkabanRoot.toString(), AZKABAN_DB_SQL_PATH).toFile();
return sqlScriptDir.getCanonicalPath();
}
@@ -66,7 +67,7 @@ public class AzkabanWebServerTest {
public static void setUp() throws Exception {
tearDown();
- String sqlScriptsDir = getSqlScriptsDir();
+ final String sqlScriptsDir = getSqlScriptsDir();
props.put(AzkabanDatabaseSetup.DATABASE_SQL_SCRIPT_DIR, sqlScriptsDir);
props.put("database.type", "h2");
@@ -95,17 +96,17 @@ public class AzkabanWebServerTest {
@Test
public void testInjection() throws Exception {
- Injector injector = Guice.createInjector(
+ final Injector injector = Guice.createInjector(
new AzkabanCommonModule(props),
new AzkabanWebServerModule()
);
SERVICE_PROVIDER.unsetInjector();
SERVICE_PROVIDER.setInjector(injector);
- ExecutorLoader executorLoader = injector.getInstance(ExecutorLoader.class);
+ final ExecutorLoader executorLoader = injector.getInstance(ExecutorLoader.class);
assertNotNull(executorLoader);
- Executor executor = executorLoader.addExecutor("localhost", 60000);
+ final Executor executor = executorLoader.addExecutor("localhost", 60000);
executor.setActive(true);
executorLoader.updateExecutor(executor);
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
index 09fe06a..4a33cf4 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
@@ -2,11 +2,10 @@ package azkaban.webapp.servlet;
import static org.junit.Assert.assertTrue;
-import org.apache.velocity.VelocityContext;
-import org.junit.Test;
-
import azkaban.fixture.VelocityContextTestUtil;
import azkaban.fixture.VelocityTemplateTestUtil;
+import org.apache.velocity.VelocityContext;
+import org.junit.Test;
/**
* Test flow execution page.
@@ -15,16 +14,18 @@ public class ExecutionFlowViewTest {
private static final String EXTERNAL_ANALYZER_ELEMENT =
"<li><a id=\"analyzerButton\" href=\"http://elephant.linkedin.com/\" "
- + "class=\"btn btn-info btn-sm\" type=\"button\" target=\"_blank\" "
- + "title=\"Analyze job in Dr. Elephant\">Dr. Elephant</a></li>";
+ + "class=\"btn btn-info btn-sm\" type=\"button\" target=\"_blank\" "
+ + "title=\"Analyze job in Dr. Elephant\">Dr. Elephant</a></li>";
+
/**
* Test aims to check that the external analyzer button is displayed
* in the page.
+ *
* @throws Exception the exception
*/
@Test
public void testExternalAnalyzerButton() throws Exception {
- VelocityContext context = VelocityContextTestUtil.getInstance();
+ final VelocityContext context = VelocityContextTestUtil.getInstance();
context.put("execid", 1);
context.put("executionExternalLinkURL", "http://elephant.linkedin.com/");
@@ -33,8 +34,9 @@ public class ExecutionFlowViewTest {
context.put("projectName", "user-hello-pig-azkaban");
context.put("flowid", 27);
- String result =
- VelocityTemplateTestUtil.renderTemplate("executingflowpage", context).replaceAll("\\s+", "");
+ final String result =
+ VelocityTemplateTestUtil.renderTemplate("executingflowpage", context)
+ .replaceAll("\\s+", "");
assertTrue(result.contains(EXTERNAL_ANALYZER_ELEMENT.replaceAll("\\s+", "")));
}
}
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
index 564ba8b..f1d2f60 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
@@ -17,177 +17,161 @@
package azkaban.webapp.servlet;
-import azkaban.fixture.MockLoginAzkabanServlet;
-import azkaban.server.session.Session;
-import azkaban.server.session.SessionCache;
-import org.junit.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import static junit.framework.Assert.assertNotNull;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotSame;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public class LoginAbstractAzkabanServletTest {
-
- private HttpServletResponse getResponse(StringWriter stringWriter){
- HttpServletResponse resp = mock(HttpServletResponse.class);
- PrintWriter writer = new PrintWriter(stringWriter);
-
- try{
- when(resp.getWriter()).thenReturn(writer);
- }
- catch(IOException ex){
- System.out.println(ex);
- }
-
- return resp;
- }
-
- @Test
- public void testWhenGetRequestSessionIsValid() throws Exception, IOException, ServletException {
-
- String clientIp = "127.0.0.1:10000";
- String sessionId = "111";
-
-
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "GET");
-
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+import azkaban.fixture.MockLoginAzkabanServlet;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.junit.Test;
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "127.0.0.1");
+public class LoginAbstractAzkabanServletTest {
- servlet.doGet(req, resp);
+ private HttpServletResponse getResponse(final StringWriter stringWriter) {
+ final HttpServletResponse resp = mock(HttpServletResponse.class);
+ final PrintWriter writer = new PrintWriter(stringWriter);
- // Assert that our response was written (we have a valid session)
- assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ try {
+ when(resp.getWriter()).thenReturn(writer);
+ } catch (final IOException ex) {
+ System.out.println(ex);
}
- @Test
- public void testWhenPostRequestSessionIsValid() throws Exception{
-
- String clientIp = "127.0.0.1:10000";
- String sessionId = "111";
+ return resp;
+ }
+ @Test
+ public void testWhenGetRequestSessionIsValid() throws Exception, IOException, ServletException {
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+ final String clientIp = "127.0.0.1:10000";
+ final String sessionId = "111";
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "127.0.0.1");
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithNoUpstream(clientIp, sessionId, "GET");
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
- servlet.doPost(req, resp);
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "127.0.0.1");
- // Assert that our response was written (we have a valid session)
- assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
- }
-
- @Test
- public void testWhenPostRequestChangedClientIpSessionIsInvalid() throws Exception{
-
- String clientIp = "127.0.0.2:10000";
- String sessionId = "111";
-
-
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
+ servlet.doGet(req, resp);
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+ // Assert that our response was written (we have a valid session)
+ assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
+ @Test
+ public void testWhenPostRequestSessionIsValid() throws Exception {
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "127.0.0.1");
+ final String clientIp = "127.0.0.1:10000";
+ final String sessionId = "111";
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithNoUpstream(clientIp, sessionId, "POST");
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
- servlet.doPost(req, resp);
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "127.0.0.1");
- // Assert that our response was written (we have a valid session)
- assertNotSame("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
- }
+ servlet.doPost(req, resp);
- @Test
- public void testWhenPostRequestChangedClientPortSessionIsValid() throws Exception{
+ // Assert that our response was written (we have a valid session)
+ assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
- String clientIp = "127.0.0.1:10000";
- String sessionId = "111";
+ @Test
+ public void testWhenPostRequestChangedClientIpSessionIsInvalid() throws Exception {
+ final String clientIp = "127.0.0.2:10000";
+ final String sessionId = "111";
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithNoUpstream(clientIp, sessionId, "POST");
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "127.0.0.1");
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "127.0.0.1");
+ servlet.doPost(req, resp);
+ // Assert that our response was written (we have a valid session)
+ assertNotSame("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
- servlet.doPost(req, resp);
+ @Test
+ public void testWhenPostRequestChangedClientPortSessionIsValid() throws Exception {
- // Assert that our response was written (we have a valid session)
- assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
- }
+ final String clientIp = "127.0.0.1:10000";
+ final String sessionId = "111";
- @Test
- public void testWhenPostRequestWithUpstreamSessionIsValid() throws Exception{
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithNoUpstream(clientIp, sessionId, "POST");
- String clientIp = "127.0.0.1:10000";
- String upstreamIp = "192.168.1.1:11111";
- String sessionId = "111";
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "127.0.0.1");
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithUpstream(clientIp, upstreamIp,
- sessionId, "POST");
+ servlet.doPost(req, resp);
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+ // Assert that our response was written (we have a valid session)
+ assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
+ @Test
+ public void testWhenPostRequestWithUpstreamSessionIsValid() throws Exception {
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "192.168.1.1");
+ final String clientIp = "127.0.0.1:10000";
+ final String upstreamIp = "192.168.1.1:11111";
+ final String sessionId = "111";
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithUpstream(clientIp, upstreamIp,
+ sessionId, "POST");
- servlet.doPost(req, resp);
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
- // Assert that our response was written (we have a valid session)
- assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
- }
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "192.168.1.1");
- @Test
- public void testWhenPostRequestWithMultipleUpstreamsSessionIsValid() throws Exception{
+ servlet.doPost(req, resp);
- String clientIp = "127.0.0.1:10000";
- String upstreamIp = "192.168.1.1:11111,888.8.8.8:2222,5.5.5.5:5555";
- String sessionId = "111";
+ // Assert that our response was written (we have a valid session)
+ assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
+ @Test
+ public void testWhenPostRequestWithMultipleUpstreamsSessionIsValid() throws Exception {
- HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithUpstream(clientIp, upstreamIp,
- sessionId, "POST");
+ final String clientIp = "127.0.0.1:10000";
+ final String upstreamIp = "192.168.1.1:11111,888.8.8.8:2222,5.5.5.5:5555";
+ final String sessionId = "111";
- StringWriter writer = new StringWriter();
- HttpServletResponse resp = getResponse(writer);
+ final HttpServletRequest req = MockLoginAzkabanServlet
+ .getRequestWithUpstream(clientIp, upstreamIp,
+ sessionId, "POST");
+ final StringWriter writer = new StringWriter();
+ final HttpServletResponse resp = getResponse(writer);
- MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
- "user", "192.168.1.1");
+ final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+ "user", "192.168.1.1");
+ servlet.doPost(req, resp);
- servlet.doPost(req, resp);
-
- // Assert that our response was written (we have a valid session)
- assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
- }
+ // Assert that our response was written (we have a valid session)
+ assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+ }
}
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
index c668ec7..1130b3e 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
@@ -16,13 +16,13 @@
package azkaban.webapp;
+import static org.junit.Assert.assertEquals;
+
import azkaban.metrics.MetricsManager;
import azkaban.metrics.MetricsTestUtility;
import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.*;
-
public class WebMetricsTest {
@@ -32,13 +32,13 @@ public class WebMetricsTest {
@Before
public void setUp() {
// todo HappyRay: move MetricsManager, WebMetrics to use Juice.
- testUtil = new MetricsTestUtility(MetricsManager.INSTANCE.getRegistry());
- metrics = WebMetrics.INSTANCE;
+ this.testUtil = new MetricsTestUtility(MetricsManager.INSTANCE.getRegistry());
+ this.metrics = WebMetrics.INSTANCE;
}
@Test
public void testLogFetchLatencyMetrics() {
- metrics.setFetchLogLatency(14);
- assertEquals(14, testUtil.getGaugeValue("fetchLogLatency"));
+ this.metrics.setFetchLogLatency(14);
+ assertEquals(14, this.testUtil.getGaugeValue("fetchLogLatency"));
}
}