http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/app/executors_table.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/app/executors_table.js b/services/dashboard/views/apps/app/executors_table.js index c835228..ee2f258 100644 --- a/services/dashboard/views/apps/app/executors_table.js +++ b/services/dashboard/views/apps/app/executors_table.js @@ -5,7 +5,7 @@ angular.module('dashboard') - .directive('executorTable', function() { + .directive('executorTable', function () { 'use strict'; return { @@ -16,7 +16,7 @@ angular.module('dashboard') executors: '=executorsBind' }, controller: ['$scope', '$sortableTableBuilder', 'i18n', - function($scope, $stb, i18n) { + function ($scope, $stb, i18n) { $scope.whatIsExecutor = i18n.terminology.appExecutor; $scope.table = { cols: [ @@ -30,22 +30,24 @@ angular.module('dashboard') function updateTable(executors) { $scope.table.rows = $stb.$update($scope.table.rows, - _.map(executors, function(executor) { + _.map(executors, function (executor) { return { status: { tooltip: executor.status, condition: executor.isRunning ? 'good' : '', shape: 'stripe' }, - id: {href: executor.pageUrl, text: executor.executorId === -1 ? - 'AppMaster' : 'Executor ' + executor.executorId}, + id: { + href: executor.pageUrl, text: executor.executorId === -1 ? + 'AppMaster' : 'Executor ' + executor.executorId + }, worker: {href: executor.workerPageUrl, text: 'Worker ' + executor.workerId}, tasks: executor.taskCount || 0 }; })); } - $scope.$watch('executors', function(executors) { + $scope.$watch('executors', function (executors) { updateTable(executors); }); }]
http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/app/overview.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/app/overview.js b/services/dashboard/views/apps/app/overview.js index 2d16d62..b6c505d 100644 --- a/services/dashboard/views/apps/app/overview.js +++ b/services/dashboard/views/apps/app/overview.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -18,7 +18,7 @@ angular.module('dashboard') }]) .controller('AppOverviewCtrl', ['$scope', 'helper', '$propertyTableBuilder', 'models', - function($scope, helper, $ptb, models) { + function ($scope, helper, $ptb, models) { 'use strict'; $scope.appSummary = [ @@ -29,7 +29,7 @@ angular.module('dashboard') $ptb.button('Quick Links').done() ]; - $scope.$watch('app', function(app) { + $scope.$watch('app', function (app) { $ptb.$update($scope.appSummary, [ app.appId, app.actorPath, @@ -45,9 +45,9 @@ angular.module('dashboard') $scope.alerts = []; models.$get.appAlerts($scope.app.appId) - .then(function(alerts0) { + .then(function (alerts0) { $scope.alerts = alerts0.$data(); - alerts0.$subscribe($scope, function(alerts) { + alerts0.$subscribe($scope, function (alerts) { $scope.alerts = alerts; }); }); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/apps.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/apps.html b/services/dashboard/views/apps/apps.html index c4999a3..cfb46e4 100644 --- a/services/dashboard/views/apps/apps.html +++ b/services/dashboard/views/apps/apps.html @@ -14,7 +14,7 @@ </div> </div> <div class="col-md-3 col-sm-6 text-right"> - <!--FILTER--> + <!--FILTER--> </div> <div class="col-md-3 hidden-sm hidden-xs"> <searchbox @@ -34,6 +34,7 @@ <div class="table-no-data"> <h2 class="glyphicon glyphicon-bullhorn"></h2> <h4>No application is running</h4> + <p>Please submit an user application first.</p> </div> </sortable-table> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/apps.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/apps.js b/services/dashboard/views/apps/apps.js index 6707e36..ad26fd4 100644 --- a/services/dashboard/views/apps/apps.js +++ b/services/dashboard/views/apps/apps.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -15,7 +15,7 @@ angular.module('dashboard') templateUrl: 'views/apps/apps.html', controller: 'AppsCtrl', resolve: { - apps0: ['models', function(models) { + apps0: ['models', function (models) { return models.$get.apps(); }] } @@ -23,7 +23,7 @@ angular.module('dashboard') }]) .controller('AppsCtrl', ['$scope', '$modal', '$state', '$sortableTableBuilder', '$dialogs', 'apps0', - function($scope, $modal, $state, $stb, $dialogs, apps0) { + function ($scope, $modal, $state, $stb, $dialogs, apps0) { 'use strict'; var submitWindow = $modal({ @@ -34,12 +34,12 @@ angular.module('dashboard') show: false }); - $scope.openSubmitGearAppDialog = function() { + $scope.openSubmitGearAppDialog = function () { submitWindow.$scope.isStormApp = false; submitWindow.$promise.then(submitWindow.show); }; - $scope.openSubmitStormAppDialog = function() { + $scope.openSubmitStormAppDialog = function () { submitWindow.$scope.isStormApp = true; submitWindow.$promise.then(submitWindow.show); }; @@ -75,7 +75,7 @@ angular.module('dashboard') function updateTable(apps) { $scope.appsTable.rows = $stb.$update($scope.appsTable.rows, - _.map(apps, function(app) { + _.map(apps, function (app) { var pageUrl = app.isRunning ? app.pageUrl : ''; return { id: {href: pageUrl, text: app.appId}, @@ -86,20 +86,25 @@ angular.module('dashboard') submissionTime: app.submissionTime, startTime: app.startTime, stopTime: app.finishTime || '-', - view: {href: app.pageUrl, text: 'Details', class: 'btn-xs btn-primary', disabled: !app.isRunning}, + view: { + href: app.pageUrl, + text: 'Details', + class: 'btn-xs btn-primary', + disabled: !app.isRunning + }, config: {href: app.configLink, target: '_blank', text: 'Config', class: 'btn-xs'}, kill: { text: 'Kill', class: 'btn-xs', disabled: !app.isRunning, - click: function() { - $dialogs.confirm('Are you sure to kill this application?', function() { + click: function () { + $dialogs.confirm('Are you sure to kill this application?', function () { app.terminate(); }); } }, restart: { text: 'Restart', class: 'btn-xs', disabled: !app.isRunning, - click: function() { - $dialogs.confirm('Are you sure to restart this application?', function() { + click: function () { + $dialogs.confirm('Are you sure to restart this application?', function () { app.restart(); }); } @@ -109,7 +114,7 @@ angular.module('dashboard') } updateTable(apps0.$data()); - apps0.$subscribe($scope, function(apps) { + apps0.$subscribe($scope, function (apps) { updateTable(apps); }); }]) http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/compose/compose.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/compose/compose.js b/services/dashboard/views/apps/compose/compose.js index 33e9263..8c70f32 100644 --- a/services/dashboard/views/apps/compose/compose.js +++ b/services/dashboard/views/apps/compose/compose.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -15,7 +15,7 @@ angular.module('dashboard') templateUrl: 'views/apps/compose/compose.html', controller: 'ComposeAppCtrl', resolve: { - partitioners: ['models', function(models) { + partitioners: ['models', function (models) { return models.$get.partitioners(); }] } @@ -25,7 +25,7 @@ angular.module('dashboard') // todo: remove the leading $ and rename $visNetworkStyle to vis, internal module does not have a $. .controller('ComposeAppCtrl', ['$scope', '$state', '$modal', '$contextmenu', 'models', 'partitioners', '$visNetworkStyle', 'composeAppDialogs', - function($scope, $state, $modal, $contextmenu, models, partitioners, $vis, dialogs) { + function ($scope, $state, $modal, $contextmenu, models, partitioners, $vis, dialogs) { 'use strict'; var chooseProcessorDialog = dialogs.create({ @@ -40,11 +40,11 @@ angular.module('dashboard') controller: 'ComposeAppChooseEdgeCtrl' }); - $scope.chooseProcessor = function(processor) { + $scope.chooseProcessor = function (processor) { var args = { processor: processor }; - chooseProcessorDialog.show(args, function(processor) { + chooseProcessorDialog.show(args, function (processor) { if (!processor.hasOwnProperty('id')) { processor.id = newProcessorId(); } @@ -53,24 +53,25 @@ angular.module('dashboard') }); }; - $scope.chooseEdge = function(edge) { + $scope.chooseEdge = function (edge) { var args = { edge: edge, partitioners: partitioners, processors: {} }; - angular.forEach($scope.visGraph.data.nodes, function(processor) { + angular.forEach($scope.visGraph.data.nodes, function (processor) { args.processors[processor.id] = { text: 'Processor ' + processor.id, subtext: processor.taskClass }; }); - chooseEdgeDialog.show(args, function(edge) { + chooseEdgeDialog.show(args, function (edge) { $scope.visGraph.data.edges.update(edge); }); }; var processorId = 0; + function newProcessorId() { return processorId++; } @@ -79,7 +80,7 @@ angular.module('dashboard') options: $vis.newOptions(/*height=*/'400px'), data: $vis.newData(), events: { - onDoubleClick: function(data) { + onDoubleClick: function (data) { if (data.nodes.length === 1) { var processor = $scope.visGraph.data.nodes.get(data.nodes[0]); $scope.chooseProcessor(processor); @@ -90,19 +91,19 @@ angular.module('dashboard') $scope.chooseProcessor(); } }, - onContext: function(data) { + onContext: function (data) { if (data.hasOwnProperty('node')) { - $scope.selectItemModify = function() { + $scope.selectItemModify = function () { $scope.chooseProcessor($scope.visGraph.data.nodes.get(data.node)); }; - $scope.selectItemDelete = function() { + $scope.selectItemDelete = function () { deleteProcessor(data.node); }; } else if (data.hasOwnProperty('edge')) { - $scope.selectItemModify = function() { + $scope.selectItemModify = function () { $scope.chooseEdge($scope.visGraph.data.edges.get(data.edge)); }; - $scope.selectItemDelete = function() { + $scope.selectItemDelete = function () { deleteEdge(data.edge); }; } else { @@ -111,7 +112,7 @@ angular.module('dashboard') var elem = document.getElementById('contextmenu'); $contextmenu.popup(elem, data.pointer.DOM); }, - onDeletePressed: function(selection) { + onDeletePressed: function (selection) { if (selection.nodes.length === 1) { deleteProcessor(selection.nodes[0]); } else if (selection.edges.length === 1) { @@ -124,7 +125,7 @@ angular.module('dashboard') function deleteProcessor(processorId) { $scope.visGraph.data.nodes.remove(processorId); var edgeIds = _.chain($scope.visGraph.data.edges.get()) - .filter(function(edge) { + .filter(function (edge) { return processorId == edge.from || processorId == edge.to; }) .map('id') @@ -139,32 +140,32 @@ angular.module('dashboard') $scope.files = {}; $scope.submitted = false; - $scope.$watch('uploads', function(uploads) { + $scope.$watch('uploads', function (uploads) { $scope.files = {}; // todo: only one file can be uploaded once (issue 1450) - angular.forEach(uploads, function(file) { + angular.forEach(uploads, function (file) { if (_.endsWith(file.name, '.jar')) { $scope.files[file.name] = file; } }); }); - $scope.removeFile = function(name) { + $scope.removeFile = function (name) { delete $scope.files[name]; }; - $scope.canSubmit = function() { + $scope.canSubmit = function () { return !$scope.submitted && $scope.visGraph.data.nodes.length > 0 && Object.keys($scope.files).length > 0; }; - $scope.submit = function() { + $scope.submit = function () { var data = $scope.visGraph.data; var processors = data.nodes.get(); var edges = data.edges.get(); var args = { appName: 'userapp', - processors: processors.map(function(processor) { + processors: processors.map(function (processor) { return [processor.id, { id: processor.id, taskClass: processor.taskClass, @@ -174,7 +175,7 @@ angular.module('dashboard') }), dag: { vertexList: _.map(processors, 'id'), - edgeList: edges.map(function(edge) { + edgeList: edges.map(function (edge) { return [edge.from, edge.partitionerClass, edge.to] }) }, @@ -182,7 +183,7 @@ angular.module('dashboard') }; $scope.submitting = true; - models.submitDag($scope.files, args, function(response) { + models.submitDag($scope.files, args, function (response) { $scope.submitting = false; $scope.submitted = response.success; $scope.shouldNoticeSubmitFailed = !response.success; @@ -191,7 +192,7 @@ angular.module('dashboard') } else { $scope.error = response.error; $scope.hasStackTrace = response.stackTrace.length > 0; - $scope.showErrorInNewWin = function() { + $scope.showErrorInNewWin = function () { if ($scope.hasStackTrace) { var popup = window.open('', 'Error Log'); var html = [$scope.error].concat(response.stackTrace).join('\n'); @@ -204,7 +205,7 @@ angular.module('dashboard') }); }; - $scope.view = function() { + $scope.view = function () { $state.go('streamingapp.overview', {appId: $scope.appId}); }; @@ -212,11 +213,11 @@ angular.module('dashboard') $scope.keys = Object.keys; }]) - .factory('composeAppDialogs', ['$modal', function($modal) { + .factory('composeAppDialogs', ['$modal', function ($modal) { 'use strict'; return { - create: function(options) { + create: function (options) { var dialog = $modal({ scope: options.scope, templateUrl: options.templateUrl, @@ -227,9 +228,9 @@ angular.module('dashboard') }); var showDialogFn = dialog.show; - dialog.show = function(args, onChange) { + dialog.show = function (args, onChange) { dialog.$options.scope.onChange = onChange; - angular.forEach(args, function(value, key) { + angular.forEach(args, function (value, key) { dialog.$options.scope[key] = value; }); showDialogFn(); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/compose/popups/choose_edge.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/compose/popups/choose_edge.js b/services/dashboard/views/apps/compose/popups/choose_edge.js index 000b53e..209251d 100644 --- a/services/dashboard/views/apps/compose/popups/choose_edge.js +++ b/services/dashboard/views/apps/compose/popups/choose_edge.js @@ -6,25 +6,25 @@ angular.module('dashboard') .controller('ComposeAppChooseEdgeCtrl', ['$scope', - function($scope) { + function ($scope) { 'use strict'; $scope.invalid = {}; $scope.edge = angular.merge({}, $scope.edge); - $scope.partitioners = $scope.partitioners.map(function(partitioner) { + $scope.partitioners = $scope.partitioners.map(function (partitioner) { return { text: partitioner, icon: 'glyphicon glyphicon-random' }; }); - $scope.canSave = function() { + $scope.canSave = function () { return _.sum($scope.invalid) === 0 && // todo: check ring graph condition ($scope.edge.from.value !== $scope.edge.to.value); }; - $scope.save = function() { + $scope.save = function () { $scope.$hide(); if ($scope.onChange) { $scope.edge.from = $scope.edge.from.value; http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/compose/popups/choose_processor.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/compose/popups/choose_processor.js b/services/dashboard/views/apps/compose/popups/choose_processor.js index f261e2b..d3cc972 100644 --- a/services/dashboard/views/apps/compose/popups/choose_processor.js +++ b/services/dashboard/views/apps/compose/popups/choose_processor.js @@ -6,7 +6,7 @@ angular.module('dashboard') .controller('ComposeAppChooseProcessorCtrl', ['$scope', - function($scope) { + function ($scope) { 'use strict'; $scope.invalid = {}; @@ -14,11 +14,11 @@ angular.module('dashboard') parallelism: 1 }, $scope.processor); - $scope.canSave = function() { + $scope.canSave = function () { return _.sum($scope.invalid) === 0; }; - $scope.save = function() { + $scope.save = function () { $scope.$hide(); if ($scope.onChange) { $scope.onChange($scope.processor); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/dag.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/dag.html b/services/dashboard/views/apps/streamingapp/dag.html index 93655cb..6f84b56 100644 --- a/services/dashboard/views/apps/streamingapp/dag.html +++ b/services/dashboard/views/apps/streamingapp/dag.html @@ -2,7 +2,9 @@ <div class="panel panel-sm panel-default"> <div class="panel-heading">DAG <remark class="pull-right" type="info" - tooltip="<b>Right click (or long press on touch device)</b> on a processor will show all available operations. <b>Double click</b> a processor will show its details.">Instructions</remark> + tooltip="<b>Right click (or long press on touch device)</b> on a processor will show all available operations. <b>Double click</b> a processor will show its details."> + Instructions + </remark> </div> <div class="panel-body"> <div class="cm-container" id="dag-node-menu" http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/dag.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/dag.js b/services/dashboard/views/apps/streamingapp/dag.js index 310f555..c9e8da3 100644 --- a/services/dashboard/views/apps/streamingapp/dag.js +++ b/services/dashboard/views/apps/streamingapp/dag.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -18,7 +18,7 @@ angular.module('dashboard') }]) .controller('StreamingAppDagCtrl', ['$scope', '$state', '$modal', '$contextmenu', '$visNetworkStyle', - function($scope, $state, $modal, $contextmenu, $vis) { + function ($scope, $state, $modal, $contextmenu, $vis) { 'use strict'; $scope.activeProcessorId = -1; @@ -41,12 +41,12 @@ angular.module('dashboard') controller: 'StreamingAppDagEditCtrl' }); - $scope.view = function() { + $scope.view = function () { var options = {processorId: $scope.activeProcessorId}; $state.go('streamingapp.processor', options); }; - $scope.modify = function(options) { + $scope.modify = function (options) { $scope.modifyOptions = options; editorDialog.$promise.then(editorDialog.show); }; @@ -55,33 +55,33 @@ angular.module('dashboard') options: $vis.newHierarchicalLayoutOptions({depth: $scope.dag.hierarchyDepth()}), data: $vis.newData(), events: { - onDoubleClick: function(data) { + onDoubleClick: function (data) { if (data.nodes.length === 1) { var processorId = Number(data.nodes[0]); $state.go('streamingapp.processor', {processorId: processorId}); } }, - onContext: function(data) { + onContext: function (data) { if (data.hasOwnProperty('node')) { $scope.activeProcessorId = Number(data.node); $scope.$apply(); showProcessorOperationsContextMenu(data.pointer.DOM); } }, - onSelectNode: function(data) { + onSelectNode: function (data) { if (data.nodes.length === 1) { $scope.activeProcessorId = Number(data.nodes[0]); $scope.$apply(); } }, - onDeselectNode: function() { + onDeselectNode: function () { $scope.activeProcessorId = -1; $scope.$apply(); }, - onHoverNode: function() { + onHoverNode: function () { $('html,body').css('cursor', 'pointer'); }, - onBlurNode: function() { + onBlurNode: function () { $('html,body').css('cursor', 'default'); } } @@ -94,8 +94,8 @@ angular.module('dashboard') /** Scope independent draw methods */ var draw = { - removeDeadElements: function(visDataSet, aliveElementIds) { - var ids = visDataSet.getIds().filter(function(id) { + removeDeadElements: function (visDataSet, aliveElementIds) { + var ids = visDataSet.getIds().filter(function (id) { return !aliveElementIds.hasOwnProperty(id); }); if (ids.length) { @@ -104,12 +104,12 @@ angular.module('dashboard') } }, - updateVisGraphNodes: function(visNodes, data) { + updateVisGraphNodes: function (visNodes, data) { data.processorWeights[-1] = 0; // weight range from 0 to max weight var suggestRadiusFn = draw._rangeMapper(data.processorWeights, $vis.nodeRadiusRange()); var diff = []; - _.forEach(data.processors, function(processor) { + _.forEach(data.processors, function (processor) { var label = $vis.processorNameAsLabel(processor); var weight = data.processorWeights[processor.id]; var visNode = visNodes.get(processor.id); @@ -131,14 +131,14 @@ angular.module('dashboard') } }, - updateVisGraphEdges: function(visEdges, data) { + updateVisGraphEdges: function (visEdges, data) { data.edgeBandwidths[-1] = 0; // minimal bandwidth var suggestEdgeWidthFn = draw._rangeMapper(data.edgeBandwidths, $vis.edgeWidthRange()); var suggestEdgeArrowSizeFn = draw._rangeMapper(data.edgeBandwidths, $vis.edgeArrowSizeRange()); var suggestEdgeOpacityFn = draw._rangeMapper(data.edgeBandwidths, $vis.edgeOpacityRange()); var diff = []; - _.forEach(data.edges, function(edge, edgeId) { + _.forEach(data.edges, function (edge, edgeId) { var bandwidth = data.edgeBandwidths[edgeId]; var visEdge = visEdges.get(edgeId); var width = d3.round(suggestEdgeWidthFn(bandwidth), 1); @@ -163,7 +163,7 @@ angular.module('dashboard') } }, - _rangeMapper: function(dict, range) { + _rangeMapper: function (dict, range) { var values = d3.values(dict); return d3.scale.linear().domain(d3.extent(values)).range(range); } @@ -195,7 +195,7 @@ angular.module('dashboard') $scope.criticalPathLatency = metricsProvider.getCriticalPathLatency(); } - $scope.$watchCollection('dag.metricsUpdateTime', function() { + $scope.$watchCollection('dag.metricsUpdateTime', function () { redrawGraph($scope.dag.getWeightedDagView()); updateMetricsValues($scope.dag); }); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/executor.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/executor.js b/services/dashboard/views/apps/streamingapp/executor.js index 31cbd5f..8a83808 100644 --- a/services/dashboard/views/apps/streamingapp/executor.js +++ b/services/dashboard/views/apps/streamingapp/executor.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -15,7 +15,7 @@ angular.module('dashboard') templateUrl: 'views/apps/streamingapp/executor.html', controller: 'StreamingAppExecutorCtrl', resolve: { - executor0: ['$stateParams', 'models', function($stateParams, models) { + executor0: ['$stateParams', 'models', function ($stateParams, models) { return models.$get.appExecutor($stateParams.appId, $stateParams.executorId); }] } @@ -24,7 +24,7 @@ angular.module('dashboard') .controller('StreamingAppExecutorCtrl', ['$scope', '$propertyTableBuilder', 'helper', 'restapi', 'models', 'executor0', - function($scope, $ptb, helper, restapi, models, executor0) { + function ($scope, $ptb, helper, restapi, models, executor0) { 'use strict'; $scope.executorName = executor0.id === -1 ? @@ -35,7 +35,12 @@ angular.module('dashboard') $ptb.link('Worker').done(), $ptb.number('Task Count').done(), $ptb.button('Quick Links').values([ - {href: restapi.appExecutorConfigLink($scope.app.appId, executor0.id), target: '_blank', text: 'Config', class: 'btn-xs'}, + { + href: restapi.appExecutorConfigLink($scope.app.appId, executor0.id), + target: '_blank', + text: 'Config', + class: 'btn-xs' + }, helper.withClickToCopy({text: 'Log Dir.', class: 'btn-xs'}, executor0.logFile) ] ).done() @@ -54,13 +59,13 @@ angular.module('dashboard') $scope.metricsConfig = $scope.app.historyMetricsConfig; $scope.executor = executor0.$data(); updateOverviewTable($scope.executor); - executor0.$subscribe($scope, function(executor) { + executor0.$subscribe($scope, function (executor) { $scope.executor = executor; updateOverviewTable(executor); }); // Delegate JvmMetrics directive to manage metrics - $scope.queryMetricsFnRef = function(all) { + $scope.queryMetricsFnRef = function (all) { return all ? models.$get.appExecutorHistMetrics($scope.app.appId, executor0.id) : models.$get.appExecutorMetrics($scope.app.appId, executor0.id, http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/metric_selector.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/metric_selector.js b/services/dashboard/views/apps/streamingapp/metric_selector.js index 88fc507..85a4139 100644 --- a/services/dashboard/views/apps/streamingapp/metric_selector.js +++ b/services/dashboard/views/apps/streamingapp/metric_selector.js @@ -5,7 +5,7 @@ angular.module('dashboard') - .directive('metricSelector', function() { + .directive('metricSelector', function () { 'use strict'; return { @@ -16,7 +16,7 @@ angular.module('dashboard') metricType: '=', metricDescription: '=?' }, - link: function(scope) { + link: function (scope) { 'use strict'; var metricNameLookup = { @@ -28,11 +28,11 @@ angular.module('dashboard') scope.names = {available: _.keys(metricNameLookup)}; scope.names.selected = scope.names.available[1]; // use Receive Throughput by default - scope.types = function(name) { + scope.types = function (name) { return metricNameLookup[name].type; }; - scope.$watch('names.selected', function(val) { + scope.$watch('names.selected', function (val) { scope.metricName = metricNameLookup[val].name; scope.metricType = metricNameLookup[val].type; scope.metricDescription = val; http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/metrics_charts.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/metrics_charts.html b/services/dashboard/views/apps/streamingapp/metrics_charts.html index bec4be6..8f2c005 100644 --- a/services/dashboard/views/apps/streamingapp/metrics_charts.html +++ b/services/dashboard/views/apps/streamingapp/metrics_charts.html @@ -61,8 +61,8 @@ <div ng-if="processor" class="{{chartGridClass}}"> <div class="metrics-wrapper"> <metrics - caption="{{averageMesssageProcessingTimeMetricsCaption}}" - help="{{averageMesssageProcessingTimeMetricsDescription}}" + caption="{{averageMessageProcessingTimeMetricsCaption}}" + help="{{averageMessageProcessingTimeMetricsDescription}}" value="{{averageProcessingTime|metric}}" unit="ms"> </metrics> </div> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/metrics_charts.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/metrics_charts.js b/services/dashboard/views/apps/streamingapp/metrics_charts.js index 4699497..a3d5b1d 100644 --- a/services/dashboard/views/apps/streamingapp/metrics_charts.js +++ b/services/dashboard/views/apps/streamingapp/metrics_charts.js @@ -5,14 +5,14 @@ angular.module('dashboard') - .directive('metricsCharts', function() { + .directive('metricsCharts', function () { 'use strict'; return { restrict: 'E', templateUrl: 'views/apps/streamingapp/metrics_charts.html', scope: true, // inherit parent scope - controller: ['$scope', '$interval', 'helper', 'models', function($scope, $interval, helper, models) { + controller: ['$scope', '$interval', 'helper', 'models', function ($scope, $interval, helper, models) { 'use strict'; var metricsProvider = $scope.dag; @@ -34,7 +34,7 @@ angular.module('dashboard') recentChartPoints--; // ProcessorFilter will actually reduce one point histChartPoints--; var updateRecentMetricsPromise; - $scope.$on('$destroy', function() { + $scope.$on('$destroy', function () { $interval.cancel(updateRecentMetricsPromise); }); @@ -48,7 +48,7 @@ angular.module('dashboard') yAxisLabelFormatter: helper.yAxisLabelFormatterWithoutValue0(), visibleDataPointsNum: visibleDataPointsNum, data: dataPoints, - valueFormatter: function(value) { + valueFormatter: function (value) { return helper.readableMetricValue(value) + ' ' + unit; } }, @@ -94,7 +94,7 @@ angular.module('dashboard') models.$get.appMetrics($scope.app.appId, $scope.metricsConfig.retainRecentDataIntervalMs) : models.$get.appHistMetrics($scope.app.appId); - queryMetricsPromise.then(function(metrics) { + queryMetricsPromise.then(function (metrics) { var data = metrics.$data(); var timeResolution = $scope.isShowingCurrentMetrics ? $scope.metricsConfig.retainRecentDataIntervalMs : @@ -143,7 +143,7 @@ angular.module('dashboard') } function metricsToChartData(metrics) { - return _.map(metrics, function(value, timeString) { + return _.map(metrics, function (value, timeString) { return { x: helper.timeToChartTimeLabel(Number(timeString), /*shortForm=*/$scope.isShowingCurrentMetrics), y: helper.metricRounded(value) @@ -152,7 +152,7 @@ angular.module('dashboard') } $scope.isShowingCurrentMetrics = true; - $scope.$watch('isShowingCurrentMetrics', function(newVal, oldVal) { + $scope.$watch('isShowingCurrentMetrics', function (newVal, oldVal) { if (angular.equals(newVal, oldVal)) { return; // ignore initial notification } @@ -161,7 +161,7 @@ angular.module('dashboard') // common watching var initial = true; - $scope.$watch('dag.metricsUpdateTime', function() { + $scope.$watch('dag.metricsUpdateTime', function () { if (initial) { // note that, the latest metrics do not contain enough points for drawing charts, so // we request recent metrics from server. http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/metrics_table.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/metrics_table.html b/services/dashboard/views/apps/streamingapp/metrics_table.html index 3d0c7d1..fcfe201 100644 --- a/services/dashboard/views/apps/streamingapp/metrics_table.html +++ b/services/dashboard/views/apps/streamingapp/metrics_table.html @@ -24,9 +24,9 @@ </sortable-table> <sortable-table ng-if="metricType == 'histogram'" - search-bind="search" - columns-bind="histogramMetricsTable.cols" - records-bind="histogramMetricsTable.rows" - pagination="10"> + search-bind="search" + columns-bind="histogramMetricsTable.cols" + records-bind="histogramMetricsTable.rows" + pagination="10"> </sortable-table> </div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/metrics_table.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/metrics_table.js b/services/dashboard/views/apps/streamingapp/metrics_table.js index 16dcd05..57dc58e 100644 --- a/services/dashboard/views/apps/streamingapp/metrics_table.js +++ b/services/dashboard/views/apps/streamingapp/metrics_table.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -18,14 +18,14 @@ angular.module('dashboard') }]) .controller('StreamingAppMetricsCtrl', ['$scope', '$sortableTableBuilder', - function($scope, $stb) { + function ($scope, $stb) { 'use strict'; - $scope.$watch('dag.metricsUpdateTime', function() { + $scope.$watch('dag.metricsUpdateTime', function () { reloadMetricsAndUpdateMetricsTable(); }); - $scope.$watch('metricName', function() { + $scope.$watch('metricName', function () { reloadMetricsAndUpdateMetricsTable(); }); @@ -74,10 +74,10 @@ angular.module('dashboard') function updateMetricsTable(table, metrics) { table.rows = $stb.$update(table.rows, - _.map(metrics, function(metric, processorId) { + _.map(metrics, function (metric, processorId) { var processor = $scope.dag.getProcessor(processorId); var processorUrl = processor.active ? - '#/apps/streamingapp/' + $scope.app.appId + '/processor/' + processorId : ''; + '#/apps/streamingapp/' + $scope.app.appId + '/processor/' + processorId : ''; return angular.merge({ active: { tooltip: processor.active ? 'Active' : (processor.replaced ? 'Replaced by another processor' : 'Dead'), http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/overview.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/overview.js b/services/dashboard/views/apps/streamingapp/overview.js index 8a8b14f..c0b424b 100644 --- a/services/dashboard/views/apps/streamingapp/overview.js +++ b/services/dashboard/views/apps/streamingapp/overview.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -18,7 +18,7 @@ angular.module('dashboard') }]) .controller('StreamingAppOverviewCtrl', ['$scope', '$propertyTableBuilder', 'helper', 'models', - function($scope, $ptb, helper, models) { + function ($scope, $ptb, helper, models) { 'use strict'; $scope.appSummary = [ @@ -43,15 +43,15 @@ angular.module('dashboard') ]); } - $scope.$watch('app', function(app) { + $scope.$watch('app', function (app) { updateSummaryTable(app); }); $scope.alerts = []; models.$get.appAlerts($scope.app.appId) - .then(function(alerts0) { + .then(function (alerts0) { $scope.alerts = alerts0.$data(); - alerts0.$subscribe($scope, function(alerts) { + alerts0.$subscribe($scope, function (alerts) { $scope.alerts = alerts; }); }); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/popups/dag_edit.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/popups/dag_edit.js b/services/dashboard/views/apps/streamingapp/popups/dag_edit.js index 58daeb5..205328a 100644 --- a/services/dashboard/views/apps/streamingapp/popups/dag_edit.js +++ b/services/dashboard/views/apps/streamingapp/popups/dag_edit.js @@ -5,7 +5,7 @@ angular.module('dashboard') .controller('StreamingAppDagEditCtrl', ['$scope', 'models', - function($scope, models) { + function ($scope, models) { 'use strict'; var options = $scope.modifyOptions || {}; @@ -18,18 +18,18 @@ angular.module('dashboard') $scope.parallelism = processor.parallelism; $scope.invalid = {}; - $scope.canReplace = function() { + $scope.canReplace = function () { return !_.includes($scope.invalid, true) && $scope.isDirty(); }; - $scope.isDirty = function() { + $scope.isDirty = function () { // do not require same type! return $scope.taskClass != processor.taskClass || $scope.description != processor.description || $scope.parallelism != processor.parallelism; }; - $scope.submit = function() { + $scope.submit = function () { var files = [$scope.jar]; var fileFormNames = ['jar']; var newProcessor = { @@ -52,7 +52,7 @@ angular.module('dashboard') }; } - $scope.dag.replaceProcessor(files, fileFormNames, $scope.app.appId, $scope.processorId, newProcessor, function(response) { + $scope.dag.replaceProcessor(files, fileFormNames, $scope.app.appId, $scope.processorId, newProcessor, function (response) { $scope.shouldNoticeSubmitFailed = !response.success; if (response.success) { $scope.$hide(); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/processor.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/processor.html b/services/dashboard/views/apps/streamingapp/processor.html index d992fdb..137f5d7 100644 --- a/services/dashboard/views/apps/streamingapp/processor.html +++ b/services/dashboard/views/apps/streamingapp/processor.html @@ -32,7 +32,8 @@ <div class="row"> <div class="col-md-6"> <h4 ng-style="{'margin-bottom': shouldPaginateTasks ? '7px' : ''}">Tasks - <remark style="font-size: 15.6px" type="info" placement="right" tooltip="{{whatIsTask}}"></remark> + <remark style="font-size: 15.6px" type="info" placement="right" + tooltip="{{whatIsTask}}"></remark> <div ng-if="shouldPaginateTasks" style="display: inline-block; font-size: 12px; font-weight: 400;"> <processor-task-pager @@ -50,6 +51,7 @@ </div> <div class="col-md-12"> <h5>Distribution of {{metricDescription}}</h5> + <div style="height: 110px"> <bar-chart ng-if="tasksBarChart != null" @@ -67,7 +69,8 @@ style="min-height: 200px"> <h4>Task Metrics Inspector</h4> <ui-select theme="select2" multiple limit="1" ng-model="tasks.selected"> - <ui-select-match placeholder="Click here to pick tasks for inspection...">{{$item}}</ui-select-match> + <ui-select-match placeholder="Click here to pick tasks for inspection...">{{$item}} + </ui-select-match> <ui-select-choices repeat="task in tasks.available|filter:$select.search"> <span ng-bind="task"></span> </ui-select-choices> @@ -75,7 +78,9 @@ <div ng-if="tasks.selected.length>0"> <br/> - <div ng-include src="'views/apps/streamingapp/processor_task_charts.html?'+tasks.selected.length" + + <div ng-include + src="'views/apps/streamingapp/processor_task_charts.html?'+tasks.selected.length" ng-controller="StreamingAppProcessorTaskChartsCtrl"></div> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/processor.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/processor.js b/services/dashboard/views/apps/streamingapp/processor.js index ec60214..ae271f5 100644 --- a/services/dashboard/views/apps/streamingapp/processor.js +++ b/services/dashboard/views/apps/streamingapp/processor.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -19,7 +19,7 @@ angular.module('dashboard') .controller('StreamingAppProcessorCtrl', ['$scope', '$interval', '$stateParams', '$propertyTableBuilder', 'i18n', 'models', 'conf', 'helper', - function($scope, $interval, $stateParams, $ptb, i18n, models, conf, helper) { + function ($scope, $interval, $stateParams, $ptb, i18n, models, conf, helper) { 'use strict'; $scope.whatIsProcessor = i18n.terminology.processor; @@ -63,10 +63,10 @@ angular.module('dashboard') // query task metrics var promise; - $scope.$on('$destroy', function() { + $scope.$on('$destroy', function () { $interval.cancel(promise); }); - $scope.$watch('metricName', function() { + $scope.$watch('metricName', function () { queryMetrics(); }); @@ -78,7 +78,7 @@ angular.module('dashboard') if (!requesting && $scope.metricName) { requesting = true; models.$get.appTaskLatestMetricValues( - $scope.app.appId, $scope.processor.id, $scope.metricName, $scope.taskRange).then(function(metrics) { + $scope.app.appId, $scope.processor.id, $scope.metricName, $scope.taskRange).then(function (metrics) { if (metrics.hasOwnProperty($scope.metricName)) { $scope.taskMetrics = metrics[$scope.metricName]; } @@ -94,10 +94,10 @@ angular.module('dashboard') $scope.taskRange = { start: 0, stop: $scope.shouldPaginateTasks ? - $scope.queryLimit - 1 : $scope.processor.parallelism - 1 + $scope.queryLimit - 1 : $scope.processor.parallelism - 1 }; - $scope.$watch('taskRange', function(range) { + $scope.$watch('taskRange', function (range) { if (range.hasOwnProperty('start')) { updateTaskSelection(range); } @@ -106,9 +106,9 @@ angular.module('dashboard') function updateTaskSelection(range) { $scope.tasks = { selected: [], - available: function() { + available: function () { var count = range.stop - range.start + 1; - return _.times(count, function(i) { + return _.times(count, function (i) { return 'T' + (i + range.start); }); }() @@ -122,17 +122,17 @@ angular.module('dashboard') seriesNames: [''], barMinWidth: 4, barMinSpacing: 1, - valueFormatter: function(value) { + valueFormatter: function (value) { var unit = $scope.metricType === 'meter' ? 'msg/s' : 'ms'; return helper.readableMetricValue(value) + ' ' + unit; }, - data: _.map($scope.tasks.available.length, function(taskName) { + data: _.map($scope.tasks.available.length, function (taskName) { return {x: taskName, y: 0}; }) } }; - $scope.$watch('taskMetrics', function(metricsSelection) { + $scope.$watch('taskMetrics', function (metricsSelection) { if (angular.isObject(metricsSelection)) { updateBarChartData(metricsSelection); } @@ -144,12 +144,12 @@ angular.module('dashboard') return; } - var data = _.map($scope.tasks.available, function(taskName) { + var data = _.map($scope.tasks.available, function (taskName) { return {x: taskName}; }); var i = 0; var metricField = $scope.metricType === 'meter' ? 'movingAverage1m' : 'mean'; - _.forEach(metricsSelection, function(metric) { + _.forEach(metricsSelection, function (metric) { data[i].y = helper.metricRounded(metric[metricField]); i++; }); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/processor_task_charts.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/processor_task_charts.js b/services/dashboard/views/apps/streamingapp/processor_task_charts.js index 975cc30..3d93232 100644 --- a/services/dashboard/views/apps/streamingapp/processor_task_charts.js +++ b/services/dashboard/views/apps/streamingapp/processor_task_charts.js @@ -7,25 +7,25 @@ angular.module('dashboard') // todo: refactoring required .controller('StreamingAppProcessorTaskChartsCtrl', ['$scope', 'helper', 'models', - function($scope, helper, models) { + function ($scope, helper, models) { 'use strict'; // rebuild the charts when `tasks` is changed. - $scope.$watchCollection('tasks', function(tasks) { + $scope.$watchCollection('tasks', function (tasks) { if (!tasks.selected) { console.warn('should not load this page'); return; } // todo: For the time being we can only query one task - $scope.selectedTaskIds = _.map(tasks.selected, function(taskName) { + $scope.selectedTaskIds = _.map(tasks.selected, function (taskName) { return Number(taskName.substr(1)); }); var range = {start: $scope.selectedTaskIds[0], stop: $scope.selectedTaskIds[0]}; models.$get.appTaskLatestMetricValues( - $scope.app.appId, $scope.processor.id, /*metricName=*/'', range).then(function(metrics0) { + $scope.app.appId, $scope.processor.id, /*metricName=*/'', range).then(function (metrics0) { $scope.selectedMetrics = metrics0.$data(); - metrics0.$subscribe($scope, function(metrics) { + metrics0.$subscribe($scope, function (metrics) { $scope.selectedMetrics = metrics; }); }); @@ -36,20 +36,20 @@ angular.module('dashboard') height: '108px', margin: {right: 15}, visibleDataPointsNum: recentChartPoints, - data: _.times(recentChartPoints, function() { + data: _.times(recentChartPoints, function () { return {x: '', y: '-'}; }), seriesNames: tasks.selected }; var throughputChartOptions = angular.merge({ - valueFormatter: function(value) { + valueFormatter: function (value) { return helper.readableMetricValue(value) + ' msg/s'; } }, lineChartOptionBase); var durationChartOptions = angular.merge({ - valueFormatter: function(value) { + valueFormatter: function (value) { return helper.readableMetricValue(value) + ' ms'; } }, lineChartOptionBase); @@ -67,7 +67,7 @@ angular.module('dashboard') options: durationChartOptions }; - $scope.$watchCollection('selectedMetrics', function(metrics) { + $scope.$watchCollection('selectedMetrics', function (metrics) { if (angular.isObject(metrics)) { updateMetricsCharts(metrics); } @@ -102,7 +102,7 @@ angular.module('dashboard') } function extractSelectedMetricField(metrics, field) { - return _.map($scope.selectedTaskIds, function(taskId) { + return _.map($scope.selectedTaskIds, function (taskId) { return helper.metricRounded(metrics[taskId][field]); }); } http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/processor_task_pager.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/processor_task_pager.js b/services/dashboard/views/apps/streamingapp/processor_task_pager.js index 63d57ae..f3e5574 100644 --- a/services/dashboard/views/apps/streamingapp/processor_task_pager.js +++ b/services/dashboard/views/apps/streamingapp/processor_task_pager.js @@ -5,7 +5,7 @@ angular.module('dashboard') - .directive('processorTaskPager', function() { + .directive('processorTaskPager', function () { 'use strict'; return { @@ -17,13 +17,13 @@ angular.module('dashboard') count: '=', queryLimit: '=' }, - link: function(scope) { + link: function (scope) { 'use strict'; var pages = Math.ceil(scope.count / scope.queryLimit); var pageIndex = 0; - scope.switchTasks = function(step) { + scope.switchTasks = function (step) { if (pageIndex + step >= 0 && pageIndex + step < pages) { pageIndex += step; var start = pageIndex * scope.queryLimit; http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/processor_task_table.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/processor_task_table.js b/services/dashboard/views/apps/streamingapp/processor_task_table.js index 79fc56e..9793d3a 100644 --- a/services/dashboard/views/apps/streamingapp/processor_task_table.js +++ b/services/dashboard/views/apps/streamingapp/processor_task_table.js @@ -6,10 +6,10 @@ angular.module('dashboard') .controller('StreamingAppProcessorTaskTableCtrl', ['$scope', '$sortableTableBuilder', - function($scope, $stb) { + function ($scope, $stb) { 'use strict'; - $scope.$watch('taskMetrics', function(metrics) { + $scope.$watch('taskMetrics', function (metrics) { var tableObj = $scope.metricType === 'meter' ? $scope.meterMetricsTable : $scope.histogramMetricsTable; updateMetricsTable(tableObj, metrics); @@ -45,7 +45,7 @@ angular.module('dashboard') function updateMetricsTable(table, metrics) { table.rows = $stb.$update(table.rows, - _.map(metrics, function(metric, taskId) { + _.map(metrics, function (metric, taskId) { return angular.extend(metric, { task: 'T' + taskId, id: Number(taskId) http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/streamingapp.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/streamingapp.html b/services/dashboard/views/apps/streamingapp/streamingapp.html index 77ba78a..a6e3914 100644 --- a/services/dashboard/views/apps/streamingapp/streamingapp.html +++ b/services/dashboard/views/apps/streamingapp/streamingapp.html @@ -18,7 +18,8 @@ <metrics ng-if="app.clock" caption="Application Clock" - help="{{appClockConcern||whatIsAppClock}}" remark-type="{{appClockConcern ? 'warning' : 'info'}}" + help="{{appClockConcern||whatIsAppClock}}" + remark-type="{{appClockConcern ? 'warning' : 'info'}}" click-help="switchToDagTab()" value="{{app.clock|date:'HH:mm:ss'}}" sub-text="{{app.clock|date:'yyyy/MM/dd'}}"></metrics> @@ -29,7 +30,8 @@ value="not started"></metrics> </div> <div class="col-md-2 col-sm-3 col-xs-4"> - <metrics value="{{dag.getProcessorCount()}}" unit="processor" unit-plural="processors"></metrics> + <metrics value="{{dag.getProcessorCount()}}" unit="processor" + unit-plural="processors"></metrics> <metrics value="{{size(app.executors)}}" unit="executor" unit-plural="executors"></metrics> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/streamingapp.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/streamingapp.js b/services/dashboard/views/apps/streamingapp/streamingapp.js index 53f0bf4..ad85ccd 100644 --- a/services/dashboard/views/apps/streamingapp/streamingapp.js +++ b/services/dashboard/views/apps/streamingapp/streamingapp.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -16,7 +16,7 @@ angular.module('dashboard') templateUrl: 'views/apps/streamingapp/streamingapp.html', controller: 'StreamingAppCtrl', resolve: { - app0: ['$stateParams', 'models', function($stateParams, models) { + app0: ['$stateParams', 'models', function ($stateParams, models) { return models.$get.app($stateParams.appId); }] } @@ -27,7 +27,7 @@ angular.module('dashboard') * This controller is used to obtain app. All nested views will read status from here. */ .controller('StreamingAppCtrl', ['$scope', '$state', 'i18n', 'helper', 'models', 'app0', - function($scope, $state, i18n, helper, models, app0) { + function ($scope, $state, i18n, helper, models, app0) { 'use strict'; $scope.whatIsAppClock = i18n.terminology.appClock; @@ -37,14 +37,14 @@ angular.module('dashboard') $scope.uptimeCompact = helper.readableDuration(app0.uptime); $scope.dag = models.createDag(app0.clock, app0.processors, app0.dag.edgeList); - app0.$subscribe($scope, function(app) { + app0.$subscribe($scope, function (app) { updateAppDetails(app); - }, /*onerror=*/ function() { + }, /*onerror=*/ function () { // manually reset status fields on an error response var app = angular.copy($scope.app); app.status = 'terminated'; app.isRunning = false; - _.forEach(app.executors, function(executor) { + _.forEach(app.executors, function (executor) { executor.status = 'terminated'; executor.isRunning = false; }); @@ -58,9 +58,9 @@ angular.module('dashboard') } models.$get.appStallingTasks(app0.appId) - .then(function(tasks0) { + .then(function (tasks0) { updateStallingTasks(tasks0.$data()); - tasks0.$subscribe($scope, function(tasks) { + tasks0.$subscribe($scope, function (tasks) { updateStallingTasks(tasks); }); }); @@ -69,30 +69,31 @@ angular.module('dashboard') "Application clock does not go forward. Click here to check red processor(s)." : undefined; $scope.dag.setStallingTasks(tasks); } - $scope.switchToDagTab = function() { + + $scope.switchToDagTab = function () { $state.go('streamingapp.dag'); }; // As metrics will be collected shortly after application is started, we should not receive initial metrics // at the view resolving stage. models.$subscribe($scope, - function() { + function () { return models.$get.appLatestMetrics(app0.appId); }, - function(metrics0) { + function (metrics0) { $scope.metrics = metrics0.$data(); - metrics0.$subscribe($scope, function(metrics) { + metrics0.$subscribe($scope, function (metrics) { $scope.metrics = metrics; }); }); - $scope.$watch('metrics', function(metrics) { + $scope.$watch('metrics', function (metrics) { if (angular.isObject(metrics)) { $scope.dag.updateLatestMetrics(metrics); } }); // Angular template cannot call the function directly, so export a function. - $scope.size = function(obj) { + $scope.size = function (obj) { return Object.keys(obj).length; }; @@ -102,7 +103,7 @@ angular.module('dashboard') $scope.receiveThroughputMetricsDescription = 'Messages are received by sink processors'; $scope.messageLatencyMetricsCaption = 'End-to-End Latency'; $scope.messageLatencyMetricsDescription = 'The largest latency from a source processor to a sink processor. The value is the sum of message receive latency plus message processing time of all processors on the path (except the source processor).'; - $scope.averageMesssageProcessingTimeMetricsCaption = 'Average Message Processing Time'; - $scope.averageMesssageProcessingTimeMetricsDescription = 'The processing time is the duration from a message is received by a processor and to the message is sent to the next stop'; + $scope.averageMessageProcessingTimeMetricsCaption = 'Average Message Processing Time'; + $scope.averageMessageProcessingTimeMetricsDescription = 'The processing time is the duration from a message is received by a processor and to the message is sent to the next stop'; }]) ; http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/streamingapp/vis/network_style.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/streamingapp/vis/network_style.js b/services/dashboard/views/apps/streamingapp/vis/network_style.js index 63f56ac..498cdfb 100644 --- a/services/dashboard/views/apps/streamingapp/vis/network_style.js +++ b/services/dashboard/views/apps/streamingapp/vis/network_style.js @@ -5,14 +5,14 @@ angular.module('dashboard') - .factory('$visNetworkStyle', function() { + .factory('$visNetworkStyle', function () { 'use strict'; var fontFace = 'lato,roboto,"helvetica neue","segoe ui",arial,helvetica,sans-serif'; var maxNodeRadius = 16; var self = { - newOptions: function(height) { + newOptions: function (height) { return { autoResize: true, // The network will automatically detect size changes and redraw itself accordingly interaction: { @@ -45,7 +45,7 @@ angular.module('dashboard') } }; }, - newHierarchicalLayoutOptions: function(flags) { + newHierarchicalLayoutOptions: function (flags) { var verticalMargin = 28; var levelDistance = 85; var chartMinHeight = 240; @@ -61,16 +61,16 @@ angular.module('dashboard') } }); }, - newData: function() { + newData: function () { return { nodes: new vis.DataSet(), edges: new vis.DataSet() }; }, - nodeRadiusRange: function() { + nodeRadiusRange: function () { return [3, 16]; }, - nodeColor: function(concern) { + nodeColor: function (concern) { var colorSet = concern ? { border: 'rgb(138,1,12)', background: 'rgb(248,106,91)' @@ -85,16 +85,16 @@ angular.module('dashboard') } return result; }, - edgeWidthRange: function() { + edgeWidthRange: function () { return [1, 5]; }, - edgeArrowSizeRange: function() { + edgeArrowSizeRange: function () { return [0.5, 0.1]; }, - edgeOpacityRange: function() { + edgeOpacityRange: function () { return [0.4, 1]; }, - edgeColorSet: function(alive) { + edgeColorSet: function (alive) { return alive ? { color: '#2B7CE9', hover: '#2B7CE9', @@ -106,7 +106,7 @@ angular.module('dashboard') }; }, /** Return label of processor name */ - processorNameAsLabel: function(processor) { + processorNameAsLabel: function (processor) { return '[' + processor.id + '] ' + (processor.description || _.last(processor.taskClass.split('.'))); } http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/submit/submit.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/submit/submit.html b/services/dashboard/views/apps/submit/submit.html index 2b15000..a2245cb 100644 --- a/services/dashboard/views/apps/submit/submit.html +++ b/services/dashboard/views/apps/submit/submit.html @@ -20,8 +20,8 @@ <span ng-if="error"> Check out the <span class="help-text" - bs-tooltip="error" html="true" placement="bottom" - ng-click="showErrorInNewWin()">reason + bs-tooltip="error" html="true" placement="bottom" + ng-click="showErrorInNewWin()">reason <i ng-if="hasStackTrace" class="fa fa-external-link"></i></span>. </span> @@ -41,10 +41,11 @@ ng-model="conf" accept-pattern="{{confFileSuffix}}"></form-control> <!-- input 3 --> <form-control - ng-if="!isStormApp" + ng-hide="isStormApp" type="integer" min="1" label="Executors" help="The number of executor (JVM) processes to be spawned in the cluster." - ng-model="executorNum"></form-control> + ng-model="executorNum" ng-init="executorNum = 1"></form-control> + <!-- input 4 --> <form-control type="text" label="Arguments" http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/apps/submit/submit.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/apps/submit/submit.js b/services/dashboard/views/apps/submit/submit.js index 23c806f..f533794 100644 --- a/services/dashboard/views/apps/submit/submit.js +++ b/services/dashboard/views/apps/submit/submit.js @@ -5,12 +5,12 @@ angular.module('dashboard') .controller('AppSubmitCtrl', ['$scope', 'restapi', - function($scope, restapi) { + function ($scope, restapi) { 'use strict'; $scope.dialogTitle = 'Submit Gearpump Application'; $scope.confFileSuffix = '.conf'; - $scope.executorNum = 1; + var submitFn = restapi.submitUserApp; if ($scope.isStormApp) { $scope.dialogTitle = 'Submit Storm Application'; @@ -18,11 +18,11 @@ angular.module('dashboard') submitFn = restapi.submitStormApp; } - $scope.canSubmit = function() { + $scope.canSubmit = function () { return $scope.jar && !$scope.uploading; }; - $scope.submit = function() { + $scope.submit = function () { var files = [$scope.jar]; var fileFormNames = ['jar']; if ($scope.conf) { @@ -30,7 +30,7 @@ angular.module('dashboard') fileFormNames.push('configfile'); } $scope.uploading = true; - submitFn(files, fileFormNames, $scope.executorNum, $scope.launchArgs, function(response) { + submitFn(files, fileFormNames, $scope.executorNum, $scope.launchArgs, function (response) { $scope.shouldNoticeSubmitFailed = !response.success; $scope.uploading = false; if (response.success) { @@ -38,7 +38,7 @@ angular.module('dashboard') } else { $scope.error = response.error; $scope.hasStackTrace = response.stackTrace.length > 0; - $scope.showErrorInNewWin = function() { + $scope.showErrorInNewWin = function () { if ($scope.hasStackTrace) { var popup = window.open('', 'Error Log'); var html = [$scope.error].concat(response.stackTrace).join('\n'); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/master/master.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/master/master.js b/services/dashboard/views/cluster/master/master.js index 44a38f7..f876710 100644 --- a/services/dashboard/views/cluster/master/master.js +++ b/services/dashboard/views/cluster/master/master.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -15,7 +15,7 @@ angular.module('dashboard') templateUrl: 'views/cluster/master/master.html', controller: 'MasterCtrl', resolve: { - master0: ['models', function(models) { + master0: ['models', function (models) { return models.$get.master(); }] } @@ -23,7 +23,7 @@ angular.module('dashboard') }]) .controller('MasterCtrl', ['$scope', '$propertyTableBuilder', 'i18n', 'helper', 'models', 'master0', - function($scope, $ptb, i18n, helper, models, master0) { + function ($scope, $ptb, i18n, helper, models, master0) { 'use strict'; $scope.whatIsMaster = i18n.terminology.master; @@ -54,12 +54,12 @@ angular.module('dashboard') $scope.metricsConfig = master0.historyMetricsConfig; updateSummaryTable(master0); - master0.$subscribe($scope, function(master) { + master0.$subscribe($scope, function (master) { updateSummaryTable(master); }); // Delegate JvmMetrics directive to manage metrics - $scope.queryMetricsFnRef = function(all) { + $scope.queryMetricsFnRef = function (all) { return all ? models.$get.masterHistMetrics() : models.$get.masterMetrics($scope.metricsConfig.retainRecentDataIntervalMs); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/add_worker.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/add_worker.html b/services/dashboard/views/cluster/workers/add_worker.html index d8a1ecf..b340a16 100644 --- a/services/dashboard/views/cluster/workers/add_worker.html +++ b/services/dashboard/views/cluster/workers/add_worker.html @@ -16,6 +16,7 @@ <span aria-hidden="true">×</span> </button> <h5 style="margin-top: 0">Something went wrong!</h5> + <p ng-bind="error"></p> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/add_worker.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/add_worker.js b/services/dashboard/views/cluster/workers/add_worker.js index ab4b42e..eb5aa92 100644 --- a/services/dashboard/views/cluster/workers/add_worker.js +++ b/services/dashboard/views/cluster/workers/add_worker.js @@ -5,13 +5,13 @@ angular.module('dashboard') .controller('AddWorkerCtrl', ['$scope', 'restapi', 'i18n', - function($scope, restapi, i18n) { + function ($scope, restapi, i18n) { 'use strict'; $scope.description = i18n.terminology.worker; $scope.count = 1; - $scope.add = function() { + $scope.add = function () { $scope.adding = true; $scope.shouldNoticeSubmitFailed = false; return restapi.addWorker( http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/worker/worker.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/worker/worker.html b/services/dashboard/views/cluster/workers/worker/worker.html index f174f18..e290874 100644 --- a/services/dashboard/views/cluster/workers/worker/worker.html +++ b/services/dashboard/views/cluster/workers/worker/worker.html @@ -21,7 +21,8 @@ value="{{worker.slots.usage|number:1}}" unit="%"></metrics> </div> <div class="col-sm-2 col-xs-4"> - <metrics value="{{worker.executors.length}}" unit="executor" unit-plural="executors"></metrics> + <metrics value="{{worker.executors.length}}" unit="executor" + unit-plural="executors"></metrics> <metrics value="{{appsCount}}" unit="application" unit-plural="applications"></metrics> </div> </div> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/worker/worker.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/worker/worker.js b/services/dashboard/views/cluster/workers/worker/worker.js index ad92a74..3291a59 100644 --- a/services/dashboard/views/cluster/workers/worker/worker.js +++ b/services/dashboard/views/cluster/workers/worker/worker.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -19,10 +19,10 @@ angular.module('dashboard') templateUrl: 'views/cluster/workers/worker/worker.html', controller: 'WorkerCtrl', resolve: { - worker0: ['$stateParams', 'models', function($stateParams, models) { + worker0: ['$stateParams', 'models', function ($stateParams, models) { return models.$get.worker($stateParams.workerId); }], - apps0: ['models', function(models) { + apps0: ['models', function (models) { return models.$get.apps(); }] } @@ -31,7 +31,7 @@ angular.module('dashboard') .controller('WorkerCtrl', ['$scope', '$propertyTableBuilder', '$sortableTableBuilder', 'i18n', 'helper', 'models', 'locator', 'worker0', 'apps0', - function($scope, $ptb, $stb, i18n, helper, models, locator, worker0, apps0) { + function ($scope, $ptb, $stb, i18n, helper, models, locator, worker0, apps0) { 'use strict'; $scope.whatIsWorker = i18n.terminology.worker; @@ -69,7 +69,7 @@ angular.module('dashboard') function updateExecutorsTable() { $scope.executorsTable.rows = $stb.$update($scope.executorsTable.rows, - _.map($scope.worker.executors, function(executor) { + _.map($scope.worker.executors, function (executor) { if ($scope.apps.hasOwnProperty(executor.appId)) { var app = $scope.apps[executor.appId]; var executorPageUrl = locator.executor(app.appId, app.type, executor.executorId); @@ -96,14 +96,14 @@ angular.module('dashboard') updateOverviewTable($scope.worker); updateExecutorsTable(); - worker0.$subscribe($scope, function(worker) { + worker0.$subscribe($scope, function (worker) { updateWorkerDetails(worker); - }, /*onerror=*/function() { + }, /*onerror=*/function () { // manually reset status fields on an error response var worker = angular.copy($scope.worker); worker.state = 'terminated'; worker.isRunning = false; - _.forEach(worker.executors, function(executor) { + _.forEach(worker.executors, function (executor) { executor.status = 'terminated'; executor.isRunning = false; }); @@ -116,13 +116,13 @@ angular.module('dashboard') updateExecutorsTable(); } - apps0.$subscribe($scope, function(apps) { + apps0.$subscribe($scope, function (apps) { $scope.apps = apps; updateExecutorsTable(); }); // Delegate JvmMetrics directive to manage metrics - $scope.queryMetricsFnRef = function(all) { + $scope.queryMetricsFnRef = function (all) { return all ? models.$get.workerHistMetrics(worker0.workerId) : models.$get.workerMetrics(worker0.workerId, $scope.metricsConfig.retainRecentDataIntervalMs); http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/workers_listview.html ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/workers_listview.html b/services/dashboard/views/cluster/workers/workers_listview.html index 1f5295d..8b65005 100644 --- a/services/dashboard/views/cluster/workers/workers_listview.html +++ b/services/dashboard/views/cluster/workers/workers_listview.html @@ -31,6 +31,7 @@ <div class="table-no-data"> <h2 class="glyphicon glyphicon-bullhorn"></h2> <h4>No worker instance is running</h4> + <p>Please contact your administrator to launch worker for applications.</p> </div> </sortable-table> http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/cluster/workers/workers_listview.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/cluster/workers/workers_listview.js b/services/dashboard/views/cluster/workers/workers_listview.js index c277b38..184d578 100644 --- a/services/dashboard/views/cluster/workers/workers_listview.js +++ b/services/dashboard/views/cluster/workers/workers_listview.js @@ -6,7 +6,7 @@ angular.module('dashboard') .config(['$stateProvider', - function($stateProvider) { + function ($stateProvider) { 'use strict'; $stateProvider @@ -16,10 +16,10 @@ angular.module('dashboard') templateUrl: 'views/cluster/workers/workers_listview.html', controller: 'WorkersListViewCtrl', resolve: { - workers0: ['models', function(models) { + workers0: ['models', function (models) { return models.$get.workers(); }], - supervisor0: ['models', function(models) { + supervisor0: ['models', function (models) { return models.$get.supervisor(); }] } @@ -28,10 +28,10 @@ angular.module('dashboard') .controller('WorkersListViewCtrl', ['$scope', '$modal', '$sortableTableBuilder', '$dialogs', 'restapi', 'workers0', 'supervisor0', - function($scope, $modal, $stb, $dialogs, restapi, workers0, supervisor0) { + function ($scope, $modal, $stb, $dialogs, restapi, workers0, supervisor0) { 'use strict'; - $scope.isSupervisor = (supervisor0.path||'').length > 0; + $scope.isSupervisor = (supervisor0.path || '').length > 0; $scope.workersTable = { cols: [ // group 1/3 (4-col) @@ -51,22 +51,30 @@ angular.module('dashboard') function updateTable(workers) { $scope.workersTable.rows = $stb.$update($scope.workersTable.rows, - _.map(workers, function(worker) { + _.map(workers, function (worker) { return { id: {href: worker.pageUrl, text: worker.workerId}, - state: {tooltip: worker.state, condition: worker.isRunning ? 'good' : 'concern', shape: 'stripe'}, + state: { + tooltip: worker.state, + condition: worker.isRunning ? 'good' : 'concern', + shape: 'stripe' + }, akkaAddr: worker.akkaAddr, jvm: worker.jvmName, aliveFor: worker.aliveFor, - slots: {current: worker.slots.used, max: worker.slots.total, usage: worker.slots.usage}, + slots: { + current: worker.slots.used, + max: worker.slots.total, + usage: worker.slots.usage + }, executors: worker.executors.length || 0, detail: {href: worker.pageUrl, text: 'Details', class: 'btn-xs btn-primary'}, conf: {href: worker.configLink, target: '_blank', text: 'Config', class: 'btn-xs'}, kill: { text: 'Kill', class: 'btn-xs', disabled: !$scope.isSupervisor, - click: function() { - $dialogs.confirm('Are you sure to kill this worker?', function() { + click: function () { + $dialogs.confirm('Are you sure to kill this worker?', function () { restapi.removeWorker(worker.workerId, function handleResponse(response) { if (response.success) { @@ -87,7 +95,7 @@ angular.module('dashboard') } updateTable(workers0.$data()); - workers0.$subscribe($scope, function(data) { + workers0.$subscribe($scope, function (data) { updateTable(data); }); @@ -99,7 +107,7 @@ angular.module('dashboard') show: false }); - $scope.showAddWorkerDialog = function() { + $scope.showAddWorkerDialog = function () { addWorkerDialog.$promise.then(addWorkerDialog.show); }; }]) http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/helper.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/helper.js b/services/dashboard/views/helper.js index bb46a86..3a5ec8b 100644 --- a/services/dashboard/views/helper.js +++ b/services/dashboard/views/helper.js @@ -6,21 +6,21 @@ angular.module('dashboard') /** Provides widgets/directive related helper functions */ - .factory('helper', ['$filter', '$echarts', function($filter, $echarts) { + .factory('helper', ['$filter', '$echarts', function ($filter, $echarts) { 'use strict'; return { /* Allows dashing property `<button>` to have a "Copy to clipboard" feature on click. */ - withClickToCopy: function(values, text) { + withClickToCopy: function (values, text) { return angular.extend(values, { tooltip: 'Location: <b>' + text + '</b><div><small>click button to copy</small></div>', - click: function() { + click: function () { clipboard.copy(text); } }); }, /* Returns a readable duration component. */ - readableDuration: function(millis) { + readableDuration: function (millis) { var pieces = $filter('duration')(millis).split(' '); return { value: Math.max(0, pieces[0]), @@ -28,7 +28,7 @@ angular.module('dashboard') }; }, /* Return a readable metric value. */ - readableMetricValue: function(value) { + readableMetricValue: function (value) { if (angular.isNumber(value)) { var precision = Math.abs(value) < 100 ? 2 : 0; return $filter('number')(value, precision); @@ -36,24 +36,24 @@ angular.module('dashboard') return value; }, /* Make metric precision consistent */ - metricRounded: function(value) { + metricRounded: function (value) { return _.round(value, 2); }, /* Create a proper chart time label for echart */ - timeToChartTimeLabel: function(time, shortForm) { - return moment(time).format(shortForm ? 'HH:mm:ss': 'ddd DD, HH:mm'); + timeToChartTimeLabel: function (time, shortForm) { + return moment(time).format(shortForm ? 'HH:mm:ss' : 'ddd DD, HH:mm'); }, /* Return a y-axis label formatter that will not show 0 on y-axis */ - yAxisLabelFormatterWithoutValue0: function(unit) { + yAxisLabelFormatterWithoutValue0: function (unit) { return $echarts.axisLabelFormatter(unit, {0: ''}); } }; }]) - .filter('metric', ['helper', function(helper) { + .filter('metric', ['helper', function (helper) { 'use strict'; - return function(value) { + return function (value) { return helper.readableMetricValue(value); }; }]) http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/c176e448/services/dashboard/views/jvm/jvm_metrics_view.js ---------------------------------------------------------------------- diff --git a/services/dashboard/views/jvm/jvm_metrics_view.js b/services/dashboard/views/jvm/jvm_metrics_view.js index 2fbd539..c9d6ff8 100644 --- a/services/dashboard/views/jvm/jvm_metrics_view.js +++ b/services/dashboard/views/jvm/jvm_metrics_view.js @@ -5,7 +5,7 @@ angular.module('dashboard') - .directive('jvmMetricsView', function() { + .directive('jvmMetricsView', function () { 'use strict'; return { @@ -16,7 +16,7 @@ angular.module('dashboard') queryMetricsFnRef: '&' }, controller: ['$scope', '$filter', '$propertyTableBuilder', 'helper', - function($scope, $filter, $ptb, helper) { + function ($scope, $filter, $ptb, helper) { 'use strict'; var sc = $scope.samplingConfig; @@ -25,10 +25,10 @@ angular.module('dashboard') // property table part var converter = { - bytes: function(value) { + bytes: function (value) { return {raw: value, unit: 'B', readable: true}; }, - direct: function(value) { + direct: function (value) { return value; } }; @@ -40,7 +40,7 @@ angular.module('dashboard') 'thread.daemon.count': ['Daemon Thread Count', converter.direct] }; - $scope.jvmMetricsTable = _.map(metricsClassProps, function(prop) { + $scope.jvmMetricsTable = _.map(metricsClassProps, function (prop) { var text = prop[0]; var convertFn = prop[1]; return $ptb.number(text).value(convertFn(0)).done(); @@ -49,7 +49,7 @@ angular.module('dashboard') function updateMetricsTable(metrics) { var updates = {}; var i = 0; - angular.forEach(metricsClassProps, function(prop, name) { + angular.forEach(metricsClassProps, function (prop, name) { if (metrics.hasOwnProperty(name)) { var convertFn = prop[1]; updates[i] = convertFn(metrics[name].value); @@ -64,7 +64,7 @@ angular.module('dashboard') function rebuildChartsOnPeriodChanged() { var all = !$scope.isShowingCurrentMetrics; - queryMetricsFn(all).then(function(metrics) { + queryMetricsFn(all).then(function (metrics) { var dataPoints = makeMemoryUsageChartData(metrics); var visibleDataPointsNum = all ? Math.max(dataPoints.length, histChartPoints) : recentChartPoints; @@ -79,20 +79,20 @@ angular.module('dashboard') } var queryMetricsFn = $scope.queryMetricsFnRef(); - queryMetricsFn(/*all=*/false).then(function(metrics0) { + queryMetricsFn(/*all=*/false).then(function (metrics0) { $scope.metrics = metrics0.$data(); - $scope.$watch('isShowingCurrentMetrics', function(newVal, oldVal) { + $scope.$watch('isShowingCurrentMetrics', function (newVal, oldVal) { if (angular.equals(newVal, oldVal)) { return; // ignore initial notification } rebuildChartsOnPeriodChanged(); }); - metrics0.$subscribe($scope, function(metrics) { + metrics0.$subscribe($scope, function (metrics) { $scope.metrics = metrics; }); }); - $scope.$watch('metrics', function(metrics) { + $scope.$watch('metrics', function (metrics) { if (angular.isObject(metrics)) { updateMetricsTable(_.mapValues(metrics, _.last)); if ($scope.isShowingCurrentMetrics) { @@ -106,7 +106,7 @@ angular.module('dashboard') } function makeMemoryUsageChartData(metrics) { - return _.map(metrics['memory.total.used'], function(metric) { + return _.map(metrics['memory.total.used'], function (metric) { return { x: helper.timeToChartTimeLabel(metric.time, /*shortForm=*/$scope.isShowingCurrentMetrics), y: [metric.value] @@ -122,7 +122,7 @@ angular.module('dashboard') visibleDataPointsNum: visibleDataPointsNum, data: dataPoints, yAxisLabelFormatter: helper.yAxisLabelFormatterWithoutValue0('B'), // MB, GB, TB, etc. - valueFormatter: function(value) { + valueFormatter: function (value) { return $filter('number')(Math.floor(value / (1024 * 1024)), 0) + ' MB'; } };
