azkaban-aplcache
Changes
src/java/azkaban/flow/Edge.java 37(+37 -0)
src/java/azkaban/flow/Flow.java 51(+51 -0)
src/java/azkaban/flow/Node.java 71(+71 -0)
src/java/azkaban/project/Project.java 13(+13 -0)
src/java/azkaban/project/ProjectLoader.java 16(+16 -0)
src/java/azkaban/project/ProjectManager.java 36(+36 -0)
src/web/css/azkaban.css 6(+3 -3)
src/web/js/azkaban.job.view.js 67(+30 -37)
Details
src/java/azkaban/flow/Edge.java 37(+37 -0)
diff --git a/src/java/azkaban/flow/Edge.java b/src/java/azkaban/flow/Edge.java
new file mode 100644
index 0000000..fde4acb
--- /dev/null
+++ b/src/java/azkaban/flow/Edge.java
@@ -0,0 +1,37 @@
+package azkaban.flow;
+
+public class Edge {
+ public enum State {
+ FAILED, SUCCEEDED, WAITING, CYCLE
+ }
+
+ private final Node from;
+ private final Node to;
+
+ private State state = State.WAITING;
+
+ public Edge(Node from, Node to) {
+ this.from = from;
+ this.to = to;
+ }
+
+ public String getId() {
+ return from.getId() + ">>" + to.getId();
+ }
+
+ public State getState() {
+ return state;
+ }
+
+ public void setState(State state) {
+ this.state = state;
+ }
+
+ public Node getFrom() {
+ return from;
+ }
+
+ public Node getTo() {
+ return to;
+ }
+}
src/java/azkaban/flow/Flow.java 51(+51 -0)
diff --git a/src/java/azkaban/flow/Flow.java b/src/java/azkaban/flow/Flow.java
new file mode 100644
index 0000000..2775f4f
--- /dev/null
+++ b/src/java/azkaban/flow/Flow.java
@@ -0,0 +1,51 @@
+package azkaban.flow;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+public class Flow {
+ public enum State {
+ READY, RUNNING, RUNNING_WITH_FAILURE, FAILED, SUCCEEDED
+ }
+ private final String id;
+ private HashMap<String, Node> nodes = new HashMap<String, Node>();
+ private HashMap<String, Edge> edges = new HashMap<String, Edge>();
+ private ArrayList<String> errors = null;
+
+ public Flow(String id) {
+ this.id = id;
+ }
+
+ public void addAllNodes(Collection<Node> nodes) {
+ for (Node node: nodes) {
+ this.nodes.put(node.getId(), node);
+ }
+ }
+
+ public void addAllEdges(Collection<Edge> edges) {
+ for (Edge edge: edges) {
+ this.edges.put(edge.getId(), edge);
+ }
+ }
+
+ public void addNode(Node node) {
+ nodes.put(node.getId(), node);
+ }
+
+ public void addEdge(Edge edge) {
+ edges.put(edge.getId(), edge);
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void addErrors(String error) {
+ if (errors == null) {
+ errors = new ArrayList<String>();
+ }
+
+ errors.add(error);
+ }
+}
\ No newline at end of file
src/java/azkaban/flow/Node.java 71(+71 -0)
diff --git a/src/java/azkaban/flow/Node.java b/src/java/azkaban/flow/Node.java
new file mode 100644
index 0000000..a0b1aec
--- /dev/null
+++ b/src/java/azkaban/flow/Node.java
@@ -0,0 +1,71 @@
+package azkaban.flow;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import azkaban.utils.Props;
+
+public class Node {
+ public enum State {
+ FAILED, SUCCEEDED, RUNNING, WAITING, IGNORED
+ }
+
+ private final String id;
+ private List<Edge> outEdges = new ArrayList<Edge>();
+ private List<Edge> inEdges = new ArrayList<Edge>();
+ private List<String> missingDependency;
+ private State state = State.WAITING;
+ private Props props;
+
+ public Node(String id, Props props) {
+ this.id = id;
+ }
+
+ public void addOutEdges(Edge edge) {
+ outEdges.add(edge);
+ }
+
+ public void addInEdges(Edge edge) {
+ inEdges.add(edge);
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public State getState() {
+ return state;
+ }
+
+ public void setState(State state) {
+ this.state = state;
+ }
+
+ public Props getProps() {
+ return props;
+ }
+
+ public void setProps(Props props) {
+ this.props = props;
+ }
+
+ public List<Edge> getOutEdges() {
+ return outEdges;
+ }
+
+ public List<Edge> getInEdges() {
+ return inEdges;
+ }
+
+ public void addMissingDependency(String dependency) {
+ if (missingDependency==null) {
+ missingDependency = new ArrayList<String>();
+ }
+
+ missingDependency.add(dependency);
+ }
+
+ public boolean hasMissingDependency() {
+ return missingDependency != null && missingDependency.size() > 0;
+ }
+}
\ No newline at end of file
diff --git a/src/java/azkaban/project/FileProjectLoader.java b/src/java/azkaban/project/FileProjectLoader.java
new file mode 100644
index 0000000..f93337b
--- /dev/null
+++ b/src/java/azkaban/project/FileProjectLoader.java
@@ -0,0 +1,37 @@
+package azkaban.project;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import azkaban.utils.Props;
+
+public class FileProjectLoader implements ProjectLoader {
+
+ public FileProjectLoader(Props props) {}
+
+ @Override
+ public Map<String, Project> loadAllProjects() {
+ // TODO Auto-generated method stub
+ return new HashMap<String, Project>();
+ }
+
+ @Override
+ public void addProject(Project project, File directory) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean removeProject(Project project) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void init(Props props) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
\ No newline at end of file
src/java/azkaban/project/Project.java 13(+13 -0)
diff --git a/src/java/azkaban/project/Project.java b/src/java/azkaban/project/Project.java
new file mode 100644
index 0000000..8cb42b5
--- /dev/null
+++ b/src/java/azkaban/project/Project.java
@@ -0,0 +1,13 @@
+package azkaban.project;
+
+public class Project {
+ private final String name;
+
+ public Project(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
src/java/azkaban/project/ProjectLoader.java 16(+16 -0)
diff --git a/src/java/azkaban/project/ProjectLoader.java b/src/java/azkaban/project/ProjectLoader.java
new file mode 100644
index 0000000..86433dc
--- /dev/null
+++ b/src/java/azkaban/project/ProjectLoader.java
@@ -0,0 +1,16 @@
+package azkaban.project;
+
+import java.io.File;
+import java.util.Map;
+
+import azkaban.utils.Props;
+
+public interface ProjectLoader {
+ public void init(Props props);
+
+ public Map<String, Project> loadAllProjects();
+
+ public void addProject(Project project, File directory);
+
+ public boolean removeProject(Project project);
+}
src/java/azkaban/project/ProjectManager.java 36(+36 -0)
diff --git a/src/java/azkaban/project/ProjectManager.java b/src/java/azkaban/project/ProjectManager.java
new file mode 100644
index 0000000..9532148
--- /dev/null
+++ b/src/java/azkaban/project/ProjectManager.java
@@ -0,0 +1,36 @@
+package azkaban.project;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.log4j.Logger;
+
+import azkaban.user.User;
+import azkaban.utils.Props;
+
+public class ProjectManager {
+ private static final Logger logger = Logger.getLogger(ProjectManager.class);
+ private ConcurrentHashMap<String, Project> projects = new ConcurrentHashMap<String, Project>();
+ private ProjectLoader loader;
+
+ public ProjectManager(Props props, ProjectLoader loader) throws Exception {
+ projects.putAll(loader.loadAllProjects());
+ }
+
+ public List<String> getProjectNames() {
+ return new ArrayList<String>(projects.keySet());
+ }
+
+ public Project getProject(String name) {
+ return projects.get(name);
+ }
+
+ public Project createProjects(String projectName, User creator) {
+ return null;
+ }
+
+ public Project loadProjects() {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/java/azkaban/project/ProjectManagerException.java b/src/java/azkaban/project/ProjectManagerException.java
new file mode 100644
index 0000000..fe16a8c
--- /dev/null
+++ b/src/java/azkaban/project/ProjectManagerException.java
@@ -0,0 +1,13 @@
+package azkaban.project;
+
+public class ProjectManagerException extends Exception{
+ private static final long serialVersionUID = 1L;
+
+ public ProjectManagerException(String message) {
+ super(message);
+ }
+
+ public ProjectManagerException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/java/azkaban/user/XmlUserManager.java b/src/java/azkaban/user/XmlUserManager.java
index 90869eb..8b91fe3 100644
--- a/src/java/azkaban/user/XmlUserManager.java
+++ b/src/java/azkaban/user/XmlUserManager.java
@@ -124,6 +124,7 @@ public class XmlUserManager implements UserManager {
// Add the user to the node
User user = new User(userNameAttr.getNodeValue());
users.put(username, user);
+ logger.info("Loading user " + user.getUserId());
Node roles = userAttrMap.getNamedItem(ROLES_ATTR);
if (roles != null) {
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index cb7b193..cf5a2c5 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -29,19 +29,22 @@ import org.apache.velocity.runtime.log.Log4JLogChute;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.joda.time.DateTimeZone;
import org.mortbay.jetty.Server;
-import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.security.SslSocketConnector;
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.project.FileProjectLoader;
+import azkaban.project.ProjectLoader;
+import azkaban.project.ProjectManager;
import azkaban.user.UserManager;
import azkaban.user.XmlUserManager;
import azkaban.utils.Props;
import azkaban.utils.Utils;
import azkaban.webapp.servlet.AzkabanServletContextListener;
import azkaban.webapp.servlet.IndexServlet;
+import azkaban.webapp.servlet.ProjectManagerServlet;
import azkaban.webapp.session.SessionCache;
import joptsimple.OptionParser;
@@ -83,10 +86,13 @@ public class AzkabanWebServer {
private static final int DEFAULT_THREAD_NUMBER = 10;
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 PROJECT_LOADER_CLASS_PARAM = "project.loader.class";
private static final String DEFAULT_STATIC_DIR = "";
private final VelocityEngine velocityEngine;
private UserManager userManager;
+ private ProjectManager projectManager;
+
private Props props;
private SessionCache sessionCache;
private File tempDir;
@@ -107,7 +113,8 @@ public class AzkabanWebServer {
velocityEngine = configureVelocityEngine(props.getBoolean(
VELOCITY_DEV_MODE_PARAM, false));
sessionCache = new SessionCache(props);
- userManager = loadUserManager(props);;
+ userManager = loadUserManager(props);
+ projectManager = loadProjectManager(props);
tempDir = new File(props.getString("azkaban.temp.dir", "temp"));
@@ -146,6 +153,45 @@ public class AzkabanWebServer {
return manager;
}
+ private ProjectManager loadProjectManager(Props props) {
+ ProjectManager manager = null;
+ try {
+ ProjectLoader projectLoader = loadProjectLoader(props);
+ manager = new ProjectManager(props, projectLoader);
+ }
+ catch(Exception e) {
+ logger.error(e);
+ throw new RuntimeException(e);
+ }
+
+ return manager;
+ }
+
+ private ProjectLoader loadProjectLoader(Props props) {
+ Class<?> projectLoaderClass = props.getClass(PROJECT_LOADER_CLASS_PARAM,null);
+ logger.info("Loading project loader class " + projectLoaderClass.getName());
+ ProjectLoader loader = null;
+
+ if (projectLoaderClass != null
+ && projectLoaderClass.getConstructors().length > 0) {
+
+ try {
+ Constructor<?> projectLoaderConstructor = projectLoaderClass.getConstructor(Props.class);
+ loader = (ProjectLoader)projectLoaderConstructor.newInstance(props);
+ }
+ catch (Exception e) {
+ logger.error("Could not instantiate UserManager "
+ + projectLoaderClass.getName());
+ throw new RuntimeException(e);
+ }
+
+ } else {
+ loader = new FileProjectLoader(props);
+ }
+
+ return loader;
+ }
+
/**
* Returns the web session cache.
*
@@ -173,6 +219,14 @@ public class AzkabanWebServer {
}
/**
+ *
+ * @return
+ */
+ public ProjectManager getProjectManager() {
+ return projectManager;
+ }
+
+ /**
* Creates and configures the velocity engine.
*
* @param devMode
@@ -273,10 +327,6 @@ public class AzkabanWebServer {
secureConnector.setTrustPassword(azkabanSettings.getString("jetty.trustpassword"));
server.addConnector(secureConnector);
-// SocketConnector socketConnector = new SocketConnector();
-// socketConnector.setPort(portNumber);
-// server.addConnector(socketConnector);
-
QueuedThreadPool httpThreadPool = new QueuedThreadPool(maxThreads);
server.setThreadPool(httpThreadPool);
@@ -287,6 +337,7 @@ public class AzkabanWebServer {
root.setResourceBase(staticDir);
root.addServlet(new ServletHolder(new DefaultServlet()), "/*");
root.addServlet(new ServletHolder(new IndexServlet()), "/index");
+ root.addServlet(new ServletHolder(new ProjectManagerServlet()), "/manager");
root.setAttribute(AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY, app);
try {
@@ -349,6 +400,10 @@ public class AzkabanWebServer {
return loadAzkabanConfiguration(confFile.getPath());
}
+ /**
+ * Returns the set temp dir
+ * @return
+ */
public File getTempDirectory() {
return tempDir;
}
diff --git a/src/java/azkaban/webapp/servlet/AzkabanServletContextListener.java b/src/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
index acfb1ea..3877adb 100644
--- a/src/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
+++ b/src/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
@@ -42,8 +42,7 @@ public class AzkabanServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
this.app = new AzkabanWebServer();
- event.getServletContext().setAttribute(AZKABAN_SERVLET_CONTEXT_KEY,
- this.app);
+ event.getServletContext().setAttribute(AZKABAN_SERVLET_CONTEXT_KEY, this.app);
}
}
diff --git a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
new file mode 100644
index 0000000..cba5478
--- /dev/null
+++ b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -0,0 +1,52 @@
+package azkaban.webapp.servlet;
+
+import java.io.File;
+import java.io.IOException;
+
+
+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.ProjectManager;
+import azkaban.webapp.session.Session;
+
+public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
+ private static final long serialVersionUID = 1;
+ private static final Logger logger = Logger.getLogger(ProjectManagerServlet.class);
+
+ private ProjectManager manager;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ super.init(config);
+ manager = this.getApplication().getProjectManager();
+ }
+
+ @Override
+ protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
+ Session session) throws ServletException, IOException {
+ Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/projectmanager.vm");
+
+ page.render();
+ }
+
+ @Override
+ protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
+ Session session) throws ServletException, IOException {
+ if (hasParam(req, "action")) {
+ String action = getParam(req, "action");
+ if (action.equals("create")) {
+
+ }
+ }
+
+ }
+
+ private void handleCreate() {
+
+ }
+}
diff --git a/src/java/azkaban/webapp/servlet/velocity/index.vm b/src/java/azkaban/webapp/servlet/velocity/index.vm
index c3e2352..eb227ac 100644
--- a/src/java/azkaban/webapp/servlet/velocity/index.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/index.vm
@@ -25,7 +25,7 @@
<div class="content">
<div id="all-jobs-content">
<div class="section-hd">
- <h2>All Jobs</h2>
+ <h2>Projects</h2>
<form method="get">
<input type="hidden" name="action" value="search">
@@ -33,37 +33,34 @@
<input id="searchtextbox" type="text" placeholder="by job name or wildcard" value="" class="search-input" name="job">
</form>
- <a id="upload-btn" class="btn1 upload" href="#">Upload Job</a>
+ <a id="create-project-btn" class="btn1 createproject" href="#">Create Project</a>
</div><!-- end .section-hd -->
</div>
<div class="content">
</body>
<!-- modal content -->
- <div id="upload-job" class="modal">
- <h3>Upload Job</h3>
+ <div id="create-project" class="modal">
+ <h3>Create Project</h3>
<div id="errorMsg" class="box-error-message">$errorMsg</div>
<div class="message">
- <form id="deployform" enctype="multipart/form-data" method="post" action="$!context/manager">
+
<fieldset>
<dl>
<dt><label for="path">Project Name</label></dt>
- <dd><input id="path" name="project" type="text" size="20"
- title="The destination path that the zip file will be uncompressed to on Azkaban. If the path already exists in Azkaban, it will be overwritten."/>
+ <dd><input id="path" name="project" type="text" size="20" title="The project name."/>
</dd>
- <dt>Job Package Zip</dt>
- <dd><input id="file" name="file" class="file" type="file" /></dd>
- <dt>Overwrite Project</dt>
- <dd><input id="overwrite" name="overwrite" type="checkbox" /></dd>
- <input name="action" type="hidden" value="deploy" />
+ <dt>Description</dt>
+ <dd><textarea id="description" name="description" rows="2" cols="40"></textarea></dd>
+
+ <input name="action" type="hidden" value="create" />
<input name="redirect" type="hidden" value="$!context/" />
</dl>
</fieldset>
- </form>
</div>
<div class="actions">
- <a class="yes btn2" id="deploy-btn" href="#">Deploy</a>
+ <a class="yes btn2" id="create-btn" href="#">Create Project</a>
<a class="no simplemodal-close btn3" href="#">Cancel</a>
</div>
</div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/nav.vm b/src/java/azkaban/webapp/servlet/velocity/nav.vm
index fc90182..54c0d34 100644
--- a/src/java/azkaban/webapp/servlet/velocity/nav.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/nav.vm
@@ -2,7 +2,7 @@
<div id="header" class="header">
#parse( "azkaban/webapp/servlet/velocity/title.vm" )
<ul id="nav" class="nav">
- <li id="all-jobs-tab" #if($current_page == 'all')class="selected"#end><a href="/#all">All Jobs</a></li>
+ <li id="all-jobs-tab" #if($current_page == 'all')class="selected"#end><a href="/#all">Projects</a></li>
<li id="scheduled-jobs-tab" #if($current_page == 'schedule')class="scheduled"#end><a href="$!context/schedule">Scheduled</a></li>
<li id="executing-jobs-tab" #if($current_page == 'executing')class="selected"#end><a href="$!context/executing">Executing</a></li>
<li id="history-jobs-tab" #if($current_page == 'history')class="selected"#end><a href="$!context/history">History</a></li>
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm b/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm
new file mode 100644
index 0000000..ee315b1
--- /dev/null
+++ b/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ #parse( "azkaban/webapp/servlet/velocity/style.vm" )
+ <script type="text/javascript" src="${context}/js/jquery/jquery.js"></script>
+ <script type="text/javascript" src="${context}/js/namespace.js"></script>
+ <script type="text/javascript" src="${context}/js/underscore-1.2.1-min.js"></script>
+ <script type="text/javascript" src="${context}/js/backbone-0.5.3-min.js"></script>
+ <script type="text/javascript" src="${context}/js/jquery.simplemodal.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban.nav.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban.job.view.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = ${error_message};
+ var successMessage = ${success_message};
+ </script>
+ </head>
+ <body>
+ #set($current_page="all")
+ #parse( "azkaban/webapp/servlet/velocity/nav.vm" )
+ <div class="messaging"><p id="messageClose">X</p><p id="message"></p></div>
+
+ <div class="content">
+ <div id="all-jobs-content">
+ <div class="section-hd">
+ <h2>Project</h2>
+ </div><!-- end .section-hd -->
+ </div>
+ <div class="content">
+ </body>
+</html>
+
src/web/css/azkaban.css 6(+3 -3)
diff --git a/src/web/css/azkaban.css b/src/web/css/azkaban.css
index ea65f21..66ef942 100644
--- a/src/web/css/azkaban.css
+++ b/src/web/css/azkaban.css
@@ -452,7 +452,7 @@ tr:hover td {
padding-bottom: 6px;
}
-#upload-job #overwrite {
+#create-project #overwrite {
width: 12px;
}
@@ -468,11 +468,11 @@ tr:hover td {
margin-bottom: 15px;
}
-#upload-job dt {
+#create-project dt {
width: 100px;
}
-#upload-job input {
+#create-project input {
width: 280px;
}
src/web/js/azkaban.job.view.js 67(+30 -37)
diff --git a/src/web/js/azkaban.job.view.js b/src/web/js/azkaban.job.view.js
index afee0ba..633489f 100644
--- a/src/web/js/azkaban.job.view.js
+++ b/src/web/js/azkaban.job.view.js
@@ -3,7 +3,7 @@ $.namespace('azkaban');
var jobView;
azkaban.JobView= Backbone.View.extend({
events : {
- "click #upload-btn":"handleUploadJob"
+ "click #create-project-btn":"handleCreateProjectJob"
},
initialize : function(settings) {
if (settings.errorMsg) {
@@ -34,9 +34,9 @@ azkaban.JobView= Backbone.View.extend({
});
});
},
- handleUploadJob : function(evt) {
- console.log("click upload");
- $('#upload-job').modal({
+ handleCreateProjectJob : function(evt) {
+ console.log("click create project");
+ $('#create-project').modal({
closeHTML: "<a href='#' title='Close' class='modal-close'>x</a>",
position: ["20%",],
containerId: 'confirm-container',
@@ -54,50 +54,43 @@ azkaban.JobView= Backbone.View.extend({
}
});
-var uploadView;
-azkaban.UploadJobView= Backbone.View.extend({
+var createProjectView;
+azkaban.CreateProjectView= Backbone.View.extend({
events : {
- "change #file": "handleFileChange",
- "click #deploy-btn": "handleUploadJob"
+ "click #create-btn": "handleCreateProject"
},
- initialize : function(settings) {
+ initialize : function(settings) {
$("#errorMsg").hide();
- },
- handleUploadJob : function(evt) {
+ },
+ handleCreateProject : function(evt) {
// First make sure we can upload
-
var projectName = $('#path').val();
- var dir = document.getElementById('file').value;
+ var description = $('#description').val();
if (projectName == "") {
$("#errorMsg").text("ERROR: Empty Project Name.");
$("#errorMsg").slideDown("fast");
}
- else if (dir == "") {
- $("#errorMsg").text("ERROR: No zip file selected.");
- $("#errorMsg").slideDown("fast");
- }
else {
- $("#deployform").submit();
- }
- },
- handleFileChange : function(evt) {
- var path = $('#path');
- if(path.val() == '') {
- var dir = document.getElementById('file').value;
- var lastIndexOf = dir.lastIndexOf('.');
- var lastIndexOfForwardSlash = dir.lastIndexOf('\\');
- var lastIndexOfBackwardSlash = dir.lastIndexOf('/');
-
- var startIndex = Math.max(lastIndexOfForwardSlash, lastIndexOfBackwardSlash);
- startIndex += 1;
- path.val(dir.substring(startIndex, lastIndexOf));
- }
- },
- render: function() {
- }
+ console.log("Deploying");
+ $.ajax({
+ async: "false",
+ url: "manager",
+ dataType: "json",
+ type: "POST",
+ data: {action:"create", name:projectName, description:description},
+ success: function(data) {console.log("success");}
+ });
+
+
+ //window.location = "manager";
+ //$("#deployform").submit();
+ }
+ },
+ render: function() {
+ }
});
$(function() {
jobView = new azkaban.JobView({el:$( '#all-jobs-content'), successMsg: successMessage, errorMsg: errorMessage });
- uploadView = new azkaban.UploadJobView({el:$('#upload-job')});
-});
\ No newline at end of file
+ uploadView = new azkaban.CreateProjectView({el:$('#create-project')});
+});