Details
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 21c6163..9b22f42 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -1011,6 +1011,7 @@ public class AzkabanWebServer extends AzkabanServer {
String pluginName = pluginProps.getString("viewer.name");
String pluginWebPath = pluginProps.getString("viewer.path");
+ String pluginJobType = pluginProps.getString("viewer.jobtype", null);
int pluginOrder = pluginProps.getInt("viewer.order", 0);
boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
List<String> extLibClasspath = pluginProps.getStringList("viewer.external.classpaths", (List<String>)null);
@@ -1114,7 +1115,12 @@ public class AzkabanWebServer extends AzkabanServer {
AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet)obj;
root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
- installedViewerPlugins.add(new ViewerPlugin(pluginName, pluginWebPath, pluginOrder, pluginHidden));
+ installedViewerPlugins.add(new ViewerPlugin(
+ pluginName,
+ pluginWebPath,
+ pluginOrder,
+ pluginHidden,
+ pluginJobType));
}
// Velocity needs the jar resource paths to be set.
diff --git a/src/java/azkaban/webapp/plugin/PluginRegistry.java b/src/java/azkaban/webapp/plugin/PluginRegistry.java
index 943e865..63e0726 100644
--- a/src/java/azkaban/webapp/plugin/PluginRegistry.java
+++ b/src/java/azkaban/webapp/plugin/PluginRegistry.java
@@ -16,6 +16,8 @@
package azkaban.webapp.plugin;
+import java.util.List;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -23,16 +25,41 @@ public class PluginRegistry {
private static PluginRegistry registry;
- public Map<String, ViewerPlugin> plugins;
+ public Map<String, ViewerPlugin> viewerPlugins;
- private PluginRegistry() {
+ public Map<String, List<ViewerPlugin>> jobTypeViewerPlugins;
+ private PluginRegistry() {
+ viewerPlugins = new HashMap<String, ViewerPlugin>();
+ jobTypeViewerPlugins = new HashMap<String, List<ViewerPlugin>>();
}
public void register(ViewerPlugin plugin) {
-
+ viewerPlugins.put(plugin.getPluginName(), plugin);
+ String jobType = plugin.getJobType();
+ if (jobType == null) {
+ return;
+ }
+ List<ViewerPlugin> plugins = null;
+ if (!jobTypeViewerPlugins.containsKey(jobType)) {
+ plugins = new ArrayList<ViewerPlugin>();
+ plugins.add(plugin);
+ jobTypeViewerPlugins.put(jobType, plugins);
+ }
+ else {
+ plugins = jobTypeViewerPlugins.get(jobType);
+ plugins.add(plugin);
+ }
}
+ public List<ViewerPlugin> getViewerPlugins() {
+ return new ArrayList<ViewerPlugin>(viewerPlugins.values());
+ }
+
+ public List<ViewerPlugin> getViewerPluginsForJobType(String jobType) {
+ return jobTypeViewerPlugins.get(jobType);
+ }
+
public static PluginRegistry getRegistry() {
if (registry == null) {
registry = new PluginRegistry();
diff --git a/src/java/azkaban/webapp/plugin/TriggerPlugin.java b/src/java/azkaban/webapp/plugin/TriggerPlugin.java
index 608c07a..6d51ab4 100644
--- a/src/java/azkaban/webapp/plugin/TriggerPlugin.java
+++ b/src/java/azkaban/webapp/plugin/TriggerPlugin.java
@@ -18,6 +18,8 @@ package azkaban.webapp.plugin;
import azkaban.trigger.TriggerAgent;
+import azkaban.webapp.servlet.AbstractAzkabanServlet;
+
public interface TriggerPlugin {
// public TriggerPlugin(String pluginName, Props props, AzkabanWebServer azkabanWebApp) {
diff --git a/src/java/azkaban/webapp/plugin/ViewerPlugin.java b/src/java/azkaban/webapp/plugin/ViewerPlugin.java
index 43f83a1..4fd5fce 100644
--- a/src/java/azkaban/webapp/plugin/ViewerPlugin.java
+++ b/src/java/azkaban/webapp/plugin/ViewerPlugin.java
@@ -19,14 +19,21 @@ package azkaban.webapp.plugin;
public class ViewerPlugin {
private final String pluginName;
private final String pluginPath;
+ private final String jobType;
private final int order;
private boolean hidden;
- public ViewerPlugin(String pluginName, String pluginPath, int order, boolean hidden) {
+ public ViewerPlugin(
+ String pluginName,
+ String pluginPath,
+ int order,
+ boolean hidden,
+ String jobType) {
this.pluginName = pluginName;
this.pluginPath = pluginPath;
this.order = order;
this.setHidden(hidden);
+ this.jobType = jobType;
}
public String getPluginName() {
@@ -48,4 +55,8 @@ public class ViewerPlugin {
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
+
+ public String getJobType() {
+ return jobType;
+ }
}
diff --git a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 8ac470e..3d41e2c 100644
--- a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -39,6 +39,8 @@ import azkaban.utils.Props;
import azkaban.webapp.AzkabanServer;
import azkaban.webapp.AzkabanWebServer;
import azkaban.webapp.session.Session;
+import azkaban.webapp.plugin.ViewerPlugin;
+import azkaban.webapp.plugin.TriggerPlugin;
/**
* Base Servlet for pages