azkaban-uncached
Changes
src/java/azkaban/executor/ExecutorManager.java 150(+0 -150)
src/java/azkaban/sla/SlaOption.java 1(+0 -1)
Details
src/java/azkaban/executor/ExecutorManager.java 150(+0 -150)
diff --git a/src/java/azkaban/executor/ExecutorManager.java b/src/java/azkaban/executor/ExecutorManager.java
index 5b9a95e..fd8a16c 100644
--- a/src/java/azkaban/executor/ExecutorManager.java
+++ b/src/java/azkaban/executor/ExecutorManager.java
@@ -96,151 +96,6 @@ public class ExecutorManager implements ExecutorManagerAdapter {
}
-// private Map<String, Alerter> loadAlerters(Props props) {
-// Map<String, Alerter> allAlerters = new HashMap<String, Alerter>();
-// // load built-in alerters
-// Emailer mailAlerter = new Emailer(props);
-// allAlerters.put("email", mailAlerter);
-// // load all plugin alerters
-// String pluginDir = props.getString("alerter.plugin.dir", "plugins/alerter");
-// allAlerters.putAll(loadPluginAlerters(pluginDir));
-// return allAlerters;
-// }
-
-// private Map<String, Alerter> loadPluginAlerters(String pluginPath) {
-// File alerterPluginPath = new File(pluginPath);
-// if (!alerterPluginPath.exists()) {
-// return Collections.<String, Alerter>emptyMap();
-// }
-//
-// Map<String, Alerter> installedAlerterPlugins = new HashMap<String, Alerter>();
-// ClassLoader parentLoader = this.getClass().getClassLoader();
-// File[] pluginDirs = alerterPluginPath.listFiles();
-// ArrayList<String> jarPaths = new ArrayList<String>();
-// for (File pluginDir: pluginDirs) {
-// 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;
-// }
-//
-// String pluginName = pluginProps.getString("alerter.name");
-// List<String> extLibClasspath = pluginProps.getStringList("alerter.external.classpaths", (List<String>)null);
-//
-// String pluginClass = pluginProps.getString("alerter.class");
-// if (pluginClass == null) {
-// logger.error("Alerter class is not set.");
-// }
-// else {
-// logger.info("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<?> alerterClass = null;
-// try {
-// alerterClass = urlClassLoader.loadClass(pluginClass);
-// }
-// catch (ClassNotFoundException e) {
-// logger.error("Class " + pluginClass + " not found.");
-// continue;
-// }
-//
-// String source = FileIOUtils.getSourcePathFromClass(alerterClass);
-// logger.info("Source jar " + source);
-// jarPaths.add("jar:file:" + source);
-//
-// Constructor<?> constructor = null;
-// try {
-// constructor = alerterClass.getConstructor(Props.class);
-// } catch (NoSuchMethodException e) {
-// logger.error("Constructor not found in " + pluginClass);
-// continue;
-// }
-//
-// Object obj = null;
-// try {
-// obj = constructor.newInstance(pluginProps);
-// } catch (Exception e) {
-// logger.error(e);
-// }
-//
-// if (!(obj instanceof Alerter)) {
-// logger.error("The object is not an Alerter");
-// continue;
-// }
-//
-// Alerter plugin = (Alerter) obj;
-// installedAlerterPlugins.put(pluginName, plugin);
-// }
-//
-// return installedAlerterPlugins;
-//
-// }
-
-// private String getExecutorHost() {
-// return executorHost;
-// }
-//
-// private int getExecutorPort() {
-// return executorPort;
-// }
-
@Override
public State getExecutorManagerThreadState() {
return executingManager.getState();
@@ -285,11 +140,6 @@ public class ExecutorManager implements ExecutorManagerAdapter {
return ports;
}
-// private ExecutableFlow fetchExecutableFlow(int execId) throws ExecutorManagerException {
-// ExecutableFlow exflow = executorLoader.fetchExecutableFlow(execId);
-// return exflow;
-// }
-
private void loadRunningFlows() throws ExecutorManagerException {
runningFlows.putAll(executorLoader.fetchActiveFlows());
}
src/java/azkaban/sla/SlaOption.java 1(+0 -1)
diff --git a/src/java/azkaban/sla/SlaOption.java b/src/java/azkaban/sla/SlaOption.java
index 264a28c..e8f7a04 100644
--- a/src/java/azkaban/sla/SlaOption.java
+++ b/src/java/azkaban/sla/SlaOption.java
@@ -10,7 +10,6 @@ import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import azkaban.executor.ExecutableFlow;
-import azkaban.executor.ExecutorManagerException;
public class SlaOption {
diff --git a/src/java/azkaban/trigger/ActionTypeLoader.java b/src/java/azkaban/trigger/ActionTypeLoader.java
index 1a8b665..4ca9436 100644
--- a/src/java/azkaban/trigger/ActionTypeLoader.java
+++ b/src/java/azkaban/trigger/ActionTypeLoader.java
@@ -1,19 +1,11 @@
package azkaban.trigger;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
-import azkaban.trigger.builtin.ExecuteFlowAction;
import azkaban.utils.Props;
import azkaban.utils.Utils;
diff --git a/src/java/azkaban/trigger/builtin/SlaAlertAction.java b/src/java/azkaban/trigger/builtin/SlaAlertAction.java
index 82d69c5..ec8dd43 100644
--- a/src/java/azkaban/trigger/builtin/SlaAlertAction.java
+++ b/src/java/azkaban/trigger/builtin/SlaAlertAction.java
@@ -8,7 +8,6 @@ import org.apache.log4j.Logger;
import azkaban.alert.Alerter;
import azkaban.executor.ExecutableFlow;
import azkaban.executor.ExecutorManagerAdapter;
-import azkaban.executor.ExecutorManagerException;
import azkaban.sla.SlaOption;
import azkaban.trigger.TriggerAction;
diff --git a/src/java/azkaban/trigger/builtin/SlaChecker.java b/src/java/azkaban/trigger/builtin/SlaChecker.java
index 0219eab..dedc23f 100644
--- a/src/java/azkaban/trigger/builtin/SlaChecker.java
+++ b/src/java/azkaban/trigger/builtin/SlaChecker.java
@@ -172,7 +172,6 @@ public class SlaChecker implements ConditionChecker{
return createFromJson((HashMap<String, Object>)obj);
}
- @SuppressWarnings("unchecked")
public static SlaChecker createFromJson(HashMap<String, Object> obj) throws Exception {
Map<String, Object> jsonObj = (HashMap<String, Object>) obj;
if(!jsonObj.get("type").equals(type)) {
diff --git a/src/java/azkaban/user/Permission.java b/src/java/azkaban/user/Permission.java
index 0405c6e..42158f8 100644
--- a/src/java/azkaban/user/Permission.java
+++ b/src/java/azkaban/user/Permission.java
@@ -29,6 +29,7 @@ public class Permission {
WRITE(0x0000002),
EXECUTE(0x0000004),
SCHEDULE(0x0000008),
+ METRICS(0x0000010),
CREATEPROJECTS(0x40000000), // Only used for roles
ADMIN(0x8000000);
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 1386215..e066be9 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -313,7 +313,7 @@ public class AzkabanWebServer extends AzkabanServer {
}
Map<String, Alerter> installedAlerterPlugins = new HashMap<String, Alerter>();
- ClassLoader parentLoader = SlaAlertAction.class.getClass().getClassLoader();
+ ClassLoader parentLoader = getClass().getClassLoader();
File[] pluginDirs = alerterPluginPath.listFiles();
ArrayList<String> jarPaths = new ArrayList<String>();
for (File pluginDir: pluginDirs) {
diff --git a/src/java/azkaban/webapp/servlet/JMXHttpServlet.java b/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
index f85bf58..1a5d1d7 100644
--- a/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
+++ b/src/java/azkaban/webapp/servlet/JMXHttpServlet.java
@@ -74,7 +74,7 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements Conne
if (hasParam(req, "ajax")){
Map<String,Object> ret = new HashMap<String,Object>();
- if(!hasAdminRole(session.getUser())) {
+ if(!hasPermission(session.getUser(), Permission.Type.METRICS)) {
ret.put("error", "User " + session.getUser().getUserId() + " has no permission.");
this.writeJSON(resp, ret, true);
return;
@@ -183,7 +183,7 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements Conne
private void handleJMXPage(HttpServletRequest req, HttpServletResponse resp, Session session) throws IOException {
Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/jmxpage.vm");
- if(!hasAdminRole(session.getUser())) {
+ if(!hasPermission(session.getUser(), Permission.Type.METRICS)) {
page.add("errorMsg", "User " + session.getUser().getUserId() + " has no permission.");
page.render();
return;
@@ -241,11 +241,22 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements Conne
}
- private boolean hasAdminRole(User user) {
+// private boolean hasAdminRole(User user) {
+// for(String roleName: user.getRoles()) {
+// Role role = userManager.getRole(roleName);
+// Permission perm = role.getPermission();
+// if (perm.isPermissionSet(Permission.Type.ADMIN)) {
+// return true;
+// }
+// }
+//
+// return false;
+// }
+
+ protected boolean hasPermission(User user, Permission.Type type) {
for(String roleName: user.getRoles()) {
Role role = userManager.getRole(roleName);
- Permission perm = role.getPermission();
- if (perm.isPermissionSet(Permission.Type.ADMIN)) {
+ if (role.getPermission().isPermissionSet(type) || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
return true;
}
}
diff --git a/src/package/soloserver/conf/azkaban-users.xml b/src/package/soloserver/conf/azkaban-users.xml
index b30da41..e19acc8 100644
--- a/src/package/soloserver/conf/azkaban-users.xml
+++ b/src/package/soloserver/conf/azkaban-users.xml
@@ -1,5 +1,7 @@
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
+ <user username="metrics" password="metrics" roles="metrics"/>
<role name="admin" permissions="ADMIN" />
+ <role name="metrics" permissions="METRICS"/>
</azkaban-users>
diff --git a/src/package/webserver/conf/azkaban-users.xml b/src/package/webserver/conf/azkaban-users.xml
index b30da41..e19acc8 100644
--- a/src/package/webserver/conf/azkaban-users.xml
+++ b/src/package/webserver/conf/azkaban-users.xml
@@ -1,5 +1,7 @@
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
+ <user username="metrics" password="metrics" roles="metrics"/>
<role name="admin" permissions="ADMIN" />
+ <role name="metrics" permissions="METRICS"/>
</azkaban-users>