azkaban-developers
Changes
src/java/azkaban/webapp/servlet/velocity/index.vm 192(+96 -96)
src/java/azkaban/webapp/servlet/velocity/nav.vm 38(+18 -20)
Details
diff --git a/src/java/azkaban/project/FileProjectManager.java b/src/java/azkaban/project/FileProjectManager.java
index 98c6ecb..add451c 100644
--- a/src/java/azkaban/project/FileProjectManager.java
+++ b/src/java/azkaban/project/FileProjectManager.java
@@ -38,10 +38,6 @@ public class FileProjectManager implements ProjectManager {
private static final Logger logger = Logger.getLogger(FileProjectManager.class);
private ConcurrentHashMap<String, Project> projects = new ConcurrentHashMap<String, Project>();
- // We store the flows for projects in the ProjectManager instead of the Project so we can employ different
- // loading/caching techniques.
- private HashMap<String, Map<String, Flow>> projectFlows = new HashMap<String, Map<String, Flow>>();
-
private File projectDirectory;
public FileProjectManager(Props props) {
@@ -124,7 +120,9 @@ public class FileProjectManager implements ProjectManager {
flowMap.put(flow.getId(), flow);
}
- projectFlows.put(project.getName(), flowMap);
+ synchronized (project) {
+ project.setFlows(flowMap);
+ }
}
}
}
@@ -202,7 +200,7 @@ public class FileProjectManager implements ProjectManager {
project.setSource(installDir.getName());
project.setLastModifiedTimestamp(System.currentTimeMillis());
project.setLastModifiedUser(uploader.getUserId());
- projectFlows.put(projectName, flows);
+ project.setFlows(flows);
}
try {
@@ -332,13 +330,6 @@ public class FileProjectManager implements ProjectManager {
return null;
}
- @Override
- public List<Flow> getProjectFlows(String projectName, User user) throws ProjectManagerException {
-
-
- return null;
- }
-
private static class SuffixFilter implements FileFilter {
private String suffix;
diff --git a/src/java/azkaban/project/Project.java b/src/java/azkaban/project/Project.java
index cb7337a..732b26f 100644
--- a/src/java/azkaban/project/Project.java
+++ b/src/java/azkaban/project/Project.java
@@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import azkaban.flow.Flow;
import azkaban.user.Permission;
import azkaban.user.Permission.Type;
import azkaban.user.User;
@@ -18,6 +19,7 @@ public class Project {
private String lastModifiedUser;
private String source;
private HashMap<String, Permission> userToPermission = new HashMap<String, Permission>();
+ private Map<String, Flow> flows = null;
public Project(String name) {
this.name = name;
@@ -26,7 +28,11 @@ public class Project {
public String getName() {
return name;
}
-
+
+ public void setFlows(Map<String, Flow> flows) {
+ this.flows = flows;
+ }
+
public boolean hasPermission(User user, Type type) {
Permission perm = userToPermission.get(user.getUserId());
if (perm == null) {
diff --git a/src/java/azkaban/project/ProjectManager.java b/src/java/azkaban/project/ProjectManager.java
index f0ddabe..6d673c0 100644
--- a/src/java/azkaban/project/ProjectManager.java
+++ b/src/java/azkaban/project/ProjectManager.java
@@ -15,8 +15,6 @@ public interface ProjectManager {
public List<Project> getProjects(User user);
- public List<Flow> getProjectFlows(String projectName, User user) throws ProjectManagerException;
-
public Project getProject(String name, User user);
public void uploadProject(String projectName, File projectDir, User uploader, boolean force) throws ProjectManagerException;
diff --git a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 027fe09..84fbc15 100644
--- a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -67,6 +67,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
page.add("project", project);
page.add("admins", Utils.flattenToString(project.getUsersWithPermission(Type.ADMIN), ","));
page.add("permissions", project.getUserPermission(user));
+
+
}
}
src/java/azkaban/webapp/servlet/velocity/index.vm 192(+96 -96)
diff --git a/src/java/azkaban/webapp/servlet/velocity/index.vm b/src/java/azkaban/webapp/servlet/velocity/index.vm
index 1d4c83c..e8a19e1 100644
--- a/src/java/azkaban/webapp/servlet/velocity/index.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/index.vm
@@ -1,103 +1,103 @@
<!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>My Projects</h2>
+ <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>
- <form method="get">
- <input type="hidden" name="action" value="search">
- <input type="submit" value="Search" class="search-btn">
- <input id="searchtextbox" type="text" placeholder="by job name or wildcard" value="" class="search-input" name="job">
- </form>
+ <div class="content">
+ <div id="all-jobs-content">
+ <div class="section-hd">
+ <h2>My Projects</h2>
+
+ <form method="get">
+ <input type="hidden" name="action" value="search">
+ <input type="submit" value="Search" class="search-btn">
+ <input id="searchtextbox" type="text" placeholder="by job name or wildcard" value="" class="search-input" name="job">
+ </form>
+
+ <a id="create-project-btn" class="btn1 createproject" href="#">Create Project</a>
+ </div><!-- end .section-hd -->
+ </div>
+ <table id="all-jobs" class="all-jobs job-table">
+ <thead>
+ <tr>
+ <th class="tb-name">Name</th>
+ <th class="tb-up-date">Modified Date</th>
+ <th class="tb-owner">Modified By</th>
+ <th class="tb-action last">Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+#if($projects)
+#foreach($project in $projects)
+ <tr class="row">
+ <td class="tb-name">
+ <div class="jobfolder expand" onclick="expandFlow(this)" id="$folderName">
+ <span class="state-icon"></span>
+ <a href="${context}/manager?project=${project.name}">$project.name</a>
+ </div>
+ </td>
+ <td class="tb-up-date">$utils.formatDate($project.lastModifiedTimestamp)</td>
+ <td class="tb-owner">$project.lastModifiedUser</td>
+ <td class="tb-action last"></td>
+ </tr>
+#end
+#else
+ <tr><td class="last">No viewable projects found.</td></tr>
+#end
+ </tbody>
+ </table>
+ </div>
- <a id="create-project-btn" class="btn1 createproject" href="#">Create Project</a>
- </div><!-- end .section-hd -->
- </div>
- <table id="all-jobs" class="all-jobs job-table">
- <thead>
- <tr>
- <th class="tb-name">Name</th>
- <th class="tb-up-date">Modified Date</th>
- <th class="tb-owner">Modified By</th>
- <th class="tb-action last">Actions</th>
- </tr>
- </thead>
- <tbody>
- #if($projects)
- #foreach($project in $projects)
- <tr class="row">
- <td class="tb-name">
- <div class="jobfolder expand" onclick="expandFlow(this)" id="$folderName">
- <span class="state-icon"></span>
- <a href="${context}/manager?project=${project.name}">$project.name</a>
- </div>
- </td>
- <td class="tb-up-date">$utils.formatDate($project.lastModifiedTimestamp)</td>
- <td class="tb-owner">$project.lastModifiedUser</td>
- <td class="tb-action last"></td>
- </tr>
- #end
- #else
- <tr><td class="last">No viewable projects found.</td></tr>
- #end
- </tbody>
- </table>
- </div>
- </body>
-
-<!-- modal content -->
- <div id="create-project" class="modal">
- <h3>Create Project</h3>
- <div id="errorMsg" class="box-error-message">$errorMsg</div>
- <div class="message">
- <fieldset>
- <dl>
- <dt><label for="path">Project Name</label></dt>
- <dd><input id="path" name="project" type="text" size="20" title="The project name."/>
- </dd>
- <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>
- </div>
- <div class="actions">
- <a class="yes btn2" id="create-btn" href="#">Create Project</a>
- <a class="no simplemodal-close btn3" href="#">Cancel</a>
- </div>
- </div>
- <div id="invalid-session" class="modal">
- <h3>Invalid Session</h3>
- <p>Session has expired. Please re-login.</p>
- <div class="actions">
- <a class="yes btn2" id="login-btn" href="#">Re-login</a>
- </div>
- </div>
+ <!-- modal content -->
+ <div id="create-project" class="modal">
+ <h3>Create Project</h3>
+ <div id="errorMsg" class="box-error-message">$errorMsg</div>
+
+ <div class="message">
+ <fieldset>
+ <dl>
+ <dt><label for="path">Project Name</label></dt>
+ <dd><input id="path" name="project" type="text" size="20" title="The project name."/></dd>
+ <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>
+ </div>
+ <div class="actions">
+ <a class="yes btn2" id="create-btn" href="#">Create Project</a>
+ <a class="no simplemodal-close btn3" href="#">Cancel</a>
+ </div>
+ <div id="invalid-session" class="modal">
+ <h3>Invalid Session</h3>
+ <p>Session has expired. Please re-login.</p>
+ <div class="actions">
+ <a class="yes btn2" id="login-btn" href="#">Re-login</a>
+ </div>
+ </div>
+ </div>
+ </body>
</html>
src/java/azkaban/webapp/servlet/velocity/nav.vm 38(+18 -20)
diff --git a/src/java/azkaban/webapp/servlet/velocity/nav.vm b/src/java/azkaban/webapp/servlet/velocity/nav.vm
index 54c0d34..c339199 100644
--- a/src/java/azkaban/webapp/servlet/velocity/nav.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/nav.vm
@@ -1,20 +1,18 @@
-
- <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">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>
- <li><a href="$!context/fs">HDFS</a></li>
- </ul>
-
-
- <div id="user-id">
- <a>${user_id}<div id="user-down"></div></a>
- <div id="user-menu">
- <ul><li><a id="logout" href="$!context?logout">logout</a></li></ul>
- </div>
- </div>
-
- </div>
+ <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">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>
+ <li><a href="$!context/fs">HDFS</a></li>
+ </ul>
+
+
+ <div id="user-id">
+ <a>${user_id}<div id="user-down"></div></a>
+ <div id="user-menu">
+ <ul><li><a id="logout" href="$!context?logout">logout</a></li></ul>
+ </div>
+ </div>
+ </div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm b/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm
index e4fea33..9ea0797 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectmanager.vm
@@ -1,95 +1,125 @@
<!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/jqueryui/jquery-ui.custom.min.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.project.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">
- #if($errorMsg)
- <div class="box-error-message">$errorMsg</div>
- #else
- #if($error_message != "null")
- <div class="box-error-message">$error_message</div>
- #elseif($success_message != "null")
- <div class="box-success-message">$success_message</div>
- #end
- <div id="all-jobs-content">
- <div class="section-hd">
- <h2>Project <span>$project.name</span></h2>
-
- <a id="project-upload-btn" class="btn1 projectupload" href="#">Upload</a>
- <a id="project-permission-btn" class="btn5 projectpermission" href="#">Permissions</a>
- </div><!-- end .section-hd -->
- </div>
+ <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/jqueryui/jquery-ui.custom.min.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.project.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 id="project-users">
- <table class="user-table">
- <tr><td class="first">Project Admins:</td><td>$admins</td></tr>
- <tr><td class="first">User ${user_id} Permissions:</td><td>$permissions.toString()</td></tr>
- </table>
- </div>
- <div id="project-summary">
- <table class="summary-table">
- <tr><td class="first">Name:</td><td>$project.name</td></tr>
- <tr><td class="first">Created Date:</td><td>$utils.formatDate($project.lastModifiedTimestamp)</td></tr>
- <tr><td class="first">Modified Date:</td><td>$utils.formatDate($project.createTimestamp)</td></tr>
- <tr><td class="first">Last Modified by:</td><td>$project.lastModifiedUser</td></tr>
- <tr><td class="first">Description:</td><td>$project.description</td></tr>
- </table>
- </div>
- <div id="project-tabs">
+ <div class="content">
+#if($errorMsg)
+ <div class="box-error-message">$errorMsg</div>
+#else
+#if($error_message != "null")
+ <div class="box-error-message">$error_message</div>
+#elseif($success_message != "null")
+ <div class="box-success-message">$success_message</div>
+#end
- </div>
- #end
- </div>
-
- <div id="upload-project" class="modal">
- <h3>Upload Project Files</h3>
- <div id="errorMsg" class="box-error-message">$errorMsg</div>
- <div class="message">
- <form id="upload-form" enctype="multipart/form-data" method="post" action="$!context/manager">
- <fieldset>
- <dl>
- <dt>Job Archive</dt>
- <dd><input id="file" name="file" class="file" type="file" onChange="changeFile()" /></dd>
- <input type="hidden" name="project" value="$project.name" />
- <input type="hidden" name="action" value="upload" />
- </dl>
- </fieldset>
- </form>
-
- </div>
- <div class="actions">
- <a class="yes btn2" id="upload-btn" href="#">Upload</a>
- <a class="no simplemodal-close btn3" href="#">Cancel</a>
- </div>
- </div>
- <div id="invalid-session" class="modal">
- <h3>Invalid Session</h3>
- <p>Session has expired. Please re-login.</p>
- <div class="actions">
- <a class="yes btn2" id="login-btn" href="#">Re-login</a>
- </div>
- </div>
- </body>
+ <div id="all-jobs-content">
+ <div class="section-hd">
+ <h2>Project <span>$project.name</span></h2>
+
+ <a id="project-upload-btn" class="btn1 projectupload" href="#">Upload</a>
+ <a id="project-permission-btn" class="btn5 projectpermission" href="#">Permissions</a>
+ </div><!-- end .section-hd -->
+ </div>
+
+ <div id="project-users">
+ <table class="user-table">
+ <tr><td class="first">Project Admins:</td><td>$admins</td></tr>
+ <tr><td class="first">User ${user_id} Permissions:</td><td>$permissions.toString()</td></tr>
+ </table>
+ </div>
+
+ <div id="project-summary">
+ <table class="summary-table">
+ <tr><td class="first">Name:</td><td>$project.name</td></tr>
+ <tr><td class="first">Created Date:</td><td>$utils.formatDate($project.lastModifiedTimestamp)</td></tr>
+ <tr><td class="first">Modified Date:</td><td>$utils.formatDate($project.createTimestamp)</td></tr>
+ <tr><td class="first">Last Modified by:</td><td>$project.lastModifiedUser</td></tr>
+ <tr><td class="first">Description:</td><td>$project.description</td></tr>
+ </table>
+ </div>
+
+ <div id="project-tabs">
+ <table id="all-jobs" class="all-jobs job-table">
+ <thead>
+ <tr>
+ <th class="tb-name">Name</th>
+ <th class="tb-up-date">Modified Date</th>
+ <th class="tb-owner">Modified By</th>
+ <th class="tb-action last">Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+#if($projects)
+#foreach($project in $projects)
+ <tr class="row">
+ <td class="tb-name">
+ <div class="jobfolder expand" onclick="expandFlow(this)" id="$folderName">
+ <span class="state-icon"></span>
+ <a href="${context}/manager?project=${project.name}">$project.name</a>
+ </div>
+ </td>
+ <td class="tb-up-date">$utils.formatDate($project.lastModifiedTimestamp)</td>
+ <td class="tb-owner">$project.lastModifiedUser</td>
+ <td class="tb-action last"></td>
+ </tr>
+#end
+#else
+ <tr><td class="last">No viewable projects found.</td></tr>
+#end
+ </tbody>
+ </table>
+ </div>
+#end
+ </div>
+
+ <div id="upload-project" class="modal">
+ <h3>Upload Project Files</h3>
+ <div id="errorMsg" class="box-error-message">$errorMsg</div>
+ <div class="message">
+ <form id="upload-form" enctype="multipart/form-data" method="post" action="$!context/manager">
+ <fieldset>
+ <dl>
+ <dt>Job Archive</dt>
+ <dd><input id="file" name="file" class="file" type="file" onChange="changeFile()" /></dd>
+ <input type="hidden" name="project" value="$project.name" />
+ <input type="hidden" name="action" value="upload" />
+ </dl>
+ </fieldset>
+ </form>
+ </div>
+ <div class="actions">
+ <a class="yes btn2" id="upload-btn" href="#">Upload</a>
+ <a class="no simplemodal-close btn3" href="#">Cancel</a>
+ </div>
+ <div id="invalid-session" class="modal">
+ <h3>Invalid Session</h3>
+ <p>Session has expired. Please re-login.</p>
+ <div class="actions">
+ <a class="yes btn2" id="login-btn" href="#">Re-login</a>
+ </div>
+ </div>
+ </div>
+ </body>
</html>
diff --git a/src/java/azkaban/webapp/servlet/velocity/style.vm b/src/java/azkaban/webapp/servlet/velocity/style.vm
index 29b1fdc..8a0de75 100644
--- a/src/java/azkaban/webapp/servlet/velocity/style.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/style.vm
@@ -1,16 +1,16 @@
- <title>#appname()</title>
- <link rel="stylesheet" type="text/css" href="${context}/css/azkaban.css">
- <link rel="shortcut icon" href="${context}/favicon.ico" />
- <style type="text/css">
- .enviro-name {
- color: ${azkaban_color};
- }
- .header {
- border-top-color: ${azkaban_color};
- }
- .nav .selected a {
- border-bottom-color: ${azkaban_color};
- }
- </style>
- <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
-
\ No newline at end of file
+ <title>#appname()
+ </title>
+ <link rel="stylesheet" type="text/css" href="${context}/css/azkaban.css">
+ <link rel="shortcut icon" href="${context}/favicon.ico" />
+ <style type="text/css">
+ .enviro-name {
+ color: ${azkaban_color};
+ }
+ .header {
+ border-top-color: ${azkaban_color};
+ }
+ .nav .selected a {
+ border-bottom-color: ${azkaban_color};
+ }
+ </style>
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
diff --git a/src/java/azkaban/webapp/servlet/velocity/title.vm b/src/java/azkaban/webapp/servlet/velocity/title.vm
index 8d70430..1bcfaf9 100644
--- a/src/java/azkaban/webapp/servlet/velocity/title.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/title.vm
@@ -1,5 +1,5 @@
-<h1 class="logo"><a href="${context}/" title="Azkaban">Azkaban</a></h1>
-<div class="enviro">
- <p class="enviro-name">${azkaban_name}</p>
- <p class="enviro-server">${azkaban_label}</p>
-</div>
\ No newline at end of file
+ <h1 class="logo"><a href="${context}/" title="Azkaban">Azkaban</a></h1>
+ <div class="enviro">
+ <p class="enviro-name">${azkaban_name}</p>
+ <p class="enviro-server">${azkaban_label}</p>
+ </div>