azkaban-aplcache
Changes
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executingflowpage.vm 339(+180 -159)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm 335(+176 -159)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm 383(+203 -180)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/invalidsessionmodal.vm 32(+16 -16)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailsheader.vm 80(+45 -35)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailspage.vm 110(+56 -54)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobhistorypage.vm 214(+119 -95)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/permissionspage.vm 587(+322 -265)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectlogpage.vm 120(+60 -60)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpageheader.vm 45(+24 -21)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm 178(+94 -84)
azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduleoptionspanel.vm 300(+155 -145)
Details
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
index 1516519..2effd95 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/alerts.vm
@@ -17,25 +17,25 @@
## Alert message set by servlet.
#if ($error_message != "null")
- <div class="alert alert-danger alert-dismissable">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- $error_message
- </div>
+<div class="alert alert-danger alert-dismissable">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ $error_message
+</div>
#elseif ($warn_message != "null")
- <div class="alert alert-warning alert-dismissable">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- $warn_message
- </div>
+<div class="alert alert-warning alert-dismissable">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ $warn_message
+</div>
#elseif ($success_message != "null")
- <div class="alert alert-success">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- $success_message
- </div>
+<div class="alert alert-success">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ $success_message
+</div>
#end
## Alert message triggered by JavaScript.
- <div class="alert alert-dismissable alert-messaging" id="messaging">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- <p id="messaging-message"></p>
- </div>
+<div class="alert alert-dismissable alert-messaging" id="messaging">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ <p id="messaging-message"></p>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/errormsg.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/errormsg.vm
index 38d76f9..a984b66 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/errormsg.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/errormsg.vm
@@ -14,14 +14,14 @@
* the License.
*#
- <div class="az-page-header">
- <div class="container-full">
- <h1 class="danger">Something's wrong</h1>
- </div>
- </div>
- <div class="container-full">
- <div class="alert alert-danger">
- <h4>Error</h4>
- $errorMsg
- </div>
- </div>
+<div class="az-page-header">
+ <div class="container-full">
+ <h1 class="danger">Something's wrong</h1>
+ </div>
+</div>
+<div class="container-full">
+ <div class="alert alert-danger">
+ <h4>Error</h4>
+ $errorMsg
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executingflowpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executingflowpage.vm
index 74c9d6a..c30daa1 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executingflowpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executingflowpage.vm
@@ -16,200 +16,221 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
-#parse("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
- <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
- <script type="text/javascript" src="${context}/js/morris.min.js"></script>
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
-
- <script type="text/javascript" src="${context}/js/dust-full-2.2.3.min.js"></script>
- <script type="text/javascript" src="${context}/js/flowstats.js"></script>
- <script type="text/javascript" src="${context}/js/flowstats-no-data.js"></script>
-
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-execution-list.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-stats.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/exflow.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;;
- var projectId = "${projectId}";
- var projectName = "${projectName}";
- var flowId = "${flowid}";
- var execId = "${execid}";
- </script>
- <link rel="stylesheet" type="text/css" href="${context}/css/morris.css" />
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css" />
- </head>
- <body>
-
-#set ($current_page="all")
-#set ($show_schedule="false")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
+ <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
+ <script type="text/javascript" src="${context}/js/morris.min.js"></script>
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+
+ <script type="text/javascript" src="${context}/js/dust-full-2.2.3.min.js"></script>
+ <script type="text/javascript" src="${context}/js/flowstats.js"></script>
+ <script type="text/javascript" src="${context}/js/flowstats-no-data.js"></script>
+
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-execution-list.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-stats.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/exflow.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+ ;
+ var projectId = "${projectId}";
+ var projectName = "${projectName}";
+ var flowId = "${flowid}";
+ var execId = "${execid}";
+ </script>
+ <link rel="stylesheet" type="text/css" href="${context}/css/morris.css"/>
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css"/>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #set ($show_schedule="false")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header
- <div class="az-page-header page-header-bare">
- <div class="container-full" id="flow-status">
- <div class="row">
- <div class="header-title">
- <h1>
- <a href="${context}/executor?execid=${execid}">
- Flow Execution <small>$execid <span id="flowStatus">-</span></small>
- </a>
- </h1>
- </div>
- <div class="header-control">
- <div class="exflow-stats">
- <div class="col-xs-5">
- <p><strong>Submit User</strong> <span id="submitUser">-</span></p>
- <p><strong>Duration</strong> <span id="duration">-</span></p>
- </div>
- <div class="col-xs-7">
- <p><strong>Start Time</strong> <span id="startTime">-</span></p>
- <p><strong>End Time</strong> <span id="endTime">-</span></p>
- </div>
+ <div class="az-page-header page-header-bare">
+ <div class="container-full" id="flow-status">
+ <div class="row">
+ <div class="header-title">
+ <h1>
+ <a href="${context}/executor?execid=${execid}">
+ Flow Execution
+ <small>$execid <span id="flowStatus">-</span></small>
+ </a>
+ </h1>
+ </div>
+ <div class="header-control">
+ <div class="exflow-stats">
+ <div class="col-xs-5">
+ <p><strong>Submit User</strong> <span id="submitUser">-</span></p>
+ <p><strong>Duration</strong> <span id="duration">-</span></p>
+ </div>
+ <div class="col-xs-7">
+ <p><strong>Start Time</strong> <span id="startTime">-</span></p>
+ <p><strong>End Time</strong> <span id="endTime">-</span></p>
</div>
- <div class="clearfix"></div>
</div>
+ <div class="clearfix"></div>
</div>
</div>
</div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName</a></li>
- <li><a href="${context}/manager?project=${projectName}&flow=${flowid}"><strong>Flow</strong> $flowid</a></li>
- <li class="active"><strong>Execution</strong> $execid</li>
- </ol>
- </div>
+ </div>
+ <div class="page-breadcrumb">
+ <div class="container-full">
+ <ol class="breadcrumb">
+ <li><a
+ href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName
+ </a></li>
+ <li><a
+ href="${context}/manager?project=${projectName}&flow=${flowid}"><strong>Flow</strong> $flowid
+ </a></li>
+ <li class="active"><strong>Execution</strong> $execid</li>
+ </ol>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Tabs and buttons.
- <ul class="nav nav-tabs nav-sm" id="headertabs">
- <li id="graphViewLink"><a href="#graph">Graph</a></li>
- <li id="jobslistViewLink"><a href="#jobslist">Job List</a></li>
- <li id="flowLogViewLink"><a href="#log">Flow Log</a></li>
- <li id="statsViewLink"><a href="#stats">Stats</a></li>
- #if ($executionExternalLinkURL)
- <li><a id="analyzerButton" href="${executionExternalLinkURL}" class="btn btn-info btn-sm" type="button" target="_blank" title="Analyze job in ${executionExternalLinkLabel}">${executionExternalLinkLabel}</a></li>
- #end
- <li class="nav-button pull-right"><button type="button" id="pausebtn" class="btn btn-primary btn-sm">Pause</button></li>
- <li class="nav-button pull-right"><button type="button" id="resumebtn" class="btn btn-primary btn-sm">Resume</button></li>
- <li class="nav-button pull-right"><button type="button" id="cancelbtn" class="btn btn-danger btn-sm">Kill</button></li>
- <li class="nav-button pull-right"><button type="button" id="retrybtn" class="btn btn-success btn-sm">Retry Failed</button></li>
- <li class="nav-button pull-right"><button type="button" id="executebtn" class="btn btn-success btn-sm">Prepare Execution</button></li>
- </ul>
- </div>
+ <ul class="nav nav-tabs nav-sm" id="headertabs">
+ <li id="graphViewLink"><a href="#graph">Graph</a></li>
+ <li id="jobslistViewLink"><a href="#jobslist">Job List</a></li>
+ <li id="flowLogViewLink"><a href="#log">Flow Log</a></li>
+ <li id="statsViewLink"><a href="#stats">Stats</a></li>
+ #if ($executionExternalLinkURL)
+ <li><a id="analyzerButton" href="${executionExternalLinkURL}" class="btn btn-info btn-sm"
+ type="button" target="_blank"
+ title="Analyze job in ${executionExternalLinkLabel}">${executionExternalLinkLabel}</a>
+ </li>
+ #end
+ <li class="nav-button pull-right">
+ <button type="button" id="pausebtn" class="btn btn-primary btn-sm">Pause</button>
+ </li>
+ <li class="nav-button pull-right">
+ <button type="button" id="resumebtn" class="btn btn-primary btn-sm">Resume</button>
+ </li>
+ <li class="nav-button pull-right">
+ <button type="button" id="cancelbtn" class="btn btn-danger btn-sm">Kill</button>
+ </li>
+ <li class="nav-button pull-right">
+ <button type="button" id="retrybtn" class="btn btn-success btn-sm">Retry Failed</button>
+ </li>
+ <li class="nav-button pull-right">
+ <button type="button" id="executebtn" class="btn btn-success btn-sm">Prepare Execution
+ </button>
+ </li>
+ </ul>
+ </div>
## Graph View
- #parse ("azkaban/webapp/servlet/velocity/flowgraphview.vm")
+ #parse ("azkaban/webapp/servlet/velocity/flowgraphview.vm")
## Job List View
- <div class="container-full" id="jobListView">
- <div class="row">
- <div class="col-xs-12">
- <table class="table table-bordered table-condensed table-hover executions-table">
- <thead>
- <tr>
- <th>Name</th>
- <th class="jobtype">Type</th>
- <th class="timeline">Timeline</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapsed</th>
- <th class="status">Status</th>
- <th class="logs">Details</th>
- </tr>
- </thead>
- <tbody id="executableBody">
- </tbody>
- </table>
- </div><!-- /.col-xs-12 -->
- </div><!-- /.row -->
- </div><!-- /.container-full -->
+ <div class="container-full" id="jobListView">
+ <div class="row">
+ <div class="col-xs-12">
+ <table class="table table-bordered table-condensed table-hover executions-table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th class="jobtype">Type</th>
+ <th class="timeline">Timeline</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapsed</th>
+ <th class="status">Status</th>
+ <th class="logs">Details</th>
+ </tr>
+ </thead>
+ <tbody id="executableBody">
+ </tbody>
+ </table>
+ </div><!-- /.col-xs-12 -->
+ </div><!-- /.row -->
+ </div><!-- /.container-full -->
## Flow Log View
- <div class="container-full container-fill" id="flowLogView">
- <div class="row">
- <div class="col-xs-12 col-content">
- <div class="log-viewer">
- <div class="panel panel-default">
- <div class="panel-heading">
- <div class="pull-right">
- <button type="button" id="updateLogBtn" class="btn btn-xs btn-info">Refresh</button>
- </div>
- Flow log
- </div>
- <div class="panel-body">
- <pre id="logSection"></pre>
+ <div class="container-full container-fill" id="flowLogView">
+ <div class="row">
+ <div class="col-xs-12 col-content">
+ <div class="log-viewer">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="pull-right">
+ <button type="button" id="updateLogBtn" class="btn btn-xs btn-info">Refresh</button>
</div>
- </div><!-- /.panel -->
- </div><!-- /.log-viewer -->
- </div><!-- /.col-xs-12 -->
- </div><!-- /.row -->
- </div><!-- /.container-full -->
+ Flow log
+ </div>
+ <div class="panel-body">
+ <pre id="logSection"></pre>
+ </div>
+ </div><!-- /.panel -->
+ </div><!-- /.log-viewer -->
+ </div><!-- /.col-xs-12 -->
+ </div><!-- /.row -->
+ </div><!-- /.container-full -->
## Stats view.
- <div class="container-full" id="statsView">
- <div id="flow-stats-container">
- <div class="row">
- <div class="col-lg-12">
- <div class="callout callout-default">
- <h4>No stats available</h4>
- <p>Stats for this flow execution are not available.</p>
- </div>
+ <div class="container-full" id="statsView">
+ <div id="flow-stats-container">
+ <div class="row">
+ <div class="col-lg-12">
+ <div class="callout callout-default">
+ <h4>No stats available</h4>
+ <p>Stats for this flow execution are not available.</p>
</div>
</div>
- </div><!-- /.row -->
- </div><!-- /.container-fill -->
+ </div>
+ </div><!-- /.row -->
+ </div><!-- /.container-fill -->
## Error message message dialog.
- <div class="container-full">
- <div class="modal" id="messageDialog">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header" id="messageTitle">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Error</h4>
- </div>
- <div class="modal-body" id="messageDiv">
- <p id="messageBox"></p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary" data-dismiss="modal">Dismiss</button>
- </div>
+ <div class="container-full">
+ <div class="modal" id="messageDialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header" id="messageTitle">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Error</h4>
+ </div>
+ <div class="modal-body" id="messageDiv">
+ <p id="messageBox"></p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary" data-dismiss="modal">Dismiss</button>
</div>
</div>
</div>
+ </div>
- <div id="contextMenu"></div>
+ <div id="contextMenu"></div>
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
- #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
- </div>
-#end
- </body>
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
+ #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
+ </div>
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
index 479b09c..3b73a7a 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
@@ -16,177 +16,194 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/executions.js"></script>
- <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
-
- $(document).ready(function () {
- var jobTable = $("#executingJobs");
- jobTable.tablesorter();
- });
- </script>
- </head>
- <body>
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/executions.js"></script>
+ <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
-#set ($current_page="executing")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ $(document).ready(function () {
+ var jobTable = $("#executingJobs");
+ jobTable.tablesorter();
+ });
+ </script>
+</head>
+<body>
+
+ #set ($current_page="executing")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
## Page header.
- <div class="az-page-header">
- <div class="container-full">
- <h1><a href="${context}/executor">Executing Flows</a></h1>
- </div>
- </div>
+<div class="az-page-header">
+ <div class="container-full">
+ <h1><a href="${context}/executor">Executing Flows</a></h1>
+ </div>
+</div>
- <div class="container-full">
+<div class="container-full">
-#parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Page Content
- <ul class="nav nav-tabs nav-sm" id="header-tabs">
- <li id="currently-running-view-link"><a href="#currently-running">Currently Running</a></li>
- <li id="recently-finished-view-link"><a href="#recently-finished">Recently Finished</a></li>
- </ul>
+ <ul class="nav nav-tabs nav-sm" id="header-tabs">
+ <li id="currently-running-view-link"><a href="#currently-running">Currently Running</a></li>
+ <li id="recently-finished-view-link"><a href="#recently-finished">Recently Finished</a></li>
+ </ul>
- <div class="row" id="currently-running-view">
- <div class="col-xs-12">
- <table id="executingJobs" class="table table-striped table-bordered table-hover table-condensed executions-table">
- <thead>
- <tr>
- <th>#</th>
- <th class="execid">Execution Id</th>
- <th >Executor Id</th>
- <th>Flow</th>
- <th>Project</th>
- <th class="user">User</th>
- <th class="user">Proxy</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapsed</th>
- <th class="status">Status</th>
- <th class="action">Action</th>
- </tr>
- </thead>
- <tbody>
+ <div class="row" id="currently-running-view">
+ <div class="col-xs-12">
+ <table id="executingJobs"
+ class="table table-striped table-bordered table-hover table-condensed executions-table">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th class="execid">Execution Id</th>
+ <th>Executor Id</th>
+ <th>Flow</th>
+ <th>Project</th>
+ <th class="user">User</th>
+ <th class="user">Proxy</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapsed</th>
+ <th class="status">Status</th>
+ <th class="action">Action</th>
+ </tr>
+ </thead>
+ <tbody>
-#if ( !$null.isNull(${runningFlows}))
- #foreach ($flow in $runningFlows)
- <tr>
- <td class="tb-name">
- $velocityCount
- </td>
- <td class="tb-name">
- <a href="${context}/executor?execid=${flow.getFirst().executionId}">${flow.getFirst().executionId}</a>
- </td>
- <td>
- #if (${flow.getSecond()})
- ${flow.getSecond().getId()}
- #else
- -
- #end
- </td>
- <td><a href="${context}/manager?project=$vmutils.getProjectName(${flow.getFirst().projectId})&flow=${flow.getFirst().flowId}">${flow.getFirst().flowId}</a></td>
- <td>
- <a href="${context}/manager?project=$vmutils.getProjectName(${flow.getFirst().projectId})">$vmutils.getProjectName(${flow.getFirst().projectId})</a>
- </td>
- <td>${flow.getFirst().submitUser}</td>
- <td>${flow.getFirst().proxyUsers}</td>
- <td>$utils.formatDate(${flow.getFirst().startTime})</td>
- <td>$utils.formatDate(${flow.getFirst().endTime})</td>
- <td>$utils.formatDuration(${flow.getFirst().startTime}, ${flow.getFirst().endTime})</td>
- <td><div class="status ${flow.getFirst().status}">$utils.formatStatus(${flow.getFirst().status})</div></td>
- <td><button type="button" id="cancelbtn" class="btn btn-danger btn-sm" onclick="killFlow(${flow.getFirst().executionId})">Kill</button></td>
- </tr>
- #end
-#else
- <tr>
- <td colspan="10">No Executing Flows</td>
- </tr>
-#end
- </tbody>
- </table>
- </div><!-- /col-xs-12 -->
- </div><!-- /row -->
+ #if ( !$null.isNull(${runningFlows}))
+ #foreach ($flow in $runningFlows)
+ <tr>
+ <td class="tb-name">
+ $velocityCount
+ </td>
+ <td class="tb-name">
+ <a href="${context}/executor?execid=${flow.getFirst().executionId}">${flow.getFirst().executionId}</a>
+ </td>
+ <td>
+ #if (${flow.getSecond()})
+ ${flow.getSecond().getId()}
+ #else
+ -
+ #end
+ </td>
+ <td><a
+ href="${context}/manager?project=$vmutils.getProjectName(${flow.getFirst().projectId})&flow=${flow.getFirst().flowId}">${flow.getFirst().flowId}</a>
+ </td>
+ <td>
+ <a href="${context}/manager?project=$vmutils.getProjectName(${flow.getFirst().projectId})">$vmutils.getProjectName(${flow.getFirst().projectId})</a>
+ </td>
+ <td>${flow.getFirst().submitUser}</td>
+ <td>${flow.getFirst().proxyUsers}</td>
+ <td>$utils.formatDate(${flow.getFirst().startTime})</td>
+ <td>$utils.formatDate(${flow.getFirst().endTime})</td>
+ <td>$utils.formatDuration(${flow.getFirst().startTime}, ${flow.getFirst().endTime})</td>
+ <td>
+ <div
+ class="status ${flow.getFirst().status}">$utils.formatStatus(${flow.getFirst().status})</div>
+ </td>
+ <td>
+ <button type="button" id="cancelbtn" class="btn btn-danger btn-sm"
+ onclick="killFlow(${flow.getFirst().executionId})">Kill
+ </button>
+ </td>
+ </tr>
+ #end
+ #else
+ <tr>
+ <td colspan="10">No Executing Flows</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ </div><!-- /col-xs-12 -->
+ </div><!-- /row -->
- <div class="row" id="recently-finished-view">
- <div class="col-xs-12">
- <table id="recentlyFinished" class="table table-striped table-bordered table-hover table-condensed executions-table">
- <thead>
- <tr>
- <th>#</th>
- <th class="execid">Execution Id</th>
- <th>Flow</th>
- <th>Project</th>
- <th class="user">User</th>
- <th class="user">Proxy</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapsed</th>
- <th class="status">Status</th>
- <th class="action">Action</th>
- </tr>
- </thead>
- <tbody>
-#if ( !$null.isNull(${recentlyFinished}))
- #foreach ($flow in $recentlyFinished)
- <tr>
- <td class="tb-name">
- $velocityCount
- </td>
- <td class="tb-name execId">
- <a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
- </td>
- <td><a href="${context}/manager?project=$vmutils.getProjectName(${flow.projectId})&flow=${flow.flowId}">${flow.flowId}</a></td>
- <td>
- <a href="${context}/manager?project=$vmutils.getProjectName(${flow.projectId})">$vmutils.getProjectName(${flow.projectId})</a>
- </td>
- <td>${flow.submitUser}</td>
- <td>${flow.proxyUsers}</td>
- <td>$utils.formatDate(${flow.startTime})</td>
- <td>$utils.formatDate(${flow.endTime})</td>
- <td>$utils.formatDuration(${flow.startTime}, ${flow.endTime})</td>
- <td><div class="status ${flow.status}">$utils.formatStatus(${flow.status})</div></td>
- <td></td>
- </tr>
- #end
-#else
- <tr>
- <td colspan="10">No Recently Finished</td>
- </tr>
-#end
- </tbody>
- </table>
- </div><!-- /col-xs-12 -->
- </div><!-- /row -->
- <div class="modal" id="messageDialog">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header" id="messageTitle">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Error</h4>
- </div>
- <div class="modal-body" id="messageDiv">
- <p id="messageBox"></p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="window.location.reload(true);">Dismiss</button>
- </div>
- </div>
- </div>
+ <div class="row" id="recently-finished-view">
+ <div class="col-xs-12">
+ <table id="recentlyFinished"
+ class="table table-striped table-bordered table-hover table-condensed executions-table">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th class="execid">Execution Id</th>
+ <th>Flow</th>
+ <th>Project</th>
+ <th class="user">User</th>
+ <th class="user">Proxy</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapsed</th>
+ <th class="status">Status</th>
+ <th class="action">Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ #if ( !$null.isNull(${recentlyFinished}))
+ #foreach ($flow in $recentlyFinished)
+ <tr>
+ <td class="tb-name">
+ $velocityCount
+ </td>
+ <td class="tb-name execId">
+ <a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
+ </td>
+ <td><a
+ href="${context}/manager?project=$vmutils.getProjectName(${flow.projectId})&flow=${flow.flowId}">${flow.flowId}</a>
+ </td>
+ <td>
+ <a href="${context}/manager?project=$vmutils.getProjectName(${flow.projectId})">$vmutils.getProjectName(${flow.projectId})</a>
+ </td>
+ <td>${flow.submitUser}</td>
+ <td>${flow.proxyUsers}</td>
+ <td>$utils.formatDate(${flow.startTime})</td>
+ <td>$utils.formatDate(${flow.endTime})</td>
+ <td>$utils.formatDuration(${flow.startTime}, ${flow.endTime})</td>
+ <td>
+ <div class="status ${flow.status}">$utils.formatStatus(${flow.status})</div>
+ </td>
+ <td></td>
+ </tr>
+ #end
+ #else
+ <tr>
+ <td colspan="10">No Recently Finished</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ </div><!-- /col-xs-12 -->
+ </div><!-- /row -->
+ <div class="modal" id="messageDialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header" id="messageTitle">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Error</h4>
+ </div>
+ <div class="modal-body" id="messageDiv">
+ <p id="messageBox"></p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary" data-dismiss="modal"
+ onclick="window.location.reload(true);">Dismiss
+ </button>
+ </div>
</div>
- </div><!-- /container-full -->
- </body>
+ </div>
+ </div>
+</div><!-- /container-full -->
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
index f526573..7370b58 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
@@ -14,191 +14,214 @@
* the License.
*#
- <div class="modal modal-wide" id="execute-flow-panel">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title" id="execute-flow-panel-title"></h4>
- </div><!-- /modal-header -->
- <div class="modal-body row">
- <div class="col-xs-4">
- <ul class="nav nav-pills nav-stacked" id="graph-options">
- <li id="flow-option" viewpanel="svg-div-custom">
- <a href="#">Flow View</a>
- <div class="menu-caption">Right click on the jobs to disable and enable jobs in the flow.</div>
- </li>
- <li viewpanel="notification-panel">
- <a href="#">Notification</a>
- <div class="menu-caption">Change the address where success and failure emails will be sent.</div>
- </li>
- <li viewpanel="failure-options">
- <a href="#">Failure Options</a>
- <div class="menu-caption">Select flow behavior when a failure is detected.</div>
- </li>
- <li viewpanel="concurrent-panel">
- <a href="#">Concurrent</a>
- <div class="menu-caption">Change the behavior of the flow if it is already running.</div>
- </li>
- <li viewpanel="flow-parameters-panel">
- <a href="#">Flow Parameters</a>
- <div class="menu-caption">Add temporary flow parameters that are used to override global settings for each job.</div>
- </li>
- </ul>
- </div><!-- /col-xs-4 -->
- <div class="col-xs-8">
- <div id="execution-graph-options-panel">
-
-## SVG graph panel.
-
- <div id="svg-div-custom" class="side-panel">
- <svg id="flow-executing-graph" xmlns="http://www.w3.org/2000/svg" version="1.1" shape-rendering="optimize-speed" text-rendering="optimize-speed">
- </svg>
- </div>
-
-## Notification panel.
-
- <div id="notification-panel" class="side-panel">
- <h4>Notify on failure</h4>
- <p>On a job failure, notify on either the first failure, and/or when the failed flow finishes.</p>
- <hr>
- <div class="btn-group" data-toggle="buttons">
- <label class="btn btn-default">
- <input id="notify-failure-first" type="radio" name="notify" value="first">First failure
- </label>
- <label class="btn btn-default">
- <input id="notify-failure-last" type="radio" name="notify" value="last">Flow finished
- </label>
- </div>
-
- <h4>Failure Emails</h4>
- <div class="checkbox">
- <label>
- <input type="checkbox" id="override-failure-emails" name="overrideFailureEmails" value="overrideFailureEmails">
- Override flow email settings.
- </label>
- </div>
- <label>Notify these addresses on failure. Comma, space, or semi-colon delimited list.</label>
- <textarea class="form-control" rows="3" id="failure-emails"></textarea>
-
- <h4>Success Emails</h4>
- <div class="checkbox">
- <label>
- <input type="checkbox" id="override-success-emails" name="overrideSuccessEmails" value="overrideSuccessEmails">
- Override flow email settings.
- </label>
- </div>
- <label>Notify when the flow finishes successfully. Comma, space, or semi-colon delimited list.</label>
- <textarea class="form-control" rows="3" id="success-emails"></textarea>
- </div>
-
-## Failure options panel.
-
- <div id="failure-options" class="side-panel">
- <h4>Failure Options</h4>
- <p>When a failure first occurs in the flow, select the execution behavior.</p>
- <hr>
- <ul>
- <li><strong>Finish Current Running</strong> finishes only the currently running job. It will not start any new jobs.</li>
- <li><strong>Cancel All</strong> immediately kills all jobs and fails the flow.</li>
- <li><strong>Finish All Possible</strong> will keep executing jobs as long as its dependencies are met.</li>
- </ul>
- <select id="failure-action" name="failureAction" class="form-control form-control-auto">
- <option value="finishCurrent">Finish Current Running</option>
- <option value="cancelImmediately">Cancel All</option>
- <option value="finishPossible">Finish All Possible</option>
- </select>
- </div>
-
-## Concurrent execution options panel.
-
- <div id="concurrent-panel" class="side-panel">
- <h4>Concurrent Execution Options</h4>
- <p>If the flow is currently running, these are the options that can be set.</p>
- <hr>
- <div class="radio">
- <label>
- <input type="radio" id="skip" name="concurrent" value="skip" checked="checked">
- Skip Execution
- </label>
- <span class="help-block">Do not run flow if it is already running.</span>
- </div>
-
- <div class="radio">
- <label>
- <input type="radio" id="ignore" name="concurrent" value="ignore">
- Run Concurrently
- </label>
- <span class="help-block">Run the flow anyway. Previous execution is unaffected.</span>
- </div>
-
- <div class="radio">
- <label>
- <input type="radio" id="pipeline" name="concurrent" value="pipeline">
- Pipeline
- </label>
- <select id="pipeline-level" name="pipelineLevel" class="form-control form-control-auto input-sm">
- <option value="1">Level 1</option>
- <option value="2">Level 2</option>
- </select>
- <span class="help-block">
+<div class="modal modal-wide" id="execute-flow-panel">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title" id="execute-flow-panel-title"></h4>
+ </div><!-- /modal-header -->
+ <div class="modal-body row">
+ <div class="col-xs-4">
+ <ul class="nav nav-pills nav-stacked" id="graph-options">
+ <li id="flow-option" viewpanel="svg-div-custom">
+ <a href="#">Flow View</a>
+ <div class="menu-caption">Right click on the jobs to disable and enable jobs in the
+ flow.
+ </div>
+ </li>
+ <li viewpanel="notification-panel">
+ <a href="#">Notification</a>
+ <div class="menu-caption">Change the address where success and failure emails will be
+ sent.
+ </div>
+ </li>
+ <li viewpanel="failure-options">
+ <a href="#">Failure Options</a>
+ <div class="menu-caption">Select flow behavior when a failure is detected.</div>
+ </li>
+ <li viewpanel="concurrent-panel">
+ <a href="#">Concurrent</a>
+ <div class="menu-caption">Change the behavior of the flow if it is already running.
+ </div>
+ </li>
+ <li viewpanel="flow-parameters-panel">
+ <a href="#">Flow Parameters</a>
+ <div class="menu-caption">Add temporary flow parameters that are used to override
+ global settings for each job.
+ </div>
+ </li>
+ </ul>
+ </div><!-- /col-xs-4 -->
+ <div class="col-xs-8">
+ <div id="execution-graph-options-panel">
+
+ ## SVG graph panel.
+
+ <div id="svg-div-custom" class="side-panel">
+ <svg id="flow-executing-graph" xmlns="http://www.w3.org/2000/svg" version="1.1"
+ shape-rendering="optimize-speed" text-rendering="optimize-speed">
+ </svg>
+ </div>
+
+ ## Notification panel.
+
+ <div id="notification-panel" class="side-panel">
+ <h4>Notify on failure</h4>
+ <p>On a job failure, notify on either the first failure, and/or when the failed flow
+ finishes.</p>
+ <hr>
+ <div class="btn-group" data-toggle="buttons">
+ <label class="btn btn-default">
+ <input id="notify-failure-first" type="radio" name="notify" value="first">First
+ failure
+ </label>
+ <label class="btn btn-default">
+ <input id="notify-failure-last" type="radio" name="notify" value="last">Flow
+ finished
+ </label>
+ </div>
+
+ <h4>Failure Emails</h4>
+ <div class="checkbox">
+ <label>
+ <input type="checkbox" id="override-failure-emails" name="overrideFailureEmails"
+ value="overrideFailureEmails">
+ Override flow email settings.
+ </label>
+ </div>
+ <label>Notify these addresses on failure. Comma, space, or semi-colon delimited
+ list.</label>
+ <textarea class="form-control" rows="3" id="failure-emails"></textarea>
+
+ <h4>Success Emails</h4>
+ <div class="checkbox">
+ <label>
+ <input type="checkbox" id="override-success-emails" name="overrideSuccessEmails"
+ value="overrideSuccessEmails">
+ Override flow email settings.
+ </label>
+ </div>
+ <label>Notify when the flow finishes successfully. Comma, space, or semi-colon
+ delimited list.</label>
+ <textarea class="form-control" rows="3" id="success-emails"></textarea>
+ </div>
+
+ ## Failure options panel.
+
+ <div id="failure-options" class="side-panel">
+ <h4>Failure Options</h4>
+ <p>When a failure first occurs in the flow, select the execution behavior.</p>
+ <hr>
+ <ul>
+ <li><strong>Finish Current Running</strong> finishes only the currently running job.
+ It will not start any new jobs.
+ </li>
+ <li><strong>Cancel All</strong> immediately kills all jobs and fails the flow.</li>
+ <li><strong>Finish All Possible</strong> will keep executing jobs as long as its
+ dependencies are met.
+ </li>
+ </ul>
+ <select id="failure-action" name="failureAction"
+ class="form-control form-control-auto">
+ <option value="finishCurrent">Finish Current Running</option>
+ <option value="cancelImmediately">Cancel All</option>
+ <option value="finishPossible">Finish All Possible</option>
+ </select>
+ </div>
+
+ ## Concurrent execution options panel.
+
+ <div id="concurrent-panel" class="side-panel">
+ <h4>Concurrent Execution Options</h4>
+ <p>If the flow is currently running, these are the options that can be set.</p>
+ <hr>
+ <div class="radio">
+ <label>
+ <input type="radio" id="skip" name="concurrent" value="skip" checked="checked">
+ Skip Execution
+ </label>
+ <span class="help-block">Do not run flow if it is already running.</span>
+ </div>
+
+ <div class="radio">
+ <label>
+ <input type="radio" id="ignore" name="concurrent" value="ignore">
+ Run Concurrently
+ </label>
+ <span
+ class="help-block">Run the flow anyway. Previous execution is unaffected.</span>
+ </div>
+
+ <div class="radio">
+ <label>
+ <input type="radio" id="pipeline" name="concurrent" value="pipeline">
+ Pipeline
+ </label>
+ <select id="pipeline-level" name="pipelineLevel"
+ class="form-control form-control-auto input-sm">
+ <option value="1">Level 1</option>
+ <option value="2">Level 2</option>
+ </select>
+ <span class="help-block">
Pipeline the flow, so the current execution will not be overrun.
<ul>
<li>Level 1: block job A until the previous flow job A has completed.</li>
<li>Level 2: block job A until the previous flow job A's children have completed.</li>
- </li>
+ </li>
</span>
- </div>
- </div>
-
-## Flow parameters panel
-
- <div id="flow-parameters-panel" class="side-panel">
- <h4>Flow Property Override</h4>
- <hr>
- <div id="editTable">
- <table class="table table-striped">
- <thead>
- <tr>
- <th class="property-key">Name</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- <tr id="addRow" class="addRow">
- <td id="addRow-col" colspan="2">
- <button type="button" class="btn btn-success btn-xs" id="add-btn">Add Row</button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
-
- </div><!-- /execution-graph-options-panel -->
- </div><!-- /col-xs-8 -->
- </div><!-- /modal-body -->
-
- <div class="modal-footer">
-#if (!$show_schedule || $show_schedule == 'true')
- <div class="pull-left">
- <button type="button" class="btn btn-success" id="schedule-btn">Schedule</button>
</div>
-#end
-
-#*
-#if ($triggerPlugins.size() > 0)
- #foreach ($triggerPlugin in $triggerPlugins)
- <button type="button" class="btn btn-default" id=set-$triggerPlugin.pluginName>$triggerPlugin.pluginName</button>
- #end
-#end
-*#
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="execute-btn">Execute</button>
- </div><!-- /modal-footer -->
- </div><!-- /modal-content -->
- </div><!-- /modal-dialog -->
- </div><!-- /modal -->
+ </div>
+
+ ## Flow parameters panel
+
+ <div id="flow-parameters-panel" class="side-panel">
+ <h4>Flow Property Override</h4>
+ <hr>
+ <div id="editTable">
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <th class="property-key">Name</th>
+ <th>Value</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr id="addRow" class="addRow">
+ <td id="addRow-col" colspan="2">
+ <button type="button" class="btn btn-success btn-xs" id="add-btn">Add Row
+ </button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ </div><!-- /execution-graph-options-panel -->
+ </div><!-- /col-xs-8 -->
+ </div><!-- /modal-body -->
+
+ <div class="modal-footer">
+ #if (!$show_schedule || $show_schedule == 'true')
+ <div class="pull-left">
+ <button type="button" class="btn btn-success" id="schedule-btn">Schedule</button>
+ </div>
+ #end
+
+ #*
+ #if ($triggerPlugins.size() > 0)
+ #foreach ($triggerPlugin in $triggerPlugins)
+ <button type="button" class="btn btn-default" id=set-$triggerPlugin.pluginName>$triggerPlugin.pluginName</button>
+ #end
+ #end
+ *#
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="execute-btn">Execute</button>
+ </div><!-- /modal-footer -->
+ </div><!-- /modal-content -->
+ </div><!-- /modal-dialog -->
+</div><!-- /modal -->
#if (!$show_schedule || $show_schedule == 'true')
#parse ("azkaban/webapp/servlet/velocity/schedulepanel.vm")
@@ -214,4 +237,4 @@
#end
*#
- <div id="contextMenu"></div>
+<div id="contextMenu"></div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowextendedpanel.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowextendedpanel.vm
index 4b54f61..76b16c0 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowextendedpanel.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowextendedpanel.vm
@@ -9,10 +9,10 @@
<div class="dataJobProperties">
<table class="dataPropertiesTable">
<thead class="dataPropertiesHead">
- <tr>
- <th>Name</th>
- <th>Value</th>
- </tr>
+ <tr>
+ <th>Name</th>
+ <th>Value</th>
+ </tr>
</thead>
<tbody class="dataPropertiesBody">
</tbody>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowgraphview.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowgraphview.vm
index 6f566c8..7b3a049 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowgraphview.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowgraphview.vm
@@ -14,31 +14,36 @@
* the License.
*#
- ## Graph view.
+## Graph view.
- <div class="container-full container-fill" id="graphView">
- <div class="graph-sidebar-open" id="open-joblist-btn">
- <span class="glyphicon glyphicon-th-list" title="Open Job List Panel"></span>
- </div>
- <div class="graph-sidebar-float">
- <div class="panel panel-default" id="joblist-panel">
- <div class="panel-heading">
- <div class="graph-sidebar-close" id="close-btn" title="Close Panel"><span class="glyphicon glyphicon-remove"></span></div>
- <div class="graph-sidebar-search">
- <input id="filter" type="text" placeholder="Job Filter" class="form-control input-sm">
- </div>
- </div>
- <div id="joblist" class="graph-sidebar-list"></div>
- <div class="panel-footer">
- <button type="button" class="btn btn-sm btn-default" id="resetPanZoomBtn">Reset Pan Zoom</button>
- <button type="button" class="btn btn-sm btn-default" id="autoPanZoomBtn" data-toggle="button">Auto Pan Zoom</button>
- </div>
- </div><!-- /.panel -->
- </div>
- <div class="col-content">
- <div id="svgDiv" class="well well-clear well-sm graph-container">
- <svg id="flow-graph" xmlns="http://www.w3.org/2000/svg" version="1.1" shape-rendering="optimize-speed" text-rendering="optimize-speed">
- </svg>
+<div class="container-full container-fill" id="graphView">
+ <div class="graph-sidebar-open" id="open-joblist-btn">
+ <span class="glyphicon glyphicon-th-list" title="Open Job List Panel"></span>
+ </div>
+ <div class="graph-sidebar-float">
+ <div class="panel panel-default" id="joblist-panel">
+ <div class="panel-heading">
+ <div class="graph-sidebar-close" id="close-btn" title="Close Panel"><span
+ class="glyphicon glyphicon-remove"></span></div>
+ <div class="graph-sidebar-search">
+ <input id="filter" type="text" placeholder="Job Filter" class="form-control input-sm">
</div>
</div>
+ <div id="joblist" class="graph-sidebar-list"></div>
+ <div class="panel-footer">
+ <button type="button" class="btn btn-sm btn-default" id="resetPanZoomBtn">Reset Pan Zoom
+ </button>
+ <button type="button" class="btn btn-sm btn-default" id="autoPanZoomBtn"
+ data-toggle="button">Auto Pan Zoom
+ </button>
+ </div>
+ </div><!-- /.panel -->
+ </div>
+ <div class="col-content">
+ <div id="svgDiv" class="well well-clear well-sm graph-container">
+ <svg id="flow-graph" xmlns="http://www.w3.org/2000/svg" version="1.1"
+ shape-rendering="optimize-speed" text-rendering="optimize-speed">
+ </svg>
</div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowpage.vm
index f6b1b69..37445e3 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/flowpage.vm
@@ -16,160 +16,168 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
-#parse("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
- <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
- <script type="text/javascript" src="${context}/js/morris.min.js"></script>
-
- <script type="text/javascript" src="${context}/js/dust-full-2.2.3.min.js"></script>
- <script type="text/javascript" src="${context}/js/flowsummary.js?version=20161003"></script>
- <script type="text/javascript" src="${context}/js/flowstats-no-data.js"></script>
- <script type="text/javascript" src="${context}/js/flowstats.js"></script>
-
- <script type="text/javascript" src="${context}/js/azkaban/view/time-graph.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/schedule.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/schedule-sla.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-stats.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- var projectId = ${project.id};
- var projectName = "${project.name}";
- var flowId = "${flowid}";
- var execId = null;
- </script>
- <link rel="stylesheet" type="text/css" href="${context}/css/morris.css" />
- <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css" />
- </head>
- <body>
-
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+ <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
+ <script type="text/javascript" src="${context}/js/morris.min.js"></script>
+
+ <script type="text/javascript" src="${context}/js/dust-full-2.2.3.min.js"></script>
+ <script type="text/javascript" src="${context}/js/flowsummary.js?version=20161003"></script>
+ <script type="text/javascript" src="${context}/js/flowstats-no-data.js"></script>
+ <script type="text/javascript" src="${context}/js/flowstats.js"></script>
+
+ <script type="text/javascript" src="${context}/js/azkaban/view/time-graph.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/util/schedule.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/schedule-sla.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-stats.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ var projectId = ${project.id};
+ var projectName = "${project.name}";
+ var flowId = "${flowid}";
+ var execId = null;
+ </script>
+ <link rel="stylesheet" type="text/css" href="${context}/css/morris.css"/>
+ <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css"/>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- <div class="az-page-header page-header-bare">
- <div class="container-full">
- <div class="row">
- <div class="header-title">
- <h1><a href="${context}/manager?project=${project.name}&flow=${flowid}">Flow <small>$flowid</small></a></h1>
- </div>
- <div class="header-control">
- <div class="pull-right header-form">
- <button type="button" class="btn btn-sm btn-success" id="executebtn">Schedule / Execute Flow</button>
- </div>
+ <div class="az-page-header page-header-bare">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title">
+ <h1><a href="${context}/manager?project=${project.name}&flow=${flowid}">Flow
+ <small>$flowid</small>
+ </a></h1>
+ </div>
+ <div class="header-control">
+ <div class="pull-right header-form">
+ <button type="button" class="btn btn-sm btn-success" id="executebtn">Schedule / Execute
+ Flow
+ </button>
</div>
</div>
</div>
</div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name</a></li>
- <li class="active"><strong>Flow</strong> $flowid</li>
- </ol>
- </div>
+ </div>
+ <div class="page-breadcrumb">
+ <div class="container-full">
+ <ol class="breadcrumb">
+ <li><a
+ href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name
+ </a></li>
+ <li class="active"><strong>Flow</strong> $flowid</li>
+ </ol>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Tabs
- <ul class="nav nav-tabs nav-sm" id="headertabs">
- <li id="graphViewLink"><a href="#graph">Graph</a></li>
- <li id="executionsViewLink"><a href="#executions">Executions</a></li>
- <li id="summaryViewLink"><a href="#summary">Summary</a></li>
- </ul>
- </div>
+ <ul class="nav nav-tabs nav-sm" id="headertabs">
+ <li id="graphViewLink"><a href="#graph">Graph</a></li>
+ <li id="executionsViewLink"><a href="#executions">Executions</a></li>
+ <li id="summaryViewLink"><a href="#summary">Summary</a></li>
+ </ul>
+ </div>
## Graph view.
- #parse ("azkaban/webapp/servlet/velocity/flowgraphview.vm")
+ #parse ("azkaban/webapp/servlet/velocity/flowgraphview.vm")
## Executions view.
- <div class="container-full" id="executionsView">
- <div class="row">
- <div class="col-xs-12">
- <div class="well well-clear well-sm" id="timeGraph">
- </div>
-
- <table class="table table-striped table-bordered table-condensed table-hover" id="execTable">
- <thead>
- <tr>
- <th>Execution Id</th>
- <th>User</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapsed</th>
- <th class="status">Status</th>
- <th class="action">Action</th>
- </tr>
- </thead>
- <tbody id="execTableBody">
- </tbody>
- </table>
- <ul id="pageSelection" class="pagination">
- <li id="previous" class="first"><a><span class="arrow">←</span>Previous</a></li>
- <li id="page1"><a href="#page1">1</a></li>
- <li id="page2"><a href="#page2">2</a></li>
- <li id="page3"><a href="#page3">3</a></li>
- <li id="page4"><a href="#page4">4</a></li>
- <li id="page5"><a href="#page5">5</a></li>
- <li id="next"><a>Next<span class="arrow">→</span></a></li>
- </ul>
+ <div class="container-full" id="executionsView">
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="well well-clear well-sm" id="timeGraph">
</div>
+
+ <table class="table table-striped table-bordered table-condensed table-hover"
+ id="execTable">
+ <thead>
+ <tr>
+ <th>Execution Id</th>
+ <th>User</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapsed</th>
+ <th class="status">Status</th>
+ <th class="action">Action</th>
+ </tr>
+ </thead>
+ <tbody id="execTableBody">
+ </tbody>
+ </table>
+ <ul id="pageSelection" class="pagination">
+ <li id="previous" class="first"><a><span class="arrow">←</span>Previous</a></li>
+ <li id="page1"><a href="#page1">1</a></li>
+ <li id="page2"><a href="#page2">2</a></li>
+ <li id="page3"><a href="#page3">3</a></li>
+ <li id="page4"><a href="#page4">4</a></li>
+ <li id="page5"><a href="#page5">5</a></li>
+ <li id="next"><a>Next<span class="arrow">→</span></a></li>
+ </ul>
</div>
- </div><!-- /.container-fill -->
+ </div>
+ </div><!-- /.container-fill -->
## Summary view.
- <div class="container-full" id="summaryView">
- <div id="summary-view-content">
- </div>
- <div id="flow-stats-container">
- <div class="row">
- <div class="col-xs-12">
- <div class="callout callout-info">
- <h4>Analyze last run</h4>
- <p>Analyze the last run for aggregate performance statistics. Note: this may take a few minutes, especially if your flow is large.</p>
- <p>
- <button type="button" id="analyze-btn" class="btn btn-primary">Analyze</button>
- </p>
- </div>
+ <div class="container-full" id="summaryView">
+ <div id="summary-view-content">
+ </div>
+ <div id="flow-stats-container">
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="callout callout-info">
+ <h4>Analyze last run</h4>
+ <p>Analyze the last run for aggregate performance statistics. Note: this may take a few
+ minutes, especially if your flow is large.</p>
+ <p>
+ <button type="button" id="analyze-btn" class="btn btn-primary">Analyze</button>
+ </p>
</div>
- </div><!-- /.col-lg-12 -->
- </div>
- </div><!-- /.container-fill -->
+ </div>
+ </div><!-- /.col-lg-12 -->
+ </div>
+ </div><!-- /.container-fill -->
## Context menu and the rest of the page.
- <div class="container-full">
- <div id="contextMenu">
- </div>
+ <div class="container-full">
+ <div id="contextMenu">
+ </div>
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
- #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
- #parse ("azkaban/webapp/servlet/velocity/slapanel.vm")
- </div><!-- /.container -->
-#end
- </body>
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
+ #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
+ #parse ("azkaban/webapp/servlet/velocity/slapanel.vm")
+ </div><!-- /.container -->
+ #end
+</body>
</body>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
index b18f52e..40ce113 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
@@ -16,90 +16,93 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css" />
+ <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css"/>
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/history.js"></script>
- <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/history.js"></script>
+ <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
- $(document).ready(function () {
- var jobTable = $("#executingJobs");
- jobTable.tablesorter();
- });
- </script>
- </head>
- <body>
+ $(document).ready(function () {
+ var jobTable = $("#executingJobs");
+ jobTable.tablesorter();
+ });
+ </script>
+</head>
+<body>
-#set ($current_page="history")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page="history")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- <div class="az-page-header">
- <div class="container-full">
- <div class="row">
- <div class="header-title">
- <h1><a href="${context}/history">History</a></h1>
- </div>
- <div class="header-control">
- <form id="search-form" method="get" class="form-inline header-form" role="form">
- <input type="hidden" name="search" value="true">
- <div class="form-group">
- <div class="input-group">
- <input type="text" id="searchtextbox" placeholder="flow name containing ..." value=#if($search_term) "$esc.html(${search_term})" #else "" #end class="form-control input-sm" name="searchterm">
- <span class="input-group-btn">
+ <div class="az-page-header">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title">
+ <h1><a href="${context}/history">History</a></h1>
+ </div>
+ <div class="header-control">
+ <form id="search-form" method="get" class="form-inline header-form" role="form">
+ <input type="hidden" name="search" value="true">
+ <div class="form-group">
+ <div class="input-group">
+ <input type="text" id="searchtextbox"
+ placeholder="flow name containing ..." value=#if($search_term) "$esc.html(${search_term})" #else
+ "" #end class="form-control input-sm" name="searchterm">
+ <span class="input-group-btn">
<button class="btn btn-primary btn-sm">Quick Search</button>
<button type="button" class="btn btn-success btn-sm" id="adv-filter-btn">Advanced Filter</button>
</span>
- </div>
</div>
- </form>
- </div>
+ </div>
+ </form>
</div>
</div>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row">
- <div class="col-xs-12">
- <table id="executingJobs" class="table table-striped table-bordered table-hover table-condensed executions-table">
- <thead>
- <tr>
- <th>#</th>
- <th class="execid">Execution Id</th>
- <th>Flow</th>
- <th>Project</th>
- <th>User</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapsed</th>
- <th class="status">Status</th>
- <th class="action">Action</th>
- </tr>
- </thead>
- <tbody>
- #if (!$flowHistory.isEmpty())
- #foreach ($flow in $flowHistory)
+ <div class="row">
+ <div class="col-xs-12">
+ <table id="executingJobs"
+ class="table table-striped table-bordered table-hover table-condensed executions-table">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th class="execid">Execution Id</th>
+ <th>Flow</th>
+ <th>Project</th>
+ <th>User</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapsed</th>
+ <th class="status">Status</th>
+ <th class="action">Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ #if (!$flowHistory.isEmpty())
+ #foreach ($flow in $flowHistory)
<tr>
<td class="tb-name">
- $velocityCount
+ $velocityCount
</td>
<td class="tb-name execId">
<a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
@@ -119,115 +122,163 @@
</td>
<td></td>
</tr>
- #end
- #else
- <tr>
- <td class="last" colspan="9">No History Results Found</td>
- </tr>
- #end
- </tbody>
- </table>
- <ul class="pagination" id="pageSelection">
- #if ($search)
- <li id="previous" class="first"><a href="${context}/history?page=${previous.page}&size=${previous.size}&search=true&searchterm=$esc.html(${search_term})"><span class="arrow">←</span>Previous</a></li>
- <li id="page1" #if($page1.selected) class="selected" #end><a href="${context}/history?page=${page1.page}&size=${page1.size}&search=true&searchterm=$esc.html(${search_term})">${page1.page}</a></li>
- <li id="page2" #if($page2.selected) class="selected" #end><a href="${context}/history?page=${page2.page}&size=${page2.size}&search=true&searchterm=$esc.html(${search_term})">${page2.page}</a></li>
- <li id="page3" #if($page3.selected) class="selected" #end><a href="${context}/history?page=${page3.page}&size=${page3.size}&search=true&searchterm=$esc.html(${search_term})">${page3.page}</a></li>
- <li id="page4" #if($page4.selected) class="selected" #end><a href="${context}/history?page=${page4.page}&size=${page4.size}&search=true&searchterm=$esc.html(${search_term})">${page4.page}</a></li>
- <li id="page5" #if($page5.selected) class="selected" #end><a href="${context}/history?page=${page5.page}&size=${page5.size}&search=true&searchterm=$esc.html(${search_term})">${page5.page}</a></li>
- <li id="next"><a href="${context}/history?page=${next.page}&size=${next.size}&search=true&searchterm=$esc.html(${search_term})">Next<span class="arrow">→</span></a></li>
- #elseif($advfilter)
- <li id="previous" class="first"><a href="${context}/history?page=${previous.page}&size=${previous.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}"><span class="arrow">←</span>Previous</a></li>
- <li id="page1" #if($page1.selected) class="selected" #end><a href="${context}/history?page=${page1.page}&size=${page1.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page1.page}</a></li>
- <li id="page2" #if($page2.selected) class="selected" #end><a href="${context}/history?page=${page2.page}&size=${page2.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page2.page}</a></li>
- <li id="page3" #if($page3.selected) class="selected" #end><a href="${context}/history?page=${page3.page}&size=${page3.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page3.page}</a></li>
- <li id="page4" #if($page4.selected) class="selected" #end><a href="${context}/history?page=${page4.page}&size=${page4.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page4.page}</a></li>
- <li id="page5" #if($page5.selected) class="selected" #end><a href="${context}/history?page=${page5.page}&size=${page5.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page5.page}</a></li>
- <li id="next"><a href="${context}/history?page=${next.page}&size=${next.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">Next<span class="arrow">→</span></a></li>
- #else
- <li id="previous" class="first"><a href="${context}/history?page=${previous.page}&size=${previous.size}"><span class="arrow">←</span>Previous</a></li>
- <li id="page1" #if($page1.selected) class="selected" #end><a href="${context}/history?page=${page1.page}&size=${page1.size}">${page1.page}</a></li>
- <li id="page2" #if($page2.selected) class="selected" #end><a href="${context}/history?page=${page2.page}&size=${page2.size}">${page2.page}</a></li>
- <li id="page3" #if($page3.selected) class="selected" #end><a href="${context}/history?page=${page3.page}&size=${page3.size}">${page3.page}</a></li>
- <li id="page4" #if($page4.selected) class="selected" #end><a href="${context}/history?page=${page4.page}&size=${page4.size}">${page4.page}</a></li>
- <li id="page5" #if($page5.selected) class="selected" #end><a href="${context}/history?page=${page5.page}&size=${page5.size}">${page5.page}</a></li>
- <li id="next"><a href="${context}/history?page=${next.page}&size=${next.size}">Next<span class="arrow">→</span></a></li>
- #end
- </ul>
- </div><!-- /col-xs-12 -->
- </div><!-- /row -->
+ #end
+ #else
+ <tr>
+ <td class="last" colspan="9">No History Results Found</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ <ul class="pagination" id="pageSelection">
+ #if ($search)
+ <li id="previous" class="first"><a
+ href="${context}/history?page=${previous.page}&size=${previous.size}&search=true&searchterm=$esc.html(${search_term})"><span
+ class="arrow">←</span>Previous</a></li>
+ <li id="page1" #if($page1.selected) class="selected" #end><a
+ href="${context}/history?page=${page1.page}&size=${page1.size}&search=true&searchterm=$esc.html(${search_term})">${page1.page}</a>
+ </li>
+ <li id="page2" #if($page2.selected) class="selected" #end><a
+ href="${context}/history?page=${page2.page}&size=${page2.size}&search=true&searchterm=$esc.html(${search_term})">${page2.page}</a>
+ </li>
+ <li id="page3" #if($page3.selected) class="selected" #end><a
+ href="${context}/history?page=${page3.page}&size=${page3.size}&search=true&searchterm=$esc.html(${search_term})">${page3.page}</a>
+ </li>
+ <li id="page4" #if($page4.selected) class="selected" #end><a
+ href="${context}/history?page=${page4.page}&size=${page4.size}&search=true&searchterm=$esc.html(${search_term})">${page4.page}</a>
+ </li>
+ <li id="page5" #if($page5.selected) class="selected" #end><a
+ href="${context}/history?page=${page5.page}&size=${page5.size}&search=true&searchterm=$esc.html(${search_term})">${page5.page}</a>
+ </li>
+ <li id="next"><a
+ href="${context}/history?page=${next.page}&size=${next.size}&search=true&searchterm=$esc.html(${search_term})">Next<span
+ class="arrow">→</span></a></li>
+ #elseif($advfilter)
+ <li id="previous" class="first"><a
+ href="${context}/history?page=${previous.page}&size=${previous.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}"><span
+ class="arrow">←</span>Previous</a></li>
+ <li id="page1" #if($page1.selected) class="selected" #end><a
+ href="${context}/history?page=${page1.page}&size=${page1.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page1.page}</a>
+ </li>
+ <li id="page2" #if($page2.selected) class="selected" #end><a
+ href="${context}/history?page=${page2.page}&size=${page2.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page2.page}</a>
+ </li>
+ <li id="page3" #if($page3.selected) class="selected" #end><a
+ href="${context}/history?page=${page3.page}&size=${page3.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page3.page}</a>
+ </li>
+ <li id="page4" #if($page4.selected) class="selected" #end><a
+ href="${context}/history?page=${page4.page}&size=${page4.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page4.page}</a>
+ </li>
+ <li id="page5" #if($page5.selected) class="selected" #end><a
+ href="${context}/history?page=${page5.page}&size=${page5.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">${page5.page}</a>
+ </li>
+ <li id="next"><a
+ href="${context}/history?page=${next.page}&size=${next.size}&advfilter=true&projcontain=${projcontain}&flowcontain=${flowcontain}&usercontain=${usercontain}&status=${status}&begin=${begin}&end=${end}">Next<span
+ class="arrow">→</span></a></li>
+ #else
+ <li id="previous" class="first"><a
+ href="${context}/history?page=${previous.page}&size=${previous.size}"><span
+ class="arrow">←</span>Previous</a></li>
+ <li id="page1" #if($page1.selected) class="selected" #end><a
+ href="${context}/history?page=${page1.page}&size=${page1.size}">${page1.page}</a>
+ </li>
+ <li id="page2" #if($page2.selected) class="selected" #end><a
+ href="${context}/history?page=${page2.page}&size=${page2.size}">${page2.page}</a>
+ </li>
+ <li id="page3" #if($page3.selected) class="selected" #end><a
+ href="${context}/history?page=${page3.page}&size=${page3.size}">${page3.page}</a>
+ </li>
+ <li id="page4" #if($page4.selected) class="selected" #end><a
+ href="${context}/history?page=${page4.page}&size=${page4.size}">${page4.page}</a>
+ </li>
+ <li id="page5" #if($page5.selected) class="selected" #end><a
+ href="${context}/history?page=${page5.page}&size=${page5.size}">${page5.page}</a>
+ </li>
+ <li id="next"><a href="${context}/history?page=${next.page}&size=${next.size}">Next<span
+ class="arrow">→</span></a></li>
+ #end
+ </ul>
+ </div><!-- /col-xs-12 -->
+ </div><!-- /row -->
## Advanced Filter Modal.
- <div class="modal" id="adv-filter">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Advanced Filter</h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-danger" id="adv-filter-error-msg">$error_msg</div>
- <fieldset class="form-horizontal">
- <div class="form-group">
- <label for="projcontain" class="col-sm-2 control-label">Project</label>
- <div class="col-sm-10">
- <input id="projcontain" type="text" placeholder="Project name containing ..." value="" class="form-control" name="projcontain">
- </div>
+ <div class="modal" id="adv-filter">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Advanced Filter</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="adv-filter-error-msg">$error_msg</div>
+ <fieldset class="form-horizontal">
+ <div class="form-group">
+ <label for="projcontain" class="col-sm-2 control-label">Project</label>
+ <div class="col-sm-10">
+ <input id="projcontain" type="text" placeholder="Project name containing ..."
+ value="" class="form-control" name="projcontain">
</div>
- <div class="form-group">
- <label for="flowcontain" class="col-sm-2 control-label">Flow</label>
- <div class="col-sm-10">
- <input id="flowcontain" type="text" placeholder="Flow name containing ..." value="" class="form-control" name="flowcontain">
- </div>
+ </div>
+ <div class="form-group">
+ <label for="flowcontain" class="col-sm-2 control-label">Flow</label>
+ <div class="col-sm-10">
+ <input id="flowcontain" type="text" placeholder="Flow name containing ..."
+ value="" class="form-control" name="flowcontain">
</div>
- <div class="form-group">
- <label for="usercontain" class="col-sm-2 control-label">User</label>
- <div class="col-sm-10">
- <input id="usercontain" type="text" placeholder="User name containing ..." value="" class="form-control" name="usercontain">
- </div>
+ </div>
+ <div class="form-group">
+ <label for="usercontain" class="col-sm-2 control-label">User</label>
+ <div class="col-sm-10">
+ <input id="usercontain" type="text" placeholder="User name containing ..."
+ value="" class="form-control" name="usercontain">
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="status" class="col-sm-2 control-label">Status</label>
+ <div class="col-sm-10">
+ <select id="status" class="form-control">
+ <option value=0>All Status</option>
+ <option value=10>Ready</option>
+ <option value=20>Preparing</option>
+ <option value=30>Running</option>
+ <option value=40>Paused</option>
+ <option value=50>Succeed</option>
+ <option value=60>Killed</option>
+ <option value=70>Failed</option>
+ <option value=80>Failed Finishing</option>
+ <option value=90>Skipped</option>
+ <option value=100>Disabled</option>
+ <option value=110>Queued</option>
+ </select>
</div>
- <div class="form-group">
- <label for="status" class="col-sm-2 control-label">Status</label>
- <div class="col-sm-10">
- <select id="status" class="form-control">
- <option value=0>All Status</option>
- <option value=10>Ready</option>
- <option value=20>Preparing</option>
- <option value=30>Running</option>
- <option value=40>Paused</option>
- <option value=50>Succeed</option>
- <option value=60>Killed</option>
- <option value=70>Failed</option>
- <option value=80>Failed Finishing</option>
- <option value=90>Skipped</option>
- <option value=100>Disabled</option>
- <option value=110>Queued</option>
- </select>
- </div>
+ </div>
+ <div class="form-group">
+ <label for="datetimebegin" class="col-sm-2 control-label">Between</label>
+ <div class="col-sm-4">
+ <input type="text" id="datetimebegin" value=""
+ class="ui-datetime-container form-control">
</div>
- <div class="form-group">
- <label for="datetimebegin" class="col-sm-2 control-label">Between</label>
- <div class="col-sm-4">
- <input type="text" id="datetimebegin" value="" class="ui-datetime-container form-control">
- </div>
- <label for="datetimeend" class="col-sm-2 control-label control-label-center">and</label>
- <div class="col-sm-4">
- <input type="text" id="datetimeend" value="" class="ui-datetime-container form-control">
- </div>
+ <label for="datetimeend"
+ class="col-sm-2 control-label control-label-center">and</label>
+ <div class="col-sm-4">
+ <input type="text" id="datetimeend" value=""
+ class="ui-datetime-container form-control">
</div>
- </fieldset>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button class="btn btn-success" id="filter-btn">Filter</button>
- </div>
+ </div>
+ </fieldset>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button class="btn btn-success" id="filter-btn">Filter</button>
</div>
</div>
</div>
+ </div>
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- </div><!-- /container-full -->
-#end
- </body>
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ </div><!-- /container-full -->
+ #end
+</body>
<html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/index.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/index.vm
index e1831a3..f48f2f7 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/index.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/index.vm
@@ -16,89 +16,100 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/main.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
- </script>
- </head>
- <body>
+ <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/main.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+ </script>
+</head>
+<body>
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
## Page Header and project search form.
- <div class="az-page-header">
- <div class="container-full">
- <div class="row">
- <div class="header-title">
- <h1><a href="${context}/index">Projects</a></h1>
- </div>
- <div class="header-control">
- <form id="search-form" method="get" class="form-inline header-form" role="form">
- <input type="hidden" name="doaction" value="search">
-#if ($viewProjects == 'all')
- <input type="hidden" name="all" value="true">
-#end
- <div class="form-group col-xs-9">
- <div class="input-group">
- <input id="search-textbox" type="text" placeholder="Project name containing..." value=#if($search_term) "$esc.html(${search_term})" #else "" #end class="form-control input-sm" name="searchterm">
- <span class="input-group-btn">
+<div class="az-page-header">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title">
+ <h1><a href="${context}/index">Projects</a></h1>
+ </div>
+ <div class="header-control">
+ <form id="search-form" method="get" class="form-inline header-form" role="form">
+ <input type="hidden" name="doaction" value="search">
+ #if ($viewProjects == 'all')
+ <input type="hidden" name="all" value="true">
+ #end
+ <div class="form-group col-xs-9">
+ <div class="input-group">
+ <input id="search-textbox" type="text"
+ placeholder="Project name containing..." value=#if($search_term) "$esc.html(${search_term})" #else
+ "" #end class="form-control input-sm" name="searchterm">
+ <span class="input-group-btn">
<button class="btn btn-sm btn-primary">Quick Search</button>
</span>
- </div>
- </div>
-#if (!$hideCreateProject)
- <div class="form-group col-xs-3" id="create-project">
-## Note: The Create Project button is not completely flush to the right because
-## form-group has padding.
- <div class="pull-right">
- <button type="button" id="create-project-btn" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus"></span> Create Project</button>
- </div>
- </div>
-#end
- </form>
+ </div>
</div>
- </div>
+ #if (!$hideCreateProject)
+ <div class="form-group col-xs-3" id="create-project">
+ ## Note: The Create Project button is not completely flush to the right because
+ ## form-group has padding.
+ <div class="pull-right">
+ <button type="button" id="create-project-btn" class="btn btn-sm btn-success"><span
+ class="glyphicon glyphicon-plus"></span> Create Project
+ </button>
+ </div>
+ </div>
+ #end
+ </form>
</div>
</div>
+ </div>
+</div>
- <div class="container-full">
+<div class="container-full">
-#parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Table of projects.
- <div class="row row-offcanvas row-offcanvas-left">
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- <ul class="nav nav-pills nav-stacked">
- <li#if ($viewProjects == 'personal') class="active"#end><a href="${context}/index">Personal</a></li>
- <li#if ($viewProjects == 'group') class="active"#end><a href="${context}/index?group">Group</a></li>
- <li#if ($viewProjects == 'all') class="active"#end><a href="${context}/index?all">All</a></li>
- </ul>
- </div>
- <div class="col-xs-12 col-sm-9 col-content">
-#if (!$projects.isEmpty())
- <ul id="project-list">
- #foreach ($project in $projects)
+ <div class="row row-offcanvas row-offcanvas-left">
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ <ul class="nav nav-pills nav-stacked">
+ <li#if ($viewProjects == 'personal') class="active"#end><a
+ href="${context}/index">Personal</a></li>
+ <li#if ($viewProjects == 'group') class="active"#end><a
+ href="${context}/index?group">Group</a></li>
+ <li#if ($viewProjects == 'all') class="active"#end><a href="${context}/index?all">All</a>
+ </li>
+ </ul>
+ </div>
+ <div class="col-xs-12 col-sm-9 col-content">
+ #if (!$projects.isEmpty())
+ <ul id="project-list">
+ #foreach ($project in $projects)
<li>
<div class="project-info">
- ## The UI logic elsewhere enforces that $project.name must start with a letter, followed by any number
- ## of letters, digits, '-' or '_'. Escape it just to play it safe.
- ## todo: make escaping the default.
- <h4><a href="${context}/manager?project=${project.name}">$esc.html($project.name)</a></h4>
+ ## The UI logic elsewhere enforces that $project.name must start with a letter, followed by any number
+ ## of letters, digits, '-' or '_'. Escape it just to play it safe.
+ ## todo: make escaping the default.
+ <h4><a
+ href="${context}/manager?project=${project.name}">$esc.html($project.name)</a>
+ </h4>
<p class="project-description">$esc.html($project.description)</p>
- <p class="project-last-modified">Last modified on <strong>$utils.formatDate($project.lastModifiedTimestamp)</strong> by <strong>$project.lastModifiedUser</strong>.</p>
+ <p class="project-last-modified">Last modified on
+ <strong>$utils.formatDate($project.lastModifiedTimestamp)</strong> by
+ <strong>$project.lastModifiedUser</strong>.</p>
</div>
<div class="project-expander" id="${project.name}">
<span class="glyphicon glyphicon-chevron-down project-expander-icon"></span>
@@ -110,56 +121,59 @@
</div>
</div>
</li>
- #end
- </ul>
-#else
- <div class="callout callout-default">
- <h4>No Viewable Projects</h4>
- <p>Click Create Project to create a new project.</p>
- </div>
-#end
+ #end
+ </ul>
+ #else
+ <div class="callout callout-default">
+ <h4>No Viewable Projects</h4>
+ <p>Click Create Project to create a new project.</p>
</div>
- </div>
+ #end
+ </div>
+ </div>
## Modal dialog to be displayed to create a new project.
- <div class="modal" id="create-project-modal">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Create Project</h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-danger" id="modal-error-msg">$error_msg</div>
- <fieldset class="form-horizontal">
- <div class="form-group">
- <label for="path" class="col-sm-2 control-label">Name</label>
- <div class="col-sm-10">
- <input id="path" name="project" type="text" class="form-control" placeholder="Project name">
- </div>
- </div>
- <div class="form-group">
- <label for="description" class="col-sm-2 control-label">Description</label>
- <div class="col-sm-10">
- <textarea id="description" name="description" rows="2" cols="40" class="form-control" placeholder="Project description"></textarea>
- </div>
- </div>
- </fieldset>
+ <div class="modal" id="create-project-modal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Create Project</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="modal-error-msg">$error_msg</div>
+ <fieldset class="form-horizontal">
+ <div class="form-group">
+ <label for="path" class="col-sm-2 control-label">Name</label>
+ <div class="col-sm-10">
+ <input id="path" name="project" type="text" class="form-control"
+ placeholder="Project name">
+ </div>
</div>
- <div class="modal-footer">
- <input name="action" type="hidden" value="create">
- <input name="redirect" type="hidden" value="$!context/">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="create-btn">Create Project</button>
+ <div class="form-group">
+ <label for="description" class="col-sm-2 control-label">Description</label>
+ <div class="col-sm-10">
+ <textarea id="description" name="description" rows="2" cols="40"
+ class="form-control" placeholder="Project description"></textarea>
+ </div>
</div>
- </div>
+ </fieldset>
+ </div>
+ <div class="modal-footer">
+ <input name="action" type="hidden" value="create">
+ <input name="redirect" type="hidden" value="$!context/">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="create-btn">Create Project</button>
</div>
</div>
+ </div>
+ </div>
-#parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- </div><!-- /container -->
- </body>
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+</div><!-- /container -->
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/invalidsessionmodal.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/invalidsessionmodal.vm
index b405d80..bac0169 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/invalidsessionmodal.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/invalidsessionmodal.vm
@@ -14,21 +14,21 @@
* the License.
*#
- ## Modal dialog to be displayed when the user sesion is invalid.
+## Modal dialog to be displayed when the user sesion is invalid.
- <div class="modal" id="invalid-session-modal">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Invalid Session</h4>
- </div>
- <div class="modal-body">
- <p>Session has expired. Please re-login.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary" id="login-btn">Re-login</button>
- </div>
- </div>
- </div>
+<div class="modal" id="invalid-session-modal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title">Invalid Session</h4>
</div>
+ <div class="modal-body">
+ <p>Session has expired. Please re-login.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary" id="login-btn">Re-login</button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/javascript.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/javascript.vm
index c8576f8..66c21f0 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/javascript.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/javascript.vm
@@ -14,8 +14,8 @@
* the License.
*#
- <script type="text/javascript" src="${context}/js/jquery/jquery-1.9.1.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap.min.js"></script>
- <script type="text/javascript" src="${context}/js/underscore-1.4.4-min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/namespace.js"></script>
- <script type="text/javascript" src="${context}/js/backbone-0.9.10-min.js"></script>
+<script type="text/javascript" src="${context}/js/jquery/jquery-1.9.1.js"></script>
+<script type="text/javascript" src="${context}/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="${context}/js/underscore-1.4.4-min.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/namespace.js"></script>
+<script type="text/javascript" src="${context}/js/backbone-0.9.10-min.js"></script>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jmxpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jmxpage.vm
index 16d1d3b..8ef8a70 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jmxpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jmxpage.vm
@@ -16,71 +16,77 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
-
- <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/jmx.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
- </script>
- </head>
- <body>
-
-#set ($current_page="all")
-#set ($counter = 0)
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
-
- <div class="az-page-header">
- <div class="container-full">
- <h1>Admin JMX Http Page</h1>
- </div>
+<head>
+
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+
+ <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/jmx.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+ </script>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #set ($counter = 0)
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
+
+ <div class="az-page-header">
+ <div class="container-full">
+ <h1>Admin JMX Http Page</h1>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
## Web Client JMX
- <div class="row">
- <div class="col-xs-12">
- <div class="panel panel-default">
- <div class="panel-heading">Web Client JMX</div>
- <table id="all-jmx" class="table table-condensed table-bordered table-striped table-hover">
- <thead>
- <tr>
- <th>Name</th>
- <th>Domain</th>
- <th>Canonical Name</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- #foreach ($bean in $mbeans)
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="panel panel-default">
+ <div class="panel-heading">Web Client JMX</div>
+ <table id="all-jmx"
+ class="table table-condensed table-bordered table-striped table-hover">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Domain</th>
+ <th>Canonical Name</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ #foreach ($bean in $mbeans)
<tr>
<td>${bean.keyPropertyList.get("name")}</td>
<td>${bean.domain}</td>
<td>${bean.canonicalName}</td>
- <td><button type="button" class="btn btn-default btn-sm query-btn" id="expandBtn-$counter" domain="${bean.domain}" name="${bean.keyPropertyList.get("name")}">Query</button></td>
+ <td>
+ <button type="button" class="btn btn-default btn-sm query-btn"
+ id="expandBtn-$counter" domain="${bean.domain}"
+ name="${bean.keyPropertyList.get("name")}">Query
+ </button>
+ </td>
</tr>
- <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
+ <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
<td class="expandedFlow" colspan="3">
<table class="table table-condensed table-bordered table-striped table-hover">
<thead>
- <tr>
- <th>Attribute Name</th>
- <th>Value</th>
- </tr>
+ <tr>
+ <th>Attribute Name</th>
+ <th>Value</th>
+ </tr>
</thead>
<tbody id="expandBtn-${counter}-tbody">
</tbody>
@@ -88,48 +94,55 @@
</td>
<td>
- <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse</button>
+ <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse
+ </button>
</td>
</tr>
- #set ($counter = $counter + 1)
- #end
- </tbody>
- </table>
+ #set ($counter = $counter + 1)
+ #end
+ </tbody>
+ </table>
- </div>
</div>
</div>
+ </div>
- #foreach ($executor in $executorRemoteMBeans.entrySet())
+ #foreach ($executor in $executorRemoteMBeans.entrySet())
<div class="row">
<div class="col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">Remote Executor JMX $executor.key</div>
<table class="remoteJMX table table-striped table-condensed table-bordered table-hover">
<thead>
- <tr>
- <th>Name</th>
- <th>Domain</th>
- <th>Canonical Name</th>
- <th></th>
- </tr>
+ <tr>
+ <th>Name</th>
+ <th>Domain</th>
+ <th>Canonical Name</th>
+ <th></th>
+ </tr>
</thead>
<tbody>
- #foreach ($bean in $executor.value)
+ #foreach ($bean in $executor.value)
<tr>
<td>${bean.get("keyPropertyList").get("name")}</td>
<td>${bean.get("domain")}</td>
<td>${bean.get("canonicalName")}</td>
- <td><button type="button" class="btn btn-default btn-sm query-btn" id="expandBtn-$counter" domain="${bean.get("domain")}" name="${bean.get("keyPropertyList").get("name")}" hostport="$executor.key">Query</button></td>
+ <td>
+ <button type="button" class="btn btn-default btn-sm query-btn"
+ id="expandBtn-$counter" domain="${bean.get("domain")}"
+ name="${bean.get("keyPropertyList").get("name")}"
+ hostport="$executor.key">Query
+ </button>
+ </td>
</tr>
- <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
+ <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
<td class="expandedFlow" colspan="3">
<table class="table table-striped table-condensed table-bordered table-hover">
<thead>
- <tr>
- <th>Attribute Name</th>
- <th>Value</th>
- </tr>
+ <tr>
+ <th>Attribute Name</th>
+ <th>Value</th>
+ </tr>
</thead>
<tbody id="expandBtn-${counter}-tbody">
</tbody>
@@ -137,48 +150,55 @@
</td>
<td>
- <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse</button>
+ <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse
+ </button>
</td>
- </tr>
- #set ($counter = $counter + 1)
- #end
+ </tr>
+ #set ($counter = $counter + 1)
+ #end
</tbody>
</table>
</div>
</div>
</div>
- #end
+ #end
- #foreach ($triggerserver in $triggerserverRemoteMBeans.entrySet())
+ #foreach ($triggerserver in $triggerserverRemoteMBeans.entrySet())
<div class="row">
<div class="col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">Remote Trigger Server JMX $triggerserver.key</div>
<table class="remoteJMX table table-condensed table-striped table-bordered table-hover">
<thead>
- <tr>
- <th>Name</th>
- <th>Domain</th>
- <th>Canonical Name</th>
- <th></th>
- </tr>
+ <tr>
+ <th>Name</th>
+ <th>Domain</th>
+ <th>Canonical Name</th>
+ <th></th>
+ </tr>
</thead>
<tbody>
- #foreach ($bean in $triggerserver.value)
+ #foreach ($bean in $triggerserver.value)
<tr>
<td>${bean.get("keyPropertyList").get("name")}</td>
<td>${bean.get("domain")}</td>
<td>${bean.get("canonicalName")}</td>
- <td><button type="button" class="btn btn-default btn-sm querybtn" id="expandBtn-$counter" domain="${bean.get("domain")}" name="${bean.get("keyPropertyList").get("name")}" hostport="$triggerserver.key">Query</button></td>
+ <td>
+ <button type="button" class="btn btn-default btn-sm querybtn"
+ id="expandBtn-$counter" domain="${bean.get("domain")}"
+ name="${bean.get("keyPropertyList").get("name")}"
+ hostport="$triggerserver.key">Query
+ </button>
+ </td>
</tr>
- <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
+ <tr class="childrow" id="expandBtn-${counter}-child" style="display: none;">
<td class="expandedFlow" colspan="3">
<table class="table table-striped table-condensed table-bordered table-hover">
<thead>
- <tr>
- <th>Attribute Name</th>
- <th>Value</th>
- </tr>
+ <tr>
+ <th>Attribute Name</th>
+ <th>Value</th>
+ </tr>
</thead>
<tbody id="expandBtn-${counter}-tbody">
</tbody>
@@ -186,19 +206,20 @@
</td>
<td>
- <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse</button>
+ <button type="button" class="btn btn-default btn-sm collapse-btn">Collapse
+ </button>
</td>
- </tr>
- #set ($counter = $counter + 1)
- #end
+ </tr>
+ #set ($counter = $counter + 1)
+ #end
</tbody>
</table>
</div>
</div>
</div>
- #end
+ #end
</div>
-#end
- </body>
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailsheader.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailsheader.vm
index e637a82..801f013 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailsheader.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailsheader.vm
@@ -14,47 +14,57 @@
* the License.
*#
- ## Page header.
+## Page header.
- <div class="az-page-header page-header-bare">
- <div class="container-full">
- <div class="row">
- <div class="header-title">
- <h1><a href="${context}/executor?execid=${execid}&job=${jobid}">Job Execution <small>$jobid</small></a></h1>
- </div>
- <div class="header-control">
- <div class="pull-right header-form">
- <a href="${context}/manager?project=${projectName}&flow=${parentflowid}&job=$jobname" class="btn btn-info btn-sm">Job Properties</a>
- </div>
- </div>
- </div>
+<div class="az-page-header page-header-bare">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title">
+ <h1><a href="${context}/executor?execid=${execid}&job=${jobid}">Job Execution
+ <small>$jobid</small>
+ </a></h1>
</div>
- </div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName</a></li>
- <li><a href="${context}/manager?project=${projectName}&flow=${flowid}"><strong>Flow</strong> $flowid</a></li>
- <li><a href="${context}/executor?execid=${execid}#jobslist"><strong>Execution</strong> $execid</a></li>
- <li class="active"><strong>Job</strong> $jobid</li>
- </ol>
+ <div class="header-control">
+ <div class="pull-right header-form">
+ <a href="${context}/manager?project=${projectName}&flow=${parentflowid}&job=$jobname"
+ class="btn btn-info btn-sm">Job Properties</a>
+ </div>
</div>
</div>
+ </div>
+</div>
+<div class="page-breadcrumb">
+ <div class="container-full">
+ <ol class="breadcrumb">
+ <li><a href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName
+ </a></li>
+ <li><a
+ href="${context}/manager?project=${projectName}&flow=${flowid}"><strong>Flow</strong> $flowid
+ </a></li>
+ <li><a href="${context}/executor?execid=${execid}#jobslist"><strong>Execution</strong> $execid
+ </a></li>
+ <li class="active"><strong>Job</strong> $jobid</li>
+ </ol>
+ </div>
+</div>
- <div class="container-full">
+<div class="container-full">
#parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- ## Tabs
+## Tabs
- <ul class="nav nav-tabs nav-sm" id="headertabs">
- #if ($current_page == "executing")
- <li class="active" id="jobLogViewLink"><a href="#logs">Job Logs</a></li>
- #else
- <li id="jobLogViewLink"><a href="${context}/executor?execid=${execid}&job=${jobid}#logs">Job Logs</a></li>
- #end
- #foreach ($jobViewerPlugin in $jobViewerPlugins)
- <li#if($current_page == $jobViewerPlugin.pluginName) class="active"#end><a href="$!context/${jobViewerPlugin.pluginPath}?execid=${execid}&jobid=${jobid}">$jobViewerPlugin.pluginName</a></li>
- #end
- </ul>
- </div>
+ <ul class="nav nav-tabs nav-sm" id="headertabs">
+ #if ($current_page == "executing")
+ <li class="active" id="jobLogViewLink"><a href="#logs">Job Logs</a></li>
+ #else
+ <li id="jobLogViewLink"><a href="${context}/executor?execid=${execid}&job=${jobid}#logs">Job
+ Logs</a></li>
+ #end
+ #foreach ($jobViewerPlugin in $jobViewerPlugins)
+ <li#if($current_page == $jobViewerPlugin.pluginName) class="active"#end><a
+ href="$!context/${jobViewerPlugin.pluginPath}?execid=${execid}&jobid=${jobid}">$jobViewerPlugin.pluginName</a>
+ </li>
+ #end
+ </ul>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailspage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailspage.vm
index 0d4f35f..59cfc41 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailspage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobdetailspage.vm
@@ -16,79 +16,81 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/model/job-log.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/job-details.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
+ <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/model/job-log.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/job-details.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
- var projectName = "${projectName}";
- var flowName = "${flowid}";
- var execId = "${execid}";
- var jobId = "${jobid}";
- var attempt = ${attempt};
- </script>
- </head>
- <body>
+ var projectName = "${projectName}";
+ var flowName = "${flowid}";
+ var execId = "${execid}";
+ var jobId = "${jobid}";
+ var attempt = ${attempt};
+ </script>
+</head>
+<body>
-#set ($current_page="executing")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page="executing")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
- #parse ("azkaban/webapp/servlet/velocity/jobdetailsheader.vm")
+ #parse ("azkaban/webapp/servlet/velocity/jobdetailsheader.vm")
## Log content.
- <div class="container-full container-fill" id="jobLogView">
- <div class="row">
- <div class="col-xs-12 col-content">
- <div class="log-viewer">
- <div class="panel panel-default">
- <div class="panel-heading">
- <div class="pull-right">
- <button type="button" id="updateLogBtn" class="btn btn-xs btn-default">Refresh</button>
- </div>
- Job Logs
- </div>
- <div class="panel-body">
- <pre id="logSection"></pre>
+ <div class="container-full container-fill" id="jobLogView">
+ <div class="row">
+ <div class="col-xs-12 col-content">
+ <div class="log-viewer">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="pull-right">
+ <button type="button" id="updateLogBtn" class="btn btn-xs btn-default">Refresh
+ </button>
</div>
+ Job Logs
+ </div>
+ <div class="panel-body">
+ <pre id="logSection"></pre>
</div>
</div>
</div>
</div>
</div>
+ </div>
- ## Error message message dialog.
+ ## Error message message dialog.
- <div class="container-full">
- <div class="modal" id="messageDialog">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header" id="messageTitle">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Error</h4>
- </div>
- <div class="modal-body" id="messageDiv">
- <p id="messageBox"></p>
- </div>
+ <div class="container-full">
+ <div class="modal" id="messageDialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header" id="messageTitle">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Error</h4>
+ </div>
+ <div class="modal-body" id="messageDiv">
+ <p id="messageBox"></p>
</div>
</div>
</div>
-
</div>
-#end
- </body>
+
+ </div>
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobhistorypage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobhistorypage.vm
index 368ef8b..2377dbf 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobhistorypage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobhistorypage.vm
@@ -16,89 +16,94 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
-
- <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
- <script type="text/javascript" src="${context}/js/morris.min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/time-graph.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/job-history.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- var projectId = "$projectId";
- var projectName = "$projectName";
- var jobName = "$jobid";
- var dataSeries = $dataSeries;
- </script>
- <link rel="stylesheet" type="text/css" href="${context}/css/morris.css" />
- </head>
- <body>
-
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
+
+ <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
+ <script type="text/javascript" src="${context}/js/morris.min.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/time-graph.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/job-history.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ var projectId = "$projectId";
+ var projectName = "$projectName";
+ var jobName = "$jobid";
+ var dataSeries = $dataSeries;
+ </script>
+ <link rel="stylesheet" type="text/css" href="${context}/css/morris.css"/>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header
- <div class="az-page-header page-header-bare">
- <div class="container-full">
- <h1><a href="${context}/manager?project=${projectName}&job=${jobid}&history">Job History <small>$jobid</small></a></h1>
- </div>
+ <div class="az-page-header page-header-bare">
+ <div class="container-full">
+ <h1><a href="${context}/manager?project=${projectName}&job=${jobid}&history">Job History
+ <small>$jobid</small>
+ </a></h1>
</div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName</a></li>
- <li class="active"><strong>Job History</strong> $jobid</li>
- </ol>
- </div>
+ </div>
+ <div class="page-breadcrumb">
+ <div class="container-full">
+ <ol class="breadcrumb">
+ <li><a
+ href="${context}/manager?project=${projectName}"><strong>Project</strong> $projectName
+ </a></li>
+ <li class="active"><strong>Job History</strong> $jobid</li>
+ </ol>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Time graph and job history table.
- <div class="row">
- <div class="col-xs-12">
- <div class="well well-clear well-sm" id="timeGraph">
- </div>
-
- <table id="all-jobs" class="table table-striped table-bordered table-condensed table-hover">
- <thead>
- <tr>
- <th class="execid">Execution Id</th>
- <th class="jobid">Job</th>
- <th class="flowid">Flow</th>
- <th class="date">Start Time</th>
- <th class="date">End Time</th>
- <th class="elapse">Elapse</th>
- <th class="status">Status</th>
- <th class="logs">Logs</th>
- </tr>
- </thead>
- <tbody>
- #if ($history)
- #foreach ($job in $history)
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="well well-clear well-sm" id="timeGraph">
+ </div>
+
+ <table id="all-jobs" class="table table-striped table-bordered table-condensed table-hover">
+ <thead>
+ <tr>
+ <th class="execid">Execution Id</th>
+ <th class="jobid">Job</th>
+ <th class="flowid">Flow</th>
+ <th class="date">Start Time</th>
+ <th class="date">End Time</th>
+ <th class="elapse">Elapse</th>
+ <th class="status">Status</th>
+ <th class="logs">Logs</th>
+ </tr>
+ </thead>
+ <tbody>
+ #if ($history)
+ #foreach ($job in $history)
<tr>
<td class="first">
- #if ($job.attempt > 0)
- <a href="${context}/executor?execid=${job.execId}">${job.execId}.${job.attempt}</a>
- #else
- <a href="${context}/executor?execid=${job.execId}">${job.execId}</a>
- #end
+ #if ($job.attempt > 0)
+ <a href="${context}/executor?execid=${job.execId}">${job.execId}
+ .${job.attempt}</a>
+ #else
+ <a href="${context}/executor?execid=${job.execId}">${job.execId}</a>
+ #end
</td>
<td>
<a href="${context}/manager?project=${projectName}&flow=${job.immediateFlowId}&job=${jobid}">${jobid}</a>
@@ -118,29 +123,48 @@
<a href="${context}/executor?execid=${job.execId}&job=${job.jobIdPath}&attempt=${job.attempt}">Logs</a>
</td>
</tr>
- #end
- #else
- <tr>
- <td colspan="8">No history</td>
- </tr>
+ #end
+ #else
+ <tr>
+ <td colspan="8">No history</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+
+ <ul class="pagination" id="pageSelection">
+ <li id="previous" class="first"><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${previous.nextPage}&size=${previous.size}"><span
+ class="arrow">←</span>Previous</a></li>
+ <li id="page1" #if($page1.selected) class="active" #elseif ($page1.disabled)
+ class="disabled" #end><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page1.nextPage}&size=${page1.size}">${page1.page}</a>
+ </li>
+ <li id="page2" #if($page2.selected) class="active" #elseif ($page2.disabled)
+ class="disabled" #end><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page2.nextPage}&size=${page2.size}">${page2.page}</a>
+ </li>
+ <li id="page3" #if($page3.selected) class="active" #elseif ($page3.disabled)
+ class="disabled" #end><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page3.nextPage}&size=${page3.size}">${page3.page}</a>
+ </li>
+ <li id="page4" #if($page4.selected) class="active" #elseif ($page4.disabled)
+ class="disabled" #end><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page4.nextPage}&size=${page4.size}">${page4.page}</a>
+ </li>
+ <li id="page5" #if($page5.selected) class="active" #elseif ($page5.disabled)
+ class="disabled" #end><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page5.nextPage}&size=${page5.size}">${page5.page}</a>
+ </li>
+ <li id="next"><a
+ href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${next.nextPage}&size=${next.size}">Next<span
+ class="arrow">→</span></a></li>
+ </ul>
+
+ </div><!-- /.col-xs-12 -->
+ </div><!-- /.row -->
+
+ </div>
#end
- </tbody>
- </table>
-
- <ul class="pagination" id="pageSelection">
- <li id="previous" class="first"><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${previous.nextPage}&size=${previous.size}"><span class="arrow">←</span>Previous</a></li>
- <li id="page1" #if($page1.selected) class="active" #elseif ($page1.disabled) class="disabled" #end><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page1.nextPage}&size=${page1.size}">${page1.page}</a></li>
- <li id="page2" #if($page2.selected) class="active" #elseif ($page2.disabled) class="disabled" #end><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page2.nextPage}&size=${page2.size}">${page2.page}</a></li>
- <li id="page3" #if($page3.selected) class="active" #elseif ($page3.disabled) class="disabled" #end><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page3.nextPage}&size=${page3.size}">${page3.page}</a></li>
- <li id="page4" #if($page4.selected) class="active" #elseif ($page4.disabled) class="disabled" #end><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page4.nextPage}&size=${page4.size}">${page4.page}</a></li>
- <li id="page5" #if($page5.selected) class="active" #elseif ($page5.disabled) class="disabled" #end><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${page5.nextPage}&size=${page5.size}">${page5.page}</a></li>
- <li id="next"><a href="${context}/manager?project=${projectName}&job=${jobid}&history&page=${next.nextPage}&size=${next.size}">Next<span class="arrow">→</span></a></li>
- </ul>
-
- </div><!-- /.col-xs-12 -->
- </div><!-- /.row -->
-
- </div>
-#end
- </body>
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobpage.vm
index f975cf4..44deca2 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/jobpage.vm
@@ -16,202 +16,220 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
-
- <script type="text/javascript" src="${context}/js/azkaban/view/job-edit.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- var projectId = "$project.id";
- var projectName = "$project.name";
- </script>
- </head>
- <body>
-
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+
+ <script type="text/javascript" src="${context}/js/azkaban/view/job-edit.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ var projectId = "$project.id";
+ var projectName = "$project.name";
+ </script>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header
- <div class="az-page-header page-header-bare">
- <div class="container-full">
- <div class="row">
- <div class="header-title">
- <h1><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}">Job <small>$jobid</small></a></h1>
- </div>
- <div class="header-control">
- <div class="pull-right header-form">
- <a href="${context}/manager?project=${project.name}&job=$jobid&history" class="btn btn-info btn-sm">History</a>
- </div>
- <div class="clearfix"></div>
+ <div class="az-page-header page-header-bare">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title">
+ <h1><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}">Job
+ <small>$jobid</small>
+ </a></h1>
+ </div>
+ <div class="header-control">
+ <div class="pull-right header-form">
+ <a href="${context}/manager?project=${project.name}&job=$jobid&history"
+ class="btn btn-info btn-sm">History</a>
</div>
+ <div class="clearfix"></div>
</div>
</div>
</div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name</a></li>
- <li><a href="${context}/manager?project=${project.name}&flow=${flowid}"><strong>Flow</strong> $flowid</a></li>
- <li class="active"><strong>Job</strong> $jobid</li>
- </ol>
- </div>
+ </div>
+ <div class="page-breadcrumb">
+ <div class="container-full">
+ <ol class="breadcrumb">
+ <li><a
+ href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name
+ </a></li>
+ <li><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}"><strong>Flow</strong> $flowid
+ </a></li>
+ <li class="active"><strong>Job</strong> $jobid</li>
+ </ol>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row row-offcanvas row-offcanvas-right">
- <div class="col-xs-12 col-sm-9">
+ <div class="row row-offcanvas row-offcanvas-right">
+ <div class="col-xs-12 col-sm-9">
- ## Job details table
+ ## Job details table
- <div class="panel panel-default">
- <div class="panel-heading">
- <div class="pull-right">
- <button id="edit-job-btn" class="btn btn-xs btn-primary" onclick='jobEditView.show("${project.name}", "${flowid}", "${jobid}")'>Edit</button>
- </div>
- Job Properties
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="pull-right">
+ <button id="edit-job-btn" class="btn btn-xs btn-primary"
+ onclick='jobEditView.show("${project.name}", "${flowid}", "${jobid}")'>Edit
+ </button>
</div>
-
- <table class="table table-striped table-bordered properties-table">
- <thead>
- <tr>
- <th class="tb-pname">Parameter Name</th>
- <th class="tb-pvalue">Value</th>
- </tr>
- </thead>
- <tbody>
- #foreach ($parameter in $parameters)
- <tr>
- <td class="property-key">$parameter.first</td>
- <td>$parameter.second</td>
- </tr>
- #end
- </tbody>
- </table>
- </div>
- </div><!-- /col-xs-8 -->
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- <div class="well" id="job-summary">
- <h3>Job <small>$jobid</small></h3>
- <p><strong>Job Type</strong> $jobtype</p>
+ Job Properties
</div>
- ## Dependencies
-
- <div class="panel panel-default">
- <div class="panel-heading">Dependencies</div>
- <ul class="list-group">
- #if ($dependencies)
- #foreach($dependency in $dependencies)
- <li class="list-group-item">
- <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=$dependency">$dependency</a>
- </li>
- #end
- #else
+ <table class="table table-striped table-bordered properties-table">
+ <thead>
+ <tr>
+ <th class="tb-pname">Parameter Name</th>
+ <th class="tb-pvalue">Value</th>
+ </tr>
+ </thead>
+ <tbody>
+ #foreach ($parameter in $parameters)
+ <tr>
+ <td class="property-key">$parameter.first</td>
+ <td>$parameter.second</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ </div>
+ </div><!-- /col-xs-8 -->
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ <div class="well" id="job-summary">
+ <h3>Job
+ <small>$jobid</small>
+ </h3>
+ <p><strong>Job Type</strong> $jobtype</p>
+ </div>
+
+ ## Dependencies
+
+ <div class="panel panel-default">
+ <div class="panel-heading">Dependencies</div>
+ <ul class="list-group">
+ #if ($dependencies)
+ #foreach($dependency in $dependencies)
+ <li class="list-group-item">
+ <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=$dependency">$dependency</a>
+ </li>
+ #end
+ #else
<li class="list-group-item">No Dependencies</li>
- #end
- </ul>
- </div><!-- /panel -->
-
- ## Dependents
-
- <div class="panel panel-default">
- <div class="panel-heading">Dependents</div>
- <ul class="list-group">
- #if ($dependents)
- #foreach($dependent in $dependents)
- <li class="list-group-item">
- <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=$dependent">$dependent</a>
- </li>
- #end
- #else
+ #end
+ </ul>
+ </div><!-- /panel -->
+
+ ## Dependents
+
+ <div class="panel panel-default">
+ <div class="panel-heading">Dependents</div>
+ <ul class="list-group">
+ #if ($dependents)
+ #foreach($dependent in $dependents)
+ <li class="list-group-item">
+ <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=$dependent">$dependent</a>
+ </li>
+ #end
+ #else
<li class="list-group-item">No Dependencies</li>
- #end
-
- </ul>
- </div><!-- /panel -->
-
- <div class="panel panel-default">
- <div class="panel-heading">Properties</div>
- <ul class="list-group">
- #if ($properties)
- #foreach($property in $properties)
- <li class="list-group-item">
- <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$property">$property</a>
- </li>
- #end
- #else
+ #end
+
+ </ul>
+ </div><!-- /panel -->
+
+ <div class="panel panel-default">
+ <div class="panel-heading">Properties</div>
+ <ul class="list-group">
+ #if ($properties)
+ #foreach($property in $properties)
+ <li class="list-group-item">
+ <a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$property">$property</a>
+ </li>
+ #end
+ #else
<li class="list-group-item">No Property Files For This Job</li>
- #end
- </ul>
- </div><!-- /panel -->
- </div><!-- /col-xs-4 -->
- </div><!-- /row -->
-
-## Edit job modal.
-
- <div class="modal modal-wide" id="job-edit-pane">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true" id="close-btn">×</button>
- <h4 class="modal-title">Edit Job</h4>
- </div>
- <div class="modal-body">
- <h4>Job Essentials</h4>
- <table class="table table-bordered table-condensed">
- <tbody>
- <tr>
- <td class="property-key">Job Name</td>
- <td id="jobName"></td>
- </tr>
- <tr>
- <td class="property-key">Job Type</td>
- <td id="jobType"></td>
- </tr>
- </tbody>
+ #end
+ </ul>
+ </div><!-- /panel -->
+ </div><!-- /col-xs-4 -->
+ </div><!-- /row -->
+
+ ## Edit job modal.
+
+ <div class="modal modal-wide" id="job-edit-pane">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true"
+ id="close-btn">×
+ </button>
+ <h4 class="modal-title">Edit Job</h4>
+ </div>
+ <div class="modal-body">
+ <h4>Job Essentials</h4>
+ <table class="table table-bordered table-condensed">
+ <tbody>
+ <tr>
+ <td class="property-key">Job Name</td>
+ <td id="jobName"></td>
+ </tr>
+ <tr>
+ <td class="property-key">Job Type</td>
+ <td id="jobType"></td>
+ </tr>
+ </tbody>
<table>
- <h4>General Job Settings</h4>
- <p><strong>Be Aware:</strong> A job may be shared by multiple flows. The change will be global!</p>
- <table id="generalProps" class="table table-striped table-bordered">
- <thead>
+ <h4>General Job Settings</h4>
+ <p><strong>Be Aware:</strong> A job may be shared by multiple flows. The change will
+ be global!</p>
+ <table id="generalProps" class="table table-striped table-bordered">
+ <thead>
<tr>
<th class="property-key">Name</th>
<th>Value</th>
</tr>
- </thead>
- <tbody>
+ </thead>
+ <tbody>
<tr id="addRow">
<td id="addRow-col" colspan="2">
- <button type="button" class="btn btn-xs btn-success" id="add-btn">Add Row</button>
+ <button type="button" class="btn btn-xs btn-success" id="add-btn">Add Row
+ </button>
</td>
</tr>
- </tbody>
- </table>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" id="cancel-btn" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="set-btn">Set/Change Job Description</button>
- </div>
+ </tbody>
+ </table>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" id="cancel-btn" data-dismiss="modal">
+ Cancel
+ </button>
+ <button type="button" class="btn btn-primary" id="set-btn">Set/Change Job Description
+ </button>
</div>
</div>
</div>
+ </div>
- </div><!-- /container-full -->
-#end
- </body>
+ </div><!-- /container-full -->
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/login.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/login.vm
index 36bc31b..f6aba36 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/login.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/login.vm
@@ -16,38 +16,41 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript" src="${context}/js/azkaban/view/login.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- </script>
- </head>
- <body>
+ <script type="text/javascript" src="${context}/js/azkaban/view/login.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ </script>
+</head>
+<body>
-#set ($current_page = "all")
-#set ($navbar_disabled = 1)
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page = "all")
+ #set ($navbar_disabled = 1)
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
- <div class="container-full">
- <div class="login">
- <div class="alert alert-danger" id="error-msg"></div>
- <div class="well">
- <form id="login-form" role="form">
- <fieldset>
- <legend>Login</legend>
- <input type="text" class="form-control" name="username" id="username" placeholder="Username">
- <input type="password" class="form-control" name="password" id="password" placeholder="${passwordPlaceholder}">
- <button type="button" class="btn btn-primary btn-lg btn-block" id="login-submit">Login</button>
- </fieldset>
- </form>
- </div><!-- /.well -->
- </div><!-- /.login -->
+<div class="container-full">
+ <div class="login">
+ <div class="alert alert-danger" id="error-msg"></div>
+ <div class="well">
+ <form id="login-form" role="form">
+ <fieldset>
+ <legend>Login</legend>
+ <input type="text" class="form-control" name="username" id="username"
+ placeholder="Username">
+ <input type="password" class="form-control" name="password" id="password"
+ placeholder="${passwordPlaceholder}">
+ <button type="button" class="btn btn-primary btn-lg btn-block" id="login-submit">Login
+ </button>
+ </fieldset>
+ </form>
+ </div><!-- /.well -->
+ </div><!-- /.login -->
- </div><!-- /container -->
- </body>
+</div><!-- /container -->
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/macros.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/macros.vm
index 248dd75..1642a65 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/macros.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/macros.vm
@@ -15,5 +15,5 @@
*#
#macro(appname)
- Azkaban Web Client
+Azkaban Web Client
#end
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/messagedialog.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/messagedialog.vm
index 6c73546..44155b3 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/messagedialog.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/messagedialog.vm
@@ -14,21 +14,22 @@
* the License.
*#
- <script type="text/javascript" src="${context}/js/azkaban/view/message-dialog.js?version=20161031"></script>
+<script type="text/javascript"
+ src="${context}/js/azkaban/view/message-dialog.js?version=20161031"></script>
- <div class="modal" id="azkaban-message-dialog">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title" id="azkaban-message-dialog-title"></h4>
- </div><!-- /modal-header -->
- <div class="modal-body">
- <p id="azkaban-message-dialog-text"></p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary" data-dismiss="modal">Continue</button>
- </div>
- </div>
- </div>
+<div class="modal" id="azkaban-message-dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title" id="azkaban-message-dialog-title"></h4>
+ </div><!-- /modal-header -->
+ <div class="modal-body">
+ <p id="azkaban-message-dialog-text"></p>
</div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary" data-dismiss="modal">Continue</button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/nav.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/nav.vm
index 5881745..a7609a0 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/nav.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/nav.vm
@@ -38,25 +38,30 @@
window.location.href = url;
}
- $(function(){
+ $(function () {
- if( $("#banner").data("id").indexOf('$') == -1 && $('#banner').is(':empty') == false) {
+ if ($("#banner").data("id").indexOf('$') == -1 && $('#banner').is(':empty') == false) {
$('#banner').attr('Target', '_blank');
- $("#banner").on("click", function(){
+ $("#banner").on("click", function () {
window.open($("#banner").data("url"));
});
- $("#banner").slideDown(function() {
- if($("#banner").data("id") == "Warning") {
- $('#bannerText').append('<img ' + 'src=' + '"images/warning.png"' + ' width="50" height="50" ' + ' style=' + '"display:inline;" >' + ' </img>');
- $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("message") + '</span>');
+ $("#banner").slideDown(function () {
+ if ($("#banner").data("id") == "Warning") {
+ $('#bannerText').append('<img ' + 'src=' + '"images/warning.png"'
+ + ' width="50" height="50" ' + ' style=' + '"display:inline;" >' + ' </img>');
+ $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("message")
+ + '</span>');
} else if ($("#banner").data("id") == "Action Required") {
- $('#bannerText').append('<img ' + 'src=' + '"images/warning.png"' + ' width="50" height="50" ' + ' style=' + '"display:inline;" >' + ' </img>');
- $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("id") + ": " + '</span>');
- $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("message") + '</span>');
+ $('#bannerText').append('<img ' + 'src=' + '"images/warning.png"'
+ + ' width="50" height="50" ' + ' style=' + '"display:inline;" >' + ' </img>');
+ $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("id")
+ + ": " + '</span>');
+ $('#bannerText').append('<span style="font-size: 150%;" >' + $("#banner").data("message")
+ + '</span>');
}
// The banner will side up after 30 seconds
- setTimeout(function() {
+ setTimeout(function () {
$("#banner").slideUp();
}, 30000);
});
@@ -64,64 +69,68 @@
});
</script>
-<div id='banner' data-id="$note_type" data-message="$note_message" data-url="$note_url" >
- <div id="bannerText">
- </div>
+<div id='banner' data-id="$note_type" data-message="$note_message" data-url="$note_url">
+ <div id="bannerText">
+ </div>
</div>
<div class="navbar navbar-inverse navbar-static-top">
- <div class="container-full">
- <div class="navbar-header">
- <div class="navbar-logo">
- <a href="${context}/">Azkaban</a>
- <div class="navbar-version">
- ${version}
- </div>
- </div>
-
+ <div class="container-full">
+ <div class="navbar-header">
+ <div class="navbar-logo">
+ <a href="${context}/">Azkaban</a>
+ <div class="navbar-version">
+ ${version}
</div>
- <div class="navbar-left navbar-enviro">
- <div class="navbar-enviro-name">${azkaban_name}</div>
- <div class="navbar-enviro-server">${azkaban_label}</div>
- </div>
- <div class="navbar-collapse collapse">
- #if ($navbar_disabled != 1)
- <ul class="nav navbar-nav">
- <li#if($current_page == 'all') class="active"#end onClick="navMenuClick('$!context/')"><a
- href="$!context/index">Projects</a></li>
- <li#if($current_page == 'schedule') class="active"#end onClick="navMenuClick('$!context/schedule')"><a
- href="$!context/schedule">Scheduling</a></li>
- <!--<li#if($current_page ==
- 'triggers') class="active"#end onClick="navMenuClick('$!context/triggers')"><a href="$!context/triggers">Triggers</a></li>-->
- <li#if($current_page == 'executing') class="active"#end onClick="navMenuClick('$!context/executor')">
- <a href="$!context/executor">Executing</a></li>
- <li#if($current_page == 'history') class="active"#end onClick="navMenuClick('$!context/history')"><a
- href="$!context/history">History</a></li>
- #foreach ($viewer in $viewers)
- #if (!$viewer.hidden)
- <li#if($current_page == $viewer.pluginName) class="active"#end
- onClick="navMenuClick('$!context/$viewer.pluginPath')">
- <a href="$!context/$viewer.pluginPath">$viewer.pluginName</a></li>
- #end
- #end
+ </div>
- #foreach ($trigger in $triggerPlugins)
- #if (!$trigger.hidden)
- <li#if($current_page == $trigger.pluginName) class="active"#end
- onClick="navMenuClick('$!context/$trigger.pluginPath')">
- <a href="$!context/$trigger.pluginPath">$trigger.pluginName</a></li>
- #end
- #end
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">${user_id} <b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li><a href="$!context?logout">Logout</a></li>
- </ul>
- </li>
- </ul>
- #end
- </div><!--/.nav-collapse -->
</div>
+ <div class="navbar-left navbar-enviro">
+ <div class="navbar-enviro-name">${azkaban_name}</div>
+ <div class="navbar-enviro-server">${azkaban_label}</div>
+ </div>
+ <div class="navbar-collapse collapse">
+ #if ($navbar_disabled != 1)
+ <ul class="nav navbar-nav">
+ <li#if($current_page == 'all') class="active"#end onClick="navMenuClick('$!context/')"><a
+ href="$!context/index">Projects</a></li>
+ <li#if($current_page == 'schedule') class="active"#end
+ onClick="navMenuClick('$!context/schedule')"><a
+ href="$!context/schedule">Scheduling</a></li>
+ <!--<li#if($current_page ==
+ 'triggers') class="active"#end onClick="navMenuClick('$!context/triggers')"><a href="$!context/triggers">Triggers</a></li>-->
+ <li#if($current_page == 'executing') class="active"#end
+ onClick="navMenuClick('$!context/executor')">
+ <a href="$!context/executor">Executing</a></li>
+ <li#if($current_page == 'history') class="active"#end
+ onClick="navMenuClick('$!context/history')"><a
+ href="$!context/history">History</a></li>
+ #foreach ($viewer in $viewers)
+ #if (!$viewer.hidden)
+ <li#if($current_page == $viewer.pluginName) class="active"#end
+ onClick="navMenuClick('$!context/$viewer.pluginPath')">
+ <a href="$!context/$viewer.pluginPath">$viewer.pluginName</a></li>
+ #end
+ #end
+
+ #foreach ($trigger in $triggerPlugins)
+ #if (!$trigger.hidden)
+ <li#if($current_page == $trigger.pluginName) class="active"#end
+ onClick="navMenuClick('$!context/$trigger.pluginPath')">
+ <a href="$!context/$trigger.pluginPath">$trigger.pluginName</a></li>
+ #end
+ #end
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">${user_id} <b
+ class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="$!context?logout">Logout</a></li>
+ </ul>
+ </li>
+ </ul>
+ #end
+ </div><!--/.nav-collapse -->
+ </div>
</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/notepage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/notepage.vm
index 29142e5..051c53f 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/notepage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/notepage.vm
@@ -21,8 +21,8 @@
#parse("azkaban/webapp/servlet/velocity/style.vm")
#parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css" />
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css" />
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css"/>
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css"/>
<script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-1.10.1.custom.js"></script>
<script type="text/javascript" src="${context}/js/azkaban/view/note.js"></script>
@@ -38,7 +38,7 @@
<style type="text/css">
.show-and-hide-true {
- display:none;
+ display: none;
}
</style>
@@ -90,10 +90,12 @@
</div>
<div class="form-group">
<div class="col-sm-3 col-sm-offset-3">
- <button type="submit" id="submit-button" class="btn btn-primary btn-block">Submit Note</button>
+ <button type="submit" id="submit-button" class="btn btn-primary btn-block">Submit Note
+ </button>
</div>
<div class="col-sm-2 col-sm-offset-4">
- <button type="submit" id="clear-button" class="btn btn-warning btn-block">Clear Note</button>
+ <button type="submit" id="clear-button" class="btn btn-warning btn-block">Clear Note
+ </button>
</div>
</div>
</form> <!-- /form -->
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/permissionspage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/permissionspage.vm
index c63688e..f1dce7c 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/permissionspage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/permissionspage.vm
@@ -16,332 +16,389 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript" src="${context}/js/azkaban/view/project-permissions.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
- var userId = "$username";
- var projectName = "$project.name";
- </script>
- </head>
- <body>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project-permissions.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+ var userId = "$username";
+ var projectName = "$project.name";
+ </script>
+</head>
+<body>
-#set ($current_page = "all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page = "all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
+ #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
## Page content.
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row row-offcanvas row-offcanvas-right">
- <div class="col-xs-12 col-sm-9">
+ <div class="row row-offcanvas row-offcanvas-right">
+ <div class="col-xs-12 col-sm-9">
- #set ($project_page = "permissions")
- #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
+ #set ($project_page = "permissions")
+ #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
- ## User permissions table.
+ ## User permissions table.
- <div class="panel panel-success">
- <div class="panel-heading">
- User
- #if ($isAdmin)
+ <div class="panel panel-success">
+ <div class="panel-heading">
+ User
+ #if ($isAdmin)
<div class="pull-right">
<button id="addUser" class="btn btn-xs btn-success">Add</button>
</div>
- #end
- </div>
- <table class="table table-striped permission-table" id="permissions-table">
- <thead>
- <tr>
- <th class="tb-username">User</th>
- <th class="tb-perm">Admin</th>
- <th class="tb-read">Read</th>
- <th class="tb-write">Write</th>
- <th class="tb-execute">Execute</th>
- <th class="tb-schedule">Schedule</th>
- #if ($isAdmin)
- <th class="tb-action"></th>
- #end
- </tr>
- </thead>
- <tbody>
+ #end
+ </div>
+ <table class="table table-striped permission-table" id="permissions-table">
+ <thead>
+ <tr>
+ <th class="tb-username">User</th>
+ <th class="tb-perm">Admin</th>
+ <th class="tb-read">Read</th>
+ <th class="tb-write">Write</th>
+ <th class="tb-execute">Execute</th>
+ <th class="tb-schedule">Schedule</th>
+ #if ($isAdmin)
+ <th class="tb-action"></th>
+ #end
+ </tr>
+ </thead>
+ <tbody>
- #if ($permissions)
- #foreach ($perm in $permissions)
+ #if ($permissions)
+ #foreach ($perm in $permissions)
<tr>
<td class="tb-username">
- #if ($perm.first == $username)
- ${perm.first} <span class="sublabel">(you)</span>
- #else
- $perm.first
- #end
+ #if ($perm.first == $username)
+ ${perm.first} <span class="sublabel">(you)</span>
+ #else
+ $perm.first
+ #end
</td>
- #if ($perm.second.isPermissionNameSet("ADMIN"))
- <td><input id="${perm.first}-admin-checkbox" type="checkbox" name="admin" disabled="disabled" checked="true"></input></td>
- <td><input id="${perm.first}-read-checkbox" type="checkbox" name="read" disabled="disabled" checked="true"></input></td>
- <td><input id="${perm.first}-write-checkbox" type="checkbox" name="write" disabled="disabled" checked="true"></input></td>
- <td><input id="${perm.first}-execute-checkbox" type="checkbox" name="execute" disabled="disabled" checked="true"></input></td>
- <td><input id="${perm.first}-schedule-checkbox" type="checkbox" name="schedule" disabled="disabled" checked="true"></input></td>
- #else
- <td><input id="${perm.first}-admin-checkbox" type="checkbox" name="admin" disabled="disabled"></input></td>
- <td><input id="${perm.first}-read-checkbox" type="checkbox" name="read" disabled="disabled" #if ($perm.second.isPermissionNameSet("READ")) checked="true" #end></input></td>
- <td><input id="${perm.first}-write-checkbox" type="checkbox" name="write" disabled="disabled" #if ($perm.second.isPermissionNameSet("WRITE")) checked="true" #end></input></td>
- <td><input id="${perm.first}-execute-checkbox" type="checkbox" name="execute" disabled="disabled" #if ($perm.second.isPermissionNameSet("EXECUTE")) checked="true" #end></input></td>
- <td><input id="${perm.first}-schedule-checkbox" type="checkbox" name="schedule" disabled="disabled" #if ($perm.second.isPermissionNameSet("SCHEDULE")) checked="true" #end></input></td>
- #end
+ #if ($perm.second.isPermissionNameSet("ADMIN"))
+ <td><input id="${perm.first}-admin-checkbox" type="checkbox" name="admin"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="${perm.first}-read-checkbox" type="checkbox" name="read"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="${perm.first}-write-checkbox" type="checkbox" name="write"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="${perm.first}-execute-checkbox" type="checkbox" name="execute"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="${perm.first}-schedule-checkbox" type="checkbox" name="schedule"
+ disabled="disabled" checked="true"></input></td>
+ #else
+ <td><input id="${perm.first}-admin-checkbox" type="checkbox" name="admin"
+ disabled="disabled"></input></td>
+ <td><input id="${perm.first}-read-checkbox" type="checkbox" name="read"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("READ"))
+ checked="true" #end></input></td>
+ <td><input id="${perm.first}-write-checkbox" type="checkbox" name="write"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("WRITE"))
+ checked="true" #end></input></td>
+ <td><input id="${perm.first}-execute-checkbox" type="checkbox" name="execute"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("EXECUTE"))
+ checked="true" #end></input></td>
+ <td><input id="${perm.first}-schedule-checkbox" type="checkbox" name="schedule"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet(
+ "SCHEDULE")) checked="true" #end></input></td>
+ #end
- #if ($isAdmin)
- <td><button id="$perm.first" #if($perm.first == $username) disabled="disabled" class="btn btn-xs btn-disabled" #else class="btn btn-xs btn-default" #end >Change</button></td>
- #end
+ #if ($isAdmin)
+ <td>
+ <button id="$perm.first" #if($perm.first == $username) disabled="disabled"
+ class="btn btn-xs btn-disabled" #else
+ class="btn btn-xs btn-default" #end>Change
+ </button>
+ </td>
+ #end
</tr>
- #end
- #else
- #if ($isAdmin)
- <tr><td colspan="7">No Users Found.</td></tr>
- #else
- <tr><td colspan="6">No Users Found.</td></tr>
- #end
- #end
- </tbody>
- </table>
- </div>
+ #end
+ #else
+ #if ($isAdmin)
+ <tr>
+ <td colspan="7">No Users Found.</td>
+ </tr>
+ #else
+ <tr>
+ <td colspan="6">No Users Found.</td>
+ </tr>
+ #end
+ #end
+ </tbody>
+ </table>
+ </div>
- ## Group permissions table.
+ ## Group permissions table.
- <div class="panel panel-warning">
- <div class="panel-heading">
- Group
- #if ($isAdmin)
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ Group
+ #if ($isAdmin)
<div class="pull-right">
<button id="addGroup" class="btn btn-xs btn-warning">Add</button>
</div>
- #end
- </div>
- <table class="table table-striped permission-table" id="group-permissions-table">
- <thead>
- <tr>
- <th class="tb-username">Group</th>
- <th class="tb-perm">Admin</th>
- <th class="tb-read">Read</th>
- <th class="tb-write">Write</th>
- <th class="tb-execute">Execute</th>
- <th class="tb-schedule">Schedule</th>
- #if ($isAdmin)
- <th class="tb-action"></th>
- #end
- </tr>
- </thead>
- <tbody>
- #if ($groupPermissions)
- #foreach ($perm in $groupPermissions)
+ #end
+ </div>
+ <table class="table table-striped permission-table" id="group-permissions-table">
+ <thead>
+ <tr>
+ <th class="tb-username">Group</th>
+ <th class="tb-perm">Admin</th>
+ <th class="tb-read">Read</th>
+ <th class="tb-write">Write</th>
+ <th class="tb-execute">Execute</th>
+ <th class="tb-schedule">Schedule</th>
+ #if ($isAdmin)
+ <th class="tb-action"></th>
+ #end
+ </tr>
+ </thead>
+ <tbody>
+ #if ($groupPermissions)
+ #foreach ($perm in $groupPermissions)
<tr>
<td class="tb-username">
- #if ($perm.first == $username)
- ${perm.first} <span class="sublabel">(you)</span>
- #else
- $perm.first
- #end
+ #if ($perm.first == $username)
+ ${perm.first} <span class="sublabel">(you)</span>
+ #else
+ $perm.first
+ #end
</td>
- #if ($perm.second.isPermissionNameSet("ADMIN"))
- <td><input id="group-${perm.first}-admin-checkbox" type="checkbox" name="admin" disabled="disabled" checked="true"></input></td>
- <td><input id="group-${perm.first}-read-checkbox" type="checkbox" name="read" disabled="disabled" checked="true"></input></td>
- <td><input id="group-${perm.first}-write-checkbox" type="checkbox" name="write" disabled="disabled" checked="true"></input></td>
- <td><input id="group-${perm.first}-execute-checkbox" type="checkbox" name="execute" disabled="disabled" checked="true"></input></td>
- <td><input id="group-${perm.first}-schedule-checkbox" type="checkbox" name="schedule" disabled="disabled" checked="true"></input></td>
- #else
- <td><input id="group-${perm.first}-admin-checkbox" type="checkbox" name="admin" disabled="disabled"></input></td>
- <td><input id="group-${perm.first}-read-checkbox" type="checkbox" name="read" disabled="disabled" #if ($perm.second.isPermissionNameSet("READ")) checked="true" #end></input></td>
- <td><input id="group-${perm.first}-write-checkbox" type="checkbox" name="write" disabled="disabled" #if ($perm.second.isPermissionNameSet("WRITE")) checked="true" #end></input></td>
- <td><input id="group-${perm.first}-execute-checkbox" type="checkbox" name="execute" disabled="disabled" #if ($perm.second.isPermissionNameSet("EXECUTE")) checked="true" #end></input></td>
- <td><input id="group-${perm.first}-schedule-checkbox" type="checkbox" name="schedule" disabled="disabled" #if ($perm.second.isPermissionNameSet("SCHEDULE")) checked="true" #end></input></td>
- #end
+ #if ($perm.second.isPermissionNameSet("ADMIN"))
+ <td><input id="group-${perm.first}-admin-checkbox" type="checkbox" name="admin"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="group-${perm.first}-read-checkbox" type="checkbox" name="read"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="group-${perm.first}-write-checkbox" type="checkbox" name="write"
+ disabled="disabled" checked="true"></input></td>
+ <td><input id="group-${perm.first}-execute-checkbox" type="checkbox"
+ name="execute" disabled="disabled" checked="true"></input></td>
+ <td><input id="group-${perm.first}-schedule-checkbox" type="checkbox"
+ name="schedule" disabled="disabled" checked="true"></input></td>
+ #else
+ <td><input id="group-${perm.first}-admin-checkbox" type="checkbox" name="admin"
+ disabled="disabled"></input></td>
+ <td><input id="group-${perm.first}-read-checkbox" type="checkbox" name="read"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("READ"))
+ checked="true" #end></input></td>
+ <td><input id="group-${perm.first}-write-checkbox" type="checkbox" name="write"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("WRITE"))
+ checked="true" #end></input></td>
+ <td><input id="group-${perm.first}-execute-checkbox" type="checkbox"
+ name="execute"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet("EXECUTE"))
+ checked="true" #end></input></td>
+ <td><input id="group-${perm.first}-schedule-checkbox" type="checkbox"
+ name="schedule"
+ disabled="disabled" #if ($perm.second.isPermissionNameSet(
+ "SCHEDULE")) checked="true" #end></input></td>
+ #end
- #if ($isAdmin)
- <td><button id="group-$perm.first" class="btn btn-xs btn-default">Change</button></td>
- #end
+ #if ($isAdmin)
+ <td>
+ <button id="group-$perm.first" class="btn btn-xs btn-default">Change</button>
+ </td>
+ #end
</tr>
- #end
- #else
- #if ($isAdmin)
- <tr><td colspan="7">No Groups Found.</td></tr>
- #else
- <tr><td colspan="6">No Groups Found.</td></tr>
- #end
- #end
- </tbody>
- </table>
- </div>
+ #end
+ #else
+ #if ($isAdmin)
+ <tr>
+ <td colspan="7">No Groups Found.</td>
+ </tr>
+ #else
+ <tr>
+ <td colspan="6">No Groups Found.</td>
+ </tr>
+ #end
+ #end
+ </tbody>
+ </table>
+ </div>
- ## Proxy users table.
+ ## Proxy users table.
- <div class="panel panel-info">
- <div class="panel-heading">
- Proxy Users
- #if ($isAdmin)
+ <div class="panel panel-info">
+ <div class="panel-heading">
+ Proxy Users
+ #if ($isAdmin)
<div class="pull-right">
<button id="addProxyUser" class="btn btn-xs btn-info">Add</button>
</div>
- #end
- </div>
- <table class="table table-striped permission-table" id="proxy-user-table">
- <thead>
+ #end
+ </div>
+ <table class="table table-striped permission-table" id="proxy-user-table">
+ <thead>
+ <tr>
+ <th class="tb-username">Proxy User</th>
+ #if ($isAdmin)
+ <th class="tb-action"></th>
+ #end
+ </tr>
+ </thead>
+ <tbody>
+ #if ($proxyUsers)
+ #foreach ($proxyUser in $proxyUsers)
<tr>
- <th class="tb-username">Proxy User</th>
- #if ($isAdmin)
- <th class="tb-action"></th>
- #end
+ <td class="tb-username">#if($proxyUser == $username) ${proxyUser} <span
+ class="sublabel">(you)</span> #else $proxyUser #end</td>
+ #if ($isAdmin)
+ <td>
+ <button id="proxy-${proxyUser}" name="${proxyUser}"
+ class="btn btn-xs btn-danger">Remove
+ </button>
+ </td>
+ #end
</tr>
- </thead>
- <tbody>
- #if ($proxyUsers)
- #foreach ($proxyUser in $proxyUsers)
+ #end
+ #else
+ #if ($isAdmin)
<tr>
- <td class="tb-username">#if($proxyUser == $username) ${proxyUser} <span class="sublabel">(you)</span> #else $proxyUser #end</td>
- #if ($isAdmin)
- <td><button id="proxy-${proxyUser}" name="${proxyUser}" class="btn btn-xs btn-danger">Remove</button></td>
- #end
+ <td colspan="2">No Proxy User Found.</td>
</tr>
- #end
- #else
- #if ($isAdmin)
- <tr><td colspan="2">No Proxy User Found.</td></tr>
- #else
- <tr><td>No Proxy User Found.</td></tr>
- #end
- #end
- </tbody>
- </table>
- </div>
+ #else
+ <tr>
+ <td>No Proxy User Found.</td>
+ </tr>
+ #end
+ #end
+ </tbody>
+ </table>
+ </div>
- </div><!-- /col-xs-8 -->
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
- </div><!-- /col-xs-4 -->
- </div><!-- /row -->
+ </div><!-- /col-xs-8 -->
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
+ </div><!-- /col-xs-4 -->
+ </div><!-- /row -->
-## Remove proxy user modal dialog.
+ ## Remove proxy user modal dialog.
- <div class="modal" id="remove-proxy">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Remove Proxy User</h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-danger" id="remove-proxy-error-msg"></div>
- <p><strong>Warning:</strong> <span id="remove-proxy-msg"></span></p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-danger" id="remove-proxy-btn">Remove Proxy User</a>
- </div>
+ <div class="modal" id="remove-proxy">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Remove Proxy User</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="remove-proxy-error-msg"></div>
+ <p><strong>Warning:</strong> <span id="remove-proxy-msg"></span></p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-danger" id="remove-proxy-btn">Remove Proxy User</a>
</div>
</div>
</div>
+ </div>
-## Add proxy user modal dialog.
+ ## Add proxy user modal dialog.
- <div class="modal" id="add-proxy">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Add Proxy User</h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-danger" id="add-proxy-error-msg"></div>
- <fieldset class="form-horizontal">
- <div class="form-group">
- <label for="path" class="col-sm-2 control-label">Proxy</label>
- <div class="col-sm-10">
- <input type="text" name="proxyid" id="proxy-user-box" class="form-control">
- </div>
+ <div class="modal" id="add-proxy">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Add Proxy User</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="add-proxy-error-msg"></div>
+ <fieldset class="form-horizontal">
+ <div class="form-group">
+ <label for="path" class="col-sm-2 control-label">Proxy</label>
+ <div class="col-sm-10">
+ <input type="text" name="proxyid" id="proxy-user-box" class="form-control">
</div>
- </fieldset>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="add-proxy-btn">Add Proxy User</button>
- </div>
+ </div>
+ </fieldset>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="add-proxy-btn">Add Proxy User</button>
</div>
</div>
</div>
+ </div>
-## Change permissions modal dialog.
+ ## Change permissions modal dialog.
- <div class="modal" id="change-permission">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title" id="change-title">Change Permissions</h4>
- </div>
- <div class="modal-body">
- <div class="alert alert-danger" id="change-permission-error-msg"></div>
- <fieldset class="form-horizontal">
- <div class="form-group">
- <label for="path" class="col-sm-2 control-label">User</label>
- <div class="col-sm-10">
- <input type="text" name="userid" id="user-box" class="form-control">
- </div>
+ <div class="modal" id="change-permission">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title" id="change-title">Change Permissions</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="change-permission-error-msg"></div>
+ <fieldset class="form-horizontal">
+ <div class="form-group">
+ <label for="path" class="col-sm-2 control-label">User</label>
+ <div class="col-sm-10">
+ <input type="text" name="userid" id="user-box" class="form-control">
</div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <label class="checkbox-inline">
- <input id="admin-change" name="admin" type="checkbox">
- Admin
- </label>
- <label class="checkbox-inline">
- <input id="read-change" name="read" type="checkbox">
- Read
- </label>
- <label class="checkbox-inline">
- <input id="write-change" name="write" type="checkbox">
- Write
- </label>
- <label class="checkbox-inline">
- <input id="execute-change" name="execute" type="checkbox">
- Execute
- </label>
- <label class="checkbox-inline">
- <input id="schedule-change" name="schedule" type="checkbox">
- Schedule
- </label>
- </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <label class="checkbox-inline">
+ <input id="admin-change" name="admin" type="checkbox">
+ Admin
+ </label>
+ <label class="checkbox-inline">
+ <input id="read-change" name="read" type="checkbox">
+ Read
+ </label>
+ <label class="checkbox-inline">
+ <input id="write-change" name="write" type="checkbox">
+ Write
+ </label>
+ <label class="checkbox-inline">
+ <input id="execute-change" name="execute" type="checkbox">
+ Execute
+ </label>
+ <label class="checkbox-inline">
+ <input id="schedule-change" name="schedule" type="checkbox">
+ Schedule
+ </label>
</div>
- </fieldset>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="change-btn">Commit</button>
- </div>
+ </div>
+ </fieldset>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="change-btn">Commit</button>
</div>
</div>
</div>
+ </div>
- #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- </div><!-- /container-full -->
-#end
- </body>
+ #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ </div><!-- /container-full -->
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectlogpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectlogpage.vm
index 5e6a62b..d822701 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectlogpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectlogpage.vm
@@ -16,80 +16,80 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
-
- <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/project-logs.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- var projectId = ${project.id};
- var projectName = "$project.name";
- </script>
- </head>
- <body>
-
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+
+ <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project-logs.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ var projectId = ${project.id};
+ var projectName = "$project.name";
+ </script>
+</head>
+<body>
+
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
+ #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
## Page content.
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row row-offcanvas row-offcanvas-right">
- <div class="col-xs-12 col-sm-9">
+ <div class="row row-offcanvas row-offcanvas-right">
+ <div class="col-xs-12 col-sm-9">
- #set ($project_page = "logs")
- #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
+ #set ($project_page = "logs")
+ #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
- <div class="panel panel-default" id="flow-tabs">
- <div class="panel-heading">
- <div class="pull-right" id="project-options">
- <button type="button" id="updateLogBtn" class="btn btn-xs btn-info">Refresh</button>
- </div>
- Audit Logs
+ <div class="panel panel-default" id="flow-tabs">
+ <div class="panel-heading">
+ <div class="pull-right" id="project-options">
+ <button type="button" id="updateLogBtn" class="btn btn-xs btn-info">Refresh</button>
</div>
- <table class="table table-striped" id="logTable">
- <thead>
- <tr>
- <th>Time</th>
- <th>User</th>
- <th>Type</th>
- <th>Message</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
+ Audit Logs
</div>
+ <table class="table table-striped" id="logTable">
+ <thead>
+ <tr>
+ <th>Time</th>
+ <th>User</th>
+ <th>Type</th>
+ <th>Message</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
</div>
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
- </div>
</div>
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
+ </div>
+ </div>
- #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
+ #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
- </div><!-- /container-full -->
-#end
- </body>
+ </div><!-- /container-full -->
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectmodals.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectmodals.vm
index c8705c5..637408a 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectmodals.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectmodals.vm
@@ -14,77 +14,79 @@
* the License.
*#
- ## Upload project modal
+## Upload project modal
- <div class="modal" id="upload-project-modal">
- <div class="modal-dialog">
- <div class="modal-content">
- <form id="upload-project-form" enctype="multipart/form-data" method="post" action="$!context/manager">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Upload Project Files</h4>
+<div class="modal" id="upload-project-modal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <form id="upload-project-form" enctype="multipart/form-data" method="post"
+ action="$!context/manager">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
+ </button>
+ <h4 class="modal-title">Upload Project Files</h4>
+ </div>
+ <div class="modal-body">
+ <div class="alert alert-danger" id="upload-project-modal-error-msg">$error_msg</div>
+ <fieldset class="form-horizontal">
+ <div class="form-group">
+ <label for="file" class="col-sm-3 control-label">Job Archive</label>
+ <div class="col-sm-9">
+ <input type="file" class="form-control" id="file" name="file">
</div>
- <div class="modal-body">
- <div class="alert alert-danger" id="upload-project-modal-error-msg">$error_msg</div>
- <fieldset class="form-horizontal">
- <div class="form-group">
- <label for="file" class="col-sm-3 control-label">Job Archive</label>
- <div class="col-sm-9">
- <input type="file" class="form-control" id="file" name="file">
- </div>
+ </div>
+ #if ($validatorFixPrompt.booleanValue())
+ <div class="form-group">
+ <label for="fix" class="col-sm-3 control-label">
+ $validatorFixLabel.toString()
+ <a href=$validatorFixLink.toString()target="_blank">
+ <span class="ui-icon ui-icon-info" style="display:inline-block;"></span>
+ </a>
+ </label>
+ <div class="col-sm-3">
+ <div class="checkbox">
+ ## Add a hidden input so that when user uncheck the checkbox, "fix" field will
+ ## still have value set to "off". This enables us to distinguish whether the
+ ## user uncheck the checkbox or we turn off the fix prompt UI.
+ <input type="hidden" name="fix" value="off">
+ <input type="checkbox" id="fix" name="fix" value="on" checked="checked">
</div>
- #if ($validatorFixPrompt.booleanValue())
- <div class="form-group">
- <label for="fix" class="col-sm-3 control-label">
- $validatorFixLabel.toString()
- <a href=$validatorFixLink.toString() target="_blank">
- <span class="ui-icon ui-icon-info" style="display:inline-block;"></span>
- </a>
- </label>
- <div class="col-sm-3">
- <div class="checkbox">
- ## Add a hidden input so that when user uncheck the checkbox, "fix" field will
- ## still have value set to "off". This enables us to distinguish whether the
- ## user uncheck the checkbox or we turn off the fix prompt UI.
- <input type="hidden" name="fix" value="off">
- <input type="checkbox" id="fix" name="fix" value="on" checked="checked">
- </div>
- </div>
- </div>
- #end
- </fieldset>
- </div>
- <div class="modal-footer">
- <input type="hidden" name="project" value="$project.name">
- <input type="hidden" name="action" value="upload">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-primary" id="upload-project-btn">Upload</button>
+ </div>
</div>
- </form>
- </div>
+ #end
+ </fieldset>
</div>
- </div>
+ <div class="modal-footer">
+ <input type="hidden" name="project" value="$project.name">
+ <input type="hidden" name="action" value="upload">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="upload-project-btn">Upload</button>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
- ## Delete project modal.
+## Delete project modal.
- <div class="modal" id="delete-project-modal">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">Delete Project</h4>
- </div>
- <div class="modal-body">
- <p><strong>Warning:</strong> This project will be deleted and may not be recoverable.</p>
- </div>
- <div class="modal-footer">
- <form id="delete-form">
- <input type="hidden" name="project" value="$project.name">
- <input type="hidden" name="delete" value="true">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <button type="button" class="btn btn-danger" id="delete-btn">Delete Project</button>
- </form>
- </div>
- </div>
- </div>
+<div class="modal" id="delete-project-modal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title">Delete Project</h4>
+ </div>
+ <div class="modal-body">
+ <p><strong>Warning:</strong> This project will be deleted and may not be recoverable.</p>
+ </div>
+ <div class="modal-footer">
+ <form id="delete-form">
+ <input type="hidden" name="project" value="$project.name">
+ <input type="hidden" name="delete" value="true">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-danger" id="delete-btn">Delete Project</button>
+ </form>
</div>
+ </div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectnav.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectnav.vm
index 24b3e24..2682da2 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectnav.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectnav.vm
@@ -14,10 +14,15 @@
* the License.
*#
- <ul class="nav nav-tabs nav-sm">
- <li#if($project_page == 'flows') class="active"#end><a href="${context}/manager?project=${project.name}">Flows</a></li>
- <li#if($project_page == 'permissions') class="active"#end><a id="project-permission-btn" href="${context}/manager?project=${project.name}&permissions">Permissions</a></li>
+<ul class="nav nav-tabs nav-sm">
+ <li#if($project_page == 'flows') class="active"#end><a
+ href="${context}/manager?project=${project.name}">Flows</a></li>
+ <li#if($project_page == 'permissions') class="active"#end><a id="project-permission-btn"
+ href="${context}/manager?project=${project.name}&permissions">Permissions</a>
+ </li>
#if ($admin)
- <li#if($project_page == 'logs') class="active"#end><a id="project-logs-btn" href="${context}/manager?project=${project.name}&logs">Project Logs</a></li>
+ <li#if($project_page == 'logs') class="active"#end><a id="project-logs-btn"
+ href="${context}/manager?project=${project.name}&logs">Project
+ Logs</a></li>
#end
- </ul>
+</ul>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpage.vm
index d747f68..d32cd40 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpage.vm
@@ -16,96 +16,101 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
-#parse ("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/project.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- var projectId = ${project.id};
- var execAccess = ${exec};
- var projectName = "$project.name";
- </script>
- <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css" />
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css">
- </head>
- <body>
-
-#set ($current_page="all")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse ("azkaban/webapp/servlet/velocity/svgflowincludes.vm")
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/flow-execute-dialog.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/project-modals.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ var projectId = ${project.id};
+ var execAccess = ${exec};
+ var projectName = "$project.name";
+ </script>
+ <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css"/>
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css">
+</head>
+<body>
+
+ #set ($current_page="all")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
+ #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
## Page content.
- <div class="row row-offcanvas row-offcanvas-right">
- <div class="col-xs-12 col-sm-9" id="flow-tabs">
+ <div class="row row-offcanvas row-offcanvas-right">
+ <div class="col-xs-12 col-sm-9" id="flow-tabs">
- #set ($project_page = "flows")
- #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
+ #set ($project_page = "flows")
+ #parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
- <div id="flow-tabs">
- #if ($flows)
- #foreach ($flow in $flows)
+ <div id="flow-tabs">
+ #if ($flows)
+ #foreach ($flow in $flows)
<div class="panel panel-default" flow="${flow.id}" project="${project.name}">
<div class="panel-heading flow-expander" id="${flow.id}">
- #if (${exec})
- <div class="pull-right">
- <button type="button" class="btn btn-xs btn-success execute-flow" flowId="${flow.id}">Execute Flow</button>
- <a href="${context}/manager?project=${project.name}&flow=${flow.id}#executions" class="btn btn-info btn-xs">Executions</a>
- <a href="${context}/manager?project=${project.name}&flow=${flow.id}#summary" class="btn btn-info btn-xs">Summary</a>
+ #if (${exec})
+ <div class="pull-right">
+ <button type="button" class="btn btn-xs btn-success execute-flow"
+ flowId="${flow.id}">Execute Flow
+ </button>
+ <a href="${context}/manager?project=${project.name}&flow=${flow.id}#executions"
+ class="btn btn-info btn-xs">Executions</a>
+ <a href="${context}/manager?project=${project.name}&flow=${flow.id}#summary"
+ class="btn btn-info btn-xs">Summary</a>
+ </div>
+ #end
+ <span class="glyphicon glyphicon-chevron-down flow-expander-icon"></span>
+ <a href="${context}/manager?project=${project.name}&flow=${flow.id}">${flow.id}</a>
+ </div>
+ <div id="${flow.id}-child" class="panel-collapse panel-list collapse">
+ <ul class="list-group list-group-collapse expanded-flow-job-list"
+ id="${flow.id}-tbody"></ul>
</div>
- #end
- <span class="glyphicon glyphicon-chevron-down flow-expander-icon"></span>
- <a href="${context}/manager?project=${project.name}&flow=${flow.id}">${flow.id}</a>
- </div>
- <div id="${flow.id}-child" class="panel-collapse panel-list collapse">
- <ul class="list-group list-group-collapse expanded-flow-job-list" id="${flow.id}-tbody"></ul>
</div>
- </div>
- #end
- #else
+ #end
+ #else
<div class="callout callout-default">
<h4>No Flows</h4>
<p>No flows have been uploaded to this project yet.</p>
</div>
+ #end
+ </div><!-- /#flow-tabs -->
+ </div><!-- /col-xs-8 -->
+
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
+ </div><!-- /col-xs-4 -->
+ </div><!-- /row -->
+
+ #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
+ #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
+
+ </div><!-- /container -->
#end
- </div><!-- /#flow-tabs -->
- </div><!-- /col-xs-8 -->
-
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- #parse ("azkaban/webapp/servlet/velocity/projectsidebar.vm")
- </div><!-- /col-xs-4 -->
- </div><!-- /row -->
-
- #parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- #parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
- #parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
-
- </div><!-- /container -->
-#end
- </body>
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpageheader.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpageheader.vm
index fe2636d..6e57437 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpageheader.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectpageheader.vm
@@ -14,27 +14,30 @@
* the License.
*#
- <div class="az-page-header">
- <div class="container-full">
- <div class="row">
- <div class="header-title" id="project-page-header">
- <h1><a href="${context}/manager?project=${project.name}">Project <small>$project.name</small></a></h1>
- </div>
- <div class="header-control">
- <div class="header-form pull-right" id="project-options">
- <button id="project-delete-btn" class="btn btn-sm btn-danger">
- <span class="glyphicon glyphicon-trash"></span> Delete Project
- </button>
-#if (!$hideUploadProject)
- <button id="project-upload-btn" class="btn btn-sm btn-primary">
- <span class="glyphicon glyphicon-upload"></span> Upload
- </button>
-#end
- <a class="btn btn-sm btn-info" href="${context}/manager?project=${project.name}&download=true">
- <span class="glyphicon glyphicon-download"></span> Download
- </a>
- </div>
- </div>
+<div class="az-page-header">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title" id="project-page-header">
+ <h1><a href="${context}/manager?project=${project.name}">Project
+ <small>$project.name</small>
+ </a></h1>
+ </div>
+ <div class="header-control">
+ <div class="header-form pull-right" id="project-options">
+ <button id="project-delete-btn" class="btn btn-sm btn-danger">
+ <span class="glyphicon glyphicon-trash"></span> Delete Project
+ </button>
+ #if (!$hideUploadProject)
+ <button id="project-upload-btn" class="btn btn-sm btn-primary">
+ <span class="glyphicon glyphicon-upload"></span> Upload
+ </button>
+ #end
+ <a class="btn btn-sm btn-info"
+ href="${context}/manager?project=${project.name}&download=true">
+ <span class="glyphicon glyphicon-download"></span> Download
+ </a>
</div>
</div>
</div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectsidebar.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectsidebar.vm
index 4ba7592..3cb40d3 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectsidebar.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/projectsidebar.vm
@@ -14,24 +14,25 @@
* the License.
*#
- <div class="well" id="project-sidebar">
- <h3>$project.name</h3>
- <p class="editable" id="project-description">$esc.html($project.description)</p>
- <div id="project-description-form" class="editable-form">
- <div class="input-group">
- <input type="text" class="form-control input-sm" id="project-description-edit" placeholder="Project description">
- <span class="input-group-btn">
+<div class="well" id="project-sidebar">
+ <h3>$project.name</h3>
+ <p class="editable" id="project-description">$esc.html($project.description)</p>
+ <div id="project-description-form" class="editable-form">
+ <div class="input-group">
+ <input type="text" class="form-control input-sm" id="project-description-edit"
+ placeholder="Project description">
+ <span class="input-group-btn">
<button class="btn btn-primary btn-sm" type="button" id="project-description-btn">Save</button>
</span>
- </div>
- </div>
- <hr>
- <p><strong>Created on</strong> $utils.formatDate($project.createTimestamp)</p>
- <p><strong>Last modified by</strong> $utils.formatDate($project.lastModifiedTimestamp)</p>
- <p><strong>Modified by</strong> $project.lastModifiedUser</p>
+ </div>
+ </div>
+ <hr>
+ <p><strong>Created on</strong> $utils.formatDate($project.createTimestamp)</p>
+ <p><strong>Last modified by</strong> $utils.formatDate($project.lastModifiedTimestamp)</p>
+ <p><strong>Modified by</strong> $project.lastModifiedUser</p>
- <hr>
+ <hr>
- <p><strong>Project admins:</strong> $admins</p>
- <p><strong>Your Permissions:</strong> $userpermission.toString()</p>
- </div>
+ <p><strong>Project admins:</strong> $admins</p>
+ <p><strong>Your Permissions:</strong> $userpermission.toString()</p>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/propertypage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/propertypage.vm
index 3c7e0ce..60e5ff0 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/propertypage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/propertypage.vm
@@ -16,113 +16,128 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
- var projectId = "$project.name";
- </script>
- </head>
- <body>
+ var projectId = "$project.name";
+ </script>
+</head>
+<body>
-#set($current_page="all")
-#parse("azkaban/webapp/servlet/velocity/nav.vm")
+ #set($current_page="all")
+ #parse("azkaban/webapp/servlet/velocity/nav.vm")
-#if ($errorMsg)
- #parse("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+ #if ($errorMsg)
+ #parse("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header
- <div class="az-page-header page-header-bare">
- <div class="container-full">
- <h1><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=${property}">Properties <small>$property</small></a></h1>
- </div>
- </div>
- <div class="page-breadcrumb">
- <div class="container-full">
- <ol class="breadcrumb">
- <li><a href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name</a></li>
- <li><a href="${context}/manager?project=${project.name}&flow=${flowid}"><strong>Flow</strong> $flowid</a></li>
- <li><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}"><strong>Job</strong> $jobid</a></li>
- <li class="active"><strong>Properties</strong> $property</li>
- </ol>
- </div>
+ <div class="az-page-header page-header-bare">
+ <div class="container-full">
+ <h1><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=${property}">Properties
+ <small>$property</small>
+ </a></h1>
</div>
-
+ </div>
+ <div class="page-breadcrumb">
<div class="container-full">
+ <ol class="breadcrumb">
+ <li><a
+ href="${context}/manager?project=${project.name}"><strong>Project</strong> $project.name
+ </a></li>
+ <li><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}"><strong>Flow</strong> $flowid
+ </a></li>
+ <li><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}"><strong>Job</strong> $jobid
+ </a></li>
+ <li class="active"><strong>Properties</strong> $property</li>
+ </ol>
+ </div>
+ </div>
+
+ <div class="container-full">
+
+ #parse("azkaban/webapp/servlet/velocity/alerts.vm")
+
+ <div class="row row-offcanvas row-offcanvas-right">
+ <div class="col-xs-12 col-sm-9">
+
+ ## Properties
+
+ <div class="panel panel-default">
+ <div class="panel-heading">$property</div>
+
+ <table class="table table-striped table-bordered properties-table">
+ <thead>
+ <tr>
+ <th class="tb-pname">Parameter Name</th>
+ <th class="tb-pvalue">Value</th>
+ </tr>
+ </thead>
+ <tbody>
+ #foreach ($parameter in $parameters)
+ <tr>
+ <td class="property-key">$parameter.first</td>
+ <td>$parameter.second</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ </div>
+ </div><!-- /col-xs-8 -->
+ <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
+ <div class="well" id="job-summary">
+ <h4>Properties
+ <small>$property</small>
+ </h4>
+ <p><strong>Job</strong> $jobid</p>
+ </div>
- #parse("azkaban/webapp/servlet/velocity/alerts.vm")
-
- <div class="row row-offcanvas row-offcanvas-right">
- <div class="col-xs-12 col-sm-9">
-
- ## Properties
-
- <div class="panel panel-default">
- <div class="panel-heading">$property</div>
-
- <table class="table table-striped table-bordered properties-table">
- <thead>
- <tr>
- <th class="tb-pname">Parameter Name</th>
- <th class="tb-pvalue">Value</th>
- </tr>
- </thead>
- <tbody>
- #foreach ($parameter in $parameters)
- <tr>
- <td class="property-key">$parameter.first</td>
- <td>$parameter.second</td>
- </tr>
- #end
- </tbody>
- </table>
- </div>
- </div><!-- /col-xs-8 -->
- <div class="col-xs-6 col-sm-3 sidebar-offcanvas">
- <div class="well" id="job-summary">
- <h4>Properties <small>$property</small></h4>
- <p><strong>Job</strong> $jobid</p>
- </div>
-
- <div class="panel panel-default">
- <div class="panel-heading">Inherited From</div>
- <ul class="list-group">
- #if ($inheritedproperties)
- #foreach ($inheritedproperty in $inheritedproperties)
- <li class="list-group-item"><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$inheritedproperty">$inheritedproperty</a></li>
- #end
- #else
+ <div class="panel panel-default">
+ <div class="panel-heading">Inherited From</div>
+ <ul class="list-group">
+ #if ($inheritedproperties)
+ #foreach ($inheritedproperty in $inheritedproperties)
+ <li class="list-group-item"><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$inheritedproperty">$inheritedproperty</a>
+ </li>
+ #end
+ #else
<li class="list-group-item">No inherited properties.</li>
- #end
- </ul>
- </div>
-
- <div class="panel panel-default">
- <div class="panel-heading">Source of</div>
- <ul class="list-group">
- #if ($dependingproperties)
- #foreach ($dependingproperty in $dependingproperties)
- <li class="list-group-item"><a href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$dependingproperty">$dependingproperty</a></li>
- #end
- #else
+ #end
+ </ul>
+ </div>
+
+ <div class="panel panel-default">
+ <div class="panel-heading">Source of</div>
+ <ul class="list-group">
+ #if ($dependingproperties)
+ #foreach ($dependingproperty in $dependingproperties)
+ <li class="list-group-item"><a
+ href="${context}/manager?project=${project.name}&flow=${flowid}&job=${jobid}&prop=$dependingproperty">$dependingproperty</a>
+ </li>
+ #end
+ #else
<li class="list-group-item">No dependents.</li>
- #end
- </ul>
- </div>
+ #end
+ </ul>
</div>
- </div><!-- /row -->
+ </div>
+ </div><!-- /row -->
- </div><!-- /container-full -->
-#end
- </body>
+ </div><!-- /container-full -->
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
index 663738d..0f11a97 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
@@ -16,81 +16,82 @@
<!DOCTYPE html>
<html lang="en">
- <head>
-
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
-
- <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css" />
-
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/schedule-sla.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/scheduled.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/schedule.js"></script>
- <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
-
- $(document).ready(function () {
- var flowTable = $("#scheduledFlowsTbl");
- flowTable.tablesorter();
- });
- </script>
- </head>
- <body>
-
-#set ($current_page="schedule")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
-
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+<head>
+
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+
+ <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css"/>
+
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/schedule-sla.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/scheduled.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/util/schedule.js"></script>
+ <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+
+ $(document).ready(function () {
+ var flowTable = $("#scheduledFlowsTbl");
+ flowTable.tablesorter();
+ });
+ </script>
+</head>
+<body>
+
+ #set ($current_page="schedule")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
## Page header.
- <div class="az-page-header">
- <div class="container-full">
- <h1><a href="${context}/schedule">Scheduled Flows</a></h1>
- </div>
+ <div class="az-page-header">
+ <div class="container-full">
+ <h1><a href="${context}/schedule">Scheduled Flows</a></h1>
</div>
+ </div>
## Page content.
- <div class="container-full">
-
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
-
- <div class="row">
- <div class="col-xs-12">
- <table id="scheduledFlowsTbl" class="table table-striped table-condensed table-bordered table-hover">
- <thead>
- <tr>
- <!--th class="execid">Execution Id</th-->
- <th>#</th>
- <th>ID</th>
- <th>Flow</th>
- <th>Project</th>
- <th>Submitted By</th>
- <th class="date">First Scheduled to Run</th>
- <th class="date">Next Execution Time</th>
- <th class="date">Repeats Every</th>
- <th class="date">Cron Expression</th>
- <th>Has SLA</th>
- <th colspan="2" class="action ignoresort">Action</th>
- </tr>
- </thead>
- <tbody>
- #if(!$schedules.isEmpty())
- #foreach($sched in $schedules)
+ <div class="container-full">
+
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+
+ <div class="row">
+ <div class="col-xs-12">
+ <table id="scheduledFlowsTbl"
+ class="table table-striped table-condensed table-bordered table-hover">
+ <thead>
+ <tr>
+ <!--th class="execid">Execution Id</th-->
+ <th>#</th>
+ <th>ID</th>
+ <th>Flow</th>
+ <th>Project</th>
+ <th>Submitted By</th>
+ <th class="date">First Scheduled to Run</th>
+ <th class="date">Next Execution Time</th>
+ <th class="date">Repeats Every</th>
+ <th class="date">Cron Expression</th>
+ <th>Has SLA</th>
+ <th colspan="2" class="action ignoresort">Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ #if(!$schedules.isEmpty())
+ #foreach($sched in $schedules)
<tr>
<td class="tb-name">
- $velocityCount
+ $velocityCount
</td>
<td>${sched.scheduleId}</td>
<td class="tb-name">
@@ -103,35 +104,44 @@
<td>$utils.formatDateTime(${sched.firstSchedTime})</td>
<td>$utils.formatDateTime(${sched.nextExecTime})</td>
#if (${sched.period})
- <td> $utils.formatPeriod(${sched.period}) </td>
+ <td> $utils.formatPeriod(${sched.period})</td>
#else
<td>Not Applicable</td>
#end
#if (${sched.cronExpression})
- <td> ${sched.cronExpression} </td>
+ <td> ${sched.cronExpression}</td>
#else
<td>Not Applicable</td>
#end
<td>#if(${sched.slaOptions}) true #else false #end</td>
- <td><button type="button" id="removeSchedBtn" class="btn btn-sm btn-danger" onclick="removeSched(${sched.scheduleId})" >Remove Schedule</button></td>
- <td><button type="button" id="addSlaBtn" class="btn btn-sm btn-primary" onclick="slaView.initFromSched(${sched.scheduleId}, '${sched.flowName}')" >Set SLA</button></td>
- </tr>
- #end
- #else
- <tr>
- <td colspan="11">No scheduled flow found.</td>
+ <td>
+ <button type="button" id="removeSchedBtn" class="btn btn-sm btn-danger"
+ onclick="removeSched(${sched.scheduleId})">Remove Schedule
+ </button>
+ </td>
+ <td>
+ <button type="button" id="addSlaBtn" class="btn btn-sm btn-primary"
+ onclick="slaView.initFromSched(${sched.scheduleId}, '${sched.flowName}')">
+ Set SLA
+ </button>
+ </td>
</tr>
- #end
- </tbody>
- </table>
- </div><!-- /col-xs-12 -->
- </div><!-- /row -->
+ #end
+ #else
+ <tr>
+ <td colspan="11">No scheduled flow found.</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+ </div><!-- /col-xs-12 -->
+ </div><!-- /row -->
## Set SLA modal.
- #parse ("azkaban/webapp/servlet/velocity/slapanel.vm")
+ #parse ("azkaban/webapp/servlet/velocity/slapanel.vm")
- </div>
-#end
- </body>
+ </div>
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduleoptionspanel.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduleoptionspanel.vm
index 627e042..d8b2e8d 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduleoptionspanel.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/scheduleoptionspanel.vm
@@ -17,159 +17,169 @@
<div id="scheduleModalBackground" class="modalBackground2">
<div id="schedule-options" class="modal modalContainer2">
<a href='#' title='Close' class='modal-close'>x</a>
- <h3>Schedule Flow Options</h3>
- <div>
- <ul class="optionsPicker">
- <li id="scheduleGeneralOptions">General Options</li>
- <li id="scheduleFlowOptions">Flow Options</li>
- <!--li id="scheduleSlaOptions">SLA Options</li-->
- </ul>
- </div>
- <div class="optionsPane">
- <!--div id="scheduleSlaPanel" class="generalPanel panel">
- <div id="slaActions">
- <h4>SLA Alert Emails</h4>
- <dl>
- <dt >SLA Alert Emails</dt>
- <dd>
- <textarea id="slaEmails"></textarea>
- </dd>
- </dl>
+ <h3>Schedule Flow Options</h3>
+ <div>
+ <ul class="optionsPicker">
+ <li id="scheduleGeneralOptions">General Options</li>
+ <li id="scheduleFlowOptions">Flow Options</li>
+ <!--li id="scheduleSlaOptions">SLA Options</li-->
+ </ul>
+ </div>
+ <div class="optionsPane">
+ <!--div id="scheduleSlaPanel" class="generalPanel panel">
+ <div id="slaActions">
+ <h4>SLA Alert Emails</h4>
+ <dl>
+ <dt >SLA Alert Emails</dt>
+ <dd>
+ <textarea id="slaEmails"></textarea>
+ </dd>
+ </dl>
+ </div>
+ <div id="slaRules">
+ <h4>Flow SLA Rules</h4>
+ <div class="tableDiv">
+ <table id="flowRulesTbl">
+ <thead>
+ <tr>
+ <th>Flow/Job</th>
+ <th>Finish In</th>
+ <th>Email Action</th>
+ <th>Kill Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
</div>
- <div id="slaRules">
- <h4>Flow SLA Rules</h4>
- <div class="tableDiv">
- <table id="flowRulesTbl">
- <thead>
- <tr>
- <th>Flow/Job</th>
- <th>Finish In</th>
- <th>Email Action</th>
- <th>Kill Action</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- </div>
- <h4>Job SLA Rules</h4>
- <div class="tableDiv">
- <table id="jobRulesTbl">
- <thead>
- <tr>
- <th>Flow/Job</th>
- <th>Finish In</th>
- <th>Email Action</th>
- <th>Kill Action</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- </div>
+ <h4>Job SLA Rules</h4>
+ <div class="tableDiv">
+ <table id="jobRulesTbl">
+ <thead>
+ <tr>
+ <th>Flow/Job</th>
+ <th>Finish In</th>
+ <th>Email Action</th>
+ <th>Kill Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
</div>
- </div-->
- <div id="scheduleGeneralPanel" class="generalPanel panel">
- <div id="scheduleInfo">
- <dl>
- <dt>Schedule Time</dt>
- <dd>
- <input id="advhour" type="text" size="2" value="12"/>
- <input id="advminutes" type="text" size="2" value="00"/>
- <select id="advam_pm">
- <option>pm</option>
- <option>am</option>
- </select>
- <select id="advtimezone">
- <option>PDT</option>
- <option>UTC</option>
- </select>
- </dd>
- <dt>Schedule Date</dt><dd><input type="text" id="advdatepicker" /></dd>
- <dt>Recurrence</dt>
- <dd>
- <input id="advis_recurring" type="checkbox" checked />
- <span>repeat every</span>
- <input id="advperiod" type="text" size="2" value="1"/>
- <select id="advperiod_units">
- <option value="d">Days</option>
- <option value="h">Hours</option>
- <option value="m">Minutes</option>
- <option value="M">Months</option>
- <option value="w">Weeks</option>
- </select>
- </dd>
- </dl>
+ </div>
+ </div-->
+ <div id="scheduleGeneralPanel" class="generalPanel panel">
+ <div id="scheduleInfo">
+ <dl>
+ <dt>Schedule Time</dt>
+ <dd>
+ <input id="advhour" type="text" size="2" value="12"/>
+ <input id="advminutes" type="text" size="2" value="00"/>
+ <select id="advam_pm">
+ <option>pm</option>
+ <option>am</option>
+ </select>
+ <select id="advtimezone">
+ <option>PDT</option>
+ <option>UTC</option>
+ </select>
+ </dd>
+ <dt>Schedule Date</dt>
+ <dd><input type="text" id="advdatepicker"/></dd>
+ <dt>Recurrence</dt>
+ <dd>
+ <input id="advis_recurring" type="checkbox" checked/>
+ <span>repeat every</span>
+ <input id="advperiod" type="text" size="2" value="1"/>
+ <select id="advperiod_units">
+ <option value="d">Days</option>
+ <option value="h">Hours</option>
+ <option value="m">Minutes</option>
+ <option value="M">Months</option>
+ <option value="w">Weeks</option>
+ </select>
+ </dd>
+ </dl>
+ </div>
+ <br></br>
+ <br></br>
+ <div id="scheduleCompleteActions">
+ <h4>Completion Actions</h4>
+ <dl>
+ <dt>Failure Action</dt>
+ <dd>
+ <select id="scheduleFailureAction" name="failureAction">
+ <option value="finishCurrent">Finish Current Running</option>
+ <option value="cancelImmediately">Cancel All</option>
+ <option value="finishPossible">Finish All Possible</option>
+ </select>
+ </dd>
+ <dt>Failure Email</dt>
+ <dd>
+ <textarea id="scheduleFailureEmails"></textarea>
+ </dd>
+ <dt>Notify on Failure</dt>
+ <dd>
+ <input id="scheduleNotifyFailureFirst" class="checkbox" type="checkbox" name="notify"
+ value="first" checked>First Failure</input>
+ <input id="scheduleNotifyFailureLast" class="checkbox" type="checkbox" name="notify"
+ value="last">Flow Stop</input>
+ </dd>
+ <dt>Success Email</dt>
+ <dd>
+ <textarea id="scheduleSuccessEmails"></textarea>
+ </dd>
+ <dt>Concurrent Execution</dt>
+ <dd id="scheduleExecutingJob" class="disabled">
+ <input id="scheduleIgnore" class="radio" type="radio" name="concurrent" value="ignore"
+ checked/><label class="radioLabel" for="ignore">Run Concurrently</label>
+ <input id="schedulePipeline" class="radio" type="radio" name="concurrent"
+ value="pipeline"/><label class="radioLabel" for="pipeline">Pipeline</label>
+ <input id="scheduleQueue" class="radio" type="radio" name="concurrent" value="queue"/><label
+ class="radioLabel" for="queue">Queue Job</label>
+ </dd>
+ </dl>
+ </div>
+ <div id="scheduleFlowPropertyOverride">
+ <h4>Flow Property Override</h4>
+ <div class="tableDiv">
+ <table>
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Value</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr id="scheduleAddRow">
+ <td id="addRow-col" colspan="2"><span class="addIcon"></span><a href="#">Add Row</a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
</div>
- <br></br>
- <br></br>
- <div id="scheduleCompleteActions">
- <h4>Completion Actions</h4>
- <dl>
- <dt>Failure Action</dt>
- <dd>
- <select id="scheduleFailureAction" name="failureAction">
- <option value="finishCurrent">Finish Current Running</option>
- <option value="cancelImmediately">Cancel All</option>
- <option value="finishPossible">Finish All Possible</option>
- </select>
- </dd>
- <dt>Failure Email</dt>
- <dd>
- <textarea id="scheduleFailureEmails"></textarea>
- </dd>
- <dt>Notify on Failure</dt>
- <dd>
- <input id="scheduleNotifyFailureFirst" class="checkbox" type="checkbox" name="notify" value="first" checked >First Failure</input>
- <input id="scheduleNotifyFailureLast" class="checkbox" type="checkbox" name="notify" value="last">Flow Stop</input>
- </dd>
- <dt>Success Email</dt>
- <dd>
- <textarea id="scheduleSuccessEmails"></textarea>
- </dd>
- <dt>Concurrent Execution</dt>
- <dd id="scheduleExecutingJob" class="disabled">
- <input id="scheduleIgnore" class="radio" type="radio" name="concurrent" value="ignore" checked /><label class="radioLabel" for="ignore">Run Concurrently</label>
- <input id="schedulePipeline" class="radio" type="radio" name="concurrent" value="pipeline" /><label class="radioLabel" for="pipeline">Pipeline</label>
- <input id="scheduleQueue" class="radio" type="radio" name="concurrent" value="queue" /><label class="radioLabel" for="queue">Queue Job</label>
- </dd>
- </dl>
+ </div>
+ </div>
+ <div id="scheduleGraphPanel" class="graphPanel panel">
+ <div id="scheduleJobListCustom" class="jobList">
+ <div class="filterList">
+ <input class="filter" placeholder=" Job Filter"/>
</div>
- <div id="scheduleFlowPropertyOverride">
- <h4>Flow Property Override</h4>
- <div class="tableDiv">
- <table>
- <thead>
- <tr>
- <th>Name</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- <tr id="scheduleAddRow"><td id="addRow-col" colspan="2"><span class="addIcon"></span><a href="#">Add Row</a></td></tr>
- </tbody>
- </table>
- </div>
+ <div class="list">
</div>
+ <div class="btn5 resetPanZoomBtn">Reset Pan Zoom</div>
</div>
- <div id="scheduleGraphPanel" class="graphPanel panel">
- <div id="scheduleJobListCustom" class="jobList">
- <div class="filterList">
- <input class="filter" placeholder=" Job Filter" />
- </div>
- <div class="list">
- </div>
- <div class="btn5 resetPanZoomBtn" >Reset Pan Zoom</div>
- </div>
- <div id="scheduleSvgDivCustom" class="svgDiv" >
- <svg class="svgGraph" xmlns="http://www.w3.org/2000/svg" version="1.1" shape-rendering="optimize-speed" text-rendering="optimize-speed" >
- </svg>
- </div>
+ <div id="scheduleSvgDivCustom" class="svgDiv">
+ <svg class="svgGraph" xmlns="http://www.w3.org/2000/svg" version="1.1"
+ shape-rendering="optimize-speed" text-rendering="optimize-speed">
+ </svg>
</div>
+ </div>
</div>
<div class="actions">
- <a class="yes btn1" id="adv-schedule-btn" href="#">Schedule</a>
- <a class="no simplemodal-close btn3" id="schedule-cancel-btn" href="#">Cancel</a>
- </div>
+ <a class="yes btn1" id="adv-schedule-btn" href="#">Schedule</a>
+ <a class="no simplemodal-close btn3" id="schedule-cancel-btn" href="#">Cancel</a>
+ </div>
</div>
</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/schedulepanel.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/schedulepanel.vm
index 27737c8..f05e42c 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/schedulepanel.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/schedulepanel.vm
@@ -15,14 +15,31 @@
*#
<script type="text/javascript" src="${context}/js/azkaban/util/date.js?version=20161031"></script>
-<script type="text/javascript" src="${context}/js/azkaban/view/schedule-panel.js?version=20161031"></script>
-<script type="text/javascript" src="${context}/js/moment.min.js" ></script>
+<script type="text/javascript"
+ src="${context}/js/azkaban/view/schedule-panel.js?version=20161031"></script>
+<script type="text/javascript" src="${context}/js/moment.min.js"></script>
<script type="text/javascript" src="${context}/js/later.min.js"></script>
<script type="text/javascript" src="${context}/js/moment-timezone-with-data.min.js"></script>
<style type="text/css">
- .input-box { position: relative; }
- .input-box input { display: block; border: 1px solid #d7d6d6; background: #fff; padding: 10px 10px 10px 20px; width: 195px; }
- .unit { position: absolute; display: block; left: 5px; top: 7px; z-index: 9; }
+ .input-box {
+ position: relative;
+ }
+
+ .input-box input {
+ display: block;
+ border: 1px solid #d7d6d6;
+ background: #fff;
+ padding: 10px 10px 10px 20px;
+ width: 195px;
+ }
+
+ .unit {
+ position: absolute;
+ display: block;
+ left: 5px;
+ top: 7px;
+ z-index: 9;
+ }
</style>
<div class="modal" id="schedule-modal">
<div class="modal-dialog">
@@ -36,8 +53,10 @@
<div class="form-group">
<div class="col-sm-12" style="height:55px;">
- <h4 style="color:Coral; font-style:italic;">All schedules are basead on the server timezone: <b id="timeZoneID"></b>.</h4>
- <h6 style="color:#0080ff;">Warning: the execution will be skipped if it is scheduled to run during the hour that is lost when DST starts in the Spring.
+ <h4 style="color:Coral; font-style:italic;">All schedules are basead on the server
+ timezone: <b id="timeZoneID"></b>.</h4>
+ <h6 style="color:#0080ff;">Warning: the execution will be skipped if it is scheduled
+ to run during the hour that is lost when DST starts in the Spring.
E.g. there is no 2 - 3 AM when PST switches to PDT.</h6>
</div>
@@ -46,7 +65,8 @@
<div class="col-sm-6">
<label class="col-sm-4 control-label" id="min_label">Min</label>
<div class="col-sm-8">
- <input type="text" id="minute_input" value="*" class="form-control" oninput="updateOutput()">
+ <input type="text" id="minute_input" value="*" class="form-control"
+ oninput="updateOutput()">
</div>
<br/> <br/> <br/>
<label class="col-sm-4 control-label" id="hour_label">Hours</label>
@@ -55,7 +75,8 @@
oninput="updateOutput()">
</div>
<br/> <br/> <br/>
- <label class="col-sm-4 control-label" id="dom_label" style="margin-top:-8px">Day of Month</label>
+ <label class="col-sm-4 control-label" id="dom_label" style="margin-top:-8px">Day of
+ Month</label>
<div class="col-sm-8">
<input type="text" id="dom_input" value="?" class="form-control"
oninput="updateOutput()">
@@ -67,7 +88,8 @@
oninput="updateOutput()">
</div>
<br/> <br/> <br/>
- <label class="col-sm-4 control-label" id="dow_label" style="margin-top:-8px">Day of Week</label>
+ <label class="col-sm-4 control-label" id="dow_label" style="margin-top:-8px">Day of
+ Week</label>
<div class="col-sm-8">
<input type="text" id="dow_input" value="*" class="form-control"
oninput="updateOutput()">
@@ -96,17 +118,21 @@
</tr>
</tbody>
</table>
- <p><u><span style="color:Indigo"><a href="http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html">Detailed instructions</a></span>.</u></p>
+ <p><u><span style="color:Indigo"><a
+ href="http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html">Detailed instructions</a></span>.</u>
+ </p>
</div>
</div>
<div class="col-sm-offset-1 col-sm-4">
<div class="input-box">
- <input type="text" id="cron-output" value="* * ? * *" oninput = "updateExpression()" class="form-control">
+ <input type="text" id="cron-output" value="* * ? * *" oninput="updateExpression()"
+ class="form-control">
<span class="unit">0</span>
</div>
</div>
- <button type="button" class="col-sm-offset-1 btn btn-warning" id="clearCron">Reset</button>
+ <button type="button" class="col-sm-offset-1 btn btn-warning" id="clearCron">Reset
+ </button>
<div class="col-xs-12" style="height:20px;"></div>
<div class="col-sm-12" style="background-color:#f5f5f5; border:1px solid #e3e3e3">
@@ -119,7 +145,7 @@
<h3 id="cronTranslate" style="color:DeepSkyBlue; font-style:italic;"></h3>
<div class="col-sm-9 col-sm-offset-3">
- <p class="text-right" id="translationWarning"> </p>
+ <p class="text-right" id="translationWarning"></p>
</div>
</fieldset>
</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/slapanel.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/slapanel.vm
index baf9925..115c21e 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/slapanel.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/slapanel.vm
@@ -14,47 +14,47 @@
* the License.
*#
- <div class="modal modal-wide" id="sla-options">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title">SLA Options</h4>
- </div>
- <div class="modal-body">
- <h4>SLA Alert Emails</h4>
- <fieldset>
- <div class="form-group">
- <label>SLA Alert Emails</label>
- <textarea id="slaEmails" class="form-control"></textarea>
- </div>
- </fieldset>
- <h4>Flow SLA Rules</h4>
- <table class="table table-striped" id="flowRulesTbl">
- <thead>
- <tr>
- <th>Flow/Job</th>
- <th>Sla Rule</th>
- <th>Duration(In HH:MM eg. kill in 10 minutes is 00:10)</th>
- <th>Email Action</th>
- <th>Kill Action</th>
- </tr>
- </thead>
- <tbody>
- <tr id="addRow">
- <td id="addRow-col" colspan="5">
- <span class="addIcon"></span>
- <button type="button" class="btn btn-xs btn-success" id="add-btn">Add Row</button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
- <!--<button type="button" class="btn btn-danger" id="remove-sla-btn">Remove SLA</button>-->
- <button type="button" class="btn btn-primary" id="set-sla-btn">Set/Change SLA</button>
- </div>
+<div class="modal modal-wide" id="sla-options">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title">SLA Options</h4>
+ </div>
+ <div class="modal-body">
+ <h4>SLA Alert Emails</h4>
+ <fieldset>
+ <div class="form-group">
+ <label>SLA Alert Emails</label>
+ <textarea id="slaEmails" class="form-control"></textarea>
</div>
- </div>
+ </fieldset>
+ <h4>Flow SLA Rules</h4>
+ <table class="table table-striped" id="flowRulesTbl">
+ <thead>
+ <tr>
+ <th>Flow/Job</th>
+ <th>Sla Rule</th>
+ <th>Duration(In HH:MM eg. kill in 10 minutes is 00:10)</th>
+ <th>Email Action</th>
+ <th>Kill Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr id="addRow">
+ <td id="addRow-col" colspan="5">
+ <span class="addIcon"></span>
+ <button type="button" class="btn btn-xs btn-success" id="add-btn">Add Row</button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ <!--<button type="button" class="btn btn-danger" id="remove-sla-btn">Remove SLA</button>-->
+ <button type="button" class="btn btn-primary" id="set-sla-btn">Set/Change SLA</button>
</div>
+ </div>
+ </div>
+</div>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/statsPage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/statsPage.vm
index 27be342..8843995 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/statsPage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/statsPage.vm
@@ -16,136 +16,140 @@
<!DOCTYPE html>
<html lang="en">
- <head>
- #parse("azkaban/webapp/servlet/velocity/style.vm")
- #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css" />
- <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
- <script type="text/javascript" src="${context}/js/morris.min.js"></script>
- <script type="text/javascript" src="${context}/js/moment.min.js"></script>
- <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
+<head>
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ <link rel="stylesheet" type="text/css" href="${context}/css/bootstrap-datetimepicker.css"/>
+ <script type="text/javascript" src="${context}/js/raphael.min.js"></script>
+ <script type="text/javascript" src="${context}/js/morris.min.js"></script>
+ <script type="text/javascript" src="${context}/js/moment.min.js"></script>
+ <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
- function refreshMetricList() {
- var requestURL = '/stats';
- var requestData = {
- 'action': 'getAllMetricNames',
- 'executorId': $('#executorName').val()
- };
- var successHandler = function(responseData) {
- if(responseData.error != null) {
- $('#reportedMetric').html(responseData.error);
- } else {
- $('#metricName').empty();
- for(var index = 0; index < responseData.metricList.length; index++) {
- $('#metricName').append($('<option value="' + responseData.metricList[index] +'">' + responseData.metricList[index] + '</option>'));
- }
- }
- };
- $.get(requestURL, requestData, successHandler, 'json');
- }
+ function refreshMetricList() {
+ var requestURL = '/stats';
+ var requestData = {
+ 'action': 'getAllMetricNames',
+ 'executorId': $('#executorName').val()
+ };
+ var successHandler = function (responseData) {
+ if (responseData.error != null) {
+ $('#reportedMetric').html(responseData.error);
+ } else {
+ $('#metricName').empty();
+ for (var index = 0; index < responseData.metricList.length; index++) {
+ $('#metricName').append($('<option value="' + responseData.metricList[index] + '">'
+ + responseData.metricList[index] + '</option>'));
+ }
+ }
+ };
+ $.get(requestURL, requestData, successHandler, 'json');
+ }
- function refreshMetricChart() {
- var requestURL = '/stats';
- var requestData = {
- 'action': 'getMetricHistory',
- 'from': new Date($('#datetimebegin').val()).toUTCString(),
- 'to' : new Date($('#datetimeend').val()).toUTCString(),
- 'metricName': $('#metricName').val(),
- 'useStats': $("#useStats").is(':checked'),
- 'executorId': $('#executorName').val()
- };
- var successHandler = function(responseData) {
- if(responseData.error != null) {
- $('#reportedMetric').html(responseData.error);
- } else {
- var graphDiv = document.createElement('div');
- $('#reportedMetric').html(graphDiv);
+ function refreshMetricChart() {
+ var requestURL = '/stats';
+ var requestData = {
+ 'action': 'getMetricHistory',
+ 'from': new Date($('#datetimebegin').val()).toUTCString(),
+ 'to': new Date($('#datetimeend').val()).toUTCString(),
+ 'metricName': $('#metricName').val(),
+ 'useStats': $("#useStats").is(':checked'),
+ 'executorId': $('#executorName').val()
+ };
+ var successHandler = function (responseData) {
+ if (responseData.error != null) {
+ $('#reportedMetric').html(responseData.error);
+ } else {
+ var graphDiv = document.createElement('div');
+ $('#reportedMetric').html(graphDiv);
- Morris.Line({
- element: graphDiv,
- data: responseData.data,
- xkey: 'timestamp',
- ykeys: ['value'],
- labels: [$('#metricName').val()]
- });
- }
- };
- $.get(requestURL, requestData, successHandler, 'json');
- }
+ Morris.Line({
+ element: graphDiv,
+ data: responseData.data,
+ xkey: 'timestamp',
+ ykeys: ['value'],
+ labels: [$('#metricName').val()]
+ });
+ }
+ };
+ $.get(requestURL, requestData, successHandler, 'json');
+ }
- $(document).ready(function () {
- $('#datetimebegin').datetimepicker();
- $('#datetimeend').datetimepicker();
- $('#datetimebegin').on('change.dp', function(e) {
- $('#datetimeend').data('DateTimePicker').setStartDate(e.date);
- });
- $('#datetimeend').on('change.dp', function(e) {
- $('#datetimebegin').data('DateTimePicker').setEndDate(e.date);
- });
- $('#retrieve').click(refreshMetricChart);
- $('#executorName').click(refreshMetricList);
- });
+ $(document).ready(function () {
+ $('#datetimebegin').datetimepicker();
+ $('#datetimeend').datetimepicker();
+ $('#datetimebegin').on('change.dp', function (e) {
+ $('#datetimeend').data('DateTimePicker').setStartDate(e.date);
+ });
+ $('#datetimeend').on('change.dp', function (e) {
+ $('#datetimebegin').data('DateTimePicker').setEndDate(e.date);
+ });
+ $('#retrieve').click(refreshMetricChart);
+ $('#executorName').click(refreshMetricList);
+ });
- </script>
- </head>
- <body>
- #set ($current_page="Statistics")
- #parse ("azkaban/webapp/servlet/velocity/nav.vm")
- #if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
- #else
- ## Page header.
- <div class="az-page-header">
- <div class="container-full">
- <div class="row">
- <div class="header-title" style="width: 17%;">
- <h1><a href="${context}/stats">Statistics</a></h1>
- </div>
- <div class="header-control" style="width: 1300px; padding-top: 5px;">
- <form id="metric-form" method="get">
- <label for="executorLabel" >Executor</label>
- #if (!$executorList.isEmpty())
- <select id="executorName" name="executorName" style="width:200px">
- #foreach ($executor in $executorList)
- <option value="${executor.getId()}" style="width:200px">${executor.getHost()}:${executor.getPort()}</option>
- #end
- </select>
- #end
- <label for="metricLabel" >Metric</label>
- #if (!$metricList.isEmpty())
- <select id="metricName" name="metricName" style="width:200px">
- #foreach ($metric in $metricList)
- <option value="${metric}" style="width:200px">${metric}</option>
- #end
- </select>
- #end
- <label for="datetimebegin" >Between</label>
- <input type="text" id="datetimebegin" value="" class="ui-datetime-container" style="width:150px">
- <label for="datetimeend" >and</label>
- <input type="text" id="datetimeend" value="" class="ui-datetime-container" style="width:150px">
- <input type="checkbox" name="useStats" id="useStats" value="true"> useStats
- <input type="button" id="retrieve" value="Retrieve" class="btn btn-success" >
- </div>
- </div>
- </form>
- </div>
+ </script>
+</head>
+<body>
+ #set ($current_page="Statistics")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
+ ## Page header.
+ <div class="az-page-header">
+ <div class="container-full">
+ <div class="row">
+ <div class="header-title" style="width: 17%;">
+ <h1><a href="${context}/stats">Statistics</a></h1>
+ </div>
+ <div class="header-control" style="width: 1300px; padding-top: 5px;">
+ <form id="metric-form" method="get">
+ <label for="executorLabel">Executor</label>
+ #if (!$executorList.isEmpty())
+ <select id="executorName" name="executorName" style="width:200px">
+ #foreach ($executor in $executorList)
+ <option value="${executor.getId()}" style="width:200px">${executor.getHost()}
+ :${executor.getPort()}</option>
+ #end
+ </select>
+ #end
+ <label for="metricLabel">Metric</label>
+ #if (!$metricList.isEmpty())
+ <select id="metricName" name="metricName" style="width:200px">
+ #foreach ($metric in $metricList)
+ <option value="${metric}" style="width:200px">${metric}</option>
+ #end
+ </select>
+ #end
+ <label for="datetimebegin">Between</label>
+ <input type="text" id="datetimebegin" value="" class="ui-datetime-container"
+ style="width:150px">
+ <label for="datetimeend">and</label>
+ <input type="text" id="datetimeend" value="" class="ui-datetime-container"
+ style="width:150px">
+ <input type="checkbox" name="useStats" id="useStats" value="true"> useStats
+ <input type="button" id="retrieve" value="Retrieve" class="btn btn-success">
+ </div>
</div>
+ </form>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="container-full">
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ <div class="row">
+ <div id="reportedMetric" style="padding: 60px 10px 10px 10px;height: 750px;">
</div>
- </div>
- <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row">
- <div id="reportedMetric" style="padding: 60px 10px 10px 10px;height: 750px;">
- </div>
- </div>
- <!-- /row -->
- #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
- </div>
- <!-- /container-full -->
- #end
- </body>
- <html>
+ </div>
+ <!-- /row -->
+ #parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
+ </div>
+ <!-- /container-full -->
+ #end
+</body>
+<html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/style.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/style.vm
index 381b5e4..acecd07 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/style.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/style.vm
@@ -14,27 +14,29 @@
* the License.
*#
- <meta charset="utf-8">
- <title>#appname()</title>
+<meta charset="utf-8">
+<title>#appname()</title>
- <link rel="shortcut icon" href="${context}/favicon.ico" />
- <!-- Bootstrap core CSS -->
- <link href="/css/bootstrap.css" rel="stylesheet">
- <link href="/css/azkaban.css" rel="stylesheet">
- <style type="text/css">
- .navbar-enviro .navbar-enviro-name {
- color: ${azkaban_color};
- }
- .navbar-inverse {
- border-top: 5px solid ${azkaban_color};
- }
- .navbar-inverse .navbar-nav > .active >a {
- border-bottom: 1px solid ${azkaban_color};
- }
- </style>
+<link rel="shortcut icon" href="${context}/favicon.ico"/>
+<!-- Bootstrap core CSS -->
+<link href="/css/bootstrap.css" rel="stylesheet">
+<link href="/css/azkaban.css" rel="stylesheet">
+<style type="text/css">
+ .navbar-enviro .navbar-enviro-name {
+ color: ${azkaban_color};
+ }
- <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="/js/html5shiv.js"></script>
- <script src="/js/respond.min.js"></script>
- <![endif]-->
+ .navbar-inverse {
+ border-top: 5px solid ${azkaban_color};
+ }
+
+ .navbar-inverse .navbar-nav > .active > a {
+ border-bottom: 1px solid ${azkaban_color};
+ }
+</style>
+
+<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+<!--[if lt IE 9]>
+ <script src="/js/html5shiv.js"></script>
+ <script src="/js/respond.min.js"></script>
+<![endif]-->
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/svgflowincludes.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/svgflowincludes.vm
index c669d26..2d290a5 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/svgflowincludes.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/svgflowincludes.vm
@@ -14,24 +14,24 @@
* the License.
*#
- <script type="text/javascript" src="${context}/js/jquery.svg.min.js"></script>
- <script type="text/javascript" src="${context}/js/jquery.svganim.min.js"></script>
- <script type="text/javascript" src="${context}/js/jquery.svgfilter.min.js"></script>
+<script type="text/javascript" src="${context}/js/jquery.svg.min.js"></script>
+<script type="text/javascript" src="${context}/js/jquery.svganim.min.js"></script>
+<script type="text/javascript" src="${context}/js/jquery.svgfilter.min.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/common.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/common.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/date.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/ajax.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/svgutils.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/svg-navigate.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/layout.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/svgutils.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/svg-navigate.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/layout.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/context-menu.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/job-status.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/view/context-menu.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/job-status.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/util/flow-loader.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/job-list.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/model/svg-graph.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/svg-graph.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/util/flow-loader.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/view/job-list.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/model/svg-graph.js"></script>
+<script type="text/javascript" src="${context}/js/azkaban/view/svg-graph.js"></script>
- <link rel="stylesheet" type="text/css" href="${context}/css/azkaban-graph.css" />
+<link rel="stylesheet" type="text/css" href="${context}/css/azkaban-graph.css"/>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/title.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/title.vm
index 1d13dbc..8cf5066 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/title.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/title.vm
@@ -13,8 +13,8 @@
* License for the specific language governing permissions and limitations under
* the License.
*#
- <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>
+<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>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/triggerspage.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/triggerspage.vm
index 7e5afcf..4e7bf8d 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/triggerspage.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/triggerspage.vm
@@ -16,63 +16,65 @@
<!DOCTYPE html>
<html lang="en">
- <head>
+<head>
-#parse("azkaban/webapp/servlet/velocity/style.vm")
-#parse("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse("azkaban/webapp/servlet/velocity/style.vm")
+ #parse("azkaban/webapp/servlet/velocity/javascript.vm")
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css" />
- <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css" />
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui-1.10.1.custom.css"/>
+ <link rel="stylesheet" type="text/css" href="${context}/css/jquery-ui.css"/>
- <script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-1.10.1.custom.js"></script>
- <script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-timepicker-addon.js"></script>
- <script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-sliderAccess.js"></script>
+ <script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-1.10.1.custom.js"></script>
+ <script type="text/javascript"
+ src="${context}/js/jqueryui/jquery-ui-timepicker-addon.js"></script>
+ <script type="text/javascript" src="${context}/js/jqueryui/jquery-ui-sliderAccess.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
- <script type="text/javascript" src="${context}/js/azkaban/view/triggers.js"></script>
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- var errorMessage = null;
- var successMessage = null;
- </script>
- </head>
- <body>
+ <script type="text/javascript" src="${context}/js/azkaban/view/table-sort.js"></script>
+ <script type="text/javascript" src="${context}/js/azkaban/view/triggers.js"></script>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ var errorMessage = null;
+ var successMessage = null;
+ </script>
+</head>
+<body>
-#set ($current_page="triggers")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ #set ($current_page="triggers")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
- <div class="az-page-header">
- <div class="container-full">
- <h1>All Triggers</h1>
- </div>
+ <div class="az-page-header">
+ <div class="container-full">
+ <h1>All Triggers</h1>
</div>
+ </div>
- <div class="container-full">
+ <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
- <div class="row">
- <div class="col-xs-12">
- <table id="triggersTbl" class="table table-striped table-bordered table-condensed table-hover">
- <thead>
- <tr>
- <th>ID</th>
- <th>Source</th>
- <th>Submitted By</th>
- <th>Description</th>
- <th>Status</th>
- <!--th colspan="2" class="action ignoresort">Action</th-->
- </tr>
- </thead>
- <tbody>
- #if ($triggers)
- #foreach ($trigger in $triggers)
+ <div class="row">
+ <div class="col-xs-12">
+ <table id="triggersTbl"
+ class="table table-striped table-bordered table-condensed table-hover">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Source</th>
+ <th>Submitted By</th>
+ <th>Description</th>
+ <th>Status</th>
+ <!--th colspan="2" class="action ignoresort">Action</th-->
+ </tr>
+ </thead>
+ <tbody>
+ #if ($triggers)
+ #foreach ($trigger in $triggers)
<tr>
<td>${trigger.triggerId}</td>
<td>${trigger.source}</td>
@@ -81,15 +83,17 @@
<td>${trigger.getStatus()}</td>
<!--td><button id="expireTriggerBtn" onclick="expireTrigger(${trigger.triggerId})" >Expire Trigger</button></td-->
</tr>
- #end
- #else
- <tr><td class="last">No Trigger Found</td></tr>
- #end
- </tbody>
- </table>
- </div>
+ #end
+ #else
+ <tr>
+ <td class="last">No Trigger Found</td>
+ </tr>
+ #end
+ </tbody>
+ </table>
</div>
</div>
-#end
- </body>
+ </div>
+ #end
+</body>
</html>
diff --git a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/viewer.vm b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/viewer.vm
index 7bb9000..011dfca 100644
--- a/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/viewer.vm
+++ b/azkaban-web-server/src/main/resources/azkaban/webapp/servlet/velocity/viewer.vm
@@ -16,39 +16,40 @@
<!DOCTYPE html>
<html>
- <head>
+<head>
-#parse ("azkaban/webapp/servlet/velocity/style.vm")
-#parse ("azkaban/webapp/servlet/velocity/javascript.vm")
+ #parse ("azkaban/webapp/servlet/velocity/style.vm")
+ #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
- <script type="text/javascript">
- var contextURL = "${context}";
- var currentTime = ${currentTime};
- var timezone = "${timezone}";
- </script>
- <style>
- .logout-label {
- float: right;
- margin: 3px;
- }
- .logout-submit {
- float: right;
- }
- </style>
- </head>
- <body>
+ <script type="text/javascript">
+ var contextURL = "${context}";
+ var currentTime = ${currentTime};
+ var timezone = "${timezone}";
+ </script>
+ <style>
+ .logout-label {
+ float: right;
+ margin: 3px;
+ }
-#set ($current_page="viewer")
-#parse ("azkaban/webapp/servlet/velocity/nav.vm")
+ .logout-submit {
+ float: right;
+ }
+ </style>
+</head>
+<body>
-#if ($errorMsg)
- #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
-#else
- <div class="container-full">
- #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
+ #set ($current_page="viewer")
+ #parse ("azkaban/webapp/servlet/velocity/nav.vm")
+
+ #if ($errorMsg)
+ #parse ("azkaban/webapp/servlet/velocity/errormsg.vm")
+ #else
+ <div class="container-full">
+ #parse ("azkaban/webapp/servlet/velocity/alerts.vm")
#parse ($viewervm)
- </div>
-#end
- </body>
+ </div>
+ #end
+</body>
</html>