提交 3dd5c991 编写于 作者: P paul 提交者: Greg Hogan

[FLINK-5819] [webui] implements numeric option on metrics graphs

This closes #3367
上级 f74bb74f
...@@ -41,7 +41,7 @@ nav.navbar.navbar-default.navbar-secondary-additional.navbar-secondary-additiona ...@@ -41,7 +41,7 @@ nav.navbar.navbar-default.navbar-secondary-additional.navbar-secondary-additiona
ul.metric-row(ng-if="nodeid && metrics.length > 0" dnd-list="metrics" dnd-drop="dropped(event, index, item, external, type, external)") ul.metric-row(ng-if="nodeid && metrics.length > 0" dnd-list="metrics" dnd-drop="dropped(event, index, item, external, type, external)")
li.metric-col(ng-repeat="metric in metrics track by metric.id" dnd-draggable="metric" dnd-dragstart="dragStart()" dnd-dragend="dragEnd()" dnd-canceled="dragEnd()" ng-class="{big: metric.size != 'small'}") li.metric-col(ng-repeat="metric in metrics track by metric.id" dnd-draggable="metric" dnd-dragstart="dragStart()" dnd-dragend="dragEnd()" dnd-canceled="dragEnd()" ng-class="{big: metric.size != 'small'}")
metrics-graph(metric="metric" window="window" get-values="getValues(metric.id)" remove-metric="removeMetric(metric)" set-metric-size="setMetricSize") metrics-graph(metric="metric" window="window" get-values="getValues(metric.id)" remove-metric="removeMetric(metric)" set-metric-size="setMetricSize" set-metric-view="setMetricView")
.clearfix .clearfix
...@@ -98,3 +98,37 @@ angular.module('flinkApp') ...@@ -98,3 +98,37 @@ angular.module('flinkApp')
.filter "increment", -> .filter "increment", ->
(number) -> (number) ->
parseInt(number) + 1 parseInt(number) + 1
.filter "humanizeChartNumeric", ['humanizeBytesFilter', 'humanizeDurationFilter', (humanizeBytesFilter, humanizeDurationFilter)->
(value, metric)->
return_val = ''
if value != null
if /bytes/i.test(metric.id) && /persecond/i.test(metric.id)
return_val = humanizeBytesFilter(value) + ' / s'
else if /bytes/i.test(metric.id)
return_val = humanizeBytesFilter(value)
else if /persecond/i.test(metric.id)
return_val = value + ' / s'
else if /time/i.test(metric.id) || /latency/i.test(metric.id)
return_val = humanizeDurationFilter(value, true)
else
return_val = value
return return_val
]
.filter "humanizeChartNumericTitle", ['humanizeDurationFilter', (humanizeDurationFilter)->
(value, metric)->
return_val = ''
if value != null
if /bytes/i.test(metric.id) && /persecond/i.test(metric.id)
return_val = value + ' Bytes / s'
else if /bytes/i.test(metric.id)
return_val = value + ' Bytes'
else if /persecond/i.test(metric.id)
return_val = value + ' / s'
else if /time/i.test(metric.id) || /latency/i.test(metric.id)
return_val = humanizeDurationFilter(value, false)
else
return_val = value
return return_val
]
...@@ -385,6 +385,10 @@ angular.module('flinkApp') ...@@ -385,6 +385,10 @@ angular.module('flinkApp')
MetricsService.setMetricSize($scope.jobid, $scope.nodeid, metric, size) MetricsService.setMetricSize($scope.jobid, $scope.nodeid, metric, size)
loadMetrics() loadMetrics()
$scope.setMetricView = (metric, view) ->
MetricsService.setMetricView($scope.jobid, $scope.nodeid, metric, view)
loadMetrics()
$scope.getValues = (metric) -> $scope.getValues = (metric) ->
MetricsService.getValues($scope.jobid, $scope.nodeid, metric) MetricsService.getValues($scope.jobid, $scope.nodeid, metric)
......
...@@ -33,8 +33,16 @@ angular.module('flinkApp') ...@@ -33,8 +33,16 @@ angular.module('flinkApp')
</div> </div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<svg /> <svg ng-if="metric.view == \'chart\'"/>
<div ng-if="metric.view != \'chart\'">
<div class="metric-numeric" title="{{value | humanizeChartNumericTitle:metric}}">{{value | humanizeChartNumeric:metric}}</div>
</div>
</div> </div>
<div class="buttons">
<div class="btn-group">
<button type="button" ng-class="[btnClasses, {active: metric.view == \'chart\'}]" ng-click="setView(\'chart\')">Chart</button>
<button type="button" ng-class="[btnClasses, {active: metric.view != \'chart\'}]" ng-click="setView(\'numeric\')">Numeric</button>
</div>
</div>' </div>'
replace: true replace: true
scope: scope:
...@@ -42,6 +50,7 @@ angular.module('flinkApp') ...@@ -42,6 +50,7 @@ angular.module('flinkApp')
window: "=" window: "="
removeMetric: "&" removeMetric: "&"
setMetricSize: "=" setMetricSize: "="
setMetricView: "="
getValues: "&" getValues: "&"
link: (scope, element, attrs) -> link: (scope, element, attrs) ->
...@@ -106,10 +115,13 @@ angular.module('flinkApp') ...@@ -106,10 +115,13 @@ angular.module('flinkApp')
scope.setSize = (size) -> scope.setSize = (size) ->
scope.setMetricSize(scope.metric, size) scope.setMetricSize(scope.metric, size)
scope.showChart() scope.setView = (view) ->
scope.setMetricView(scope.metric, view)
scope.showChart() if view == 'chart'
scope.showChart() if scope.metric.view == 'chart'
scope.$on 'metrics:data:update', (event, timestamp, data) -> scope.$on 'metrics:data:update', (event, timestamp, data) ->
# scope.value = parseInt(data[scope.metric.id])
scope.value = parseFloat(data[scope.metric.id]) scope.value = parseFloat(data[scope.metric.id])
scope.data[0].values.push { scope.data[0].values.push {
...@@ -120,8 +132,8 @@ angular.module('flinkApp') ...@@ -120,8 +132,8 @@ angular.module('flinkApp')
if scope.data[0].values.length > scope.window if scope.data[0].values.length > scope.window
scope.data[0].values.shift() scope.data[0].values.shift()
scope.showChart() scope.showChart() if scope.metric.view == 'chart'
scope.chart.clearHighlights() scope.chart.clearHighlights() if scope.metric.view == 'chart'
scope.chart.tooltip.hidden(true) scope.chart.tooltip.hidden(true)
element.find(".metric-title").qtip({ element.find(".metric-title").qtip({
...@@ -135,4 +147,4 @@ angular.module('flinkApp') ...@@ -135,4 +147,4 @@ angular.module('flinkApp')
style: { style: {
classes: 'qtip-light qtip-timeline-bar' classes: 'qtip-light qtip-timeline-bar'
} }
}); });
\ No newline at end of file
...@@ -110,7 +110,7 @@ angular.module('flinkApp') ...@@ -110,7 +110,7 @@ angular.module('flinkApp')
@addMetric = (jobid, nodeid, metricid) -> @addMetric = (jobid, nodeid, metricid) ->
@setupLSFor(jobid, nodeid) @setupLSFor(jobid, nodeid)
@metrics[jobid][nodeid].push({id: metricid, size: 'small'}) @metrics[jobid][nodeid].push({id: metricid, size: 'small', view: 'chart'})
@saveSetup() @saveSetup()
...@@ -128,7 +128,16 @@ angular.module('flinkApp') ...@@ -128,7 +128,16 @@ angular.module('flinkApp')
i = @metrics[jobid][nodeid].indexOf(metric.id) i = @metrics[jobid][nodeid].indexOf(metric.id)
i = _.findIndex(@metrics[jobid][nodeid], { id: metric.id }) if i == -1 i = _.findIndex(@metrics[jobid][nodeid], { id: metric.id }) if i == -1
@metrics[jobid][nodeid][i] = { id: metric.id, size: size } if i != -1 @metrics[jobid][nodeid][i] = { id: metric.id, size: size, view: metric.view } if i != -1
@saveSetup()
@setMetricView = (jobid, nodeid, metric, view) =>
if @metrics[jobid][nodeid]?
i = @metrics[jobid][nodeid].indexOf(metric.id)
i = _.findIndex(@metrics[jobid][nodeid], { id: metric.id }) if i == -1
@metrics[jobid][nodeid][i] = { id: metric.id, size: metric.size, view: view } if i != -1
@saveSetup() @saveSetup()
...@@ -148,7 +157,7 @@ angular.module('flinkApp') ...@@ -148,7 +157,7 @@ angular.module('flinkApp')
@getMetricsSetup = (jobid, nodeid) => @getMetricsSetup = (jobid, nodeid) =>
{ {
names: _.map(@metrics[jobid][nodeid], (value) => names: _.map(@metrics[jobid][nodeid], (value) =>
if _.isString(value) then { id: value, size: "small" } else value if _.isString(value) then { id: value, size: "small", view: "chart" } else value
) )
} }
......
...@@ -67,6 +67,11 @@ $metric-row-height = 180px + 85px ...@@ -67,6 +67,11 @@ $metric-row-height = 180px + 85px
background-color: transparent background-color: transparent
height: $metric-row-height height: $metric-row-height
position: relative position: relative
.metric-numeric
text-align: center;
margin-top: 75px;
font-size: 40px;
font-weight: bold;
.panel-heading .panel-heading
padding: 0px 10px padding: 0px 10px
......
...@@ -39,7 +39,7 @@ limitations under the License. ...@@ -39,7 +39,7 @@ limitations under the License.
</div> </div>
<ul ng-if="nodeid &amp;&amp; metrics.length &gt; 0" dnd-list="metrics" dnd-drop="dropped(event, index, item, external, type, external)" class="metric-row"> <ul ng-if="nodeid &amp;&amp; metrics.length &gt; 0" dnd-list="metrics" dnd-drop="dropped(event, index, item, external, type, external)" class="metric-row">
<li ng-repeat="metric in metrics track by metric.id" dnd-draggable="metric" dnd-dragstart="dragStart()" dnd-dragend="dragEnd()" dnd-canceled="dragEnd()" ng-class="{big: metric.size != 'small'}" class="metric-col"> <li ng-repeat="metric in metrics track by metric.id" dnd-draggable="metric" dnd-dragstart="dragStart()" dnd-dragend="dragEnd()" dnd-canceled="dragEnd()" ng-class="{big: metric.size != 'small'}" class="metric-col">
<metrics-graph metric="metric" window="window" get-values="getValues(metric.id)" remove-metric="removeMetric(metric)" set-metric-size="setMetricSize"></metrics-graph> <metrics-graph metric="metric" window="window" get-values="getValues(metric.id)" remove-metric="removeMetric(metric)" set-metric-size="setMetricSize" set-metric-view="setMetricView"></metrics-graph>
</li> </li>
</ul> </ul>
<div class="clearfix"></div> <div class="clearfix"></div>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册