azkaban-aplcache
Details
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 89ead27..7e93afe 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -82,7 +82,7 @@ public class AzkabanWebServer {
private static final String DEFAULT_TIMEZONE_ID = "default.timezone.id";
//private static final int DEFAULT_PORT_NUMBER = 8081;
private static final int DEFAULT_SSL_PORT_NUMBER = 8443;
- private static final int DEFAULT_THREAD_NUMBER = 10;
+ private static final int DEFAULT_THREAD_NUMBER = 20;
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_MANAGER_CLASS_PARAM = "project.manager.class";
diff --git a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 1c964ff..d8d0645 100644
--- a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -155,6 +155,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
nodeList.add(nodeObj);
}
+ ret.put("flowId", flowId);
ret.put("nodes", nodeList);
}
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
index 9749363..baa05fd 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
@@ -80,6 +80,15 @@
</td>
</tr>
<tr class="childrow" id="${flow.id}-child" style="display: none;">
+ <td class="expandedFlow">
+ <table class="innerTable">
+ <thead>
+ <tr><th class="tb-name">Jobs</th></tr>
+ </thead>
+ <tbody id="${flow.id}-tbody">
+ </tbody>
+ </table>
+ </td>
</tr>
#end
#else
src/web/css/azkaban.css 87(+86 -1)
diff --git a/src/web/css/azkaban.css b/src/web/css/azkaban.css
index ee429a9..9a47586 100644
--- a/src/web/css/azkaban.css
+++ b/src/web/css/azkaban.css
@@ -179,13 +179,16 @@ tr:hover td {
background-color: #E1E3E2;
}
+
.all-jobs .tb-name {
padding-left: 2.7272727%;
width: 64.818182%;
+ border-bottom-width: 0;
+ border-bottom-style: none;
}
.all-jobs .tb-up-date {
- width: 14.090909%;
+ width: 160px;
}
.all-jobs .tb-owner {
@@ -536,6 +539,10 @@ tr:hover td {
background-position: 0 -16px;
}
+.collapse tr {
+ border-bottom: none;
+}
+
.expand .state-icon {
background-position: -32px -16px;
}
@@ -550,6 +557,10 @@ tr:hover td {
color: #000;
}
+.tb-name a:hover {
+ color: #009FC9;
+}
+
.azkaban-charts,
.azkaban-charts td {
width: 100%;
@@ -784,6 +795,80 @@ tr:hover td {
border-style: none;
}
+/* Style for job display table */
+.childrow td.innerTd {
+ padding: 0px;
+ height: 100px;
+ width: 100%;
+}
+
+/* Style for job display table */
+.childrow {
+ padding: 0px;
+ width: 100%;
+}
+
+.childrow .innerTable {
+ margin-left:auto;
+ margin-right: auto;
+ text-align: center;
+ width: 80%;
+}
+
+.childrow .expandedFlow {
+ border-style: none;
+ background-color: #FFF;
+}
+
+.childrow:hover td {
+ background-color: #FFF;
+}
+
+.childrow .expandedFlow:hover {
+ border-style: none;
+ background-color: #FFF;
+}
+
+.childrow .expandedFlow td{
+ border-style: solid solid none none;
+}
+
+.childrow .innerTable {
+ border-style: none none solid solid;
+ border-width: 1px;
+ border-color: #CDCDCD;
+}
+
+.childrow .innerTable tr {
+}
+
+.childrow .innerTable td {
+ border-style: solid solid none none;
+ border-width: 1px 1px medium medium;
+ border-color: CDCDCD;
+}
+
+.childrow .innerTable a {
+ cursor: pointer;
+}
+
+.childrow .innerTable a:hover {
+ color: #009FC9;
+}
+
+.childrow .innerTable a.dependent {
+ color: #3B8194;
+}
+
+.childrow .innerTable a.dependency {
+ color: #005066;
+}
+
+.childrow .innerJobRow {
+ border-top: none;
+ height: 100px;
+}
+
/* old styles */
.azkaban-charts .hitarea {
src/web/js/azkaban.project.view.js 65(+61 -4)
diff --git a/src/web/js/azkaban.project.view.js b/src/web/js/azkaban.project.view.js
index 7168a20..6616e4a 100644
--- a/src/web/js/azkaban.project.view.js
+++ b/src/web/js/azkaban.project.view.js
@@ -46,9 +46,11 @@ azkaban.UploadProjectView= Backbone.View.extend({
var flowTableView;
azkaban.FlowTableView= Backbone.View.extend({
events : {
- "click .jobfolder": "expandFlowProject"
+ "click .jobfolder": "expandFlowProject",
+ "hover .expandedFlow a": "highlight"
},
initialize : function(settings) {
+ _.bindAll(this, 'createJobListTable');
},
expandFlowProject : function(evt) {
var target = evt.currentTarget;
@@ -56,6 +58,9 @@ azkaban.FlowTableView= Backbone.View.extend({
var requestURL = contextURL + "/manager";
var targetExpanded = $('#' + targetId + '-child');
+ var targetTBody = $('#' + targetId + '-tbody');
+
+ var createJobListFunction = this.createJobListTable;
if (target.loading) {
console.log("Still loading.");
@@ -63,17 +68,18 @@ azkaban.FlowTableView= Backbone.View.extend({
else if (target.loaded) {
if($(targetExpanded).is(':visible')) {
$(target).addClass('expand').removeClass('collapse');
- $(targetExpanded).slideUp("fast");
+ $(targetExpanded).fadeOut("fast");
}
else {
$(target).addClass('collapse').removeClass('expand');
- $(targetExpanded).slideDown("fast");
+ $(targetExpanded).fadeIn();
}
}
else {
// projectId is available
$(target).addClass('wait').removeClass('collapse').removeClass('expand');
target.loading = true;
+
$.get(
requestURL,
{"project": projectId, "json":"expandflow", "flow":targetId},
@@ -81,13 +87,64 @@ azkaban.FlowTableView= Backbone.View.extend({
console.log("Success");
target.loaded = true;
target.loading = false;
+
+ createJobListFunction(data, targetTBody);
+
$(target).addClass('collapse').removeClass('wait');
- $(targetExpanded).slideDown("fast");
+ $(targetExpanded).fadeIn("fast");
},
"json"
);
}
},
+ createJobListTable : function(data, innerTable) {
+ var nodes = data.nodes;
+ var flowId = data.flowId;
+
+ for (var i = 0; i < nodes.length; i++) {
+ var job = nodes[i];
+ var name = job.id;
+ var level = job.level;
+ var nodeId = flowId + "-" + name;
+
+ var tr = document.createElement("tr");
+ var idtd = document.createElement("td");
+ $(idtd).addClass("tb-name");
+
+ var ida = document.createElement("a");
+ ida.dependents = job.dependents;
+ ida.dependencies = job.dependencies;
+ ida.flowid = flowId;
+ $(ida).text(name);
+ $(ida).attr("id", nodeId);
+ $(ida).css("margin-left", level * 20);
+
+ $(idtd).append(ida);
+ $(tr).append(idtd);
+ $(innerTable).append(tr);
+ }
+ },
+ highlight: function(evt) {
+ var currentTarget = evt.currentTarget;
+ var dependents = currentTarget.dependents;
+ var dependencies = currentTarget.dependencies;
+ var flowid = currentTarget.flowid;
+
+ if (dependents) {
+ for (var i = 0; i < dependents.length; ++i) {
+ var depId = flowid + "-" + dependents[i];
+ $("#"+depId).toggleClass("dependent");
+ }
+ }
+
+ if (dependencies) {
+ for (var i = 0; i < dependencies.length; ++i) {
+ var depId = flowid + "-" + dependencies[i];
+ $("#"+depId).toggleClass("dependency");
+ }
+
+ }
+ },
render: function() {
}
});