|
@@ -394,6 +394,10 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
<div class="jb-panel" data-bind="template: { name: 'queries-page${ SUFFIX }' }"></div>
|
|
<div class="jb-panel" data-bind="template: { name: 'queries-page${ SUFFIX }' }"></div>
|
|
|
<!-- /ko -->
|
|
<!-- /ko -->
|
|
|
|
|
|
|
|
|
|
+ <!-- ko if: mainType() == 'beats' -->
|
|
|
|
|
+ <div class="jb-panel" data-bind="template: { name: 'beats-page${ SUFFIX }' }"></div>
|
|
|
|
|
+ <!-- /ko -->
|
|
|
|
|
+
|
|
|
<!-- ko if: mainType() == 'workflows' -->
|
|
<!-- ko if: mainType() == 'workflows' -->
|
|
|
<!-- ko if: type() == 'workflow' -->
|
|
<!-- ko if: type() == 'workflow' -->
|
|
|
<div class="jb-panel" data-bind="template: { name: 'workflow-page${ SUFFIX }' }"></div>
|
|
<div class="jb-panel" data-bind="template: { name: 'workflow-page${ SUFFIX }' }"></div>
|
|
@@ -1666,6 +1670,83 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+<script type="text/html" id="beats-page${ SUFFIX }">
|
|
|
|
|
+ <div class="row-fluid">
|
|
|
|
|
+ <div data-bind="css: {'span2': !$root.isMini(), 'span12': $root.isMini() }">
|
|
|
|
|
+ <div class="sidebar-nav">
|
|
|
|
|
+ <ul class="nav nav-list">
|
|
|
|
|
+ <li class="nav-header">${ _('Id') }</li>
|
|
|
|
|
+ <li class="break-word"><span data-bind="text: id"></span></li>
|
|
|
|
|
+ <!-- ko if: doc_url -->
|
|
|
|
|
+ <li class="nav-header">${ _('Document') }</li>
|
|
|
|
|
+ <li>
|
|
|
|
|
+ <a data-bind="hueLink: doc_url" href="javascript: void(0);" title="${ _('Open in editor') }">
|
|
|
|
|
+ <span data-bind="text: name"></span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+ </li>
|
|
|
|
|
+ <!-- /ko -->
|
|
|
|
|
+ <!-- ko ifnot: doc_url -->
|
|
|
|
|
+ <li class="nav-header">${ _('Name') }</li>
|
|
|
|
|
+ <li><span data-bind="text: name"></span></li>
|
|
|
|
|
+ <!-- /ko -->
|
|
|
|
|
+ <li class="nav-header">${ _('Status') }</li>
|
|
|
|
|
+ <li><span data-bind="text: status"></span></li>
|
|
|
|
|
+ <li class="nav-header">${ _('User') }</li>
|
|
|
|
|
+ <li><span data-bind="text: user"></span></li>
|
|
|
|
|
+ <li class="nav-header">${ _('Progress') }</li>
|
|
|
|
|
+ <li><span data-bind="text: progress"></span>%</li>
|
|
|
|
|
+ <li>
|
|
|
|
|
+ <div class="progress-job progress" style="background-color: #FFF; width: 100%" data-bind="css: {'progress-danger': apiStatus() === 'FAILED', 'progress-warning': apiStatus() === 'RUNNING', 'progress-success': apiStatus() === 'SUCCEEDED' }">
|
|
|
|
|
+ <div class="bar" data-bind="style: {'width': progress() + '%'}"></div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </li>
|
|
|
|
|
+ <li class="nav-header">${ _('Duration') }</li>
|
|
|
|
|
+ <li><span data-bind="text: duration().toHHMMSS()"></span></li>
|
|
|
|
|
+ <li class="nav-header">${ _('Submitted') }</li>
|
|
|
|
|
+ <li><span data-bind="moment: {data: submitted, format: 'LLL'}"></span></li>
|
|
|
|
|
+ </ul>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div data-bind="css:{'span10': !$root.isMini(), 'span12 no-margin': $root.isMini() }">
|
|
|
|
|
+
|
|
|
|
|
+ <ul class="nav nav-pills margin-top-20">
|
|
|
|
|
+ <li>
|
|
|
|
|
+ <a href="#livy-session-page-statements${ SUFFIX }" data-bind="click: function(){ fetchProfile('properties'); $('a[href=\'#livy-session-page-statements${ SUFFIX }\']').tab('show'); }">
|
|
|
|
|
+ ${ _('Properties') }</a>
|
|
|
|
|
+ </li>
|
|
|
|
|
+ </ul>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="clearfix"></div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="tab-content">
|
|
|
|
|
+ <div class="tab-pane active" id="livy-session-page-statements${ SUFFIX }">
|
|
|
|
|
+ <table id="actionsTable" class="datatables table table-condensed">
|
|
|
|
|
+ <thead>
|
|
|
|
|
+ <tr>
|
|
|
|
|
+ <th>${_('Id')}</th>
|
|
|
|
|
+ <th>${_('State')}</th>
|
|
|
|
|
+ <th>${_('Output')}</th>
|
|
|
|
|
+ </tr>
|
|
|
|
|
+ </thead>
|
|
|
|
|
+ <tbody data-bind="foreach: properties['statements']">
|
|
|
|
|
+ <tr data-bind="click: function() { $root.job().id(id); $root.job().fetchJob(); }" class="pointer">
|
|
|
|
|
+ <td>
|
|
|
|
|
+ <a data-bind="hueLink: '/jobbrowser/jobs/' + id(), clickBubble: false">
|
|
|
|
|
+ <i class="fa fa-tasks"></i>
|
|
|
|
|
+ </a>
|
|
|
|
|
+ </td>
|
|
|
|
|
+ <td data-bind="text: state"></td>
|
|
|
|
|
+ <td data-bind="text: output"></td>
|
|
|
|
|
+ </tr>
|
|
|
|
|
+ </tbody>
|
|
|
|
|
+ </table>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
<script type="text/html" id="job-actions${ SUFFIX }">
|
|
<script type="text/html" id="job-actions${ SUFFIX }">
|
|
|
<div class="btn-group">
|
|
<div class="btn-group">
|
|
|
<!-- ko if: hasResume -->
|
|
<!-- ko if: hasResume -->
|
|
@@ -3290,6 +3371,9 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
var schedulerExtraInterfaceCondition = function () {
|
|
var schedulerExtraInterfaceCondition = function () {
|
|
|
return '${ is_mini }' == 'False' && schedulerInterfaceCondition();
|
|
return '${ is_mini }' == 'False' && schedulerInterfaceCondition();
|
|
|
};
|
|
};
|
|
|
|
|
+ var schedulerBeatInterfaceCondition = function () {
|
|
|
|
|
+ return self.appConfig() && self.appConfig()['scheduler'] && self.appConfig()['scheduler']['interpreter_names'].indexOf('celery-beat') != -1;
|
|
|
|
|
+ };
|
|
|
var livyInterfaceCondition = function () {
|
|
var livyInterfaceCondition = function () {
|
|
|
return '${ is_mini }' == 'False' && self.appConfig() && self.appConfig()['editor'] && self.appConfig()['editor']['interpreter_names'].indexOf('pyspark') != -1 && (!self.cluster() || self.cluster()['type'].indexOf('altus') == -1);
|
|
return '${ is_mini }' == 'False' && self.appConfig() && self.appConfig()['editor'] && self.appConfig()['editor']['interpreter_names'].indexOf('pyspark') != -1 && (!self.cluster() || self.cluster()['type'].indexOf('altus') == -1);
|
|
|
};
|
|
};
|
|
@@ -3305,6 +3389,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
{'interface': 'dataware2-clusters', 'label': '${ _ko('Warehouses') }', 'condition': dataWarehouse2InterfaceCondition},
|
|
{'interface': 'dataware2-clusters', 'label': '${ _ko('Warehouses') }', 'condition': dataWarehouse2InterfaceCondition},
|
|
|
{'interface': 'engines', 'label': '${ _ko('') }', 'condition': enginesInterfaceCondition},
|
|
{'interface': 'engines', 'label': '${ _ko('') }', 'condition': enginesInterfaceCondition},
|
|
|
{'interface': 'queries', 'label': '${ _ko('Queries') }', 'condition': queryInterfaceCondition},
|
|
{'interface': 'queries', 'label': '${ _ko('Queries') }', 'condition': queryInterfaceCondition},
|
|
|
|
|
+ {'interface': 'celery-beat', 'label': '${ _ko('Beat Schedules') }', 'condition': schedulerBeatInterfaceCondition},
|
|
|
{'interface': 'workflows', 'label': '${ _ko('Workflows') }', 'condition': schedulerInterfaceCondition},
|
|
{'interface': 'workflows', 'label': '${ _ko('Workflows') }', 'condition': schedulerInterfaceCondition},
|
|
|
{'interface': 'schedules', 'label': '${ _ko('Schedules') }', 'condition': schedulerInterfaceCondition},
|
|
{'interface': 'schedules', 'label': '${ _ko('Schedules') }', 'condition': schedulerInterfaceCondition},
|
|
|
{'interface': 'bundles', 'label': '${ _ko('Bundles') }', 'condition': schedulerExtraInterfaceCondition},
|
|
{'interface': 'bundles', 'label': '${ _ko('Bundles') }', 'condition': schedulerExtraInterfaceCondition},
|
|
@@ -3493,6 +3578,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
case 'oozie-info':
|
|
case 'oozie-info':
|
|
|
case 'jobs':
|
|
case 'jobs':
|
|
|
case 'queries':
|
|
case 'queries':
|
|
|
|
|
+ case 'beats':
|
|
|
case 'workflows':
|
|
case 'workflows':
|
|
|
case 'schedules':
|
|
case 'schedules':
|
|
|
case 'bundles':
|
|
case 'bundles':
|