Configure Tower

adding changes to app and index for configure tower files. also included are updates to the scheduler widget for system jobs
This commit is contained in:
Jared Tabor
2014-11-13 11:29:42 -05:00
parent 6a08738071
commit dfeaea0148
7 changed files with 222 additions and 45 deletions

View File

@@ -119,7 +119,9 @@ angular.module('Tower', [
'SocketHelper', 'SocketHelper',
'AboutAnsibleHelpModal', 'AboutAnsibleHelpModal',
'SurveyQuestionFormDefinition', 'SurveyQuestionFormDefinition',
'PortalJobsListDefinition' 'PortalJobsListDefinition',
'ConfigureTowerHelper',
'ConfigureTowerJobsListDefinition'
]) ])
.constant('AngularScheduler.partials', urlPrefix + 'lib/angular-scheduler/lib/') .constant('AngularScheduler.partials', urlPrefix + 'lib/angular-scheduler/lib/')
@@ -432,9 +434,9 @@ angular.module('Tower', [
}]) }])
.run(['$compile', '$cookieStore', '$rootScope', '$log', 'CheckLicense', '$location', 'Authorization', 'LoadBasePaths', 'Timer', 'ClearScope', 'HideStream', 'Socket', .run(['$compile', '$cookieStore', '$rootScope', '$log', 'CheckLicense', '$location', 'Authorization', 'LoadBasePaths', 'Timer', 'ClearScope', 'HideStream', 'Socket',
'LoadConfig', 'Store', 'ShowSocketHelp', 'LicenseViewer', 'AboutAnsibleHelp', 'LoadConfig', 'Store', 'ShowSocketHelp', 'LicenseViewer', 'AboutAnsibleHelp', 'ConfigureTower',
function ($compile, $cookieStore, $rootScope, $log, CheckLicense, $location, Authorization, LoadBasePaths, Timer, ClearScope, HideStream, Socket, function ($compile, $cookieStore, $rootScope, $log, CheckLicense, $location, Authorization, LoadBasePaths, Timer, ClearScope, HideStream, Socket,
LoadConfig, Store, ShowSocketHelp, LicenseViewer, AboutAnsibleHelp) { LoadConfig, Store, ShowSocketHelp, LicenseViewer, AboutAnsibleHelp, ConfigureTower) {
var e, html, sock, checkCount = 0; var e, html, sock, checkCount = 0;
@@ -586,6 +588,12 @@ angular.module('Tower', [
$location.path('/home/'); $location.path('/home/');
}; };
$rootScope.configureTower = function(){
ConfigureTower({
scope: $rootScope
});
};
html = "<a href=\"\" ng-click=\"socketHelp()\" aw-pop-over=\"{{ socketTip }}\" aw-pop-over-watch=\"socketTip\" data-placement=\"bottom\" data-trigger=\"hover\" " + html = "<a href=\"\" ng-click=\"socketHelp()\" aw-pop-over=\"{{ socketTip }}\" aw-pop-over-watch=\"socketTip\" data-placement=\"bottom\" data-trigger=\"hover\" " +
"data-popover-title=\"Live Events\" data-container=\"body\" style=\"font-size: 10px;\"><i class=\"fa icon-socket-{{ socketStatus }}\"></i></a>"; "data-popover-title=\"Live Events\" data-container=\"body\" style=\"font-size: 10px;\"><i class=\"fa icon-socket-{{ socketStatus }}\"></i></a>";
e = angular.element(document.getElementById('socket-beacon-div')); e = angular.element(document.getElementById('socket-beacon-div'));

View File

@@ -671,6 +671,7 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
return function (params) { return function (params) {
var scope = params.scope, var scope = params.scope,
id = params.id, id = params.id,
system_job = params.system_job || false,
base = $location.path().replace(/^\//, '').split('/')[0], base = $location.path().replace(/^\//, '').split('/')[0],
url, url,
job_template, job_template,

View File

@@ -186,6 +186,126 @@ a:focus {
} }
} }
#configure-schedules-tab {
position: relative;
top: 0;
left: 0;
}
#configure-schedules-overlay {
display: none;
position: absolute;
top: 0;
left: 0;
z-index: 100;
background-color: @black;
opacity: 0;
}
#configure-schedules-buttons{
height: 46px;
padding-top: 10px;
text-align: right;
border-top: 1px solid #A6C9E2;
margin-top: 5px;
a {
margin-right: 8px;
font-size: 12px;
}
}
#configure-schedules-form-container {
position: absolute;
top: 0;
left: 0;
display: none;
border: 1px solid #e5e5e5;
border-radius: 4px;
box-shadow: 3px 3px 6px 0 #666;
padding: 0 10px 15px 8px;
background-color: @white;
z-index: 200;
}
#configure-schedules-title {
border-bottom: 1px solid #e5e5e5;
padding-bottom: 8px;
margin-bottom: 10px;
margin-top: 0;
h4 {
display: inline-block;
margin: 0;
}
button {
display: inline-block;
}
}
#configure-schedules-list {
overflow-x: hidden;
overflow-y: auto;
}
#configure-schedules-overlay {
display: none;
position: absolute;
top: 0;
left: 0;
z-index: 100;
background-color: @black;
opacity: 0;
}
#configure-tower-dialog, #configure-schedules-form-container {
display: none;
overflow-x: hidden;
overflow-y: auto;
padding-top: 25px;
form {
width: 100%;
}
.sublabel {
font-weight: normal;
}
#occurrence-label {
display: inline-block;
}
.occurrence-list {
border: 1px solid @well-border;
padding: 8px 10px;
border-radius: 4px;
background-color: @well;
list-style: none;
margin-bottom: 5px;
}
#date-choice {
display: inline-block;
margin-left: 15px;
font-size: 12px;
.label-inline {
display: inline-block;
vertical-align: middle;
}
input {
margin-bottom: 2px;
height: 11px;
width: 10px;
}
.label-inline:first-child {
padding-bottom: 2px;
margin-right: 10px;
}
.label-inline:nth-child(3) {
margin-right: 10px;
}
}
}
#home_groups_table .actions .cancel { padding-right: 3px; } #home_groups_table .actions .cancel { padding-right: 3px; }
.success-badge { .success-badge {

View File

@@ -22,6 +22,13 @@
<div class="error" ng-show="scheduler_form.schedulerName.$dirty && scheduler_form.schedulerName.$error.required">Schedule name is required</div> <div class="error" ng-show="scheduler_form.schedulerName.$dirty && scheduler_form.schedulerName.$error.required">Schedule name is required</div>
</div> </div>
<div class="form-group" ng-show="cleanupJob">
<label><span class="red-text">*</span>Days of data to keep</label>
<input type="number" class="form-control input-sm" name="schedulerPurgeDays" id="schedulerPurgeDays" min="1" ng-model="schedulerPurgeDays" required placeholder="Days of data to keep">
<div class="error" ng-show="scheduler_form.schedulerPurgeDays.$dirty && scheduler_form.schedulerPurgeDays.$error.required">A value is required</div>
<div class="error" ng-show="scheduler_form.schedulerPurgeDays.$error.number">This is not valid number</div>
</div>
<div class="row"> <div class="row">
<div class="col-md-5"> <div class="col-md-5">
<div class="form-group"> <div class="form-group">

View File

@@ -341,6 +341,11 @@ angular.module('AngularScheduler', ['underscore'])
$('#schedulerName').addClass('ng-dirty'); $('#schedulerName').addClass('ng-dirty');
validity = false; validity = false;
} }
if(this.scope.cleanupJob===true && !this.scope.scheduler_form.schedulerPurgeDays.$valid){
this.scope.scheduler_form.schedulerPurgeDays.$dirty = true;
$('#schedulerPurgeDays').addClass('ng-dirty');
validity = false;
}
if (this.scope.schedulerEnd.value === 'on') { if (this.scope.schedulerEnd.value === 'on') {
if (!/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)) { if (!/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)) {
this.scope.scheduler_form.schedulerEndDt.$pristine = false; this.scope.scheduler_form.schedulerEndDt.$pristine = false;
@@ -879,6 +884,7 @@ angular.module('AngularScheduler', ['underscore'])
defaultDay = $filter('schZeroPad')(defaultDate.getDate(), 2), defaultDay = $filter('schZeroPad')(defaultDate.getDate(), 2),
defaultDateStr = defaultMonth + '/' + defaultDay + '/' + defaultDate.getFullYear(); defaultDateStr = defaultMonth + '/' + defaultDay + '/' + defaultDate.getFullYear();
scope.schedulerName = ''; scope.schedulerName = '';
scope.schedulerPurgeDays = 30;
scope.weekDays = []; scope.weekDays = [];
scope.schedulerStartHour = '00'; scope.schedulerStartHour = '00';
scope.schedulerStartMinute = '00'; scope.schedulerStartMinute = '00';

View File

@@ -106,6 +106,7 @@
<script src="{{ STATIC_URL }}js/forms/LogViewerStatus.js"></script> <script src="{{ STATIC_URL }}js/forms/LogViewerStatus.js"></script>
<script src="{{ STATIC_URL }}js/forms/LogViewerOptions.js"></script> <script src="{{ STATIC_URL }}js/forms/LogViewerOptions.js"></script>
<script src="{{ STATIC_URL }}js/lists/Users.js"></script> <script src="{{ STATIC_URL }}js/lists/Users.js"></script>
<script src="{{ STATIC_URL }}js/lists/ConfigureTowerJobs.js"></script>
<script src="{{ STATIC_URL }}js/lists/Organizations.js"></script> <script src="{{ STATIC_URL }}js/lists/Organizations.js"></script>
<script src="{{ STATIC_URL }}js/lists/Admins.js"></script> <script src="{{ STATIC_URL }}js/lists/Admins.js"></script>
<script src="{{ STATIC_URL }}js/lists/Inventories.js"></script> <script src="{{ STATIC_URL }}js/lists/Inventories.js"></script>
@@ -131,6 +132,7 @@
<script src="{{ STATIC_URL }}js/lists/ScheduledJobs.js"></script> <script src="{{ STATIC_URL }}js/lists/ScheduledJobs.js"></script>
<script src="{{ STATIC_URL }}js/helpers/SocketHelper.js"></script> <script src="{{ STATIC_URL }}js/helpers/SocketHelper.js"></script>
<script src="{{ STATIC_URL }}js/helpers/LoadConfig.js"></script> <script src="{{ STATIC_URL }}js/helpers/LoadConfig.js"></script>
<script src="{{ STATIC_URL }}js/helpers/ConfigureTower.js"></script>
<script src="{{ STATIC_URL }}js/helpers/refresh-related.js"></script> <script src="{{ STATIC_URL }}js/helpers/refresh-related.js"></script>
<script src="{{ STATIC_URL }}js/helpers/related-search.js"></script> <script src="{{ STATIC_URL }}js/helpers/related-search.js"></script>
<script src="{{ STATIC_URL }}js/helpers/refresh.js"></script> <script src="{{ STATIC_URL }}js/helpers/refresh.js"></script>
@@ -194,6 +196,7 @@
<a href="" id="mobile_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li> <a href="" id="mobile_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
<a href="" id="mobile_view_user" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li> <a href="" id="mobile_view_user" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
<a id="main_configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
<a href="https://ansibleworks.zendesk.com/anonymous_requests/new" id="mobile_contact_support" target="_blank" ng-hide="portalMode===true">Contact Support</a></li> <a href="https://ansibleworks.zendesk.com/anonymous_requests/new" id="mobile_contact_support" target="_blank" ng-hide="portalMode===true">Contact Support</a></li>
<a id="mobile_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li> <a id="mobile_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
<a href="#portal" id="mobile_portal_link" ng-hide="portalMode===true">Portal Mode</a></li> <a href="#portal" id="mobile_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
@@ -234,8 +237,9 @@
<ul class="nav navbar-nav" id="account-submenu"> <ul class="nav navbar-nav" id="account-submenu">
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li> <li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li> <li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
<li><a id="main_configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li> <li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li> <li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
<li><a href="#portal" id="main_view_portal_link" >Portal Mode</a></li> <li><a href="#portal" id="main_view_portal_link" >Portal Mode</a></li>
<li><a id="main_view_license" href="" ng-click="viewLicense()" ng-hide="portalMode===true">View License</a></li> <li><a id="main_view_license" href="" ng-click="viewLicense()" ng-hide="portalMode===true">View License</a></li>
<li><a id="main_view_leave_portal" href="" ng-click="leavePortal()" ng-show="portalMode===true">Exit Portal</a></li> <li><a id="main_view_leave_portal" href="" ng-click="leavePortal()" ng-show="portalMode===true">Exit Portal</a></li>
@@ -252,6 +256,7 @@
<ul class="dropdown-menu" id="account-submenu"> <ul class="dropdown-menu" id="account-submenu">
<li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li> <li><a href="" id="main_about" ng-click ="viewAboutTower()" ng-hide="portalMode===true">About Tower</a> </li>
<li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li> <li><a id="main_view_user" href="" ng-click="viewCurrentUser()" ng-hide="portalMode===true">Account Settings</a></li>
<li><a id="configure_tower" ng-click="configureTower()" ng-show="user_is_superuser" href="" ng-hide="portalMode===true">Configure Tower</a></li>
<li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li> <li><a id="main_contact_support" target="_blank" href="https://ansibleworks.zendesk.com/anonymous_requests/new" ng-hide="portalMode===true">Contact Support</a></li>
<li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li> <li><a id="main_munin" target="_blank" ng-show="user_is_superuser" href="/munin" ng-hide="portalMode===true">Monitor Tower</a></li>
<li><a href="#portal" id="main_view_portal_link" ng-hide="portalMode===true">Portal Mode</a></li> <li><a href="#portal" id="main_view_portal_link" ng-hide="portalMode===true">Portal Mode</a></li>
@@ -386,6 +391,36 @@
<div id="help-modal-dialog" style="display: none;"></div> <div id="help-modal-dialog" style="display: none;"></div>
<div id="license-modal-dialog" style="display: none;"></div> <div id="license-modal-dialog" style="display: none;"></div>
<div id="about-modal-dialog" style="display: none;" ng-include="'static/partials/cowsay-about.html '"></div> <div id="about-modal-dialog" style="display: none;" ng-include="'static/partials/cowsay-about.html '"></div>
<div id='configure-tower-dialog' style="display:none">
<div id="configure-jobs" > </div>
<div class="tab-pane" id="configure-schedules-tab">
<div id="configure-schedules-overlay"></div>
<div id="configure-schedules-list"></div>
<div id="configure-schedules-form-container">
<div id="configure-schedules-title">
<h4 ng-bind="schedulesTitle"></h4>
<button type="button" class="close pull-right" ng-click="cancelScheduleForm()">x</button>
</div>
<div id="configure-schedules-form-container-body">
<div id="configure-schedules-form"></div>
<div id="configure-schedules-detail"></div>
</div>
<div id="configure-schedules-buttons" >
<a id="configure-schedules-flip-link" ng-show="formShowing" ng-click="showScheduleDetail()" href=""><i class="fa fa-search-plus"></i> View Details</a>
<a id="configure-schedules-flip-link" ng-show="!formShowing" ng-click="showScheduleDetail()" href=""><i class="fa fa-arrow-circle-left"></i> Back to options</a>
<button type="button" class="btn btn-default btn-sm" id="configure-reset-button" ng-click="cancelScheduleForm()"><i class="fa fa-times"></i> Cancel</button>
<button type="button" class="btn btn-primary btn-sm" id="configure-save-button" ng-click="saveScheduleForm()"><i class="fa fa-check"></i> Save</button>
</div>
</div>
</div>
</div>
<div id="prompt-for-days" style="display:none">
<form name="prompt_for_days_form" id="prompt_for_days_form">
How many days of data would you like to <b>keep</b>? <br>
<input type="number" min="1" id="days_to_keep" name="days_to_keep" value="30" ng-required="true" class="form-control ng-pristine ng-invalid-required ng-invalid" style="margin-top:10px;">
<div class="error" ng-show="prompt_for_days_form.days_to_keep.$dirty && copy_form.new_copy_name.$error.required">A value is required!</div></input>
</form>
</div>
</div><!-- container --> </div><!-- container -->